Browse Source

优化流程变量管理,解决重新发起触发自动通过问题

caixiaofeng 6 months ago
parent
commit
e57d6b916f

+ 0 - 5
flow-workflow/flow-workflow-biz/src/main/java/com/flow/service/impl/FlowDefineServiceImpl.java

@@ -73,14 +73,9 @@ public class FlowDefineServiceImpl extends BaseServiceImpl<FlowDefineDao, FlowDe
         values.put("initiatorName", SecurityContextUtil.getNickName());
         values.put("_FLOWABLE_SKIP_EXPRESSION_ENABLED", true);
         values.put("_SKIP_INITIATOR", true);
-        List<StartNode> startNodes = flowDefine.findFlowNodesOfType(StartNode.class);
-        for (StartNode startNode : startNodes) {
-            values.remove(String.format("_%s_", startNode.getId()));
-        }
         List<ApprovalNode> approvalNodes = flowDefine.findFlowNodesOfType(ApprovalNode.class);
         for (ApprovalNode approvalNode : approvalNodes) {
             values.put(String.format("%sCollection", approvalNode.getId()), approvalNode.getAssignees(values, flowDefine));
-            values.remove(String.format("_%s_", approvalNode.getId()));
         }
         List<CcNode> ccNodes = flowDefine.findFlowNodesOfType(CcNode.class);
         for (CcNode ccNode : ccNodes) {

+ 1 - 1
flow-workflow/flow-workflow-biz/src/main/java/com/flow/service/impl/FlowInstanceServiceImpl.java

@@ -96,7 +96,7 @@ public class FlowInstanceServiceImpl extends BaseServiceImpl<FlowInstanceDao, Fl
         }
         HistoricProcessInstance historicProcessInstance = historyService.createHistoricProcessInstanceQuery().processInstanceId(instanceId).singleResult();
         if (Objects.nonNull(historicProcessInstance)) {
-            historyService.createHistoricVariableInstanceQuery().processInstanceId(instanceId).list().forEach(variableInstance ->
+            historyService.createHistoricVariableInstanceQuery().executionId(instanceId).list().forEach(variableInstance ->
                     variables.putIfAbsent(variableInstance.getVariableName(), variableInstance.getValue())
             );
         }

+ 8 - 11
flow-workflow/flow-workflow-biz/src/main/java/com/flow/service/impl/FlowTaskServiceImpl.java

@@ -150,7 +150,7 @@ public class FlowTaskServiceImpl extends BaseServiceImpl<FlowTaskDao, FlowTask>
             historyService.createHistoricVariableInstanceQuery().taskId(taskId).list().forEach(variableInstance ->
                     variables.putIfAbsent(variableInstance.getVariableName(), variableInstance.getValue())
             );
-            historyService.createHistoricVariableInstanceQuery().processInstanceId(task.getProcessInstanceId()).list().forEach(variableInstance ->
+            historyService.createHistoricVariableInstanceQuery().executionId(task.getProcessInstanceId()).list().forEach(variableInstance ->
                     variables.putIfAbsent(variableInstance.getVariableName(), variableInstance.getValue())
             );
         } else {
@@ -161,11 +161,6 @@ public class FlowTaskServiceImpl extends BaseServiceImpl<FlowTaskDao, FlowTask>
                     variables.putIfAbsent(variableInstance.getName(), variableInstance.getValue())
             );
         }
-        Optional<FlowTask> optional = flowTaskDao.lambdaQueryChain()
-                .select(FlowTask::getVariables)
-                .eq(FlowTask::getId, taskId)
-                .oneOpt();
-        optional.ifPresent((flowTask) -> variables.putAll(flowTask.getVariables()));
         return variables;
     }
 
@@ -300,21 +295,22 @@ public class FlowTaskServiceImpl extends BaseServiceImpl<FlowTaskDao, FlowTask>
     public void complete(TaskForm taskForm) {
         Task task = this.comment(taskForm);
         DelegationState delegationState = task.getDelegationState();
-        Map<String, Object> transientVariables = new HashMap<>();
-        Map<String, Object> variables = taskService.getVariables(task.getId());
+        Map<String, Object> localVariables = new HashMap<>();
+        Map<String, Object> variables = runtimeService.getVariables(task.getProcessInstanceId());
         Map<String, Object> values = taskForm.getValues();
         if (CollectionUtils.isNotEmpty(values)) {
             values.forEach((key, value) -> {
                 if (variables.containsKey(key)) {
                     Object obj = variables.get(key);
                     if (Objects.nonNull(obj) && !obj.equals(value)) {
-                        transientVariables.put(key, value);
+                        localVariables.put(key, value);
                     }
                 }
             });
+            System.out.println("localVariables = " + localVariables);
             String assignee = SecurityContextUtil.getUserId();
             if (StringUtils.isNotBlank(assignee)) {
-                values.put(String.format("_%s_", assignee), task.getTaskDefinitionKey());
+                localVariables.put(String.format("_%s_", assignee), task.getTaskDefinitionKey());
             }
         }
         if (Objects.nonNull(delegationState) && delegationState == DelegationState.PENDING) {
@@ -323,6 +319,7 @@ public class FlowTaskServiceImpl extends BaseServiceImpl<FlowTaskDao, FlowTask>
                     values
             );
         } else {
+            taskService.setVariablesLocal(taskForm.getTaskId(), localVariables);
             taskService.complete(
                     taskForm.getTaskId(),
                     values
@@ -330,7 +327,7 @@ public class FlowTaskServiceImpl extends BaseServiceImpl<FlowTaskDao, FlowTask>
             this.updateStatus(
                     taskForm.getTaskId(),
                     ProcessStatus.COMPLETED,
-                    transientVariables
+                    localVariables
             );
         }
     }