Browse Source

http节点优化

caixiaofeng 6 tháng trước cách đây
mục cha
commit
f3b04ee25a

+ 41 - 0
flow-common/flow-common-flowable-starter/src/main/java/com/flow/flowable/cmd/RecordActivityDeleteReasonCmd.java

@@ -0,0 +1,41 @@
+package com.flow.flowable.cmd;
+
+import org.flowable.common.engine.impl.interceptor.Command;
+import org.flowable.common.engine.impl.interceptor.CommandContext;
+import org.flowable.engine.impl.persistence.entity.ActivityInstanceEntity;
+import org.flowable.engine.impl.persistence.entity.ActivityInstanceEntityManager;
+import org.flowable.engine.impl.persistence.entity.HistoricActivityInstanceEntity;
+import org.flowable.engine.impl.persistence.entity.HistoricActivityInstanceEntityManager;
+import org.flowable.engine.impl.util.CommandContextUtil;
+
+import java.util.List;
+
+public class RecordActivityDeleteReasonCmd implements Command<Void> {
+    protected String executionId;
+    protected String activityId;
+    protected String deleteReason;
+
+    public RecordActivityDeleteReasonCmd(String executionId, String activityId, String deleteReason) {
+        this.executionId = executionId;
+        this.activityId = activityId;
+        this.deleteReason = deleteReason;
+    }
+
+
+    @Override
+    public Void execute(CommandContext commandContext) {
+        ActivityInstanceEntityManager activityInstanceEntityManager = CommandContextUtil.getActivityInstanceEntityManager(commandContext);
+        List<ActivityInstanceEntity> activityInstanceEntityList = activityInstanceEntityManager.findActivityInstancesByExecutionAndActivityId(this.executionId, this.activityId);
+        for (ActivityInstanceEntity activityInstanceEntity : activityInstanceEntityList) {
+            activityInstanceEntity.setDeleteReason(this.deleteReason);
+            activityInstanceEntityManager.update(activityInstanceEntity);
+        }
+        HistoricActivityInstanceEntityManager historicActivityInstanceEntityManager = CommandContextUtil.getHistoricActivityInstanceEntityManager(commandContext);
+        List<HistoricActivityInstanceEntity> historicActivityInstanceEntityList = historicActivityInstanceEntityManager.findHistoricActivityInstancesByExecutionAndActivityId(this.executionId, this.activityId);
+        for (HistoricActivityInstanceEntity historicActivityInstanceEntity : historicActivityInstanceEntityList) {
+            historicActivityInstanceEntity.setDeleteReason(this.deleteReason);
+            historicActivityInstanceEntityManager.update(historicActivityInstanceEntity);
+        }
+        return null;
+    }
+}

+ 10 - 0
flow-workflow/flow-workflow-biz/src/main/java/com/flow/behavior/CustomHttpServiceTaskActivityBehavior.java

@@ -1,9 +1,13 @@
 package com.flow.behavior;
 
+import com.flow.flowable.cmd.RecordActivityDeleteReasonCmd;
 import lombok.extern.slf4j.Slf4j;
 import org.flowable.common.engine.api.async.AsyncTaskInvoker;
+import org.flowable.engine.ManagementService;
 import org.flowable.engine.delegate.DelegateExecution;
 import org.flowable.engine.impl.bpmn.http.DefaultBpmnHttpActivityDelegate;
+import org.flowable.engine.impl.util.CommandContextUtil;
+import org.flowable.http.common.api.HttpResponse;
 
 import java.util.concurrent.CompletableFuture;
 
@@ -17,6 +21,12 @@ public class CustomHttpServiceTaskActivityBehavior extends DefaultBpmnHttpActivi
 
     @Override
     public void afterExecution(DelegateExecution execution, ExecutionData result) {
+        HttpResponse response = result.getResponse();
+        if (response.getStatusCode() >= 400) {
+            log.error("HttpServiceTask error: {}", response.getBody());
+            // ManagementService managementService = CommandContextUtil.getProcessEngineConfiguration().getManagementService();
+            // managementService.executeCommand(new RecordActivityDeleteReasonCmd(execution.getId(), execution.getCurrentActivityId(), response.getBody()));
+        }
         super.afterExecution(execution, result);
     }
 }

+ 6 - 16
flow-workflow/flow-workflow-biz/src/main/java/com/flow/listener/GlobalActivityEventListener.java

