update - 完善顺序流条件表达式相关的逻辑

This commit is contained in:
wangli 2023-11-17 18:53:57 +08:00
parent 614939a152
commit 1a1039c057
2 changed files with 82 additions and 38 deletions

View File

@ -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<String> 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("非法的操作符");
}
}
}

View File

@ -46,7 +46,6 @@ public class SequenceFlowJsonConverter extends AbstractBpmnJsonConverter<Sequenc
* @param sequenceFlow
*/
private void setConditionExpression(BpmnJsonNode node, SequenceFlow sequenceFlow) {
// TODO 解析条件组及条件, 转换成引擎能识别的表达式
BpmnJsonNode preJsonNode = node.getPreJsonNode();
if (Objects.isNull(preJsonNode) || !NODE_CONDITION.equals(preJsonNode.getType())
|| CollectionUtils.isEmpty(preJsonNode.getProperty().getGroups())) {
@ -70,7 +69,6 @@ public class SequenceFlowJsonConverter extends AbstractBpmnJsonConverter<Sequenc
});
sb.append("}");
sequenceFlow.setConditionExpression(sb.toString());
// "${ (var:gt('fieldCode', value) && var:gt('fieldCode', value)) || ()}"
}
private String parseConditions(List<BpmnCondition> conditions) {