add - 新增顺序流的条件表达式的解析功能

This commit is contained in:
wangli 2023-11-17 00:06:39 +08:00
parent 8d79f2a11b
commit db38849be5
3 changed files with 62 additions and 7 deletions

View File

@ -24,7 +24,7 @@ public class BpmnCondition {
* string(字符串)/number(数字)/radio(单选)/checkbox(复选)
*/
@ApiModelProperty(value = "基础属性:字段类型", notes = "string, number, radio, checkbox", example = "string")
private String filedDateType;
private String fieldDataType;
/**
* 字段 code
@ -36,7 +36,7 @@ public class BpmnCondition {
* 操作符(与字段类型有关)
* <p>
* 当字段类型为 string , 操作符为 contains, notContains <br/>
* 当字段类型为 number , 操作符为 eq, ne, gt, ge, lt, le, between <br/>
* 当字段类型为 number , 操作符为 eq, ne, gt, gte, lt, lte, between <br/>
* 当字段类型为 radio , 操作符为 eq <br/>
* 当字段类型为 checkbox , 操作符为 in <br/>
*/
@ -80,12 +80,12 @@ public class BpmnCondition {
@ApiModelProperty(value = "当 fieldDateType = number 并且 operator = between 时, 右侧比较值")
private String rightValue;
public String getFiledDateType() {
return filedDateType;
public String getFieldDataType() {
return fieldDataType;
}
public void setFiledDateType(String filedDateType) {
this.filedDateType = filedDateType;
public void setFieldDataType(String fieldDataType) {
this.fieldDataType = fieldDataType;
}
public String getFieldCode() {

View File

@ -28,7 +28,7 @@ public class BpmnConditionGroup {
/**
* 同条件组内的多个条件之间的模式,默认为"and"
*/
private String conditionsType = "and";
private String conditionsType = "or";
public List<BpmnCondition> getConditions() {
return conditions;

View File

@ -1,12 +1,21 @@
package cn.axzo.workflow.core.converter.json;
import cn.axzo.workflow.common.model.request.bpmn.BpmnCondition;
import cn.axzo.workflow.common.model.request.bpmn.BpmnConditionGroup;
import cn.axzo.workflow.common.model.request.bpmn.BpmnJsonNode;
import org.flowable.bpmn.model.Process;
import org.flowable.bpmn.model.SequenceFlow;
import org.springframework.util.CollectionUtils;
import java.util.List;
import java.util.Objects;
import static cn.axzo.workflow.common.constant.BpmnConstants.SEQUENCE_FLOW_ID;
import static cn.axzo.workflow.common.enums.BpmnFlowNodeType.NODE_CONDITION;
import static cn.axzo.workflow.core.common.utils.BpmnExpressionTranslator.translateCheckbox;
import static cn.axzo.workflow.core.common.utils.BpmnExpressionTranslator.translateNumber;
import static cn.axzo.workflow.core.common.utils.BpmnExpressionTranslator.translateRadio;
import static cn.axzo.workflow.core.common.utils.BpmnExpressionTranslator.translateString;
import static cn.axzo.workflow.core.common.utils.BpmnJsonConverterUtil.id;
/**
@ -38,6 +47,52 @@ public class SequenceFlowJsonConverter extends AbstractBpmnJsonConverter<Sequenc
*/
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())) {
return;
}
List<BpmnConditionGroup> groups = preJsonNode.getProperty().getGroups();
StringBuilder sb = new StringBuilder("${");
groups.forEach(group -> {
String operator = "||";
if ("and".equals(group.getConditionsType())) {
operator = "&&";
}
if (sb.indexOf(operator) > 0) {
sb.append(" ").append(operator).append(" ");
}
if (!CollectionUtils.isEmpty(group.getConditions())) {
sb.append("(").append(parseConditions(group.getConditions())).append(")");
}
});
sb.append("}");
sequenceFlow.setConditionExpression(sb.toString());
// "${ (var:gt('fieldCode', value) && var:gt('fieldCode', value)) || ()}"
}
private String parseConditions(List<BpmnCondition> conditions) {
String expression = null;
for (BpmnCondition condition : conditions) {
switch (condition.getFieldDataType()) {
case "number":
expression = translateNumber(condition);
break;
case "radio":
expression = translateRadio(condition);
break;
case "checkbox":
expression = translateCheckbox(condition);
break;
default:
// String
expression = translateString(condition);
break;
}
}
return expression;
}
}