Commit 7c62b1a21186ce24996a11a87b890ceed8feb663

Authored by YunaiV
1 parent 54e7c10a

修改 bpm 流程不通过的 Listener 的逻辑

yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/enums/task/BpmProcessInstanceDeleteReasonEnum.java
1 package cn.iocoder.yudao.adminserver.modules.bpm.enums.task; 1 package cn.iocoder.yudao.adminserver.modules.bpm.enums.task;
2 2
  3 +import cn.hutool.core.util.StrUtil;
3 import lombok.AllArgsConstructor; 4 import lombok.AllArgsConstructor;
4 import lombok.Getter; 5 import lombok.Getter;
5 6
@@ -12,8 +13,24 @@ import lombok.Getter; @@ -12,8 +13,24 @@ import lombok.Getter;
12 @AllArgsConstructor 13 @AllArgsConstructor
13 public enum BpmProcessInstanceDeleteReasonEnum { 14 public enum BpmProcessInstanceDeleteReasonEnum {
14 15
15 - REJECT_TASK("不通过任务,原因:{}"); 16 + REJECT_TASK("不通过任务,原因:{}"); // 修改文案时,需要注意 isRejectReason 方法
16 17
17 private final String reason; 18 private final String reason;
18 19
  20 + /**
  21 + * 格式化理由
  22 + *
  23 + * @param args 参数
  24 + * @return 理由
  25 + */
  26 + public String format(Object... args) {
  27 + return StrUtil.format(reason, args);
  28 + }
  29 +
  30 + // ========== 逻辑 ==========
  31 +
  32 + public static boolean isRejectReason(String reason) {
  33 + return StrUtil.startWith(reason, "不通过任务,原因:");
  34 + }
  35 +
19 } 36 }
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/listener/BpmProcessInstanceEventListener.java
@@ -5,6 +5,7 @@ import cn.iocoder.yudao.adminserver.modules.bpm.service.task.BpmProcessInstanceS @@ -5,6 +5,7 @@ import cn.iocoder.yudao.adminserver.modules.bpm.service.task.BpmProcessInstanceS
5 import org.activiti.api.model.shared.event.RuntimeEvent; 5 import org.activiti.api.model.shared.event.RuntimeEvent;
6 import org.activiti.api.process.model.ProcessInstance; 6 import org.activiti.api.process.model.ProcessInstance;
7 import org.activiti.api.process.model.events.ProcessRuntimeEvent; 7 import org.activiti.api.process.model.events.ProcessRuntimeEvent;
  8 +import org.activiti.api.process.runtime.events.ProcessCancelledEvent;
