Commit c2db893fb898ccf0b66806cecfb7e20c60c91493

Authored by YunaiV
1 parent e3b86b3d

bpm 增加流程被通过、不通过时,发送短信通知

yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/convert/message/BpmMessageConvert.java
1 package cn.iocoder.yudao.adminserver.modules.bpm.convert.message; 1 package cn.iocoder.yudao.adminserver.modules.bpm.convert.message;
2 2
  3 +import cn.iocoder.yudao.adminserver.modules.bpm.service.message.dto.BpmMessageSendWhenProcessInstanceApproveReqDTO;
  4 +import cn.iocoder.yudao.adminserver.modules.bpm.service.message.dto.BpmMessageSendWhenProcessInstanceRejectReqDTO;
3 import cn.iocoder.yudao.adminserver.modules.bpm.service.message.dto.BpmMessageSendWhenTaskCreatedReqDTO; 5 import cn.iocoder.yudao.adminserver.modules.bpm.service.message.dto.BpmMessageSendWhenTaskCreatedReqDTO;
4 import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.user.SysUserDO; 6 import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.user.SysUserDO;
5 import org.activiti.api.task.model.Task; 7 import org.activiti.api.task.model.Task;
@@ -36,4 +38,20 @@ public interface BpmMessageConvert { @@ -36,4 +38,20 @@ public interface BpmMessageConvert {
36 }) 38 })
37 void copyTo(Task task, @MappingTarget BpmMessageSendWhenTaskCreatedReqDTO to); 39 void copyTo(Task task, @MappingTarget BpmMessageSendWhenTaskCreatedReqDTO to);
38 40
  41 + default BpmMessageSendWhenProcessInstanceRejectReqDTO convert(ProcessInstance processInstance, String comment) {
  42 + BpmMessageSendWhenProcessInstanceRejectReqDTO reqDTO = new BpmMessageSendWhenProcessInstanceRejectReqDTO();
  43 + copyTo(processInstance, reqDTO);
  44 + reqDTO.setComment(comment);
  45 + return reqDTO;
  46 + }
  47 + @Mapping(source = "name", target = "processInstanceName")
  48 + void copyTo(ProcessInstance from, @MappingTarget BpmMessageSendWhenProcessInstanceRejectReqDTO to);
  49 +
  50 + @Mappings({
  51 + @Mapping(source = "id", target = "processInstanceId"),
  52 + @Mapping(source = "name", target = "processInstanceName"),
  53 + @Mapping(source = "initiator", target = "startUserId")
  54 + })
  55 + BpmMessageSendWhenProcessInstanceApproveReqDTO convert(org.activiti.api.process.model.ProcessInstance processInstance);
  56 +
