mirror of
				https://gitee.com/hhyykk/ipms-sjy.git
				synced 2025-10-31 18:28:43 +08:00 
			
		
		
		
	调整流程任务的审批结果,拆成 approve 和 reject 接口
This commit is contained in:
		| @@ -42,10 +42,17 @@ public class BpmTaskController { | ||||
|         return success(taskService.getDoneTaskPage(getLoginUserId(), pageVO)); | ||||
|     } | ||||
|  | ||||
|     @PutMapping("/complete") | ||||
|     @ApiOperation(value = "完成任务", notes = "审批通过 or 不通过") | ||||
|     public CommonResult<Boolean> completeTask(@Valid @RequestBody BpmTaskCompleteReqVO reqVO) { | ||||
|         taskService.completeTask(reqVO); | ||||
|     @PutMapping("/approve") | ||||
|     @ApiOperation("通过任务") | ||||
|     public CommonResult<Boolean> approveTask(@Valid @RequestBody BpmTaskApproveReqVO reqVO) { | ||||
|         taskService.approveTask(reqVO); | ||||
|         return success(true); | ||||
|     } | ||||
|  | ||||
|     @PutMapping("/reject") | ||||
|     @ApiOperation("不通过任务") | ||||
|     public CommonResult<Boolean> rejectTask(@Valid @RequestBody BpmTaskRejectReqVO reqVO) { | ||||
|         taskService.rejectTask(reqVO); | ||||
|         return success(true); | ||||
|     } | ||||
|  | ||||
|   | ||||
| @@ -10,18 +10,14 @@ import javax.validation.constraints.NotEmpty; | ||||
| import javax.validation.constraints.NotNull; | ||||
| import java.util.Map; | ||||
| 
 | ||||
| @ApiModel("流程任务的 Done 已办的分页 Request VO") | ||||
| @ApiModel("通过流程任务的 Request VO") | ||||
| @Data | ||||
| public class BpmTaskCompleteReqVO { | ||||
| public class BpmTaskApproveReqVO { | ||||
| 
 | ||||
|     @ApiModelProperty(value = "任务编号", required = true, example = "1024") | ||||
|     @NotEmpty(message = "任务编号不能为空") | ||||
|     private String id; | ||||
| 
 | ||||
|     @ApiModelProperty(value = "是否通过", required = true, example = "true", notes = "true 通过;false 不通过") | ||||
|     @NotNull(message = "是否通过不能为空") | ||||
|     private Boolean pass; | ||||
| 
 | ||||
|     @ApiModelProperty(value = "审批意见", required = true, example = "不错不错!") | ||||
|     @NotEmpty(message = "审批意见不能为空") | ||||
|     private String comment; | ||||
| @@ -0,0 +1,21 @@ | ||||
| package cn.iocoder.yudao.adminserver.modules.bpm.controller.task.vo.task; | ||||
|  | ||||
| import io.swagger.annotations.ApiModel; | ||||
| import io.swagger.annotations.ApiModelProperty; | ||||
| import lombok.Data; | ||||
|  | ||||
| import javax.validation.constraints.NotEmpty; | ||||
|  | ||||
| @ApiModel("不通过流程任务的 Request VO") | ||||
| @Data | ||||
| public class BpmTaskRejectReqVO { | ||||
|  | ||||
|     @ApiModelProperty(value = "任务编号", required = true, example = "1024") | ||||
|     @NotEmpty(message = "任务编号不能为空") | ||||
|     private String id; | ||||
|  | ||||
|     @ApiModelProperty(value = "审批意见", required = true, example = "不错不错!") | ||||
|     @NotEmpty(message = "审批意见不能为空") | ||||
|     private String comment; | ||||
|  | ||||
| } | ||||
| @@ -0,0 +1,19 @@ | ||||
| package cn.iocoder.yudao.adminserver.modules.bpm.enums.task; | ||||
|  | ||||
| import lombok.AllArgsConstructor; | ||||
| import lombok.Getter; | ||||
|  | ||||
| /** | ||||
|  * 流程实例的删除原因 | ||||
|  * | ||||
|  * @author 芋道源码 | ||||
|  */ | ||||
| @Getter | ||||
| @AllArgsConstructor | ||||
| public enum BpmProcessInstanceDeleteReasonEnum { | ||||
|  | ||||
|     REJECT_TASK("驳回任务"); | ||||
|  | ||||
|     private final String reason; | ||||
|  | ||||
| } | ||||
| @@ -13,7 +13,7 @@ import lombok.Getter; | ||||
| public enum BpmProcessInstanceResultEnum { | ||||
|  | ||||
|     PROCESS(1, "处理中"), | ||||
|     PASS(2, "通过"), | ||||
|     APPROVE(2, "通过"), | ||||
|     REJECT(3, "不通过"), | ||||
|     CANCEL(4, "已取消"); | ||||
|  | ||||
|   | ||||
| @@ -29,7 +29,7 @@ public class LeaveApplyEndProcessor implements ExecutionListener { | ||||
|         OALeaveDO updateDo = new OALeaveDO(); | ||||
|         updateDo.setId(Long.valueOf(businessKey)); | ||||
|         if (Objects.equals(approved, true)) { | ||||
|             updateDo.setStatus(BpmProcessInstanceResultEnum.PASS.getResult()); | ||||
|             updateDo.setStatus(BpmProcessInstanceResultEnum.APPROVE.getResult()); | ||||
|         } else { | ||||
|             updateDo.setStatus(BpmProcessInstanceResultEnum.REJECT.getResult()); | ||||
|         } | ||||
|   | ||||
| @@ -4,6 +4,8 @@ import cn.iocoder.yudao.adminserver.modules.bpm.controller.task.vo.instance.BpmP | ||||
| import cn.iocoder.yudao.adminserver.modules.bpm.controller.task.vo.instance.BpmProcessInstanceCreateReqVO; | ||||
| import cn.iocoder.yudao.adminserver.modules.bpm.controller.task.vo.instance.BpmProcessInstanceMyPageReqVO; | ||||
| import cn.iocoder.yudao.adminserver.modules.bpm.controller.task.vo.instance.BpmProcessInstancePageItemRespVO; | ||||
| import cn.iocoder.yudao.adminserver.modules.bpm.enums.task.BpmProcessInstanceDeleteReasonEnum; | ||||
| import cn.iocoder.yudao.adminserver.modules.bpm.enums.task.BpmProcessInstanceResultEnum; | ||||
| import cn.iocoder.yudao.framework.common.pojo.PageResult; | ||||
| import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils; | ||||
| import org.activiti.engine.runtime.ProcessInstance; | ||||
| @@ -37,6 +39,22 @@ public interface BpmProcessInstanceService { | ||||
|      */ | ||||
|     void cancelProcessInstance(Long userId, @Valid BpmProcessInstanceCancelReqVO cancelReqVO); | ||||
|  | ||||
|     /** | ||||
|      * 删除流程实例 | ||||
|      * | ||||
|      * @param id 流程编号 | ||||
|      * @param reason 删除原因。可选 {@link BpmProcessInstanceDeleteReasonEnum} | ||||
|      */ | ||||
|     void deleteProcessInstance(String id, String reason); | ||||
|  | ||||
|     /** | ||||
|      * 更新流程实例的结果 | ||||
|      * | ||||
|      * @param id 流程编号 | ||||
|      * @param result 结果,{@link BpmProcessInstanceResultEnum} | ||||
|      */ | ||||
|     void updateProcessInstanceResult(String id, Integer result); | ||||
|  | ||||
|     /** | ||||
|      * 获得流程实例的分页 | ||||
|      * | ||||
|   | ||||
| @@ -71,11 +71,18 @@ public interface BpmTaskService { | ||||
|     void updateTaskAssign(String id, Long userId); | ||||
|  | ||||
|     /** | ||||
|      * 完成任务(审批通过 / 不通过) | ||||
|      * 通过任务 | ||||
|      * | ||||
|      * @param taskReq 完成请求 | ||||
|      * @param reqVO 通过请求 | ||||
|      */ | ||||
|     void completeTask(@Valid BpmTaskCompleteReqVO taskReq); | ||||
|     void approveTask(@Valid BpmTaskApproveReqVO reqVO); | ||||
|  | ||||
|     /** | ||||
|      * 不通过任务 | ||||
|      * | ||||
|      * @param reqVO 不通过请求 | ||||
|      */ | ||||
|     void rejectTask(@Valid BpmTaskRejectReqVO reqVO); | ||||
|  | ||||
|     /** | ||||
|      * 根据任务id, 查询已经完成的用户任务,未完成的用户任务 | ||||
|   | ||||
| @@ -140,9 +140,18 @@ public class BpmProcessInstanceServiceImpl implements BpmProcessInstanceService | ||||
|         // 通过删除流程实例,实现流程实例的取消 | ||||
|         runtimeService.deleteProcessInstance(cancelReqVO.getId(), cancelReqVO.getReason()); | ||||
|         // 更新流程实例的拓展表为取消状态 | ||||
|         processInstanceExtMapper.updateByProcessInstanceId(cancelReqVO.getId(), | ||||
|                 new BpmProcessInstanceExtDO().setStatus(BpmProcessInstanceStatusEnum.FINISH.getStatus()) | ||||
|                         .setResult(BpmProcessInstanceResultEnum.CANCEL.getResult())); | ||||
|         updateProcessInstanceResult(cancelReqVO.getId(), BpmProcessInstanceResultEnum.CANCEL.getResult()); | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public void deleteProcessInstance(String id, String reason) { | ||||
|         runtimeService.deleteProcessInstance(id, reason); | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public void updateProcessInstanceResult(String id, Integer result) { | ||||
|         processInstanceExtMapper.updateByProcessInstanceId(id, new BpmProcessInstanceExtDO() | ||||
|                 .setStatus(BpmProcessInstanceStatusEnum.FINISH.getStatus()).setResult(result)); | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|   | ||||
| @@ -5,6 +5,8 @@ import cn.hutool.core.io.IoUtil; | ||||
| import cn.hutool.core.util.StrUtil; | ||||
| import cn.iocoder.yudao.adminserver.modules.bpm.controller.task.vo.task.*; | ||||
| import cn.iocoder.yudao.adminserver.modules.bpm.convert.task.BpmTaskConvert; | ||||
| import cn.iocoder.yudao.adminserver.modules.bpm.enums.task.BpmProcessInstanceDeleteReasonEnum; | ||||
| import cn.iocoder.yudao.adminserver.modules.bpm.enums.task.BpmProcessInstanceResultEnum; | ||||
| import cn.iocoder.yudao.adminserver.modules.bpm.service.task.BpmProcessInstanceService; | ||||
| import cn.iocoder.yudao.adminserver.modules.bpm.service.task.BpmTaskService; | ||||
| import cn.iocoder.yudao.adminserver.modules.system.service.user.SysUserService; | ||||
| @@ -37,6 +39,7 @@ import org.springframework.transaction.annotation.Transactional; | ||||
| import org.springframework.util.ObjectUtils; | ||||
|  | ||||
| import javax.annotation.Resource; | ||||
| import javax.validation.Valid; | ||||
| import java.io.IOException; | ||||
| import java.io.InputStream; | ||||
| import java.util.*; | ||||
| @@ -158,7 +161,7 @@ public class BpmTaskServiceImpl implements BpmTaskService { | ||||
|  | ||||
|     @Override | ||||
|     @Transactional(rollbackFor = Exception.class) | ||||
|     public void completeTask(BpmTaskCompleteReqVO reqVO) { | ||||
|     public void approveTask(BpmTaskApproveReqVO reqVO) { | ||||
|         // 校验任务存在 | ||||
|         Task task = getTask(reqVO.getId()); | ||||
|         if (task == null) { | ||||
| @@ -170,8 +173,31 @@ public class BpmTaskServiceImpl implements BpmTaskService { | ||||
|             throw exception(PROCESS_INSTANCE_NOT_EXISTS); | ||||
|         } | ||||
|  | ||||
|         // 完成(审批)任务 | ||||
|         taskService.complete(task.getId(), instance.getProcessVariables()); | ||||
|         // 完成任务,审批通过 | ||||
|         taskService.complete(task.getId(), instance.getProcessVariables()); // TODO 芋艿:variables 的选择 | ||||
|  | ||||
|         // TODO 芋艿:添加评论 | ||||
| //        taskService.addComment(task.getId(), task.getProcessInstanceId(), reqVO.getComment()); | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public void rejectTask(@Valid BpmTaskRejectReqVO reqVO) { | ||||
|         // 校验任务存在 | ||||
|         Task task = getTask(reqVO.getId()); | ||||
|         if (task == null) { | ||||
|             throw exception(TASK_COMPLETE_FAIL_NOT_EXISTS); | ||||
|         } | ||||
|         // 校验流程实例存在 | ||||
|         ProcessInstance instance = processInstanceService.getProcessInstance(task.getProcessInstanceId()); | ||||
|         if (instance == null) { | ||||
|             throw exception(PROCESS_INSTANCE_NOT_EXISTS); | ||||
|         } | ||||
|  | ||||
|         // 删除流程实例,以实现驳回任务时,取消整个审批流程 | ||||
|         processInstanceService.deleteProcessInstance(instance.getId(), BpmProcessInstanceDeleteReasonEnum.REJECT_TASK.getReason()); | ||||
|         // 更新流程实例为不通过 | ||||
|         processInstanceService.updateProcessInstanceResult(instance.getProcessInstanceId(), | ||||
|                 BpmProcessInstanceResultEnum.REJECT.getResult()); | ||||
|  | ||||
|         // TODO 芋艿:添加评论 | ||||
| //        taskService.addComment(task.getId(), task.getProcessInstanceId(), reqVO.getComment()); | ||||
|   | ||||
| @@ -1,6 +1,7 @@ | ||||
| package cn.iocoder.yudao.adminserver.modules.bpm.service.task.listener; | ||||
|  | ||||
| import cn.iocoder.yudao.adminserver.modules.bpm.dal.dataobject.task.BpmProcessInstanceExtDO; | ||||
| import cn.iocoder.yudao.adminserver.modules.bpm.enums.task.BpmProcessInstanceResultEnum; | ||||
| import cn.iocoder.yudao.adminserver.modules.bpm.service.task.BpmProcessInstanceService; | ||||
| import org.activiti.engine.delegate.event.ActivitiEvent; | ||||
| import org.activiti.engine.delegate.event.ActivitiEventListener; | ||||
| @@ -31,7 +32,9 @@ public class BpmProcessInstanceEventListener implements ActivitiEventListener { | ||||
|         // 正常完成 | ||||
|         if (event.getType() == ActivitiEventType.PROCESS_COMPLETED | ||||
|             || event.getType() == ActivitiEventType.PROCESS_COMPLETED_WITH_ERROR_END_EVENT) { | ||||
|             // TODO 芋艿:更新 | ||||
|             // 正常完成,说明所有流程任务都是审批通过 | ||||
|             processInstanceService.updateProcessInstanceResult(event.getProcessInstanceId(), | ||||
|                     BpmProcessInstanceResultEnum.APPROVE.getResult()); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 YunaiV
					YunaiV