【功能修改】 新增任务抄送接口

This commit is contained in:
jason 2024-10-10 23:04:17 +08:00
parent 405ecf054b
commit c6c2023440
11 changed files with 75 additions and 33 deletions

View File

@ -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`, 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`; 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 `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 `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`;

View File

@ -210,6 +210,14 @@ public class BpmTaskController {
return success(true); 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") @GetMapping("/list-by-parent-task-id")
@Operation(summary = "获得指定父级任务的子任务列表") // 目前用于减签的时候获得子任务列表 @Operation(summary = "获得指定父级任务的子任务列表") // 目前用于减签的时候获得子任务列表
@Parameter(name = "parentTaskId", description = "父级任务编号", required = true) @Parameter(name = "parentTaskId", description = "父级任务编号", required = true)

View File

@ -19,9 +19,9 @@ public class BpmProcessInstanceCopyRespVO {
@Schema(description = "流程实例编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "A233") @Schema(description = "流程实例编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "A233")
private String processInstanceId; private String processInstanceId;
@Schema(description = "流程实例的名称") @Schema(description = "流程实例的名称",requiredMode = Schema.RequiredMode.REQUIRED, example = "测试")
private String processInstanceName; private String processInstanceName;
@Schema(description = "流程实例的发起时间") @Schema(description = "流程实例的发起时间",requiredMode = Schema.RequiredMode.REQUIRED)
private LocalDateTime processInstanceStartTime; private LocalDateTime processInstanceStartTime;
@Schema(description = "抄送的节点的活动编号") @Schema(description = "抄送的节点的活动编号")
@ -31,12 +31,14 @@ public class BpmProcessInstanceCopyRespVO {
@Schema(description = "发起抄送的任务名称") @Schema(description = "发起抄送的任务名称")
private String taskName; private String taskName;
@Schema(description = "抄送人") @Schema(description = "抄送人", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
private String creator; private String creator;
@Schema(description = "抄送人昵称") @Schema(description = "抄送人昵称")
private String creatorName; private String creatorName;
@Schema(description = "抄送人意见")
private String reason;
@Schema(description = "抄送时间") @Schema(description = "抄送时间", requiredMode = Schema.RequiredMode.REQUIRED)
private LocalDateTime createTime; private LocalDateTime createTime;
} }

View File

@ -19,7 +19,7 @@ public class BpmTaskApproveReqVO {
@NotEmpty(message = "审批意见不能为空") @NotEmpty(message = "审批意见不能为空")
private String reason; private String reason;
@Schema(description = "抄送的用户编号数组", requiredMode = Schema.RequiredMode.REQUIRED, example = "1,2") @Schema(description = "抄送的用户编号数组", example = "1,2")
private Collection<Long> copyUserIds; private Collection<Long> copyUserIds;
@Schema(description = "变量实例(动态表单)", requiredMode = Schema.RequiredMode.REQUIRED) @Schema(description = "变量实例(动态表单)", requiredMode = Schema.RequiredMode.REQUIRED)

View File

@ -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;
}

View File

@ -74,4 +74,9 @@ public class BpmProcessInstanceCopyDO extends BaseDO {
*/ */
private Long userId; private Long userId;
/**
* 抄送意见
*/
private String reason;
} }

View File

@ -15,7 +15,7 @@ import static cn.iocoder.yudao.module.bpm.framework.flowable.core.listener.BpmCo
/** /**
* 处理抄送用户的 {@link JavaDelegate} 的实现类 * 处理抄送用户的 {@link JavaDelegate} 的实现类
* * <p>
* 目前只有快搭模式的抄送节点使用 * 目前只有快搭模式的抄送节点使用
* *
* @author jason * @author jason
@ -40,7 +40,7 @@ public class BpmCopyTaskDelegate implements JavaDelegate {
} }
// 2. 执行抄送 // 2. 执行抄送
FlowElement currentFlowElement = execution.getCurrentFlowElement(); FlowElement currentFlowElement = execution.getCurrentFlowElement();
processInstanceCopyService.createProcessInstanceCopy(userIds, execution.getProcessInstanceId(), processInstanceCopyService.createProcessInstanceCopy(userIds, null, execution.getProcessInstanceId(),
currentFlowElement.getId(), null, currentFlowElement.getName()); currentFlowElement.getId(), null, currentFlowElement.getName());
} }

View File

@ -18,21 +18,23 @@ public interface BpmProcessInstanceCopyService {
* 流程实例的抄送 * 流程实例的抄送
* *
* @param userIds 抄送的用户编号 * @param userIds 抄送的用户编号
* @param reason 抄送意见
* @param taskId 流程任务编号 * @param taskId 流程任务编号
*/ */
void createProcessInstanceCopy(Collection<Long> userIds, String taskId); void createProcessInstanceCopy(Collection<Long> userIds, String reason, String taskId);
/** /**
* 流程实例的抄送 * 流程实例的抄送
* *
* @param userIds 抄送的用户编号 * @param userIds 抄送的用户编号
* @param reason 抄送意见
* @param processInstanceId 流程编号 * @param processInstanceId 流程编号
* @param activityId 流程活动编号 id (对应 BPMN XML 节点 Id) * @param activityId 流程活动编号 id (对应 BPMN XML 节点 Id)
* // TODO 芋艿这个 taskId 是不是可以不要了
* @param taskId 任务编号 * @param taskId 任务编号
* @param taskName 任务名称 * @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, PageResult<BpmProcessInstanceCopyDO> getProcessInstanceCopyPage(Long userId,
BpmProcessInstanceCopyPageReqVO pageReqVO); BpmProcessInstanceCopyPageReqVO pageReqVO);
// TODO @芋艿重点在 review
/**
* 通过流程实例和流程活动编号获取抄送人的 Id
*
* @param processInstanceId 流程实例 Id
* @param activityId 流程活动编号 Id
* @return 抄送人 Ids
*/
Set<Long> getCopyUserIds(String processInstanceId, String activityId);
} }

View File

@ -49,17 +49,18 @@ public class BpmProcessInstanceCopyServiceImpl implements BpmProcessInstanceCopy
private BpmProcessDefinitionService processDefinitionService; private BpmProcessDefinitionService processDefinitionService;
@Override @Override
public void createProcessInstanceCopy(Collection<Long> userIds, String taskId) { public void createProcessInstanceCopy(Collection<Long> userIds, String reason, String taskId) {
Task task = taskService.getTask(taskId); Task task = taskService.getTask(taskId);
if (ObjectUtil.isNull(task)) { if (ObjectUtil.isNull(task)) {
throw exception(ErrorCodeConstants.TASK_NOT_EXISTS); throw exception(ErrorCodeConstants.TASK_NOT_EXISTS);
} }
String processInstanceId = task.getProcessInstanceId(); String processInstanceId = task.getProcessInstanceId();
createProcessInstanceCopy(userIds, processInstanceId, task.getTaskDefinitionKey(), task.getId(), task.getName()); createProcessInstanceCopy(userIds, reason, processInstanceId, task.getTaskDefinitionKey(), task.getId(), task.getName());
} }
@Override @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 校验流程实例存在 // 1.1 校验流程实例存在
ProcessInstance processInstance = processInstanceService.getProcessInstance(processInstanceId); ProcessInstance processInstance = processInstanceService.getProcessInstance(processInstanceId);
if (processInstance == null) { if (processInstance == null) {
@ -74,7 +75,7 @@ public class BpmProcessInstanceCopyServiceImpl implements BpmProcessInstanceCopy
// 2. 创建抄送流程 // 2. 创建抄送流程
List<BpmProcessInstanceCopyDO> copyList = convertList(userIds, userId -> new BpmProcessInstanceCopyDO() 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()) .setProcessInstanceId(processInstanceId).setProcessInstanceName(processInstance.getName())
.setCategory(processDefinition.getCategory()).setActivityId(activityId) .setCategory(processDefinition.getCategory()).setActivityId(activityId)
.setTaskId(taskId).setTaskName(taskName)); .setTaskId(taskId).setTaskName(taskName));
@ -87,10 +88,4 @@ public class BpmProcessInstanceCopyServiceImpl implements BpmProcessInstanceCopy
return processInstanceCopyMapper.selectPage(userId, pageReqVO); return processInstanceCopyMapper.selectPage(userId, pageReqVO);
} }
@Override
public Set<Long> getCopyUserIds(String processInstanceId, String activityId) {
return CollectionUtils.convertSet(processInstanceCopyMapper.selectListByProcessInstanceIdAndActivityId(processInstanceId, activityId),
BpmProcessInstanceCopyDO::getUserId);
}
} }

View File

@ -201,6 +201,14 @@ public interface BpmTaskService {
*/ */
void deleteSignTask(Long userId, BpmTaskSignDeleteReqVO reqVO); void deleteSignTask(Long userId, BpmTaskSignDeleteReqVO reqVO);
/**
* 抄送任务
*
* @param userId 用户编号
* @param reqVO 通过请求
*/
void copyTask(Long userId, @Valid BpmTaskCopyReqVO reqVO);
// ========== Event 事件相关方法 ========== // ========== Event 事件相关方法 ==========
/** /**

View File

@ -354,7 +354,7 @@ public class BpmTaskServiceImpl implements BpmTaskService {
// 2. 抄送用户 // 2. 抄送用户
if (CollUtil.isNotEmpty(reqVO.getCopyUserIds())) { if (CollUtil.isNotEmpty(reqVO.getCopyUserIds())) {
processInstanceCopyService.createProcessInstanceCopy(reqVO.getCopyUserIds(), reqVO.getId()); processInstanceCopyService.createProcessInstanceCopy(reqVO.getCopyUserIds(), null, reqVO.getId());
} }
// 情况一被委派的任务不调用 complete 去完成任务 // 情况一被委派的任务不调用 complete 去完成任务
@ -868,6 +868,11 @@ public class BpmTaskServiceImpl implements BpmTaskService {
handleParentTaskIfSign(task.getParentTaskId()); handleParentTaskIfSign(task.getParentTaskId());
} }
@Override
public void copyTask(Long userId, BpmTaskCopyReqVO reqVO) {
processInstanceCopyService.createProcessInstanceCopy(reqVO.getCopyUserIds(), reqVO.getReason(), reqVO.getId());
}
/** /**
* 校验任务是否能被减签 * 校验任务是否能被减签
* *