From c4688d887ca4c10a8a2fbb6b5c4acde59b026c32 Mon Sep 17 00:00:00 2001 From: YunaiV Date: Mon, 18 Mar 2024 18:41:04 +0800 Subject: [PATCH] =?UTF-8?q?BPM=EF=BC=9A=E5=A2=9E=E5=8A=A0=20task=20?= =?UTF-8?q?=E7=9A=84=E5=AE=A1=E6=89=B9=E5=BB=BA=E8=AE=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../bpm/enums/task/BpmCommentTypeEnum.java | 2 +- ...esultEnum.java => BpmTaskStatustEnum.java} | 28 +++---- .../admin/task/vo/task/BpmTaskRespVO.java | 5 +- .../bpm/convert/task/BpmTaskConvert.java | 2 + .../module/bpm/convert/task/package-info.java | 1 - .../bpm/dal/dataobject/oa/BpmOALeaveDO.java | 4 +- .../flowable/core/enums/BpmConstants.java | 8 ++ .../bpm/service/oa/BpmOALeaveServiceImpl.java | 4 +- .../bpm/service/task/BpmTaskServiceImpl.java | 84 +++++++++---------- .../flowable/core/util/BpmnModelUtils.java | 2 +- .../module/crm/util/CrmAuditStatusUtils.java | 8 +- 11 files changed, 80 insertions(+), 68 deletions(-) rename yudao-module-bpm/yudao-module-bpm-api/src/main/java/cn/iocoder/yudao/module/bpm/enums/task/{BpmProcessInstanceResultEnum.java => BpmTaskStatustEnum.java} (71%) delete mode 100644 yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/convert/task/package-info.java diff --git a/yudao-module-bpm/yudao-module-bpm-api/src/main/java/cn/iocoder/yudao/module/bpm/enums/task/BpmCommentTypeEnum.java b/yudao-module-bpm/yudao-module-bpm-api/src/main/java/cn/iocoder/yudao/module/bpm/enums/task/BpmCommentTypeEnum.java index 06269a31e..f2c2ded53 100644 --- a/yudao-module-bpm/yudao-module-bpm-api/src/main/java/cn/iocoder/yudao/module/bpm/enums/task/BpmCommentTypeEnum.java +++ b/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 { APPROVE("1", "审批通过", ""), // 理由:直接使用用户的评论 REJECT("2", "不通过", ""), CANCEL("3", "已取消", ""), - BACK("4", "退回", ""), + BACK("4", "退回", ""), // 理由:直接使用用户的评论 DELEGATE("5", "委派", ""), ADD_SIGN("6", "加签", "[{}]{}给了[{}],理由为:{}"), SUB_SIGN("7", "减签", "[{}]操作了【减签】,审批人[{}]的任务被取消"), diff --git a/yudao-module-bpm/yudao-module-bpm-api/src/main/java/cn/iocoder/yudao/module/bpm/enums/task/BpmProcessInstanceResultEnum.java b/yudao-module-bpm/yudao-module-bpm-api/src/main/java/cn/iocoder/yudao/module/bpm/enums/task/BpmTaskStatustEnum.java similarity index 71% rename from yudao-module-bpm/yudao-module-bpm-api/src/main/java/cn/iocoder/yudao/module/bpm/enums/task/BpmProcessInstanceResultEnum.java rename to yudao-module-bpm/yudao-module-bpm-api/src/main/java/cn/iocoder/yudao/module/bpm/enums/task/BpmTaskStatustEnum.java index bd4f361d5..ee06b0847 100644 --- a/yudao-module-bpm/yudao-module-bpm-api/src/main/java/cn/iocoder/yudao/module/bpm/enums/task/BpmProcessInstanceResultEnum.java +++ b/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; import lombok.Getter; /** - * 流程实例的结果 + * 流程任务 Task 的状态枚举 * * @author jason */ @Getter @AllArgsConstructor -public enum BpmProcessInstanceResultEnum { +public enum BpmTaskStatustEnum { RUNNING(1, "审批中"), APPROVE(2, "审批通过"), @@ -43,28 +43,28 @@ public enum BpmProcessInstanceResultEnum { // WAIT_BEFORE_TASK(9, "处理中【待前置任务完成】"); /** - * 结果 + * 状态 *

- * 如果新增时,注意 {@link #isEndResult(Integer)} 是否需要变更 + * 如果新增时,注意 {@link #isEndStatus(Integer)} 是否需要变更 */ - private final Integer result; + private final Integer status; /** - * 描述 + * 名字 */ - private final String desc; + private final String name; /** - * 判断该结果是否已经处于 End 最终结果 + * 判断该状态是否已经处于 End 最终状态 *

- * 主要用于一些结果更新的逻辑,如果已经是最终结果,就不再进行更新 + * 主要用于一些状态更新的逻辑,如果已经是最终状态,就不再进行更新 * - * @param result 结果 + * @param status 状态 * @return 是否 */ - public static boolean isEndResult(Integer result) { - return ObjectUtils.equalsAny(result, - APPROVE.getResult(), REJECT.getResult(), CANCEL.getResult(), - BACK.getResult(), APPROVING.getResult()); + public static boolean isEndStatus(Integer status) { + return ObjectUtils.equalsAny(status, + APPROVE.getStatus(), REJECT.getStatus(), CANCEL.getStatus(), + BACK.getStatus(), APPROVING.getStatus()); } } diff --git a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/task/vo/task/BpmTaskRespVO.java b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/task/vo/task/BpmTaskRespVO.java index 1e1bebf04..46ac3f36d 100644 --- a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/task/vo/task/BpmTaskRespVO.java +++ b/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 { private Long durationInMillis; @Schema(description = "任务状态", requiredMode = Schema.RequiredMode.REQUIRED, example = "2") - private Integer status; // 参见 BpmProcessInstanceResultEnum 枚举 + private Integer status; // 参见 BpmTaskStatusEnum 枚举 + + @Schema(description = "审批理由", requiredMode = Schema.RequiredMode.REQUIRED, example = "2") + private String reason; /** * 负责人的用户信息 diff --git a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/convert/task/BpmTaskConvert.java b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/convert/task/BpmTaskConvert.java index 8bbe10f8b..ee7b5245c 100644 --- a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/convert/task/BpmTaskConvert.java +++ b/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 { List taskVOList = CollectionUtils.convertList(pageResult.getList(), task -> { BpmTaskRespVO taskVO = BeanUtils.toBean(task, BpmTaskRespVO.class); taskVO.setStatus((Integer) task.getTaskLocalVariables().get(BpmConstants.TASK_VARIABLE_STATUS)); + taskVO.setReason((String) task.getTaskLocalVariables().get(BpmConstants.TASK_VARIABLE_REASON)); // 流程实例 HistoricProcessInstance processInstance = processInstanceMap.get(taskVO.getProcessInstanceId()); if (processInstance != null) { @@ -76,6 +77,7 @@ public interface BpmTaskConvert { List taskVOList = CollectionUtils.convertList(taskList, task -> { BpmTaskRespVO taskVO = BeanUtils.toBean(task, BpmTaskRespVO.class); taskVO.setStatus((Integer) task.getTaskLocalVariables().get(BpmConstants.TASK_VARIABLE_STATUS)); + taskVO.setReason((String) task.getTaskLocalVariables().get(BpmConstants.TASK_VARIABLE_REASON)); // 流程实例 AdminUserRespDTO startUser = userMap.get(NumberUtils.parseLong(processInstance.getStartUserId())); taskVO.setProcessInstance(BeanUtils.toBean(processInstance, BpmTaskRespVO.ProcessInstance.class, diff --git a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/convert/task/package-info.java b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/convert/task/package-info.java deleted file mode 100644 index 6a53114a8..000000000 --- a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/convert/task/package-info.java +++ /dev/null @@ -1 +0,0 @@ -package cn.iocoder.yudao.module.bpm.convert.task; diff --git a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/dal/dataobject/oa/BpmOALeaveDO.java b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/dal/dataobject/oa/BpmOALeaveDO.java index 4e4e68d6f..e24ce02ad 100644 --- a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/dal/dataobject/oa/BpmOALeaveDO.java +++ b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/dal/dataobject/oa/BpmOALeaveDO.java @@ -1,7 +1,7 @@ package cn.iocoder.yudao.module.bpm.dal.dataobject.oa; import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; -import cn.iocoder.yudao.module.bpm.enums.task.BpmProcessInstanceResultEnum; +import cn.iocoder.yudao.module.bpm.enums.task.BpmTaskStatustEnum; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; import lombok.*; @@ -59,7 +59,7 @@ public class BpmOALeaveDO extends BaseDO { /** * 请假的结果 * - * 枚举 {@link BpmProcessInstanceResultEnum} + * 枚举 {@link BpmTaskStatustEnum} * 考虑到简单,所以直接复用了 BpmProcessInstanceResultEnum 枚举,也可以自己定义一个枚举哈 */ private Integer result; diff --git a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/framework/flowable/core/enums/BpmConstants.java b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/framework/flowable/core/enums/BpmConstants.java index 7649b0fbc..6dd5e79c7 100644 --- a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/framework/flowable/core/enums/BpmConstants.java +++ b/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 { * @see org.flowable.task.api.Task#getTaskLocalVariables() */ public static final String TASK_VARIABLE_STATUS = "TASK_STATUS"; + /** + * 任务的变量 - 理由 + * + * 例如说:审批通过、不通过的理由 + * + * @see org.flowable.task.api.Task#getTaskLocalVariables() + */ + public static final String TASK_VARIABLE_REASON = "TASK_REASON"; } diff --git a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/oa/BpmOALeaveServiceImpl.java b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/oa/BpmOALeaveServiceImpl.java index 3c786d805..9477e667d 100644 --- a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/oa/BpmOALeaveServiceImpl.java +++ b/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; import cn.iocoder.yudao.module.bpm.convert.oa.BpmOALeaveConvert; import cn.iocoder.yudao.module.bpm.dal.dataobject.oa.BpmOALeaveDO; import cn.iocoder.yudao.module.bpm.dal.mysql.oa.BpmOALeaveMapper; -import cn.iocoder.yudao.module.bpm.enums.task.BpmProcessInstanceResultEnum; +import cn.iocoder.yudao.module.bpm.enums.task.BpmTaskStatustEnum; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.validation.annotation.Validated; @@ -48,7 +48,7 @@ public class BpmOALeaveServiceImpl implements BpmOALeaveService { // 插入 OA 请假单 long day = LocalDateTimeUtil.between(createReqVO.getStartTime(), createReqVO.getEndTime()).toDays(); BpmOALeaveDO leave = BpmOALeaveConvert.INSTANCE.convert(createReqVO).setUserId(userId).setDay(day) - .setResult(BpmProcessInstanceResultEnum.RUNNING.getResult()); + .setResult(BpmTaskStatustEnum.RUNNING.getStatus()); leaveMapper.insert(leave); // 发起 BPM 流程 diff --git a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/task/BpmTaskServiceImpl.java b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/task/BpmTaskServiceImpl.java index a2211e640..b0bc45e3f 100644 --- a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/task/BpmTaskServiceImpl.java +++ b/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; import cn.iocoder.yudao.module.bpm.controller.admin.task.vo.task.*; import cn.iocoder.yudao.module.bpm.convert.task.BpmTaskConvert; import cn.iocoder.yudao.module.bpm.enums.task.BpmCommentTypeEnum; -import cn.iocoder.yudao.module.bpm.enums.task.BpmProcessInstanceResultEnum; +import cn.iocoder.yudao.module.bpm.enums.task.BpmTaskStatustEnum; import cn.iocoder.yudao.module.bpm.enums.task.BpmTaskAddSignTypeEnum; import cn.iocoder.yudao.module.bpm.framework.flowable.core.enums.BpmConstants; import cn.iocoder.yudao.module.bpm.service.definition.BpmModelService; @@ -178,15 +178,15 @@ public class BpmTaskServiceImpl implements BpmTaskService { } // 情况三:审批普通的任务。大多数情况下,都是这样 - // 更新流程任务 status 为审批通过 - updateTaskStatus(task.getId(), BpmProcessInstanceResultEnum.APPROVE.getResult()); - // 添加评论 + // 3.1 更新 task 状态、原因 + updateTaskStatus(task.getId(), BpmTaskStatustEnum.APPROVE.getStatus()); + // 3.2 添加评论 taskService.addComment(task.getId(), task.getProcessInstanceId(), BpmCommentTypeEnum.APPROVE.getType(), reqVO.getReason()); - // 调用 BPM complete 去完成任务 + // 3.3 调用 BPM complete 去完成任务 taskService.complete(task.getId(), instance.getProcessVariables()); - // 处理加签任务 + // 【加签专属】处理加签任务 handleParentTaskIfSign(task.getParentTaskId()); } @@ -204,14 +204,14 @@ public class BpmTaskServiceImpl implements BpmTaskService { // new BpmTaskExtDO().setTaskId(task.getId()).setResult(BpmProcessInstanceResultEnum.SIGN_AFTER.getResult()) // .setReason(reqVO.getReason()).setEndTime(LocalDateTime.now())); // TODO @芋艿:reqVO.reason??? - updateTaskStatus(task.getId(), BpmProcessInstanceResultEnum.APPROVING.getResult()); + updateTaskStatus(task.getId(), BpmTaskStatustEnum.APPROVING.getStatus()); // 2. 激活子任务 List childrenTaskIdList = getChildrenTaskIdList(task.getId()); for (String childrenTaskId : childrenTaskIdList) { taskService.resolveTask(childrenTaskId); // 更新任务扩展表中子任务为进行中 - updateTaskStatus(childrenTaskId, BpmProcessInstanceResultEnum.RUNNING.getResult()); + updateTaskStatus(childrenTaskId, BpmTaskStatustEnum.RUNNING.getStatus()); } // 2.1 更新任务扩展表中子任务为进行中 // taskExtMapper.updateBatchByTaskIdList(childrenTaskIdList, @@ -252,11 +252,11 @@ public class BpmTaskServiceImpl implements BpmTaskService { // 3.1.1 owner 重新赋值给父任务的 assignee,这样它就可以被审批 taskService.resolveTask(parentTaskId); // 3.1.2 更新流程任务 status - updateTaskStatus(parentTaskId, BpmProcessInstanceResultEnum.RUNNING.getResult()); + updateTaskStatus(parentTaskId, BpmTaskStatustEnum.RUNNING.getStatus()); // 3.2 情况二:处理向【向后】加签 } else if (BpmTaskAddSignTypeEnum.AFTER.getType().equals(scopeType)) { // 3.2.1 完成自己(因为它已经没有子任务,所以也可以完成) - updateTaskStatus(parentTaskId, BpmProcessInstanceResultEnum.APPROVE.getResult()); + updateTaskStatus(parentTaskId, BpmTaskStatustEnum.APPROVE.getStatus()); taskService.complete(parentTaskId); } @@ -299,7 +299,7 @@ public class BpmTaskServiceImpl implements BpmTaskService { // taskExtMapper.updateByTaskId( // new BpmTaskExtDO().setTaskId(task.getId()).setResult(BpmProcessInstanceResultEnum.RUNNING.getResult()) // .setReason(reqVO.getReason())); - updateTaskStatus(task.getId(), BpmProcessInstanceResultEnum.RUNNING.getResult()); + updateTaskStatus(task.getId(), BpmTaskStatustEnum.RUNNING.getStatus()); } @Override @@ -313,7 +313,7 @@ public class BpmTaskServiceImpl implements BpmTaskService { } // 更新流程实例为不通过 - updateTaskStatus(task.getId(), BpmProcessInstanceResultEnum.REJECT.getResult()); + updateTaskStatus(task.getId(), BpmTaskStatustEnum.REJECT.getStatus()); processInstanceService.updateProcessInstanceExtReject(instance.getProcessInstanceId(), reqVO.getReason()); // // 更新任务拓展表为不通过 @@ -342,13 +342,21 @@ public class BpmTaskServiceImpl implements BpmTaskService { * @param status 状态 */ private void updateTaskStatus(String id, Integer status) { -// try { -// } catch (FlowableObjectNotFoundException exception) { -// historyService. -// } taskService.setVariableLocal(id, BpmConstants.TASK_VARIABLE_STATUS, status); } + /** + * 更新流程任务的 status 状态、reason 理由 + * + * @param id 任务编号 + * @param status 状态 + * @param reason 理由(审批通过、审批不通过的理由) + */ + private void updateTaskStatus(String id, Integer status, String reason) { + taskService.setVariableLocal(id, BpmConstants.TASK_VARIABLE_STATUS, status); + taskService.setVariableLocal(id, BpmConstants.TASK_VARIABLE_REASON, reason); + } + /** * 校验任务是否存在, 并且是否是分配给自己的任务 * @@ -382,7 +390,7 @@ public class BpmTaskServiceImpl implements BpmTaskService { // if (BpmTaskAddSignTypeEnum.AFTER_CHILDREN_TASK.getType().equals(task.getScopeType())) { // status = BpmProcessInstanceResultEnum.WAIT_BEFORE_TASK.getResult(); // } - updateTaskStatus(task.getId(), BpmProcessInstanceResultEnum.RUNNING.getResult()); + updateTaskStatus(task.getId(), BpmTaskStatustEnum.RUNNING.getStatus()); } @Override @@ -392,7 +400,7 @@ public class BpmTaskServiceImpl implements BpmTaskService { // .setEndTime(LocalDateTime.now()); // taskExtMapper.updateByTaskId(taskExtDO); - updateTaskStatus(task.getId(), BpmProcessInstanceResultEnum.APPROVE.getResult()); + updateTaskStatus(task.getId(), BpmTaskStatustEnum.APPROVE.getStatus()); } @Override @@ -405,11 +413,11 @@ public class BpmTaskServiceImpl implements BpmTaskService { } Integer status = (Integer) task.getTaskLocalVariables().get(BpmConstants.TASK_VARIABLE_STATUS); - if (BpmProcessInstanceResultEnum.isEndResult(status)) { + if (BpmTaskStatustEnum.isEndStatus(status)) { log.error("[updateTaskExtCancel][taskId({}) 处于结果({}),无需进行更新]", taskId, status); return; } - updateTaskStatus(taskId, BpmProcessInstanceResultEnum.CANCEL.getResult()); + updateTaskStatus(taskId, BpmTaskStatustEnum.CANCEL.getStatus()); if (true) { return; @@ -438,7 +446,7 @@ public class BpmTaskServiceImpl implements BpmTaskService { // return; // } Integer status = (Integer) task.getTaskLocalVariables().get(BpmConstants.TASK_VARIABLE_STATUS); - if (BpmProcessInstanceResultEnum.isEndResult(status)) { + if (BpmTaskStatustEnum.isEndStatus(status)) { log.error("[updateTaskExtCancel][taskId({}) 处于结果({}),无需进行更新]", taskId, status); return; } @@ -446,7 +454,7 @@ public class BpmTaskServiceImpl implements BpmTaskService { // 更新任务 // taskExtMapper.updateById(new BpmTaskExtDO().setId(taskExt.getId()).setResult(BpmProcessInstanceResultEnum.CANCEL.getResult()) // .setEndTime(LocalDateTime.now()).setReason(BpmProcessInstanceDeleteReasonEnum.translateReason(task.getDeleteReason()))); - updateTaskStatus(taskId, BpmProcessInstanceResultEnum.CANCEL.getResult()); + updateTaskStatus(taskId, BpmTaskStatustEnum.CANCEL.getStatus()); } }); @@ -520,19 +528,11 @@ public class BpmTaskServiceImpl implements BpmTaskService { throw exception(TASK_IS_PENDING); } // 1.2 校验源头和目标节点的关系,并返回目标元素 - FlowElement targetElement = validateTargetTaskCanReturn(task.getTaskDefinitionKey(), reqVO.getTargetTaskDefinitionKey(), task.getProcessDefinitionId()); + FlowElement targetElement = validateTargetTaskCanReturn(task.getTaskDefinitionKey(), + reqVO.getTargetTaskDefinitionKey(), task.getProcessDefinitionId()); - // 3. 更新任务扩展表 TODO 芋艿:需要提前搞 - updateTaskStatus(task.getId(), BpmProcessInstanceResultEnum.BACK.getResult()); - - // 2. 调用 flowable 框架的回退逻辑 - returnTask0(task, targetElement, reqVO); - - // 3. 更新任务扩展表 -// updateTaskStatus(task.getId(), BpmProcessInstanceResultEnum.BACK.getResult()); -// taskExtMapper.updateByTaskId(new BpmTaskExtDO().setTaskId(task.getId()) -// .setResult(BpmProcessInstanceResultEnum.BACK.getResult()) -// .setEndTime(LocalDateTime.now()).setReason(reqVO.getReason())); + // 2. 调用 Flowable 框架的回退逻辑 + returnTask(task, targetElement, reqVO); } /** @@ -568,7 +568,7 @@ public class BpmTaskServiceImpl implements BpmTaskService { * @param targetElement 需要回退到的目标任务 * @param reqVO 前端参数封装 */ - public void returnTask0(Task currentTask, FlowElement targetElement, BpmTaskReturnReqVO reqVO) { + public void returnTask(Task currentTask, FlowElement targetElement, BpmTaskReturnReqVO reqVO) { // 1. 获得所有需要回撤的任务 taskDefinitionKey,用于稍后的 moveActivityIdsToSingleActivityId 回撤 // 1.1 获取所有正常进行的任务节点 Key List taskList = taskService.createTaskQuery().processInstanceId(currentTask.getProcessInstanceId()).list(); @@ -584,11 +584,11 @@ public class BpmTaskServiceImpl implements BpmTaskService { if (!returnTaskKeyList.contains(task.getTaskDefinitionKey())) { return; } + // 2.1 添加评论 taskService.addComment(task.getId(), currentTask.getProcessInstanceId(), - BpmCommentTypeEnum.BACK.getType().toString(), reqVO.getReason()); - - // TODO 芋艿:这里加下驳回的 - updateTaskStatus(task.getId(), BpmProcessInstanceResultEnum.BACK.getResult()); + BpmCommentTypeEnum.BACK.getType(), reqVO.getReason()); + // 2.2 更新 task 状态 + 原因 + updateTaskStatus(task.getId(), BpmTaskStatustEnum.BACK.getStatus(), reqVO.getReason()); }); // 3. 执行驳回 @@ -626,7 +626,7 @@ public class BpmTaskServiceImpl implements BpmTaskService { // taskExtMapper.updateByTaskId( // new BpmTaskExtDO().setTaskId(task.getId()).setResult(BpmProcessInstanceResultEnum.DELEGATE.getResult()) // .setReason(reqVO.getReason())); - updateTaskStatus(taskId, BpmProcessInstanceResultEnum.DELEGATE.getResult()); + updateTaskStatus(taskId, BpmTaskStatustEnum.DELEGATE.getStatus()); } /** @@ -677,7 +677,7 @@ public class BpmTaskServiceImpl implements BpmTaskService { // 2.5 保存当前任务修改后的值 taskService.saveTask(taskEntity); if (reqVO.getType().equals(BpmTaskAddSignTypeEnum.BEFORE.getType())) { - updateTaskStatus(taskEntity.getId(), BpmProcessInstanceResultEnum.WAIT.getResult()); // TODO 芋艿:貌似只能放在这个地方,不然会有并发修改的报错 + updateTaskStatus(taskEntity.getId(), BpmTaskStatustEnum.WAIT.getStatus()); // TODO 芋艿:貌似只能放在这个地方,不然会有并发修改的报错 } // 3. 创建加签任务 @@ -767,7 +767,7 @@ public class BpmTaskServiceImpl implements BpmTaskService { taskService.saveTask(task); // 3. TODO if (BpmTaskAddSignTypeEnum.AFTER.getType().equals(parentTask.getScopeType())) { - updateTaskStatus(task.getId(), BpmProcessInstanceResultEnum.WAIT.getResult()); + updateTaskStatus(task.getId(), BpmTaskStatustEnum.WAIT.getStatus()); } } diff --git a/yudao-module-bpm/yudao-spring-boot-starter-flowable/src/main/java/cn/iocoder/yudao/framework/flowable/core/util/BpmnModelUtils.java b/yudao-module-bpm/yudao-spring-boot-starter-flowable/src/main/java/cn/iocoder/yudao/framework/flowable/core/util/BpmnModelUtils.java index 6de30aa94..264dd7ec6 100644 --- a/yudao-module-bpm/yudao-spring-boot-starter-flowable/src/main/java/cn/iocoder/yudao/framework/flowable/core/util/BpmnModelUtils.java +++ b/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 { /** * 获得 BPMN 流程中,指定的元素们 * - * @param model + * @param model 模型 * @param clazz 指定元素。例如说,{@link UserTask}、{@link Gateway} 等等 * @return 元素们 */ diff --git a/yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/util/CrmAuditStatusUtils.java b/yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/util/CrmAuditStatusUtils.java index 665e98fbe..43e681c5e 100644 --- a/yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/util/CrmAuditStatusUtils.java +++ b/yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/util/CrmAuditStatusUtils.java @@ -1,7 +1,7 @@ package cn.iocoder.yudao.module.crm.util; import cn.hutool.core.lang.Assert; -import cn.iocoder.yudao.module.bpm.enums.task.BpmProcessInstanceResultEnum; +import cn.iocoder.yudao.module.bpm.enums.task.BpmTaskStatustEnum; import cn.iocoder.yudao.module.crm.enums.common.CrmAuditStatusEnum; /** @@ -17,9 +17,9 @@ public class CrmAuditStatusUtils { * @param bpmResult BPM 审批结果 */ public static Integer convertBpmResultToAuditStatus(Integer bpmResult) { - Integer auditStatus = BpmProcessInstanceResultEnum.APPROVE.getResult().equals(bpmResult) ? CrmAuditStatusEnum.APPROVE.getStatus() - : BpmProcessInstanceResultEnum.REJECT.getResult().equals(bpmResult) ? CrmAuditStatusEnum.REJECT.getStatus() - : BpmProcessInstanceResultEnum.CANCEL.getResult().equals(bpmResult) ? BpmProcessInstanceResultEnum.CANCEL.getResult() : null; + Integer auditStatus = BpmTaskStatustEnum.APPROVE.getStatus().equals(bpmResult) ? CrmAuditStatusEnum.APPROVE.getStatus() + : BpmTaskStatustEnum.REJECT.getStatus().equals(bpmResult) ? CrmAuditStatusEnum.REJECT.getStatus() + : BpmTaskStatustEnum.CANCEL.getStatus().equals(bpmResult) ? BpmTaskStatustEnum.CANCEL.getStatus() : null; Assert.notNull(auditStatus, "BPM 审批结果({}) 转换失败", bpmResult); return auditStatus; }