Commit 9a4bb60a783d5c4f4f4bcaa2e09961ed525aec83
1 parent
129e9868
【功能优化】 修改表单触发器增加条件设置
Showing
4 changed files
with
44 additions
and
20 deletions
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<Integer> { |
| 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 | } | ... | ... |