java110-bean/src/main/java/com/java110/dto/contract/ContractDto.java
@@ -84,6 +84,10 @@ private String communityId; private String hasAudit; private String hasEnd; private List<ContractAttrDto> attrs; public String getaLink() { @@ -461,4 +465,20 @@ public void setNextUserId(String nextUserId) { this.nextUserId = nextUserId; } public String getHasAudit() { return hasAudit; } public void setHasAudit(String hasAudit) { this.hasAudit = hasAudit; } public String getHasEnd() { return hasEnd; } public void setHasEnd(String hasEnd) { this.hasEnd = hasEnd; } } java110-utils/src/main/java/com/java110/utils/util/FlowUtil.java
New file @@ -0,0 +1,44 @@ package com.java110.utils.util; import java.util.Map; public class FlowUtil { /** * el表达式判断 * * @param expression * @param vars * @return */ public static boolean isCondition(String expression, Map<String, Object> vars) { if (expression == null || expression == "") { return false; } //分割表达式 String[] exprArr = expression.split("[{}$&]"); for (String expr : exprArr) { //是否包含键message if (expr.contains("flag")) { if (!vars.containsKey("flag")) { continue; } if (expr.contains("==")) { String[] primes = expr.split("=="); String valExpr = primes[1].trim(); if (valExpr.startsWith("'")) { valExpr = valExpr.substring(1); } if (valExpr.endsWith("'")) { valExpr = valExpr.substring(0, valExpr.length() - 1); } if (primes.length == 2 && valExpr.equals(vars.get("flag"))) { return true; } } } } return false; } } service-common/src/main/java/com/java110/common/smo/impl/ContractApplyUserInnerServiceSMOImpl.java
@@ -11,11 +11,10 @@ import com.java110.intf.store.IContractInnerServiceSMO; import com.java110.po.contract.ContractPo; import com.java110.utils.util.Assert; import com.java110.utils.util.FlowUtil; import com.java110.utils.util.StringUtil; import org.activiti.engine.HistoryService; import org.activiti.engine.ProcessEngine; import org.activiti.engine.RuntimeService; import org.activiti.engine.TaskService; import org.activiti.bpmn.model.*; import org.activiti.engine.*; import org.activiti.engine.history.HistoricProcessInstance; import org.activiti.engine.history.HistoricTaskInstance; import org.activiti.engine.history.HistoricTaskInstanceQuery; @@ -51,7 +50,8 @@ @Autowired private IWorkflowInnerServiceSMO workflowInnerServiceSMOImpl; @Autowired private RepositoryService repositoryService; /** * 启动流程 @@ -120,6 +120,46 @@ String business_key = pi.getBusinessKey(); contractIds.add(business_key); taskBusinessKeyMap.put(business_key, task.getId()); //计算是否有 审核按钮 BpmnModel bpmnModel = repositoryService.getBpmnModel(task.getProcessDefinitionId()); FlowNode flowNode = (FlowNode) bpmnModel.getFlowElement(task.getTaskDefinitionKey()); //获取当前节点输出连线 List<SequenceFlow> outgoingFlows = flowNode.getOutgoingFlows(); //计算是否有结束按钮 boolean isReturn; for (SequenceFlow outgoingFlow : outgoingFlows) { //获取输出节点元素 FlowElement targetFlowElement = outgoingFlow.getTargetFlowElement(); isReturn = false; //排除非用户任务接点 if (targetFlowElement instanceof UserTask) { //判断输出节点的el表达式 Map vars = new HashMap(); vars.put("flag", "false"); // 1100 if (FlowUtil.isCondition(outgoingFlow.getConditionExpression(), vars)) { isReturn = true; } if (!isReturn) { String assignee = ((UserTask) targetFlowElement).getAssignee(); if (!StringUtil.isEmpty(assignee) && assignee.indexOf("${") < 0) { taskBusinessKeyMap.put(business_key+"_hasAudit", task.getId()); } if ("${startUserId}".equals(assignee)) { taskBusinessKeyMap.put(business_key+"_hasAudit", task.getId()); } if ("${nextUserId}".equals(assignee)) { taskBusinessKeyMap.put(business_key+"_hasAudit", task.getId()); } } } //如果下一个为 结束节点 if (targetFlowElement instanceof EndEvent) { //true 获取输出节点名称 taskBusinessKeyMap.put(business_key+"_hasEnd", task.getId()); } } } if (contractIds == null || contractIds.size() == 0) { @@ -134,6 +174,8 @@ for (ContractDto tmpContractDto : tmpContractDtos) { tmpContractDto.setTaskId(taskBusinessKeyMap.get(tmpContractDto.getContractId())); tmpContractDto.setHasAudit(taskBusinessKeyMap.get(tmpContractDto.getContractId()+"_hasAudit")); tmpContractDto.setHasEnd(taskBusinessKeyMap.get(tmpContractDto.getContractId()+"_hasEnd")); } return tmpContractDtos; } service-common/src/main/java/com/java110/common/smo/impl/WorkflowV1InnerServiceSMOImpl.java
@@ -24,6 +24,7 @@ import com.java110.intf.common.IWorkflowV1InnerServiceSMO; import com.java110.po.workflow.WorkflowPo; import com.java110.utils.util.BeanConvertUtil; import com.java110.utils.util.FlowUtil; import com.java110.utils.util.StringUtil; import org.activiti.bpmn.model.*; import org.activiti.engine.ProcessEngine; @@ -136,7 +137,7 @@ //判断输出节点的el表达式 Map vars = new HashMap(); vars.put("flag", "false"); // 1100 if (isCondition(outgoingFlow.getConditionExpression(), vars)) { if (FlowUtil.isCondition(outgoingFlow.getConditionExpression(), vars)) { isReturn = true; } if (!isReturn) { @@ -162,42 +163,6 @@ return tasks; } /** * el表达式判断 * * @param expression * @param vars * @return */ private static boolean isCondition(String expression, Map<String, Object> vars) { if (expression == null || expression == "") { return false; } //分割表达式 String[] exprArr = expression.split("[{}$&]"); for (String expr : exprArr) { //是否包含键message if (expr.contains("flag")) { if (!vars.containsKey("flag")) { continue; } if (expr.contains("==")) { String[] primes = expr.split("=="); String valExpr = primes[1].trim(); if (valExpr.startsWith("'")) { valExpr = valExpr.substring(1); } if (valExpr.endsWith("'")) { valExpr = valExpr.substring(0, valExpr.length() - 1); } if (primes.length == 2 && valExpr.equals(vars.get("flag"))) { return true; } } } } return false; } } service-store/src/main/java/com/java110/store/bmo/contract/impl/UpdateContractBMOImpl.java
@@ -24,7 +24,6 @@ import com.java110.po.contract.ContractPo; import com.java110.po.contractAttr.ContractAttrPo; import com.java110.po.contractChangePlan.ContractChangePlanPo; import com.java110.po.contractChangePlanRoom.ContractChangePlanRoomPo; import com.java110.po.contractFile.ContractFilePo; import com.java110.po.contractRoom.ContractRoomPo; import com.java110.po.owner.OwnerRoomRelPo; @@ -37,7 +36,6 @@ import com.java110.utils.util.BeanConvertUtil; import com.java110.utils.util.StringUtil; import com.java110.vo.ResultVo; import org.apache.http.annotation.Contract; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.ResponseEntity; import org.springframework.stereotype.Service; @@ -108,7 +106,7 @@ deleteContractFileBMOImpl.delete(contractFilePo); List<ContractFilePo> filePos = contractPo.getContractFilePo(); if(filePos != null) { if (filePos != null) { for (ContractFilePo file : filePos) { if (file.getFileRealName().length() > 0 && file.getFileSaveName().length() > 0) { file.setContractId(contractPo.getContractId()); @@ -161,6 +159,9 @@ ContractPo contractPo = new ContractPo(); contractPo.setContractId(contractDto.getContractId()); contractPo.setState(ContractDto.STATE_AUDIT_DOING); if ("1200".equals(reqJson.getString("state"))) { contractPo.setState(ContractDto.STATE_FAIL); } contractPo.setStatusCd(StatusConstant.STATUS_CD_VALID); contractInnerServiceSMOImpl.updateContract(contractPo); } @@ -204,7 +205,7 @@ ContractPo contractPo = BeanConvertUtil.covertBean(contractChangePlanDetailDtos.get(0), ContractPo.class); contractInnerServiceSMOImpl.updateContract(contractPo); dealContractChangePlanRoom(contractChangePlanDto,contractDtos.get(0)); dealContractChangePlanRoom(contractChangePlanDto, contractDtos.get(0)); } else { //修改为审核中 ContractChangePlanPo contractChangePlanPo = new ContractChangePlanPo(); @@ -390,6 +391,7 @@ return false; } private void updateContractAttr(JSONObject jsonObject, ContractPo contractPo) { ContractAttrDto contractAttrDto = new ContractAttrDto(); contractAttrDto.setContractId(contractPo.getContractId());