add - 新增顺序流的条件表达式的解析功能
This commit is contained in:
parent
8d79f2a11b
commit
db38849be5
@ -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() {
|
||||
|
||||
@ -28,7 +28,7 @@ public class BpmnConditionGroup {
|
||||
/**
|
||||
* 同条件组内的多个条件之间的模式,默认为"and"
|
||||
*/
|
||||
private String conditionsType = "and";
|
||||
private String conditionsType = "or";
|
||||
|
||||
public List<BpmnCondition> getConditions() {
|
||||
return conditions;
|
||||
|
||||
@ -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;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Loading…
Reference in New Issue
Block a user