update - 完善顺序流条件表达式相关的逻辑
This commit is contained in:
parent
614939a152
commit
1a1039c057
@ -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("非法的操作符");
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -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) {
|
||||
|
||||
Loading…
Reference in New Issue
Block a user