Browse Source

添加发起人用户节点

caixiaofeng 9 tháng trước cách đây
mục cha
commit
643e3a6ccc

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

@@ -59,6 +59,9 @@ public class FlowDefineServiceImpl extends BaseServiceImpl<FlowDefineDao, FlowDe
             throw new BaseException(String.format("流程(%s)已挂起,无法发起流程!", flowDefine.getName()));
         }
         Map<String, Object> values = startProcess.getValues();
+        values.put("initiator", SecurityContextUtil.getUserId());
+        values.put("_FLOWABLE_SKIP_EXPRESSION_ENABLED", true);
+        values.put("_SKIP_INITIATOR", true);
         List<ApprovalNode> approvalNodes = flowDefine.findFlowNodesOfType(ApprovalNode.class);
         for (ApprovalNode approvalNode : approvalNodes) {
             values.put(String.format("%sCollection", approvalNode.getId()), approvalNode.getAssignees(values, flowDefine));

+ 59 - 0
flow-workflow/flow-workflow-entity/src/main/java/com/flow/entity/node/StartTaskNode.java

@@ -0,0 +1,59 @@
+package com.flow.entity.node;
+
+import com.google.common.collect.Lists;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import org.flowable.bpmn.model.FlowElement;
+import org.flowable.bpmn.model.SequenceFlow;
+import org.flowable.bpmn.model.StartEvent;
+import org.flowable.bpmn.model.UserTask;
+
+import java.util.ArrayList;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Map;
+
+@EqualsAndHashCode(callSuper = true)
+@Data
+public class StartTaskNode extends Node {
+    // 表单属性
+    private List<FormProperty> formProperties = new ArrayList<>();
+    // 操作权限
+    private Map<String, Boolean> operations = new LinkedHashMap<>();
+
+    @Override
+    public List<FlowElement> convert() {
+        ArrayList<FlowElement> elements = Lists.newArrayList();
+        // 开始节点
+        StartEvent startEvent = new StartEvent();
+        startEvent.setId(this.getId());
+        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);
+        elements.add(sequenceFlow);
+        // 发起人用户任务
+        UserTask userTask = new UserTask();
+        userTask.setId(initiatorNodeId);
+        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();
+        elements.addAll(flowElements);
+        return elements;
+    }
+}