Commit c6c20234404536803f1e9d7fe0095e50db4c54a1

Authored by jason
1 parent 405ecf05

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

sql/mysql/bpm_update.sql
1 1 -- ----------------------------
2 2 -- 流程抄送表新加流程活动编号
3 3 -- ----------------------------
4   -ALTER TABLE `pro-test`.`bpm_process_instance_copy`
  4 +ALTER TABLE `bpm_process_instance_copy`
5 5 ADD COLUMN `activity_id` varchar(64) NULL COMMENT '流程活动编号' AFTER `category`,
6 6 MODIFY COLUMN `task_id` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '' COMMENT '任务编号' AFTER `category`;
7 7  
8   -ALTER TABLE `pro-test`.`bpm_process_definition_info`
  8 +ALTER TABLE `bpm_process_definition_info`
9 9 ADD COLUMN `model_type` tinyint NOT NULL DEFAULT 10 COMMENT '流程模型的类型' AFTER `model_id`,
10 10 ADD COLUMN `simple_model` json NULL COMMENT 'SIMPLE 设计器模型数据' AFTER `form_custom_view_path`,
11   - ADD COLUMN `visible` bit(1) NOT NULL DEFAULT 1 COMMENT '是否可见' AFTER `simple_model`;
12 11 \ No newline at end of file
  12 + ADD COLUMN `visible` bit(1) NOT NULL DEFAULT 1 COMMENT '是否可见' AFTER `simple_model`;
  13 +
  14 +ALTER TABLE `bpm_process_instance_copy`
  15 + ADD COLUMN `reason` varchar(256) NULL COMMENT '抄送意见' AFTER `task_name`;
13 16 \ No newline at end of file
... ...
yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/task/BpmTaskController.java
... ... @@ -210,6 +210,14 @@ public class BpmTaskController {
210 210 return success(true);
211 211 }
212 212  
  213 + @PutMapping("/copy")
  214 + @Operation(summary = "抄送任务")
  215 + @PreAuthorize("@ss.hasPermission('bpm:task:update')")
  216 + public CommonResult<Boolean> copyTask(@Valid @RequestBody BpmTaskCopyReqVO reqVO) {
  217 + taskService.copyTask(getLoginUserId(), reqVO);
  218 + return success(true);
  219 + }
  220 +
