Sfoglia il codice sorgente

优化跳过发起人

caixiaofeng 9 mesi fa
parent
commit
6b5666cf0b

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

@@ -16,7 +16,9 @@ import com.flow.entity.FlowDefine;
 import com.flow.entity.FlowInstance;
 import com.flow.entity.FlowTask;
 import com.flow.entity.node.ApprovalNode;
+import com.flow.entity.node.FormProperty;
 import com.flow.entity.node.Node;
+import com.flow.entity.node.StartTaskNode;
 import com.flow.enums.ProcessStatus;
 import com.flow.model.*;
 import com.flow.service.FlowActivityService;
@@ -95,12 +97,15 @@ public class FlowTaskServiceImpl extends BaseServiceImpl<FlowTaskDao, FlowTask>
             throw new BaseException("流程不存在");
         }
         Map<String, Object> variables = this.getVariables(task.getId());
-        ApprovalNode node = flowDefine.getNode(task.getTaskDefinitionKey(), ApprovalNode.class);
+        ApprovalNode approvalNode = flowDefine.getNode(task.getTaskDefinitionKey(), ApprovalNode.class);
+        StartTaskNode startTaskNode = flowDefine.getNode(task.getTaskDefinitionKey(), StartTaskNode.class);
+        List<FormProperty> formProperties = Objects.nonNull(approvalNode) ? approvalNode.getFormProperties() : startTaskNode.getFormProperties();
+        Map<String, Boolean> operations = Objects.nonNull(approvalNode) ? approvalNode.getOperations() : startTaskNode.getOperations();
         FormInfo formInfo = new FormInfo(
                 flowDefine,
-                node.getFormProperties(),
+                formProperties,
                 variables,
-                node.getOperations()
+                operations
         );
         FlowInstance instance = flowInstanceService.getInstance(task.getProcessInstanceId());
         formInfo.setInstanceId(task.getProcessInstanceId());

+ 1 - 1
flow-workflow/flow-workflow-entity/src/main/java/com/flow/entity/node/Node.java

@@ -22,7 +22,7 @@ import java.util.stream.Collectors;
 @Data
 @JsonTypeInfo(use = JsonTypeInfo.Id.NAME, property = "type", defaultImpl = Node.class, visible = true)
 @JsonSubTypes({
-        @JsonSubTypes.Type(value = StartNode.class, name = NodeTypeConstant.START),
+        @JsonSubTypes.Type(value = StartTaskNode.class, name = NodeTypeConstant.START),
         @JsonSubTypes.Type(value = CcNode.class, name = NodeTypeConstant.CC),
         @JsonSubTypes.Type(value = ApprovalNode.class, name = NodeTypeConstant.APPROVAL),
         @JsonSubTypes.Type(value = ConditionNode.class, name = NodeTypeConstant.CONDITION),

+ 6 - 9
flow-workflow/flow-workflow-entity/src/main/java/com/flow/entity/node/StartTaskNode.java

@@ -26,30 +26,27 @@ public class StartTaskNode extends Node {
         ArrayList<FlowElement> elements = Lists.newArrayList();
         // 开始节点
         StartEvent startEvent = new StartEvent();
-        startEvent.setId(this.getId());
+        String startId = "node_start";
+        startEvent.setId(startId);
         startEvent.setName(this.getName());
         startEvent.setExecutionListeners(this.buidEventListener());
         elements.add(startEvent);
         // 下一个节点的连线
-        String initiatorNodeId = "node_initiator";
         SequenceFlow sequenceFlow = new SequenceFlow();
-        sequenceFlow.setId(String.format("%s-%s", this.getId(), initiatorNodeId));
-        sequenceFlow.setSourceRef(this.getId());
-        sequenceFlow.setTargetRef(initiatorNodeId);
+        sequenceFlow.setId(String.format("%s-%s", startId, this.getId()));
+        sequenceFlow.setSourceRef(startId);
+        sequenceFlow.setTargetRef(this.getId());
         elements.add(sequenceFlow);
         // 发起人用户任务
         UserTask userTask = new UserTask();
-        userTask.setId(initiatorNodeId);
+        userTask.setId(this.getId());
         userTask.setName("发起人");
         userTask.setAssignee("${initiator}");
-        // 发起后自动跳过
         userTask.setSkipExpression("${_SKIP_INITIATOR == true}");
         elements.add(userTask);
         // 下一个节点的连线
         Node child = this.getChild();
         SequenceFlow sequence = this.buildSequence(child);
-        sequence.setId(String.format("%s-%s", initiatorNodeId, child.getId()));
-        sequence.setSourceRef(initiatorNodeId);
         elements.add(sequence);
         // 下一个节点
         List<FlowElement> flowElements = child.convert();