39 } 57 }
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/enums/message/BpmMessageEnum.java
@@ -13,6 +13,8 @@ import lombok.Getter; @@ -13,6 +13,8 @@ import lombok.Getter;
13 @Getter 13 @Getter
14 public enum BpmMessageEnum { 14 public enum BpmMessageEnum {
15 15
  16 + PROCESS_INSTANCE_APPROVE("bpm_process_instance_approve"), // 流程任务被审批通过时,发送给申请人
  17 + PROCESS_INSTANCE_REJECT("bpm_process_instance_reject"), // 流程任务被审批不通过时,发送给申请人
16 TASK_ASSIGNED("bpm_task_assigned"); // 任务被分配时,发送给审批人 18 TASK_ASSIGNED("bpm_task_assigned"); // 任务被分配时,发送给审批人
17 19
18 /** 20 /**
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/enums/task/BpmProcessInstanceDeleteReasonEnum.java
@@ -12,7 +12,7 @@ import lombok.Getter; @@ -12,7 +12,7 @@ import lombok.Getter;
12 @AllArgsConstructor 12 @AllArgsConstructor
13 public enum BpmProcessInstanceDeleteReasonEnum { 13 public enum BpmProcessInstanceDeleteReasonEnum {
14 14
15 - REJECT_TASK("驳回任务"); 15 + REJECT_TASK("不通过任务,原因:{}");
16 16
17 private final String reason; 17 private final String reason;
18 18
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/message/BpmMessageService.java
1 package cn.iocoder.yudao.adminserver.modules.bpm.service.message; 1 package cn.iocoder.yudao.adminserver.modules.bpm.service.message;
2 2
  3 +import cn.iocoder.yudao.adminserver.modules.bpm.service.message.dto.BpmMessageSendWhenProcessInstanceApproveReqDTO;
  4 +import cn.iocoder.yudao.adminserver.modules.bpm.service.message.dto.BpmMessageSendWhenProcessInstanceRejectReqDTO;
3 import cn.iocoder.yudao.adminserver.modules.bpm.service.message.dto.BpmMessageSendWhenTaskCreatedReqDTO; 5 import cn.iocoder.yudao.adminserver.modules.bpm.service.message.dto.BpmMessageSendWhenTaskCreatedReqDTO;
4 6
5 import javax.validation.Valid; 7 import javax.validation.Valid;
@@ -13,6 +15,26 @@ import javax.validation.Valid; @@ -13,6 +15,26 @@ import javax.validation.Valid;
13 */ 15 */
14 public interface BpmMessageService { 16 public interface BpmMessageService {
15 17
  18 + /**
  19 + * 发送流程实例被通过的消息
  20 + *
  21 + * @param reqDTO 发送信息
  22 + */
  23 + void sendMessageWhenProcessInstanceApprove(@Valid BpmMessageSendWhenProcessInstanceApproveReqDTO reqDTO);
  24 +
  25 +
  26 + /**
  27 + * 发送流程实例被不通过的消息
  28 + *
  29 + * @param reqDTO 发送信息
  30 + */
  31 + void sendMessageWhenProcessInstanceReject(@Valid BpmMessageSendWhenProcessInstanceRejectReqDTO reqDTO);
  32 +
  33 + /**
  34 + * 发送任务被分配的消息
  35 + *
  36 + * @param reqDTO 发送信息
  37 + */
16 void sendMessageWhenTaskAssigned(@Valid BpmMessageSendWhenTaskCreatedReqDTO reqDTO); 38 void sendMessageWhenTaskAssigned(@Valid BpmMessageSendWhenTaskCreatedReqDTO reqDTO);
17 39
18 } 40 }
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/message/dto/BpmMessageSendWhenProcessInstanceApproveReqDTO.java 0 → 100644
  1 +package cn.iocoder.yudao.adminserver.modules.bpm.service.message.dto;
  2 +
  3 +import lombok.Data;
  4 +
  5 +import javax.validation.constraints.NotEmpty;
  6 +import javax.validation.constraints.NotNull;
  7 +
  8 +/**
  9 + * BPM 发送流程实例被通过 Request DTO
  10 + */
  11 +@Data
  12 +public class BpmMessageSendWhenProcessInstanceApproveReqDTO {
  13 +
  14 + /**
  15 + * 流程实例的编号
  16 + */
  17 + @NotEmpty(message = "流程实例的编号不能为空")
  18 + private String processInstanceId;
  19 + /**
  20 + * 流程实例的名字
  21 + */
  22 + @NotEmpty(message = "流程实例的名字不能为空")
  23 + private String processInstanceName;
  24 + @NotNull(message = "发起人的用户编号")
  25 + private Long startUserId;
  26 +
  27 +}
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/message/dto/BpmMessageSendWhenProcessInstanceRejectReqDTO.java 0 → 100644
  1 +package cn.iocoder.yudao.adminserver.modules.bpm.service.message.dto;
  2 +
  3 +import lombok.Data;
  4 +
  5 +import javax.validation.constraints.NotEmpty;
  6 +import javax.validation.constraints.NotNull;
  7 +
  8 +/**
  9 + * BPM 发送流程实例被不通过 Request DTO
  10 + */
  11 +@Data
  12 +public class BpmMessageSendWhenProcessInstanceRejectReqDTO {
  13 +
  14 + /**
  15 + * 流程实例的编号
  16 + */
  17 + @NotEmpty(message = "流程实例的编号不能为空")
  18 + private String processInstanceId;
  19 + /**
  20 + * 流程实例的名字
  21 + */
  22 + @NotEmpty(message = "流程实例的名字不能为空")
  23 + private String processInstanceName;
  24 + @NotNull(message = "发起人的用户编号")
  25 + private Long startUserId;
  26 +
  27 + /**
  28 + * 不通过理由
  29 + */
  30 + @NotEmpty(message = "不通过理由不能为空")
  31 + private String comment;
  32 +
  33 +}
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/message/dto/BpmMessageSendWhenTaskCreatedReqDTO.java
@@ -6,7 +6,7 @@ import javax.validation.constraints.NotEmpty; @@ -6,7 +6,7 @@ import javax.validation.constraints.NotEmpty;
6 import javax.validation.constraints.NotNull; 6 import javax.validation.constraints.NotNull;
7 7
8 /** 8 /**
9 - * BPM 发送任务创建的 Request DTO 9 + * BPM 发送任务被分配 Request DTO
10 */ 10 */
11 @Data 11 @Data
12 public class BpmMessageSendWhenTaskCreatedReqDTO { 12 public class BpmMessageSendWhenTaskCreatedReqDTO {
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/message/impl/BpmMessageServiceImpl.java
@@ -2,6 +2,8 @@ package cn.iocoder.yudao.adminserver.modules.bpm.service.message.impl; @@ -2,6 +2,8 @@ package cn.iocoder.yudao.adminserver.modules.bpm.service.message.impl;
2 2
3 import cn.iocoder.yudao.adminserver.modules.bpm.enums.message.BpmMessageEnum; 3 import cn.iocoder.yudao.adminserver.modules.bpm.enums.message.BpmMessageEnum;
4 import cn.iocoder.yudao.adminserver.modules.bpm.service.message.BpmMessageService; 4 import cn.iocoder.yudao.adminserver.modules.bpm.service.message.BpmMessageService;
  5 +import cn.iocoder.yudao.adminserver.modules.bpm.service.message.dto.BpmMessageSendWhenProcessInstanceApproveReqDTO;
  6 +import cn.iocoder.yudao.adminserver.modules.bpm.service.message.dto.BpmMessageSendWhenProcessInstanceRejectReqDTO;
5 import cn.iocoder.yudao.adminserver.modules.bpm.service.message.dto.BpmMessageSendWhenTaskCreatedReqDTO; 7 import cn.iocoder.yudao.adminserver.modules.bpm.service.message.dto.BpmMessageSendWhenTaskCreatedReqDTO;
6 import cn.iocoder.yudao.coreservice.modules.system.service.sms.SysSmsCoreService; 8 import cn.iocoder.yudao.coreservice.modules.system.service.sms.SysSmsCoreService;
7 import lombok.extern.slf4j.Slf4j; 9 import lombok.extern.slf4j.Slf4j;
@@ -30,17 +32,36 @@ public class BpmMessageServiceImpl implements BpmMessageService { @@ -30,17 +32,36 @@ public class BpmMessageServiceImpl implements BpmMessageService {
30 private String adminUiUrl; 32 private String adminUiUrl;
31 33
32 @Override 34 @Override
  35 + public void sendMessageWhenProcessInstanceApprove(BpmMessageSendWhenProcessInstanceApproveReqDTO reqDTO) {
  36 + Map<String, Object> templateParams = new HashMap<>();
  37 + templateParams.put("processInstanceName", reqDTO.getProcessInstanceName());
  38 + templateParams.put("detailUrl", getProcessInstanceDetailUrl(reqDTO.getProcessInstanceId()));
  39 + smsCoreService.sendSingleSmsToAdmin(null, reqDTO.getStartUserId(),
  40 + BpmMessageEnum.PROCESS_INSTANCE_APPROVE.getSmsCode(), templateParams);
  41 + }
  42 +
  43 + @Override
  44 + public void sendMessageWhenProcessInstanceReject(BpmMessageSendWhenProcessInstanceRejectReqDTO reqDTO) {
  45 + Map<String, Object> templateParams = new HashMap<>();
  46 + templateParams.put("processInstanceName", reqDTO.getProcessInstanceName());
  47 + templateParams.put("comment", reqDTO.getComment());
  48 + templateParams.put("detailUrl", getProcessInstanceDetailUrl(reqDTO.getProcessInstanceId()));
  49 + smsCoreService.sendSingleSmsToAdmin(null, reqDTO.getStartUserId(),
  50 + BpmMessageEnum.PROCESS_INSTANCE_REJECT.getSmsCode(), templateParams);
  51 + }
  52 +
  53 + @Override
33 public void sendMessageWhenTaskAssigned(BpmMessageSendWhenTaskCreatedReqDTO reqDTO) { 54 public void sendMessageWhenTaskAssigned(BpmMessageSendWhenTaskCreatedReqDTO reqDTO) {
34 Map<String, Object> templateParams = new HashMap<>(); 55 Map<String, Object> templateParams = new HashMap<>();
35 templateParams.put("processInstanceName", reqDTO.getProcessInstanceName()); 56 templateParams.put("processInstanceName", reqDTO.getProcessInstanceName());
36 templateParams.put("taskName", reqDTO.getTaskName()); 57 templateParams.put("taskName", reqDTO.getTaskName());
37 templateParams.put("startUserNickname", reqDTO.getStartUserNickname()); 58 templateParams.put("startUserNickname", reqDTO.getStartUserNickname());
38 - templateParams.put("taskDetailUrl", getTaskDetailUrl(reqDTO.getTaskId())); 59 + templateParams.put("detailUrl", getProcessInstanceDetailUrl(reqDTO.getProcessInstanceId()));
39 smsCoreService.sendSingleSmsToAdmin(null, reqDTO.getAssigneeUserId(), 60 smsCoreService.sendSingleSmsToAdmin(null, reqDTO.getAssigneeUserId(),
40 BpmMessageEnum.TASK_ASSIGNED.getSmsCode(), templateParams); 61 BpmMessageEnum.TASK_ASSIGNED.getSmsCode(), templateParams);
41 } 62 }
42 63
43 - private String getTaskDetailUrl(String taskId) { 64 + private String getProcessInstanceDetailUrl(String taskId) {
44 return adminUiUrl + "bpm/process-instance/detail?id=" + taskId; 65 return adminUiUrl + "bpm/process-instance/detail?id=" + taskId;
45 } 66 }
46 67
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/task/BpmProcessInstanceService.java
@@ -47,15 +47,6 @@ public interface BpmProcessInstanceService { @@ -47,15 +47,6 @@ public interface BpmProcessInstanceService {
47 void deleteProcessInstance(String id, String reason); 47 void deleteProcessInstance(String id, String reason);
48 48
49 /** 49 /**
50 - * 更新流程实例的结果  
51 - * 1. 如果更新为已拒绝时,会进行任务的删除  
52 - *  
53 - * @param id 流程编号  
54 - * @param result 结果,{@link BpmProcessInstanceResultEnum}  
55 - */  
56 - void updateProcessInstanceResult(String id, Integer result);  
57 -  
58 - /**  
59 * 获得流程实例的分页 50 * 获得流程实例的分页
60 * 51 *
61 * @param userId 用户编号 52 * @param userId 用户编号
@@ -153,4 +144,12 @@ public interface BpmProcessInstanceService { @@ -153,4 +144,12 @@ public interface BpmProcessInstanceService {
153 */ 144 */
154 void updateProcessInstanceExtComplete(org.activiti.api.process.model.ProcessInstance instance); 145 void updateProcessInstanceExtComplete(org.activiti.api.process.model.ProcessInstance instance);
155 146
  147 + /**
  148 + * 更新 ProcessInstance 拓展记录为不通过
  149 + *
  150 + * @param id 流程编号
  151 + * @param comment 理由。例如说,审批不通过时,需要传递该值
  152 + */
  153 + void updateProcessInstanceExtReject(String id, String comment);
  154 +
156 } 155 }
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/task/impl/BpmProcessInstanceServiceImpl.java
@@ -2,9 +2,9 @@ package cn.iocoder.yudao.adminserver.modules.bpm.service.task.impl; @@ -2,9 +2,9 @@ package cn.iocoder.yudao.adminserver.modules.bpm.service.task.impl;
2 2
3 import cn.hutool.core.collection.CollUtil; 3 import cn.hutool.core.collection.CollUtil;
4 import cn.hutool.core.lang.Assert; 4 import cn.hutool.core.lang.Assert;
5 -import cn.hutool.core.util.NumberUtil;  
6 import cn.hutool.core.util.StrUtil; 5 import cn.hutool.core.util.StrUtil;
7 import cn.iocoder.yudao.adminserver.modules.bpm.controller.task.vo.instance.*; 6 import cn.iocoder.yudao.adminserver.modules.bpm.controller.task.vo.instance.*;
  7 +import cn.iocoder.yudao.adminserver.modules.bpm.convert.message.BpmMessageConvert;
8 import cn.iocoder.yudao.adminserver.modules.bpm.convert.task.BpmProcessInstanceConvert; 8 import cn.iocoder.yudao.adminserver.modules.bpm.convert.task.BpmProcessInstanceConvert;
9 import cn.iocoder.yudao.adminserver.modules.bpm.dal.dataobject.definition.BpmProcessDefinitionExtDO; 9 import cn.iocoder.yudao.adminserver.modules.bpm.dal.dataobject.definition.BpmProcessDefinitionExtDO;
10 import cn.iocoder.yudao.adminserver.modules.bpm.dal.dataobject.task.BpmProcessInstanceExtDO; 10 import cn.iocoder.yudao.adminserver.modules.bpm.dal.dataobject.task.BpmProcessInstanceExtDO;
@@ -13,6 +13,7 @@ import cn.iocoder.yudao.adminserver.modules.bpm.enums.task.BpmProcessInstanceDel @@ -13,6 +13,7 @@ import cn.iocoder.yudao.adminserver.modules.bpm.enums.task.BpmProcessInstanceDel
13 import cn.iocoder.yudao.adminserver.modules.bpm.enums.task.BpmProcessInstanceResultEnum; 13 import cn.iocoder.yudao.adminserver.modules.bpm.enums.task.BpmProcessInstanceResultEnum;
14 import cn.iocoder.yudao.adminserver.modules.bpm.enums.task.BpmProcessInstanceStatusEnum; 14 import cn.iocoder.yudao.adminserver.modules.bpm.enums.task.BpmProcessInstanceStatusEnum;
15 import cn.iocoder.yudao.adminserver.modules.bpm.service.definition.BpmProcessDefinitionService; 15 import cn.iocoder.yudao.adminserver.modules.bpm.service.definition.BpmProcessDefinitionService;
  16 +import cn.iocoder.yudao.adminserver.modules.bpm.service.message.BpmMessageService;
16 import cn.iocoder.yudao.adminserver.modules.bpm.service.task.BpmProcessInstanceService; 17 import cn.iocoder.yudao.adminserver.modules.bpm.service.task.BpmProcessInstanceService;
17 import cn.iocoder.yudao.adminserver.modules.bpm.service.task.BpmTaskService; 18 import cn.iocoder.yudao.adminserver.modules.bpm.service.task.BpmTaskService;
18 import cn.iocoder.yudao.adminserver.modules.system.dal.dataobject.dept.SysDeptDO; 19 import cn.iocoder.yudao.adminserver.modules.system.dal.dataobject.dept.SysDeptDO;
@@ -28,7 +29,6 @@ import org.activiti.engine.history.HistoricProcessInstance; @@ -28,7 +29,6 @@ import org.activiti.engine.history.HistoricProcessInstance;
28 import org.activiti.engine.repository.ProcessDefinition; 29 import org.activiti.engine.repository.ProcessDefinition;
29 import org.activiti.engine.runtime.ProcessInstance; 30 import org.activiti.engine.runtime.ProcessInstance;
30 import org.activiti.engine.task.Task; 31 import org.activiti.engine.task.Task;
31 -import org.mapstruct.ap.shaded.freemarker.template.utility.StringUtil;  
32 import org.springframework.context.annotation.Lazy; 32 import org.springframework.context.annotation.Lazy;
33 import org.springframework.stereotype.Service; 33 import org.springframework.stereotype.Service;
34 import org.springframework.transaction.annotation.Transactional; 34 import org.springframework.transaction.annotation.Transactional;
@@ -72,6 +72,8 @@ public class BpmProcessInstanceServiceImpl implements BpmProcessInstanceService @@ -72,6 +72,8 @@ public class BpmProcessInstanceServiceImpl implements BpmProcessInstanceService
72 private BpmTaskService taskService; 72 private BpmTaskService taskService;
73 @Resource 73 @Resource
74 private BpmProcessDefinitionService processDefinitionService; 74 private BpmProcessDefinitionService processDefinitionService;
  75 + @Resource
  76 + private BpmMessageService messageService;
75 77
76 @Resource 78 @Resource
77 private BpmProcessInstanceExtMapper processInstanceExtMapper; 79 private BpmProcessInstanceExtMapper processInstanceExtMapper;
@@ -133,18 +135,6 @@ public class BpmProcessInstanceServiceImpl implements BpmProcessInstanceService @@ -133,18 +135,6 @@ public class BpmProcessInstanceServiceImpl implements BpmProcessInstanceService
133 } 135 }
134 136
135 @Override 137 @Override
136 - @Transactional(rollbackFor = Exception.class)  
137 - public void updateProcessInstanceResult(String id, Integer result) {  
138 - // 删除流程实例,以实现驳回任务时,取消整个审批流程  
139 - if (Objects.equals(result, BpmProcessInstanceResultEnum.REJECT.getResult())) {  
140 - deleteProcessInstance(id, BpmProcessInstanceDeleteReasonEnum.REJECT_TASK.getReason());  
141 - }  
142 - // 更新 status + result  
143 - processInstanceExtMapper.updateByProcessInstanceId(new BpmProcessInstanceExtDO().setProcessInstanceId(id)  
144 - .setStatus(BpmProcessInstanceStatusEnum.FINISH.getStatus()).setResult(result));  
145 - }  
146 -  
147 - @Override  
148 public PageResult<BpmProcessInstancePageItemRespVO> getMyProcessInstancePage(Long userId, 138 public PageResult<BpmProcessInstancePageItemRespVO> getMyProcessInstancePage(Long userId,
149 BpmProcessInstanceMyPageReqVO pageReqVO) { 139 BpmProcessInstanceMyPageReqVO pageReqVO) {
150 // 通过 BpmProcessInstanceExtDO 表,先查询到对应的分页 140 // 通过 BpmProcessInstanceExtDO 表,先查询到对应的分页
@@ -251,6 +241,26 @@ public class BpmProcessInstanceServiceImpl implements BpmProcessInstanceService @@ -251,6 +241,26 @@ public class BpmProcessInstanceServiceImpl implements BpmProcessInstanceService
251 .setStatus(BpmProcessInstanceStatusEnum.FINISH.getStatus()) 241 .setStatus(BpmProcessInstanceStatusEnum.FINISH.getStatus())
252 .setResult(BpmProcessInstanceResultEnum.APPROVE.getResult()); // 如果正常完全,说明审批通过 242 .setResult(BpmProcessInstanceResultEnum.APPROVE.getResult()); // 如果正常完全,说明审批通过
253 processInstanceExtMapper.updateByProcessInstanceId(instanceExtDO); 243 processInstanceExtMapper.updateByProcessInstanceId(instanceExtDO);
  244 +
  245 + // 发送流程被通过的消息
  246 + messageService.sendMessageWhenProcessInstanceApprove(BpmMessageConvert.INSTANCE.convert(instance));
  247 + }
  248 +
  249 + @Transactional(rollbackFor = Exception.class)
  250 + public void updateProcessInstanceExtReject(String id, String comment) {
  251 + ProcessInstance processInstance = getProcessInstance(id);
  252 + // 删除流程实例,以实现驳回任务时,取消整个审批流程
  253 + deleteProcessInstance(id, StrUtil.format(BpmProcessInstanceDeleteReasonEnum.REJECT_TASK.getReason(), comment));
  254 +
  255 + // 更新 status + result
  256 + // 注意,不能和上面的逻辑更换位置。因为 deleteProcessInstance 会触发流程的取消,进而调用 updateProcessInstanceExtCancel 方法,
  257 + // 设置 result 为 BpmProcessInstanceStatusEnum.CANCEL,显然和 result 不一定是一致的
  258 + processInstanceExtMapper.updateByProcessInstanceId(new BpmProcessInstanceExtDO().setProcessInstanceId(id)
  259 + .setStatus(BpmProcessInstanceStatusEnum.FINISH.getStatus())
  260 + .setResult(BpmProcessInstanceResultEnum.REJECT.getResult()));
  261 +
  262 + // 发送流程被不通过的消息
  263 + messageService.sendMessageWhenProcessInstanceReject(BpmMessageConvert.INSTANCE.convert(processInstance, comment));
254 } 264 }
255 265
256 } 266 }
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/task/impl/BpmTaskServiceImpl.java
1 package cn.iocoder.yudao.adminserver.modules.bpm.service.task.impl; 1 package cn.iocoder.yudao.adminserver.modules.bpm.service.task.impl;
2 2
3 import cn.hutool.core.collection.CollUtil; 3 import cn.hutool.core.collection.CollUtil;
4 -import cn.hutool.core.thread.ThreadUtil;  
5 import cn.hutool.core.util.StrUtil; 4 import cn.hutool.core.util.StrUtil;
6 import cn.iocoder.yudao.adminserver.modules.bpm.controller.task.vo.task.*; 5 import cn.iocoder.yudao.adminserver.modules.bpm.controller.task.vo.task.*;
7 import cn.iocoder.yudao.adminserver.modules.bpm.convert.message.BpmMessageConvert; 6 import cn.iocoder.yudao.adminserver.modules.bpm.convert.message.BpmMessageConvert;
@@ -38,7 +37,6 @@ import org.springframework.transaction.support.TransactionSynchronizationManager @@ -38,7 +37,6 @@ import org.springframework.transaction.support.TransactionSynchronizationManager
38 import javax.annotation.Resource; 37 import javax.annotation.Resource;
39 import javax.validation.Valid; 38 import javax.validation.Valid;
40 import java.util.*; 39 import java.util.*;
41 -import java.util.concurrent.TimeUnit;  
42 40
43 import static cn.iocoder.yudao.adminserver.modules.bpm.enums.BpmErrorCodeConstants.*; 41 import static cn.iocoder.yudao.adminserver.modules.bpm.enums.BpmErrorCodeConstants.*;
44 import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; 42 import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
@@ -254,8 +252,7 @@ public class BpmTaskServiceImpl implements BpmTaskService { @@ -254,8 +252,7 @@ public class BpmTaskServiceImpl implements BpmTaskService {
254 } 252 }
255 253
256 // 更新流程实例为不通过 254 // 更新流程实例为不通过
257 - processInstanceService.updateProcessInstanceResult(instance.getProcessInstanceId(),  
258 - BpmProcessInstanceResultEnum.REJECT.getResult()); 255 + processInstanceService.updateProcessInstanceExtReject(instance.getProcessInstanceId(), reqVO.getComment());
259 256
260 // 更新任务拓展表为不通过 257 // 更新任务拓展表为不通过
261 taskExtMapper.updateByTaskId(new BpmTaskExtDO().setTaskId(task.getId()) 258 taskExtMapper.updateByTaskId(new BpmTaskExtDO().setTaskId(task.getId())