Index: ssts-web/src/main/webapp/systemmanage/workFlow/finishedApprovalTaskRecordView.js =================================================================== diff -u --- ssts-web/src/main/webapp/systemmanage/workFlow/finishedApprovalTaskRecordView.js (revision 0) +++ ssts-web/src/main/webapp/systemmanage/workFlow/finishedApprovalTaskRecordView.js (revision 22243) @@ -0,0 +1,283 @@ +var recordFormObj; +var recordWindowObj; +var approvalRecordGrid; +var entityName3 = '我的已办审批任务'; + +function rendererTransitionTime(value, metaData, record, rowIndex, colIndex, + store, view) { + if (value) { + return Ext4.Date.format(new Date(value.time), 'Y-m-d H:i:s'); + } else { + return ''; + } +} + +//会重复执行两次 +function rendererResponseTime(value, metaData, record, rowIndex, colIndex, + store, view) { + var cTime=record.data['createTaskTime'].time; + var hTime=0; + if(record.data['handleTime']!=null) //得判断,不然少cell + hTime=record.data['handleTime'].time; + + if((typeof(hTime)!="undefined" && hTime!=0)&&(typeof(cTime)!="undefined" && cTime!=0)){ + var responseTimeMinutes= Math.floor(parseInt(hTime - cTime) / 1000 / 60); + var responseTimeHours=Math.floor(parseInt(hTime - cTime) / 1000 / 60 / 60); + var responseTimeDays=Math.floor(parseInt(hTime - cTime) / 1000 / 60 / 60/24); + if(responseTimeDays>0){ + return responseTimeDays+'天'+Math.floor((parseInt(hTime - cTime)-responseTimeDays*1000*60*60*24)/ 1000 / 60 / 60)+'小时'; + } + if(responseTimeHours>0){ + return responseTimeHours+'小时'+Math.floor((parseInt(hTime - cTime)-responseTimeHours*1000*60*60)/ 1000 / 60)+'分钟'; + } + if(responseTimeMinutes==0) + return '1分钟'; + return responseTimeMinutes+'分钟'; + }else + return ''; +} + +//1(待处理-默认值) 2(通过) 3(不通过) 4(回退) 5(提交) 6(通知起单人) +function renderApprovalResult(value, metaData, record, rowIndex, colIndex, store, view) { + if (value == 1) { + return '待处理'; + } else if(value == 2) { + return '通过'; + }else if(value==3){ + return '不通过'; + }else if(value==4){ + return "回退"; + }else if(value==5){ + return "提交"; + }else if(value==6){ + return "通知起单人"; + }else if(value==7){ + return "通知起单人"; + } +} + +function renderTitle(v, p, record) { + var str = "" + v + ""; + return str; +} + + +var recordFields = [ { + name : 'id', + mapping : 'id' +}, { + name : 'formId', + mapping : 'formId' +}, { + name : 'formType', + mapping : 'formType' +}, { + name : 'nodeDefinition_id', + mapping : 'nodeDefinition_id' +}, { + name : 'title', + mapping : 'title' +}, { + name : 'createTaskTime', + mapping : 'createTaskTime' +}, { + name : 'taskName', + mapping : 'taskName' +},{ + name : 'handler', + mapping : 'handler' +}, { + name : 'handleTime', + mapping : 'handleTime' +}, { + name : 'handleOpinion', + mapping : 'handleOpinion' +}, { + name : 'approvalResult', + mapping : 'approvalResult' +} + ]; +var recordColumns = [{ + header : "标题", + dataIndex : 'title', + width : 170, + minWidth : 170, + maxWidth : 220, + filterable : true, + filter : { + type : 'string' + }, + renderer : renderTitle +}, { + header : "任务名字", + dataIndex : 'taskName', + width : 170, + minWidth : 170, + maxWidth : 220, + filterable : true, + filter : { + type : 'string' + } +}, { + header : "处理结果", + dataIndex : 'approvalResult', + width : 80, + minWidth : 80, + filterable : true, + filter : { + type : 'string' + }, + renderer : renderApprovalResult +}, { + header : "处理意见", + dataIndex : 'handleOpinion', + width : 120, + minWidth : 120, + maxWidth : 200, + filterable : true, + filter : { + type : 'string' + } +} , { + header : "处理时间", + dataIndex : 'handleTime', + width : 140, + filterable : true, + filter : { + type : 'date' + }, + renderer : rendererTransitionTime +}, { + header : "创建任务时间", + dataIndex : 'createTaskTime', + width : 140, + filterable : true, + filter : { + type : 'date' + }, + renderer : rendererTransitionTime +} +, { + header : "响应时间", + id : "responseTime", + dataIndex : '', + width : 84, + filterable : true, + filter : { + type : 'string' + }, + renderer : rendererResponseTime +} +]; + + +function reloadGrid(){ + var startDateSearch = Ext4.getCmp('startDateSearch').getValue(); + var endDateSearch = Ext4.getCmp('endDateSearch').getValue(); + if(startDateSearch || endDateSearch){ + if(!startDateSearch){ + showResult("请录入开始时间"); + return false; + }else if(!endDateSearch){ + showResult("请录入结束时间"); + return false; + }else if(!compareDate(startDateSearch,endDateSearch)){ + showResult("开始时间不能大于结束时间"); + return false; + } + } + var approvalResult = Ext4.getCmp('approvalResultCombo').getValue(); + approvalRecordGrid.extraParams.startDateSearch = startDateSearch; + approvalRecordGrid.extraParams.endDateSearch = endDateSearch; + approvalRecordGrid.extraParams.approvalResult = approvalResult; + Ext4.getCmp('forgonPagingToolBar').moveFirst(); //从第一页开始 + Ext4.getCmp('startDateSearch').setValue(''); + Ext4.getCmp('endDateSearch').setValue(''); + Ext4.getCmp('approvalResultCombo').setValue(''); +} + + +var dt = new Date(); +var startDayofMonth = dt.getFullYear() + "/" + (dt.getMonth() + 1) + "/01"; + +Ext4.onReady(function() { + approvalRecordGrid= Ext4.create('ExtJs.forgon4.Grid', { + title: entityName3, + dataUrl : WWWROOT + '/disinfectSystem/workFlowApprovalTaskAction!loadFinishedApprovalTaskRecordList.do', + sorters : { + property : 'createTaskTime', + direction : 'ASC' + }, + extraParams : {}, //如果你要自定义参数,这里一定要先给一个空的对象,要不然会报空异常 + fields : recordFields, + columns : recordColumns, + features: Ext4.create('Ext.ux.grid.feature.Searching',{ + extend: 'Ext.grid.feature.Feature', + searchText:'查询', + width: 150, + //禁止那些列参与查询 + disableIndexes:["responseTime"] + }), + tbar : [{ + xtype : 'label', + text : '创建任务日期:' + },{ + xtype : 'datefield', + id : 'startDateSearch', + name : 'startDateSearch', + altFormats:'Y-m-d|Y-n-j|y-n-j|y-m-j|y-m-d|y-n-d|Y-n-d|Y-m-j|Ymd|Ynj|ynj|ymj|ymd|ynd|Ynd|Ymj|Y/m/d|Y/n/j|y/n/j|y/m/j|y/m/d|y/n/d|Y/n/d|Y/m/j', + readOnly : false, + width : 130, + format : 'Y-m-d', + value : new Date(startDayofMonth) + },{ + xtype : 'label', + text : '至:' + },{ + xtype : 'datefield', + id : 'endDateSearch', + name : 'endDateSearch', + altFormats:'Y-m-d|Y-n-j|y-n-j|y-m-j|y-m-d|y-n-d|Y-n-d|Y-m-j|Ymd|Ynj|ynj|ymj|ymd|ynd|Ynd|Ymj|Y/m/d|Y/n/j|y/n/j|y/m/j|y/m/d|y/n/d|Y/n/d|Y/m/j', + readOnly : false, + width : 130, + value : new Date(), + format : 'Y-m-d' + },'-', + { + xtype : 'label', + text : '处理状态:' + } + ,{ + xtype : 'combo', + id : 'approvalResultCombo', + name : 'approvalResultCombo', + valueField : 'value', + displayField : 'name', + store : new top.Ext4.data.SimpleStore({ + fields : [ 'value','name'], + data : [[2,'通过'],[3,'不通过'],[4,'回退'],[5,'提交'],[6,'通知起单人']] //因为6和7都是通知起单人,所以这里的6,可查询出处理结果为6和7的结果 + }), + forceSelection : false, + triggerAction : 'all' + },'-', + { + text : '查询', + iconCls : 'icon-search', + handler : function() { + reloadGrid(); + } + }] + }); + + + var viewport = Ext4.create('Ext4.Viewport', { + layout : 'fit', + items : approvalRecordGrid + }); +}) Index: ssts-web/src/main/webapp/systemmanage/workFlow/workFlowApprovalTaskRecord.jsp =================================================================== diff -u -r22166 -r22243 --- ssts-web/src/main/webapp/systemmanage/workFlow/workFlowApprovalTaskRecord.jsp (.../workFlowApprovalTaskRecord.jsp) (revision 22166) +++ ssts-web/src/main/webapp/systemmanage/workFlow/workFlowApprovalTaskRecord.jsp (.../workFlowApprovalTaskRecord.jsp) (revision 22243) @@ -21,6 +21,6 @@ 审批日志 -
+
\ No newline at end of file Index: forgon-core/src/main/java/com/forgon/workflow/action/WorkFlowApprovalTaskAction.java =================================================================== diff -u -r22166 -r22243 --- forgon-core/src/main/java/com/forgon/workflow/action/WorkFlowApprovalTaskAction.java (.../WorkFlowApprovalTaskAction.java) (revision 22166) +++ forgon-core/src/main/java/com/forgon/workflow/action/WorkFlowApprovalTaskAction.java (.../WorkFlowApprovalTaskAction.java) (revision 22243) @@ -51,7 +51,33 @@ private NodeDefinitionManager nodeDefinitionManager; + public void loadFinishedApprovalTaskRecordList(){ + String startDateSearch = StrutsParamUtils.getPraramValue("startDateSearch", ""); + String endDateSearch = StrutsParamUtils.getPraramValue("endDateSearch", ""); + String approvalResult = StrutsParamUtils.getPraramValue("approvalResult", ""); + JSONObject result=workFlowApprovalTaskManager.loadFinishedApprovalTaskList(startDateSearch,endDateSearch,approvalResult); + StrutsResponseUtils.output(result); + } + /** + * 流程初始人赋值,判断是按时间排序,时间最近、流程第一个节点的FormId为id的第一条数据----userId + */ + public void getFirstUserIdByFormId(){ + String formId = StrutsParamUtils.getPraramValue("formId", ""); + Long FormId=null; + if(StringUtils.isNotBlank(formId)){ + FormId=Long.valueOf(formId); + } + try { + String userName = workFlowApprovalTaskManager.getFirstUserNameByFormId(formId); + StrutsResponseUtils.output(true,userName); + } catch (Exception e) { + StrutsResponseUtils.output(false,e.getMessage()); + } + } + + + /** * 点击确认按钮,通知起单人完成 */ public void confirmNoticeWorkFlowApprovalTask(){ Index: ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/expensivegoodsapplication/service/ExpensiveGoodsApplicationManager.java =================================================================== diff -u -r22066 -r22243 --- ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/expensivegoodsapplication/service/ExpensiveGoodsApplicationManager.java (.../ExpensiveGoodsApplicationManager.java) (revision 22066) +++ ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/expensivegoodsapplication/service/ExpensiveGoodsApplicationManager.java (.../ExpensiveGoodsApplicationManager.java) (revision 22243) @@ -21,13 +21,22 @@ public void saveOrUpdate(ExpensiveGoodsApplication expensiveGoodsApplication, boolean commit, JSONArray items); /** + * 保存或者修改高值耗材申请单. + * @param expensiveGoodsApplication 高值耗材申请单对象 + * @param commit 是否提交操作 + * @param items 此次提交的申请项信息 + * @param userID 指定的第一个节点执行人 + */ + public void saveOrUpdate(ExpensiveGoodsApplication expensiveGoodsApplication, boolean commit, JSONArray items, Long userID); + + /** * 修改高值耗材申请单(起单人对申请单的一些修改). * @param expensiveGoodsApplication 高值耗材申请单对象 * @param items 此次提交的申请项信息 * @param workFlowApprovalTaskVO 待办任务处理的VO对象 */ public void updateExpensiveGoodsApplicationForApprovalSubmit( - ExpensiveGoodsApplication expensiveGoodsApplication, JSONArray items, WorkFlowApprovalTaskVO workFlowApprovalTaskVO); + ExpensiveGoodsApplication expensiveGoodsApplication, JSONArray items, WorkFlowApprovalTaskVO workFlowApprovalTaskVO,Long userID); /** * 起单人知会的操作(正常通知起单人的情况). Index: ssts-web/src/main/webapp/systemmanage/workFlow/workFlowFinishedApprovalTask.jsp =================================================================== diff -u --- ssts-web/src/main/webapp/systemmanage/workFlow/workFlowFinishedApprovalTask.jsp (revision 0) +++ ssts-web/src/main/webapp/systemmanage/workFlow/workFlowFinishedApprovalTask.jsp (revision 22243) @@ -0,0 +1,30 @@ +<%@page language="java" contentType="text/html; charset=UTF-8"%> +<%@page import="com.forgon.workflow.model.WorkFlowApprovalTask" %> +<%-- 引入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 --%> + + <%-- 引入语音插件 --%> + + + + 审批日志 + + + + \ No newline at end of file Index: ssts-web/src/main/webapp/disinfectsystem/recyclingApplication/expensiveGoodsApplication/expensiveGoodsApplicationForm.js =================================================================== diff -u -r22078 -r22243 --- ssts-web/src/main/webapp/disinfectsystem/recyclingApplication/expensiveGoodsApplication/expensiveGoodsApplicationForm.js (.../expensiveGoodsApplicationForm.js) (revision 22078) +++ ssts-web/src/main/webapp/disinfectsystem/recyclingApplication/expensiveGoodsApplication/expensiveGoodsApplicationForm.js (.../expensiveGoodsApplicationForm.js) (revision 22243) @@ -4,6 +4,7 @@ var expensiveGoodsStore = null; //高值耗材申请项top.Ext4.tree.Panel的数据仓库 var treePanelStore = null; +var chooseNextOneWindowObj = null; /** * 结算科室的store @@ -148,6 +149,17 @@ } }); + + var workFlowApprovalTaskRecordJsp=""; + if(id){ + workFlowApprovalTaskRecordJsp = WWWROOT+'/systemmanage/workFlow/workFlowApprovalTaskRecord.jsp?formId='+id; + }else{ + workFlowApprovalTaskRecordJsp = WWWROOT+'/systemmanage/workFlow/workFlowApprovalTaskRecord.jsp?formId=0'; + } + var workFlowApprovalTaskRecordIframe = new top.Ext4.Component({ + html : '' + }); + /** * 常用医生的store */ @@ -691,6 +703,12 @@ } }] } + },{ + xtype: 'container', + width: '100%', + height: 250, + layout: 'fit', + items : workFlowApprovalTaskRecordIframe }], buttons : [{ id : 'temporarySave', @@ -707,14 +725,16 @@ },{ text : '取消', handler : function() { + if(chooseNextOneWindowObj!=null|| typeof(reValue) != "undefined" ) + chooseNextOneWindowObj.hide(); windowObj.close(); } }] }); windowObj = new top.Ext4.window.Window({ layout : 'fit', title : '申请高值耗材', - width : 900, + width : 1030, height : 600, resizable :false, modal : true, @@ -831,7 +851,11 @@ } } - +var chooseNextOneJsp=encodeURI(WWWROOT+'/systemmanage/workFlow/workFlowApprovalTaskChooseNextOne.jsp?formType=高值耗材申请单'); +var chooseNextOneIframe = new top.Ext4.Component({ + html : '' + ,height : 150 + }); /** * 提交或者暂存高值耗材申请单. * @param commit 是否提交操作(为true则为提交操作,否则为暂存操作) @@ -841,46 +865,180 @@ showResult('请正确填写表单各值'); return false; } + /** + * 获取当前表单类型的第一个流程节点 + */ + var fNodeDefinitionUserStore=null; + Ext4.Ajax.request({ + async:false, + url : WWWROOT + '/disinfectSystem/workFlowAction!getFirstNodeDefinitionUser.do', + params : {formType : '高值耗材申请单'}, + success : function(response, options) { + var result = Ext4.decode(response.responseText,true); // 此处返回的有可能不是json字符串,因为注销之后,会被acegi拦截,返回html + if(result.success){ + fNodeDefinitionUserStore=result.rows; + }else{ + showResult(result.message); + } + }, + failure : function(response, options) { + result = Ext4.JSON.decode(response.responseText); + showResult(result.message); + } + }); + var firstNodeDefinitionUserStore=new Ext4.data.JsonStore({ + fields : [ + {name:'fullName', type: 'string'}, + {name:'userId', type:'long'} + ], + data:fNodeDefinitionUserStore + }); + var chooseNextOneFormObj =new top.Ext4.form.Panel({// Ext4.create('Ext4.form.Panel', { + frame : true, + border : 0, + labelSeparator : ': ', + bodyPadding : '5 5 5 5', + autoScroll : true, + buttonAlign : 'center', + buttons : [{ + text : '保存', + handler : function() { + saveNextOne(); + } + }, { + text : '取消', + handler : function() { + chooseNextOneWindowObj.hide(); + } + } ], + fieldDefaults : { + labelAlign : 'right', + labelWidth : 80 + }, + items : + [{ + xtype: 'container', + width: '100%', + height: 150, + layout: 'fit', + items : chooseNextOneIframe + }] + }); + //设置申请项信息 - if (setApplyItems()) { - var msgBox = new top.Ext4.window.MessageBox(); - msgBox.confirm({ - title: '温馨提示', - padding: '0 10 10 10', - msg: '确认提交吗?', - fn: function(btn){ - if (btn == 'yes'){ - top.Ext4.getCmp('temporarySave').disable(); - top.Ext4.getCmp('saveBtn').disable(); - formObj.form.submit({ - url : WWWROOT + '/disinfectSystem/expensivegoodsapplication/expensiveGoodsApplicationAction!saveOrUpdateExpensiveGoodsApplication.do', - method : 'POST', - waitMsg : '正在保存数据,请稍候', - waitTitle : '提交表单', - params : { - commit: commit - }, - success : function(form, action) { - windowObj.close(); - grid.dwrReload(); - showResult(action.result.message); - }, - failure : function(form, action) { - top.Ext4.getCmp('temporarySave').enable(); - top.Ext4.getCmp('saveBtn').enable(); - showResult(action.result.message); - } - }); - } - }, - buttons: Ext4.Msg.YESNO, - icon: Ext4.Msg.QUESTION - }); + if (setApplyItems()){ + if(commit){ + //暂时版本可能不兼容,导致添加完第一次出现后,马上添加第二个出现js错误,导致选择下一个执行人窗口弹不出【原因:重新创建窗口的组件不能重新生成,暂时解决方法是添加完后不关闭,先隐藏】 + if(chooseNextOneWindowObj){ + chooseNextOneWindowObj = new top.Ext4.window.Window({ + layout : 'fit', + autoScroll:true, + title : '审批信息', + width : 350, + height : 250, + resizable : false, + modal : true, + border : false, + items : chooseNextOneFormObj + }); + chooseNextOneWindowObj.show(); + }else{ + chooseNextOneWindowObj = new top.Ext4.window.Window({ + layout : 'fit', + autoScroll:true, + title : '审批信息', + width : 350, + height : 250, + resizable : false, + modal : true, + border : false, + items : chooseNextOneFormObj + }); + chooseNextOneWindowObj.show(); + } + }else{ //暂存 + var msgBox = new top.Ext4.window.MessageBox(); + msgBox.confirm({ + title: '温馨提示', + padding: '0 10 10 10', + msg: '确认提交吗?', + fn: function(btn){ + if (btn == 'yes'){ + top.Ext4.getCmp('temporarySave').disable(); + top.Ext4.getCmp('saveBtn').disable(); + formObj.form.submit({ + url : WWWROOT + '/disinfectSystem/expensivegoodsapplication/expensiveGoodsApplicationAction!saveOrUpdateExpensiveGoodsApplication.do', + method : 'POST', + waitMsg : '正在保存数据,请稍候', + waitTitle : '提交表单', + params : { + commit: commit + }, + success : function(form, action) { + windowObj.close(); + grid.dwrReload(); + showResult(action.result.message); + }, + failure : function(form, action) { + top.Ext4.getCmp('temporarySave').enable(); + top.Ext4.getCmp('saveBtn').enable(); + showResult(action.result.message); + } + }); + } + }, + buttons: Ext4.Msg.YESNO, + icon: Ext4.Msg.QUESTION + }); + } } else { showResult("请填写申请的物品!"); return; } + + function saveNextOne(){ + var sub = top.Ext4.getDom('chooseNextOneIframe').contentWindow; + if(!sub) return false; + var userID = sub.document.getElementsByName("userID")[0].value; + if((userID==""||userID==null)&&commit){ + showResult("请选择下一个执行用户!"); + return false; + } + var firstNodeDefinitionUserLenght = firstNodeDefinitionUserStore.data.length; + for (var i=0; i' - //,height : 150 + html : '' }); //绑定该有的值到passFormObj中 @@ -118,7 +102,6 @@ approvalWindowObj.close(); }else{ showResult(result.message); - //showResult("审批失败"); } } @@ -132,7 +115,6 @@ approvalWindowObj.close(); }else{ showResult(result.message); - //showResult("提交失败"); } } @@ -154,7 +136,6 @@ approvalWindowObj.close(); }else{ showResult(result.message); - //showResult("确认失败"); } }else{ Ext4.Ajax.request({ @@ -171,9 +152,7 @@ showResult("确认成功"); approvalWindowObj.close(); }else{ - showResult(result.message); - //showResult("确认失败"); - } + showResult(result.message); } }, failure : function(response, options) { } @@ -226,7 +205,7 @@ }] }); - rollBackWindowObj = new top.Ext4.create('Ext4.window.Window', { + rollBackWindowObj = new Ext4.create('Ext4.window.Window', { layout : 'fit', title : '处理回滚信息', width : 320, @@ -240,8 +219,6 @@ rollBackWindowObj.show(); } - - function Fail(){ failFormObj= Ext4.create('Ext4.form.Panel', { id:'failFormObj', @@ -407,9 +384,6 @@ } approvalFormObj = Ext4.create('Ext4.form.Panel', { - //width:'98.5%', - //layout : 'vbox', - //layout : 'fit', frame : true, border : 0, labelSeparator : ': ', @@ -418,41 +392,35 @@ buttonAlign : 'center', buttons : [{ text : '确认', - hidden: allowStore.getAt(0).get('allowNoticeFormMan')||approvalResult==APPROVALRESULT_NOTICEFAIL?false:true, + hidden: (allowStore.getAt(0).get('allowNoticeFormMan')||approvalResult==APPROVALRESULT_NOTICEFAIL) && isFinished == 0 ?false:true, handler : function() { confirmNotice(); } },{ text : '提交', - hidden: nodeDefinition_id==null?false:true, + hidden: nodeDefinition_id==null && isFinished == 0 ?false:true, handler : function() { submit(); } },{ text : '审核通过',//要么通知起单人是true;要么是通知失败;要么通知起单人是false,且当前节点为空的情况下隐藏 - hidden: allowStore.getAt(0).get('allowNoticeFormMan')||approvalResult==APPROVALRESULT_NOTICEFAIL||(!allowStore.getAt(0).get('allowNoticeFormMan')&&nodeDefinition_id==null)?true:false, + hidden: isFinished == 1 || allowStore.getAt(0).get('allowNoticeFormMan')||approvalResult==APPROVALRESULT_NOTICEFAIL||(!allowStore.getAt(0).get('allowNoticeFormMan')&&nodeDefinition_id==null)?true:false, handler : function() { Pass(nodeDefinition_id,formId); } },{ text : '审核不通过', - hidden: (allowStore.getAt(0).get('allowNoticeFormMan'))||approvalResult==APPROVALRESULT_NOTICEFAIL||(!allowStore.getAt(0).get('allowNoticeFormMan')&&!allowStore.getAt(0).get('allowDisagree'))?true:false, + hidden: isFinished == 1 || allowStore.getAt(0).get('allowNoticeFormMan')||approvalResult==APPROVALRESULT_NOTICEFAIL||(!allowStore.getAt(0).get('allowNoticeFormMan')&&!allowStore.getAt(0).get('allowDisagree'))?true:false, handler : function() { Fail(); } }, { text : '回退', - hidden:(allowStore.getAt(0).get('allowNoticeFormMan'))||approvalResult==APPROVALRESULT_NOTICEFAIL||(!allowStore.getAt(0).get('allowNoticeFormMan')&&!allowStore.getAt(0).get('allowRollback'))?true:false, + hidden:isFinished == 1 || allowStore.getAt(0).get('allowNoticeFormMan')||approvalResult==APPROVALRESULT_NOTICEFAIL||(!allowStore.getAt(0).get('allowNoticeFormMan')&&!allowStore.getAt(0).get('allowRollback'))?true:false, handler : function() { RollBack(); } } - /* , { - text : '查看审批记录', - handler : function() { - ApprovalRecord(formId); - } - }*/ , { text : '取消', handler : function() { @@ -481,7 +449,6 @@ }); approvalWindowObj = Ext4.create('Ext4.window.Window', { - //layout : 'vbox', layout : 'fit', autoScroll:true, title : '审批信息', Index: forgon-core/src/main/java/com/forgon/workflow/service/WorkFlowManagerImpl.java =================================================================== diff -u -r22166 -r22243 --- forgon-core/src/main/java/com/forgon/workflow/service/WorkFlowManagerImpl.java (.../WorkFlowManagerImpl.java) (revision 22166) +++ forgon-core/src/main/java/com/forgon/workflow/service/WorkFlowManagerImpl.java (.../WorkFlowManagerImpl.java) (revision 22243) @@ -45,6 +45,17 @@ WorkFlowApprovalTaskManager workFlowApprovalTaskManager) { this.workFlowApprovalTaskManager = workFlowApprovalTaskManager; } + + @Override + public JSONArray getWorkFlowAndFirstNodeDefinition(String formType) { + NodeDefinition firstNodeDefinition=nodeDefinitionManager.getFirstNodeDefinition(formType); + JSONArray jSONArray=new JSONArray(); + JSONObject jSONObject=new JSONObject(); + jSONObject.put("workFlowName", firstNodeDefinition.getWorkFlow().getWorkFlowName()); + jSONObject.put("nodeDefinitionName", firstNodeDefinition.getName()); + jSONArray.add(jSONObject); + return jSONArray; + } @Override public JSONArray getAllUserByformType(String formType) { @@ -385,5 +396,4 @@ return jSONArray; } - } Index: forgon-core/src/main/java/com/forgon/workflow/service/WorkFlowApprovalTaskManagerImpl.java =================================================================== diff -u -r22168 -r22243 --- forgon-core/src/main/java/com/forgon/workflow/service/WorkFlowApprovalTaskManagerImpl.java (.../WorkFlowApprovalTaskManagerImpl.java) (revision 22168) +++ forgon-core/src/main/java/com/forgon/workflow/service/WorkFlowApprovalTaskManagerImpl.java (.../WorkFlowApprovalTaskManagerImpl.java) (revision 22243) @@ -2,7 +2,10 @@ import java.sql.ResultSet; import java.sql.SQLException; +import java.text.ParseException; +import java.text.SimpleDateFormat; import java.util.ArrayList; +import java.util.Calendar; import java.util.Date; import java.util.List; @@ -11,6 +14,8 @@ import net.sf.json.JSONArray; import net.sf.json.JSONObject; +import com.forgon.Constants; +import com.forgon.databaseadapter.service.DateQueryAdapter; import com.forgon.directory.acegi.tools.AcegiHelper; import com.forgon.directory.vo.LoginUserData; import com.forgon.entity.ExtJsEntity; @@ -28,32 +33,69 @@ public class WorkFlowApprovalTaskManagerImpl extends BasePoManagerImpl implements WorkFlowApprovalTaskManager{ - private ExtGridUtils extGridUtils; - public void setExtGridUtils(ExtGridUtils extGridUtils) { - this.extGridUtils = extGridUtils; - } - private InitDbConnection dbConnection; + private DateQueryAdapter dateQueryAdapter; + + private NodeDefinitionManager nodeDefinitionManager; + public void setDbConnection(InitDbConnection dbConnection) { this.dbConnection = dbConnection; } + + public void setExtGridUtils(ExtGridUtils extGridUtils) { + this.extGridUtils = extGridUtils; + } + + public void setDateQueryAdapter(DateQueryAdapter dateQueryAdapter) { + this.dateQueryAdapter = dateQueryAdapter; + } - private NodeDefinitionManager nodeDefinitionManager; - - public void setNodeDefinitionManager(NodeDefinitionManager nodeDefinitionManager) { this.nodeDefinitionManager = nodeDefinitionManager; } + @Override + public String getFirstUserNameByFormId(String formId) { + Long formID=null; + if(StringUtils.isNotBlank(formId)){ + formID = Long.valueOf(formId); + } + NodeDefinition firstNodeDefinition = nodeDefinitionManager.getFirstNodeDefinition(formID); + //根据第一个节点和formId,获取第一条记录 + String sql=""; + if(dbConnection.isSqlServer()){ + sql = " select * from SS_USERS s where s.id = " + + "(select w.userId from WorkFlowApprovalTask w where w.id = " + + "(select top 1 wfat.id from WorkFlowApprovalTask wfat where wfat.formId = "+formId+" and wfat.nodeDefinition_id = "+ firstNodeDefinition.getId()+" order by wfat.createTaskTime desc ))"; + }else{ + sql = " select * from SS_USERS s where s.id = " + + "(select w.userId from WorkFlowApprovalTask w where w.id = " + + "(select * from (select wfat.id from WorkFlowApprovalTask wfat where wfat.formId = "+formId+" and wfat.nodeDefinition_id = "+ firstNodeDefinition.getId()+" order by wfat.createTaskTime desc ) where rownum =1 ) )"; + } + ResultSet rs = objectDao.executeSql(sql); + String userName = ""; + try { + while (rs.next()) { + userName=rs.getString("fullName"); + } + } catch (SQLException e) { + throw new RuntimeException("获取用户失败!"); + }finally { + DatabaseUtil.closeResultSetAndStatement(rs); + } + return userName; + } + + @Override public JSONArray loadWorkFlowApprovalTaskRecordList(String formId){ JSONArray jSONArray=new JSONArray(); List workFlowApprovalTaskList=new ArrayList(); - //工单id不为空,则获取该工单id对应的待办任务 - if(StringUtils.isNotBlank(formId)){ + //工单id不为空,则获取该工单id对应的待办任务,为了前台不传空值,当为空的时候,赋值为0 + if(StringUtils.isNotBlank(formId)&&!"0".equals(formId)){ workFlowApprovalTaskList=objectDao.findByProperty(WorkFlowApprovalTask.class.getSimpleName(), "formId", formId); if(workFlowApprovalTaskList.size()>0){ JSONObject jSONObject=new JSONObject(); @@ -417,7 +459,7 @@ WorkFlowApprovalTask workFlowApprovalTask=getForUpdate(workFlowApprovalTaskVO.getWorkFlowApprovalTaskId()); if(workFlowApprovalTask!=null){ workFlowApprovalTask.setStatus(1); - workFlowApprovalTask.setApprovalResult(2); + workFlowApprovalTask.setApprovalResult(WorkFlowApprovalTask.APPROVALRESULT_SUBMIT); workFlowApprovalTask.setHandleTime(new Date()); User user= getUserByFormId(workFlowApprovalTask.getFormId()); if(user==null) @@ -445,6 +487,51 @@ } @Override + public JSONObject loadFinishedApprovalTaskList(String startDateSearch,String endDateSearch,String approvalResult) { + //1、获取当前登陆用户的id和名字 + LoginUserData userData= AcegiHelper.getLoginUser(); + Long userId= userData.getUserId(); + + //2、获取当前用户对应的已办任务 :与handlerId匹配; + String select = " select * from WorkFlowApprovalTask po "; + String where =" where po.status = 1 and po.handlerId ="+userId; + + //转化为起始时间的00:00:00,到截止时间的最后一秒23:59:59 + if (StringUtils.isNotBlank(startDateSearch) + && StringUtils.isNotBlank(endDateSearch)) { + SimpleDateFormat sdf = Constants.SIMPLEDATEFORMAT_YYYYMMDD; + SimpleDateFormat fullSdf = Constants.SIMPLEDATEFORMAT_YYYYMMDDHHMMSS; + Date startDate = null; + Date endDate = null; + try { + startDate = sdf.parse(startDateSearch.trim()); + endDate = sdf.parse(endDateSearch.trim()); + + int dayMis=1000*60*60*24;//一天的毫秒 + long endMillisecond = endDate.getTime();//截止日期总毫秒 + long resultMis=endMillisecond+(dayMis-1); //当天最后一毫秒 + endDate=new Date(resultMis); + } catch (ParseException e) { + throw new RuntimeException("时间转化出错!"); + } + where += " and po.createTaskTime between " + + dateQueryAdapter.dateAdapter(startDate) + " and " + + dateQueryAdapter.dateAdapter(endDate); + } + if (StringUtils.isNotBlank(approvalResult)){ + if("6".equals(approvalResult)){ + where += " and po.approvalResult = 6 or po.approvalResult = 7"; + }else{ + where += " and po.approvalResult = " + approvalResult; + } + } + String order =" order by po.handleTime desc "; + ExtJsEntity entity = ExtJsUtil.buildSQLEntity(select, where, order); + JSONObject result = extGridUtils.getPagedResult(entity); + return result; + } + + @Override public JSONObject loadWorkFlowApprovalTaskList(String formType) { //1、获取当前登陆用户的id和名字 LoginUserData userData= AcegiHelper.getLoginUser(); Index: forgon-core/src/main/java/com/forgon/workflow/service/NodeDefinitionManagerImpl.java =================================================================== diff -u -r22166 -r22243 --- forgon-core/src/main/java/com/forgon/workflow/service/NodeDefinitionManagerImpl.java (.../NodeDefinitionManagerImpl.java) (revision 22166) +++ forgon-core/src/main/java/com/forgon/workflow/service/NodeDefinitionManagerImpl.java (.../NodeDefinitionManagerImpl.java) (revision 22243) @@ -25,6 +25,19 @@ } return firstNodeDefinition; } + + @Override + public NodeDefinition getFirstNodeDefinition(Long formId) { + NodeDefinition firstNodeDefinition = null; + WorkFlow workFlow = (WorkFlow) objectDao.getBySql(WorkFlow.class.getSimpleName(), "where po.status=true and po.invoicePlanType in (select i.type from InvoicePlan i where i.id="+formId+"))"); + if (workFlow != null) { + List nodeDefinitions = workFlow.getNodeDefinitions(objectDao); + if (CollectionUtils.isNotEmpty(nodeDefinitions)) { + firstNodeDefinition = nodeDefinitions.get(0); + } + } + return firstNodeDefinition; + } @Override public NodeDefinition getNextNodeDefinition(Long nodeDefinitionId) { Index: ssts-web/src/main/webapp/systemmanage/workFlow/workFlowApprovalTaskRecordView.js =================================================================== diff -u -r22166 -r22243 --- ssts-web/src/main/webapp/systemmanage/workFlow/workFlowApprovalTaskRecordView.js (.../workFlowApprovalTaskRecordView.js) (revision 22166) +++ ssts-web/src/main/webapp/systemmanage/workFlow/workFlowApprovalTaskRecordView.js (.../workFlowApprovalTaskRecordView.js) (revision 22243) @@ -178,6 +178,8 @@ Ext4.onReady(function() { var approvalRecordGrid= Ext4.create('Ext.grid.Panel', { + height:250, + autoScroll :true, title: entityName3, columnLines: true, store: workFlowApprovalTaskRecordListStore, Index: forgon-core/src/main/java/com/forgon/workflow/service/WorkFlowManager.java =================================================================== diff -u -r22166 -r22243 --- forgon-core/src/main/java/com/forgon/workflow/service/WorkFlowManager.java (.../WorkFlowManager.java) (revision 22166) +++ forgon-core/src/main/java/com/forgon/workflow/service/WorkFlowManager.java (.../WorkFlowManager.java) (revision 22243) @@ -100,6 +100,11 @@ */ public JSONArray getAllUserByformType(String formType); - + /** + * 根据工单类型获取工作流的第一个节点,流程名字,审批表里指定的用户 + * @param formType 工单类型 + * @return + */ + public JSONArray getWorkFlowAndFirstNodeDefinition(String formType); } Index: ssts-web/src/main/webapp/systemmanage/workFlow/workFlowApprovalTaskChooseNextOneForm.js =================================================================== diff -u -r22166 -r22243 --- ssts-web/src/main/webapp/systemmanage/workFlow/workFlowApprovalTaskChooseNextOneForm.js (.../workFlowApprovalTaskChooseNextOneForm.js) (revision 22166) +++ ssts-web/src/main/webapp/systemmanage/workFlow/workFlowApprovalTaskChooseNextOneForm.js (.../workFlowApprovalTaskChooseNextOneForm.js) (revision 22243) @@ -5,15 +5,6 @@ showResult("请选择下一个执行用户!"); return false; } - //调用提交表单方法方法,并传送UserId过去 - - /* var result = passNextExecuteUser(nodeDefinition_id,userID); - if(result.success){ - showResult(result.message); - nextExecuteUserFormObj.close(); - }else{ - showResult(result.message); - }*/ } var fNodeDefinitionUserStore=null; @@ -42,41 +33,72 @@ ], data:fNodeDefinitionUserStore }); + + var wAndFirstNodeDefinitionSore=null; + Ext4.Ajax.request({ + async:false, + url : WWWROOT + '/disinfectSystem/workFlowAction!getWorkFlowAndFirstNodeDefinition.do', + params : {formType : formType}, + success : function(response, options) { + var result = Ext4.decode(response.responseText,true); // 此处返回的有可能不是json字符串,因为注销之后,会被acegi拦截,返回html + if(result.success){ + wAndFirstNodeDefinitionSore=result.rows; + }else{ + showResult(result.message); + } + }, + failure : function(response, options) { + result = Ext4.JSON.decode(response.responseText); + showResult(result.message); + } + }); + + var workFlowAndFirstNodeDefinitionStore=new Ext4.data.JsonStore({ + fields : [ + {name:'workFlowName', type: 'string'}, + {name:'nodeDefinitionName', type:'string'} + ], + data:wAndFirstNodeDefinitionSore + }); Ext4.onReady(function() { var nextExecuteUserFormObj= Ext4.create('Ext4.form.Panel', { id:'nextExecuteUserFormObj', + height:130, layout : 'column', frame : true, - border : 0, - buttonAlign : 'center', - buttons : [ { - name : 'save', - text : '保存', - handler : function() { - saveNextExecuteUser(); - } - }, { - text : '取消', - handler : function() { - nextExecuteUserFormObj.close(); - } - } ], + buttons : [ ], fieldDefaults : { labelAlign : 'right', labelWidth : 100 }, renderTo: 'nextExecuteUserViewport', - items: [ { + items: [ + /* { + xtype : 'textfield', + border : 0, + fieldLabel : '流程名称', + name : "workFlowName", + value : workFlowAndFirstNodeDefinitionStore.getAt(0).data['workFlowName'], + allowBlank : false, + readOnly : true + },*/ + { + xtype : 'textfield', + border : 0, + fieldLabel : '节点名称', + name : "nodeDefinitionName", + value : workFlowAndFirstNodeDefinitionStore.getAt(0).data['nodeDefinitionName'], + allowBlank : false, + readOnly : true + },{ xtype : 'combo', fieldLabel: '下一个执行人', displayField: 'fullName', valueField : 'userId', - labelWidth: 100, queryMode: 'local', store: firstNodeDefinitionUserStore, name : "userID", //name属性适合form submit() - flex: 1, listeners: { //监听 render : function(combo) {//渲染 if(firstNodeDefinitionUserStore.getCount()>0) Index: ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/expensivegoodsapplication/action/ExpensiveGoodsApplicationAction.java =================================================================== diff -u -r22093 -r22243 --- ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/expensivegoodsapplication/action/ExpensiveGoodsApplicationAction.java (.../ExpensiveGoodsApplicationAction.java) (revision 22093) +++ ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/expensivegoodsapplication/action/ExpensiveGoodsApplicationAction.java (.../ExpensiveGoodsApplicationAction.java) (revision 22243) @@ -6,6 +6,7 @@ import net.sf.json.JSONObject; import org.apache.commons.collections4.CollectionUtils; +import org.apache.commons.lang.StringUtils; import org.apache.struts2.convention.annotation.Action; import org.apache.struts2.convention.annotation.Namespace; import org.apache.struts2.convention.annotation.ParentPackage; @@ -59,28 +60,36 @@ } } - /** * 保存或者修改高值耗材申请单. */ public void saveOrUpdateExpensiveGoodsApplication() { String tousseItems = StrutsParamUtils.getPraramValue("tousseItems", ""); + String userId = StrutsParamUtils.getPraramValue("userId", ""); boolean commit = Boolean.valueOf(StrutsParamUtils.getPraramValue("commit", "")); //是否提交操作 + Long userID=null; + if(commit){ + if(StringUtils.isBlank(userId)) + StrutsResponseUtils.output(JSONUtil.buildJsonObject(false, "请选择流程起始执行人!")); + else + userID=Long.parseLong(userId); + } if (StringTools.isNotBlank(tousseItems)) { JSONObject result = JSONUtil.buildJsonObject(true, "保存成功"); try { JSONArray items = JSONArray.fromObject(tousseItems); //重新设置手术时间 expensiveGoodsApplication.setOperationTime(ForgonDateUtils.safelyParseDate(StrutsParamUtils.getPraramValue("operationTime", ""))); - expensiveGoodsApplicationManager.saveOrUpdate(expensiveGoodsApplication, commit, items); + expensiveGoodsApplicationManager.saveOrUpdate(expensiveGoodsApplication, commit, items, userID); } catch (Exception e) { e.printStackTrace(); result = JSONUtil.buildJsonObject(false, e.getMessage()); } StrutsResponseUtils.output(result); } else { StrutsResponseUtils.output(JSONUtil.buildJsonObject(false, "申请项不能为空!")); - } + } + } @@ -103,7 +112,12 @@ } else if (WorkFlowApprovalTask.APPROVALRESULT_CALLBACK.equals(approvalResult)) { expensiveGoodsApplicationManager.updateExpensiveGoodsApplicationForApprovalRollBack(expensiveGoodsApplication, items, workFlowApprovalTaskVO); } else if (WorkFlowApprovalTask.APPROVALRESULT_SUBMIT.equals(approvalResult)) { - expensiveGoodsApplicationManager.updateExpensiveGoodsApplicationForApprovalSubmit(expensiveGoodsApplication, items, workFlowApprovalTaskVO); + Long userID=null; + String userId = StrutsParamUtils.getPraramValue("userId", ""); + if(StringUtils.isNotBlank(userId)){ + userID=Long.valueOf(userId); + } + expensiveGoodsApplicationManager.updateExpensiveGoodsApplicationForApprovalSubmit(expensiveGoodsApplication, items, workFlowApprovalTaskVO,userID); } else if (WorkFlowApprovalTask.APPROVALRESULT_NOTICE.equals(approvalResult)) { expensiveGoodsApplicationManager.awarenessForPass(expensiveGoodsApplication, workFlowApprovalTaskVO); } Index: forgon-core/src/main/java/com/forgon/workflow/service/NodeDefinitionManager.java =================================================================== diff -u -r22046 -r22243 --- forgon-core/src/main/java/com/forgon/workflow/service/NodeDefinitionManager.java (.../NodeDefinitionManager.java) (revision 22046) +++ forgon-core/src/main/java/com/forgon/workflow/service/NodeDefinitionManager.java (.../NodeDefinitionManager.java) (revision 22243) @@ -85,6 +85,13 @@ public NodeDefinition getFirstNodeDefinition(String formType); /** + * 获取某种单类型的第一个审批节点id. + * @param formId 申请单id + * @return + */ + public NodeDefinition getFirstNodeDefinition(Long formId); + + /** * 通过当前节点id获取下一个审批节点对象(如果返回空则说明当前节点已经是最后一个,即审批流程已经结束). * @param nodeDefinitionId 当前节点id * @return Index: forgon-core/src/main/java/com/forgon/workflow/action/WorkFlowAction.java =================================================================== diff -u -r22166 -r22243 --- forgon-core/src/main/java/com/forgon/workflow/action/WorkFlowAction.java (.../WorkFlowAction.java) (revision 22166) +++ forgon-core/src/main/java/com/forgon/workflow/action/WorkFlowAction.java (.../WorkFlowAction.java) (revision 22243) @@ -58,6 +58,22 @@ private NodeDefinitionManager nodeDefinitionManager; + public void getWorkFlowAndFirstNodeDefinition(){ + String formType = StrutsParamUtils.getPraramValue("formType", ""); + JSONObject jsonObject = new JSONObject(); + try { + if(StringUtils.isNotBlank(formType)){ + JSONArray jSONArray = workFlowManager.getWorkFlowAndFirstNodeDefinition(formType); + jsonObject.put("success", true); + jsonObject.put("rows",jSONArray); + } + } catch (Exception e) { + jsonObject.put("success", false); + jsonObject.put("message","加载不到第一个节点"); + } + StrutsResponseUtils.output(jsonObject); + } + public void getFirstNodeDefinitionUser(){ String formType = StrutsParamUtils.getPraramValue("formType", ""); JSONObject jsonObject = new JSONObject(); Index: ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/expensivegoodsapplication/service/ExpensiveGoodsApplicationManagerImpl.java =================================================================== diff -u -r22166 -r22243 --- ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/expensivegoodsapplication/service/ExpensiveGoodsApplicationManagerImpl.java (.../ExpensiveGoodsApplicationManagerImpl.java) (revision 22166) +++ ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/expensivegoodsapplication/service/ExpensiveGoodsApplicationManagerImpl.java (.../ExpensiveGoodsApplicationManagerImpl.java) (revision 22243) @@ -8,6 +8,7 @@ import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang.StringUtils; import org.apache.commons.lang3.BooleanUtils; +import org.jfree.data.DataUtilities; import net.sf.json.JSONArray; import net.sf.json.JSONObject; @@ -87,6 +88,11 @@ @Override public void saveOrUpdate(ExpensiveGoodsApplication expensiveGoodsApplication, boolean commit, JSONArray items) { + saveOrUpdate(expensiveGoodsApplication,commit,items,null); + } + + @Override + public void saveOrUpdate(ExpensiveGoodsApplication expensiveGoodsApplication, boolean commit, JSONArray items, Long userID) { NodeDefinition firstNodeDefinition = nodeDefinitionManager.getFirstNodeDefinition(InvoicePlan.TYPE_EXPENSIVEGOODS_FORM); if (firstNodeDefinition == null) { throw new RuntimeException("请先配置高值耗材申请单的审批流程!"); @@ -135,7 +141,7 @@ expensiveGoodsApplication.setCurrentNodeDefinitionName(firstNodeDefinition.getName()); expensiveGoodsApplication.setProcessStatus(InvoicePlan.PROCESSSTATUS_START_PROCESS); objectDao.saveOrUpdate(expensiveGoodsApplication); - createWorkFlowApprovalTask(expensiveGoodsApplication, firstNodeDefinition); + createWorkFlowApprovalTask(expensiveGoodsApplication, firstNodeDefinition, userID); } //6、写日志 writeLog(expensiveGoodsApplication, items, update); @@ -172,7 +178,7 @@ * @param invoicePlan 申请单对象 * @param invoicePlan 审批节点对象 */ - private void createWorkFlowApprovalTask(InvoicePlan invoicePlan, NodeDefinition nodeDefinition) { + private void createWorkFlowApprovalTask(InvoicePlan invoicePlan, NodeDefinition nodeDefinition, Long userID) { if (nodeDefinition != null) { WorkFlowApprovalTask workFlowApprovalTask = new WorkFlowApprovalTask(); workFlowApprovalTask.setFormId(invoicePlan.getId()); @@ -184,13 +190,21 @@ workFlowApprovalTask.setStatus(0); workFlowApprovalTask.setSerialNumber(invoicePlan.getSerialNumber()); workFlowApprovalTask.setHandleDepart(invoicePlan.getHandleDepart()); - - //如果此节点有多个节点审批,则以第一条为准 - List nodeApprovals = nodeDefinition.getNodeApprovals(objectDao); - if (CollectionUtils.isNotEmpty(nodeApprovals)) { - NodeApproval nodeApproval = nodeApprovals.get(0); - workFlowApprovalTask.setRoleId(nodeApproval.getRoleId()); - workFlowApprovalTask.setUserId(nodeApproval.getUserId()); + //区别于第一次提交,而不是回退后提交 + if(DatabaseUtil.isPoIdValid(userID)){ + workFlowApprovalTask.setUserId(userID);//提交表单时,指定流程第一个节点的执行人 + }else{ + NodeDefinition firstNodeDefinition = nodeDefinitionManager.getFirstNodeDefinition(invoicePlan.getId()); + Long firstNodeDefinitionId = null; + if(firstNodeDefinition != null){ + firstNodeDefinitionId = firstNodeDefinition.getId(); + String sql = " where po.formId = " + invoicePlan.getId() +" and po.nodeDefinition.id =" + firstNodeDefinitionId +" order by po.createTaskTime desc"; + List workFlowApprovalTasks = objectDao.findBySql(WorkFlowApprovalTask.class.getSimpleName(),sql); + if(workFlowApprovalTasks.size()>0) + workFlowApprovalTask.setUserId(workFlowApprovalTasks.get(0).getUserId()); + else + throw new RuntimeException("无指定用户!"); + } } objectDao.saveOrUpdate(workFlowApprovalTask); } @@ -312,8 +326,8 @@ @Override public void updateExpensiveGoodsApplicationForApprovalSubmit( ExpensiveGoodsApplication expensiveGoodsApplication, - JSONArray items, WorkFlowApprovalTaskVO workFlowApprovalTaskVO) { - saveOrUpdate(expensiveGoodsApplication, true, items); + JSONArray items, WorkFlowApprovalTaskVO workFlowApprovalTaskVO,Long userID) { + saveOrUpdate(expensiveGoodsApplication, true, items,userID);//也要指定 workFlowApprovalTaskManager.submitWorkFlowApprovalTask(workFlowApprovalTaskVO); } Index: forgon-core/src/main/java/com/forgon/workflow/service/WorkFlowApprovalTaskManager.java =================================================================== diff -u -r22166 -r22243 --- forgon-core/src/main/java/com/forgon/workflow/service/WorkFlowApprovalTaskManager.java (.../WorkFlowApprovalTaskManager.java) (revision 22166) +++ forgon-core/src/main/java/com/forgon/workflow/service/WorkFlowApprovalTaskManager.java (.../WorkFlowApprovalTaskManager.java) (revision 22243) @@ -116,5 +116,21 @@ public WorkFlowApprovalTask getWorkFlowApprovalTask( Long workFlowApprovalTaskId); + /** + * 流程初始人赋值,判断是按时间排序,时间最近、流程第一个节点的FormId为id的第一条数据----userId + * @param formId 表单id + * @return + */ + public String getFirstUserNameByFormId(String formId); + /** + * 获取当前用户的已办任务 + * @param endDateSearch 起始日期 + * @param startDateSearch 截止日期 + * @param approvalResult 处理结果 + * @return + */ + public JSONObject loadFinishedApprovalTaskList(String startDateSearch, String endDateSearch, String approvalResult); + + } Index: ssts-web/src/main/webapp/systemmanage/workFlow/workFlowApprovalTaskView.js =================================================================== diff -u -r22166 -r22243 --- ssts-web/src/main/webapp/systemmanage/workFlow/workFlowApprovalTaskView.js (.../workFlowApprovalTaskView.js) (revision 22166) +++ ssts-web/src/main/webapp/systemmanage/workFlow/workFlowApprovalTaskView.js (.../workFlowApprovalTaskView.js) (revision 22243) @@ -27,7 +27,7 @@ var formType = records[0].data['formType']; var taskName = records[0].data['taskName']; var approvalResult = records[0].data['approvalResult'] - addAndEditWorkFlowApprovalTask(id,nodeDefinition_id,taskName,formId,formType,approvalResult); + addAndEditWorkFlowApprovalTask(id,nodeDefinition_id,taskName,formId,formType,approvalResult,0); grid.getSelectionModel().deselectAll();// grid reload() 后,getSelectionModel()不变 } @@ -38,7 +38,7 @@ + record.data.taskName+"'," + record.data.formId+",'" + record.data.formType+"'," - + record.data.approvalResult+");return false;\" >" + v + ""; + + record.data.approvalResult+",0);return false;\" >" + v + ""; return str; }