Commit c4688d887ca4c10a8a2fbb6b5c4acde59b026c32
1 parent
ba502fc5
BPM:增加 task 的审批建议
Showing
11 changed files
with
80 additions
and
68 deletions
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 | } |