Commit 0eb60e00da9d8a056f5baef2b81073b9d4f7107b

Authored by YunaiV
1 parent 3686ef82

!1519 条件节点添加包含和不包含操作符

yudao-module-bpm/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/task/BpmProcessInstanceCopyController.java
@@ -66,15 +66,15 @@ public class BpmProcessInstanceCopyController { @@ -66,15 +66,15 @@ public class BpmProcessInstanceCopyController {
66 Map<String, HistoricProcessInstance> processInstanceMap = processInstanceService.getHistoricProcessInstanceMap( 66 Map<String, HistoricProcessInstance> processInstanceMap = processInstanceService.getHistoricProcessInstanceMap(
67 convertSet(pageResult.getList(), BpmProcessInstanceCopyDO::getProcessInstanceId)); 67 convertSet(pageResult.getList(), BpmProcessInstanceCopyDO::getProcessInstanceId));
68 Map<Long, AdminUserRespDTO> userMap = adminUserApi.getUserMap(convertListByFlatMap(pageResult.getList(), 68 Map<Long, AdminUserRespDTO> userMap = adminUserApi.getUserMap(convertListByFlatMap(pageResult.getList(),
69 - copy -> Stream.of(copy.getStartUserId(), Long.parseLong(copy.getCreator())))); 69 + copy -> Stream.of(copy.getStartUserId(), copy.getUserId())));
70 Map<String, BpmProcessDefinitionInfoDO> processDefinitionInfoMap = processDefinitionService.getProcessDefinitionInfoMap( 70 Map<String, BpmProcessDefinitionInfoDO> processDefinitionInfoMap = processDefinitionService.getProcessDefinitionInfoMap(
71 convertSet(pageResult.getList(), BpmProcessInstanceCopyDO::getProcessDefinitionId)); 71 convertSet(pageResult.getList(), BpmProcessInstanceCopyDO::getProcessDefinitionId));
72 return success(convertPage(pageResult, copy -> { 72 return success(convertPage(pageResult, copy -> {
73 BpmProcessInstanceCopyRespVO copyVO = BeanUtils.toBean(copy, BpmProcessInstanceCopyRespVO.class); 73 BpmProcessInstanceCopyRespVO copyVO = BeanUtils.toBean(copy, BpmProcessInstanceCopyRespVO.class);
74 - MapUtils.findAndThen(userMap, Long.valueOf(copy.getCreator()),  
75 - user -> copyVO.setStartUser(BeanUtils.toBean(user, UserSimpleBaseVO.class)));  
76 - MapUtils.findAndThen(userMap, copy.getStartUserId(), 74 + MapUtils.findAndThen(userMap, copy.getUserId(),
77 user -> copyVO.setCreateUser(BeanUtils.toBean(user, UserSimpleBaseVO.class))); 75 user -> copyVO.setCreateUser(BeanUtils.toBean(user, UserSimpleBaseVO.class)));
  76 + MapUtils.findAndThen(userMap, copy.getStartUserId(),
  77 + user -> copyVO.setStartUser(BeanUtils.toBean(user, UserSimpleBaseVO.class)));
78 MapUtils.findAndThen(processInstanceMap, copyVO.getProcessInstanceId(), 78 MapUtils.findAndThen(processInstanceMap, copyVO.getProcessInstanceId(),
79 processInstance -> { 79 processInstance -> {
80 copyVO.setSummary(FlowableUtils.getSummary( 80 copyVO.setSummary(FlowableUtils.getSummary(
yudao-module-bpm/src/main/java/cn/iocoder/yudao/module/bpm/enums/definition/BpmConditionOpCodeEnum.java
@@ -11,12 +11,14 @@ import lombok.RequiredArgsConstructor; @@ -11,12 +11,14 @@ import lombok.RequiredArgsConstructor;
11 @RequiredArgsConstructor 11 @RequiredArgsConstructor
12 @Getter 12 @Getter
13 public enum BpmConditionOpCodeEnum { 13 public enum BpmConditionOpCodeEnum {
  14 +
14 EQ("==", "等于", " var:getOrDefault(%s, null) == %s "), 15 EQ("==", "等于", " var:getOrDefault(%s, null) == %s "),
15 NE("!=", "不等于", " var:getOrDefault(%s, null) != %s "), 16 NE("!=", "不等于", " var:getOrDefault(%s, null) != %s "),
16 GT(">", "大于", " var:getOrDefault(%s, null) > %s "), 17 GT(">", "大于", " var:getOrDefault(%s, null) > %s "),
17 GE(">=", "大于等于", " var:getOrDefault(%s, null) >= %s "), 18 GE(">=", "大于等于", " var:getOrDefault(%s, null) >= %s "),
18 LT("<", "小于", " var:getOrDefault(%s, null) < %s "), 19 LT("<", "小于", " var:getOrDefault(%s, null) < %s "),
19 LE("<=", "小于等于", " var:getOrDefault(%s, null) <= %s "), 20 LE("<=", "小于等于", " var:getOrDefault(%s, null) <= %s "),
  21 +
20 CONTAINS("contain", "包含", " var:contains(%s, %s) "), 22 CONTAINS("contain", "包含", " var:contains(%s, %s) "),
21 NOT_CONTAINS("!contain", "不包含", " !var:contains(%s, %s) "); 23 NOT_CONTAINS("!contain", "不包含", " !var:contains(%s, %s) ");
22 24
yudao-module-bpm/src/main/java/cn/iocoder/yudao/module/bpm/framework/flowable/core/el/VariableConvertByTypeExpressionFunction.java
@@ -7,10 +7,10 @@ import org.springframework.stereotype.Component; @@ -7,10 +7,10 @@ import org.springframework.stereotype.Component;
7 /** 7 /**
8 * 根据流程变量 variable 的类型,转换参数的值 8 * 根据流程变量 variable 的类型,转换参数的值
9 * 9 *
10 - * 目前用于 ConditionNodeConvert 的 buildConditionExpression 方法中  
11 - * 10 + * @deprecated 已无调用方
12 * @author jason 11 * @author jason
13 */ 12 */
  13 +@Deprecated // TODO @芋艿:兼容老版本,预计 27 年删除;
14 @Component 14 @Component
15 public class VariableConvertByTypeExpressionFunction extends AbstractFlowableVariableExpressionFunction { 15 public class VariableConvertByTypeExpressionFunction extends AbstractFlowableVariableExpressionFunction {
16 16
yudao-module-bpm/src/main/java/cn/iocoder/yudao/module/bpm/framework/flowable/core/util/FlowableUtils.java
@@ -275,13 +275,10 @@ public class FlowableUtils { @@ -275,13 +275,10 @@ public class FlowableUtils {
275 /** 275 /**
276 * 递归解析表单字段 276 * 递归解析表单字段
277 */ 277 */
278 - private static void parseFormField(BpmFormFieldVO formField,  
279 - Map<String, BpmFormFieldVO> formFieldsMap) {  
280 - 278 + private static void parseFormField(BpmFormFieldVO formField, Map<String, BpmFormFieldVO> formFieldsMap) {
281 if (formField == null) { 279 if (formField == null) {
282 return; 280 return;
283 } 281 }
284 -  
285 // 如果存在 children -> 说明是布局组件 282 // 如果存在 children -> 说明是布局组件
286 if (formField.getChildren() != null && !formField.getChildren().isEmpty()) { 283 if (formField.getChildren() != null && !formField.getChildren().isEmpty()) {
287 for (BpmFormFieldVO child : formField.getChildren()) { 284 for (BpmFormFieldVO child : formField.getChildren()) {
@@ -289,7 +286,6 @@ public class FlowableUtils { @@ -289,7 +286,6 @@ public class FlowableUtils {
289 } 286 }
290 return; 287 return;
291 } 288 }
292 -  
293 // 真实字段才加入 map 289 // 真实字段才加入 map
294 if (StrUtil.isNotBlank(formField.getField())) { 290 if (StrUtil.isNotBlank(formField.getField())) {
295 formFieldsMap.put(formField.getField(), formField); 291 formFieldsMap.put(formField.getField(), formField);
yudao-module-bpm/src/main/java/cn/iocoder/yudao/module/bpm/framework/flowable/core/util/SimpleModelUtils.java
@@ -705,7 +705,6 @@ public class SimpleModelUtils { @@ -705,7 +705,6 @@ public class SimpleModelUtils {
705 } 705 }
706 // 构造规则表达式 706 // 构造规则表达式
707 List<String> list = convertList(item.getRules(), (rule) -> { 707 List<String> list = convertList(item.getRules(), (rule) -> {
708 - // TODO @芋艿:官方文档中无convertByType方法,https://flowable.me/blog/2025/04/02/back-end-expressions/  
709 String rightSide = NumberUtil.isNumber(rule.getRightSide()) ? rule.getRightSide() 708 String rightSide = NumberUtil.isNumber(rule.getRightSide()) ? rule.getRightSide()
710 : "\"" + rule.getRightSide() + "\""; // 如果非数值类型加引号 709 : "\"" + rule.getRightSide() + "\""; // 如果非数值类型加引号
711 return String.format(BpmConditionOpCodeEnum.fromCode(rule.getOpCode()).getSymbol(), 710 return String.format(BpmConditionOpCodeEnum.fromCode(rule.getOpCode()).getSymbol(),