Index: ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/expensivegoodsapplication/action/ExpensiveGoodsApplicationAction.java =================================================================== diff -u -r21950 -r21976 --- ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/expensivegoodsapplication/action/ExpensiveGoodsApplicationAction.java (.../ExpensiveGoodsApplicationAction.java) (revision 21950) +++ ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/expensivegoodsapplication/action/ExpensiveGoodsApplicationAction.java (.../ExpensiveGoodsApplicationAction.java) (revision 21976) @@ -102,6 +102,8 @@ expensiveGoodsApplicationManager.updateExpensiveGoodsApplicationForApprovalFail(expensiveGoodsApplication, items, workFlowApprovalTaskVO); } else if (WorkFlowApprovalTask.APPROVALRESULT_CALLBACK.equals(approvalResult)) { expensiveGoodsApplicationManager.updateExpensiveGoodsApplicationForApprovalRollBack(expensiveGoodsApplication, items, workFlowApprovalTaskVO); + } else if (WorkFlowApprovalTask.APPROVALRESULT_SUBMIT.equals(approvalResult)) { + expensiveGoodsApplicationManager.updateExpensiveGoodsApplicationForApprovalSubmit(expensiveGoodsApplication, items, workFlowApprovalTaskVO); } } catch (Exception e) { e.printStackTrace(); Index: forgon-core/src/main/java/com/forgon/workflow/service/WorkFlowManagerImpl.java =================================================================== diff -u -r21890 -r21976 --- forgon-core/src/main/java/com/forgon/workflow/service/WorkFlowManagerImpl.java (.../WorkFlowManagerImpl.java) (revision 21890) +++ forgon-core/src/main/java/com/forgon/workflow/service/WorkFlowManagerImpl.java (.../WorkFlowManagerImpl.java) (revision 21976) @@ -11,6 +11,7 @@ import net.sf.json.JSONObject; import com.forgon.directory.acegi.tools.AcegiHelper; +import com.forgon.security.model.Role; import com.forgon.security.model.User; import com.forgon.tools.db.DatabaseUtil; import com.forgon.tools.hibernate.ObjectDao; @@ -82,7 +83,33 @@ /*if(isExitsWorkFlowType(workFlow.getInvoicePlanType())) throw new RuntimeCryptoException("流程申请单类型已经存在");*/ saveOrUpdateWorkFlow(workFlow); + + + if(CollectionUtils.isNotEmpty(itemInfo)){ + //获取当前工作流id的所有节点,如与当前传过来的数据不匹配 删除 + List nodeDefinitions = objectDao.findByProperty(NodeDefinition.class.getSimpleName(), "workFlow.id", String.valueOf(workFlow.getId())); + long nodeDefinitionId=0; + Boolean flag=true; + for(NodeDefinition nodeDefinition :nodeDefinitions){ + flag=true; + for(int i = 0;i < itemInfo.size();++i){ + JSONObject item = itemInfo.getJSONObject(i); + if(!"".equals(item.opt("nodeDefinitionId").toString())){ + nodeDefinitionId=Long.parseLong(item.opt("nodeDefinitionId").toString()); + if(DatabaseUtil.isPoIdValid(nodeDefinitionId)){ + if(nodeDefinition.getId()==nodeDefinitionId){//存在则不删除 + flag=false; + } + } + } + } + if(flag){//true为不存在 + NodeApproval nodeApproval=(NodeApproval) objectDao.getByProperty(NodeApproval.class.getSimpleName(), "nodeDefinition.id",nodeDefinition.getId()); + objectDao.delete(nodeApproval); + deleteNodeDefinition(nodeDefinition); + } + } for(int i = 0;i < itemInfo.size();++i){ JSONObject item = itemInfo.getJSONObject(i); saveNodeDefinition(workFlow, item); @@ -97,7 +124,7 @@ if(!"".equals(NodeDefinitionId)) nodeDefinitionId=Integer.parseInt(NodeDefinitionId); if(DatabaseUtil.isPoIdValid(nodeDefinitionId)){ - nodeDefinition.setId(nodeDefinitionId); + nodeDefinition=(NodeDefinition) objectDao.getByID_ForUpdate(NodeDefinition.class.getSimpleName(), nodeDefinitionId); } //For input string: "" nodeDefinition.setSequenceNumber((int) item.opt("sequenceNumber")); nodeDefinition.setName(String.valueOf(item.opt("name"))); @@ -129,7 +156,7 @@ } nodeApproval.setNodeDefinition(nodeDefinition); - String roleId=String.valueOf(item.opt("roleId")); + /*String roleId=String.valueOf(item.opt("roleId")); long RoleId=0; if(!"".equals(roleId)) RoleId=Integer.parseInt(roleId); @@ -139,11 +166,42 @@ long UserId=0; if(!"".equals(userId)) UserId=Integer.parseInt(userId); + nodeApproval.setUserId(UserId);*/ + + /*String roleName=String.valueOf(item.opt("roleName")); + long RoleId=0; + if(!"".equals(roleName)) + RoleId=((Role)objectDao.getByProperty(Role.class.getSimpleName(), "descn", roleName)).getId(); + nodeApproval.setRoleId(RoleId);*/ + + long RoleId=0; + String roleName=String.valueOf(item.opt("roleName")); + if(!"".equals(roleName)){ + if(!isNumeric(roleName)) + RoleId=((Role)objectDao.getByProperty(Role.class.getSimpleName(), "descn", roleName)).getId(); + else + RoleId=Long.parseLong((String) item.opt("roleName")); + } + nodeApproval.setRoleId(RoleId); + + String userName=String.valueOf(item.opt("userName")); + long UserId=0; + if(!"".equals(userName)) + UserId=((User)objectDao.getByProperty(User.class.getSimpleName(), "fullName", userName)).getId(); nodeApproval.setUserId(UserId); - saveOrUpdateNodeApproval(nodeApproval); + saveOrUpdateNodeApproval(nodeApproval); } + private boolean isNumeric(String str){ + Pattern pattern = Pattern.compile("[0-9]*"); + Matcher isNum = pattern.matcher(str); + if(!isNum.matches() ){ + return false; + } + return true; + } + private boolean canParseInt(String str){ if(str == null){ return false;//验证是否为空 Index: forgon-core/src/main/java/com/forgon/workflow/model/WorkFlowApprovalTask.java =================================================================== diff -u -r21957 -r21976 --- forgon-core/src/main/java/com/forgon/workflow/model/WorkFlowApprovalTask.java (.../WorkFlowApprovalTask.java) (revision 21957) +++ forgon-core/src/main/java/com/forgon/workflow/model/WorkFlowApprovalTask.java (.../WorkFlowApprovalTask.java) (revision 21976) @@ -71,13 +71,14 @@ private int status; /** - * 审批结果: 1(待处理-默认值) 2(通过) 3(不通过) 4(回退) + * 审批结果: 1(待处理-默认值) 2(通过) 3(不通过) 4(回退) 5(提交:申请人针对回退的申请单在待办任务列表的修改操作) * */ private int approvalResult = APPROVALRESULT_PENDING; public static Integer APPROVALRESULT_PENDING = 1; public static Integer APPROVALRESULT_PASS = 2; public static Integer APPROVALRESULT_FAIL = 3; public static Integer APPROVALRESULT_CALLBACK = 4; + public static Integer APPROVALRESULT_SUBMIT = 5; /** * 处理意见 Index: forgon-core/src/main/java/com/forgon/workflow/service/WorkFlowApprovalTaskManagerImpl.java =================================================================== diff -u -r21957 -r21976 --- forgon-core/src/main/java/com/forgon/workflow/service/WorkFlowApprovalTaskManagerImpl.java (.../WorkFlowApprovalTaskManagerImpl.java) (revision 21957) +++ forgon-core/src/main/java/com/forgon/workflow/service/WorkFlowApprovalTaskManagerImpl.java (.../WorkFlowApprovalTaskManagerImpl.java) (revision 21976) @@ -5,6 +5,8 @@ import java.util.Date; import java.util.List; +import org.apache.commons.lang.StringUtils; + import net.sf.json.JSONArray; import net.sf.json.JSONObject; @@ -37,7 +39,10 @@ } private NodeDefinition getNodeDefinition(String NodeDefinitionId) { - return (NodeDefinition) objectDao.getByID_ForUpdate(NodeDefinition.class.getSimpleName(),NodeDefinitionId); + if(!StringUtils.isBlank(NodeDefinitionId)){ + return (NodeDefinition) objectDao.getByID_ForUpdate(NodeDefinition.class.getSimpleName(),NodeDefinitionId); + } + return null; } @Override @@ -46,24 +51,50 @@ Long workFlowApprovalTaskId = workFlowApprovalTaskVO.getWorkFlowApprovalTaskId(); WorkFlowApprovalTask workFlowApprovalTask = getWorkFlowApprovalTask(workFlowApprovalTaskId+""); if(workFlowApprovalTask != null){ - //当前节点 - NodeDefinition nodeDefinition = getNodeDefinition(workFlowApprovalTaskVO.getNodeDefinitionId()+""); - //获取下一个节点 - NodeDefinition nextNodeDefinition = nodeDefinitionManager.getNextNodeDefinition(workFlowApprovalTaskVO.getNodeDefinitionId()); + //如果是当前节点为空 + if (!DatabaseUtil.isPoIdValid(workFlowApprovalTaskVO.getNodeDefinitionId())&&workFlowApprovalTaskVO.getNodeDefinitionId()!=null) { + + //当前节点 + NodeDefinition nodeDefinition = getNodeDefinition(workFlowApprovalTaskVO.getNodeDefinitionId()+""); + //获取下一个节点 + NodeDefinition nextNodeDefinition = nodeDefinitionManager.getNextNodeDefinition(workFlowApprovalTaskVO.getNodeDefinitionId()); + + workFlowApprovalTask.setNodeDefinition(nodeDefinition); + workFlowApprovalTask.setHandlerId(workFlowApprovalTaskVO.getHandlerId()); + workFlowApprovalTask.setHandler(workFlowApprovalTaskVO.getHandler()); + workFlowApprovalTask.setHandleTime(new Date()); + workFlowApprovalTask.setHandleOpinion(workFlowApprovalTaskVO.getHandleOpinion()); + workFlowApprovalTask.setApprovalResult(workFlowApprovalTaskVO.getApprovalResult()); + workFlowApprovalTask.setStatus(1); + saveOrUpdateWorkFlowApprovalTask(workFlowApprovalTask); - workFlowApprovalTask.setNodeDefinition(nodeDefinition); - workFlowApprovalTask.setHandlerId(workFlowApprovalTaskVO.getHandlerId()); - workFlowApprovalTask.setHandler(workFlowApprovalTaskVO.getHandler()); - workFlowApprovalTask.setHandleTime(new Date()); - workFlowApprovalTask.setHandleOpinion(workFlowApprovalTaskVO.getHandleOpinion()); - workFlowApprovalTask.setApprovalResult(workFlowApprovalTaskVO.getApprovalResult()); - workFlowApprovalTask.setStatus(1); - saveOrUpdateWorkFlowApprovalTask(workFlowApprovalTask); - - if(nextNodeDefinition != null) { //有下一个节点 + if(nextNodeDefinition != null) { //有下一个节点 + WorkFlowApprovalTask workFlowApprovalTask1 = new WorkFlowApprovalTask(); + workFlowApprovalTask1.setTaskName(nextNodeDefinition.getName()); + workFlowApprovalTask1.setNodeDefinition(nextNodeDefinition); + workFlowApprovalTask1.setFormId(workFlowApprovalTaskVO.getFormId()); + workFlowApprovalTask1.setFormType(workFlowApprovalTaskVO.getFormType()); + workFlowApprovalTask1.setTitle(workFlowApprovalTaskVO.getFormId()+workFlowApprovalTaskVO.getFormType()); + workFlowApprovalTask1.setCreateTaskTime(new Date()); + if(DatabaseUtil.isPoIdValid(workFlowApprovalTaskVO.getUserId())){//用户没有指定下一个,则默认节点审批的角色和用户 + workFlowApprovalTask1.setUserId(workFlowApprovalTaskVO.getUserId()); + workFlowApprovalTask1.setStatus(0); + }else{ + NodeApproval nodeApproval=(NodeApproval) objectDao.getByProperty(NodeApproval.class.getSimpleName(), "nodeDefinition.id", nextNodeDefinition.getId()); + long roleId=nodeApproval.getRoleId(); + long userId=nodeApproval.getUserId(); + workFlowApprovalTask1.setRoleId(roleId); + workFlowApprovalTask1.setUserId(userId); + } + saveOrUpdateWorkFlowApprovalTask(workFlowApprovalTask1); + } + } + /*else{ + //获取当前流程的第一个节点 + NodeDefinition firstNodeDefinition = nodeDefinitionManager.getFirstNodeDefinition(workFlowApprovalTaskVO.getFormType()); WorkFlowApprovalTask workFlowApprovalTask1 = new WorkFlowApprovalTask(); - workFlowApprovalTask1.setTaskName(nextNodeDefinition.getName()); - workFlowApprovalTask1.setNodeDefinition(nextNodeDefinition); + workFlowApprovalTask1.setTaskName(firstNodeDefinition.getName()); + workFlowApprovalTask1.setNodeDefinition(firstNodeDefinition); workFlowApprovalTask1.setFormId(workFlowApprovalTaskVO.getFormId()); workFlowApprovalTask1.setFormType(workFlowApprovalTaskVO.getFormType()); workFlowApprovalTask1.setTitle(workFlowApprovalTaskVO.getFormId()+workFlowApprovalTaskVO.getFormType()); @@ -72,14 +103,14 @@ workFlowApprovalTask1.setUserId(workFlowApprovalTaskVO.getUserId()); workFlowApprovalTask1.setStatus(0); }else{ - NodeApproval nodeApproval=(NodeApproval) objectDao.getByProperty(NodeApproval.class.getSimpleName(), "nodeDefinition.id", nextNodeDefinition.getId()); + NodeApproval nodeApproval=(NodeApproval) objectDao.getByProperty(NodeApproval.class.getSimpleName(), "nodeDefinition.id", firstNodeDefinition.getId()); long roleId=nodeApproval.getRoleId(); long userId=nodeApproval.getUserId(); workFlowApprovalTask1.setRoleId(roleId); workFlowApprovalTask1.setUserId(userId); } saveOrUpdateWorkFlowApprovalTask(workFlowApprovalTask1); - } + }*/ } } @@ -92,6 +123,7 @@ WorkFlowApprovalTask workFlowApprovalTask=getWorkFlowApprovalTask(workFlowApprovalTaskVO.getWorkFlowApprovalTaskId()+""); if(workFlowApprovalTask!=null){ + //获取上一个节点 NodeDefinition nodeDefinition1=nodeDefinitionManager.getLastNodeDefinition(workFlowApprovalTaskVO.getNodeDefinitionId()); @@ -164,138 +196,75 @@ * 如果是倒数第二个节点,则指定申请人,无须指定是谁 */ @Override - public JSONArray getAllUserByWorkFlowApprovalTaskId(String id,String nodeDefinition_id) { - //因为回退,所以根据节点和表单号可能查出多条,则以时间排序获取最新一条 - String sql="select (case when (select top 1 id from ( SELECT TOP 2 * from NodeDefinition order by sequenceNumber DESC ) as a order by a.sequenceNumber ASC)= "+nodeDefinition_id+" then 1 else 0 end) flag"; - ResultSet nodeDefinitionResult = objectDao.executeSql(sql); - long flag=0; - try { - while(nodeDefinitionResult.next()){ - flag=nodeDefinitionResult.getLong("flag"); - } - } catch (SQLException e1) { - // TODO Auto-generated catch block - e1.printStackTrace(); - } - - /*String sql=" select top 1 id from ( SELECT TOP 2 * from NodeDefinition order by sequenceNumber DESC ) as a order by a.sequenceNumber ASC "; - String sql1="select w.nodeDefinition_id from WorkFlowApprovalTask w where w.id="+id; - ResultSet nodeDefinitionResult = objectDao.executeSql(sql); - ResultSet workFlowApprovalTaskResult = objectDao.executeSql(sql1); - - try { - long nodeDefinition_id1=0; - long nodeDefinition_id2=0; - - while(nodeDefinitionResult.next()){ - nodeDefinition_id1=nodeDefinitionResult.getLong("id"); - } - - while(workFlowApprovalTaskResult.next()){ - nodeDefinition_id2=nodeDefinitionResult.getLong("nodeDefinition_id"); - } - if(nodeDefinition_id1==nodeDefinition_id2&&nodeDefinition_id1!=0&&nodeDefinition_id2!=0){ - flag=true; - } - } catch (SQLException e1) { - // TODO Auto-generated catch block - e1.printStackTrace(); - }*/ - JSONArray jSONArray = new JSONArray(); - ResultSet result1 = null,result2 = null; - if(flag==0){ - JSONObject jSONObject; + public JSONArray getAllUserByWorkFlowApprovalTaskId(String workFlowApprovalTaskId,String nodeDefinition_id) { + if(!StringUtils.isBlank(nodeDefinition_id)){ + String sql="select (case when (select top 1 id from ( SELECT TOP 2 * from NodeDefinition order by sequenceNumber DESC ) as a order by a.sequenceNumber ASC)= "+nodeDefinition_id+" then 1 else 0 end) flag"; + ResultSet nodeDefinitionResult = objectDao.executeSql(sql); + Long flag = null; try { - //获取节点审批表的roleid 对应下的用户 - String select1=" select ur.USER_ID userId,u.fullName from SS_USER_ROLE ur ,SS_USERS u "; - String where1 =" where ur.ROLE_ID in (select na.roleId from NodeApproval na where na.nodeDefinition_ID= (select no.id from NodeDefinition no where no.sequenceNumber =( select n.sequenceNumber+1 from NodeDefinition n where n.id="+nodeDefinition_id+") and no.workFlow_id=( select n.workFlow_id from NodeDefinition n where n.id="+nodeDefinition_id+"))) and ur.USER_ID=u.id"; - result1 = objectDao.executeSql(select1+where1); - //获取节点审批表的useid 对应下的用户 - String select2=" select u.id,u.fullName from ss_users u "; - String where2 =" where u.id= (select na.userId from NodeApproval na where na.nodeDefinition_ID= (select no.id from NodeDefinition no where no.sequenceNumber =( select n.sequenceNumber+1 from NodeDefinition n where n.id="+nodeDefinition_id+") and no.workFlow_id=( select n.workFlow_id from NodeDefinition n where n.id="+nodeDefinition_id+"))) "; - result2 = objectDao.executeSql(select2+where2); - - while(result1.next()){ - jSONObject = new JSONObject(); - jSONObject.put("userId", result1.getLong("userId")); - jSONObject.put("fullName", result1.getString("fullName")); - jSONArray.add(jSONObject); + while(nodeDefinitionResult.next()){ + flag=nodeDefinitionResult.getLong("flag"); } - - while(result2.next()){ - jSONObject = new JSONObject(); - jSONObject.put("userId", result2.getLong("id")); - jSONObject.put("fullName", result2.getString("fullName")); - jSONArray.add(jSONObject); - } - } catch (SQLException e) { - e.printStackTrace(); - return null; - }finally { - DatabaseUtil.closeResultSetAndStatement(result1); - DatabaseUtil.closeResultSetAndStatement(result2); + } catch (SQLException e1) { + e1.printStackTrace(); } - /*String select=" select w.userId,u.fullName from WorkFlowApprovalTask w ,SS_USERS u "; - select+=" where u.id=w.userId and w.id="+id; - ResultSet result = objectDao.executeSql(select); - JSONObject jSONObject; - try { - while(result.next()){ - jSONObject = new JSONObject(); - jSONObject.put("userId", result.getLong("userId")); - jSONObject.put("fullName", result.getString("fullName")); - jSONArray.add(jSONObject); - } - - if(jSONArray.size()==0){ - String select1=" select ur.USER_ID userId,u.fullName from SS_USER_ROLE ur ,SS_USERS u "; - String where1 =" where ur.ROLE_ID in (select w.roleId from WorkFlowApprovalTask w where w.id='"+id+"') and ur.USER_ID=u.id "; - ResultSet result1 = objectDao.executeSql(select1+where1); - String select2=" select ur.USER_ID userId,u.fullName from SS_USER_ROLE ur ,SS_USERS u "; - String where2 =" where ur.ROLE_ID in (select w.roleId from WorkFlowApprovalTask w where w.id='"+id+"') and ur.USER_ID=u.id "; - ResultSet result2 = objectDao.executeSql(select2+where2); + JSONArray jSONArray = new JSONArray(); + ResultSet result1 = null,result2 = null; + //当前节点是倒数第二个节点 + if(flag==1){ + JSONObject jSONObject; + try { + //获取节点审批表的roleid 对应下的用户 + String select1=" select ur.USER_ID userId,u.fullName from SS_USER_ROLE ur ,SS_USERS u "; + String where1 =" where ur.ROLE_ID in (select na.roleId from NodeApproval na where na.nodeDefinition_ID= (select no.id from NodeDefinition no where no.sequenceNumber =(select top 1 po.sequenceNumber from NodeDefinition po where po.sequenceNumber > (select nd.sequenceNumber from NodeDefinition nd where nd.id="+nodeDefinition_id+") order by po.sequenceNumber ) and no.workFlow_id=( select n.workFlow_id from NodeDefinition n where n.id="+nodeDefinition_id+"))) and ur.USER_ID=u.id"; + result1 = objectDao.executeSql(select1+where1); + //获取节点审批表的useid 对应下的用户 + String select2=" select u.id,u.fullName from ss_users u "; + String where2 =" where u.id= (select na.userId from NodeApproval na where na.nodeDefinition_ID= (select no.id from NodeDefinition no where no.sequenceNumber = =(select top 1 po.sequenceNumber from NodeDefinition po where po.sequenceNumber > (select nd.sequenceNumber from NodeDefinition nd where nd.id="+nodeDefinition_id+") order by po.sequenceNumber ) and no.workFlow_id=( select n.workFlow_id from NodeDefinition n where n.id="+nodeDefinition_id+"))) "; + result2 = objectDao.executeSql(select2+where2); + while(result1.next()){ jSONObject = new JSONObject(); - jSONObject.put("userId", result.getLong("userId")); - jSONObject.put("fullName", result.getString("fullName")); + jSONObject.put("userId", result1.getLong("userId")); + jSONObject.put("fullName", result1.getString("fullName")); jSONArray.add(jSONObject); } - + while(result2.next()){ jSONObject = new JSONObject(); - jSONObject.put("userId", result.getLong("userId")); + jSONObject.put("userId", result2.getLong("id")); + jSONObject.put("fullName", result2.getString("fullName")); + jSONArray.add(jSONObject); + } + } catch (SQLException e) { + e.printStackTrace(); + return null; + }finally { + DatabaseUtil.closeResultSetAndStatement(result1); + DatabaseUtil.closeResultSetAndStatement(result2); + } + }else{//指定申请人为下一个节点 + String sql2="select u.id,u.fullName from ss_users u where u.name=(select i.applicantCode from InvoicePlan i where i.id= (select w.formId from WorkFlowApprovalTask w where w.id="+workFlowApprovalTaskId+"))"; + ResultSet result = objectDao.executeSql(sql2); + JSONObject jSONObject; + try { + while(result.next()){ + jSONObject = new JSONObject(); + jSONObject.put("userId", result.getLong("id")); jSONObject.put("fullName", result.getString("fullName")); jSONArray.add(jSONObject); } + } catch (SQLException e) { + e.printStackTrace(); } - } catch (SQLException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - return null; - }finally { - DatabaseUtil.closeResultSetAndStatement(result); - }*/ - }else{ - String sql2="select u.id,u.fullName from ss_users u where u.name=(select i.applicantCode from InvoicePlan i where i.id= (select w.formId from WorkFlowApprovalTask w where w.id="+id+"))"; - ResultSet result = objectDao.executeSql(sql2); - JSONObject jSONObject; - try { - while(result.next()){ - jSONObject = new JSONObject(); - jSONObject.put("userId", result.getLong("id")); - jSONObject.put("fullName", result.getString("fullName")); - jSONArray.add(jSONObject); - } - } catch (SQLException e) { - // TODO Auto-generated catch block - e.printStackTrace(); } + return jSONArray; + }else{ + return new JSONArray(); } - return jSONArray; } - @Override public WorkFlowApprovalTask getWorkFlowApprovalTask(String id) { //WorkFlowApprovalTask task = (WorkFlowApprovalTask) objectDao.getByID_ForUpdate(WorkFlowApprovalTask.class.getSimpleName(),id); @@ -394,4 +363,12 @@ return null; } + @Override + public void submitWorkFlowApprovalTask( + WorkFlowApprovalTaskVO workFlowApprovalTaskVO) { + WorkFlowApprovalTask workFlowApprovalTask=getWorkFlowApprovalTask(workFlowApprovalTaskVO.getWorkFlowApprovalTaskId()+""); + workFlowApprovalTask.setStatus(1); + objectDao.save(workFlowApprovalTask); + } + } Index: ssts-web/src/main/webapp/systemmanage/workFlow/workFlowApprovalTaskView.js =================================================================== diff -u -r21947 -r21976 --- ssts-web/src/main/webapp/systemmanage/workFlow/workFlowApprovalTaskView.js (.../workFlowApprovalTaskView.js) (revision 21947) +++ ssts-web/src/main/webapp/systemmanage/workFlow/workFlowApprovalTaskView.js (.../workFlowApprovalTaskView.js) (revision 21976) @@ -97,9 +97,9 @@ },{ header : "工单号", dataIndex : 'formId', - width : 300, - minWidth : 300, - maxWidth : 300, + width : 150, + minWidth : 150, + maxWidth : 150, filterable : true, filter : { type : 'string' @@ -117,9 +117,9 @@ }, { header : "标题", dataIndex : 'title', - width : 150, - minWidth : 150, - maxWidth : 150, + width : 300, + minWidth : 300, + maxWidth : 300, filterable : true, filter : { type : 'string' @@ -145,8 +145,8 @@ }, { header : "任务名称", dataIndex : 'taskName', - width : 150, - minWidth : 150, + width : 200, + minWidth : 200, filterable : true, filter : { type : 'string' Index: ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/expensivegoodsapplication/service/ExpensiveGoodsApplicationManager.java =================================================================== diff -u -r21957 -r21976 --- ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/expensivegoodsapplication/service/ExpensiveGoodsApplicationManager.java (.../ExpensiveGoodsApplicationManager.java) (revision 21957) +++ ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/expensivegoodsapplication/service/ExpensiveGoodsApplicationManager.java (.../ExpensiveGoodsApplicationManager.java) (revision 21976) @@ -19,6 +19,15 @@ * @param items 此次提交的申请项信息 */ public void saveOrUpdate(ExpensiveGoodsApplication expensiveGoodsApplication, boolean commit, JSONArray items); + + /** + * 修改高值耗材申请单(起单人时候对申请单的一些修改). + * @param expensiveGoodsApplication 高值耗材申请单对象 + * @param items 此次提交的申请项信息 + * @param workFlowApprovalTaskVO 待办任务处理的VO对象 + */ + public void updateExpensiveGoodsApplicationForApprovalSubmit( + ExpensiveGoodsApplication expensiveGoodsApplication, JSONArray items, WorkFlowApprovalTaskVO workFlowApprovalTaskVO); /** * 修改高值耗材申请单(审批通过的时候对申请单的一些修改). Index: forgon-core/src/main/java/com/forgon/workflow/action/WorkFlowAction.java =================================================================== diff -u -r21885 -r21976 --- forgon-core/src/main/java/com/forgon/workflow/action/WorkFlowAction.java (.../WorkFlowAction.java) (revision 21885) +++ forgon-core/src/main/java/com/forgon/workflow/action/WorkFlowAction.java (.../WorkFlowAction.java) (revision 21976) @@ -127,6 +127,7 @@ .getUserFullName()); workFlow.setLastUpdateTime(new Date()); } + JSONArray nodeJson = JSONArray.fromObject(items); workFlowManager.save(workFlow, nodeJson); StrutsResponseUtils.output(true, "保存成功"); @@ -160,10 +161,9 @@ * 根据流程id获取,所对应的节点 */ public void loadNodeDefinitionList() { - if (DatabaseUtil.isPoIdValid(workFlow.getId())) { StringBuffer select = new StringBuffer(); - select.append("select w.id nodeDefinitionId,w.name,w.allowRollback,w.allowDisagree,w.sequenceNumber,n.id nodeApprovalId,n.roleId,n.userId,r.descn roleName,u.name userName from NodeDefinition w,NodeApproval n "); + select.append("select w.id nodeDefinitionId,w.name,case w.allowRollback when 'True' then '是' when 'False' THEN '否' end allowRollback,case w.allowDisagree when 'True' THEN '是' when 'False' THEN '否' end allowDisagree,w.sequenceNumber,n.id nodeApprovalId,n.roleId,n.userId,r.descn roleName,u.fullName userName from NodeDefinition w,NodeApproval n "); select.append(" left join SS_ROLES r on r.id=n.roleId left join SS_USERS u on u.id=n.userId "); StringBuffer where = new StringBuffer(); where.append(" where 1=1 and w.id=n.nodeDefinition_ID and "); Index: forgon-core/src/main/java/com/forgon/workflow/service/NodeDefinitionManagerImpl.java =================================================================== diff -u -r21911 -r21976 --- forgon-core/src/main/java/com/forgon/workflow/service/NodeDefinitionManagerImpl.java (.../NodeDefinitionManagerImpl.java) (revision 21911) +++ forgon-core/src/main/java/com/forgon/workflow/service/NodeDefinitionManagerImpl.java (.../NodeDefinitionManagerImpl.java) (revision 21976) @@ -44,8 +44,8 @@ if (DatabaseUtil.isPoIdValid(nodeDefinitionId)) { String sequenceNumberSql = String.format(" and po.sequenceNumber %s (select nd.sequenceNumber from NodeDefinition nd where nd.id=%s)", (next ? ">" : "<"), nodeDefinitionId); - String whereSql = String.format("where po.workFlow.id=(select nd.workFlow.id from NodeDefinition nd where nd.id=%s) %s order by po.sequenceNumber", - nodeDefinitionId, sequenceNumberSql); + String whereSql = String.format("where po.workFlow.id=(select nd.workFlow.id from NodeDefinition nd where nd.id=%s) %s order by po.sequenceNumber %s ", + nodeDefinitionId, sequenceNumberSql,(next ? "asc": "desc")); nodeDefinition = (NodeDefinition) objectDao.getBySql(NodeDefinition.class.getSimpleName(), whereSql); } return nodeDefinition; Index: ssts-web/src/main/webapp/systemmanage/workFlow/workFlowApprovalTaskForm.js =================================================================== diff -u -r21957 -r21976 --- ssts-web/src/main/webapp/systemmanage/workFlow/workFlowApprovalTaskForm.js (.../workFlowApprovalTaskForm.js) (revision 21957) +++ ssts-web/src/main/webapp/systemmanage/workFlow/workFlowApprovalTaskForm.js (.../workFlowApprovalTaskForm.js) (revision 21976) @@ -16,12 +16,11 @@ } } -function addAndEditWorkFlowApprovalTask(id, nodeDefinition_id,taskName,formId,formType) { +function addAndEditWorkFlowApprovalTask(workFlowApprovalTaskId, nodeDefinition_id,taskName,formId,formType) { var aStore=null; Ext4.Ajax.request({ async:false, - //scope:this, url : WWWROOT + '/disinfectSystem/workFlowApprovalTaskAction!loadNodeDefinitionById.do', params : {nodeDefinitionId : nodeDefinition_id}, success : function(response, options) { @@ -35,39 +34,39 @@ allowStore=new Ext4.data.JsonStore({ data:aStore, fields : [ {name:'allowDisagree', type: 'boolean'}, {name:'allowRollback', type:'boolean'} ], - //scope:this, autoLoad:true }); - var workFlowApprovalTaskStore = Ext4.create('Ext.data.Store',{ - fields : [ "id", 'taskName','handlerId','status','approvalResult','handleOpinion' ], + var taskUserStore = Ext4.create('Ext.data.Store',{ + fields : [ 'fullName', 'userId' ], autoLoad : true, proxy : { type : 'ajax', - extraParams : {id:id}, - url : WWWROOT - + '/disinfectSystem/workFlowApprovalTaskAction!getWorkFlowApprovalTask.do', + extraParams : {workFlowApprovalTaskId:workFlowApprovalTaskId,nodeDefinition_id:nodeDefinition_id}, + url : WWWROOT+ '/disinfectSystem/workFlowApprovalTaskAction!getAllUserByWorkFlowApprovalTaskId.do', reader : { root : "rows" } } }); - var taskUserStore = Ext4.create('Ext.data.Store',{ - fields : [ 'fullName', 'userId' ], +/* var workFlowApprovalTaskStore = Ext4.create('Ext.data.Store',{ + //fields : [ "id", 'taskName','handlerId','status','approvalResult','handleOpinion' ], + fields : [ 'taskName'], autoLoad : true, proxy : { type : 'ajax', - extraParams : {id:id,nodeDefinition_id:nodeDefinition_id}, - url : WWWROOT+ '/disinfectSystem/workFlowApprovalTaskAction!getAllUserByWorkFlowApprovalTaskId.do', + extraParams : {id:id}, + url : WWWROOT + + '/disinfectSystem/workFlowApprovalTaskAction!getWorkFlowApprovalTask.do', reader : { root : "rows" } } }); + */ - - + var formTypeJsp; if(formType=="高值耗材申请单") formTypeJsp=WWWROOT+'/disinfectsystem/recyclingApplication/expensiveGoodsApplication/expensiveGoodsApplicationFormForApproval.jsp?expensiveGoodsApplicationId='+formId; @@ -77,14 +76,11 @@ height : 450 }); - - - //绑定该有的值到formObj1中 function saveHandleOpinion(){ var handleOpinion = Ext4.getCmp('formObj1').getForm().findField('handleOpinion').getValue(); var userID = Ext4.getCmp('formObj1').getForm().findField('userID').getValue(); - var result = passSaveHandleOpinionFlag(nodeDefinition_id,taskName,id,1,handleOpinion,userID,formId,formType); + var result = passSaveHandleOpinionFlag(nodeDefinition_id,taskName,workFlowApprovalTaskId,1,handleOpinion,userID,formId,formType); if(result.success){ showResult(result.message); @@ -100,7 +96,7 @@ function updateHandleOpinion(){ var approvalResult = 0; var handleOpinion = Ext4.getCmp('formObj2').getForm().findField('handleOpinion').getValue(); - var result =failHandleOpinionFlag(id,formId,approvalResult,handleOpinion); + var result =failHandleOpinionFlag(workFlowApprovalTaskId,formId,approvalResult,handleOpinion); if(result.success){ showResult("审批成功"); grid.reloadData(); @@ -112,11 +108,10 @@ } - //function rollBackHandleOpinion(nodeDefinition_id,nodeDefinition_name){ function rollBackHandleOpinion(){ var approvalResult = 0; var handleOpinion = Ext4.getCmp('formObj4').getForm().findField('handleOpinion').getValue(); - var result =callbackSaveHandleOpinionFlag(nodeDefinition_id,id,approvalResult,handleOpinion); + var result =callbackSaveHandleOpinionFlag(nodeDefinition_id,workFlowApprovalTaskId,approvalResult,handleOpinion); if(result.success){ showResult("审批成功"); grid.reloadData(); @@ -127,6 +122,17 @@ } } + function submit(){ + var result =submitSaveHandleOpinionFlag(workFlowApprovalTaskId,formId,formType); + if(result.success){ + showResult("审批成功"); + grid.reloadData(); + approvalWindowObj.close(); + }else{ + showResult("审批失败"); + } + } + function Fail(){ formObj2= Ext4.create('Ext4.form.Panel', { id:'formObj2', @@ -159,7 +165,7 @@ { xtype: 'hiddenfield', name: 'id', - value: id + value: workFlowApprovalTaskId },{ xtype: 'hiddenfield', name: 'nodeDefinition_id', @@ -182,7 +188,7 @@ border : 0, fieldLabel : '任务名称', name : "taskName", - value : workFlowApprovalTaskStore.getAt(0).get('taskName'), + value :taskName,// workFlowApprovalTaskStore.getAt(0).get('taskName'), allowBlank : false, readOnly : true, fieldCls : 'fieldReadOnlyNoRemoveAndTop', @@ -212,21 +218,8 @@ } function Pass(){ - /*var nextNodeDefinitionStore = Ext4.create('Ext.data.Store',{ - fields : [ 'id', 'name' ], - autoLoad : true, - proxy : { - type : 'ajax', - extraParams : {nodeDefinition_id:nodeDefinition_id}, - url : WWWROOT+ '/disinfectSystem/workFlowApprovalTaskAction!getNextNodeDefinitionById.do', - reader : { - root : "rows" - } - } - });*/ - - + formObj1= Ext4.create('Ext4.form.Panel', { id:'formObj1', layout : 'column', @@ -241,7 +234,6 @@ name : 'save', text : '保存', handler : function() { - //nextNodeDefinitionStore.getAt(0).get('id'),nextNodeDefinitionStore.getAt(0).get('name') saveHandleOpinion(); } }, { @@ -259,7 +251,7 @@ { xtype: 'hiddenfield', name: 'id', - value: id + value: workFlowApprovalTaskId },{ xtype: 'hiddenfield', name: 'nodeDefinition_id', @@ -283,7 +275,7 @@ border : 0, fieldLabel : '任务名称', name : "taskName", - value : workFlowApprovalTaskStore.getAt(0).get('taskName'), + value : taskName,//workFlowApprovalTaskStore.getAt(0).get('taskName'), readOnly : true, flex: 1 }, @@ -325,20 +317,6 @@ windowObj1.show(); } function RollBack(){ - - /*var lastNodeDefinitionStore= Ext4.create('Ext.data.Store',{ - fields : [ 'id', 'name' ], - autoLoad : true, - proxy : { - type : 'ajax', - extraParams : {nodeDefinition_id:nodeDefinition_id}, - url : WWWROOT+ '/disinfectSystem/workFlowApprovalTaskAction!getLastNodeDefinitionById.do', - reader : { - root : "rows" - } - } - });*/ - formObj4= Ext4.create('Ext4.form.Panel', { id:'formObj4', layout : 'column', @@ -353,7 +331,6 @@ name : 'save', text : '保存', handler : function() { - //lastNodeDefinitionStore.getAt(0).get('id'),lastNodeDefinitionStore.getAt(0).get('name') rollBackHandleOpinion(); } }, { @@ -371,7 +348,7 @@ { xtype: 'hiddenfield', name: 'id', - value: id + value: workFlowApprovalTaskId },{ xtype: 'hiddenfield', name: 'nodeDefinition_id', @@ -394,7 +371,7 @@ border : 0, fieldLabel : '任务名称', name : "taskName", - value : workFlowApprovalTaskStore.getAt(0).get('taskName'), + value : taskName,//workFlowApprovalTaskStore.getAt(0).get('taskName'), readOnly : true, flex: 1 }, @@ -407,7 +384,6 @@ }] }); - //windowObj4 = Ext4.create('Ext4.window.Window', { windowObj4 = new top.Ext4.create('Ext4.window.Window', { layout : 'fit', title : '处理回滚信息', @@ -422,7 +398,6 @@ windowObj4.show(); } - approvalFormObj = Ext4.create('Ext4.form.Panel', { layout : 'vbox', frame : true, @@ -432,8 +407,16 @@ autoScroll : true, buttonAlign : 'center', buttons : [{ + text : '提交', + iconCls : 'btn_ext_application_edit', + hidden: nodeDefinition_id==null?false:true, + handler : function() { + submit(); + } + },{ text : '审核通过', iconCls : 'btn_ext_application_edit', + hidden: nodeDefinition_id==null?true:false, handler : function() { Pass(); } @@ -492,6 +475,17 @@ } +function submitSaveHandleOpinionFlag(workFlowApprovalTaskId,formId,formType){ + var sub = document.getElementById("formIframe").contentWindow; + if(!sub) return false; + var workFlowApprovalTaskVO = { + workFlowApprovalTaskId: workFlowApprovalTaskId, + approvalResult: APPROVALRESULT_SUBMIT, + formId: formId, + formType: formType + }; + return sub.updateExpensiveGoodsApplicationByApproval(workFlowApprovalTaskVO); +} /** * 审批通过 Index: ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/expensivegoodsapplication/service/ExpensiveGoodsApplicationManagerImpl.java =================================================================== diff -u -r21957 -r21976 --- ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/expensivegoodsapplication/service/ExpensiveGoodsApplicationManagerImpl.java (.../ExpensiveGoodsApplicationManagerImpl.java) (revision 21957) +++ ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/expensivegoodsapplication/service/ExpensiveGoodsApplicationManagerImpl.java (.../ExpensiveGoodsApplicationManagerImpl.java) (revision 21976) @@ -93,9 +93,9 @@ if (StringTools.isNotBlank(deliverStatus) && !InvoicePlan.DELIVERSTATUS_AWAITDELIVER.equals(deliverStatus)) { throw new RuntimeException("发货状态必须为待发货才能修改!"); } - if (originalCommittedStatus) { - throw new RuntimeException("此单已经提交不能修改!"); - } +// if (originalCommittedStatus) { +// throw new RuntimeException("此单已经提交不能修改!"); +// } boolean update = DatabaseUtil.isPoIdValid(expensiveGoodsApplication.getId()) ? true : false; //是否更新操作 if (items != null && items.size() > 0) { @@ -128,8 +128,8 @@ objectDao.saveOrUpdate(expensiveGoodsApplication); //5、如果是提交操作立即启动审批流程 - if (commit && (StringTools.isBlank(expensiveGoodsApplication.getProcessStatus()) - || expensiveGoodsApplication.getProcessStatus().equals(ExpensiveGoodsApplication.PROCESSSTATUS_NOT_STARTED))) { + if (commit /*&& (StringTools.isBlank(expensiveGoodsApplication.getProcessStatus()) + || expensiveGoodsApplication.getProcessStatus().equals(ExpensiveGoodsApplication.PROCESSSTATUS_NOT_STARTED))*/) { NodeDefinition firstNodeDefinition = nodeDefinitionManager.getFirstNodeDefinition(InvoicePlan.TYPE_EXPENSIVEGOODS_FORM); expensiveGoodsApplication.setCurrentNodeDefinitionId(firstNodeDefinition.getId()); expensiveGoodsApplication.setCurrentNodeDefinitionName(firstNodeDefinition.getName()); @@ -305,4 +305,12 @@ writeLog(expensiveGoodsApplication, items, true); } + @Override + public void updateExpensiveGoodsApplicationForApprovalSubmit( + ExpensiveGoodsApplication expensiveGoodsApplication, + JSONArray items, WorkFlowApprovalTaskVO workFlowApprovalTaskVO) { + saveOrUpdate(expensiveGoodsApplication, true, items); + workFlowApprovalTaskManager.submitWorkFlowApprovalTask(workFlowApprovalTaskVO); + } + } Index: forgon-core/src/main/java/com/forgon/workflow/service/WorkFlowApprovalTaskManager.java =================================================================== diff -u -r21947 -r21976 --- forgon-core/src/main/java/com/forgon/workflow/service/WorkFlowApprovalTaskManager.java (.../WorkFlowApprovalTaskManager.java) (revision 21947) +++ forgon-core/src/main/java/com/forgon/workflow/service/WorkFlowApprovalTaskManager.java (.../WorkFlowApprovalTaskManager.java) (revision 21976) @@ -53,4 +53,11 @@ public void rollBackWorkFlowApprovalTask( WorkFlowApprovalTaskVO workFlowApprovalTaskVO); + /** + * 提交 + * @param workFlowApprovalTask 待办任务处理的VO对象{@link WorkFlowApprovalTaskVO} + */ + public void submitWorkFlowApprovalTask( + WorkFlowApprovalTaskVO workFlowApprovalTaskVO); + } Index: ssts-web/src/main/webapp/systemmanage/workFlow/workFlowForm.js =================================================================== diff -u -r21953 -r21976 --- ssts-web/src/main/webapp/systemmanage/workFlow/workFlowForm.js (.../workFlowForm.js) (revision 21953) +++ ssts-web/src/main/webapp/systemmanage/workFlow/workFlowForm.js (.../workFlowForm.js) (revision 21976) @@ -1,3 +1,32 @@ +var simpsonsStore; +var nodeDefinitionGrid; +function deleteItem(name){ + //var simpsonsStore = Ext4.getCmp('nodeDefinitionGrid').simpsonsStore(); + + var nodes = simpsonsStore.getRootNode().childNodes; + + var items = []; + for (var i=0; i"; + } + + + //流程状态 var statusStore = Ext4.create('Ext.data.Store', { fields : [ 'name', 'value' ], @@ -173,10 +210,32 @@ }, { name : 'userName', type : 'string' - } ] + }, { + name : 'deleteButton', + type : 'string' + }] }); //节点信息store - var simpsonsStore = Ext4 + simpsonsStore = Ext4.create( + 'Ext.data.TreeStore', + { + model : "NodeModel", + autoLoad : true, + clearOnLoad : true, + proxy : { + type : 'ajax', + extraParams : { + id : id + }, + url : WWWROOT + + '/disinfectSystem/workFlowAction!loadNodeDefinitionList.do', + reader : { + root : "rows" + } + } + }); + //simpsonsStore.load(); + /*var simpsonsStore = Ext4 .create( 'Ext.data.Store', { @@ -193,16 +252,16 @@ root : "rows" } } - }); + });*/ var newSignal = 'normal';//判断是增加还是修改 //定义rowEditing var rowEditing = Ext4.create('Ext.grid.plugin.RowEditing', { pluginId : 'rowEditing', - saveBtnText : '修改', - cancelBtnText : "取消", - // autoCancel: false, - clicksToEdit : 2,// 单击进行修改 + /*saveBtnText : '修改', + cancelBtnText : "取消",*/ + autoCancel: false, + clicksToEdit : 1,// 单击进行修改 cancelEdit : function() { var me = this; if (me.editing) { @@ -244,12 +303,39 @@ 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('roleName', roleName); rec.set('allowRollback', data.allowRollback); rec.set('allowDisagree', data.allowDisagree); rec.set('userName', data.userName); rec.set('userId', data.userId); + /* var reNum = /^[1-9]+[0-9]*]*$/; + if (reNum.test(data.userId)) { + Ext4.Ajax.request({ + url : WWWROOT + + '/disinfectSystem/workFlowAction!getUser.do?id=' + + data.userId, + success : function(response, options) { + var result = Ext4.decode(response.responseText); + if (result.success) { + returnvalue=result.data; + if(returnvalue==""||typeof(value)=="undefined"){ + returnvalue=ready(result.data); + } + } + }, + failure : function(response, options) { + } + }); + } + rec.set('userName', result.data["fullName"]);*/ rec.commit(); simpsonsStore.sync();// 同步? } @@ -270,35 +356,38 @@ showResult('请选择状态!'); return false; } + var nodes = store.getRootNode().childNodes; var items = []; - var count = store.getCount(); - if (count > 0) { - for (var i = 0; i < count; i++) { - var item = store.getAt(i); - var reNum = /^[1-9]+[0-9]*]*$/; - if (!reNum.test(item.data.roleId)) { - var index = RoleStore.find(roleCombo.displayField, - item.data.roleId); - var ehrRecord = RoleStore.getAt(index); - var returnvalue = ""; - if (ehrRecord) { - item.data.roleId = ehrRecord.data.value; - } - } - if(item.data.allowRollback=='是'||item.data.allowDisagree==true){ - item.data.allowRollback=1; - }else{ - item.data.allowRollback=0; - } - if(item.data.allowDisagree=='是'||item.data.allowDisagree==true){ - item.data.allowDisagree=1; - }else{ - item.data.allowDisagree=0; - } - items.push(item.data);// 获取属性值: item.data.name //获取到的角色又后台去处理 + for (var i=0; i