浏览代码

feature #I4GS03 并行节点中支持任意节点结束即继续的流程设计

bryan31 3 年之前
父节点
当前提交
50980a45a1

+ 19 - 5
liteflow-core/src/main/java/com/yomahub/liteflow/entity/flow/Condition.java

@@ -16,15 +16,21 @@ import java.util.List;
  * @author Bryan.Zhang
  */
 public class Condition {
-	//	增加errorResume属性,以区分当when调用链调用失败时是否继续往下执行 默认true继续执行
-	private boolean errorResume = true;
-	// 增加groupId属性,用于不同node进行同组合并
-	private String group = LocalDefaultFlowConstant.DEFAULT;
-	// condition 类型 参数:ConditionTypeEnum 包含:then when
+
+	//condition 类型 参数:ConditionTypeEnum 包含:then when
 	private String conditionType;
 
 	private List<Executable> nodeList;
 
+	//只在when类型下有效,以区分当when调用链调用失败时是否继续往下执行 默认true继续执行
+	private boolean errorResume = true;
+
+	//只在when类型下有效,用于不同node进行同组合并,相同的组会进行合并,不同的组不会进行合并
+	private String group = LocalDefaultFlowConstant.DEFAULT;
+
+	//只在when类型下有效,为true的话说明在多个并行节点下,任意一个成功,整个when就成功
+	private boolean any = false;
+
 	public Condition(List<Executable> nodeList) {
 		this.nodeList = nodeList;
 	}
@@ -62,4 +68,12 @@ public class Condition {
 	public void setConditionType(String conditionType) {
 		this.conditionType = conditionType;
 	}
+
+	public boolean isAny() {
+		return any;
+	}
+
+	public void setAny(boolean any) {
+		this.any = any;
+	}
 }

+ 0 - 3
liteflow-core/src/main/java/com/yomahub/liteflow/entity/flow/ThenCondition.java

@@ -22,8 +22,5 @@ public class ThenCondition extends Condition {
 	public ThenCondition(Condition condition){
 		super(condition.getNodeList());
 		super.setConditionType(condition.getConditionType());
-		super.setGroup(condition.getGroup());
-		super.setErrorResume(condition.isErrorResume());
 	}
-
 }

+ 1 - 0
liteflow-core/src/main/java/com/yomahub/liteflow/entity/flow/WhenCondition.java

@@ -31,6 +31,7 @@ public class WhenCondition extends Condition{
 		super.setConditionType(condition.getConditionType());
 		super.setGroup(condition.getGroup());
 		super.setErrorResume(condition.isErrorResume());
+		super.setAny(condition.isAny());
 	}
 
 }

+ 6 - 0
liteflow-core/src/main/java/com/yomahub/liteflow/parser/JsonFlowParser.java

@@ -135,6 +135,7 @@ public abstract class JsonFlowParser extends FlowParser {
         String group;
         String errorResume;
         Condition condition;
+        String any;
         String chainName = chainObject.getString("name");
         JSONArray conditionArray = chainObject.getJSONArray("condition");
         conditionList = new ArrayList<>();
@@ -144,6 +145,7 @@ public abstract class JsonFlowParser extends FlowParser {
             condArrayStr = condObject.getString("value");
             group = condObject.getString("group");
             errorResume = condObject.getString("errorResume");
+            any = condObject.getString("any");
             if (StrUtil.isBlank(condType) || StrUtil.isBlank(condArrayStr)) {
                 continue;
             }
@@ -153,6 +155,9 @@ public abstract class JsonFlowParser extends FlowParser {
             if (StrUtil.isBlank(errorResume)) {
                 errorResume = Boolean.TRUE.toString();
             }
+            if (StrUtil.isBlank(any)){
+                any = Boolean.FALSE.toString();
+            }
             condition = new Condition();
             chainNodeList = new ArrayList<>();
             condArray = condArrayStr.split(",");
@@ -191,6 +196,7 @@ public abstract class JsonFlowParser extends FlowParser {
             }
             condition.setErrorResume(errorResume.equals(Boolean.TRUE.toString()));
             condition.setGroup(group);
+            condition.setAny(any.equals(Boolean.TRUE.toString()));
             condition.setConditionType(condType);
             condition.setNodeList(chainNodeList);
             super.buildBaseFlowConditions(conditionList, condition);

+ 6 - 0
liteflow-core/src/main/java/com/yomahub/liteflow/parser/XmlFlowParser.java

@@ -131,6 +131,7 @@ public abstract class XmlFlowParser extends FlowParser {
         String[] condArray;
         String group;
         String errorResume;
+        String any;
         Condition condition;
         Element condE;
         List<Executable> chainNodeList;
@@ -143,6 +144,7 @@ public abstract class XmlFlowParser extends FlowParser {
             condArrayStr = condE.attributeValue("value");
             errorResume = condE.attributeValue("errorResume");
             group = condE.attributeValue("group");
+            any = condE.attributeValue("any");
             if (StrUtil.isBlank(condArrayStr)) {
                 continue;
             }
@@ -152,6 +154,9 @@ public abstract class XmlFlowParser extends FlowParser {
             if (StrUtil.isBlank(errorResume)) {
                 errorResume = Boolean.TRUE.toString();
             }
+            if (StrUtil.isBlank(any)){
+                any = Boolean.FALSE.toString();
+            }
             condition = new Condition();
             chainNodeList = new ArrayList<>();
             condArray = condArrayStr.split(",");
@@ -190,6 +195,7 @@ public abstract class XmlFlowParser extends FlowParser {
             }
             condition.setErrorResume(errorResume.equals(Boolean.TRUE.toString()));
             condition.setGroup(group);
+            condition.setAny(any.equals(Boolean.TRUE.toString()));
             condition.setConditionType(condE.getName());
             condition.setNodeList(chainNodeList);
             super.buildBaseFlowConditions(conditionList, condition);