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) {