@@ -9,6 +9,7 @@ import com.flow.entity.node.Node;
 import com.flow.entity.settings.CancelConfig;
 import com.flow.entity.settings.Settings;
 import com.flow.enums.*;
+import com.flow.flowable.cmd.RecordActivityDeleteReasonCmd;
 import com.flow.flowable.event.CustomFlowableEngineEvent;
 import com.flow.flowable.model.JumpServiceTask;
 import com.flow.flowable.utils.ProcessElementUtil;
@@ -21,7 +22,7 @@ import org.flowable.bpmn.model.FlowElement;
 import org.flowable.bpmn.model.UserTask;
 import org.flowable.common.engine.api.delegate.event.FlowableEngineEntityEvent;
 import org.flowable.common.engine.api.delegate.event.FlowableEngineEvent;
-import org.flowable.engine.HistoryService;
+import org.flowable.engine.ManagementService;
 import org.flowable.engine.RuntimeService;
 import org.flowable.engine.TaskService;
 import org.flowable.engine.delegate.DelegateExecution;
@@ -29,7 +30,7 @@ import org.flowable.engine.delegate.event.AbstractFlowableEngineEventListener;
 import org.flowable.engine.delegate.event.FlowableCancelledEvent;
 import org.flowable.engine.delegate.event.FlowableProcessStartedEvent;
 import org.flowable.engine.delegate.event.impl.FlowableProcessCancelledEventImpl;
-import org.flowable.engine.impl.persistence.entity.*;
+import org.flowable.engine.impl.persistence.entity.ExecutionEntityImpl;
 import org.flowable.spring.SpringProcessEngineConfiguration;
 import org.flowable.task.service.impl.persistence.entity.TaskEntityImpl;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -38,7 +39,6 @@ import org.springframework.transaction.support.TransactionSynchronization;
 import org.springframework.transaction.support.TransactionSynchronizationManager;
 
 import java.time.LocalDateTime;
-import java.util.List;
 import java.util.Map;
 import java.util.Objects;
 
@@ -54,7 +54,7 @@ public class GlobalActivityEventListener extends AbstractFlowableEngineEventList
     @Autowired
     private RuntimeService runtimeService;
     @Autowired
-    private HistoryService historyService;
+    private ManagementService managementService;
     @Autowired
     private NotifyService notifyService;
     @Autowired
@@ -222,18 +222,8 @@ public class GlobalActivityEventListener extends AbstractFlowableEngineEventList
         String targetNode = jumpServiceTask.getTargetNode();
         FlowDefine flowDefine = flowDefineService.getDefine(event.getProcessDefinitionId());
         Node target = flowDefine.findFlowNodeOfType(Node.class, targetNode);
-        ActivityInstanceEntityManager activityInstanceEntityManager = springProcessEngineConfiguration.getActivityInstanceEntityManager();
-        List<ActivityInstanceEntity> activityInstanceEntityList = activityInstanceEntityManager.findActivityInstancesByExecutionAndActivityId(event.getExecutionId(), entity.getActivityId());
-        for (ActivityInstanceEntity activityInstanceEntity : activityInstanceEntityList) {
-            activityInstanceEntity.setDeleteReason(String.format("<span>跳转至 <span class='color-primary'>%s</span></span>", target.getName()));
-            activityInstanceEntityManager.update(activityInstanceEntity);
-        }
-        HistoricActivityInstanceEntityManager historicActivityInstanceEntityManager = springProcessEngineConfiguration.getHistoricActivityInstanceEntityManager();
-        List<HistoricActivityInstanceEntity> historicActivityInstanceEntities = historicActivityInstanceEntityManager.findHistoricActivityInstancesByExecutionAndActivityId(event.getExecutionId(), entity.getActivityId());
-        for (HistoricActivityInstanceEntity historicActivityInstanceEntity : historicActivityInstanceEntities) {
-            historicActivityInstanceEntity.setDeleteReason(String.format("<span>跳转至 <span class='color-primary'>%s</span></span>", target.getName()));
-            historicActivityInstanceEntityManager.update(historicActivityInstanceEntity);
-        }
+        String deleteReason = String.format("<span>跳转至 <span class='color-primary'>%s</span></span>", target.getName());
+        managementService.executeCommand(new RecordActivityDeleteReasonCmd(event.getExecutionId(), entity.getActivityId(), deleteReason));
     }
 
 

+ 11 - 18
flow-workflow/flow-workflow-entity/src/main/java/com/flow/entity/node/HttpNode.java

