Commit 0eb60e00da9d8a056f5baef2b81073b9d4f7107b
1 parent
3686ef82
!1519 条件节点添加包含和不包含操作符
Showing
5 changed files
with
9 additions
and
12 deletions
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(), |