| | |
| | | |
| | | |
| | | import com.alibaba.fastjson.JSONObject; |
| | | import com.java110.core.annotation.Java110Transactional; |
| | | import com.java110.core.base.smo.BaseServiceSMO; |
| | | import com.java110.core.factory.GenerateCodeFactory; |
| | | import com.java110.dto.PageDto; |
| | | import com.java110.dto.auditMessage.AuditMessageDto; |
| | | import com.java110.dto.oaWorkflowData.OaWorkflowDataDto; |
| | | import com.java110.dto.user.UserDto; |
| | | import com.java110.dto.workflow.WorkflowDto; |
| | | import com.java110.entity.audit.AuditUser; |
| | | import com.java110.intf.common.IOaWorkflowUserInnerServiceSMO; |
| | | import com.java110.intf.common.IWorkflowInnerServiceSMO; |
| | | import com.java110.intf.oa.IOaWorkflowDataInnerServiceSMO; |
| | | import com.java110.intf.user.IUserInnerServiceSMO; |
| | | import com.java110.po.oaWorkflowData.OaWorkflowDataPo; |
| | | import com.java110.utils.util.Assert; |
| | | import com.java110.utils.util.DateUtil; |
| | | 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; |
| | |
| | | import org.activiti.engine.task.Comment; |
| | | import org.activiti.engine.task.Task; |
| | | import org.activiti.engine.task.TaskQuery; |
| | | import org.slf4j.Logger; |
| | | import com.java110.core.log.LoggerFactory; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.web.bind.annotation.RequestBody; |
| | | import org.springframework.web.bind.annotation.RestController; |
| | |
| | | @RestController |
| | | public class OaWorkflowUserInnerServiceSMOImpl extends BaseServiceSMO implements IOaWorkflowUserInnerServiceSMO { |
| | | |
| | | private static Logger logger = LoggerFactory.getLogger(OaWorkflowUserInnerServiceSMOImpl.class); |
| | | @Autowired |
| | | private ProcessEngine processEngine; |
| | | |
| | |
| | | private TaskService taskService; |
| | | |
| | | @Autowired |
| | | private HistoryService historyService; |
| | | |
| | | @Autowired |
| | | private IUserInnerServiceSMO userInnerServiceSMOImpl; |
| | | |
| | | @Autowired |
| | | private IWorkflowInnerServiceSMO workflowInnerServiceSMOImpl; |
| | | |
| | | @Autowired |
| | | private RepositoryService repositoryService; |
| | | |
| | | @Autowired |
| | | private IOaWorkflowDataInnerServiceSMO oaWorkflowDataInnerServiceSMOImpl; |
| | | |
| | | |
| | | /** |
| | |
| | | //variables.put("reqJson", reqJson); |
| | | variables.put("startUserId", reqJson.getString("createUserId")); |
| | | variables.put("nextUserId", reqJson.getString("createUserId")); |
| | | UserDto userDto = new UserDto(); |
| | | userDto.setUserId(reqJson.getString("createUserId")); |
| | | List<UserDto> users = userInnerServiceSMOImpl.getUsers(userDto); |
| | | |
| | | Assert.listOnlyOne(users, "用户不存在"); |
| | | |
| | | ProcessInstance processInstance = runtimeService.startProcessInstanceByKey(getWorkflowDto(reqJson.getString("flowId")), reqJson.getString("id"), variables); |
| | | //将得到的实例流程id值赋给之前设置的变量 |
| | | String processInstanceId = processInstance.getId(); |
| | |
| | | reqJson.put("processInstanceId", processInstanceId); |
| | | //第一个节点自动提交 |
| | | //autoFinishFirstTask(reqJson); |
| | | //刷入扩展表 |
| | | OaWorkflowDataPo oaWorkflowDataPo = null; |
| | | oaWorkflowDataPo = new OaWorkflowDataPo(); |
| | | oaWorkflowDataPo.setBusinessKey(reqJson.getString("id")); |
| | | oaWorkflowDataPo.setFlowId(reqJson.getString("flowId")); |
| | | oaWorkflowDataPo.setContext(reqJson.getString("auditMessage")); |
| | | oaWorkflowDataPo.setDataId(GenerateCodeFactory.getGeneratorId(GenerateCodeFactory.CODE_PREFIX_dataId)); |
| | | oaWorkflowDataPo.setEvent(OaWorkflowDataDto.EVENT_COMMIT); |
| | | oaWorkflowDataPo.setPreDataId("-1"); |
| | | oaWorkflowDataPo.setStaffId(reqJson.getString("createUserId")); |
| | | oaWorkflowDataPo.setStaffName(users.get(0).getName()); |
| | | oaWorkflowDataPo.setStartTime(DateUtil.getNow(DateUtil.DATE_FORMATE_STRING_A)); |
| | | oaWorkflowDataPo.setStoreId(reqJson.getString("storeId")); |
| | | oaWorkflowDataInnerServiceSMOImpl.saveOaWorkflowData(oaWorkflowDataPo); |
| | | return reqJson; |
| | | } |
| | | |
| | |
| | | //4.使用流程实例对象获取BusinessKey |
| | | String business_key = pi.getBusinessKey(); |
| | | taskBusinessKeyMap.put(business_key, task.getId()); |
| | | taskBusinessKeyMap.put("taskId", task.getId()); |
| | | taskBusinessKeyMap.put("id", business_key); |
| | | tasks.add(taskBusinessKeyMap); |
| | | } |
| | |
| | | List<JSONObject> tasks = new ArrayList<>(); |
| | | List<String> complaintIds = new ArrayList<>(); |
| | | for (HistoricTaskInstance task : list) { |
| | | taskBusinessKeyMap = new JSONObject(); |
| | | String processInstanceId = task.getProcessInstanceId(); |
| | | //3.使用流程实例,查询 |
| | | HistoricProcessInstance pi = historyService.createHistoricProcessInstanceQuery().processInstanceId(processInstanceId).singleResult(); |
| | | //4.使用流程实例对象获取BusinessKey |
| | | String business_key = pi.getBusinessKey(); |
| | | taskBusinessKeyMap.put(business_key, task.getId()); |
| | | taskBusinessKeyMap.put("taskId", task.getId()); |
| | | taskBusinessKeyMap.put("id", business_key); |
| | | tasks.add(taskBusinessKeyMap); |
| | | } |
| | | |
| | | return tasks; |
| | | } |
| | | |
| | | |
| | | @Java110Transactional |
| | | public boolean completeTask(@RequestBody JSONObject reqJson) { |
| | | TaskService taskService = processEngine.getTaskService(); |
| | | Task task = taskService.createTaskQuery().taskId(reqJson.getString("taskId")).singleResult(); |
| | | if (task == null) { |
| | | throw new IllegalArgumentException("任务已处理"); |
| | | } |
| | | |
| | | //判断是否为结束流程 |
| | | if ("1500".equals(reqJson.getString("auditCode"))) { |
| | | doTaskFinish(reqJson); |
| | | } else { |
| | | //扩展 工作流功能 |
| | | doTaskAuditAgree(reqJson); |
| | | } |
| | | |
| | | String processInstanceId = task.getProcessInstanceId(); |
| | | Authentication.setAuthenticatedUserId(reqJson.getString("createUserId")); |
| | | Authentication.setAuthenticatedUserId(reqJson.getString("nextUserId")); |
| | | taskService.addComment(reqJson.getString("taskId"), processInstanceId, reqJson.getString("auditMessage")); |
| | | Map<String, Object> variables = new HashMap<String, Object>(); |
| | | variables.put("auditCode", reqJson.getString("auditCode")); |
| | | variables.put("nextUserId", reqJson.getString("nextUserId")); |
| | | variables.put("flag", "1200".equals(reqJson.getString("auditCode")) ? "false" : "true"); |
| | | variables.put("startUserId", reqJson.getString("startUserId")); |
| | | variables.put("auditCode", reqJson.getString("auditCode")); |
| | | taskService.complete(reqJson.getString("taskId"), variables); |
| | | |
| | | ProcessInstance pi = runtimeService.createProcessInstanceQuery().processInstanceId(processInstanceId).singleResult(); |
| | | if (pi == null) { |
| | | return true; |
| | | } |
| | | return false; |
| | | } |
| | | |
| | | private void doTaskFinish(JSONObject reqJson) { |
| | | OaWorkflowDataDto oaWorkflowDataDto = new OaWorkflowDataDto(); |
| | | oaWorkflowDataDto.setStoreId(reqJson.getString("storeId")); |
| | | oaWorkflowDataDto.setBusinessKey(reqJson.getString("id")); |
| | | oaWorkflowDataDto.setPage(1); |
| | | oaWorkflowDataDto.setRow(1); |
| | | List<OaWorkflowDataDto> oaWorkflowDataDtos = oaWorkflowDataInnerServiceSMOImpl.queryOaWorkflowDatas(oaWorkflowDataDto); |
| | | |
| | | if (oaWorkflowDataDtos == null || oaWorkflowDataDtos.size() < 1) { |
| | | return; |
| | | } |
| | | //修改 当前 为完成 |
| | | OaWorkflowDataPo oaWorkflowDataPo = new OaWorkflowDataPo(); |
| | | oaWorkflowDataPo.setDataId(oaWorkflowDataDtos.get(0).getDataId()); |
| | | oaWorkflowDataPo.setEndTime(DateUtil.getNow(DateUtil.DATE_FORMATE_STRING_A)); |
| | | oaWorkflowDataPo.setContext(reqJson.getString("auditMessage")); |
| | | oaWorkflowDataInnerServiceSMOImpl.updateOaWorkflowData(oaWorkflowDataPo); |
| | | } |
| | | |
| | | /** |
| | | * 处理 审核状态 |
| | | * |
| | | * @param reqJson |
| | | */ |
| | | private void doTaskAuditAgree(JSONObject reqJson) { |
| | | UserDto userDto = new UserDto(); |
| | | userDto.setUserId(reqJson.getString("nextUserId")); |
| | | List<UserDto> users = userInnerServiceSMOImpl.getUsers(userDto); |
| | | |
| | | Assert.listOnlyOne(users, "用户不存在"); |
| | | |
| | | String preDataId = "-1"; |
| | | //查询当前节点 |
| | | OaWorkflowDataDto oaWorkflowDataDto = new OaWorkflowDataDto(); |
| | | oaWorkflowDataDto.setStoreId(reqJson.getString("storeId")); |
| | | oaWorkflowDataDto.setBusinessKey(reqJson.getString("id")); |
| | | oaWorkflowDataDto.setPage(1); |
| | | oaWorkflowDataDto.setRow(1); |
| | | List<OaWorkflowDataDto> oaWorkflowDataDtos = oaWorkflowDataInnerServiceSMOImpl.queryOaWorkflowDatas(oaWorkflowDataDto); |
| | | |
| | | OaWorkflowDataPo oaWorkflowDataPo = null; |
| | | if (oaWorkflowDataDtos == null || oaWorkflowDataDtos.size() < 1) { |
| | | oaWorkflowDataPo = new OaWorkflowDataPo(); |
| | | oaWorkflowDataPo.setBusinessKey(reqJson.getString("id")); |
| | | oaWorkflowDataPo.setFlowId(reqJson.getString("flowId")); |
| | | oaWorkflowDataPo.setContext(""); |
| | | oaWorkflowDataPo.setDataId(GenerateCodeFactory.getGeneratorId(GenerateCodeFactory.CODE_PREFIX_dataId)); |
| | | oaWorkflowDataPo.setEvent(OaWorkflowDataDto.EVENT_COMMIT); |
| | | oaWorkflowDataPo.setPreDataId(preDataId); |
| | | oaWorkflowDataPo.setStaffId(reqJson.getString("nextUserId")); |
| | | oaWorkflowDataPo.setStaffName(users.get(0).getName()); |
| | | oaWorkflowDataPo.setStartTime(DateUtil.getNow(DateUtil.DATE_FORMATE_STRING_A)); |
| | | oaWorkflowDataPo.setStoreId(reqJson.getString("storeId")); |
| | | oaWorkflowDataInnerServiceSMOImpl.saveOaWorkflowData(oaWorkflowDataPo); |
| | | return; |
| | | } |
| | | //修改 当前 为完成 |
| | | oaWorkflowDataPo = new OaWorkflowDataPo(); |
| | | oaWorkflowDataPo.setDataId(oaWorkflowDataDtos.get(0).getDataId()); |
| | | oaWorkflowDataPo.setEndTime(DateUtil.getNow(DateUtil.DATE_FORMATE_STRING_A)); |
| | | oaWorkflowDataPo.setContext(reqJson.getString("auditMessage")); |
| | | oaWorkflowDataInnerServiceSMOImpl.updateOaWorkflowData(oaWorkflowDataPo); |
| | | |
| | | //如果为-1 不插入任务 |
| | | if ("-1".equals(reqJson.getString("nextUserId"))) { |
| | | return; |
| | | } |
| | | |
| | | oaWorkflowDataPo = new OaWorkflowDataPo(); |
| | | oaWorkflowDataPo.setBusinessKey(reqJson.getString("id")); |
| | | oaWorkflowDataPo.setFlowId(reqJson.getString("flowId")); |
| | | oaWorkflowDataPo.setContext(""); |
| | | oaWorkflowDataPo.setDataId(GenerateCodeFactory.getGeneratorId(GenerateCodeFactory.CODE_PREFIX_dataId)); |
| | | oaWorkflowDataPo.setEvent(OaWorkflowDataDto.EVENT_COMMIT); |
| | | oaWorkflowDataPo.setPreDataId(oaWorkflowDataDtos.get(0).getDataId()); |
| | | oaWorkflowDataPo.setStaffId(reqJson.getString("nextUserId")); |
| | | oaWorkflowDataPo.setStaffName(users.get(0).getName()); |
| | | oaWorkflowDataPo.setStartTime(DateUtil.getNow(DateUtil.DATE_FORMATE_STRING_A)); |
| | | oaWorkflowDataPo.setStoreId(reqJson.getString("storeId")); |
| | | oaWorkflowDataInnerServiceSMOImpl.saveOaWorkflowData(oaWorkflowDataPo); |
| | | } |
| | | |
| | | /** |
| | | * 转办 |
| | | * |
| | | * @param reqJson |
| | | * @return |
| | | */ |
| | | @Java110Transactional |
| | | public boolean changeTaskToOtherUser(@RequestBody JSONObject reqJson) { |
| | | |
| | | //查询当前节点 |
| | | OaWorkflowDataDto oaWorkflowDataDto = new OaWorkflowDataDto(); |
| | | oaWorkflowDataDto.setStoreId(reqJson.getString("storeId")); |
| | | oaWorkflowDataDto.setBusinessKey(reqJson.getString("id")); |
| | | oaWorkflowDataDto.setPage(1); |
| | | oaWorkflowDataDto.setRow(1); |
| | | List<OaWorkflowDataDto> oaWorkflowDataDtos = oaWorkflowDataInnerServiceSMOImpl.queryOaWorkflowDatas(oaWorkflowDataDto); |
| | | |
| | | Assert.listOnlyOne(oaWorkflowDataDtos, "数据错误未包含上级数据"); |
| | | |
| | | UserDto userDto = new UserDto(); |
| | | userDto.setUserId(reqJson.getString("nextUserId")); |
| | | List<UserDto> users = userInnerServiceSMOImpl.getUsers(userDto); |
| | | |
| | | Assert.listOnlyOne(users, "用户不存在"); |
| | | |
| | | TaskService taskService = processEngine.getTaskService(); |
| | | Task task = taskService.createTaskQuery().taskId(reqJson.getString("taskId")).singleResult(); |
| | | String processInstanceId = task.getProcessInstanceId(); |
| | | taskService.addComment(reqJson.getString("taskId"), processInstanceId, reqJson.getString("auditMessage")); |
| | | taskService.setAssignee(reqJson.getString("taskId"), reqJson.getString("nextUserId")); |
| | | //taskService.setOwner(reqJson.getString("taskId"), reqJson.getString("nextUserId")); |
| | | |
| | | OaWorkflowDataPo oaWorkflowDataPo = null; |
| | | //修改 当前 为完成 |
| | | oaWorkflowDataPo = new OaWorkflowDataPo(); |
| | | oaWorkflowDataPo.setDataId(oaWorkflowDataDtos.get(0).getDataId()); |
| | | oaWorkflowDataPo.setEndTime(DateUtil.getNow(DateUtil.DATE_FORMATE_STRING_A)); |
| | | oaWorkflowDataPo.setContext(reqJson.getString("auditMessage")); |
| | | oaWorkflowDataInnerServiceSMOImpl.updateOaWorkflowData(oaWorkflowDataPo); |
| | | |
| | | oaWorkflowDataPo = new OaWorkflowDataPo(); |
| | | oaWorkflowDataPo.setBusinessKey(reqJson.getString("id")); |
| | | oaWorkflowDataPo.setFlowId(reqJson.getString("flowId")); |
| | | oaWorkflowDataPo.setContext(""); |
| | | oaWorkflowDataPo.setDataId(GenerateCodeFactory.getGeneratorId(GenerateCodeFactory.CODE_PREFIX_dataId)); |
| | | oaWorkflowDataPo.setEvent(OaWorkflowDataDto.EVENT_TRANSFER); |
| | | oaWorkflowDataPo.setPreDataId(oaWorkflowDataDtos.get(0).getDataId()); |
| | | oaWorkflowDataPo.setStaffId(reqJson.getString("nextUserId")); |
| | | oaWorkflowDataPo.setStaffName(users.get(0).getName()); |
| | | oaWorkflowDataPo.setStartTime(DateUtil.getNow(DateUtil.DATE_FORMATE_STRING_A)); |
| | | oaWorkflowDataPo.setStoreId(reqJson.getString("storeId")); |
| | | oaWorkflowDataInnerServiceSMOImpl.saveOaWorkflowData(oaWorkflowDataPo); |
| | | return true; |
| | | } |
| | | @Java110Transactional |
| | | public boolean goBackTask(@RequestBody JSONObject reqJson) { |
| | | TaskService taskService = processEngine.getTaskService(); |
| | | Task task = taskService.createTaskQuery().taskId(reqJson.getString("taskId")).singleResult(); |
| | | if (task == null) { |
| | | throw new IllegalArgumentException("任务已处理"); |
| | | } |
| | | // //退回给提交者 |
| | | // if ("1400".equals(reqJson.getString("auditCode"))) { |
| | | // String processInstanceId = task.getProcessInstanceId(); |
| | | // Authentication.setAuthenticatedUserId(reqJson.getString("startUserId")); |
| | | // taskService.addComment(reqJson.getString("taskId"), processInstanceId, reqJson.getString("auditMessage")); |
| | | // Map<String, Object> variables = new HashMap<String, Object>(); |
| | | // variables.put("nextUserId", reqJson.getString("startUserId")); |
| | | // variables.put("auditCode", reqJson.getString("auditCode")); |
| | | // taskService.complete(reqJson.getString("taskId"), variables); |
| | | // |
| | | // return true; |
| | | // } |
| | | |
| | | String event = doTaskAuditUnAgree(reqJson); |
| | | if (OaWorkflowDataDto.EVENT_COMMIT.equals(event)) { //提交状态 |
| | | String processInstanceId = task.getProcessInstanceId(); |
| | | Authentication.setAuthenticatedUserId(reqJson.getString("nextUserId")); |
| | | taskService.addComment(reqJson.getString("taskId"), processInstanceId, reqJson.getString("auditMessage")); |
| | | Map<String, Object> variables = new HashMap<String, Object>(); |
| | | variables.put("nextUserId", reqJson.getString("nextUserId")); |
| | | variables.put("auditCode", reqJson.getString("auditCode")); |
| | | taskService.complete(reqJson.getString("taskId"), variables); |
| | | } else { //转单 |
| | | taskService.setAssignee(reqJson.getString("taskId"), reqJson.getString("nextUserId")); |
| | | } |
| | | return true; |
| | | } |
| | | |
| | | /** |
| | | * 审核不同意 退回 |
| | | * |
| | | * @param reqJson |
| | | */ |
| | | private String doTaskAuditUnAgree(JSONObject reqJson) { |
| | | //查询当前节点 |
| | | OaWorkflowDataDto oaWorkflowDataDto = new OaWorkflowDataDto(); |
| | | oaWorkflowDataDto.setStoreId(reqJson.getString("storeId")); |
| | | oaWorkflowDataDto.setBusinessKey(reqJson.getString("id")); |
| | | oaWorkflowDataDto.setPage(1); |
| | | oaWorkflowDataDto.setRow(1); |
| | | List<OaWorkflowDataDto> oaWorkflowDataDtos = oaWorkflowDataInnerServiceSMOImpl.queryOaWorkflowDatas(oaWorkflowDataDto); |
| | | |
| | | Assert.listOnlyOne(oaWorkflowDataDtos, "没有上级处理人"); |
| | | |
| | | if ("-1".equals(oaWorkflowDataDtos.get(0).getPreDataId())) { |
| | | throw new IllegalArgumentException("没有上级处理人"); |
| | | } |
| | | |
| | | oaWorkflowDataDto = new OaWorkflowDataDto(); |
| | | oaWorkflowDataDto.setStoreId(reqJson.getString("storeId")); |
| | | oaWorkflowDataDto.setDataId(oaWorkflowDataDtos.get(0).getPreDataId()); |
| | | oaWorkflowDataDto.setPage(1); |
| | | oaWorkflowDataDto.setRow(1); |
| | | List<OaWorkflowDataDto> preOaWorkflowDataDtos = oaWorkflowDataInnerServiceSMOImpl.queryOaWorkflowDatas(oaWorkflowDataDto); |
| | | |
| | | //将现在节点处理为完成 |
| | | OaWorkflowDataPo oaWorkflowDataPo = new OaWorkflowDataPo(); |
| | | oaWorkflowDataPo.setDataId(oaWorkflowDataDtos.get(0).getDataId()); |
| | | oaWorkflowDataPo.setEndTime(DateUtil.getNow(DateUtil.DATE_FORMATE_STRING_A)); |
| | | oaWorkflowDataPo.setContext(reqJson.getString("auditMessage")); |
| | | oaWorkflowDataInnerServiceSMOImpl.updateOaWorkflowData(oaWorkflowDataPo); |
| | | |
| | | reqJson.put("nextUserId", preOaWorkflowDataDtos.get(0).getStaffId()); |
| | | if ("1400".equals(reqJson.getString("auditCode"))) { |
| | | reqJson.put("nextUserId", reqJson.getString("startUserId")); |
| | | } |
| | | oaWorkflowDataPo = new OaWorkflowDataPo(); |
| | | oaWorkflowDataPo.setBusinessKey(preOaWorkflowDataDtos.get(0).getBusinessKey()); |
| | | oaWorkflowDataPo.setFlowId(preOaWorkflowDataDtos.get(0).getFlowId()); |
| | | oaWorkflowDataPo.setContext(""); |
| | | oaWorkflowDataPo.setDataId(GenerateCodeFactory.getGeneratorId(GenerateCodeFactory.CODE_PREFIX_dataId)); |
| | | oaWorkflowDataPo.setEvent(preOaWorkflowDataDtos.get(0).getEvent()); |
| | | oaWorkflowDataPo.setPreDataId(oaWorkflowDataDtos.get(0).getPreDataId()); |
| | | oaWorkflowDataPo.setStaffId(reqJson.getString("nextUserId")); |
| | | oaWorkflowDataPo.setStaffName(preOaWorkflowDataDtos.get(0).getStaffName()); |
| | | oaWorkflowDataPo.setStartTime(DateUtil.getNow(DateUtil.DATE_FORMATE_STRING_A)); |
| | | oaWorkflowDataPo.setStoreId(preOaWorkflowDataDtos.get(0).getStoreId()); |
| | | oaWorkflowDataInnerServiceSMOImpl.saveOaWorkflowData(oaWorkflowDataPo); |
| | | |
| | | return oaWorkflowDataDtos.get(0).getEvent(); |
| | | } |
| | | |
| | | public List<AuditMessageDto> getAuditMessage(@RequestBody JSONObject reqJson) { |
| | |
| | | |
| | | } |
| | | |
| | | @Override |
| | | public List<JSONObject> nextAllNodeTaskList(@RequestBody JSONObject reqJson) { |
| | | List<JSONObject> tasks = new ArrayList<>(); |
| | | TaskService taskService = processEngine.getTaskService(); |
| | | Task task = taskService.createTaskQuery().taskId(reqJson.getString("taskId")).singleResult(); |
| | | if (task == null) { |
| | | throw new IllegalArgumentException("任务已处理"); |
| | | } |
| | | BpmnModel bpmnModel = repositoryService.getBpmnModel(task.getProcessDefinitionId()); |
| | | FlowNode flowNode = (FlowNode) bpmnModel.getFlowElement(task.getTaskDefinitionKey()); |
| | | //获取当前节点输出连线 |
| | | List<SequenceFlow> outgoingFlows = flowNode.getOutgoingFlows(); |
| | | JSONObject taskObj = null; |
| | | taskObj = new JSONObject(); |
| | | taskObj.put("assignee", "-1"); // 默认 不需要指定下一个处理人 表示结束 |
| | | boolean isReturn = false; |
| | | //遍历输出连线 |
| | | for (SequenceFlow outgoingFlow : outgoingFlows) { |
| | | //获取输出节点元素 |
| | | FlowElement targetFlowElement = outgoingFlow.getTargetFlowElement(); |
| | | isReturn = false; |
| | | //排除非用户任务接点 |
| | | if (targetFlowElement instanceof UserTask) { |
| | | //判断输出节点的el表达式 |
| | | Map vars = new HashMap(); |
| | | vars.put("auditCode", "1200"); |
| | | if (isCondition(outgoingFlow.getConditionExpression(), vars)) { |
| | | //true 获取输出节点名称 |
| | | taskObj.put("back", outgoingFlow.getTargetFlowElement().getName()); |
| | | isReturn = true; |
| | | } |
| | | vars.put("auditCode", "1400"); |
| | | if (isCondition(outgoingFlow.getConditionExpression(), vars)) { |
| | | //true 获取输出节点名称 |
| | | taskObj.put("backIndex", outgoingFlow.getTargetFlowElement().getName()); |
| | | isReturn = true; |
| | | } |
| | | //结束 |
| | | vars.put("auditCode", "1500"); |
| | | if (isCondition(outgoingFlow.getConditionExpression(), vars)) { |
| | | //true 获取输出节点名称 |
| | | taskObj.put("exit", outgoingFlow.getTargetFlowElement().getName()); |
| | | isReturn = true; |
| | | } |
| | | if (!isReturn) { |
| | | String assignee = ((UserTask) targetFlowElement).getAssignee(); |
| | | if (!StringUtil.isEmpty(assignee) && assignee.indexOf("${") < 0) { |
| | | taskObj.put("assignee", assignee); // 下一节点处理人 |
| | | } |
| | | if ("${startUserId}".equals(assignee)) { |
| | | taskObj.put("assignee", reqJson.getString("startUserId")); // 开始人 |
| | | } |
| | | if ("${nextUserId}".equals(assignee)) { |
| | | taskObj.put("assignee", "-2"); // 需要前台指定 |
| | | } |
| | | taskObj.put("next", outgoingFlow.getTargetFlowElement().getName()); |
| | | } |
| | | } |
| | | //如果下一个为 结束节点 |
| | | if (targetFlowElement instanceof EndEvent) { |
| | | //true 获取输出节点名称 |
| | | taskObj.put("exit", "1"); |
| | | } |
| | | } |
| | | tasks.add(taskObj); |
| | | 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("auditCode")) { |
| | | if (!vars.containsKey("auditCode")) { |
| | | 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("auditCode"))) { |
| | | return true; |
| | | } |
| | | } |
| | | } |
| | | } |
| | | return false; |
| | | } |
| | | |
| | | public ProcessEngine getProcessEngine() { |
| | | return processEngine; |