Index: forgon-core/src/main/java/com/forgon/workflow/service/WorkFlowApprovalTaskManager.java =================================================================== diff -u -r21859 -r21885 --- forgon-core/src/main/java/com/forgon/workflow/service/WorkFlowApprovalTaskManager.java (.../WorkFlowApprovalTaskManager.java) (revision 21859) +++ forgon-core/src/main/java/com/forgon/workflow/service/WorkFlowApprovalTaskManager.java (.../WorkFlowApprovalTaskManager.java) (revision 21885) @@ -8,12 +8,18 @@ import com.forgon.workflow.model.NodeDefinition; import com.forgon.workflow.model.WorkFlowApprovalTask; +/** + * @author ZhuangQinLiu + * + */ +/** + * @author ZhuangQinLiu + * + */ public interface WorkFlowApprovalTaskManager { public WorkFlowApprovalTask getWorkFlowApprovalTaskByRollBack(String nodeDefinitionId,Long formId); - - public void saveOrUpdateWorkFlowApprovalTask(WorkFlowApprovalTask workFlowApprovalTask); - + public void deleteWorkFlowApprovalTask(Object[] idArray); public List searchWorkFlowApprovalTask(); @@ -24,14 +30,40 @@ public User getUserByFormId(Long formId); - public void rollbackWorkFlowApprovalTask( - WorkFlowApprovalTask workFlowApprovalTask, int approvalResult,String nodeDefinition_id, - NodeDefinition nodeDefinition1 - ); + public void saveOrUpdateWorkFlowApprovalTask(WorkFlowApprovalTask workFlowApprovalTask); + + /** + * 审批通过 + * @param workFlowApprovalTask_id: 待办任务id + * @param nodeDefinition_id : 当前节点id + * @param approvalResult: 审批结果 + * @param handleOpinion :审批意见 + * @param userID:指定用户id + * @param formType:单类型 + * @param formId:工单号 + */ + public void passWorkFlowApprovalTask(long workFlowApprovalTask_id, + String nodeDefinition_id, int approvalResult, String handleOpinion, + long userID, String formType, long formId); - public void saveOrUpdateWorkFlowApprovalTask( - WorkFlowApprovalTask workFlowApprovalTask, - NodeDefinition nodeDefinition, NodeDefinition nodeDefinition1, - int approvalResult, String handleOpinion, long userID, - String formType, long formId); + + /** + * 回退 + * @param workFlowApprovalTask_id:待办任务id + * @param approvalResult:审批结果 + * @param nodeDefinition_id:节点id + * @param handleOpinion:审批意见 + */ + public void rollbackWorkFlowApprovalTask(long workFlowApprovalTask_id, int approvalResult, + String nodeDefinition_id,String handleOpinion); + + + /** + * 审批不通过 + * @param workFlowApprovalTask_id:待办任务id + * @param approvalResult:审批结果 + * @param approvalResult:审批意见 + */ + public void failWorkFlowApprovalTask(long workFlowApprovalTask_id, int approvalResult,String handleOpinion); + } Index: ssts-web/src/main/webapp/systemmanage/workFlow/workFlow.jsp =================================================================== diff -u --- ssts-web/src/main/webapp/systemmanage/workFlow/workFlow.jsp (revision 0) +++ ssts-web/src/main/webapp/systemmanage/workFlow/workFlow.jsp (revision 21885) @@ -0,0 +1,23 @@ +<%@page language="java" contentType="text/html; charset=UTF-8"%> +<%-- 引入JSP标签 --%> +<%@include file="/common/taglibs.jsp"%> +<%-- 引入ExtJs4.2.5框架 --%> +<%@include file="/common/include_ForgonGrid4.2.5_css.jsp"%> +<%@include file="/common/include_ForgonGrid4.2.5_Js.jsp"%> +<%@include file="/common/include_UseForgonGrid4_Js.jsp"%> + + + + <%-- 引入common.js --%> + + <%-- 引入语音插件 --%> + + <%-- 引入本身的js --%> + + + 流程定义 + + + + + \ No newline at end of file Index: forgon-core/src/main/java/com/forgon/workflow/action/WorkFlowAction.java =================================================================== diff -u -r21790 -r21885 --- forgon-core/src/main/java/com/forgon/workflow/action/WorkFlowAction.java (.../WorkFlowAction.java) (revision 21790) +++ forgon-core/src/main/java/com/forgon/workflow/action/WorkFlowAction.java (.../WorkFlowAction.java) (revision 21885) @@ -55,6 +55,20 @@ /** + * 根据流程名字,判断是否已经存在 + * + */ + public void isExitsWorkFlowName(){ + StrutsParamUtils.getResponse().setCharacterEncoding("UTF-8"); + String workFlowName = StrutsParamUtils.getPraramValue("workFlowName", ""); + String id = StrutsParamUtils.getPraramValue("id", ""); + Boolean flag= workFlowManager.isExitsWorkFlowName(workFlowName,id); + JSONObject jsonObject = new JSONObject(); + jsonObject.put("success", flag); + StrutsResponseUtils.output(jsonObject); + } + + /** * 根据id,获取对应的用户 * */ public String getUser(){ @@ -65,9 +79,10 @@ User user=userManager.get(id); jsonObject.put("success", true); jsonObject.put("data", user.getFullName()); - - String jsonString = jsonObject.toString(); - StrutsParamUtils.getResponse().getWriter().println(jsonString); + + StrutsResponseUtils.output(jsonObject); + /*String jsonString = jsonObject.toString(); + StrutsParamUtils.getResponse().getWriter().println(jsonString);*/ } catch (Exception e) { e.printStackTrace(); } Index: ssts-web/src/main/webapp/homepage/menuconfigure.js =================================================================== diff -u -r21865 -r21885 --- ssts-web/src/main/webapp/homepage/menuconfigure.js (.../menuconfigure.js) (revision 21865) +++ ssts-web/src/main/webapp/homepage/menuconfigure.js (.../menuconfigure.js) (revision 21885) @@ -662,6 +662,8 @@ {hidden :SSTS_GoodsFilterConfig,text:"物品黑白名单过滤设置",href:WWWROOT+'/disinfectsystem/goodFilterConfig/goodFilterTemplate.jsp',hrefTarget:linkTarget,leaf:true}, {hidden :SSTS_UrgentLevel_manager,text:"加急级别管理",href:WWWROOT+'/disinfectsystem/basedatamanager/urgentLevel/urgentLevelView.jsp',hrefTarget:linkTarget,leaf:true}, {hidden :SSTS_OperationRoom_manager,text:"手术间管理",href:WWWROOT+'/disinfectsystem/basedatamanager/operationRoom/operationRoom.jsp',hrefTarget:linkTarget,leaf:true}, + {hidden :false,text:"流程定义设置",href:WWWROOT+'/systemmanage/workFlow/workFlow.jsp',hrefTarget:linkTarget,leaf:true}, + {hidden :false,text:"待办任务设置",href:WWWROOT+'/systemmanage/workFlow/workFlowApprovalTask.jsp',hrefTarget:linkTarget,leaf:true}, {hidden :SSTS_UsedDoctor_manager,text:"常用医生设置",href:WWWROOT+'/disinfectsystem/basedatamanager/commonlyUsedDoctor/comUsedDoctorView.jsp',hrefTarget:linkTarget,leaf:true}, {hidden :SSTS_SupplyRoomType_manager,text:"科室供应室设置",href:WWWROOT+'/disinfectsystem/basedatamanager/supplyroomtype/supplyRoomTypeView.jsp?editMode=true',hrefTarget:linkTarget,leaf:true} Index: ssts-web/src/main/webapp/systemmanage/workFlow/workFlowForm.js =================================================================== diff -u --- ssts-web/src/main/webapp/systemmanage/workFlow/workFlowForm.js (revision 0) +++ ssts-web/src/main/webapp/systemmanage/workFlow/workFlowForm.js (revision 21885) @@ -0,0 +1,765 @@ +function addAndEditWorkFlow(id) { + //判断是否ie和ie7 + var isIE6OrIE7 = top.Ext4.isIE6 || top.Ext4.isIE7; + + // IE下发现保存和取消按钮跑到行上面,重写RowEditor + Ext4 + .override( + Ext4.grid.RowEditor, + { + syncButtonPosition : function(scrollDelta) { + var me = this, floatingButtons = me + .getFloatingButtons(), scrollingViewElDom = me.scrollingViewEl.dom, myscrollHeight = Math + .max(scrollingViewElDom.scrollHeight, + scrollingViewElDom.clientHeight), overflow = this + .getScrollDelta() + - (myscrollHeight + - scrollingViewElDom.scrollTop - scrollingViewElDom.clientHeight); + if (overflow > 0) { + if (!me._buttonsOnTop) { + floatingButtons.setButtonPosition('top'); + me._buttonsOnTop = true; + } + scrollDelta = 0; + } else if (me._buttonsOnTop) { + floatingButtons.setButtonPosition('bottom'); + me._buttonsOnTop = false; + } + + return scrollDelta; + } + }); + //流程状态 + var statusStore = Ext4.create('Ext.data.Store', { + fields : [ 'name', 'value' ], + data : { + 'items' : [ { + 'name' : '草稿', + "value" : false + }, { + 'name' : '正式', + "value" : true + } ] + }, + proxy : { + type : 'memory', + reader : { + type : 'json', + root : 'items' + } + } + }); + //是否回退: 下拉框不能用boolean作为它的value? + var allowRollbackStore = Ext4.create('Ext.data.Store', { + fields : [ {name:'name',type:'string'},{ name:'value',type:'int'} ], + data : [ { + 'name' : '是', + "value" : 1 + }, { + 'name' : '否', + "value" : 0 + } ] + }); + //是否支持不同意 + var allowDisagreeStore = Ext4.create('Ext.data.Store', { + fields : [ {name:'name',type:'string'},{ name:'value',type:'int'} ], + data : [ { + 'name' : '是', + "value" : 1 + }, { + 'name' : '否', + "value" : 0 + } ] + }); + //角色信息 + var RoleStore = Ext4.create('Ext.data.Store',{ + fields : [ "name", "value" ], + autoLoad : true, + proxy : { + type : 'ajax', + extraParams : { }, + url : WWWROOT + + '/disinfectSystem/workFlowAction!loadAllRoles.do', + reader : { + root : "rows" + } + } + }); + //角色下拉框定义 + var roleCombo = new Ext4.form.ComboBox({ + store : RoleStore, + displayField : 'name', + valueField : 'value', + mode : 'local', + forceSelection : false, + editable : false, + triggerAction : 'all', + selectOnFocus : true + }); + //用户信息store + var userJsonStore = new Ext4.data.Store({ + //limit参数,每页显示条数,默认为25 + pageSize: isIE6OrIE7 ? 15 : 50, + autoLoad:false, + proxy : { + type : 'ajax', + url : WWWROOT + '/disinfectSystem/workFlowAction!getUserJson.do', + reader : { + type : 'json', + totalProperty : 'totalCount', + root : 'data' + } + }, + fields : [ + {name : 'id',mapping : 'id'}, + {name : 'name',mapping : 'name'} + ] + }); + userJsonStore.reload(); + // 是否字符串判断方法 + function isString(str) { + return (typeof str == 'string') && str.constructor == String; + } + //自定义节点model + Ext4.define('NodeModel', { + extend : 'Ext.data.Model', + fields : [ { + name : 'nodeDefinitionId', + type : 'long' + }, { + name : 'allowRollback', + type : 'boolean' + }, { + name : 'allowDisagree', + type : 'boolean' + }, { + name : 'name', + type : 'string' + }, { + name : 'sequenceNumber', + type : 'int' + }, { + name : 'nodeApprovalId', + type : 'long' + }, { + name : 'roleId', + type : 'int' + }, { + name : 'roleName', + type : 'string' + }, { + name : 'userId', + type : 'int' + }, { + name : 'userName', + type : 'string' + } ] + }); + //节点信息store + var simpsonsStore = Ext4 + .create( + 'Ext.data.Store', + { + model : "NodeModel", + autoLoad : true, + proxy : { + type : 'ajax', + extraParams : { + id : id + }, + url : WWWROOT + + '/disinfectSystem/workFlowAction!loadNodeDefinitionList.do', + reader : { + root : "rows" + } + } + }); + + var newSignal = 'normal';//判断是增加还是修改 + //定义rowEditing + var rowEditing = Ext4.create('Ext.grid.plugin.RowEditing', { + pluginId : 'rowEditing', + saveBtnText : '修改', + cancelBtnText : "取消", + // autoCancel: false, + clicksToEdit : 2,// 单击进行修改 + cancelEdit : function() { + var me = this; + if (me.editing) { + me.getEditor().cancelEdit(); + var n = simpsonsStore.findBy(function(r) { + return (r.phantom == true) + }) + if (newSignal == 'newing') { + newSignal = 'normal'; + if (n != -1) { + simpsonsStore.removeAt(n); + } + + } + } + }, + listeners : { + edit : function onEdit(e) { + var data = e.context.record.data; + var roleId = data.roleId; + var roleName = data.roleName; + var userId=data.userId; + var userName = data.userName; + if (userId == 0 && roleId == 0) { + Ext4.Msg.alert('提示', '请选择一个角色或者一个用户!'); + } + if(data.sequenceNumber==0){ + Ext4.Msg.alert('提示', '请填写顺序号!'); + } + var n = e.context.rowIdx; + if (newSignal == 'normal') { + if (n != -1) { + var rec = simpsonsStore.getAt(n); + rec.set('roleId', data.roleId); + var returnvalue = ""; + var index = RoleStore.find(roleCombo.valueField, + data.roleId); + var ehrRecord = RoleStore.getAt(index); + if (ehrRecord) { + returnvalue = ehrRecord.data.name; + } + rec.set('roleName', returnvalue); + rec.set('allowRollback', data.allowRollback); + rec.set('allowDisagree', data.allowDisagree); + rec.set('userId', data.userId); + rec.commit(); + simpsonsStore.sync();// 同步? + } + } + } + } + }) + //大保存 + function save(store) { + var workFlowName = Ext4.getCmp('workFlowName').getValue(); + var status = Ext4.getCmp('status').getValue(); + if (!workFlowName) { + showResult('请填写留下名称!'); + return false; + } + if (status==null||(status!=false&&status!=true)) { + showResult('请选择状态!'); + return false; + } + + var items = []; + var count = store.getCount(); + var numberList=[];//检查是否有重复的数字 + if (count > 0) { + for (var i = 0; i < count; i++) { + var item = store.getAt(i); + var sNumber=item.data.sequenceNumber; + var sNumberFlag=false; + if(numberList.length==0){ + numberList.push(sNumber); + }else{ + for(var i=0;i