From 1a1039c0570ba1a438912de078899711d3d301fc Mon Sep 17 00:00:00 2001 From: wangli <274027703@qq.com> Date: Fri, 17 Nov 2023 18:53:57 +0800 Subject: [PATCH] =?UTF-8?q?update=20-=20=E5=AE=8C=E5=96=84=E9=A1=BA?= =?UTF-8?q?=E5=BA=8F=E6=B5=81=E6=9D=A1=E4=BB=B6=E8=A1=A8=E8=BE=BE=E5=BC=8F?= =?UTF-8?q?=E7=9B=B8=E5=85=B3=E7=9A=84=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../utils/BpmnExpressionTranslator.java | 118 ++++++++++++------ .../json/SequenceFlowJsonConverter.java | 2 - 2 files changed, 82 insertions(+), 38 deletions(-) diff --git a/workflow-engine-core/src/main/java/cn/axzo/workflow/core/common/utils/BpmnExpressionTranslator.java b/workflow-engine-core/src/main/java/cn/axzo/workflow/core/common/utils/BpmnExpressionTranslator.java index c2fee270e..8e94e67cf 100644 --- a/workflow-engine-core/src/main/java/cn/axzo/workflow/core/common/utils/BpmnExpressionTranslator.java +++ b/workflow-engine-core/src/main/java/cn/axzo/workflow/core/common/utils/BpmnExpressionTranslator.java @@ -1,6 +1,11 @@ package cn.axzo.workflow.core.common.utils; import cn.axzo.workflow.common.model.request.bpmn.BpmnCondition; +import cn.axzo.workflow.core.common.exception.WorkflowEngineException; +import com.google.common.collect.Lists; + +import java.util.List; +import java.util.Objects; /** * 表达式翻译器 @@ -11,53 +16,94 @@ import cn.axzo.workflow.common.model.request.bpmn.BpmnCondition; public final class BpmnExpressionTranslator { private BpmnExpressionTranslator() {} - public static String translateNumber(BpmnCondition condition) { + public static String translateString(BpmnCondition condition) { + // ${var:contains('variableName', 'hello')}; + // ${!var:contains('variableName', 'hello')} StringBuilder sb = new StringBuilder(); - - if ("between".equals(condition.getOperator())) { - sb.append("var:") - .append(condition.getLeftOperator()) - .append("('") + if (Objects.equals(condition.getOperator(), "contains")) { + sb.append("var:contains('") .append(condition.getFieldCode()) - .append("', ") - .append(condition.getLeftValue()) - .append(")") - .append(" && ") - .append("var:") - .append(condition.getRightOperator()) - .append("('") - .append(condition.getFieldCode()) - .append("', ") - .append(condition.getRightValue()) - .append(")"); - } else { - sb.append("var:") - .append(condition.getOperator()) - .append("('") - .append(condition.getFieldCode()) - .append("', ") + .append("', '") .append(condition.getDefaultValue()) - .append(")"); + .append("')"); + } else if (Objects.equals(condition.getOperator(), "notContains")) { + sb.append("!var:contains('") + .append(condition.getFieldCode()) + .append("', '") + .append(condition.getDefaultValue()) + .append("')"); + } else { + // 其他非法的操作符都过滤掉,或在这里抛出异常 + throw new WorkflowEngineException("非法的操作符"); } return sb.toString(); } + public static String translateNumber(BpmnCondition condition) { + List operators = Lists.newArrayList("eq", "ne", "gt", "gte", "lt", "lte", "between"); + if (operators.contains(condition.getOperator())) { + + StringBuilder sb = new StringBuilder(); + if ("between".equals(condition.getOperator())) { + sb.append("var:") + .append(condition.getLeftOperator()) + .append("('") + .append(condition.getFieldCode()) + .append("', ") + .append(condition.getLeftValue()) + .append(")") + .append(" && ") + .append("var:") + .append(condition.getRightOperator()) + .append("('") + .append(condition.getFieldCode()) + .append("', ") + .append(condition.getRightValue()) + .append(")"); + } else { + sb.append("var:") + .append(condition.getOperator()) + .append("('") + .append(condition.getFieldCode()) + .append("', ") + .append(condition.getDefaultValue()) + .append(")"); + } + return sb.toString(); + } else { + throw new WorkflowEngineException("非法的操作符"); + } + } + public static String translateRadio(BpmnCondition condition) { - StringBuilder sb = new StringBuilder(); - //TODO - return sb.toString(); + if (Objects.equals(condition.getOperator(), "eq")) { + return "var:" + + condition.getOperator() + + "('" + + condition.getFieldCode() + + "', " + + condition.getDefaultValue() + + ")"; + } else { + throw new WorkflowEngineException("非法的操作符"); + } } public static String translateCheckbox(BpmnCondition condition) { - StringBuilder sb = new StringBuilder(); - //TODO - return sb.toString(); - } - - public static String translateString(BpmnCondition condition) { - StringBuilder sb = new StringBuilder(); - //TODO - return sb.toString(); + if (Objects.equals(condition.getOperator(), "in")) { + StringBuilder sb = new StringBuilder("var:containsAny(") + .append("'") + .append(condition.getFieldCode()) + .append("', "); + condition.getDefaultValues().forEach(i -> { + sb.append("'").append(i).append("',"); + }); + sb.delete(sb.length() - 1, sb.length()); + sb.append(")"); + return sb.toString(); + } else { + throw new WorkflowEngineException("非法的操作符"); + } } } diff --git a/workflow-engine-core/src/main/java/cn/axzo/workflow/core/converter/json/SequenceFlowJsonConverter.java b/workflow-engine-core/src/main/java/cn/axzo/workflow/core/converter/json/SequenceFlowJsonConverter.java index b660716ad..615d803dd 100644 --- a/workflow-engine-core/src/main/java/cn/axzo/workflow/core/converter/json/SequenceFlowJsonConverter.java +++ b/workflow-engine-core/src/main/java/cn/axzo/workflow/core/converter/json/SequenceFlowJsonConverter.java @@ -46,7 +46,6 @@ public class SequenceFlowJsonConverter extends AbstractBpmnJsonConverter conditions) {