mirror of
				https://gitee.com/hhyykk/ipms-sjy.git
				synced 2025-11-04 04:08:43 +08:00 
			
		
		
		
	【功能修改】 新增任务抄送接口
This commit is contained in:
		@@ -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