Kaynağa Gözat

服务节点

caixiaofeng 6 ay önce
ebeveyn
işleme
7eb9e7487c

+ 29 - 0
flow-workflow/flow-workflow-entity/src/main/java/com/flow/entity/node/ServiceNode.java

@@ -3,19 +3,25 @@ package com.flow.entity.node;
 import com.google.common.collect.Lists;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
+import org.apache.commons.lang3.StringUtils;
+import org.flowable.bpmn.model.FieldExtension;
 import org.flowable.bpmn.model.FlowElement;
 import org.flowable.bpmn.model.SequenceFlow;
 import org.flowable.bpmn.model.ServiceTask;
+import org.flowable.common.engine.impl.util.CollectionUtil;
 
 import java.util.ArrayList;
 import java.util.List;
+import java.util.Map;
 import java.util.Objects;
+import java.util.stream.Collectors;
 
 @EqualsAndHashCode(callSuper = true)
 @Data
 public class ServiceNode extends Node {
     private String implementationType;
     private String implementation;
+    private List<Map<String, String>> fields;
 
     @Override
     public List<FlowElement> convert() {
@@ -27,6 +33,29 @@ public class ServiceNode extends Node {
         serviceTask.setExecutionListeners(this.buidEventListener());
         serviceTask.setImplementationType(implementationType);
         serviceTask.setImplementation(implementation);
+        if (CollectionUtil.isNotEmpty(this.fields)) {
+            List<FieldExtension> fieldExtensions = this.fields.stream().map(field -> {
+                String name = field.get("name");
+                String type = field.get("type");
+                String value = field.get("value");
+                if (StringUtils.isBlank(name)) {
+                    throw new IllegalArgumentException("注入字段名称不能为空");
+                } else if (StringUtils.isBlank(type)) {
+                    throw new IllegalArgumentException("注入字段类型不能为空");
+                } else if (StringUtils.isBlank(value)) {
+                    throw new IllegalArgumentException("注入字段值不能为空");
+                }
+                FieldExtension fieldExtension = new FieldExtension();
+                fieldExtension.setFieldName(name);
+                if ("expression".equals(type)) {
+                    fieldExtension.setExpression(value);
+                } else {
+                    fieldExtension.setStringValue(value);
+                }
+                return fieldExtension;
+            }).collect(Collectors.toList());
+            serviceTask.setFieldExtensions(fieldExtensions);
+        }
         elements.add(serviceTask);
         // 下一个节点的连线
         Node child = this.getChild();