| | |
| | | |
| | | |
| | | 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.utils.util.Assert; |
| | | import com.java110.utils.util.DateUtil; |
| | | import com.java110.utils.util.StringUtil; |
| | | import org.activiti.bpmn.model.BpmnModel; |
| | | import org.activiti.bpmn.model.FlowElement; |
| | | import org.activiti.bpmn.model.FlowNode; |
| | | import org.activiti.bpmn.model.SequenceFlow; |
| | | import org.activiti.bpmn.model.UserTask; |
| | | import org.activiti.engine.HistoryService; |
| | | import org.activiti.engine.ProcessEngine; |
| | | import org.activiti.engine.RepositoryService; |
| | | 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.Task; |
| | | import org.activiti.engine.task.TaskQuery; |
| | | import org.slf4j.Logger; |
| | | import org.slf4j.LoggerFactory; |
| | | 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; |
| | |
| | | } |
| | | |
| | | |
| | | @Java110Transactional |
| | | public boolean completeTask(@RequestBody JSONObject reqJson) { |
| | | TaskService taskService = processEngine.getTaskService(); |
| | | Task task = taskService.createTaskQuery().taskId(reqJson.getString("taskId")).singleResult(); |
| | |
| | | throw new IllegalArgumentException("任务已处理"); |
| | | } |
| | | |
| | | //扩展 工作流功能 |
| | | doTaskAuditAgree(reqJson); |
| | | //判断是否为结束流程 |
| | | if ("1500".equals(reqJson.getString("auditCode"))) { |
| | | doTaskFinish(reqJson); |
| | | } else { |
| | | //扩展 工作流功能 |
| | | doTaskAuditAgree(reqJson); |
| | | } |
| | | |
| | | String processInstanceId = task.getProcessInstanceId(); |
| | | Authentication.setAuthenticatedUserId(reqJson.getString("nextUserId")); |
| | |
| | | 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); |
| | | } |
| | | |
| | | /** |
| | |
| | | oaWorkflowDataPo = new OaWorkflowDataPo(); |
| | | oaWorkflowDataPo.setBusinessKey(reqJson.getString("id")); |
| | | oaWorkflowDataPo.setFlowId(reqJson.getString("flowId")); |
| | | oaWorkflowDataPo.setContext(reqJson.getString("auditMessage")); |
| | | oaWorkflowDataPo.setContext(""); |
| | | oaWorkflowDataPo.setDataId(GenerateCodeFactory.getGeneratorId(GenerateCodeFactory.CODE_PREFIX_dataId)); |
| | | oaWorkflowDataPo.setEvent(OaWorkflowDataDto.EVENT_COMMIT); |
| | | oaWorkflowDataPo.setPreDataId(preDataId); |
| | |
| | | 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(reqJson.getString("auditMessage")); |
| | | oaWorkflowDataPo.setContext(""); |
| | | oaWorkflowDataPo.setDataId(GenerateCodeFactory.getGeneratorId(GenerateCodeFactory.CODE_PREFIX_dataId)); |
| | | oaWorkflowDataPo.setEvent(OaWorkflowDataDto.EVENT_COMMIT); |
| | | oaWorkflowDataPo.setPreDataId(oaWorkflowDataDtos.get(0).getDataId()); |
| | |
| | | * @param reqJson |
| | | * @return |
| | | */ |
| | | @Java110Transactional |
| | | public boolean changeTaskToOtherUser(@RequestBody JSONObject reqJson) { |
| | | |
| | | //查询当前节点 |
| | |
| | | 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(reqJson.getString("auditMessage")); |
| | | oaWorkflowDataPo.setContext(""); |
| | | oaWorkflowDataPo.setDataId(GenerateCodeFactory.getGeneratorId(GenerateCodeFactory.CODE_PREFIX_dataId)); |
| | | oaWorkflowDataPo.setEvent(OaWorkflowDataDto.EVENT_TRANSFER); |
| | | oaWorkflowDataPo.setPreDataId(oaWorkflowDataDtos.get(0).getDataId()); |
| | |
| | | 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)) { //提交状态 |
| | |
| | | |
| | | oaWorkflowDataDto = new OaWorkflowDataDto(); |
| | | oaWorkflowDataDto.setStoreId(reqJson.getString("storeId")); |
| | | oaWorkflowDataDto.setDataId(reqJson.getString(oaWorkflowDataDtos.get(0).getPreDataId())); |
| | | 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("createUserId")); |
| | | reqJson.put("nextUserId", reqJson.getString("startUserId")); |
| | | } |
| | | oaWorkflowDataPo = new OaWorkflowDataPo(); |
| | | oaWorkflowDataPo.setBusinessKey(preOaWorkflowDataDtos.get(0).getBusinessKey()); |
| | | oaWorkflowDataPo.setFlowId(preOaWorkflowDataDtos.get(0).getFlowId()); |
| | | oaWorkflowDataPo.setContext(reqJson.getString("auditMessage")); |
| | | oaWorkflowDataPo.setContext(""); |
| | | oaWorkflowDataPo.setDataId(GenerateCodeFactory.getGeneratorId(GenerateCodeFactory.CODE_PREFIX_dataId)); |
| | | oaWorkflowDataPo.setEvent(preOaWorkflowDataDtos.get(0).getEvent()); |
| | | oaWorkflowDataPo.setPreDataId(oaWorkflowDataDtos.get(0).getPreDataId()); |
| | |
| | | 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表达式 |
| | |
| | | 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); |