Commit c4688d887ca4c10a8a2fbb6b5c4acde59b026c32

Authored by YunaiV
1 parent ba502fc5

BPM:增加 task 的审批建议

yudao-module-bpm/yudao-module-bpm-api/src/main/java/cn/iocoder/yudao/module/bpm/enums/task/BpmCommentTypeEnum.java
@@ -15,7 +15,7 @@ public enum BpmCommentTypeEnum { @@ -15,7 +15,7 @@ public enum BpmCommentTypeEnum {
15 APPROVE("1", "审批通过", ""), // 理由:直接使用用户的评论 15 APPROVE("1", "审批通过", ""), // 理由:直接使用用户的评论
16 REJECT("2", "不通过", ""), 16 REJECT("2", "不通过", ""),
17 CANCEL("3", "已取消", ""), 17 CANCEL("3", "已取消", ""),
18 - BACK("4", "退回", ""), 18 + BACK("4", "退回", ""), // 理由:直接使用用户的评论
19 DELEGATE("5", "委派", ""), 19 DELEGATE("5", "委派", ""),
20 ADD_SIGN("6", "加签", "[{}]{}给了[{}],理由为:{}"), 20 ADD_SIGN("6", "加签", "[{}]{}给了[{}],理由为:{}"),
21 SUB_SIGN("7", "减签", "[{}]操作了【减签】,审批人[{}]的任务被取消"), 21 SUB_SIGN("7", "减签", "[{}]操作了【减签】,审批人[{}]的任务被取消"),
yudao-module-bpm/yudao-module-bpm-api/src/main/java/cn/iocoder/yudao/module/bpm/enums/task/BpmProcessInstanceResultEnum.java renamed to yudao-module-bpm/yudao-module-bpm-api/src/main/java/cn/iocoder/yudao/module/bpm/enums/task/BpmTaskStatustEnum.java
@@ -5,13 +5,13 @@ import lombok.AllArgsConstructor; @@ -5,13 +5,13 @@ import lombok.AllArgsConstructor;
5 import lombok.Getter; 5 import lombok.Getter;
6 6
7 /** 7 /**
8 - * 流程实例的结果 8 + * 流程任务 Task 的状态枚举
9 * 9 *
10 * @author jason 10 * @author jason
11 */ 11 */
12 @Getter 12 @Getter
13 @AllArgsConstructor 13 @AllArgsConstructor
14 -public enum BpmProcessInstanceResultEnum { 14 +public enum BpmTaskStatustEnum {
15 15
16 RUNNING(1, "审批中"), 16 RUNNING(1, "审批中"),
17 APPROVE(2, "审批通过"), 17 APPROVE(2, "审批通过"),
@@ -43,28 +43,28 @@ public enum BpmProcessInstanceResultEnum { @@ -43,28 +43,28 @@ public enum BpmProcessInstanceResultEnum {
43 // WAIT_BEFORE_TASK(9, "处理中【待前置任务完成】"); 43 // WAIT_BEFORE_TASK(9, "处理中【待前置任务完成】");
44 44
45 /** 45 /**
46 - * 结果 46 + * 状态
47 * <p> 47 * <p>
48 - * 如果新增时,注意 {@link #isEndResult(Integer)} 是否需要变更 48 + * 如果新增时,注意 {@link #isEndStatus(Integer)} 是否需要变更
49 */ 49 */
50 - private final Integer result; 50 + private final Integer status;
51 /** 51 /**
52 - * 描述 52 + * 名字
53 */ 53 */
54 - private final String desc; 54 + private final String name;
55 55
56 /** 56 /**
57 - * 判断该结果是否已经处于 End 最终结果 57 + * 判断该状态是否已经处于 End 最终状态
58 * <p> 58 * <p>
59 - * 主要用于一些结果更新的逻辑,如果已经是最终结果,就不再进行更新 59 + * 主要用于一些状态更新的逻辑,如果已经是最终状态,就不再进行更新
60 * 60 *
61 - * @param result 结果 61 + * @param status 状态
62 * @return 是否 62 * @return 是否
63 */ 63 */
64 - public static boolean isEndResult(Integer result) {  
65 - return ObjectUtils.equalsAny(result,  
66 - APPROVE.getResult(), REJECT.getResult(), CANCEL.getResult(),  
67 - BACK.getResult(), APPROVING.getResult()); 64 + public static boolean isEndStatus(Integer status) {
  65 + return ObjectUtils.equalsAny(status,
  66 + APPROVE.getStatus(), REJECT.getStatus(), CANCEL.getStatus(),
  67 + BACK.getStatus(), APPROVING.getStatus());
68 } 68 }
69 69
70 } 70 }
yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/task/vo/task/BpmTaskRespVO.java
@@ -27,7 +27,10 @@ public class BpmTaskRespVO { @@ -27,7 +27,10 @@ public class BpmTaskRespVO {
27 private Long durationInMillis; 27 private Long durationInMillis;
28 28
29 @Schema(description = "任务状态", requiredMode = Schema.RequiredMode.REQUIRED, example = "2") 29 @Schema(description = "任务状态", requiredMode = Schema.RequiredMode.REQUIRED, example = "2")
30 - private Integer status; // 参见 BpmProcessInstanceResultEnum 枚举 30 + private Integer status; // 参见 BpmTaskStatusEnum 枚举
  31 +
  32 + @Schema(description = "审批理由", requiredMode = Schema.RequiredMode.REQUIRED, example = "2")
  33 + private String reason;
31 34
32 /** 35 /**
33 * 负责人的用户信息 36 * 负责人的用户信息
yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/convert/task/BpmTaskConvert.java
@@ -57,6 +57,7 @@ public interface BpmTaskConvert { @@ -57,6 +57,7 @@ public interface BpmTaskConvert {
57 List<BpmTaskRespVO> taskVOList = CollectionUtils.convertList(pageResult.getList(), task -> { 57 List<BpmTaskRespVO> taskVOList = CollectionUtils.convertList(pageResult.getList(), task -> {
58 BpmTaskRespVO taskVO = BeanUtils.toBean(task, BpmTaskRespVO.class); 58 BpmTaskRespVO taskVO = BeanUtils.toBean(task, BpmTaskRespVO.class);
59 taskVO.setStatus((Integer) task.getTaskLocalVariables().get(BpmConstants.TASK_VARIABLE_STATUS)); 59 taskVO.setStatus((Integer) task.getTaskLocalVariables().get(BpmConstants.TASK_VARIABLE_STATUS));
  60 + taskVO.setReason((String) task.getTaskLocalVariables().get(BpmConstants.TASK_VARIABLE_REASON));
60 // 流程实例 61 // 流程实例
61 HistoricProcessInstance processInstance = processInstanceMap.get(taskVO.getProcessInstanceId()); 62 HistoricProcessInstance processInstance = processInstanceMap.get(taskVO.getProcessInstanceId());
62 if (processInstance != null) { 63 if (processInstance != null) {
@@ -76,6 +77,7 @@ public interface BpmTaskConvert { @@ -76,6 +77,7 @@ public interface BpmTaskConvert {
76 List<BpmTaskRespVO> taskVOList = CollectionUtils.convertList(taskList, task -> { 77 List<BpmTaskRespVO> taskVOList = CollectionUtils.convertList(taskList, task -> {
77 BpmTaskRespVO taskVO = BeanUtils.toBean(task, BpmTaskRespVO.class); 78 BpmTaskRespVO taskVO = BeanUtils.toBean(task, BpmTaskRespVO.class);
78 taskVO.setStatus((Integer) task.getTaskLocalVariables().get(BpmConstants.TASK_VARIABLE_STATUS)); 79 taskVO.setStatus((Integer) task.getTaskLocalVariables().get(BpmConstants.TASK_VARIABLE_STATUS));
  80 + taskVO.setReason((String) task.getTaskLocalVariables().get(BpmConstants.TASK_VARIABLE_REASON));
79 // 流程实例 81 // 流程实例
80 AdminUserRespDTO startUser = userMap.get(NumberUtils.parseLong(processInstance.getStartUserId())); 82 AdminUserRespDTO startUser = userMap.get(NumberUtils.parseLong(processInstance.getStartUserId()));
81 taskVO.setProcessInstance(BeanUtils.toBean(processInstance, BpmTaskRespVO.ProcessInstance.class, 83 taskVO.setProcessInstance(BeanUtils.toBean(processInstance, BpmTaskRespVO.ProcessInstance.class,
yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/convert/task/package-info.java deleted
1 -package cn.iocoder.yudao.module.bpm.convert.task;  
yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/dal/dataobject/oa/BpmOALeaveDO.java
1 package cn.iocoder.yudao.module.bpm.dal.dataobject.oa; 1 package cn.iocoder.yudao.module.bpm.dal.dataobject.oa;
2 2
3 import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; 3 import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
4 -import cn.iocoder.yudao.module.bpm.enums.task.BpmProcessInstanceResultEnum; 4 +import cn.iocoder.yudao.module.bpm.enums.task.BpmTaskStatustEnum;
5 import com.baomidou.mybatisplus.annotation.TableId; 5 import com.baomidou.mybatisplus.annotation.TableId;
6 import com.baomidou.mybatisplus.annotation.TableName; 6 import com.baomidou.mybatisplus.annotation.TableName;
7 import lombok.*; 7 import lombok.*;
@@ -59,7 +59,7 @@ public class BpmOALeaveDO extends BaseDO { @@ -59,7 +59,7 @@ public class BpmOALeaveDO extends BaseDO {
59 /** 59 /**
60 * 请假的结果 60 * 请假的结果
61 * 61 *
62 - * 枚举 {@link BpmProcessInstanceResultEnum} 62 + * 枚举 {@link BpmTaskStatustEnum}
63 * 考虑到简单,所以直接复用了 BpmProcessInstanceResultEnum 枚举,也可以自己定义一个枚举哈 63 * 考虑到简单,所以直接复用了 BpmProcessInstanceResultEnum 枚举,也可以自己定义一个枚举哈
64 */ 64 */
65 private Integer result; 65 private Integer result;
yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/framework/flowable/core/enums/BpmConstants.java
@@ -22,5 +22,13 @@ public class BpmConstants { @@ -22,5 +22,13 @@ public class BpmConstants {
22 * @see org.flowable.task.api.Task#getTaskLocalVariables() 22 * @see org.flowable.task.api.Task#getTaskLocalVariables()
23 */ 23 */
24 public static final String TASK_VARIABLE_STATUS = "TASK_STATUS"; 24 public static final String TASK_VARIABLE_STATUS = "TASK_STATUS";
  25 + /**
  26 + * 任务的变量 - 理由
  27 + *
  28 + * 例如说:审批通过、不通过的理由
  29 + *
  30 + * @see org.flowable.task.api.Task#getTaskLocalVariables()
  31 + */
  32 + public static final String TASK_VARIABLE_REASON = "TASK_REASON";
25 33
26 } 34 }
yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/oa/BpmOALeaveServiceImpl.java
@@ -9,7 +9,7 @@ import cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.BpmOALeavePageReqVO; @@ -9,7 +9,7 @@ import cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.BpmOALeavePageReqVO;
9 import cn.iocoder.yudao.module.bpm.convert.oa.BpmOALeaveConvert; 9 import cn.iocoder.yudao.module.bpm.convert.oa.BpmOALeaveConvert;
10 import cn.iocoder.yudao.module.bpm.dal.dataobject.oa.BpmOALeaveDO; 10 import cn.iocoder.yudao.module.bpm.dal.dataobject.oa.BpmOALeaveDO;
11 import cn.iocoder.yudao.module.bpm.dal.mysql.oa.BpmOALeaveMapper; 11 import cn.iocoder.yudao.module.bpm.dal.mysql.oa.BpmOALeaveMapper;
12 -import cn.iocoder.yudao.module.bpm.enums.task.BpmProcessInstanceResultEnum; 12 +import cn.iocoder.yudao.module.bpm.enums.task.BpmTaskStatustEnum;
13 import org.springframework.stereotype.Service; 13 import org.springframework.stereotype.Service;
14 import org.springframework.transaction.annotation.Transactional; 14 import org.springframework.transaction.annotation.Transactional;
15 import org.springframework.validation.annotation.Validated; 15 import org.springframework.validation.annotation.Validated;
@@ -48,7 +48,7 @@ public class BpmOALeaveServiceImpl implements BpmOALeaveService { @@ -48,7 +48,7 @@ public class BpmOALeaveServiceImpl implements BpmOALeaveService {
48 // 插入 OA 请假单 48 // 插入 OA 请假单
49 long day = LocalDateTimeUtil.between(createReqVO.getStartTime(), createReqVO.getEndTime()).toDays(); 49 long day = LocalDateTimeUtil.between(createReqVO.getStartTime(), createReqVO.getEndTime()).toDays();
50 BpmOALeaveDO leave = BpmOALeaveConvert.INSTANCE.convert(createReqVO).setUserId(userId).setDay(day) 50 BpmOALeaveDO leave = BpmOALeaveConvert.INSTANCE.convert(createReqVO).setUserId(userId).setDay(day)
51 - .setResult(BpmProcessInstanceResultEnum.RUNNING.getResult()); 51 + .setResult(BpmTaskStatustEnum.RUNNING.getStatus());
52 leaveMapper.insert(leave); 52 leaveMapper.insert(leave);
53 53
54 // 发起 BPM 流程 54 // 发起 BPM 流程
yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/task/BpmTaskServiceImpl.java
@@ -14,7 +14,7 @@ import cn.iocoder.yudao.framework.web.core.util.WebFrameworkUtils; @@ -14,7 +14,7 @@ import cn.iocoder.yudao.framework.web.core.util.WebFrameworkUtils;
14 import cn.iocoder.yudao.module.bpm.controller.admin.task.vo.task.*; 14 import cn.iocoder.yudao.module.bpm.controller.admin.task.vo.task.*;
15 import cn.iocoder.yudao.module.bpm.convert.task.BpmTaskConvert; 15 import cn.iocoder.yudao.module.bpm.convert.task.BpmTaskConvert;
16 import cn.iocoder.yudao.module.bpm.enums.task.BpmCommentTypeEnum; 16 import cn.iocoder.yudao.module.bpm.enums.task.BpmCommentTypeEnum;
17 -import cn.iocoder.yudao.module.bpm.enums.task.BpmProcessInstanceResultEnum; 17 +import cn.iocoder.yudao.module.bpm.enums.task.BpmTaskStatustEnum;
18 import cn.iocoder.yudao.module.bpm.enums.task.BpmTaskAddSignTypeEnum; 18 import cn.iocoder.yudao.module.bpm.enums.task.BpmTaskAddSignTypeEnum;
19 import cn.iocoder.yudao.module.bpm.framework.flowable.core.enums.BpmConstants; 19 import cn.iocoder.yudao.module.bpm.framework.flowable.core.enums.BpmConstants;
20 import cn.iocoder.yudao.module.bpm.service.definition.BpmModelService; 20 import cn.iocoder.yudao.module.bpm.service.definition.BpmModelService;
@@ -178,15 +178,15 @@ public class BpmTaskServiceImpl implements BpmTaskService { @@ -178,15 +178,15 @@ public class BpmTaskServiceImpl implements BpmTaskService {
178 } 178 }
179 179
180 // 情况三:审批普通的任务。大多数情况下,都是这样 180 // 情况三:审批普通的任务。大多数情况下,都是这样
181 - // 更新流程任务 status 为审批通过  
182 - updateTaskStatus(task.getId(), BpmProcessInstanceResultEnum.APPROVE.getResult());  
183 - // 添加评论 181 + // 3.1 更新 task 状态、原因
  182 + updateTaskStatus(task.getId(), BpmTaskStatustEnum.APPROVE.getStatus());
  183 + // 3.2 添加评论
184 taskService.addComment(task.getId(), task.getProcessInstanceId(), 184 taskService.addComment(task.getId(), task.getProcessInstanceId(),
185 BpmCommentTypeEnum.APPROVE.getType(), reqVO.getReason()); 185 BpmCommentTypeEnum.APPROVE.getType(), reqVO.getReason());
186 - // 调用 BPM complete 去完成任务 186 + // 3.3 调用 BPM complete 去完成任务
187 taskService.complete(task.getId(), instance.getProcessVariables()); 187 taskService.complete(task.getId(), instance.getProcessVariables());
188 188
189 - // 处理加签任务 189 + // 【加签专属】处理加签任务
190 handleParentTaskIfSign(task.getParentTaskId()); 190 handleParentTaskIfSign(task.getParentTaskId());
191 } 191 }
192 192
@@ -204,14 +204,14 @@ public class BpmTaskServiceImpl implements BpmTaskService { @@ -204,14 +204,14 @@ public class BpmTaskServiceImpl implements BpmTaskService {
204 // new BpmTaskExtDO().setTaskId(task.getId()).setResult(BpmProcessInstanceResultEnum.SIGN_AFTER.getResult()) 204 // new BpmTaskExtDO().setTaskId(task.getId()).setResult(BpmProcessInstanceResultEnum.SIGN_AFTER.getResult())
205 // .setReason(reqVO.getReason()).setEndTime(LocalDateTime.now())); 205 // .setReason(reqVO.getReason()).setEndTime(LocalDateTime.now()));
206 // TODO @芋艿:reqVO.reason??? 206 // TODO @芋艿:reqVO.reason???
207 - updateTaskStatus(task.getId(), BpmProcessInstanceResultEnum.APPROVING.getResult()); 207 + updateTaskStatus(task.getId(), BpmTaskStatustEnum.APPROVING.getStatus());
208 208
209 // 2. 激活子任务 209 // 2. 激活子任务
210 List<String> childrenTaskIdList = getChildrenTaskIdList(task.getId()); 210 List<String> childrenTaskIdList = getChildrenTaskIdList(task.getId());
211 for (String childrenTaskId : childrenTaskIdList) { 211 for (String childrenTaskId : childrenTaskIdList) {
212 taskService.resolveTask(childrenTaskId); 212 taskService.resolveTask(childrenTaskId);
213 // 更新任务扩展表中子任务为进行中 213 // 更新任务扩展表中子任务为进行中
214 - updateTaskStatus(childrenTaskId, BpmProcessInstanceResultEnum.RUNNING.getResult()); 214 + updateTaskStatus(childrenTaskId, BpmTaskStatustEnum.RUNNING.getStatus());
215 } 215 }
216 // 2.1 更新任务扩展表中子任务为进行中 216 // 2.1 更新任务扩展表中子任务为进行中
217 // taskExtMapper.updateBatchByTaskIdList(childrenTaskIdList, 217 // taskExtMapper.updateBatchByTaskIdList(childrenTaskIdList,
@@ -252,11 +252,11 @@ public class BpmTaskServiceImpl implements BpmTaskService { @@ -252,11 +252,11 @@ public class BpmTaskServiceImpl implements BpmTaskService {
252 // 3.1.1 owner 重新赋值给父任务的 assignee,这样它就可以被审批 252 // 3.1.1 owner 重新赋值给父任务的 assignee,这样它就可以被审批
253 taskService.resolveTask(parentTaskId); 253 taskService.resolveTask(parentTaskId);
254 // 3.1.2 更新流程任务 status 254 // 3.1.2 更新流程任务 status
255 - updateTaskStatus(parentTaskId, BpmProcessInstanceResultEnum.RUNNING.getResult()); 255 + updateTaskStatus(parentTaskId, BpmTaskStatustEnum.RUNNING.getStatus());
256 // 3.2 情况二:处理向【向后】加签 256 // 3.2 情况二:处理向【向后】加签
257 } else if (BpmTaskAddSignTypeEnum.AFTER.getType().equals(scopeType)) { 257 } else if (BpmTaskAddSignTypeEnum.AFTER.getType().equals(scopeType)) {
258 // 3.2.1 完成自己(因为它已经没有子任务,所以也可以完成) 258 // 3.2.1 完成自己(因为它已经没有子任务,所以也可以完成)
259 - updateTaskStatus(parentTaskId, BpmProcessInstanceResultEnum.APPROVE.getResult()); 259 + updateTaskStatus(parentTaskId, BpmTaskStatustEnum.APPROVE.getStatus());
260 taskService.complete(parentTaskId); 260 taskService.complete(parentTaskId);
261 } 261 }
262 262
@@ -299,7 +299,7 @@ public class BpmTaskServiceImpl implements BpmTaskService { @@ -299,7 +299,7 @@ public class BpmTaskServiceImpl implements BpmTaskService {
299 // taskExtMapper.updateByTaskId( 299 // taskExtMapper.updateByTaskId(
300 // new BpmTaskExtDO().setTaskId(task.getId()).setResult(BpmProcessInstanceResultEnum.RUNNING.getResult()) 300 // new BpmTaskExtDO().setTaskId(task.getId()).setResult(BpmProcessInstanceResultEnum.RUNNING.getResult())
301 // .setReason(reqVO.getReason())); 301 // .setReason(reqVO.getReason()));
302 - updateTaskStatus(task.getId(), BpmProcessInstanceResultEnum.RUNNING.getResult()); 302 + updateTaskStatus(task.getId(), BpmTaskStatustEnum.RUNNING.getStatus());
303 } 303 }
304 304
305 @Override 305 @Override
@@ -313,7 +313,7 @@ public class BpmTaskServiceImpl implements BpmTaskService { @@ -313,7 +313,7 @@ public class BpmTaskServiceImpl implements BpmTaskService {
313 } 313 }
314 314
315 // 更新流程实例为不通过 315 // 更新流程实例为不通过
316 - updateTaskStatus(task.getId(), BpmProcessInstanceResultEnum.REJECT.getResult()); 316 + updateTaskStatus(task.getId(), BpmTaskStatustEnum.REJECT.getStatus());
317 processInstanceService.updateProcessInstanceExtReject(instance.getProcessInstanceId(), reqVO.getReason()); 317 processInstanceService.updateProcessInstanceExtReject(instance.getProcessInstanceId(), reqVO.getReason());
318 318
319 // // 更新任务拓展表为不通过 319 // // 更新任务拓展表为不通过
@@ -342,14 +342,22 @@ public class BpmTaskServiceImpl implements BpmTaskService { @@ -342,14 +342,22 @@ public class BpmTaskServiceImpl implements BpmTaskService {
342 * @param status 状态 342 * @param status 状态
343 */ 343 */
344 private void updateTaskStatus(String id, Integer status) { 344 private void updateTaskStatus(String id, Integer status) {
345 -// try {  
346 -// } catch (FlowableObjectNotFoundException exception) {  
347 -// historyService.  
348 -// }  
349 taskService.setVariableLocal(id, BpmConstants.TASK_VARIABLE_STATUS, status); 345 taskService.setVariableLocal(id, BpmConstants.TASK_VARIABLE_STATUS, status);
350 } 346 }
351 347
352 /** 348 /**
  349 + * 更新流程任务的 status 状态、reason 理由
  350 + *
  351 + * @param id 任务编号
  352 + * @param status 状态
  353 + * @param reason 理由(审批通过、审批不通过的理由)
  354 + */
  355 + private void updateTaskStatus(String id, Integer status, String reason) {
  356 + taskService.setVariableLocal(id, BpmConstants.TASK_VARIABLE_STATUS, status);
  357 + taskService.setVariableLocal(id, BpmConstants.TASK_VARIABLE_REASON, reason);
  358 + }
  359 +
  360 + /**
353 * 校验任务是否存在, 并且是否是分配给自己的任务 361 * 校验任务是否存在, 并且是否是分配给自己的任务
354 * 362 *
355 * @param userId 用户 id 363 * @param userId 用户 id
@@ -382,7 +390,7 @@ public class BpmTaskServiceImpl implements BpmTaskService { @@ -382,7 +390,7 @@ public class BpmTaskServiceImpl implements BpmTaskService {
382 // if (BpmTaskAddSignTypeEnum.AFTER_CHILDREN_TASK.getType().equals(task.getScopeType())) { 390 // if (BpmTaskAddSignTypeEnum.AFTER_CHILDREN_TASK.getType().equals(task.getScopeType())) {
383 // status = BpmProcessInstanceResultEnum.WAIT_BEFORE_TASK.getResult(); 391 // status = BpmProcessInstanceResultEnum.WAIT_BEFORE_TASK.getResult();
384 // } 392 // }
385 - updateTaskStatus(task.getId(), BpmProcessInstanceResultEnum.RUNNING.getResult()); 393 + updateTaskStatus(task.getId(), BpmTaskStatustEnum.RUNNING.getStatus());
386 } 394 }
387 395
388 @Override 396 @Override
@@ -392,7 +400,7 @@ public class BpmTaskServiceImpl implements BpmTaskService { @@ -392,7 +400,7 @@ public class BpmTaskServiceImpl implements BpmTaskService {
392 // .setEndTime(LocalDateTime.now()); 400 // .setEndTime(LocalDateTime.now());
393 // taskExtMapper.updateByTaskId(taskExtDO); 401 // taskExtMapper.updateByTaskId(taskExtDO);
394 402
395 - updateTaskStatus(task.getId(), BpmProcessInstanceResultEnum.APPROVE.getResult()); 403 + updateTaskStatus(task.getId(), BpmTaskStatustEnum.APPROVE.getStatus());
396 } 404 }
397 405
398 @Override 406 @Override
@@ -405,11 +413,11 @@ public class BpmTaskServiceImpl implements BpmTaskService { @@ -405,11 +413,11 @@ public class BpmTaskServiceImpl implements BpmTaskService {
405 } 413 }
406 414
407 Integer status = (Integer) task.getTaskLocalVariables().get(BpmConstants.TASK_VARIABLE_STATUS); 415 Integer status = (Integer) task.getTaskLocalVariables().get(BpmConstants.TASK_VARIABLE_STATUS);
408 - if (BpmProcessInstanceResultEnum.isEndResult(status)) { 416 + if (BpmTaskStatustEnum.isEndStatus(status)) {
409 log.error("[updateTaskExtCancel][taskId({}) 处于结果({}),无需进行更新]", taskId, status); 417 log.error("[updateTaskExtCancel][taskId({}) 处于结果({}),无需进行更新]", taskId, status);
410 return; 418 return;
411 } 419 }
412 - updateTaskStatus(taskId, BpmProcessInstanceResultEnum.CANCEL.getResult()); 420 + updateTaskStatus(taskId, BpmTaskStatustEnum.CANCEL.getStatus());
413 421
414 if (true) { 422 if (true) {
415 return; 423 return;
@@ -438,7 +446,7 @@ public class BpmTaskServiceImpl implements BpmTaskService { @@ -438,7 +446,7 @@ public class BpmTaskServiceImpl implements BpmTaskService {
438 // return; 446 // return;
439 // } 447 // }
440 Integer status = (Integer) task.getTaskLocalVariables().get(BpmConstants.TASK_VARIABLE_STATUS); 448 Integer status = (Integer) task.getTaskLocalVariables().get(BpmConstants.TASK_VARIABLE_STATUS);
441 - if (BpmProcessInstanceResultEnum.isEndResult(status)) { 449 + if (BpmTaskStatustEnum.isEndStatus(status)) {
442 log.error("[updateTaskExtCancel][taskId({}) 处于结果({}),无需进行更新]", taskId, status); 450 log.error("[updateTaskExtCancel][taskId({}) 处于结果({}),无需进行更新]", taskId, status);
443 return; 451 return;
444 } 452 }
@@ -446,7 +454,7 @@ public class BpmTaskServiceImpl implements BpmTaskService { @@ -446,7 +454,7 @@ public class BpmTaskServiceImpl implements BpmTaskService {
446 // 更新任务 454 // 更新任务
447 // taskExtMapper.updateById(new BpmTaskExtDO().setId(taskExt.getId()).setResult(BpmProcessInstanceResultEnum.CANCEL.getResult()) 455 // taskExtMapper.updateById(new BpmTaskExtDO().setId(taskExt.getId()).setResult(BpmProcessInstanceResultEnum.CANCEL.getResult())
448 // .setEndTime(LocalDateTime.now()).setReason(BpmProcessInstanceDeleteReasonEnum.translateReason(task.getDeleteReason()))); 456 // .setEndTime(LocalDateTime.now()).setReason(BpmProcessInstanceDeleteReasonEnum.translateReason(task.getDeleteReason())));
449 - updateTaskStatus(taskId, BpmProcessInstanceResultEnum.CANCEL.getResult()); 457 + updateTaskStatus(taskId, BpmTaskStatustEnum.CANCEL.getStatus());
450 } 458 }
451 459
452 }); 460 });
@@ -520,19 +528,11 @@ public class BpmTaskServiceImpl implements BpmTaskService { @@ -520,19 +528,11 @@ public class BpmTaskServiceImpl implements BpmTaskService {
520 throw exception(TASK_IS_PENDING); 528 throw exception(TASK_IS_PENDING);
521 } 529 }
522 // 1.2 校验源头和目标节点的关系,并返回目标元素 530 // 1.2 校验源头和目标节点的关系,并返回目标元素
523 - FlowElement targetElement = validateTargetTaskCanReturn(task.getTaskDefinitionKey(), reqVO.getTargetTaskDefinitionKey(), task.getProcessDefinitionId());  
524 -  
525 - // 3. 更新任务扩展表 TODO 芋艿:需要提前搞  
526 - updateTaskStatus(task.getId(), BpmProcessInstanceResultEnum.BACK.getResult()); 531 + FlowElement targetElement = validateTargetTaskCanReturn(task.getTaskDefinitionKey(),
  532 + reqVO.getTargetTaskDefinitionKey(), task.getProcessDefinitionId());
527 533
528 - // 2. 调用 flowable 框架的回退逻辑  
529 - returnTask0(task, targetElement, reqVO);  
530 -  
531 - // 3. 更新任务扩展表  
532 -// updateTaskStatus(task.getId(), BpmProcessInstanceResultEnum.BACK.getResult());  
533 -// taskExtMapper.updateByTaskId(new BpmTaskExtDO().setTaskId(task.getId())  
534 -// .setResult(BpmProcessInstanceResultEnum.BACK.getResult())  
535 -// .setEndTime(LocalDateTime.now()).setReason(reqVO.getReason())); 534 + // 2. 调用 Flowable 框架的回退逻辑
  535 + returnTask(task, targetElement, reqVO);
536 } 536 }
537 537
538 /** 538 /**
@@ -568,7 +568,7 @@ public class BpmTaskServiceImpl implements BpmTaskService { @@ -568,7 +568,7 @@ public class BpmTaskServiceImpl implements BpmTaskService {
568 * @param targetElement 需要回退到的目标任务 568 * @param targetElement 需要回退到的目标任务
569 * @param reqVO 前端参数封装 569 * @param reqVO 前端参数封装
570 */ 570 */
571 - public void returnTask0(Task currentTask, FlowElement targetElement, BpmTaskReturnReqVO reqVO) { 571 + public void returnTask(Task currentTask, FlowElement targetElement, BpmTaskReturnReqVO reqVO) {
572 // 1. 获得所有需要回撤的任务 taskDefinitionKey,用于稍后的 moveActivityIdsToSingleActivityId 回撤 572 // 1. 获得所有需要回撤的任务 taskDefinitionKey,用于稍后的 moveActivityIdsToSingleActivityId 回撤
573 // 1.1 获取所有正常进行的任务节点 Key 573 // 1.1 获取所有正常进行的任务节点 Key
574 List<Task> taskList = taskService.createTaskQuery().processInstanceId(currentTask.getProcessInstanceId()).list(); 574 List<Task> taskList = taskService.createTaskQuery().processInstanceId(currentTask.getProcessInstanceId()).list();
@@ -584,11 +584,11 @@ public class BpmTaskServiceImpl implements BpmTaskService { @@ -584,11 +584,11 @@ public class BpmTaskServiceImpl implements BpmTaskService {
584 if (!returnTaskKeyList.contains(task.getTaskDefinitionKey())) { 584 if (!returnTaskKeyList.contains(task.getTaskDefinitionKey())) {
585 return; 585 return;
586 } 586 }
  587 + // 2.1 添加评论
587 taskService.addComment(task.getId(), currentTask.getProcessInstanceId(), 588 taskService.addComment(task.getId(), currentTask.getProcessInstanceId(),
588 - BpmCommentTypeEnum.BACK.getType().toString(), reqVO.getReason());  
589 -  
590 - // TODO 芋艿:这里加下驳回的  
591 - updateTaskStatus(task.getId(), BpmProcessInstanceResultEnum.BACK.getResult()); 589 + BpmCommentTypeEnum.BACK.getType(), reqVO.getReason());
  590 + // 2.2 更新 task 状态 + 原因
  591 + updateTaskStatus(task.getId(), BpmTaskStatustEnum.BACK.getStatus(), reqVO.getReason());
592 }); 592 });
593 593
594 // 3. 执行驳回 594 // 3. 执行驳回
@@ -626,7 +626,7 @@ public class BpmTaskServiceImpl implements BpmTaskService { @@ -626,7 +626,7 @@ public class BpmTaskServiceImpl implements BpmTaskService {
626 // taskExtMapper.updateByTaskId( 626 // taskExtMapper.updateByTaskId(
627 // new BpmTaskExtDO().setTaskId(task.getId()).setResult(BpmProcessInstanceResultEnum.DELEGATE.getResult()) 627 // new BpmTaskExtDO().setTaskId(task.getId()).setResult(BpmProcessInstanceResultEnum.DELEGATE.getResult())
628 // .setReason(reqVO.getReason())); 628 // .setReason(reqVO.getReason()));
629 - updateTaskStatus(taskId, BpmProcessInstanceResultEnum.DELEGATE.getResult()); 629 + updateTaskStatus(taskId, BpmTaskStatustEnum.DELEGATE.getStatus());
630 } 630 }
631 631
632 /** 632 /**
@@ -677,7 +677,7 @@ public class BpmTaskServiceImpl implements BpmTaskService { @@ -677,7 +677,7 @@ public class BpmTaskServiceImpl implements BpmTaskService {
677 // 2.5 保存当前任务修改后的值 677 // 2.5 保存当前任务修改后的值
678 taskService.saveTask(taskEntity); 678 taskService.saveTask(taskEntity);
679 if (reqVO.getType().equals(BpmTaskAddSignTypeEnum.BEFORE.getType())) { 679 if (reqVO.getType().equals(BpmTaskAddSignTypeEnum.BEFORE.getType())) {
680 - updateTaskStatus(taskEntity.getId(), BpmProcessInstanceResultEnum.WAIT.getResult()); // TODO 芋艿:貌似只能放在这个地方,不然会有并发修改的报错 680 + updateTaskStatus(taskEntity.getId(), BpmTaskStatustEnum.WAIT.getStatus()); // TODO 芋艿:貌似只能放在这个地方,不然会有并发修改的报错
681 } 681 }
682 682
683 // 3. 创建加签任务 683 // 3. 创建加签任务
@@ -767,7 +767,7 @@ public class BpmTaskServiceImpl implements BpmTaskService { @@ -767,7 +767,7 @@ public class BpmTaskServiceImpl implements BpmTaskService {
767 taskService.saveTask(task); 767 taskService.saveTask(task);
768 // 3. TODO 768 // 3. TODO
769 if (BpmTaskAddSignTypeEnum.AFTER.getType().equals(parentTask.getScopeType())) { 769 if (BpmTaskAddSignTypeEnum.AFTER.getType().equals(parentTask.getScopeType())) {
770 - updateTaskStatus(task.getId(), BpmProcessInstanceResultEnum.WAIT.getResult()); 770 + updateTaskStatus(task.getId(), BpmTaskStatustEnum.WAIT.getStatus());
771 } 771 }
772 } 772 }
773 773
yudao-module-bpm/yudao-spring-boot-starter-flowable/src/main/java/cn/iocoder/yudao/framework/flowable/core/util/BpmnModelUtils.java
@@ -55,7 +55,7 @@ public class BpmnModelUtils { @@ -55,7 +55,7 @@ public class BpmnModelUtils {
55 /** 55 /**
56 * 获得 BPMN 流程中,指定的元素们 56 * 获得 BPMN 流程中,指定的元素们
57 * 57 *
58 - * @param model 58 + * @param model 模型
59 * @param clazz 指定元素。例如说,{@link UserTask}、{@link Gateway} 等等 59 * @param clazz 指定元素。例如说,{@link UserTask}、{@link Gateway} 等等
60 * @return 元素们 60 * @return 元素们
61 */ 61 */
yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/util/CrmAuditStatusUtils.java
1 package cn.iocoder.yudao.module.crm.util; 1 package cn.iocoder.yudao.module.crm.util;
2 2
3 import cn.hutool.core.lang.Assert; 3 import cn.hutool.core.lang.Assert;
4 -import cn.iocoder.yudao.module.bpm.enums.task.BpmProcessInstanceResultEnum; 4 +import cn.iocoder.yudao.module.bpm.enums.task.BpmTaskStatustEnum;
5 import cn.iocoder.yudao.module.crm.enums.common.CrmAuditStatusEnum; 5 import cn.iocoder.yudao.module.crm.enums.common.CrmAuditStatusEnum;
6 6
7 /** 7 /**
@@ -17,9 +17,9 @@ public class CrmAuditStatusUtils { @@ -17,9 +17,9 @@ public class CrmAuditStatusUtils {
17 * @param bpmResult BPM 审批结果 17 * @param bpmResult BPM 审批结果
18 */ 18 */
19 public static Integer convertBpmResultToAuditStatus(Integer bpmResult) { 19 public static Integer convertBpmResultToAuditStatus(Integer bpmResult) {
20 - Integer auditStatus = BpmProcessInstanceResultEnum.APPROVE.getResult().equals(bpmResult) ? CrmAuditStatusEnum.APPROVE.getStatus()  
21 - : BpmProcessInstanceResultEnum.REJECT.getResult().equals(bpmResult) ? CrmAuditStatusEnum.REJECT.getStatus()  
22 - : BpmProcessInstanceResultEnum.CANCEL.getResult().equals(bpmResult) ? BpmProcessInstanceResultEnum.CANCEL.getResult() : null; 20 + Integer auditStatus = BpmTaskStatustEnum.APPROVE.getStatus().equals(bpmResult) ? CrmAuditStatusEnum.APPROVE.getStatus()
  21 + : BpmTaskStatustEnum.REJECT.getStatus().equals(bpmResult) ? CrmAuditStatusEnum.REJECT.getStatus()
  22 + : BpmTaskStatustEnum.CANCEL.getStatus().equals(bpmResult) ? BpmTaskStatustEnum.CANCEL.getStatus() : null;
23 Assert.notNull(auditStatus, "BPM 审批结果({}) 转换失败", bpmResult); 23 Assert.notNull(auditStatus, "BPM 审批结果({}) 转换失败", bpmResult);
24 return auditStatus; 24 return auditStatus;
25 } 25 }