Commit 9a4bb60a783d5c4f4f4bcaa2e09961ed525aec83

Authored by jason
1 parent 129e9868

【功能优化】 修改表单触发器增加条件设置

yudao-module-bpm/yudao-module-bpm-api/src/main/java/cn/iocoder/yudao/module/bpm/enums/definition/BpmTriggerTypeEnum.java
... ... @@ -17,7 +17,7 @@ import java.util.Arrays;
17 17 public enum BpmTriggerTypeEnum implements ArrayValuable<Integer> {
18 18  
19 19 HTTP_REQUEST(1, "发起 HTTP 请求"),
20   - UPDATE_NORMAL_FORM(2, "更新流程表单"); // TODO @jason:FORM_UPDATE
  20 + FORM_UPDATE(2, "更新流程表单");
21 21  
22 22 /**
23 23 * 触发器执行动作类型
... ... @@ -39,5 +39,4 @@ public enum BpmTriggerTypeEnum implements ArrayValuable&lt;Integer&gt; {
39 39 public static BpmTriggerTypeEnum typeOf(Integer type) {
40 40 return ArrayUtil.firstMatch(item -> item.getType().equals(type), values());
41 41 }
42   -
43 42 }
... ...
yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/definition/vo/model/simple/BpmSimpleModelNodeVO.java
... ... @@ -345,12 +345,10 @@ public class BpmSimpleModelNodeVO {
345 345 @Valid
346 346 private HttpRequestTriggerSetting httpRequestSetting;
347 347  
348   - // TODO @jason:这个要不直接叫 formSetting,更好理解一点哈
349   - // TODO @jason:如果搞成 List<NormalFormTriggerSetting>,是不是可以做条件组了?微信讨论哈
350 348 /**
351 349 * 流程表单触发器设置
352 350 */
353   - private NormalFormTriggerSetting normalFormSetting;
  351 + private List<FormTriggerSetting> formSettings;
354 352  
355 353 @Schema(description = "http 请求触发器设置", example = "{}")
356 354 @Data
... ... @@ -383,12 +381,20 @@ public class BpmSimpleModelNodeVO {
383 381  
384 382 @Schema(description = "流程表单触发器设置", example = "{}")
385 383 @Data
386   - public static class NormalFormTriggerSetting {
  384 + public static class FormTriggerSetting {
  385 +
  386 + @Schema(description = "条件类型", example = "1")
  387 + @InEnum(BpmSimpleModeConditionTypeEnum.class)
  388 + private Integer conditionType;
  389 +
  390 + @Schema(description = "条件表达式", example = "${day>3}")
  391 + private String conditionExpression;
  392 +
  393 + @Schema(description = "条件组", example = "{}")
  394 + private ConditionGroups conditionGroups;
387 395  
388 396 @Schema(description = "修改的表单字段", example = "userName")
389 397 private Map<String, Object> updateFormFields;
390   -
391 398 }
392   -
393 399 }
394 400 }
... ...
yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/framework/flowable/core/util/SimpleModelUtils.java
... ... @@ -724,8 +724,8 @@ public class SimpleModelUtils {
724 724 if (node.getTriggerSetting().getHttpRequestSetting() != null) {
725 725 addExtensionElementJson(serviceTask, TRIGGER_PARAM, node.getTriggerSetting().getHttpRequestSetting());
726 726 }
727   - if (node.getTriggerSetting().getNormalFormSetting() != null) {
728   - addExtensionElementJson(serviceTask, TRIGGER_PARAM, node.getTriggerSetting().getNormalFormSetting());
  727 + if (node.getTriggerSetting().getFormSettings() != null) {
  728 + addExtensionElementJson(serviceTask, TRIGGER_PARAM, node.getTriggerSetting().getFormSettings());
729 729 }
730 730 }
731 731 return serviceTask;
... ...
yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/task/trigger/BpmUpdateNormalFormTrigger.java renamed to yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/task/trigger/BpmFormUpdateTrigger.java
... ... @@ -2,14 +2,19 @@ package cn.iocoder.yudao.module.bpm.service.task.trigger;
2 2  
3 3 import cn.hutool.core.collection.CollUtil;
4 4 import cn.iocoder.yudao.framework.common.util.json.JsonUtils;
5   -import cn.iocoder.yudao.module.bpm.controller.admin.definition.vo.model.simple.BpmSimpleModelNodeVO.TriggerSetting.NormalFormTriggerSetting;
  5 +import cn.iocoder.yudao.module.bpm.controller.admin.definition.vo.model.simple.BpmSimpleModelNodeVO.TriggerSetting.FormTriggerSetting;
6 6 import cn.iocoder.yudao.module.bpm.enums.definition.BpmTriggerTypeEnum;
  7 +import cn.iocoder.yudao.module.bpm.framework.flowable.core.util.BpmnModelUtils;
  8 +import cn.iocoder.yudao.module.bpm.framework.flowable.core.util.SimpleModelUtils;
7 9 import cn.iocoder.yudao.module.bpm.service.task.BpmProcessInstanceService;
  10 +import com.fasterxml.jackson.core.type.TypeReference;
8 11 import jakarta.annotation.Resource;
9 12 import lombok.extern.slf4j.Slf4j;
10 13 import org.springframework.stereotype.Component;
11 14  
12   -// TODO @jason:改成 BpmFormUpdateTrigger
  15 +import java.util.List;
  16 +import java.util.Map;
  17 +
13 18 /**
14 19 * BPM 更新流程表单触发器
15 20 *
... ... @@ -17,28 +22,42 @@ import org.springframework.stereotype.Component;
17 22 */
18 23 @Component
19 24 @Slf4j
20   -public class BpmUpdateNormalFormTrigger implements BpmTrigger {
  25 +public class BpmFormUpdateTrigger implements BpmTrigger {
21 26  
22 27 @Resource
23 28 private BpmProcessInstanceService processInstanceService;
24 29  
25 30 @Override
26 31 public BpmTriggerTypeEnum getType() {
27   - return BpmTriggerTypeEnum.UPDATE_NORMAL_FORM;
  32 + return BpmTriggerTypeEnum.FORM_UPDATE;
28 33 }
29 34  
30 35 @Override
31 36 public void execute(String processInstanceId, String param) {
32 37 // 1. 解析更新流程表单配置
33   - NormalFormTriggerSetting setting = JsonUtils.parseObject(param, NormalFormTriggerSetting.class);
34   - if (setting == null) {
  38 + List<FormTriggerSetting> settings = JsonUtils.parseObject(param, new TypeReference<>() {});
  39 + if (CollUtil.isEmpty(settings)) {
35 40 log.error("[execute][流程({}) 更新流程表单触发器配置为空]", processInstanceId);
36 41 return;
37 42 }
38   - // 2.更新流程变量
39   - if (CollUtil.isNotEmpty(setting.getUpdateFormFields())) {
40   - processInstanceService.updateProcessInstanceVariables(processInstanceId, setting.getUpdateFormFields());
  43 +
  44 + // 2.获取流程变量
  45 + Map<String, Object> processVariables = processInstanceService.getProcessInstance(processInstanceId).getProcessVariables();
  46 +
  47 + // 3.更新流程变量
  48 + for (FormTriggerSetting setting : settings) {
  49 + if (CollUtil.isEmpty(setting.getUpdateFormFields())) {
  50 + continue;
  51 + }
  52 + boolean isFormUpdateNeeded = true;
  53 + if (setting.getConditionType() != null) { // 配置了条件,判断条件是否满足
  54 + String conditionExpression = SimpleModelUtils.buildConditionExpression(setting.getConditionType(), setting.getConditionExpression(),
  55 + setting.getConditionGroups());
  56 + isFormUpdateNeeded = BpmnModelUtils.evalConditionExpress(processVariables, conditionExpression);
  57 + }
  58 + if (isFormUpdateNeeded) {
  59 + processInstanceService.updateProcessInstanceVariables(processInstanceId, setting.getUpdateFormFields());
  60 + }
41 61 }
42 62 }
43   -
44 63 }
... ...