Commit c6c20234404536803f1e9d7fe0095e50db4c54a1
1 parent
405ecf05
【功能修改】 新增任务抄送接口
Showing
11 changed files
with
75 additions
and
33 deletions
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
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 | * | ... | ... |