@@ -4,7 +4,6 @@ import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
 import com.fasterxml.jackson.core.JsonProcessingException;
 import com.fasterxml.jackson.databind.ObjectMapper;
 import com.flow.common.core.util.ApplicationContextUtil;
-import com.flow.enums.TimeUnitEnum;
 import com.google.common.collect.Lists;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
@@ -20,9 +19,6 @@ public class HttpNode extends Node {
     private List<Map<String, Object>> headers;
     private List<Map<String, Object>> body;
     private Long requestTimeout = 0L;
-    private Integer retryCount;
-    private TimeUnitEnum unit = TimeUnitEnum.MINUTE;
-    private Integer duration;
     private List<String> errorUsers;
 
     @Override
@@ -36,21 +32,16 @@ public class HttpNode extends Node {
         // httpServiceTask.setAsynchronous(true);
         // httpServiceTask.setParallelInSameTransaction(true);
         // 失败重试
-        boolean isRetry = Objects.nonNull(this.retryCount) && this.retryCount > 0;
+        /*boolean isRetry = Objects.nonNull(this.retryCount) && this.retryCount > 0;
         if (isRetry) {
             StringBuilder retry = new StringBuilder();
             retry.append(String.format("R%s", this.retryCount));
             if (Objects.nonNull(this.duration)) {
                 retry.append("/")
                         .append(String.format(this.unit.getUnit(), this.duration));
-                ExtensionElement retryElement = new ExtensionElement();
-                retryElement.setNamespace("https://flowable.org/model");
-                retryElement.setNamespacePrefix("flowable");
-                retryElement.setName("failedJobRetryTimeCycle");
-                retryElement.setElementText(retry.toString());
-                httpServiceTask.addExtensionElement(retryElement);
+                httpServiceTask.setFailedJobRetryTimeCycleValue(retry.toString());
             }
-        }
+        }*/
         // 请求参数
         ArrayList<FieldExtension> fieldExtensions = new ArrayList<>();
         FieldExtension urlExtension = new FieldExtension();
@@ -104,10 +95,12 @@ public class HttpNode extends Node {
         failCodesExtension.setFieldName("failStatusCodes");
         failCodesExtension.setStringValue("400,401,403,404,500,503");
         fieldExtensions.add(failCodesExtension);
-        FieldExtension handleCodesExtension = new FieldExtension();
-        handleCodesExtension.setFieldName("handleStatusCodes");
-        handleCodesExtension.setStringValue("400,401,403,404,500,503");
-        fieldExtensions.add(handleCodesExtension);
+        if (CollectionUtils.isNotEmpty(this.errorUsers)) {
+            FieldExtension handleCodesExtension = new FieldExtension();
+            handleCodesExtension.setFieldName("handleStatusCodes");
+            handleCodesExtension.setStringValue("400,401,403,404,500,503");
+            fieldExtensions.add(handleCodesExtension);
+        }
         FieldExtension saveResponseBodyExtension = new FieldExtension();
         saveResponseBodyExtension.setFieldName("saveResponseVariableAsJson");
         saveResponseBodyExtension.setStringValue("true");
@@ -119,7 +112,7 @@ public class HttpNode extends Node {
         httpServiceTask.setFieldExtensions(fieldExtensions);
         FieldExtension ignoreExtension = new FieldExtension();
         ignoreExtension.setFieldName("ignoreException");
-        ignoreExtension.setStringValue(Boolean.toString(isRetry));
+        ignoreExtension.setStringValue(Boolean.toString(false));
         fieldExtensions.add(ignoreExtension);
         elements.add(httpServiceTask);
         if (CollectionUtils.isNotEmpty(this.errorUsers)) {
@@ -145,7 +138,7 @@ public class HttpNode extends Node {
         String boundaryId = String.format("%s_boundary", activity.getId());
         boundaryEvent.setId(boundaryId);
         boundaryEvent.setName("错误处理");
-        boundaryEvent.setCancelActivity(false);
+        boundaryEvent.setCancelActivity(true);
         boundaryEvent.setAttachedToRef(activity);
         ErrorEventDefinition errorEventDefinition = new ErrorEventDefinition();
         // errorEventDefinition.setErrorCode("HTTP400");

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

@@ -8,7 +8,9 @@ import org.flowable.bpmn.model.SequenceFlow;
 import org.flowable.bpmn.model.StartEvent;
 import org.flowable.bpmn.model.TimerEventDefinition;
 
-import java.util.*;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Objects;
 
 @EqualsAndHashCode(callSuper = true)
 @Data