效果图如下所示:
包的结构图如下(面向接口编程):
view层代码如下所示:
createInstance.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ include file="/easyui/easyui.jsp"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <title>中国石化云管控平台</title> <script type=‘text/javascript‘ src="${pageContext.request.contextPath}/js/commonUtil.js"></script> <script type="text/javascript"> var myForm; //Form var myunitDialog; var se1,se2; //--DOM加载完毕-- $(function(){ myForm=$(‘#ecs_add_form‘); initForm(); //加载Form if(""!=‘${ecs.imageid}‘&&null!=‘${ecs.imageid}‘&&‘${ecs.imageid}‘.indexOf(‘.vhd‘)<0){ setImageType(2); $("#imageType2").attr("checked","checked"); }else{ setImageType(1); $("#imageType1").attr("checked","checked"); } }); //function submitForm(){ function initForm(){ $("#ecs_add_form").form({ url:webContext +‘/ecs/ecs_createInstance.action‘, onSubmit: function () { var isValid = $(this).form(‘validate‘); if($(‘#ecs_add_form #imageid‘).val()==""){ alert("请选择镜像!"); return false; } return isValid; }, success: function (data) { data = jQuery.parseJSON(data); $.messager.progress(‘close‘); if(data.success){ Alert(‘提示‘,‘保存成功!‘); $(‘#ecs_window‘).dialog("close"); dataGridTable.datagrid("reload"); }else{ Alert(‘提示‘,‘保存失败:<br>‘+data.msg); } } }); } var count =0; function addDatadisk(){ if($("div[id^=‘datas_‘]").size()>=4){ alert("只能增加4块数据盘!"); return ; } count++; var div=‘<div id="datas_‘+count+‘" >云磁盘:<input type="text" name="datas" class="easyui-numberbox" data-options="min:5,max:2000,precision:0" style="width: 80px"> GB <a href="#" class="easyui-linkbutton" onclick="deleteData(\‘datas_‘+count+‘\‘)" data-options=\‘plain:true,iconCls:"icon-cancel"\‘>删除</a></div>‘; $("#datas").append(div); $.parser.parse($(‘#datas‘)); //重新渲染页面控件 } function deleteData(id){ count--; $("#"+id).remove(); } function setPas(value){ if(value==2){ $("#setPTr").hide(); $("#resetPTr").hide(); $(‘#password‘).val(""); $(‘#repassword‘).val(""); $(‘#password‘).validatebox({ required: false }); $(‘#repassword‘).validatebox({ required: false }); }else{ $("#setPTr").show(); $("#resetPTr").show(); $(‘#password‘).validatebox({ required: true }); $(‘#repassword‘).validatebox({ required: true }); } } function setImageType(value){ if(value==2){ $("#checkImage2").show(); $("#checkImage1").hide(); $(‘#imageidcombobox‘).combobox({ required: false }); }else{ $("#checkImage1").show(); $("#checkImage2").hide(); $(‘#imageidcombobox‘).combobox({ required: true }); } } if(‘${ecs.id}‘!=‘‘&&(‘${ecs.password}‘==null||‘${ecs.password}‘==‘‘)){ $("#setPTr").hide(); $("#resetPTr").hide(); $(‘#password‘).validatebox({ required: false }); $(‘#repassword‘).validatebox({ required: false }); } //选择单个用户 function chooseOneCreator(){ $(‘#creatorFrame‘)[0].src=webContext+‘/result/system/role/userSearchOneAdd.jsp‘; $(‘#sinopec_window_creator‘).dialog("open"); } $.extend($.fn.validatebox.defaults.rules, { /*必须和某个字段相等*/ equalTo: { validator: function (value, param) { return $(param[0]).val() == value; }, message: ‘两次输入密码不匹配‘ }, englishOrNum : { validator : function(value) { return /^(?=.*\d)(?=.*[a-z])(?=.*[A-Z]).{8,30}$/.test(value); }, message : ‘密码必须为8-30个字符,同时包含大小写字母和数字,不支持特殊符号‘ } }); //清空 function resetOneCreator(){ $(‘#responsible_id‘).val(""); $(‘#responsible_name‘).val(""); } function checkImage(){ var url=webContext +‘/result/pcitcAliyun/ecs/imageList.jsp‘; $("#ecs_add_form").after("<div id=‘checkImage‘ style=‘padding:10px;width:470px;top: 100px;left: 400px‘></div>"); $("#checkImage").dialog({ href: encodeURI(url), title: "选择镜像", modal: false, // minimizable:true, collapsible: true, height: document.body.clientHeight * 0.8, width: document.body.clientWidth * 0.8, top: 50, left: 200, cache: false, resizable: false, onClose: function () { $("#checkImage").dialog("destroy"); }, buttons: [ { text:‘确定‘, iconCls:‘icon-save‘, handler:function(){ var selected=$(‘#imageList_list‘).datagrid(‘getSelections‘); if(selected.length==0){ Alert(‘你没有选择任何镜像!‘); return false; }else{ $(‘#ecs_add_form #imageid‘).val(selected[0].imageid); $(‘#ecs_add_form #imagename‘).val(selected[0].imagename); $(‘#ecs_add_form #imagedescription‘).html(selected[0].imagename); $("#checkImage").dialog(‘close‘); } } }, { text: ‘取消‘, iconCls: ‘icon-cancel‘, handler: function () { $("#checkImage").dialog(‘close‘); } } ] }); } </script> </head> <body> <div style="height: 100%;overflow: auto;margin: 0px;padding: 0px;"> <form id="ecs_add_form" class="easyui-form" method="post"> <input type="hidden" name="ecs.id" id="id" value="${ecs.id}" /> <input type="hidden" name="ecs.instanceid" id="instanceid" value="${ecs.instanceid}" /> <input type="hidden" name="ecs.systemdiskcategory" id="systemdiskcategory" value="cloud"/> <input type="hidden" name="ecs.regionname" id="regionname" value="${ecs.regionname}" /> <input type="hidden" name="ecs.zonename" id="zonename" value="${ecs.zonename}" /> <input type="hidden" name="ecs.instancetypename" id="instancetypename" value="${ecs.instancetypename}"/> <input type="hidden" name="ecs.imageid" id="imageid" value="${ecs.imageid}"/> <input type="hidden" name="ecs.imagename" id="imagename" value="${ecs.imagename}"/> <span style="color:blue; ">基本信息:</span><hr/> <table class=‘sinopec_search_panel‘ border="0" width="100%" style="padding: 10px"> <tr> <td width="100px" align="right" ><nobr>系统名称:</nobr></td> <td width="300px"> <input class="easyui-textbox" style="width: 200px" type="text" name="ecs.systemname" data-options="required:true" value="${ecs.systemname}"></input> </td> </tr> <tr> <td align="right" > <label class="control-label">地域:</label></td> <td> <input id="regionid" name="ecs.regionid" class="easyui-combobox" style="width: 200px" value="${ecs.regionid}" required="required" data-options=" valueField: ‘code_value‘, textField: ‘code_name‘, editable:false, url:webContext+‘/system/sysCodeAction!getCodeNameValueByCodeType.action?code_name_id=Aliyun_Regions‘, onSelect: function(rec){ if(rec.code_value){ $(‘#regionname‘).val(rec.code_name); } }"/> </td> <td align="right" ><nobr>可用区:</nobr></td> <td> <input id="zoneid" name="ecs.zoneid" class="easyui-combobox" style="width: 200px" value="${ecs.zoneid}" required="required" data-options=" valueField: ‘code_value‘, textField: ‘code_name‘, editable:false, url:webContext+‘/system/sysCodeAction!getCodeNameValueByCodeType.action?code_name_id=Aliyun_Zones‘, onSelect: function(rec){ if(rec.code_value){ $(‘#zonename‘).val(rec.code_name); } }"/> </td> </tr> <tr> <td align="right" ><nobr>配置:</nobr></td> <td> <input id="instancetype" name="ecs.instancetype" class="easyui-combobox" style="width: 200px" value="${ecs.instancetype}" required="required" data-options=" valueField: ‘code_value‘, textField: ‘code_name‘, editable:false, url:webContext+‘/system/sysCodeAction!getCodeNameValueByCodeType.action?code_name_id=Aliyun_InstanceType‘, onSelect: function(rec){ if(rec.code_value){ $(‘#instancetypename‘).val(rec.code_name); } }"/> </td> <!-- <td align="right" ><nobr>公网带宽: </nobr></td> <td > <input value="${ecs.internetmaxbandwidthout}" name="ecs.internetmaxbandwidthout" class="easyui-numberspinner" value=‘0‘ style="width:80px;" data-options="increment:1,min:0,max:200,editable:true"></input> Mbps </td> --> </tr> </table> <div style="color:blue; ">网络:</div><hr/> <table class=‘sinopec_search_panel‘ border="0" width="100%" style="padding: 10px"> <tr> <td width="100px" align="right"><nobr>虚拟交换机:</nobr></td> <td width="300px"> <input id="vswitchid" name="ecs.vswitchid" class="easyui-combobox" style="width: 300px" value="${ecs.vswitchid}" required="required" data-options=" valueField: ‘key‘, textField: ‘value‘, editable:false, url:webContext+‘/vpc/vswitch_getAllSWitchLst.action‘, onSelect: function(rec){ if(rec.key){ var url = ‘${pageContext.request.contextPath}/vpc/securitygroup_getAllGroupLst.action?vswitchid=‘+rec.key; $(‘#securitygroupid‘).combobox(‘clear‘); $(‘#securitygroupid‘).combobox(‘reload‘, url); } }"/> </td> <td align="right"><nobr>安全组:</nobr></td> <td > <input id="securitygroupid" name="ecs.securitygroupid" class="easyui-combobox" style="width: 300px" value="${ecs.securitygroupid}" required="required" data-options=" valueField: ‘key‘, textField: ‘value‘, editable:false, url:webContext+‘/vpc/securitygroup_getAllGroupLst.action‘, onSelect: function(rec){ if($(‘#vswitchid‘).combobox(‘getValue‘)==null||$(‘#vswitchid‘).combobox(‘getValue‘)==‘‘){ alert(‘请先选择虚拟交换机‘); } /**if(rec.key){ var url = ‘${pageContext.request.contextPath}/vpc/vswitch_getAllSWitchLst.action?securitygroupid=‘+rec.key; $(‘#vswitchid‘).combobox(‘clear‘); $(‘#vswitchid‘).combobox(‘reload‘, url); }*/ }"/> </td> </tr> </table> <span style="color:blue; ">镜像:</span><hr/> <table class=‘sinopec_search_panel‘ border="0" width="100%" style="padding: 10px"> <tr> <td width="100px" align="right">镜像类型:</td> <td > <input type="radio" onclick="setImageType(1)" id="imageType1" name="imageType" value="1" checked>公共镜像 <input type="radio" onclick="setImageType(2)" id="imageType2" name="imageType" value="2" >自定义镜像 </td> </tr> <tr id="checkImage1"> <td width="100px" align="right">选择系统:</td> <td > <input id="imageidcombobox" class="easyui-combobox" style="width: 200px" value="${ecs.imageid}" required="required" data-options=" valueField: ‘code_value‘, textField: ‘code_name‘, editable:false, url:webContext+‘/system/sysCodeAction!getCodeNameValueByCodeType.action?code_name_id=Aliyun_ImageId_Window‘, onSelect: function(rec){ if(rec.code_value){ $(‘#imageid‘).val(rec.code_value); $(‘#imagename‘).val(rec.code_name); } }"/> </td> </tr> <tr id="checkImage2"> <td width="100px" align="right">镜像名称:</td> <td ><div id="imagedescription">${ecs.imagename}</div><a href="javascript:void(0)" class="easyui-linkbutton" onclick="checkImage()" data-options="iconCls:‘icon-edit‘">选择镜像</a> </td> </tr> </table> <div style="color:blue; ">储存:</div><hr/> <table class=‘sinopec_search_panel‘ border="0" width="100%" style="padding: 10px"> <tr> <td align="right" ><nobr>数据盘:</nobr></td> <td id="datas"> <a href="javascript:void(0)" onclick="addDatadisk()">+增加一块</a> 您一共可增加4块,每块可配置5~2000GB,不支持卸载 <s:iterator id="datadisk" value="#request.dataList" status="c"> <s:if test="disktype==1"> <div id="datas_datadisk_<s:property value=‘#c.count‘/>" >云磁盘:<input type="text" name="datas" class="easyui-numberbox" data-options="min:5,max:2000,precision:0" value="<s:property value=‘size‘/>" style="width: 80px"> GB <a href="#" class="easyui-linkbutton" onclick="deleteData(‘datas_datadisk_<s:property value="#c.count"/>‘)" data-options=‘plain:true,iconCls:"icon-cancel"‘>删除</a></div> </s:if> </s:iterator> </td> </tr> </table> <div style="color:blue; ">密码:</div><hr/> <table class=‘sinopec_search_panel‘ border="0" width="100%" style="padding: 10px"> <tr> <td width="100px" align="right">设置密码:</td> <td > <input type="radio" onclick="setPas(1)" id="sex" name="sex" value="1" checked>立即设置 <input type="radio" onclick="setPas(2)" id="sex" name="sex" value="2" <s:if test="ecs.password==‘‘">checked</s:if> >创建后设置 </td> </tr> <tr id="setPTr"> <td align="right" ><nobr>登录密码:</nobr></td> <td ><input type="text" style="width: 150px" type="password" name="ecs.password" id="password" validType="englishOrNum" class="easyui-validatebox" value="${ecs.password}" required="required"> 密码必须为8-30个字符,同时包含大小写字母和数字,不支持特殊符号</td> </tr> <tr id="resetPTr"> <td align="right" ><nobr>确认密码:</nobr></td> <td ><input type="text" style="width: 150px" type="password" id="repassword" value="${ecs.password}" class="easyui-validatebox" required="required" validType="equalTo[‘#password‘]" invalidMessage="两次输入密码不匹配"></td> </tr> <tr> <td width="100px" align="right" ><nobr>实例名称:</nobr></td> <td ><input type="text" class="easyui-validatebox" style="width: 200px" name="ecs.instancename" id="instancename" required="required" value="${ecs.instancename}" title="[2,128]英文或中文字符,必须以大小字母或中文开头,可包含数字,“.”,“_”或“-”。 如果没有指定该参数,默认值为实例的InstanceId 不能以http:// 和https:// 开头。"></td> </tr> </table> <div style="color:blue; ">其他信息:</div><hr/> <table class=‘sinopec_search_panel‘ border="0" width="100%" style="padding: 10px"> <tr> <td width="100px" align="right" ><nobr>责任人:</nobr></td> <td><nobr> <s:if test="#request.applyInfo==null"> <input type="text" name="ecs.responsible_name" id="responsible_name" readonly title="请点击选择按钮" class="easyui-validatebox" size="8" value="${sessionScope.username_ecs}" /> </s:if> <s:else> <input type="text" name="ecs.responsible_name" id="responsible_name" readonly title="请点击选择按钮" class="easyui-validatebox" size="8" value="${ecs.responsible_name}" /> </s:else> <input type="hidden" name="ecs.responsible_id" id="responsible_id" class="easyui-validatebox" size="8" value="${ecs.responsible_id}" /> <input type="button" class="btn" onclick="chooseOneCreator();" value="选择" /></nobr> <input type="button" class="btn" onclick="resetOneCreator();" value="清空" /></nobr> </td> </tr> <tr> <td width="100px" align="right" ><nobr>备注:</nobr></td> <td ><textarea id="description" name="ecs.description" cols="20" rows="5" style="width: 200px" data-prompt-position="topRight:-70" title="[2, 256] 个字符,不能以 http:// 和 https:// 开头">${ecs.description}</textarea></td> </tr> <s:if test="#request.applyInfo==null"> <tr> <td width="100px" align="right" ><nobr>申请数量:</nobr></td> <td > <input name="instanceCount" class="easyui-numberspinner" value=‘1‘ style="width:80px;" data-options="increment:1,min:1,editable:true"></input> </td> </tr> </s:if> <!-- <tr> <td> </td> <td> <a id="submitB" href="javascript:void(0)" class="easyui-linkbutton" onclick="submitForm()" data-options="iconCls:‘icon-save‘">确认</a> </td> </tr> --> </table> </form> </div> </body> </html>
entity层代码如下所示:
AliEcsInstance.java
package com.aliyun.pcitcAliyun.ecs.model; import java.text.ParseException; import java.util.Date; import com.aliyun.util.DateUtil; import com.sinopec.common.model.Page; public class AliEcsInstance extends Page{ private int id; private String instanceid; private String instancename; private String description; private String regionid; private String regionname; private String zoneid; private String zonename; private String imageid; private String imagename; private String instancetype; private String instancetypename; private String securitygroupid; private String securityGroupIds; private String internetchargetype; private String internetmaxbandwidthin; private String internetmaxbandwidthout; private String hostname; private String password; private String systemdiskcategory; private String systemdiskdiskname; private String systemdiskdescription; private String vswitchid; private String systemcode; private String systemname; private String remark; private String creator_id; private String creator_name; private String creator_dep; private String creator_depname; private Date create_time; private String state; private String status; private Date submit_time; private String privateipaddress_ip; private String natipaddress; private String eip; private String responsible_id; private String responsible_name; private String startupCount; //不跟数据库对应字段 private Date start_time; private Date end_time; private String vpcid; private String loadbalancerid; private String vswitchname; private String vncUrl; /** * 阿里创建时间 */ private String creationTime; /** * 阿里云资源是否在本地数据库中存在 * 0:不存在;1:存在; */ Integer existInDB; public String getVpcid() { return vpcid; } public void setVpcid(String vpcid) { this.vpcid = vpcid; } public String getStartupCount() { return startupCount; } public void setStartupCount(String startupCount) { this.startupCount = startupCount; } public String getVswitchname() { return vswitchname; } public void setVswitchname(String vswitchname) { this.vswitchname = vswitchname; } public Date getStart_time() { return start_time; } public void setStart_time(Date start_time) { this.start_time = start_time; } public Date getEnd_time() { return end_time; } public void setEnd_time(Date end_time) { this.end_time = end_time; } public int getId() { return id; } public void setId(int id) { this.id = id; } public String getInstanceid() { return instanceid; } public void setInstanceid(String instanceid) { this.instanceid = instanceid; } public String getInstancename() { return instancename; } public void setInstancename(String instancename) { this.instancename = instancename; } public String getDescription() { return description; } public void setDescription(String description) { this.description = description; } public String getRegionid() { return regionid; } public void setRegionid(String regionid) { this.regionid = regionid; } public String getRegionname() { return regionname; } public String getResponsible_id() { return responsible_id; } public void setResponsible_id(String responsible_id) { this.responsible_id = responsible_id; } public String getResponsible_name() { return responsible_name; } public void setResponsible_name(String responsible_name) { this.responsible_name = responsible_name; } public void setRegionname(String regionname) { this.regionname = regionname; } public String getZoneid() { return zoneid; } public void setZoneid(String zoneid) { this.zoneid = zoneid; } public String getZonename() { return zonename; } public void setZonename(String zonename) { this.zonename = zonename; } public String getImageid() { return imageid; } public void setImageid(String imageid) { this.imageid = imageid; } public String getImagename() { return imagename; } public void setImagename(String imagename) { this.imagename = imagename; } public String getInstancetype() { return instancetype; } public void setInstancetype(String instancetype) { this.instancetype = instancetype; } public String getInstancetypename() { return instancetypename; } public void setInstancetypename(String instancetypename) { this.instancetypename = instancetypename; } public String getSecuritygroupid() { return securitygroupid; } public void setSecuritygroupid(String securitygroupid) { this.securitygroupid = securitygroupid; } public String getInternetchargetype() { return internetchargetype; } public void setInternetchargetype(String internetchargetype) { this.internetchargetype = internetchargetype; } public String getInternetmaxbandwidthin() { return internetmaxbandwidthin; } public void setInternetmaxbandwidthin(String internetmaxbandwidthin) { this.internetmaxbandwidthin = internetmaxbandwidthin; } public String getInternetmaxbandwidthout() { return internetmaxbandwidthout; } public void setInternetmaxbandwidthout(String internetmaxbandwidthout) { this.internetmaxbandwidthout = internetmaxbandwidthout; } public String getHostname() { return hostname; } public void setHostname(String hostname) { this.hostname = hostname; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } public String getSystemdiskcategory() { return systemdiskcategory; } public void setSystemdiskcategory(String systemdiskcategory) { this.systemdiskcategory = systemdiskcategory; } public String getSystemdiskdiskname() { return systemdiskdiskname; } public void setSystemdiskdiskname(String systemdiskdiskname) { this.systemdiskdiskname = systemdiskdiskname; } public String getSystemdiskdescription() { return systemdiskdescription; } public void setSystemdiskdescription(String systemdiskdescription) { this.systemdiskdescription = systemdiskdescription; } public String getVswitchid() { return vswitchid; } public void setVswitchid(String vswitchid) { this.vswitchid = vswitchid; } public String getSystemcode() { return systemcode; } public void setSystemcode(String systemcode) { this.systemcode = systemcode; } public String getSystemname() { return systemname; } public void setSystemname(String systemname) { this.systemname = systemname; } public String getRemark() { return remark; } public void setRemark(String remark) { this.remark = remark; } public String getCreator_id() { return creator_id; } public void setCreator_id(String creator_id) { this.creator_id = creator_id; } public String getCreator_name() { return creator_name; } public void setCreator_name(String creator_name) { this.creator_name = creator_name; } public String getCreator_dep() { return creator_dep; } public void setCreator_dep(String creator_dep) { this.creator_dep = creator_dep; } public String getCreator_depname() { return creator_depname; } public void setCreator_depname(String creator_depname) { this.creator_depname = creator_depname; } public Date getCreate_time() { return create_time; } public void setCreate_time(Date create_time) { this.create_time = create_time; } public String getState() { return state; } public void setState(String state) { this.state = state; } public String getStatus() { return status; } public void setStatus(String status) { this.status = status; } public Date getSubmit_time() { return submit_time; } public void setSubmit_time(Date submit_time) { this.submit_time = submit_time; } public String getPrivateipaddress_ip() { return privateipaddress_ip; } public void setPrivateipaddress_ip(String privateipaddress_ip) { this.privateipaddress_ip = privateipaddress_ip; } public String getNatipaddress() { return natipaddress; } public void setNatipaddress(String natipaddress) { this.natipaddress = natipaddress; } public String getEip() { return eip; } public void setEip(String eip) { this.eip = eip; } public Integer getExistInDB() { return existInDB; } public void setExistInDB(Integer existInDB) { this.existInDB = existInDB; } public String getSecurityGroupIds() { return securityGroupIds; } public void setSecurityGroupIds(String securityGroupIds) { this.securityGroupIds = securityGroupIds; } public String getCreationTime() { String str = ""; if(creationTime != null) { String tempDateStr = creationTime.replace("T", " ").replace("Z", ""); try { str = DateUtil.getDateTime(DateUtil.getBeiJingTime(DateUtil.string2Date(tempDateStr))); } catch (ParseException e) { e.printStackTrace(); } } return str; } public void setCreationTime(String creationTime) { this.creationTime = creationTime; } public String getLoadbalancerid() { return loadbalancerid; } public void setLoadbalancerid(String loadbalancerid) { this.loadbalancerid = loadbalancerid; } public String getVncUrl() { return vncUrl; } public void setVncUrl(String vncUrl) { this.vncUrl = vncUrl; } }
action层代码如下所示:
EcsAction.java
/** * ECS 创建实例 * * @return */ public String createInstance() { try { HttpServletRequest request = ServletActionContext.getRequest(); String instanceCount = request.getParameter("instanceCount"); String datas[] = request.getParameterValues("datas"); ecs.setCreate_time(new Date()); ecs.setState("0"); // ecs.setInternetchargetype("PayByBandwidth"); ecs.setCreator_id(SessionUtilMap.getLoginUser().getUser_id()); ecs.setCreator_name(SessionUtilMap.getLoginUser().getUser_name()); ecs.setCreator_dep(SessionUtilMap.getLoginUser().getUnit_id()); ecs.setCreator_depname(SessionUtilMap.getLoginUser().getUnit_name()); ecs.setStartupCount("0"); if (ecs.getId() != 0) {// 修改 ecsManager.updateInstance(ecs, datas); } else {// 新增 //String Instancename = ecs.getInstancename(); if (new Integer(instanceCount) > 1) { for (int i = 0; i < new Integer(instanceCount); i++) { //ecs.setInstancename(Instancename + (i + 1)); ecsManager.insertInstance(ecs, datas); } } else { //ecs.setInstancename(Instancename); ecsManager.insertInstance(ecs, datas); } } simpleJSON.put("success", true); } catch (Exception e) { simpleJSON.put("success", false); simpleJSON.put("msg", e.getMessage()); } return SUCCESS; }
JsonPage.java
package com.sinopec.common.model; import java.util.ArrayList; import java.util.Date; import java.util.List; import net.sf.json.JSON; import net.sf.json.JSONObject; import net.sf.json.JSONSerializer; import net.sf.json.JsonConfig; /** * 封装结果集的对象,用于转换为jQuery Easy UI的json对象 * @param <T> * create at 2012-9-12 下午01:47:47 * @author wanghe */ public class JsonPage<T> { private JsonConfig config = new JsonConfig(); /** * 记录总数 */ private int total; /** * 结果集 */ private List<T> rows = new ArrayList<T>(); public JsonPage(){ super(); config.registerJsonValueProcessor(Date.class,new DateJsonValueProcessor("yyyy-MM-dd")); config.setExcludes(new String[]{"config"}); } public JsonPage(String formate){ this(); config.registerJsonValueProcessor(Date.class,new DateJsonValueProcessor(formate)); } public JsonPage(List<T> rows,int total){ this(); this.total = total; this.rows = rows; } public int getTotal() { return total; } public void setTotal(int total) { this.total = total; } public List<T> getRows() { return rows; } public void setRows(List<T> rows) { this.rows = rows; } public JsonConfig getConfig() { return config; } public void setConfig(JsonConfig config) { this.config = config; } public JSON toJson(){ return JSONSerializer.toJSON(this, config); } public JSONObject toJsonObject(){ return JSONObject.fromObject(this, config); } }
QueryAction.java
package com.sinopec.common.action; import java.util.ArrayList; import java.util.Date; import java.util.List; import javax.servlet.http.HttpServletRequest; import net.sf.json.JSON; import net.sf.json.JSONObject; import net.sf.json.JsonConfig; import org.apache.struts2.ServletActionContext; import com.opensymphony.xwork2.ActionSupport; import com.sinopec.common.model.DateJsonValueProcessor; import com.sinopec.common.prossBar.manager.ProcessBarManager; import com.sinopec.common.prossBar.model.ProceBarPercent; import com.sinopec.common.util.StringUtil; public abstract class QueryAction extends ActionSupport { protected ProcessBarManager processBarManagerImp; private static final long serialVersionUID = -6604170344271862481L; /** * 返回的结果 */ private JSON result; private JsonConfig config = new JsonConfig(); /** * 简单返回结果用,在不设置result时使用 */ public JSONObject simpleJSON = new JSONObject(); /** * 页数 */ private int pageNo; /** * 记录数 */ private int pageSize; /** * 排序字段 */ private String sort; /** * 排序方式(desc?asc) */ private String order; public int getPage() { return pageNo; } /** * 分页起始结果数 * * @return * int * create at 2012-9-14 上午11:09:25 * @author wanghe */ public int getStart() { return (pageNo-1)*pageSize; } /** * 分页最大结果数 * * @return * int * create at 2012-9-14 上午11:09:35 * @author wanghe */ public int getEnd() { return pageNo*pageSize; } public void setPage(int page) { this.pageNo = page; } public int getRows() { return pageSize; } public void setRows(int rows) { this.pageSize = rows; } public String getSort() { return sort; } public void setSort(String sort) { this.sort = sort; } public String getOrder() { return order; } public void setOrder(String order) { this.order = order; } public JSON getResult() { return result==null?simpleJSON:result; } /** * 设置返回的JSON对象 * @param result * void * create at 2012-10-19 上午11:28:46 * @author wanghe */ public void setResult(JSON result) { this.result = result; } public void setResult(Object result,String formate) { config.registerJsonValueProcessor(Date.class,new DateJsonValueProcessor(formate)); this.result = JSONObject.fromObject(result, config); } /** * 设置要返回的对象,此方法会将传递进来的对象解析成JSON格式 * @param model * void * create at 2012-10-19 上午11:28:55 * @author wanghe */ public void setModel(Object model) { this.result = JSONObject.fromObject(model); } /** * 传入一个ID字符串(以,号连接的),解析后,返回ID集合 * @param array * @return * List<String> * create at 2012-10-11 下午05:16:09 * @author wanghe */ public List<String> toList(String array){ ArrayList<String> list = new ArrayList<String>(); if(array!=null){ for (String string : array.split(",")) { list.add(string); } } return list; } protected List<String> toList(String[]idarray){ List<String> idList=new ArrayList<String>(); if(idarray!=null) for(String id:idarray){ idList.add(id); } return idList; } /** * 将以,或者空格分隔的字符串解析成字符数组 * @param str 以,或者空格分隔的字符串 * @return 字符数组 * @author hanxg * @date 2014-2-13 */ protected List<String> split(String str){ if(StringUtil.isEmpty(str)) return null; String[] arr = StringUtil.format(str).split("[\\s,]+", 0); List<String> list = new ArrayList<String>(); for(String s:arr){ if(!StringUtil.format(s).equals("")) list.add(s); } return list; } /** * 开始导入校验 * @return */ public String processCheck(){ HttpServletRequest request = ServletActionContext.getRequest(); String guid=request.getParameter("guid"); Object obj=request.getSession().getAttribute(guid); if(obj!=null){ simpleJSON.put("processState",true); }else{ ProceBarPercent proceBarPercent=new ProceBarPercent(); request.getSession().setAttribute(guid,proceBarPercent); simpleJSON.put("processState",true); } return SUCCESS; } /** * 获取进程进度的方法 默认的方法 阶段性处理 * @return */ public String getDefPersent(){ HttpServletRequest request = ServletActionContext.getRequest(); String guid=request.getParameter("guid"); ProceBarPercent proceBarPercent=(ProceBarPercent)request.getSession().getAttribute(guid); while(proceBarPercent.getNextPercent()==0){ try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } } simpleJSON.put("currentPercent",proceBarPercent.getDefPersent().getCurrentPercent()); simpleJSON.put("isHasValidatePass",proceBarPercent.isHasValidatePass()); proceBarPercent.setNextPercent(0); return SUCCESS; } /** * 获取进程进度的方法 校验 条条进行 * @return */ public String getValidatePersent(){ HttpServletRequest request = ServletActionContext.getRequest(); String guid=request.getParameter("guid"); ProceBarPercent proceBarPercent=(ProceBarPercent)request.getSession().getAttribute(guid); while(proceBarPercent.getNextPercent()==0){ try { Thread.sleep(500); } catch (InterruptedException e) { e.printStackTrace(); } } simpleJSON.put("currentPercent",proceBarPercent.getValidatePersent().getCurrentPercent()); simpleJSON.put("isHasValidatePass",proceBarPercent.isHasValidatePass()); proceBarPercent.setNextPercent(0); return SUCCESS; } /** * 获取进程进度的方法 导入 * @return */ public String getImportPersent(){ HttpServletRequest request = ServletActionContext.getRequest(); String guid=request.getParameter("guid"); ProceBarPercent proceBarPercent=(ProceBarPercent)request.getSession().getAttribute(guid); this.setResult(JSONObject.fromObject(proceBarPercent.getValidatePersent())); return SUCCESS; } public ProcessBarManager getProcessBarManager() { return processBarManagerImp; } public void setProcessBarManager(ProcessBarManager processBarManagerImp) { this.processBarManagerImp = processBarManagerImp; } }
manager层代码如下所示:
EcsManager.java
/** * ECS 创建实例 * * @param ecs * @return */ void insertInstance(AliEcsInstance ecs, String[] datas);
manager impl层代码如下所示:
EcsManagerImp.java
/** * ECS 创建实例 * * @param ecs * @return */ @Override public void insertInstance(AliEcsInstance ecs, String[] datas) { int instanceId = ecsDao.insertInstance(ecs); List<AliDisk> list = new ArrayList<AliDisk>(); // 系统盘 AliDisk ed = new AliDisk(); ed.setEcs_instance_id(instanceId); ed.setDisktype("0"); ed.setType("system"); ed.setDiskname("Disk_0"); ed.setSize(40); ed.setPortable("false"); ed.setZoneid(ecs.getZoneid()); ed.setRegionid(ecs.getRegionid()); ed.setCreator_id(ecs.getCreator_id()); ed.setCreator_name(ecs.getCreator_name()); ed.setCreator_dep(ecs.getCreator_dep()); ed.setCreator_depname(ecs.getCreator_depname()); ed.setCreate_time(new Date()); ed.setSerialnumber("0"); ed.setStatus("Creating"); list.add(ed); // 数据盘 if (datas != null && datas.length > 0) { for (int i = 0; i < datas.length; i++) { AliDisk e = new AliDisk(); e.setEcs_instance_id(instanceId); e.setSize(new Integer(datas[i])); e.setSerialnumber("" + (i + 1)); e.setDiskname("Disk_" + e.getSerialnumber()); e.setPortable("true"); e.setType("data"); e.setDisktype("1"); e.setZoneid(ecs.getZoneid()); e.setRegionid(ecs.getRegionid()); e.setCreator_id(ecs.getCreator_id()); e.setCreator_name(ecs.getCreator_name()); e.setCreator_dep(ecs.getCreator_dep()); e.setCreator_depname(ecs.getCreator_depname()); e.setCreate_time(new Date()); e.setStatus("Creating"); list.add(e); } } ecsDao.insertDatadiskList(list); // 安全组关系表 if (ecs.getSecuritygroupid() != null) { AliEcsSecuritygroup sg = new AliEcsSecuritygroup(); sg.setSecuritygroupid(ecs.getSecuritygroupid()); sg.setEcs_instance_id(ecs.getId()); sg.setInstanceid(ecs.getInstanceid()); sg.setCreate_time(new Date()); sg.setCreator_id(ecs.getCreator_id()); sg.setCreator_name(ecs.getCreator_name()); sg.setCreator_dep(ecs.getCreator_dep()); sg.setCreator_depname(ecs.getCreator_depname()); ecsDao.insertAliEcsSecuritygroup(sg); } }
dao层代码如下所示:
EcsDao.java
/** * ECS 创建实例 * * @param ecs * @return */ int insertInstance(AliEcsInstance ecs); void insertDatadiskList(List<AliDisk> datas); void insertAliEcsSecuritygroup(AliEcsSecuritygroup sg);
dao impl层代码如下所示:
EcsDaoImp.java
/** * ECS 创建实例 */ @Override public int insertInstance(AliEcsInstance ecs) { return Integer.parseInt(this.getSqlMapClientTemplate() .insert("insertAliEcsInstance", ecs).toString()); } @Override public void insertDatadiskList(final List<AliDisk> datas) { this.getSqlMapClientTemplate().execute(new SqlMapClientCallback() { @Override public Object doInSqlMapClient(SqlMapExecutor executor) throws SQLException { executor.startBatch(); for (int i = 0; i < datas.size(); i++) { executor.insert("insertAliDisk", datas.get(i)); } return executor.executeBatch(); } }); } @Override public void insertAliEcsSecuritygroup(AliEcsSecuritygroup sg) { this.getSqlMapClientTemplate().insert("insertAliEcsSecuritygroup", sg); }
ibatis代码如下所示:
page.xml
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE sqlMap PUBLIC "-//iBATIS.com//DTD SQL Map 2.0//EN" "http://ibatis.apache.org/dtd/sql-map-2.dtd"> <sqlMap namespace="page"> <!-- <sql id="pageStart"> <isNotNull property="start"> select * from ( select sun.* ,Rownum r from ( </isNotNull> </sql> <sql id="pageEnd"> <isNotNull property="start"> ) sun where Rownum <![CDATA[<= ]]> #end# ) super where super.r> #start# </isNotNull> </sql> --> <sql id="pageStart"> </sql> <sql id="pageEnd"> <isNotNull property="start"> limit #start#,#pageSize# </isNotNull> </sql> </sqlMap>
AliEcsInstance.xml
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE sqlMap PUBLIC "-//iBATIS.com//DTD SQL Map 2.0//EN" "http://ibatis.apache.org/dtd/sql-map-2.dtd"> <sqlMap namespace="AliEcsInstance"> <typeAlias alias="AliEcsInstance" type="com.aliyun.pcitcAliyun.ecs.model.AliEcsInstance"/> <resultMap id="result" class="AliEcsInstance"> <result property="id" column="ID"/> <result property="instanceid" column="INSTANCEID"/> <result property="instancename" column="INSTANCENAME"/> <result property="description" column="DESCRIPTION"/> <result property="regionid" column="REGIONID"/> <result property="regionname" column="REGIONNAME"/> <result property="zoneid" column="ZONEID"/> <result property="zonename" column="ZONENAME"/> <result property="imageid" column="IMAGEID"/> <result property="imagename" column="IMAGENAME"/> <result property="instancetype" column="INSTANCETYPE"/> <result property="instancetypename" column="INSTANCETYPENAME"/> <result property="securitygroupid" column="SECURITYGROUPID"/> <result property="internetchargetype" column="INTERNETCHARGETYPE"/> <result property="internetmaxbandwidthin" column="INTERNETMAXBANDWIDTHIN"/> <result property="internetmaxbandwidthout" column="INTERNETMAXBANDWIDTHOUT"/> <result property="hostname" column="HOSTNAME"/> <result property="password" column="PASSWORD"/> <result property="systemdiskcategory" column="SYSTEMDISKCATEGORY"/> <result property="systemdiskdiskname" column="SYSTEMDISKDISKNAME"/> <result property="systemdiskdescription" column="SYSTEMDISKDESCRIPTION"/> <result property="vswitchid" column="VSWITCHID"/> <result property="systemcode" column="SYSTEMCODE"/> <result property="systemname" column="SYSTEMNAME"/> <result property="remark" column="REMARK"/> <result property="creator_id" column="CREATOR_ID"/> <result property="creator_name" column="CREATOR_NAME"/> <result property="creator_dep" column="CREATOR_DEP"/> <result property="creator_depname" column="CREATOR_DEPNAME"/> <result property="create_time" column="CREATE_TIME"/> <result property="state" column="STATE"/> <result property="status" column="STATUS"/> <result property="submit_time" column="SUBMIT_TIME"/> <result property="privateipaddress_ip" column="PRIVATEIPADDRESS_IP"/> <result property="natipaddress" column="NATIPADDRESS"/> <result property="eip" column="EIP"/> <result property="responsible_name" column="responsible_name"/> <result property="responsible_id" column="responsible_id"/> <result property="startupCount" column="startupCount"/> </resultMap> <resultMap id="oneresult" extends="result" class="AliEcsInstance" > <result property="vswitchname" column="vswitchname"/> </resultMap> <insert id="insertAliEcsInstance" parameterClass="AliEcsInstance"> insert into ali_ecs_instance (INSTANCEID,INSTANCENAME,DESCRIPTION,REGIONID,REGIONNAME,ZONEID,ZONENAME,IMAGEID,IMAGENAME,INSTANCETYPE,INSTANCETYPENAME,SECURITYGROUPID,INTERNETCHARGETYPE,INTERNETMAXBANDWIDTHIN,INTERNETMAXBANDWIDTHOUT,HOSTNAME,PASSWORD,SYSTEMDISKCATEGORY,SYSTEMDISKDISKNAME,SYSTEMDISKDESCRIPTION,VSWITCHID,SYSTEMCODE,SYSTEMNAME,REMARK,CREATOR_ID,CREATOR_NAME,CREATOR_DEP,CREATOR_DEPNAME,CREATE_TIME,STATE,STATUS,SUBMIT_TIME,responsible_id,responsible_name,startupCount) values(#instanceid#,#instancename#,#description#,#regionid#,#regionname#,#zoneid#,#zonename#,#imageid#,#imagename#,#instancetype#,#instancetypename#,#securitygroupid#,#internetchargetype#,#internetmaxbandwidthin#,#internetmaxbandwidthout#,#hostname#,#password#,#systemdiskcategory#,#systemdiskdiskname#,#systemdiskdescription#,#vswitchid#,#systemcode#,#systemname#,#remark#,#creator_id#,#creator_name#,#creator_dep#,#creator_depname#,now(),#state#,#status#,#submit_time#,#responsible_id#,#responsible_name#,#startupCount#) <selectKey resultClass="int" keyProperty="id" > SELECT @@IDENTITY AS id </selectKey> </insert> </select> </sqlMap>
AliDisk.xml
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE sqlMap PUBLIC "-//iBATIS.com//DTD SQL Map 2.0//EN" "http://ibatis.apache.org/dtd/sql-map-2.dtd"> <sqlMap namespace="AliDisk"> <typeAlias alias="AliDisk" type="com.aliyun.pcitcAliyun.ecs.model.AliDisk"/> <resultMap id="result" class="AliDisk"> <result property="id" column="ID"/> <result property="ecs_instance_id" column="ECS_INSTANCE_ID"/> <result property="regionid" column="REGIONID"/> <result property="zoneid" column="ZONEID"/> <result property="diskname" column="DISKNAME"/> <result property="description" column="DESCRIPTION"/> <result property="size" column="SIZE"/> <result property="snapshotid" column="SNAPSHOTID"/> <result property="clienttoken" column="CLIENTTOKEN"/> <result property="diskid" column="DISKID"/> <result property="instanceId" column="INSTANCEID"/> <result property="device" column="DEVICE"/> <result property="deletewithinstance" column="DELETEWITHINSTANCE"/> <result property="deleteautosnapshot" column="DELETEAUTOSNAPSHOT"/> <result property="enableautosnapshot" column="ENABLEAUTOSNAPSHOT"/> <result property="imageid" column="IMAGEID"/> <result property="type" column="TYPE"/> <result property="category" column="CATEGORY"/> <result property="status" column="STATUS"/> <result property="creationtime" column="CREATIONTIME"/> <result property="attachedtime" column="ATTACHEDTIME"/> <result property="detachedtime" column="DETACHEDTIME"/> <result property="creator_id" column="CREATOR_ID"/> <result property="creator_name" column="CREATOR_NAME"/> <result property="creator_dep" column="CREATOR_DEP"/> <result property="creator_depname" column="CREATOR_DEPNAME"/> <result property="create_time" column="CREATE_TIME"/> <result property="serialnumber" column="SERIALNUMBER"/> <result property="disktype" column="DISKTYPE"/> <result property="sourcesnapshotid" column="SOURCESNAPSHOTID"/> <result property="productcode" column="PRODUCTCODE"/> <result property="portable" column="PORTABLE"/> <result property="operationlocks" column="OPERATIONLOCKS"/> </resultMap> <resultMap id="listresult" extends="result" class="AliDisk" > <result property="statusEcs" column="statusEcs"/> <result property="startupCountEcs" column="startupCountEcs"/> </resultMap> <resultMap id="listresult2" extends="listresult" class="AliDisk" > <result property="instanceidEcs" column="instanceidEcs"/> <result property="instancenameEcs" column="instancenameEcs"/> <result property="imagenameEcs" column="imagenameEcs"/> <result property="create_timeEcs" column="create_timeEcs"/> </resultMap> <insert id="insertAliDisk" parameterClass="AliDisk"> insert into ali_disk (ECS_INSTANCE_ID,REGIONID,ZONEID,DISKNAME,DESCRIPTION,SIZE,SNAPSHOTID,CLIENTTOKEN,DISKID,INSTANCEID,DEVICE,DELETEWITHINSTANCE,DELETEAUTOSNAPSHOT,ENABLEAUTOSNAPSHOT,IMAGEID,TYPE,CATEGORY,STATUS,CREATIONTIME,ATTACHEDTIME,DETACHEDTIME,CREATOR_ID,CREATOR_NAME,CREATOR_DEP,CREATOR_DEPNAME,CREATE_TIME,SERIALNUMBER,DISKTYPE,SOURCESNAPSHOTID,PRODUCTCODE,PORTABLE,OPERATIONLOCKS) values(#ecs_instance_id#,#regionid#,#zoneid#,#diskname#,#description#,#size#,#snapshotid#,#clienttoken#,#diskid#,#instanceId#,#device#,#deletewithinstance#,#deleteautosnapshot#,#enableautosnapshot#,#imageid#,#type#,#category#,#status#,#creationtime#,#attachedtime#,#detachedtime#,#creator_id#,#creator_name#,#creator_dep#,#creator_depname#,#create_time#,#serialnumber#,#disktype#,#sourcesnapshotid#,#productcode#,#portable#,#operationlocks#) <selectKey resultClass="int" keyProperty="id" > SELECT @@IDENTITY AS id </selectKey> </insert> </sqlMap>
AliEcsSecuritygroup.xml
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE sqlMap PUBLIC "-//iBATIS.com//DTD SQL Map 2.0//EN" "http://ibatis.apache.org/dtd/sql-map-2.dtd"> <sqlMap namespace="AliEcsSecuritygroup"> <typeAlias alias="AliEcsSecuritygroup" type="com.aliyun.pcitcAliyun.ecs.model.AliEcsSecuritygroup"/> <resultMap id="result" class="AliEcsSecuritygroup"> <result property="id" column="ID"/> <result property="instanceid" column="INSTANCEID"/> <result property="create_time" column="CREATE_TIME"/> <result property="securitygroupid" column="SECURITYGROUPID"/> <result property="creator_id" column="CREATOR_ID"/> <result property="creator_name" column="CREATOR_NAME"/> <result property="creator_dep" column="CREATOR_DEP"/> <result property="creator_depname" column="CREATOR_DEPNAME"/> <result property="ecs_instance_id" column="ecs_instance_id"/> </resultMap> <insert id="insertAliEcsSecuritygroup" parameterClass="AliEcsSecuritygroup"> insert into ali_ecs_securitygroup (INSTANCEID,CREATE_TIME,SECURITYGROUPID,CREATOR_ID,CREATOR_NAME,CREATOR_DEP,CREATOR_DEPNAME,ecs_instance_id) values(#instanceid#,#create_time#,#securitygroupid#,#creator_id#,#creator_name#,#creator_dep#,#creator_depname#,#ecs_instance_id#) </insert> </sqlMap>
时间: 2024-10-13 01:13:02