diff --git a/src/main/java/neatlogic/framework/process/stephandler/core/ProcessMessageContext.java b/src/main/java/neatlogic/framework/process/stephandler/core/ProcessMessageContext.java index cabc39179028562a238553565d1bebaa316d6e28..88c736fc08527b58c7ecd164c5a2ccca93d85a26 100644 --- a/src/main/java/neatlogic/framework/process/stephandler/core/ProcessMessageContext.java +++ b/src/main/java/neatlogic/framework/process/stephandler/core/ProcessMessageContext.java @@ -19,26 +19,35 @@ package neatlogic.framework.process.stephandler.core; import com.alibaba.fastjson.JSONObject; import neatlogic.framework.process.dto.ProcessStepRelVo; +import neatlogic.framework.restful.constvalue.OperationTypeEnum; +import org.apache.commons.lang3.StringUtils; import java.util.List; public class ProcessMessageContext { - private final JSONObject config; + private JSONObject config; + + private String stepName = StringUtils.EMPTY; + + private OperationTypeEnum operationType; - private String stepName; private List effectiveStepUuidList; private List connectionList; - public ProcessMessageContext(JSONObject config) { - this.config = config; - } +// public ProcessMessageContext(JSONObject config) { +// this.config = config; +// } public JSONObject getConfig() { return config; } + public void setConfig(JSONObject config) { + this.config = config; + } + public String getStepName() { return stepName; } @@ -62,4 +71,12 @@ public class ProcessMessageContext { public void setConnectionList(List connectionList) { this.connectionList = connectionList; } + + public OperationTypeEnum getOperationType() { + return operationType; + } + + public void setOperationType(OperationTypeEnum operationType) { + this.operationType = operationType; + } } diff --git a/src/main/java/neatlogic/framework/process/stephandler/core/ProcessMessageManager.java b/src/main/java/neatlogic/framework/process/stephandler/core/ProcessMessageManager.java index 46d5234adb57a1af8b077189c2a7b8b586ebde97..e272a26269368edadde2ca940d38f9716f6caa86 100644 --- a/src/main/java/neatlogic/framework/process/stephandler/core/ProcessMessageManager.java +++ b/src/main/java/neatlogic/framework/process/stephandler/core/ProcessMessageManager.java @@ -22,6 +22,7 @@ import com.alibaba.fastjson.JSONObject; import neatlogic.framework.process.constvalue.ProcessFlowDirection; import neatlogic.framework.process.constvalue.ProcessStepHandlerType; import neatlogic.framework.process.dto.ProcessStepRelVo; +import neatlogic.framework.restful.constvalue.OperationTypeEnum; import org.apache.commons.collections4.MapUtils; import org.apache.commons.lang3.StringUtils; @@ -32,23 +33,32 @@ import java.util.Objects; public class ProcessMessageManager { private static final ThreadLocal context = new ThreadLocal<>(); + private static ProcessMessageContext getProcessMessageContext() { + ProcessMessageContext processMessageContext = context.get(); + if (processMessageContext == null) { + processMessageContext = new ProcessMessageContext(); + context.set(processMessageContext); + } + return context.get(); + } public static void setConfig(JSONObject config) { - context.set(new ProcessMessageContext(config)); + getProcessMessageContext().setConfig(config); } public static void setStepName(String stepName) { - ProcessMessageContext processMessageContext = context.get(); - if (processMessageContext != null) { - processMessageContext.setStepName(stepName); - } + getProcessMessageContext().setStepName(stepName); } public static String getStepName() { - ProcessMessageContext processMessageContext = context.get(); - if (processMessageContext != null) { - return processMessageContext.getStepName(); - } - return StringUtils.EMPTY; + return getProcessMessageContext().getStepName(); + } + + public static OperationTypeEnum getOperationType() { + return getProcessMessageContext().getOperationType(); + } + + public static void setOperationType(OperationTypeEnum operationType) { + getProcessMessageContext().setOperationType(operationType); } public static void release() { @@ -56,16 +66,16 @@ public class ProcessMessageManager { } public static List getEffectiveStepUuidList() { - ProcessMessageContext processMessageContext = context.get(); - if (processMessageContext == null) { - return new ArrayList<>(); - } + ProcessMessageContext processMessageContext = getProcessMessageContext(); List effectiveStepUuidList = processMessageContext.getEffectiveStepUuidList(); if (effectiveStepUuidList == null) { List allProcessStepRelList = getProcessStepRelList(); String startStepUuid = null; String endStepUuid = null; JSONObject process = processMessageContext.getConfig(); + if (MapUtils.isEmpty(process)) { + return new ArrayList<>(); + } JSONArray stepList = process.getJSONArray("stepList"); for (int i = 0; i < stepList.size(); i++) { JSONObject step = stepList.getJSONObject(i); @@ -105,13 +115,13 @@ public class ProcessMessageManager { } public static List getProcessStepRelList() { - ProcessMessageContext processMessageContext = context.get(); - if (processMessageContext == null) { - return new ArrayList<>(); - } + ProcessMessageContext processMessageContext = getProcessMessageContext(); List processStepRelList = processMessageContext.getConnectionList(); if (processStepRelList == null) { JSONObject process = processMessageContext.getConfig(); + if (MapUtils.isEmpty(process)) { + return new ArrayList<>(); + } JSONArray connectionList = process.getJSONArray("connectionList"); if (connectionList == null) { connectionList = new JSONArray(); diff --git a/src/main/java/neatlogic/framework/process/util/ProcessConfigUtil.java b/src/main/java/neatlogic/framework/process/util/ProcessConfigUtil.java index d4e8f61448a874de9360df2ba94efb16c150b678..0430dc469e33a6242cc88a5870aa40a101ed2109 100644 --- a/src/main/java/neatlogic/framework/process/util/ProcessConfigUtil.java +++ b/src/main/java/neatlogic/framework/process/util/ProcessConfigUtil.java @@ -27,6 +27,7 @@ import neatlogic.framework.process.exception.process.ProcessStepUtilHandlerNotFo import neatlogic.framework.process.stephandler.core.IProcessStepInternalHandler; import neatlogic.framework.process.stephandler.core.ProcessMessageManager; import neatlogic.framework.process.stephandler.core.ProcessStepInternalHandlerFactory; +import neatlogic.framework.restful.constvalue.OperationTypeEnum; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.collections4.ListUtils; import org.apache.commons.collections4.MapUtils; @@ -414,14 +415,14 @@ public class ProcessConfigUtil { if (StringUtils.isBlank(uuid)) { continue; } - if (!effectiveStepUuidList.contains(uuid)) { + if (!effectiveStepUuidList.contains(uuid) && ProcessMessageManager.getOperationType() == OperationTypeEnum.UPDATE) { throw new ProcessConfigException(ProcessConfigException.Type.PRE_STEP_ASSIGN, ProcessMessageManager.getStepName()); } JSONArray conditionUuidArray = processStepObj.getJSONArray("condition"); if (CollectionUtils.isNotEmpty(conditionUuidArray)) { List conditionUuidList = conditionUuidArray.toJavaList(String.class); List list = ListUtils.removeAll(conditionUuidList, effectiveStepUuidList); - if (CollectionUtils.isNotEmpty(list)) { + if (CollectionUtils.isNotEmpty(list) && ProcessMessageManager.getOperationType() == OperationTypeEnum.UPDATE) { throw new ProcessConfigException(ProcessConfigException.Type.PRE_STEP_ASSIGN_CONDITION_STEP, ProcessMessageManager.getStepName()); } } @@ -441,7 +442,7 @@ public class ProcessConfigUtil { case COPY: String processStepUuid = configObj.getString("processStepUuid"); if (StringUtils.isNotBlank(processStepUuid)) { - if (!effectiveStepUuidList.contains(processStepUuid)) { + if (!effectiveStepUuidList.contains(processStepUuid) && ProcessMessageManager.getOperationType() == OperationTypeEnum.UPDATE) { throw new ProcessConfigException(ProcessConfigException.Type.COPY, ProcessMessageManager.getStepName()); } configObject.put("processStepUuid", processStepUuid);