213 221 @GetMapping("/list-by-parent-task-id")
214 222 @Operation(summary = "获得指定父级任务的子任务列表") // 目前用于,减签的时候,获得子任务列表
215 223 @Parameter(name = "parentTaskId", description = "父级任务编号", required = true)
... ...
yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/task/vo/cc/BpmProcessInstanceCopyRespVO.java
... ... @@ -19,9 +19,9 @@ public class BpmProcessInstanceCopyRespVO {
19 19  
20 20 @Schema(description = "流程实例编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "A233")
21 21 private String processInstanceId;
22   - @Schema(description = "流程实例的名称")
  22 + @Schema(description = "流程实例的名称",requiredMode = Schema.RequiredMode.REQUIRED, example = "测试")
23 23 private String processInstanceName;
24   - @Schema(description = "流程实例的发起时间")
  24 + @Schema(description = "流程实例的发起时间",requiredMode = Schema.RequiredMode.REQUIRED)
25 25 private LocalDateTime processInstanceStartTime;
26 26  
27 27 @Schema(description = "抄送的节点的活动编号")
... ... @@ -31,12 +31,14 @@ public class BpmProcessInstanceCopyRespVO {
31 31 @Schema(description = "发起抄送的任务名称")
32 32 private String taskName;
33 33  
34   - @Schema(description = "抄送人")
  34 + @Schema(description = "抄送人", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
35 35 private String creator;
36 36 @Schema(description = "抄送人昵称")
37 37 private String creatorName;
  38 + @Schema(description = "抄送人意见")
  39 + private String reason;
38 40  
39   - @Schema(description = "抄送时间")
  41 + @Schema(description = "抄送时间", requiredMode = Schema.RequiredMode.REQUIRED)
40 42 private LocalDateTime createTime;
41 43  
42 44 }
... ...
yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/task/vo/task/BpmTaskApproveReqVO.java
... ... @@ -19,7 +19,7 @@ public class BpmTaskApproveReqVO {
19 19 @NotEmpty(message = "审批意见不能为空")
20 20 private String reason;
21 21  
22   - @Schema(description = "抄送的用户编号数组", requiredMode = Schema.RequiredMode.REQUIRED, example = "1,2")
  22 + @Schema(description = "抄送的用户编号数组", example = "1,2")
23 23 private Collection<Long> copyUserIds;
24 24  
25 25 @Schema(description = "变量实例(动态表单)", requiredMode = Schema.RequiredMode.REQUIRED)
... ...
yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/task/vo/task/BpmTaskCopyReqVO.java 0 → 100644
  1 +package cn.iocoder.yudao.module.bpm.controller.admin.task.vo.task;
  2 +
  3 +import io.swagger.v3.oas.annotations.media.Schema;
  4 +import jakarta.validation.constraints.NotEmpty;
  5 +import lombok.Data;
  6 +
  7 +import java.util.Collection;
  8 +
  9 +@Schema(description = "管理后台 - 抄送流程任务的 Request VO")
  10 +@Data
  11 +public class BpmTaskCopyReqVO {
  12 +
  13 + @Schema(description = "任务编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024")
  14 + @NotEmpty(message = "任务编号不能为空")
  15 + private String id;
  16 +
  17 + @Schema(description = "抄送的用户编号数组", requiredMode = Schema.RequiredMode.REQUIRED, example = "[1,2]")
  18 + @NotEmpty(message = "抄送用户不能为空")
  19 + private Collection<Long> copyUserIds;
  20 +
  21 + @Schema(description = "抄送意见", example = "帮忙看看!")
  22 + private String reason;
  23 +}
... ...
yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/dal/dataobject/task/BpmProcessInstanceCopyDO.java
... ... @@ -74,4 +74,9 @@ public class BpmProcessInstanceCopyDO extends BaseDO {
74 74 */
75 75 private Long userId;
76 76  
  77 + /**
  78 + * 抄送意见
  79 + */
  80 + private String reason;
  81 +
77 82 }
... ...
yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/framework/flowable/core/listener/BpmCopyTaskDelegate.java
... ... @@ -15,7 +15,7 @@ import static cn.iocoder.yudao.module.bpm.framework.flowable.core.listener.BpmCo
15 15  
16 16 /**
17 17 * 处理抄送用户的 {@link JavaDelegate} 的实现类
18   - *
  18 + * <p>
19 19 * 目前只有快搭模式的【抄送节点】使用
20 20 *
21 21 * @author jason
... ... @@ -40,7 +40,7 @@ public class BpmCopyTaskDelegate implements JavaDelegate {
40 40 }
41 41 // 2. 执行抄送
42 42 FlowElement currentFlowElement = execution.getCurrentFlowElement();
43   - processInstanceCopyService.createProcessInstanceCopy(userIds, execution.getProcessInstanceId(),
  43 + processInstanceCopyService.createProcessInstanceCopy(userIds, null, execution.getProcessInstanceId(),
44 44 currentFlowElement.getId(), null, currentFlowElement.getName());
45 45 }
46 46  
... ...
yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/task/BpmProcessInstanceCopyService.java
... ... @@ -18,21 +18,23 @@ public interface BpmProcessInstanceCopyService {
18 18 * 流程实例的抄送
19 19 *
20 20 * @param userIds 抄送的用户编号
  21 + * @param reason 抄送意见
21 22 * @param taskId 流程任务编号
22 23 */
23   - void createProcessInstanceCopy(Collection<Long> userIds, String taskId);
  24 + void createProcessInstanceCopy(Collection<Long> userIds, String reason, String taskId);
24 25  
25 26 /**
26 27 * 流程实例的抄送
27 28 *
28 29 * @param userIds 抄送的用户编号
  30 + * @param reason 抄送意见
29 31 * @param processInstanceId 流程编号
30 32 * @param activityId 流程活动编号 id (对应 BPMN XML 节点 Id)
31   - * // TODO 芋艿这个 taskId 是不是可以不要了
32 33 * @param taskId 任务编号
33 34 * @param taskName 任务名称
34 35 */
35   - void createProcessInstanceCopy(Collection<Long> userIds, String processInstanceId, String activityId, String taskId, String taskName);
  36 + void createProcessInstanceCopy(Collection<Long> userIds, String reason, String processInstanceId, String activityId,
  37 + String taskId, String taskName);
36 38  
37 39 /**
38 40 * 获得抄送的流程的分页
... ... @@ -43,14 +45,5 @@ public interface BpmProcessInstanceCopyService {
43 45 */
44 46 PageResult<BpmProcessInstanceCopyDO> getProcessInstanceCopyPage(Long userId,
45 47 BpmProcessInstanceCopyPageReqVO pageReqVO);
46   - // TODO @芋艿:重点在 review 下
47   - /**
48   - * 通过流程实例和流程活动编号获取抄送人的 Id
49   - *
50   - * @param processInstanceId 流程实例 Id
51   - * @param activityId 流程活动编号 Id
52   - * @return 抄送人 Ids
53   - */
54   - Set<Long> getCopyUserIds(String processInstanceId, String activityId);
55 48  
56 49 }
... ...
yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/task/BpmProcessInstanceCopyServiceImpl.java
... ... @@ -49,17 +49,18 @@ public class BpmProcessInstanceCopyServiceImpl implements BpmProcessInstanceCopy
49 49 private BpmProcessDefinitionService processDefinitionService;
50 50  
51 51 @Override
52   - public void createProcessInstanceCopy(Collection<Long> userIds, String taskId) {
  52 + public void createProcessInstanceCopy(Collection<Long> userIds, String reason, String taskId) {
53 53 Task task = taskService.getTask(taskId);
54 54 if (ObjectUtil.isNull(task)) {
55 55 throw exception(ErrorCodeConstants.TASK_NOT_EXISTS);
56 56 }
57 57 String processInstanceId = task.getProcessInstanceId();
58   - createProcessInstanceCopy(userIds, processInstanceId, task.getTaskDefinitionKey(), task.getId(), task.getName());
  58 + createProcessInstanceCopy(userIds, reason, processInstanceId, task.getTaskDefinitionKey(), task.getId(), task.getName());
59 59 }
60 60  
61 61 @Override
62   - public void createProcessInstanceCopy(Collection<Long> userIds, String processInstanceId, String activityId, String taskId, String taskName) {
  62 + public void createProcessInstanceCopy(Collection<Long> userIds, String reason, String processInstanceId, String activityId,
  63 + String taskId, String taskName) {
63 64 // 1.1 校验流程实例存在
64 65 ProcessInstance processInstance = processInstanceService.getProcessInstance(processInstanceId);
65 66 if (processInstance == null) {
... ... @@ -74,7 +75,7 @@ public class BpmProcessInstanceCopyServiceImpl implements BpmProcessInstanceCopy
74 75  
75 76 // 2. 创建抄送流程
76 77 List<BpmProcessInstanceCopyDO> copyList = convertList(userIds, userId -> new BpmProcessInstanceCopyDO()
77   - .setUserId(userId).setStartUserId(Long.valueOf(processInstance.getStartUserId()))
  78 + .setUserId(userId).setReason(reason).setStartUserId(Long.valueOf(processInstance.getStartUserId()))
78 79 .setProcessInstanceId(processInstanceId).setProcessInstanceName(processInstance.getName())
79 80 .setCategory(processDefinition.getCategory()).setActivityId(activityId)
80 81 .setTaskId(taskId).setTaskName(taskName));
... ... @@ -87,10 +88,4 @@ public class BpmProcessInstanceCopyServiceImpl implements BpmProcessInstanceCopy
87 88 return processInstanceCopyMapper.selectPage(userId, pageReqVO);
88 89 }
89 90  
90   - @Override
91   - public Set<Long> getCopyUserIds(String processInstanceId, String activityId) {
92   - return CollectionUtils.convertSet(processInstanceCopyMapper.selectListByProcessInstanceIdAndActivityId(processInstanceId, activityId),
93   - BpmProcessInstanceCopyDO::getUserId);
94   - }
95   -
96 91 }
... ...
yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/task/BpmTaskService.java
... ... @@ -201,6 +201,14 @@ public interface BpmTaskService {
201 201 */
202 202 void deleteSignTask(Long userId, BpmTaskSignDeleteReqVO reqVO);
203 203  
  204 + /**
  205 + * 抄送任务
  206 + *
  207 + * @param userId 用户编号
  208 + * @param reqVO 通过请求
  209 + */
  210 + void copyTask(Long userId, @Valid BpmTaskCopyReqVO reqVO);
  211 +
204 212 // ========== Event 事件相关方法 ==========
205 213  
206 214 /**
... ...
yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/task/BpmTaskServiceImpl.java
... ... @@ -354,7 +354,7 @@ public class BpmTaskServiceImpl implements BpmTaskService {
354 354  
355 355 // 2. 抄送用户
356 356 if (CollUtil.isNotEmpty(reqVO.getCopyUserIds())) {
357   - processInstanceCopyService.createProcessInstanceCopy(reqVO.getCopyUserIds(), reqVO.getId());
  357 + processInstanceCopyService.createProcessInstanceCopy(reqVO.getCopyUserIds(), null, reqVO.getId());
358 358 }
359 359  
360 360 // 情况一:被委派的任务,不调用 complete 去完成任务
... ... @@ -868,6 +868,11 @@ public class BpmTaskServiceImpl implements BpmTaskService {
868 868 handleParentTaskIfSign(task.getParentTaskId());
869 869 }
870 870  
  871 + @Override
  872 + public void copyTask(Long userId, BpmTaskCopyReqVO reqVO) {
  873 + processInstanceCopyService.createProcessInstanceCopy(reqVO.getCopyUserIds(), reqVO.getReason(), reqVO.getId());
  874 + }
  875 +
871 876 /**
872 877 * 校验任务是否能被减签
873 878 *
... ...