Commit cbdc081cfe348bae4728eab704b96eb30d21617d
1 parent
009f1889
【功能优化】 删除表单数据触发器
Showing
5 changed files
with
106 additions
and
17 deletions
yudao-module-bpm/yudao-module-bpm-api/src/main/java/cn/iocoder/yudao/module/bpm/enums/definition/BpmTriggerTypeEnum.java
| @@ -17,7 +17,8 @@ import java.util.Arrays; | @@ -17,7 +17,8 @@ import java.util.Arrays; | ||
| 17 | public enum BpmTriggerTypeEnum implements ArrayValuable<Integer> { | 17 | public enum BpmTriggerTypeEnum implements ArrayValuable<Integer> { |
| 18 | 18 | ||
| 19 | HTTP_REQUEST(1, "发起 HTTP 请求"), | 19 | HTTP_REQUEST(1, "发起 HTTP 请求"), |
| 20 | - FORM_UPDATE(2, "更新流程表单"); | 20 | + FORM_UPDATE(2, "更新流程表单数据"), |
| 21 | + FORM_DELETE(3, "删除流程表单数据"); | ||
| 21 | 22 | ||
| 22 | /** | 23 | /** |
| 23 | * 触发器执行动作类型 | 24 | * 触发器执行动作类型 |
yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/definition/vo/model/simple/BpmSimpleModelNodeVO.java
| @@ -14,6 +14,7 @@ import org.hibernate.validator.constraints.URL; | @@ -14,6 +14,7 @@ import org.hibernate.validator.constraints.URL; | ||
| 14 | 14 | ||
| 15 | import java.util.List; | 15 | import java.util.List; |
| 16 | import java.util.Map; | 16 | import java.util.Map; |
| 17 | +import java.util.Set; | ||
| 17 | 18 | ||
| 18 | @Schema(description = "管理后台 - 仿钉钉流程设计模型节点 VO") | 19 | @Schema(description = "管理后台 - 仿钉钉流程设计模型节点 VO") |
| 19 | @Data | 20 | @Data |
| @@ -393,8 +394,11 @@ public class BpmSimpleModelNodeVO { | @@ -393,8 +394,11 @@ public class BpmSimpleModelNodeVO { | ||
| 393 | @Schema(description = "条件组", example = "{}") | 394 | @Schema(description = "条件组", example = "{}") |
| 394 | private ConditionGroups conditionGroups; | 395 | private ConditionGroups conditionGroups; |
| 395 | 396 | ||
| 396 | - @Schema(description = "修改的表单字段", example = "userName") | 397 | + @Schema(description = "修改的表单字段", example = "{}") |
| 397 | private Map<String, Object> updateFormFields; | 398 | private Map<String, Object> updateFormFields; |
| 399 | + | ||
| 400 | + @Schema(description = "删除表单字段", example = "[]") | ||
| 401 | + private Set<String> deleteFields; | ||
| 398 | } | 402 | } |
| 399 | } | 403 | } |
| 400 | } | 404 | } |
yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/task/BpmProcessInstanceService.java
| @@ -7,6 +7,7 @@ import jakarta.validation.Valid; | @@ -7,6 +7,7 @@ import jakarta.validation.Valid; | ||
| 7 | import org.flowable.engine.history.HistoricProcessInstance; | 7 | import org.flowable.engine.history.HistoricProcessInstance; |
| 8 | import org.flowable.engine.runtime.ProcessInstance; | 8 | import org.flowable.engine.runtime.ProcessInstance; |
| 9 | 9 | ||
| 10 | +import java.util.Collection; | ||
| 10 | import java.util.List; | 11 | import java.util.List; |
| 11 | import java.util.Map; | 12 | import java.util.Map; |
| 12 | import java.util.Set; | 13 | import java.util.Set; |
| @@ -148,15 +149,6 @@ public interface BpmProcessInstanceService { | @@ -148,15 +149,6 @@ public interface BpmProcessInstanceService { | ||
| 148 | */ | 149 | */ |
| 149 | void updateProcessInstanceReject(ProcessInstance processInstance, String reason); | 150 | void updateProcessInstanceReject(ProcessInstance processInstance, String reason); |
| 150 | 151 | ||
| 151 | - // ========== Event 事件相关方法 ========== | ||
| 152 | - | ||
| 153 | - /** | ||
| 154 | - * 处理 ProcessInstance 完成事件,例如说:审批通过、不通过、取消 | ||
| 155 | - * | ||
| 156 | - * @param instance 流程任务 | ||
| 157 | - */ | ||
| 158 | - void processProcessInstanceCompleted(ProcessInstance instance); | ||
| 159 | - | ||
| 160 | /** | 152 | /** |
| 161 | * 更新 ProcessInstance 的变量 | 153 | * 更新 ProcessInstance 的变量 |
| 162 | * | 154 | * |
| @@ -165,4 +157,20 @@ public interface BpmProcessInstanceService { | @@ -165,4 +157,20 @@ public interface BpmProcessInstanceService { | ||
| 165 | */ | 157 | */ |
| 166 | void updateProcessInstanceVariables(String id, Map<String, Object> variables); | 158 | void updateProcessInstanceVariables(String id, Map<String, Object> variables); |
| 167 | 159 | ||
| 160 | + /** | ||
| 161 | + * 删除 ProcessInstance 的变量 | ||
| 162 | + * | ||
| 163 | + * @param processInstanceId 流程编号 | ||
| 164 | + * @param variableNames 流程变量名 | ||
| 165 | + */ | ||
| 166 | + void removeProcessInstanceVariables(String processInstanceId, Collection<String> variableNames); | ||
| 167 | + | ||
| 168 | + // ========== Event 事件相关方法 ========== | ||
| 169 | + | ||
| 170 | + /** | ||
| 171 | + * 处理 ProcessInstance 完成事件,例如说:审批通过、不通过、取消 | ||
| 172 | + * | ||
| 173 | + * @param instance 流程任务 | ||
| 174 | + */ | ||
| 175 | + void processProcessInstanceCompleted(ProcessInstance instance); | ||
| 168 | } | 176 | } |
yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/task/BpmProcessInstanceServiceImpl.java
| @@ -776,6 +776,16 @@ public class BpmProcessInstanceServiceImpl implements BpmProcessInstanceService | @@ -776,6 +776,16 @@ public class BpmProcessInstanceServiceImpl implements BpmProcessInstanceService | ||
| 776 | BpmReasonEnum.REJECT_TASK.format(reason)); | 776 | BpmReasonEnum.REJECT_TASK.format(reason)); |
| 777 | } | 777 | } |
| 778 | 778 | ||
| 779 | + @Override | ||
| 780 | + public void updateProcessInstanceVariables(String id, Map<String, Object> variables) { | ||
| 781 | + runtimeService.setVariables(id, variables); | ||
| 782 | + } | ||
| 783 | + | ||
| 784 | + @Override | ||
| 785 | + public void removeProcessInstanceVariables(String processInstanceId, Collection<String> variableNames) { | ||
| 786 | + runtimeService.removeVariables(processInstanceId, variableNames); | ||
| 787 | + } | ||
| 788 | + | ||
| 779 | // ========== Event 事件相关方法 ========== | 789 | // ========== Event 事件相关方法 ========== |
| 780 | 790 | ||
| 781 | @Override | 791 | @Override |
| @@ -809,10 +819,4 @@ public class BpmProcessInstanceServiceImpl implements BpmProcessInstanceService | @@ -809,10 +819,4 @@ public class BpmProcessInstanceServiceImpl implements BpmProcessInstanceService | ||
| 809 | BpmProcessInstanceConvert.INSTANCE.buildProcessInstanceStatusEvent(this, instance, status)); | 819 | BpmProcessInstanceConvert.INSTANCE.buildProcessInstanceStatusEvent(this, instance, status)); |
| 810 | }); | 820 | }); |
| 811 | } | 821 | } |
| 812 | - | ||
| 813 | - @Override | ||
| 814 | - public void updateProcessInstanceVariables(String id, Map<String, Object> variables) { | ||
| 815 | - runtimeService.setVariables(id, variables); | ||
| 816 | - } | ||
| 817 | - | ||
| 818 | } | 822 | } |
yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/task/trigger/BpmFormDeleteTrigger.java
0 → 100644
| 1 | +package cn.iocoder.yudao.module.bpm.service.task.trigger; | ||
| 2 | + | ||
| 3 | +import cn.hutool.core.collection.CollUtil; | ||
| 4 | +import cn.iocoder.yudao.framework.common.util.json.JsonUtils; | ||
| 5 | +import cn.iocoder.yudao.module.bpm.controller.admin.definition.vo.model.simple.BpmSimpleModelNodeVO; | ||
| 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; | ||
| 9 | +import cn.iocoder.yudao.module.bpm.service.task.BpmProcessInstanceService; | ||
| 10 | +import com.fasterxml.jackson.core.type.TypeReference; | ||
| 11 | +import jakarta.annotation.Resource; | ||
| 12 | +import lombok.extern.slf4j.Slf4j; | ||
| 13 | +import org.springframework.stereotype.Component; | ||
| 14 | + | ||
| 15 | +import java.util.HashSet; | ||
| 16 | +import java.util.List; | ||
| 17 | +import java.util.Map; | ||
| 18 | +import java.util.Set; | ||
| 19 | + | ||
| 20 | +/** | ||
| 21 | + * BPM 删除流程表单数据触发器 | ||
| 22 | + * | ||
| 23 | + * @author jason | ||
| 24 | + */ | ||
| 25 | +@Component | ||
| 26 | +@Slf4j | ||
| 27 | +public class BpmFormDeleteTrigger implements BpmTrigger { | ||
| 28 | + | ||
| 29 | + @Resource | ||
| 30 | + private BpmProcessInstanceService processInstanceService; | ||
| 31 | + | ||
| 32 | + @Override | ||
| 33 | + public BpmTriggerTypeEnum getType() { | ||
| 34 | + return BpmTriggerTypeEnum.FORM_DELETE; | ||
| 35 | + } | ||
| 36 | + | ||
| 37 | + @Override | ||
| 38 | + public void execute(String processInstanceId, String param) { | ||
| 39 | + // 1. 解析删除流程表单数据配置 | ||
| 40 | + List<BpmSimpleModelNodeVO.TriggerSetting.FormTriggerSetting> settings = JsonUtils.parseObject(param, new TypeReference<>() {}); | ||
| 41 | + if (CollUtil.isEmpty(settings)) { | ||
| 42 | + log.error("[execute][流程({}) 删除流程表单数据触发器配置为空]", processInstanceId); | ||
| 43 | + return; | ||
| 44 | + } | ||
| 45 | + | ||
| 46 | + // 2.获取流程变量 | ||
| 47 | + Map<String, Object> processVariables = processInstanceService.getProcessInstance(processInstanceId).getProcessVariables(); | ||
| 48 | + | ||
| 49 | + // 3.获取需要删除的表单字段 | ||
| 50 | + Set<String> deleteFields = new HashSet<>(); | ||
| 51 | + settings.forEach(setting -> { | ||
| 52 | + if (CollUtil.isEmpty(setting.getDeleteFields())) { | ||
| 53 | + return; | ||
| 54 | + } | ||
| 55 | + // 配置了条件,判断条件是否满足 | ||
| 56 | + boolean isFieldDeletedNeeded = true; | ||
| 57 | + if (setting.getConditionType() != null) { | ||
| 58 | + String conditionExpression = SimpleModelUtils.buildConditionExpression( | ||
| 59 | + setting.getConditionType(), setting.getConditionExpression(), setting.getConditionGroups()); | ||
| 60 | + isFieldDeletedNeeded = BpmnModelUtils.evalConditionExpress(processVariables, conditionExpression); | ||
| 61 | + } | ||
| 62 | + if (isFieldDeletedNeeded) { | ||
| 63 | + deleteFields.addAll(setting.getDeleteFields()); | ||
| 64 | + } | ||
| 65 | + }); | ||
| 66 | + | ||
| 67 | + // 4. 删除流程变量 | ||
| 68 | + if (CollUtil.isNotEmpty(deleteFields)) { | ||
| 69 | + processInstanceService.removeProcessInstanceVariables(processInstanceId, deleteFields); | ||
| 70 | + } | ||
| 71 | + } | ||
| 72 | +} |