From eadc0790df8b8dcf17dcb22f4bec302ee9f57b7b Mon Sep 17 00:00:00 2001
From: java110 <928255095@qq.com>
Date: 星期六, 28 八月 2021 23:17:53 +0800
Subject: [PATCH] 优化办理逻辑
---
service-common/src/main/java/com/java110/common/smo/impl/OaWorkflowUserInnerServiceSMOImpl.java | 106 +++++++++++++++++++++++++++++++++++++++++++++++++++--
1 files changed, 102 insertions(+), 4 deletions(-)
diff --git a/service-common/src/main/java/com/java110/common/smo/impl/OaWorkflowUserInnerServiceSMOImpl.java b/service-common/src/main/java/com/java110/common/smo/impl/OaWorkflowUserInnerServiceSMOImpl.java
index 1bbc86f..45cf7bc 100644
--- a/service-common/src/main/java/com/java110/common/smo/impl/OaWorkflowUserInnerServiceSMOImpl.java
+++ b/service-common/src/main/java/com/java110/common/smo/impl/OaWorkflowUserInnerServiceSMOImpl.java
@@ -13,19 +13,28 @@
import com.java110.intf.user.IUserInnerServiceSMO;
import com.java110.utils.util.Assert;
import com.java110.utils.util.StringUtil;
+import org.activiti.bpmn.model.BpmnModel;
+import org.activiti.bpmn.model.FlowNode;
+import org.activiti.bpmn.model.SequenceFlow;
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.engine.history.HistoricActivityInstance;
import org.activiti.engine.history.HistoricProcessInstance;
import org.activiti.engine.history.HistoricTaskInstance;
import org.activiti.engine.history.HistoricTaskInstanceQuery;
import org.activiti.engine.impl.identity.Authentication;
+import org.activiti.engine.impl.persistence.entity.ProcessDefinitionEntity;
import org.activiti.engine.query.Query;
+import org.activiti.engine.runtime.Execution;
import org.activiti.engine.runtime.ProcessInstance;
import org.activiti.engine.task.Comment;
import org.activiti.engine.task.Task;
import org.activiti.engine.task.TaskQuery;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;
@@ -39,6 +48,7 @@
@RestController
public class OaWorkflowUserInnerServiceSMOImpl extends BaseServiceSMO implements IOaWorkflowUserInnerServiceSMO {
+ private static Logger logger = LoggerFactory.getLogger(OaWorkflowUserInnerServiceSMOImpl.class);
@Autowired
private ProcessEngine processEngine;
@@ -49,10 +59,16 @@
private TaskService taskService;
@Autowired
+ private HistoryService historyService;
+
+ @Autowired
private IUserInnerServiceSMO userInnerServiceSMOImpl;
@Autowired
private IWorkflowInnerServiceSMO workflowInnerServiceSMOImpl;
+
+ @Autowired
+ private RepositoryService repositoryService;
/**
@@ -220,13 +236,11 @@
TaskService taskService = processEngine.getTaskService();
Task task = taskService.createTaskQuery().taskId(reqJson.getString("taskId")).singleResult();
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("startUserId", reqJson.getString("startUserId"));
taskService.complete(reqJson.getString("taskId"), variables);
ProcessInstance pi = runtimeService.createProcessInstanceQuery().processInstanceId(processInstanceId).singleResult();
@@ -236,6 +250,90 @@
return false;
}
+ public boolean changeTaskToOtherUser(@RequestBody JSONObject reqJson) {
+ 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"));
+ return true;
+ }
+
+ 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("娴佺▼鏈惎鍔ㄦ垨宸叉墽琛屽畬鎴愶紝鏃犳硶閫�鍥�");
+ }
+ List<HistoricTaskInstance> htiList = historyService.createHistoricTaskInstanceQuery()
+ .processInstanceBusinessKey(reqJson.getString("id"))
+ .orderByTaskCreateTime()
+ .asc()
+ .list();
+ String myTaskId = null;
+ HistoricTaskInstance myTask = null;
+ for (HistoricTaskInstance hti : htiList) {
+ if (reqJson.getString("curUserId").equals(hti.getAssignee())) {
+ myTaskId = hti.getId();
+ myTask = hti;
+ break;
+ }
+ }
+ if (null == myTaskId) {
+ throw new IllegalArgumentException("璇ヤ换鍔¢潪褰撳墠鐢ㄦ埛鎻愪氦锛屾棤娉曢��鍥�");
+ }
+
+ String processDefinitionId = myTask.getProcessDefinitionId();
+ ProcessDefinitionEntity processDefinitionEntity = (ProcessDefinitionEntity) repositoryService.createProcessDefinitionQuery().processDefinitionId(processDefinitionId).singleResult();
+ BpmnModel bpmnModel = repositoryService.getBpmnModel(processDefinitionId);
+
+ //鍙橀噺
+// Map<String, VariableInstance> variables = runtimeService.getVariableInstances(currentTask.getExecutionId());
+ String myActivityId = null;
+ List<HistoricActivityInstance> haiList = historyService.createHistoricActivityInstanceQuery()
+ .executionId(myTask.getExecutionId()).finished().list();
+ for (HistoricActivityInstance hai : haiList) {
+ if (myTaskId.equals(hai.getTaskId())) {
+ myActivityId = hai.getActivityId();
+ break;
+ }
+ }
+ FlowNode myFlowNode = (FlowNode) bpmnModel.getMainProcess().getFlowElement(myActivityId);
+
+
+ Execution execution = runtimeService.createExecutionQuery().executionId(task.getExecutionId()).singleResult();
+ String activityId = execution.getActivityId();
+ logger.warn("------->> activityId:" + activityId);
+ FlowNode flowNode = (FlowNode) bpmnModel.getMainProcess().getFlowElement(activityId);
+
+ //璁板綍鍘熸椿鍔ㄦ柟鍚�
+ List<SequenceFlow> oriSequenceFlows = new ArrayList<SequenceFlow>();
+ oriSequenceFlows.addAll(flowNode.getOutgoingFlows());
+
+ //娓呯悊娲诲姩鏂瑰悜
+ flowNode.getOutgoingFlows().clear();
+ //寤虹珛鏂版柟鍚�
+ List<SequenceFlow> newSequenceFlowList = new ArrayList<SequenceFlow>();
+ SequenceFlow newSequenceFlow = new SequenceFlow();
+ newSequenceFlow.setId("newSequenceFlowId");
+ newSequenceFlow.setSourceFlowElement(flowNode);
+ newSequenceFlow.setTargetFlowElement(myFlowNode);
+ newSequenceFlowList.add(newSequenceFlow);
+ flowNode.setOutgoingFlows(newSequenceFlowList);
+
+ Authentication.setAuthenticatedUserId(reqJson.getString("curUserId"));
+ taskService.addComment(task.getId(), task.getProcessInstanceId(), "閫�鍥烇紝" + reqJson.getString("auditMessage"));
+
+ Map<String, Object> currentVariables = new HashMap<String, Object>();
+ currentVariables.put("applier", reqJson.getString("curUserId"));
+ //瀹屾垚浠诲姟
+ taskService.complete(task.getId(), currentVariables);
+ //鎭㈠鍘熸柟鍚�
+ flowNode.setOutgoingFlows(oriSequenceFlows);
+ return true;
+ }
+
public List<AuditMessageDto> getAuditMessage(@RequestBody JSONObject reqJson) {
TaskService taskService = processEngine.getTaskService();
--
Gitblit v1.8.0