mirror of
				https://gitee.com/hhyykk/ipms-sjy.git
				synced 2025-10-31 18:28:43 +08:00 
			
		
		
		
	【功能修改】 新增任务抄送接口
This commit is contained in:
		| @@ -1,11 +1,14 @@ | ||||
| -- ---------------------------- | ||||
| -- 流程抄送表新加流程活动编号 | ||||
| -- ---------------------------- | ||||
| ALTER TABLE `pro-test`.`bpm_process_instance_copy` | ||||
| ALTER TABLE `bpm_process_instance_copy` | ||||
|     ADD COLUMN `activity_id` varchar(64) NULL COMMENT '流程活动编号' AFTER `category`, | ||||
|     MODIFY COLUMN `task_id` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '' COMMENT '任务编号' AFTER `category`; | ||||
|  | ||||
| ALTER TABLE `pro-test`.`bpm_process_definition_info` | ||||
| ALTER TABLE `bpm_process_definition_info` | ||||
|     ADD COLUMN `model_type` tinyint NOT NULL DEFAULT 10 COMMENT '流程模型的类型' AFTER `model_id`, | ||||
|     ADD COLUMN `simple_model` json NULL COMMENT 'SIMPLE 设计器模型数据' AFTER `form_custom_view_path`, | ||||
|     ADD COLUMN `visible` bit(1) NOT NULL DEFAULT 1 COMMENT '是否可见' AFTER `simple_model`; | ||||
|     ADD COLUMN `visible` bit(1) NOT NULL DEFAULT 1 COMMENT '是否可见' AFTER `simple_model`; | ||||
|  | ||||
| ALTER TABLE `bpm_process_instance_copy` | ||||
|     ADD COLUMN `reason` varchar(256) NULL COMMENT '抄送意见' AFTER `task_name`; | ||||
| @@ -210,6 +210,14 @@ public class BpmTaskController { | ||||
|         return success(true); | ||||
|     } | ||||
|  | ||||
|     @PutMapping("/copy") | ||||
|     @Operation(summary = "抄送任务") | ||||
|     @PreAuthorize("@ss.hasPermission('bpm:task:update')") | ||||
|     public CommonResult<Boolean> copyTask(@Valid @RequestBody BpmTaskCopyReqVO reqVO) { | ||||
|         taskService.copyTask(getLoginUserId(), reqVO); | ||||
|         return success(true); | ||||
|     } | ||||
|  | ||||
|     @GetMapping("/list-by-parent-task-id") | ||||
|     @Operation(summary = "获得指定父级任务的子任务列表") // 目前用于,减签的时候,获得子任务列表 | ||||
|     @Parameter(name = "parentTaskId", description = "父级任务编号", required = true) | ||||
|   | ||||
| @@ -19,9 +19,9 @@ public class BpmProcessInstanceCopyRespVO { | ||||
|  | ||||
|     @Schema(description = "流程实例编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "A233") | ||||
|     private String processInstanceId; | ||||
|     @Schema(description = "流程实例的名称") | ||||
|     @Schema(description = "流程实例的名称",requiredMode = Schema.RequiredMode.REQUIRED, example = "测试") | ||||
|     private String processInstanceName; | ||||
|     @Schema(description = "流程实例的发起时间") | ||||
|     @Schema(description = "流程实例的发起时间",requiredMode = Schema.RequiredMode.REQUIRED) | ||||
|     private LocalDateTime processInstanceStartTime; | ||||
|  | ||||
|     @Schema(description = "抄送的节点的活动编号") | ||||
| @@ -31,12 +31,14 @@ public class BpmProcessInstanceCopyRespVO { | ||||
|     @Schema(description = "发起抄送的任务名称") | ||||
|     private String taskName; | ||||
|  | ||||
|     @Schema(description = "抄送人") | ||||
|     @Schema(description = "抄送人", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") | ||||
|     private String creator; | ||||
|     @Schema(description = "抄送人昵称") | ||||
|     private String creatorName; | ||||
|     @Schema(description = "抄送人意见") | ||||
|     private String reason; | ||||
|  | ||||
|     @Schema(description = "抄送时间") | ||||
|     @Schema(description = "抄送时间", requiredMode = Schema.RequiredMode.REQUIRED) | ||||
|     private LocalDateTime createTime; | ||||
|  | ||||
| } | ||||
|   | ||||
| @@ -19,7 +19,7 @@ public class BpmTaskApproveReqVO { | ||||
|     @NotEmpty(message = "审批意见不能为空") | ||||
|     private String reason; | ||||
|  | ||||
|     @Schema(description = "抄送的用户编号数组", requiredMode = Schema.RequiredMode.REQUIRED, example = "1,2") | ||||
|     @Schema(description = "抄送的用户编号数组", example = "1,2") | ||||
|     private Collection<Long> copyUserIds; | ||||
|  | ||||
|     @Schema(description = "变量实例(动态表单)", requiredMode = Schema.RequiredMode.REQUIRED) | ||||
|   | ||||
| @@ -0,0 +1,23 @@ | ||||
| package cn.iocoder.yudao.module.bpm.controller.admin.task.vo.task; | ||||
|  | ||||
| import io.swagger.v3.oas.annotations.media.Schema; | ||||
| import jakarta.validation.constraints.NotEmpty; | ||||
| import lombok.Data; | ||||
|  | ||||
| import java.util.Collection; | ||||
|  | ||||
| @Schema(description = "管理后台 - 抄送流程任务的 Request VO") | ||||
| @Data | ||||
| public class BpmTaskCopyReqVO { | ||||
|  | ||||
|     @Schema(description = "任务编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024") | ||||
|     @NotEmpty(message = "任务编号不能为空") | ||||
|     private String id; | ||||
|  | ||||
|     @Schema(description = "抄送的用户编号数组", requiredMode = Schema.RequiredMode.REQUIRED, example = "[1,2]") | ||||
|     @NotEmpty(message = "抄送用户不能为空") | ||||
|     private Collection<Long> copyUserIds; | ||||
|  | ||||
|     @Schema(description = "抄送意见", example = "帮忙看看!") | ||||
|     private String reason; | ||||
| } | ||||
| @@ -74,4 +74,9 @@ public class BpmProcessInstanceCopyDO extends BaseDO { | ||||
|      */ | ||||
|     private Long userId; | ||||
|  | ||||
|     /** | ||||
|      * 抄送意见 | ||||
|      */ | ||||
|     private String reason; | ||||
|  | ||||
| } | ||||
|   | ||||
| @@ -15,7 +15,7 @@ import static cn.iocoder.yudao.module.bpm.framework.flowable.core.listener.BpmCo | ||||
|  | ||||
| /** | ||||
|  * 处理抄送用户的 {@link JavaDelegate} 的实现类 | ||||
|  * | ||||
|  * <p> | ||||
|  * 目前只有快搭模式的【抄送节点】使用 | ||||
|  * | ||||
|  * @author jason | ||||
| @@ -40,7 +40,7 @@ public class BpmCopyTaskDelegate implements JavaDelegate { | ||||
|         } | ||||
|         // 2. 执行抄送 | ||||
|         FlowElement currentFlowElement = execution.getCurrentFlowElement(); | ||||
|         processInstanceCopyService.createProcessInstanceCopy(userIds, execution.getProcessInstanceId(), | ||||
|         processInstanceCopyService.createProcessInstanceCopy(userIds, null, execution.getProcessInstanceId(), | ||||
|                 currentFlowElement.getId(), null, currentFlowElement.getName()); | ||||
|     } | ||||
|  | ||||
|   | ||||
| @@ -18,21 +18,23 @@ public interface BpmProcessInstanceCopyService { | ||||
|      * 流程实例的抄送 | ||||
|      * | ||||
|      * @param userIds 抄送的用户编号 | ||||
|      * @param reason 抄送意见 | ||||
|      * @param taskId 流程任务编号 | ||||
|      */ | ||||
|     void createProcessInstanceCopy(Collection<Long> userIds, String taskId); | ||||
|     void createProcessInstanceCopy(Collection<Long> userIds, String reason, String taskId); | ||||
|  | ||||
|     /** | ||||
|      * 流程实例的抄送 | ||||
|      * | ||||
|      * @param userIds 抄送的用户编号 | ||||
|      * @param reason 抄送意见 | ||||
|      * @param processInstanceId 流程编号 | ||||
|      * @param activityId 流程活动编号 id (对应 BPMN XML 节点 Id) | ||||
|      * // TODO 芋艿这个 taskId 是不是可以不要了 | ||||
|      * @param taskId 任务编号 | ||||
|      * @param taskName 任务名称 | ||||
|      */ | ||||
|     void createProcessInstanceCopy(Collection<Long> userIds, String processInstanceId, String activityId, String taskId, String taskName); | ||||
|     void createProcessInstanceCopy(Collection<Long> userIds, String reason, String processInstanceId, String activityId, | ||||
|                                    String taskId, String taskName); | ||||
|  | ||||
|     /** | ||||
|      * 获得抄送的流程的分页 | ||||
| @@ -43,14 +45,5 @@ public interface BpmProcessInstanceCopyService { | ||||
|      */ | ||||
|     PageResult<BpmProcessInstanceCopyDO> getProcessInstanceCopyPage(Long userId, | ||||
|                                                                     BpmProcessInstanceCopyPageReqVO pageReqVO); | ||||
|     // TODO @芋艿:重点在 review 下 | ||||
|     /** | ||||
|      * 通过流程实例和流程活动编号获取抄送人的 Id | ||||
|      * | ||||
|      * @param processInstanceId 流程实例 Id | ||||
|      * @param activityId 流程活动编号 Id | ||||
|      * @return 抄送人 Ids | ||||
|      */ | ||||
|     Set<Long> getCopyUserIds(String processInstanceId, String activityId); | ||||
|  | ||||
| } | ||||
|   | ||||
| @@ -49,17 +49,18 @@ public class BpmProcessInstanceCopyServiceImpl implements BpmProcessInstanceCopy | ||||
|     private BpmProcessDefinitionService processDefinitionService; | ||||
|  | ||||
|     @Override | ||||
|     public void createProcessInstanceCopy(Collection<Long> userIds, String taskId) { | ||||
|     public void createProcessInstanceCopy(Collection<Long> userIds, String reason, String taskId) { | ||||
|         Task task = taskService.getTask(taskId); | ||||
|         if (ObjectUtil.isNull(task)) { | ||||
|             throw exception(ErrorCodeConstants.TASK_NOT_EXISTS); | ||||
|         } | ||||
|         String processInstanceId = task.getProcessInstanceId(); | ||||
|         createProcessInstanceCopy(userIds, processInstanceId, task.getTaskDefinitionKey(), task.getId(), task.getName()); | ||||
|         createProcessInstanceCopy(userIds, reason, processInstanceId, task.getTaskDefinitionKey(), task.getId(), task.getName()); | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public void createProcessInstanceCopy(Collection<Long> userIds, String processInstanceId, String activityId, String taskId, String taskName) { | ||||
|     public void createProcessInstanceCopy(Collection<Long> userIds, String reason, String processInstanceId, String activityId, | ||||
|                                           String taskId, String taskName) { | ||||
|         // 1.1 校验流程实例存在 | ||||
|         ProcessInstance processInstance = processInstanceService.getProcessInstance(processInstanceId); | ||||
|         if (processInstance == null) { | ||||
| @@ -74,7 +75,7 @@ public class BpmProcessInstanceCopyServiceImpl implements BpmProcessInstanceCopy | ||||
|  | ||||
|         // 2. 创建抄送流程 | ||||
|         List<BpmProcessInstanceCopyDO> copyList = convertList(userIds, userId -> new BpmProcessInstanceCopyDO() | ||||
|                 .setUserId(userId).setStartUserId(Long.valueOf(processInstance.getStartUserId())) | ||||
|                 .setUserId(userId).setReason(reason).setStartUserId(Long.valueOf(processInstance.getStartUserId())) | ||||
|                 .setProcessInstanceId(processInstanceId).setProcessInstanceName(processInstance.getName()) | ||||
|                 .setCategory(processDefinition.getCategory()).setActivityId(activityId) | ||||
|                 .setTaskId(taskId).setTaskName(taskName)); | ||||
| @@ -87,10 +88,4 @@ public class BpmProcessInstanceCopyServiceImpl implements BpmProcessInstanceCopy | ||||
|         return processInstanceCopyMapper.selectPage(userId, pageReqVO); | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public Set<Long> getCopyUserIds(String processInstanceId, String activityId) { | ||||
|         return CollectionUtils.convertSet(processInstanceCopyMapper.selectListByProcessInstanceIdAndActivityId(processInstanceId, activityId), | ||||
|                 BpmProcessInstanceCopyDO::getUserId); | ||||
|     } | ||||
|  | ||||
| } | ||||
|   | ||||
| @@ -201,6 +201,14 @@ public interface BpmTaskService { | ||||
|      */ | ||||
|     void deleteSignTask(Long userId, BpmTaskSignDeleteReqVO reqVO); | ||||
|  | ||||
|     /** | ||||
|      * 抄送任务 | ||||
|      * | ||||
|      * @param userId 用户编号 | ||||
|      * @param reqVO  通过请求 | ||||
|      */ | ||||
|     void copyTask(Long userId, @Valid BpmTaskCopyReqVO reqVO); | ||||
|  | ||||
|     // ========== Event 事件相关方法 ========== | ||||
|  | ||||
|     /** | ||||
|   | ||||
| @@ -354,7 +354,7 @@ public class BpmTaskServiceImpl implements BpmTaskService { | ||||
|  | ||||
|         // 2. 抄送用户 | ||||
|         if (CollUtil.isNotEmpty(reqVO.getCopyUserIds())) { | ||||
|             processInstanceCopyService.createProcessInstanceCopy(reqVO.getCopyUserIds(), reqVO.getId()); | ||||
|             processInstanceCopyService.createProcessInstanceCopy(reqVO.getCopyUserIds(), null, reqVO.getId()); | ||||
|         } | ||||
|  | ||||
|         // 情况一:被委派的任务,不调用 complete 去完成任务 | ||||
| @@ -868,6 +868,11 @@ public class BpmTaskServiceImpl implements BpmTaskService { | ||||
|         handleParentTaskIfSign(task.getParentTaskId()); | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public void copyTask(Long userId, BpmTaskCopyReqVO reqVO) { | ||||
|         processInstanceCopyService.createProcessInstanceCopy(reqVO.getCopyUserIds(), reqVO.getReason(), reqVO.getId()); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * 校验任务是否能被减签 | ||||
|      * | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 jason
					jason