8 import org.activiti.api.process.runtime.events.listener.ProcessEventListener; 9 import org.activiti.api.process.runtime.events.listener.ProcessEventListener;
9 import org.activiti.api.process.runtime.events.listener.ProcessRuntimeEventListener; 10 import org.activiti.api.process.runtime.events.listener.ProcessRuntimeEventListener;
10 import org.activiti.api.task.model.events.TaskRuntimeEvent; 11 import org.activiti.api.task.model.events.TaskRuntimeEvent;
@@ -42,7 +43,8 @@ public class BpmProcessInstanceEventListener<T extends RuntimeEvent<?, ?>> @@ -42,7 +43,8 @@ public class BpmProcessInstanceEventListener<T extends RuntimeEvent<?, ?>>
42 } 43 }
43 // 取消时,更新拓展表为取消 44 // 取消时,更新拓展表为取消
44 if (event.getEventType() == ProcessRuntimeEvent.ProcessEvents.PROCESS_CANCELLED) { 45 if (event.getEventType() == ProcessRuntimeEvent.ProcessEvents.PROCESS_CANCELLED) {
45 - processInstanceService.updateProcessInstanceExtCancel(event.getEntity()); 46 + processInstanceService.updateProcessInstanceExtCancel(event.getEntity(),
  47 + ((ProcessCancelledEvent) event).getCause());
46 return; 48 return;
47 } 49 }
48 // 完成时,更新拓展表为已完成 50 // 完成时,更新拓展表为已完成
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/task/BpmProcessInstanceService.java
@@ -144,13 +144,15 @@ public interface BpmProcessInstanceService { @@ -144,13 +144,15 @@ public interface BpmProcessInstanceService {
144 * 更新 ProcessInstance 拓展记录为取消 144 * 更新 ProcessInstance 拓展记录为取消
145 * 145 *
146 * @param instance 流程任务 146 * @param instance 流程任务
  147 + * @param reason 取消原因
147 */ 148 */
148 - void updateProcessInstanceExtCancel(org.activiti.api.process.model.ProcessInstance instance); 149 + void updateProcessInstanceExtCancel(org.activiti.api.process.model.ProcessInstance instance, String reason);
149 150
150 /** 151 /**
151 * 更新 ProcessInstance 拓展记录为完成 152 * 更新 ProcessInstance 拓展记录为完成
152 * 153 *
153 * @param instance 流程任务 154 * @param instance 流程任务
  155 + * @param reason 原因
154 */ 156 */
155 void updateProcessInstanceExtComplete(org.activiti.api.process.model.ProcessInstance instance); 157 void updateProcessInstanceExtComplete(org.activiti.api.process.model.ProcessInstance instance);
156 158
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/task/impl/BpmProcessInstanceServiceImpl.java
@@ -241,7 +241,13 @@ public class BpmProcessInstanceServiceImpl implements BpmProcessInstanceService @@ -241,7 +241,13 @@ public class BpmProcessInstanceServiceImpl implements BpmProcessInstanceService
241 } 241 }
242 242
243 @Override 243 @Override
244 - public void updateProcessInstanceExtCancel(org.activiti.api.process.model.ProcessInstance instance) { 244 + public void updateProcessInstanceExtCancel(org.activiti.api.process.model.ProcessInstance instance, String reason) {
  245 + // 判断是否为 Reject 不通过。如果是,则不进行更新
  246 + if (BpmProcessInstanceDeleteReasonEnum.isRejectReason(reason)) {
  247 + return;
  248 + }
  249 +
  250 + // 更新拓展表
245 BpmProcessInstanceExtDO instanceExtDO = BpmProcessInstanceConvert.INSTANCE.convert(instance) 251 BpmProcessInstanceExtDO instanceExtDO = BpmProcessInstanceConvert.INSTANCE.convert(instance)
246 .setEndTime(new Date()) // 由于 ProcessInstance 里没有办法拿到 endTime,所以这里设置 252 .setEndTime(new Date()) // 由于 ProcessInstance 里没有办法拿到 endTime,所以这里设置
247 .setStatus(BpmProcessInstanceStatusEnum.FINISH.getStatus()) 253 .setStatus(BpmProcessInstanceStatusEnum.FINISH.getStatus())
@@ -265,7 +271,7 @@ public class BpmProcessInstanceServiceImpl implements BpmProcessInstanceService @@ -265,7 +271,7 @@ public class BpmProcessInstanceServiceImpl implements BpmProcessInstanceService
265 public void updateProcessInstanceExtReject(String id, String comment) { 271 public void updateProcessInstanceExtReject(String id, String comment) {
266 ProcessInstance processInstance = getProcessInstance(id); 272 ProcessInstance processInstance = getProcessInstance(id);
267 // 删除流程实例,以实现驳回任务时,取消整个审批流程 273 // 删除流程实例,以实现驳回任务时,取消整个审批流程
268 - deleteProcessInstance(id, StrUtil.format(BpmProcessInstanceDeleteReasonEnum.REJECT_TASK.getReason(), comment)); 274 + deleteProcessInstance(id, StrUtil.format(BpmProcessInstanceDeleteReasonEnum.REJECT_TASK.format(comment)));
269 275
270 // 更新 status + result 276 // 更新 status + result
271 // 注意,不能和上面的逻辑更换位置。因为 deleteProcessInstance 会触发流程的取消,进而调用 updateProcessInstanceExtCancel 方法, 277 // 注意,不能和上面的逻辑更换位置。因为 deleteProcessInstance 会触发流程的取消,进而调用 updateProcessInstanceExtCancel 方法,