Commit 986f9533192a4651d496eb85e3ecfd1d705c96d5
Committed by
Gitee
!849 流程抄送Review
Merge pull request !849 from 云开/feature/BPM_CC_develop
Showing
17 changed files
with
271 additions
and
261 deletions
yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/task/BpmProcessInstanceController.java
| @@ -3,7 +3,6 @@ package cn.iocoder.yudao.module.bpm.controller.admin.task; | @@ -3,7 +3,6 @@ package cn.iocoder.yudao.module.bpm.controller.admin.task; | ||
| 3 | import cn.iocoder.yudao.framework.common.pojo.CommonResult; | 3 | import cn.iocoder.yudao.framework.common.pojo.CommonResult; |
| 4 | import cn.iocoder.yudao.framework.common.pojo.PageResult; | 4 | import cn.iocoder.yudao.framework.common.pojo.PageResult; |
| 5 | import cn.iocoder.yudao.module.bpm.controller.admin.task.vo.instance.*; | 5 | import cn.iocoder.yudao.module.bpm.controller.admin.task.vo.instance.*; |
| 6 | -import cn.iocoder.yudao.module.bpm.service.cc.BpmProcessInstanceCopyService; | ||
| 7 | import cn.iocoder.yudao.module.bpm.service.task.BpmProcessInstanceService; | 6 | import cn.iocoder.yudao.module.bpm.service.task.BpmProcessInstanceService; |
| 8 | import io.swagger.v3.oas.annotations.Operation; | 7 | import io.swagger.v3.oas.annotations.Operation; |
| 9 | import io.swagger.v3.oas.annotations.Parameter; | 8 | import io.swagger.v3.oas.annotations.Parameter; |
| @@ -26,9 +25,6 @@ public class BpmProcessInstanceController { | @@ -26,9 +25,6 @@ public class BpmProcessInstanceController { | ||
| 26 | @Resource | 25 | @Resource |
| 27 | private BpmProcessInstanceService processInstanceService; | 26 | private BpmProcessInstanceService processInstanceService; |
| 28 | 27 | ||
| 29 | - @Resource | ||
| 30 | - private BpmProcessInstanceCopyService processInstanceCopyService; | ||
| 31 | - | ||
| 32 | @GetMapping("/my-page") | 28 | @GetMapping("/my-page") |
| 33 | @Operation(summary = "获得我的实例分页列表", description = "在【我的流程】菜单中,进行调用") | 29 | @Operation(summary = "获得我的实例分页列表", description = "在【我的流程】菜单中,进行调用") |
| 34 | @PreAuthorize("@ss.hasPermission('bpm:process-instance:query')") | 30 | @PreAuthorize("@ss.hasPermission('bpm:process-instance:query')") |
| @@ -60,21 +56,4 @@ public class BpmProcessInstanceController { | @@ -60,21 +56,4 @@ public class BpmProcessInstanceController { | ||
| 60 | return success(true); | 56 | return success(true); |
| 61 | } | 57 | } |
| 62 | 58 | ||
| 63 | - // TODO @kyle:抄送要不单独 controller? | ||
| 64 | - | ||
| 65 | - @PostMapping("/cc/create") | ||
| 66 | - @Operation(summary = "抄送流程") | ||
| 67 | - @PreAuthorize("@ss.hasPermission('bpm:process-instance-cc:create')") | ||
| 68 | - public CommonResult<Boolean> createProcessInstanceCC(@Valid @RequestBody BpmProcessInstanceCCReqVO createReqVO) { | ||
| 69 | - return success(processInstanceCopyService.ccProcessInstance(getLoginUserId(), createReqVO)); | ||
| 70 | - } | ||
| 71 | - | ||
| 72 | - @GetMapping("/cc/my-page") | ||
| 73 | - @Operation(summary = "获得抄送流程分页列表") | ||
| 74 | - @PreAuthorize("@ss.hasPermission('bpm:process-instance-cc:query')") | ||
| 75 | - public CommonResult<PageResult<BpmProcessInstanceCCPageItemRespVO>> getProcessInstanceCCPage( | ||
| 76 | - @Valid BpmProcessInstanceCCMyPageReqVO pageReqVO) { | ||
| 77 | - return success(processInstanceCopyService.getMyProcessInstanceCCPage(getLoginUserId(), pageReqVO)); | ||
| 78 | - } | ||
| 79 | - | ||
| 80 | } | 59 | } |
yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/task/BpmProcessInstanceCopyController.java
0 → 100644
| 1 | +package cn.iocoder.yudao.module.bpm.controller.admin.task; | ||
| 2 | + | ||
| 3 | +import cn.hutool.core.collection.CollUtil; | ||
| 4 | +import cn.iocoder.yudao.framework.common.pojo.CommonResult; | ||
| 5 | +import cn.iocoder.yudao.framework.common.pojo.PageResult; | ||
| 6 | +import cn.iocoder.yudao.module.bpm.controller.admin.task.vo.instance.BpmProcessInstanceCopyCreateReqVO; | ||
| 7 | +import cn.iocoder.yudao.module.bpm.controller.admin.task.vo.instance.BpmProcessInstanceCopyMyPageReqVO; | ||
| 8 | +import cn.iocoder.yudao.module.bpm.controller.admin.task.vo.instance.BpmProcessInstanceCopyPageItemRespVO; | ||
| 9 | +import cn.iocoder.yudao.module.bpm.convert.cc.BpmProcessInstanceCopyConvert; | ||
| 10 | +import cn.iocoder.yudao.module.bpm.dal.dataobject.cc.BpmProcessInstanceCopyDO; | ||
| 11 | +import cn.iocoder.yudao.module.bpm.service.task.BpmProcessInstanceService; | ||
| 12 | +import cn.iocoder.yudao.module.bpm.service.task.BpmTaskService; | ||
| 13 | +import cn.iocoder.yudao.module.bpm.service.task.cc.BpmProcessInstanceCopyService; | ||
| 14 | +import cn.iocoder.yudao.module.system.api.user.AdminUserApi; | ||
| 15 | +import cn.iocoder.yudao.module.system.api.user.dto.AdminUserRespDTO; | ||
| 16 | +import io.swagger.v3.oas.annotations.Operation; | ||
| 17 | +import io.swagger.v3.oas.annotations.tags.Tag; | ||
| 18 | +import jakarta.annotation.Resource; | ||
| 19 | +import jakarta.validation.Valid; | ||
| 20 | +import org.springframework.context.annotation.Lazy; | ||
| 21 | +import org.springframework.security.access.prepost.PreAuthorize; | ||
| 22 | +import org.springframework.validation.annotation.Validated; | ||
| 23 | +import org.springframework.web.bind.annotation.*; | ||
| 24 | + | ||
| 25 | +import java.util.HashSet; | ||
| 26 | +import java.util.Map; | ||
| 27 | +import java.util.Set; | ||
| 28 | +import java.util.stream.Collectors; | ||
| 29 | + | ||
| 30 | +import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; | ||
| 31 | +import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertSet; | ||
| 32 | +import static cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils.getLoginUserId; | ||
| 33 | + | ||
| 34 | +@Tag(name = "管理后台 - 流程实例抄送") | ||
| 35 | +@RestController | ||
| 36 | +@RequestMapping("/bpm/process-instance/cc") | ||
| 37 | +@Validated | ||
| 38 | +public class BpmProcessInstanceCopyController { | ||
| 39 | + | ||
| 40 | + @Resource | ||
| 41 | + private BpmProcessInstanceCopyService processInstanceCopyService; | ||
| 42 | + @Resource | ||
| 43 | + private BpmProcessInstanceService bpmProcessInstanceService; | ||
| 44 | + @Resource | ||
| 45 | + private AdminUserApi adminUserApi; | ||
| 46 | + | ||
| 47 | + @Resource | ||
| 48 | + private BpmTaskService bpmTaskService; | ||
| 49 | + | ||
| 50 | + @PostMapping("/create") | ||
| 51 | + @Operation(summary = "抄送流程") | ||
| 52 | + @PreAuthorize("@ss.hasPermission('bpm:process-instance-cc:create')") | ||
| 53 | + public CommonResult<Void> createProcessInstanceCC(@Valid @RequestBody BpmProcessInstanceCopyCreateReqVO createReqVO) { | ||
| 54 | + return success(processInstanceCopyService.createProcessInstanceCopy(getLoginUserId(), createReqVO)); | ||
| 55 | + } | ||
| 56 | + | ||
| 57 | + @GetMapping("/my-page") | ||
| 58 | + @Operation(summary = "获得抄送流程分页列表") | ||
| 59 | + @PreAuthorize("@ss.hasPermission('bpm:process-instance-cc:query')") | ||
| 60 | + public CommonResult<PageResult<BpmProcessInstanceCopyPageItemRespVO>> getProcessInstanceCCPage( | ||
| 61 | + @Valid BpmProcessInstanceCopyMyPageReqVO pageReqVO) { | ||
| 62 | + PageResult<BpmProcessInstanceCopyDO> pageResult = processInstanceCopyService.getMyProcessInstanceCopyPage(getLoginUserId(), pageReqVO); | ||
| 63 | + if (CollUtil.isEmpty(pageResult.getList())) { | ||
| 64 | + return success(new PageResult<>(pageResult.getTotal())); | ||
| 65 | + } | ||
| 66 | + | ||
| 67 | + Map<String, String> taskNameByTaskIds = bpmTaskService.getTaskNameByTaskIds(convertSet(pageResult.getList(), BpmProcessInstanceCopyDO::getTaskId)); | ||
| 68 | + Map<String, String> processInstanceNameByProcessInstanceIds = bpmTaskService.getProcessInstanceNameByProcessInstanceIds(convertSet(pageResult.getList(), BpmProcessInstanceCopyDO::getProcessInstanceId)); | ||
| 69 | + | ||
| 70 | + Set<Long/* userId */> userIds = new HashSet<>(); | ||
| 71 | + for (BpmProcessInstanceCopyDO doItem : pageResult.getList()) { | ||
| 72 | + userIds.add(doItem.getStartUserId()); | ||
| 73 | + Long userId = Long.valueOf(doItem.getCreator()); | ||
| 74 | + userIds.add(userId); | ||
| 75 | + } | ||
| 76 | + Map<Long, String> userMap = adminUserApi.getUserList(userIds).stream().collect(Collectors.toMap( | ||
| 77 | + AdminUserRespDTO::getId, AdminUserRespDTO::getNickname)); | ||
| 78 | + | ||
| 79 | + // 转换返回 | ||
| 80 | + return success(BpmProcessInstanceCopyConvert.INSTANCE.convertPage(pageResult, taskNameByTaskIds, processInstanceNameByProcessInstanceIds, userMap)); | ||
| 81 | + } | ||
| 82 | + | ||
| 83 | +} |
yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/task/vo/instance/BpmProcessInstanceCCReqVO.java renamed to yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/task/vo/instance/BpmProcessInstanceCopyCreateReqVO.java
| @@ -4,44 +4,22 @@ import cn.iocoder.yudao.module.bpm.controller.admin.candidate.vo.BpmTaskCandidat | @@ -4,44 +4,22 @@ import cn.iocoder.yudao.module.bpm.controller.admin.candidate.vo.BpmTaskCandidat | ||
| 4 | import io.swagger.v3.oas.annotations.media.Schema; | 4 | import io.swagger.v3.oas.annotations.media.Schema; |
| 5 | import jakarta.validation.constraints.NotBlank; | 5 | import jakarta.validation.constraints.NotBlank; |
| 6 | import jakarta.validation.constraints.NotEmpty; | 6 | import jakarta.validation.constraints.NotEmpty; |
| 7 | -import jakarta.validation.constraints.NotNull; | ||
| 8 | import lombok.Data; | 7 | import lombok.Data; |
| 9 | import lombok.EqualsAndHashCode; | 8 | import lombok.EqualsAndHashCode; |
| 10 | import lombok.ToString; | 9 | import lombok.ToString; |
| 11 | 10 | ||
| 12 | -// TODO @kyle:这个 VO 可以改成 BpmProcessInstanceCopyCreateReqVO | ||
| 13 | -@Schema(description = "管理后台 - 流程实例的抄送 Request VO") | 11 | +@Schema(description = "管理后台 - 流程实例抄送的创建 Request VO") |
| 14 | @Data | 12 | @Data |
| 15 | @EqualsAndHashCode(callSuper = true) | 13 | @EqualsAndHashCode(callSuper = true) |
| 16 | @ToString(callSuper = true) | 14 | @ToString(callSuper = true) |
| 17 | -public class BpmProcessInstanceCCReqVO extends BpmTaskCandidateRuleVO { | 15 | +public class BpmProcessInstanceCopyCreateReqVO extends BpmTaskCandidateRuleVO { |
| 18 | 16 | ||
| 19 | @Schema(description = "任务编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024") | 17 | @Schema(description = "任务编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024") |
| 20 | @NotEmpty(message = "任务编号不能为空") | 18 | @NotEmpty(message = "任务编号不能为空") |
| 21 | - private String taskKey; | ||
| 22 | - | ||
| 23 | - @Schema(description = "任务名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024") | ||
| 24 | - @NotEmpty(message = "任务名称不能为空") | ||
| 25 | - private String taskName; | ||
| 26 | - | ||
| 27 | - @Schema(description = "流程实例的编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024") | ||
| 28 | - @NotEmpty(message = "流程实例的编号不能为空") | ||
| 29 | - private String processInstanceKey; | ||
| 30 | - | ||
| 31 | - @Schema(description = "发起流程的用户的编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024") | ||
| 32 | - @NotNull(message = "发起流程的用户的编号不能为空") | ||
| 33 | - private Long startUserId; | ||
| 34 | - | ||
| 35 | - @Schema(description = "任务实例名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024") | ||
| 36 | - @NotEmpty(message = "任务实例名称不能为空") | ||
| 37 | - private String processInstanceName; | 19 | + private String taskId; |
| 38 | 20 | ||
| 39 | @Schema(description = "抄送原因", requiredMode = Schema.RequiredMode.REQUIRED, example = "请帮忙审查下!") | 21 | @Schema(description = "抄送原因", requiredMode = Schema.RequiredMode.REQUIRED, example = "请帮忙审查下!") |
| 40 | @NotBlank(message = "抄送原因不能为空") | 22 | @NotBlank(message = "抄送原因不能为空") |
| 41 | private String reason; | 23 | private String reason; |
| 42 | 24 | ||
| 43 | - // TODO @kyle:看了下字段有点多,尽量不传递可推导的字段; | ||
| 44 | - // 需要传递:taskId(任务编号)、reason、userIds(被抄送的人) | ||
| 45 | - // 不需要传递:taskKey、taskName、processInstanceKey、startUserId、processInstanceName 因为这些可以后端查询到 | ||
| 46 | - | ||
| 47 | } | 25 | } |
yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/task/vo/instance/BpmProcessInstanceCCMyPageReqVO.java renamed to yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/task/vo/instance/BpmProcessInstanceCopyMyPageReqVO.java
| @@ -11,12 +11,11 @@ import java.time.LocalDateTime; | @@ -11,12 +11,11 @@ import java.time.LocalDateTime; | ||
| 11 | 11 | ||
| 12 | import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; | 12 | import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; |
| 13 | 13 | ||
| 14 | -// TODO @kyle:建议改成 BpmProcessInstanceCopyMyPageReqVO;cc 缩写不容易理解,所以改成 copy,虽然会长一点,但是可读性更重要; | ||
| 15 | @Schema(description = "管理后台 - 流程实例抄送的分页 Request VO") | 14 | @Schema(description = "管理后台 - 流程实例抄送的分页 Request VO") |
| 16 | @Data | 15 | @Data |
| 17 | @EqualsAndHashCode(callSuper = true) | 16 | @EqualsAndHashCode(callSuper = true) |
| 18 | @ToString(callSuper = true) | 17 | @ToString(callSuper = true) |
| 19 | -public class BpmProcessInstanceCCMyPageReqVO extends PageParam { | 18 | +public class BpmProcessInstanceCopyMyPageReqVO extends PageParam { |
| 20 | 19 | ||
| 21 | @Schema(description = "流程名称", example = "芋道") | 20 | @Schema(description = "流程名称", example = "芋道") |
| 22 | private String processInstanceName; | 21 | private String processInstanceName; |
yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/task/vo/instance/BpmProcessInstanceCCPageItemRespVO.java renamed to yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/task/vo/instance/BpmProcessInstanceCopyPageItemRespVO.java
| @@ -7,35 +7,23 @@ import java.time.LocalDateTime; | @@ -7,35 +7,23 @@ import java.time.LocalDateTime; | ||
| 7 | 7 | ||
| 8 | @Schema(description = "管理后台 - 流程实例抄送的分页 Item Response VO") | 8 | @Schema(description = "管理后台 - 流程实例抄送的分页 Item Response VO") |
| 9 | @Data | 9 | @Data |
| 10 | -public class BpmProcessInstanceCCPageItemRespVO { | 10 | +public class BpmProcessInstanceCopyPageItemRespVO { |
| 11 | 11 | ||
| 12 | - // TODO @kyle:如果已经写了 swagger 注解,可以不用写 java 注释哈; | ||
| 13 | - /** | ||
| 14 | - * 编号 | ||
| 15 | - */ | ||
| 16 | @Schema(description = "抄送主键") | 12 | @Schema(description = "抄送主键") |
| 17 | private Long id; | 13 | private Long id; |
| 18 | 14 | ||
| 19 | - /** | ||
| 20 | - * 发起人Id | ||
| 21 | - */ | ||
| 22 | @Schema(description = "发起人Id") | 15 | @Schema(description = "发起人Id") |
| 23 | private Long startUserId; | 16 | private Long startUserId; |
| 24 | 17 | ||
| 25 | @Schema(description = "发起人别名") | 18 | @Schema(description = "发起人别名") |
| 26 | private String startUserNickname; | 19 | private String startUserNickname; |
| 27 | 20 | ||
| 28 | - /** | ||
| 29 | - * 流程主键 | ||
| 30 | - */ | ||
| 31 | @Schema(description = "流程实例的主键") | 21 | @Schema(description = "流程实例的主键") |
| 32 | private String processInstanceId; | 22 | private String processInstanceId; |
| 33 | 23 | ||
| 34 | @Schema(description = "流程实例的名称") | 24 | @Schema(description = "流程实例的名称") |
| 35 | private String processInstanceName; | 25 | private String processInstanceName; |
| 36 | - /** | ||
| 37 | - * 任务主键 | ||
| 38 | - */ | 26 | + |
| 39 | @Schema(description = "发起抄送的任务编号") | 27 | @Schema(description = "发起抄送的任务编号") |
| 40 | private String taskId; | 28 | private String taskId; |
| 41 | 29 |
yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/cc/BpmProcessInstanceCopyVO.java renamed to yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/task/vo/task/BpmProcessInstanceCopyVO.java
| 1 | -package cn.iocoder.yudao.module.bpm.service.cc; | 1 | +package cn.iocoder.yudao.module.bpm.controller.admin.task.vo.task; |
| 2 | 2 | ||
| 3 | import io.swagger.v3.oas.annotations.media.Schema; | 3 | import io.swagger.v3.oas.annotations.media.Schema; |
| 4 | import lombok.Data; | 4 | import lombok.Data; |
| 5 | 5 | ||
| 6 | import java.time.LocalDateTime; | 6 | import java.time.LocalDateTime; |
| 7 | 7 | ||
| 8 | -// TODO @kyle:看看是不是要删除 | ||
| 9 | /** | 8 | /** |
| 10 | - * 流程抄送视图对象 wf_copy | ||
| 11 | - * | ||
| 12 | - * @author ruoyi | ||
| 13 | - * @date 2022-05-19 | 9 | + * 流程抄送视图对象 |
| 14 | */ | 10 | */ |
| 15 | @Data | 11 | @Data |
| 16 | public class BpmProcessInstanceCopyVO { | 12 | public class BpmProcessInstanceCopyVO { |
yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/convert/cc/BpmProcessInstanceCopyConvert.java
| @@ -2,18 +2,18 @@ package cn.iocoder.yudao.module.bpm.convert.cc; | @@ -2,18 +2,18 @@ package cn.iocoder.yudao.module.bpm.convert.cc; | ||
| 2 | 2 | ||
| 3 | import cn.iocoder.yudao.framework.common.pojo.PageResult; | 3 | import cn.iocoder.yudao.framework.common.pojo.PageResult; |
| 4 | import cn.iocoder.yudao.framework.common.util.collection.MapUtils; | 4 | import cn.iocoder.yudao.framework.common.util.collection.MapUtils; |
| 5 | -import cn.iocoder.yudao.module.bpm.controller.admin.task.vo.instance.BpmProcessInstanceCCPageItemRespVO; | 5 | +import cn.iocoder.yudao.framework.common.util.object.BeanUtils; |
| 6 | +import cn.iocoder.yudao.module.bpm.controller.admin.task.vo.instance.BpmProcessInstanceCopyPageItemRespVO; | ||
| 7 | +import cn.iocoder.yudao.module.bpm.controller.admin.task.vo.task.BpmProcessInstanceCopyVO; | ||
| 6 | import cn.iocoder.yudao.module.bpm.dal.dataobject.cc.BpmProcessInstanceCopyDO; | 8 | import cn.iocoder.yudao.module.bpm.dal.dataobject.cc.BpmProcessInstanceCopyDO; |
| 7 | -import cn.iocoder.yudao.module.bpm.service.cc.BpmProcessInstanceCopyVO; | ||
| 8 | import org.mapstruct.Mapper; | 9 | import org.mapstruct.Mapper; |
| 9 | import org.mapstruct.factory.Mappers; | 10 | import org.mapstruct.factory.Mappers; |
| 10 | 11 | ||
| 11 | import java.util.List; | 12 | import java.util.List; |
| 12 | import java.util.Map; | 13 | import java.util.Map; |
| 13 | 14 | ||
| 14 | -// TODO kyle:类注释不太对 | ||
| 15 | /** | 15 | /** |
| 16 | - * 动态表单 Convert | 16 | + * 流程抄送 Convert |
| 17 | * | 17 | * |
| 18 | * @author 芋艿 | 18 | * @author 芋艿 |
| 19 | */ | 19 | */ |
| @@ -22,39 +22,23 @@ public interface BpmProcessInstanceCopyConvert { | @@ -22,39 +22,23 @@ public interface BpmProcessInstanceCopyConvert { | ||
| 22 | 22 | ||
| 23 | BpmProcessInstanceCopyConvert INSTANCE = Mappers.getMapper(BpmProcessInstanceCopyConvert.class); | 23 | BpmProcessInstanceCopyConvert INSTANCE = Mappers.getMapper(BpmProcessInstanceCopyConvert.class); |
| 24 | 24 | ||
| 25 | - // TODO @kyle:可以使用 BeanUtils copy 替代这些简单的哈; | ||
| 26 | - BpmProcessInstanceCopyDO copy(BpmProcessInstanceCopyDO bean); | ||
| 27 | - | ||
| 28 | BpmProcessInstanceCopyVO convert(BpmProcessInstanceCopyDO bean); | 25 | BpmProcessInstanceCopyVO convert(BpmProcessInstanceCopyDO bean); |
| 29 | 26 | ||
| 30 | - List<BpmProcessInstanceCCPageItemRespVO> convertList(List<BpmProcessInstanceCopyDO> list); | 27 | + List<BpmProcessInstanceCopyPageItemRespVO> convertList(List<BpmProcessInstanceCopyDO> list); |
| 31 | 28 | ||
| 32 | - // TODO @kyle:/* taskId */ 这种注释一般不用写,可以一眼看明白的;避免变量看着略微不清晰哈 | ||
| 33 | - default PageResult<BpmProcessInstanceCCPageItemRespVO> convertPage(PageResult<BpmProcessInstanceCopyDO> page | ||
| 34 | - , Map<String/* taskId */, String/* taskName */> taskMap | ||
| 35 | - , Map<String/* processInstaneId */, String/* processInstaneName */> processInstaneMap | ||
| 36 | - , Map<Long/* userId */, String/* userName */> userMap | 29 | + default PageResult<BpmProcessInstanceCopyPageItemRespVO> convertPage(PageResult<BpmProcessInstanceCopyDO> page |
| 30 | + , Map<String, String/* taskName */> taskMap | ||
| 31 | + , Map<String, String/* processInstaneName */> processInstaneMap | ||
| 32 | + , Map<Long, String/* userName */> userMap | ||
| 37 | ) { | 33 | ) { |
| 38 | - List<BpmProcessInstanceCCPageItemRespVO> list = convertList(page.getList()); | ||
| 39 | - for (BpmProcessInstanceCCPageItemRespVO vo : list) { | ||
| 40 | - MapUtils.findAndThen(userMap, Long.valueOf(vo.getCreator()), | ||
| 41 | - vo::setCreatorNickname); | ||
| 42 | - MapUtils.findAndThen(userMap, vo.getStartUserId(), | ||
| 43 | - vo::setStartUserNickname); | ||
| 44 | - MapUtils.findAndThen(taskMap, vo.getTaskId(), | ||
| 45 | - vo::setTaskName); | ||
| 46 | - MapUtils.findAndThen(processInstaneMap, vo.getProcessInstanceId(), | ||
| 47 | - vo::setProcessInstanceName); | ||
| 48 | - } | ||
| 49 | - // TODO @kyle:可以精简成下面的哈; | ||
| 50 | -// List<BpmProcessInstanceCCPageItemRespVO> list2 = BeanUtils.toBean(page.getList(), | ||
| 51 | -// BpmProcessInstanceCCPageItemRespVO.class, | ||
| 52 | -// copy -> { | ||
| 53 | -// MapUtils.findAndThen(userMap, Long.valueOf(copy.getCreator()), copy::setCreatorNickname); | ||
| 54 | -// MapUtils.findAndThen(userMap, copy.getStartUserId(), copy::setStartUserNickname); | ||
| 55 | -// MapUtils.findAndThen(taskMap, copy.getTaskId(), copy::setTaskName); | ||
| 56 | -// MapUtils.findAndThen(processInstaneMap, copy.getProcessInstanceId(), copy::setProcessInstanceName); | ||
| 57 | -// }); | 34 | + List<BpmProcessInstanceCopyPageItemRespVO> list = BeanUtils.toBean(page.getList(), |
| 35 | + BpmProcessInstanceCopyPageItemRespVO.class, | ||
| 36 | + copy -> { | ||
| 37 | + MapUtils.findAndThen(userMap, Long.valueOf(copy.getCreator()), copy::setCreatorNickname); | ||
| 38 | + MapUtils.findAndThen(userMap, copy.getStartUserId(), copy::setStartUserNickname); | ||
| 39 | + MapUtils.findAndThen(taskMap, copy.getTaskId(), copy::setTaskName); | ||
| 40 | + MapUtils.findAndThen(processInstaneMap, copy.getProcessInstanceId(), copy::setProcessInstanceName); | ||
| 41 | + }); | ||
| 58 | return new PageResult<>(list, page.getTotal()); | 42 | return new PageResult<>(list, page.getTotal()); |
| 59 | } | 43 | } |
| 60 | 44 |
yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/dal/dataobject/cc/BpmProcessInstanceCopyDO.java
| @@ -9,7 +9,7 @@ import lombok.*; | @@ -9,7 +9,7 @@ import lombok.*; | ||
| 9 | * 流程抄送 DO | 9 | * 流程抄送 DO |
| 10 | * | 10 | * |
| 11 | * @author kyle | 11 | * @author kyle |
| 12 | - * @date 2022-05-19 TODO @kyle:@date 不是标准 java doc,可以使用 @since 替代,然后日期是不是不对 | 12 | + * @since 2024-01-22 |
| 13 | */ | 13 | */ |
| 14 | @TableName(value = "bpm_process_instance_copy", autoResultMap = true) | 14 | @TableName(value = "bpm_process_instance_copy", autoResultMap = true) |
| 15 | @Data | 15 | @Data |
| @@ -26,34 +26,43 @@ public class BpmProcessInstanceCopyDO extends BaseDO { | @@ -26,34 +26,43 @@ public class BpmProcessInstanceCopyDO extends BaseDO { | ||
| 26 | @TableId | 26 | @TableId |
| 27 | private Long id; | 27 | private Long id; |
| 28 | 28 | ||
| 29 | - // TODO @kyle:字段如果是关联或者冗余,要写下注释。以 processInstanceId 举例子。 | ||
| 30 | /** | 29 | /** |
| 31 | * 发起人 Id | 30 | * 发起人 Id |
| 31 | + * <p> | ||
| 32 | + * 关联 system_users 的 id 属性 | ||
| 32 | */ | 33 | */ |
| 33 | private Long startUserId; | 34 | private Long startUserId; |
| 34 | /** | 35 | /** |
| 35 | * 流程名 | 36 | * 流程名 |
| 37 | + * <p> | ||
| 38 | + * 冗余字段 | ||
| 36 | */ | 39 | */ |
| 37 | private String processInstanceName; | 40 | private String processInstanceName; |
| 38 | /** | 41 | /** |
| 39 | * 流程实例的编号 | 42 | * 流程实例的编号 |
| 40 | - * | 43 | + * <p> |
| 41 | * 关联 ProcessInstance 的 id 属性 | 44 | * 关联 ProcessInstance 的 id 属性 |
| 42 | */ | 45 | */ |
| 43 | private String processInstanceId; | 46 | private String processInstanceId; |
| 44 | 47 | ||
| 45 | /** | 48 | /** |
| 46 | * 任务主键 | 49 | * 任务主键 |
| 50 | + * <p> | ||
| 51 | + * 关联 task 的 id 属性 | ||
| 47 | */ | 52 | */ |
| 48 | private String taskId; | 53 | private String taskId; |
| 49 | 54 | ||
| 50 | /** | 55 | /** |
| 51 | * 任务名称 | 56 | * 任务名称 |
| 57 | + * <p> | ||
| 58 | + * 冗余字段 | ||
| 52 | */ | 59 | */ |
| 53 | private String taskName; | 60 | private String taskName; |
| 54 | 61 | ||
| 55 | /** | 62 | /** |
| 56 | * 用户编号 | 63 | * 用户编号 |
| 64 | + * <p> | ||
| 65 | + * 关联 system_users 的 id 属性 | ||
| 57 | */ | 66 | */ |
| 58 | private Long userId; | 67 | private Long userId; |
| 59 | 68 | ||
| @@ -62,10 +71,11 @@ public class BpmProcessInstanceCopyDO extends BaseDO { | @@ -62,10 +71,11 @@ public class BpmProcessInstanceCopyDO extends BaseDO { | ||
| 62 | */ | 71 | */ |
| 63 | private String reason; | 72 | private String reason; |
| 64 | 73 | ||
| 65 | - // TODO @kyle:这个字段,可以用 category 简化点 | ||
| 66 | /** | 74 | /** |
| 67 | * 流程分类 | 75 | * 流程分类 |
| 76 | + * <p> | ||
| 77 | + * 冗余字段 | ||
| 68 | */ | 78 | */ |
| 69 | - private String processDefinitionCategory; | 79 | + private String category; |
| 70 | 80 | ||
| 71 | } | 81 | } |
yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/dal/mysql/cc/BpmProcessInstanceCopyMapper.java
| @@ -3,13 +3,14 @@ package cn.iocoder.yudao.module.bpm.dal.mysql.cc; | @@ -3,13 +3,14 @@ package cn.iocoder.yudao.module.bpm.dal.mysql.cc; | ||
| 3 | import cn.iocoder.yudao.framework.common.pojo.PageResult; | 3 | import cn.iocoder.yudao.framework.common.pojo.PageResult; |
| 4 | import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; | 4 | import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; |
| 5 | import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; | 5 | import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; |
| 6 | -import cn.iocoder.yudao.module.bpm.controller.admin.task.vo.instance.BpmProcessInstanceCCMyPageReqVO; | 6 | +import cn.iocoder.yudao.module.bpm.controller.admin.task.vo.instance.BpmProcessInstanceCopyMyPageReqVO; |
| 7 | import cn.iocoder.yudao.module.bpm.dal.dataobject.cc.BpmProcessInstanceCopyDO; | 7 | import cn.iocoder.yudao.module.bpm.dal.dataobject.cc.BpmProcessInstanceCopyDO; |
| 8 | import org.apache.ibatis.annotations.Mapper; | 8 | import org.apache.ibatis.annotations.Mapper; |
| 9 | 9 | ||
| 10 | @Mapper | 10 | @Mapper |
| 11 | -public interface BpmProcessInstanceCopyMapper extends BaseMapperX<BpmProcessInstanceCopyDO> { // TODO @kyle:方法和类之间要空行下; | ||
| 12 | - default PageResult<BpmProcessInstanceCopyDO> selectPage(Long loginUserId, BpmProcessInstanceCCMyPageReqVO reqVO){ | 11 | +public interface BpmProcessInstanceCopyMapper extends BaseMapperX<BpmProcessInstanceCopyDO> { |
| 12 | + | ||
| 13 | + default PageResult<BpmProcessInstanceCopyDO> selectPage(Long loginUserId, BpmProcessInstanceCopyMyPageReqVO reqVO) { | ||
| 13 | return selectPage(reqVO, new LambdaQueryWrapperX<BpmProcessInstanceCopyDO>() | 14 | return selectPage(reqVO, new LambdaQueryWrapperX<BpmProcessInstanceCopyDO>() |
| 14 | .eqIfPresent(BpmProcessInstanceCopyDO::getUserId, loginUserId) | 15 | .eqIfPresent(BpmProcessInstanceCopyDO::getUserId, loginUserId) |
| 15 | .eqIfPresent(BpmProcessInstanceCopyDO::getProcessInstanceId, reqVO.getProcessInstanceId()) | 16 | .eqIfPresent(BpmProcessInstanceCopyDO::getProcessInstanceId, reqVO.getProcessInstanceId()) |
yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/candidate/BpmCandidateSourceInfo.java
| @@ -2,12 +2,12 @@ package cn.iocoder.yudao.module.bpm.service.candidate; | @@ -2,12 +2,12 @@ package cn.iocoder.yudao.module.bpm.service.candidate; | ||
| 2 | 2 | ||
| 3 | import cn.iocoder.yudao.module.bpm.controller.admin.candidate.vo.BpmTaskCandidateRuleVO; | 3 | import cn.iocoder.yudao.module.bpm.controller.admin.candidate.vo.BpmTaskCandidateRuleVO; |
| 4 | import io.swagger.v3.oas.annotations.media.Schema; | 4 | import io.swagger.v3.oas.annotations.media.Schema; |
| 5 | +import jakarta.validation.constraints.NotEmpty; | ||
| 6 | +import jakarta.validation.constraints.NotNull; | ||
| 5 | import lombok.AllArgsConstructor; | 7 | import lombok.AllArgsConstructor; |
| 6 | import lombok.Data; | 8 | import lombok.Data; |
| 7 | import lombok.NoArgsConstructor; | 9 | import lombok.NoArgsConstructor; |
| 8 | 10 | ||
| 9 | -import jakarta.validation.constraints.NotEmpty; | ||
| 10 | -import jakarta.validation.constraints.NotNull; | ||
| 11 | import java.util.HashSet; | 11 | import java.util.HashSet; |
| 12 | import java.util.Set; | 12 | import java.util.Set; |
| 13 | 13 | ||
| @@ -18,11 +18,6 @@ import java.util.Set; | @@ -18,11 +18,6 @@ import java.util.Set; | ||
| 18 | @NoArgsConstructor | 18 | @NoArgsConstructor |
| 19 | @Data | 19 | @Data |
| 20 | public class BpmCandidateSourceInfo { | 20 | public class BpmCandidateSourceInfo { |
| 21 | - | ||
| 22 | - @Schema(description = "流程id") | ||
| 23 | - @NotNull | ||
| 24 | - private String processInstanceId; | ||
| 25 | - | ||
| 26 | @Schema(description = "当前任务ID") | 21 | @Schema(description = "当前任务ID") |
| 27 | @NotNull | 22 | @NotNull |
| 28 | private String taskId; | 23 | private String taskId; |
yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/task/BpmTaskService.java
| @@ -4,11 +4,13 @@ import cn.iocoder.yudao.framework.common.pojo.PageResult; | @@ -4,11 +4,13 @@ import cn.iocoder.yudao.framework.common.pojo.PageResult; | ||
| 4 | import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils; | 4 | import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils; |
| 5 | import cn.iocoder.yudao.module.bpm.controller.admin.task.vo.task.*; | 5 | import cn.iocoder.yudao.module.bpm.controller.admin.task.vo.task.*; |
| 6 | import cn.iocoder.yudao.module.bpm.dal.dataobject.task.BpmTaskExtDO; | 6 | import cn.iocoder.yudao.module.bpm.dal.dataobject.task.BpmTaskExtDO; |
| 7 | +import jakarta.validation.Valid; | ||
| 7 | import org.flowable.task.api.Task; | 8 | import org.flowable.task.api.Task; |
| 8 | 9 | ||
| 9 | -import jakarta.validation.Valid; | 10 | +import java.util.Collection; |
| 10 | import java.util.List; | 11 | import java.util.List; |
| 11 | import java.util.Map; | 12 | import java.util.Map; |
| 13 | +import java.util.Set; | ||
| 12 | 14 | ||
| 13 | /** | 15 | /** |
| 14 | * 流程任务实例 Service 接口 | 16 | * 流程任务实例 Service 接口 |
| @@ -132,6 +134,8 @@ public interface BpmTaskService { | @@ -132,6 +134,8 @@ public interface BpmTaskService { | ||
| 132 | */ | 134 | */ |
| 133 | void updateTaskExtAssign(Task task); | 135 | void updateTaskExtAssign(Task task); |
| 134 | 136 | ||
| 137 | + Task getTask(String id); | ||
| 138 | + | ||
| 135 | /** | 139 | /** |
| 136 | * 获取当前任务的可回退的流程集合 | 140 | * 获取当前任务的可回退的流程集合 |
| 137 | * | 141 | * |
| @@ -181,4 +185,19 @@ public interface BpmTaskService { | @@ -181,4 +185,19 @@ public interface BpmTaskService { | ||
| 181 | */ | 185 | */ |
| 182 | List<BpmTaskSubSignRespVO> getChildrenTaskList(String parentId); | 186 | List<BpmTaskSubSignRespVO> getChildrenTaskList(String parentId); |
| 183 | 187 | ||
| 188 | + /** | ||
| 189 | + * 通过任务id查询任务名 | ||
| 190 | + * | ||
| 191 | + * @param taskIds 任务id | ||
| 192 | + * @return 对应的映射关系 | ||
| 193 | + */ | ||
| 194 | + Map<String/* taskId */, String/* taskName */> getTaskNameByTaskIds(Collection<String> taskIds); | ||
| 195 | + | ||
| 196 | + /** | ||
| 197 | + * 通过流程实例id获取到流程实例名 | ||
| 198 | + * | ||
| 199 | + * @param processInstaneIds 流程实例Id | ||
| 200 | + * @return 对应的映射关系 | ||
| 201 | + */ | ||
| 202 | + Map<String/* processInstaneId */, String/* processInstaneName */> getProcessInstanceNameByProcessInstanceIds(Set<String> processInstaneIds); | ||
| 184 | } | 203 | } |
yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/task/BpmTaskServiceImpl.java
| @@ -19,14 +19,15 @@ import cn.iocoder.yudao.module.bpm.enums.task.BpmCommentTypeEnum; | @@ -19,14 +19,15 @@ import cn.iocoder.yudao.module.bpm.enums.task.BpmCommentTypeEnum; | ||
| 19 | import cn.iocoder.yudao.module.bpm.enums.task.BpmProcessInstanceDeleteReasonEnum; | 19 | import cn.iocoder.yudao.module.bpm.enums.task.BpmProcessInstanceDeleteReasonEnum; |
| 20 | import cn.iocoder.yudao.module.bpm.enums.task.BpmProcessInstanceResultEnum; | 20 | import cn.iocoder.yudao.module.bpm.enums.task.BpmProcessInstanceResultEnum; |
| 21 | import cn.iocoder.yudao.module.bpm.enums.task.BpmTaskAddSignTypeEnum; | 21 | import cn.iocoder.yudao.module.bpm.enums.task.BpmTaskAddSignTypeEnum; |
| 22 | -import cn.iocoder.yudao.module.bpm.service.candidate.BpmCandidateSourceInfo; | ||
| 23 | -import cn.iocoder.yudao.module.bpm.service.cc.BpmProcessInstanceCopyService; | ||
| 24 | import cn.iocoder.yudao.module.bpm.service.definition.BpmModelService; | 22 | import cn.iocoder.yudao.module.bpm.service.definition.BpmModelService; |
| 25 | import cn.iocoder.yudao.module.bpm.service.message.BpmMessageService; | 23 | import cn.iocoder.yudao.module.bpm.service.message.BpmMessageService; |
| 24 | +import cn.iocoder.yudao.module.bpm.service.task.cc.BpmProcessInstanceCopyService; | ||
| 26 | import cn.iocoder.yudao.module.system.api.dept.DeptApi; | 25 | import cn.iocoder.yudao.module.system.api.dept.DeptApi; |
| 27 | import cn.iocoder.yudao.module.system.api.dept.dto.DeptRespDTO; | 26 | import cn.iocoder.yudao.module.system.api.dept.dto.DeptRespDTO; |
| 28 | import cn.iocoder.yudao.module.system.api.user.AdminUserApi; | 27 | import cn.iocoder.yudao.module.system.api.user.AdminUserApi; |
| 29 | import cn.iocoder.yudao.module.system.api.user.dto.AdminUserRespDTO; | 28 | import cn.iocoder.yudao.module.system.api.user.dto.AdminUserRespDTO; |
| 29 | +import jakarta.annotation.Resource; | ||
| 30 | +import jakarta.validation.Valid; | ||
| 30 | import lombok.extern.slf4j.Slf4j; | 31 | import lombok.extern.slf4j.Slf4j; |
| 31 | import org.flowable.bpmn.model.BpmnModel; | 32 | import org.flowable.bpmn.model.BpmnModel; |
| 32 | import org.flowable.bpmn.model.FlowElement; | 33 | import org.flowable.bpmn.model.FlowElement; |
| @@ -51,8 +52,6 @@ import org.springframework.transaction.support.TransactionSynchronization; | @@ -51,8 +52,6 @@ import org.springframework.transaction.support.TransactionSynchronization; | ||
| 51 | import org.springframework.transaction.support.TransactionSynchronizationManager; | 52 | import org.springframework.transaction.support.TransactionSynchronizationManager; |
| 52 | import org.springframework.util.Assert; | 53 | import org.springframework.util.Assert; |
| 53 | 54 | ||
| 54 | -import jakarta.annotation.Resource; | ||
| 55 | -import jakarta.validation.Valid; | ||
| 56 | import java.time.LocalDateTime; | 55 | import java.time.LocalDateTime; |
| 57 | import java.util.*; | 56 | import java.util.*; |
| 58 | import java.util.stream.Stream; | 57 | import java.util.stream.Stream; |
| @@ -558,7 +557,8 @@ public class BpmTaskServiceImpl implements BpmTaskService { | @@ -558,7 +557,8 @@ public class BpmTaskServiceImpl implements BpmTaskService { | ||
| 558 | return task; | 557 | return task; |
| 559 | } | 558 | } |
| 560 | 559 | ||
| 561 | - private Task getTask(String id) { | 560 | + @Override |
| 561 | + public Task getTask(String id) { | ||
| 562 | return taskService.createTaskQuery().taskId(id).singleResult(); | 562 | return taskService.createTaskQuery().taskId(id).singleResult(); |
| 563 | } | 563 | } |
| 564 | 564 | ||
| @@ -971,4 +971,29 @@ public class BpmTaskServiceImpl implements BpmTaskService { | @@ -971,4 +971,29 @@ public class BpmTaskServiceImpl implements BpmTaskService { | ||
| 971 | return BpmTaskConvert.INSTANCE.convertList(taskExtList, userMap, idTaskMap); | 971 | return BpmTaskConvert.INSTANCE.convertList(taskExtList, userMap, idTaskMap); |
| 972 | } | 972 | } |
| 973 | 973 | ||
| 974 | + @Override | ||
| 975 | + public Map<String/* taskId */, String/* taskName */> getTaskNameByTaskIds(Collection<String> taskIds) { | ||
| 976 | + List<Task> tasks = taskService.createTaskQuery().taskIds(taskIds).list(); | ||
| 977 | + if (CollUtil.isNotEmpty(tasks)) { | ||
| 978 | + Map<String/* taskId */, String/* taskName */> taskMap = new HashMap<>(tasks.size()); | ||
| 979 | + for (Task task : tasks) { | ||
| 980 | + taskMap.putIfAbsent(task.getId(), task.getName()); | ||
| 981 | + } | ||
| 982 | + return taskMap; | ||
| 983 | + } | ||
| 984 | + return Collections.emptyMap(); | ||
| 985 | + } | ||
| 986 | + | ||
| 987 | + @Override | ||
| 988 | + public Map<String/* processInstaneId */, String/* processInstaneName */> getProcessInstanceNameByProcessInstanceIds(Set<String> processInstanceIds) { | ||
| 989 | + List<ProcessInstance> processInstances = runtimeService.createProcessInstanceQuery().processInstanceIds(processInstanceIds).list(); | ||
| 990 | + if (CollUtil.isNotEmpty(processInstances)) { | ||
| 991 | + Map<String/* processInstaneId */, String/* processInstaneName */> processInstaneMap = new HashMap<>(processInstances.size()); | ||
| 992 | + for (ProcessInstance processInstance : processInstances) { | ||
| 993 | + processInstaneMap.putIfAbsent(processInstance.getId(), processInstance.getName()); | ||
| 994 | + } | ||
| 995 | + return processInstaneMap; | ||
| 996 | + } | ||
| 997 | + return Collections.emptyMap(); | ||
| 998 | + } | ||
| 974 | } | 999 | } |
yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/cc/BpmProcessInstanceCopyService.java renamed to yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/task/cc/BpmProcessInstanceCopyService.java
| 1 | -package cn.iocoder.yudao.module.bpm.service.cc; | 1 | +package cn.iocoder.yudao.module.bpm.service.task.cc; |
| 2 | 2 | ||
| 3 | import cn.iocoder.yudao.framework.common.pojo.PageResult; | 3 | import cn.iocoder.yudao.framework.common.pojo.PageResult; |
| 4 | -import cn.iocoder.yudao.module.bpm.controller.admin.task.vo.instance.BpmProcessInstanceCCMyPageReqVO; | ||
| 5 | -import cn.iocoder.yudao.module.bpm.controller.admin.task.vo.instance.BpmProcessInstanceCCPageItemRespVO; | ||
| 6 | -import cn.iocoder.yudao.module.bpm.controller.admin.task.vo.instance.BpmProcessInstanceCCReqVO; | 4 | +import cn.iocoder.yudao.module.bpm.controller.admin.task.vo.instance.BpmProcessInstanceCopyCreateReqVO; |
| 5 | +import cn.iocoder.yudao.module.bpm.controller.admin.task.vo.instance.BpmProcessInstanceCopyMyPageReqVO; | ||
| 6 | +import cn.iocoder.yudao.module.bpm.controller.admin.task.vo.instance.BpmProcessInstanceCopyPageItemRespVO; | ||
| 7 | +import cn.iocoder.yudao.module.bpm.dal.dataobject.cc.BpmProcessInstanceCopyDO; | ||
| 7 | import cn.iocoder.yudao.module.bpm.service.candidate.BpmCandidateSourceInfo; | 8 | import cn.iocoder.yudao.module.bpm.service.candidate.BpmCandidateSourceInfo; |
| 8 | 9 | ||
| 9 | -// TODO @kyle:这个 Service 要不挪到 task 包下;保持统一,task 下有流程、任务、抄送等; | ||
| 10 | -// TODO @kyle:中文和英文之间,有个空格,会更清晰点;例如说;流程抄送 Service 接口;中文写作习惯~ | ||
| 11 | /** | 10 | /** |
| 12 | - * 流程抄送Service接口 | 11 | + * 流程抄送 Service 接口 |
| 13 | * | 12 | * |
| 14 | * 现在是在审批的时候进行流程抄送 | 13 | * 现在是在审批的时候进行流程抄送 |
| 15 | */ | 14 | */ |
| 16 | public interface BpmProcessInstanceCopyService { | 15 | public interface BpmProcessInstanceCopyService { |
| 17 | 16 | ||
| 18 | - // TODO @kyle:无用的方法,可以去掉哈;另外,考虑到避免过多的 VO,这里就可以返回 BpmProcessInstanceCopyDO | ||
| 19 | - /** | ||
| 20 | - * 查询流程抄送 | ||
| 21 | - * | ||
| 22 | - * @param copyId 流程抄送主键 | ||
| 23 | - * @return 流程抄送 | ||
| 24 | - */ | ||
| 25 | - BpmProcessInstanceCopyVO queryById(Long copyId); | ||
| 26 | - | ||
| 27 | // TODO 芋艿:这块要 review 下;思考下~~ | 17 | // TODO 芋艿:这块要 review 下;思考下~~ |
| 28 | /** | 18 | /** |
| 29 | * 抄送 | 19 | * 抄送 |
| @@ -32,22 +22,20 @@ public interface BpmProcessInstanceCopyService { | @@ -32,22 +22,20 @@ public interface BpmProcessInstanceCopyService { | ||
| 32 | */ | 22 | */ |
| 33 | boolean makeCopy(BpmCandidateSourceInfo sourceInfo); | 23 | boolean makeCopy(BpmCandidateSourceInfo sourceInfo); |
| 34 | 24 | ||
| 35 | - // TODO @kyle:可以方法名改成 createProcessInstanceCopy;现在项目一般新增都用 create 为主; | ||
| 36 | /** | 25 | /** |
| 37 | * 流程实例的抄送 | 26 | * 流程实例的抄送 |
| 38 | * | 27 | * |
| 39 | - * @param userId 当前登录用户 | 28 | + * @param userId 当前登录用户 |
| 40 | * @param createReqVO 创建的抄送请求 | 29 | * @param createReqVO 创建的抄送请求 |
| 41 | - * @return 是否抄送成功,抄送成功则返回true TODO @kyle:这里可以不用返回哈;目前一般是失败,就抛出业务异常; | ||
| 42 | */ | 30 | */ |
| 43 | - boolean ccProcessInstance(Long userId, BpmProcessInstanceCCReqVO createReqVO); | 31 | + Void createProcessInstanceCopy(Long userId, BpmProcessInstanceCopyCreateReqVO createReqVO); |
| 44 | 32 | ||
| 45 | /** | 33 | /** |
| 46 | - * 抄送的流程 | 34 | + * 抄送的流程的分页 |
| 47 | * @param loginUserId 登录用户id | 35 | * @param loginUserId 登录用户id |
| 48 | * @param pageReqVO 分页请求 | 36 | * @param pageReqVO 分页请求 |
| 49 | * @return 抄送的分页结果 | 37 | * @return 抄送的分页结果 |
| 50 | */ | 38 | */ |
| 51 | - PageResult<BpmProcessInstanceCCPageItemRespVO> getMyProcessInstanceCCPage(Long loginUserId, | ||
| 52 | - BpmProcessInstanceCCMyPageReqVO pageReqVO); | 39 | + PageResult<BpmProcessInstanceCopyDO> getMyProcessInstanceCopyPage(Long loginUserId, |
| 40 | + BpmProcessInstanceCopyMyPageReqVO pageReqVO); | ||
| 53 | } | 41 | } |
yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/cc/BpmProcessInstanceCopyServiceImpl.java renamed to yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/task/cc/BpmProcessInstanceCopyServiceImpl.java
| 1 | -package cn.iocoder.yudao.module.bpm.service.cc; | 1 | +package cn.iocoder.yudao.module.bpm.service.task.cc; |
| 2 | 2 | ||
| 3 | +import cn.hutool.core.bean.BeanUtil; | ||
| 3 | import cn.hutool.core.collection.CollUtil; | 4 | import cn.hutool.core.collection.CollUtil; |
| 5 | +import cn.hutool.core.util.ObjectUtil; | ||
| 6 | +import cn.hutool.core.util.StrUtil; | ||
| 4 | import cn.iocoder.yudao.framework.common.pojo.PageResult; | 7 | import cn.iocoder.yudao.framework.common.pojo.PageResult; |
| 5 | -import cn.iocoder.yudao.module.bpm.controller.admin.task.vo.instance.BpmProcessInstanceCCMyPageReqVO; | ||
| 6 | -import cn.iocoder.yudao.module.bpm.controller.admin.task.vo.instance.BpmProcessInstanceCCPageItemRespVO; | ||
| 7 | -import cn.iocoder.yudao.module.bpm.controller.admin.task.vo.instance.BpmProcessInstanceCCReqVO; | 8 | +import cn.iocoder.yudao.module.bpm.controller.admin.task.vo.instance.BpmProcessInstanceCopyCreateReqVO; |
| 9 | +import cn.iocoder.yudao.module.bpm.controller.admin.task.vo.instance.BpmProcessInstanceCopyMyPageReqVO; | ||
| 10 | +import cn.iocoder.yudao.module.bpm.controller.admin.task.vo.instance.BpmProcessInstanceCopyPageItemRespVO; | ||
| 8 | import cn.iocoder.yudao.module.bpm.convert.cc.BpmProcessInstanceCopyConvert; | 11 | import cn.iocoder.yudao.module.bpm.convert.cc.BpmProcessInstanceCopyConvert; |
| 9 | import cn.iocoder.yudao.module.bpm.dal.dataobject.cc.BpmProcessInstanceCopyDO; | 12 | import cn.iocoder.yudao.module.bpm.dal.dataobject.cc.BpmProcessInstanceCopyDO; |
| 10 | import cn.iocoder.yudao.module.bpm.dal.mysql.cc.BpmProcessInstanceCopyMapper; | 13 | import cn.iocoder.yudao.module.bpm.dal.mysql.cc.BpmProcessInstanceCopyMapper; |
| 14 | +import cn.iocoder.yudao.module.bpm.enums.ErrorCodeConstants; | ||
| 15 | +import cn.iocoder.yudao.module.bpm.enums.definition.BpmTaskAssignRuleTypeEnum; | ||
| 11 | import cn.iocoder.yudao.module.bpm.service.candidate.BpmCandidateSourceInfo; | 16 | import cn.iocoder.yudao.module.bpm.service.candidate.BpmCandidateSourceInfo; |
| 12 | import cn.iocoder.yudao.module.bpm.service.candidate.BpmCandidateSourceInfoProcessorChain; | 17 | import cn.iocoder.yudao.module.bpm.service.candidate.BpmCandidateSourceInfoProcessorChain; |
| 13 | -import cn.iocoder.yudao.module.bpm.service.cc.dto.BpmDelegateExecutionDTO; | ||
| 14 | import cn.iocoder.yudao.module.bpm.service.task.BpmProcessInstanceService; | 18 | import cn.iocoder.yudao.module.bpm.service.task.BpmProcessInstanceService; |
| 15 | import cn.iocoder.yudao.module.bpm.service.task.BpmTaskService; | 19 | import cn.iocoder.yudao.module.bpm.service.task.BpmTaskService; |
| 20 | +import cn.iocoder.yudao.module.bpm.service.task.cc.dto.BpmDelegateExecutionDTO; | ||
| 16 | import cn.iocoder.yudao.module.bpm.util.FlowableUtils; | 21 | import cn.iocoder.yudao.module.bpm.util.FlowableUtils; |
| 17 | import cn.iocoder.yudao.module.system.api.user.AdminUserApi; | 22 | import cn.iocoder.yudao.module.system.api.user.AdminUserApi; |
| 18 | import cn.iocoder.yudao.module.system.api.user.dto.AdminUserRespDTO; | 23 | import cn.iocoder.yudao.module.system.api.user.dto.AdminUserRespDTO; |
| @@ -22,6 +27,7 @@ import org.flowable.engine.RuntimeService; | @@ -22,6 +27,7 @@ import org.flowable.engine.RuntimeService; | ||
| 22 | import org.flowable.engine.delegate.DelegateExecution; | 27 | import org.flowable.engine.delegate.DelegateExecution; |
| 23 | import org.flowable.engine.repository.ProcessDefinition; | 28 | import org.flowable.engine.repository.ProcessDefinition; |
| 24 | import org.flowable.engine.runtime.ProcessInstance; | 29 | import org.flowable.engine.runtime.ProcessInstance; |
| 30 | +import org.flowable.task.api.Task; | ||
| 25 | import org.springframework.context.annotation.Lazy; | 31 | import org.springframework.context.annotation.Lazy; |
| 26 | import org.springframework.stereotype.Service; | 32 | import org.springframework.stereotype.Service; |
| 27 | import org.springframework.validation.annotation.Validated; | 33 | import org.springframework.validation.annotation.Validated; |
| @@ -30,53 +36,47 @@ import java.time.LocalDateTime; | @@ -30,53 +36,47 @@ import java.time.LocalDateTime; | ||
| 30 | import java.util.*; | 36 | import java.util.*; |
| 31 | import java.util.stream.Collectors; | 37 | import java.util.stream.Collectors; |
| 32 | 38 | ||
| 33 | -// TODO @kyle:类注释要写下 | ||
| 34 | -@Slf4j // TODO @kyle:按照 @Service、@Validated、@Slf4j,从重要到不重要的顺序; | 39 | +import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; |
| 40 | +import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertSet; | ||
| 41 | + | ||
| 42 | +/** | ||
| 43 | + * Flowable流程抄送实现 | ||
| 44 | + * | ||
| 45 | + * @author kyle | ||
| 46 | + */ | ||
| 35 | @Service | 47 | @Service |
| 36 | @Validated | 48 | @Validated |
| 49 | +@Slf4j | ||
| 37 | public class BpmProcessInstanceCopyServiceImpl implements BpmProcessInstanceCopyService { | 50 | public class BpmProcessInstanceCopyServiceImpl implements BpmProcessInstanceCopyService { |
| 38 | - @Resource // TODO @kyle:第一个变量,和类之间要有空行; | 51 | + |
| 52 | + @Resource | ||
| 39 | private BpmProcessInstanceCopyMapper processInstanceCopyMapper; | 53 | private BpmProcessInstanceCopyMapper processInstanceCopyMapper; |
| 40 | 54 | ||
| 41 | - /** | ||
| 42 | - * 和flowable有关的,查询流程名用的 TODO @kyle:可以不写哈注释; | ||
| 43 | - */ | ||
| 44 | @Resource | 55 | @Resource |
| 45 | private RuntimeService runtimeService; | 56 | private RuntimeService runtimeService; |
| 46 | 57 | ||
| 47 | - /** | ||
| 48 | - * 找抄送人用的 TODO @kyle:可以不写哈注释; | ||
| 49 | - */ | ||
| 50 | @Resource | 58 | @Resource |
| 51 | private BpmCandidateSourceInfoProcessorChain processorChain; | 59 | private BpmCandidateSourceInfoProcessorChain processorChain; |
| 52 | 60 | ||
| 53 | - // TODO @kyle:多余的变量,可以去掉哈 | ||
| 54 | @Resource | 61 | @Resource |
| 55 | - @Lazy // 解决循环依赖 | 62 | + @Lazy |
| 56 | private BpmTaskService bpmTaskService; | 63 | private BpmTaskService bpmTaskService; |
| 57 | - @Resource | ||
| 58 | - @Lazy // 解决循环依赖 | ||
| 59 | - private BpmProcessInstanceService bpmProcessInstanceService; | ||
| 60 | - @Resource | ||
| 61 | - private AdminUserApi adminUserApi; | ||
| 62 | - | ||
| 63 | - @Override | ||
| 64 | - public BpmProcessInstanceCopyVO queryById(Long copyId) { | ||
| 65 | - BpmProcessInstanceCopyDO bpmProcessInstanceCopyDO = processInstanceCopyMapper.selectById(copyId); | ||
| 66 | - return BpmProcessInstanceCopyConvert.INSTANCE.convert(bpmProcessInstanceCopyDO); | ||
| 67 | - } | ||
| 68 | 64 | ||
| 69 | - // TODO @kyle:makeCopy 和 ccProcessInstance 的调用关系,感受上反了; | ||
| 70 | - // makeCopy 有点像基于规则,查找抄送人,然后创建; | ||
| 71 | - // ccProcessInstance 是已经有了抄送人,然后创建; | ||
| 72 | - // 建议的改造:独立基于 processInstanceCopyMapper 做 insert | ||
| 73 | @Override | 65 | @Override |
| 74 | public boolean makeCopy(BpmCandidateSourceInfo sourceInfo) { | 66 | public boolean makeCopy(BpmCandidateSourceInfo sourceInfo) { |
| 75 | if (null == sourceInfo) { | 67 | if (null == sourceInfo) { |
| 76 | return false; | 68 | return false; |
| 77 | } | 69 | } |
| 78 | 70 | ||
| 79 | - DelegateExecution executionEntity = new BpmDelegateExecutionDTO(sourceInfo.getProcessInstanceId()); | 71 | + Task task = bpmTaskService.getTask(sourceInfo.getTaskId()); |
| 72 | + if (ObjectUtil.isNull(task)) { | ||
| 73 | + return false; | ||
| 74 | + } | ||
| 75 | + String processInstanceId = task.getProcessInstanceId(); | ||
| 76 | + if (StrUtil.isBlank(processInstanceId)) { | ||
| 77 | + return false; | ||
| 78 | + } | ||
| 79 | + DelegateExecution executionEntity = new BpmDelegateExecutionDTO(processInstanceId); | ||
| 80 | Set<Long> ccCandidates = processorChain.calculateTaskCandidateUsers(executionEntity, sourceInfo); | 80 | Set<Long> ccCandidates = processorChain.calculateTaskCandidateUsers(executionEntity, sourceInfo); |
| 81 | if (CollUtil.isEmpty(ccCandidates)) { | 81 | if (CollUtil.isEmpty(ccCandidates)) { |
| 82 | log.warn("相关抄送人不存在 {}", sourceInfo.getTaskId()); | 82 | log.warn("相关抄送人不存在 {}", sourceInfo.getTaskId()); |
| @@ -87,9 +87,9 @@ public class BpmProcessInstanceCopyServiceImpl implements BpmProcessInstanceCopy | @@ -87,9 +87,9 @@ public class BpmProcessInstanceCopyServiceImpl implements BpmProcessInstanceCopy | ||
| 87 | // 设置任务id | 87 | // 设置任务id |
| 88 | copyDO.setTaskId(sourceInfo.getTaskId()); | 88 | copyDO.setTaskId(sourceInfo.getTaskId()); |
| 89 | copyDO.setTaskName(FlowableUtils.getTaskNameByTaskId(sourceInfo.getTaskId())); | 89 | copyDO.setTaskName(FlowableUtils.getTaskNameByTaskId(sourceInfo.getTaskId())); |
| 90 | - copyDO.setProcessInstanceId(sourceInfo.getProcessInstanceId()); | 90 | + copyDO.setProcessInstanceId(processInstanceId); |
| 91 | ProcessInstance processInstance = runtimeService.createProcessInstanceQuery() | 91 | ProcessInstance processInstance = runtimeService.createProcessInstanceQuery() |
| 92 | - .processInstanceId(sourceInfo.getProcessInstanceId()) | 92 | + .processInstanceId(processInstanceId) |
| 93 | .singleResult(); | 93 | .singleResult(); |
| 94 | if (null == processInstance) { | 94 | if (null == processInstance) { |
| 95 | log.warn("相关流程实例不存在 {}", sourceInfo.getTaskId()); | 95 | log.warn("相关流程实例不存在 {}", sourceInfo.getTaskId()); |
| @@ -98,13 +98,13 @@ public class BpmProcessInstanceCopyServiceImpl implements BpmProcessInstanceCopy | @@ -98,13 +98,13 @@ public class BpmProcessInstanceCopyServiceImpl implements BpmProcessInstanceCopy | ||
| 98 | copyDO.setStartUserId(FlowableUtils.getStartUserIdFromProcessInstance(processInstance)); | 98 | copyDO.setStartUserId(FlowableUtils.getStartUserIdFromProcessInstance(processInstance)); |
| 99 | copyDO.setProcessInstanceName(processInstance.getName()); | 99 | copyDO.setProcessInstanceName(processInstance.getName()); |
| 100 | ProcessDefinition processDefinition = FlowableUtils.getProcessDefinition(processInstance.getProcessDefinitionId()); | 100 | ProcessDefinition processDefinition = FlowableUtils.getProcessDefinition(processInstance.getProcessDefinitionId()); |
| 101 | - copyDO.setProcessDefinitionCategory(processDefinition.getCategory()); | 101 | + copyDO.setCategory(processDefinition.getCategory()); |
| 102 | copyDO.setReason(sourceInfo.getReason()); | 102 | copyDO.setReason(sourceInfo.getReason()); |
| 103 | copyDO.setCreator(sourceInfo.getCreator()); | 103 | copyDO.setCreator(sourceInfo.getCreator()); |
| 104 | copyDO.setCreateTime(LocalDateTime.now()); | 104 | copyDO.setCreateTime(LocalDateTime.now()); |
| 105 | List<BpmProcessInstanceCopyDO> copyList = new ArrayList<>(ccCandidates.size()); | 105 | List<BpmProcessInstanceCopyDO> copyList = new ArrayList<>(ccCandidates.size()); |
| 106 | for (Long userId : ccCandidates) { | 106 | for (Long userId : ccCandidates) { |
| 107 | - BpmProcessInstanceCopyDO copy = BpmProcessInstanceCopyConvert.INSTANCE.copy(copyDO); | 107 | + BpmProcessInstanceCopyDO copy = BeanUtil.copyProperties(copyDO, BpmProcessInstanceCopyDO.class); |
| 108 | copy.setUserId(userId); | 108 | copy.setUserId(userId); |
| 109 | copyList.add(copy); | 109 | copyList.add(copy); |
| 110 | } | 110 | } |
| @@ -113,53 +113,53 @@ public class BpmProcessInstanceCopyServiceImpl implements BpmProcessInstanceCopy | @@ -113,53 +113,53 @@ public class BpmProcessInstanceCopyServiceImpl implements BpmProcessInstanceCopy | ||
| 113 | } | 113 | } |
| 114 | 114 | ||
| 115 | @Override | 115 | @Override |
| 116 | - public boolean ccProcessInstance(Long userId, BpmProcessInstanceCCReqVO reqVO) { | 116 | + public Void createProcessInstanceCopy(Long userId, BpmProcessInstanceCopyCreateReqVO reqVO) { |
| 117 | + if (!ObjectUtil.equal(reqVO.getType(), BpmTaskAssignRuleTypeEnum.USER.getType())) { | ||
| 118 | + throw new IllegalArgumentException("业务仅支持USER"); | ||
| 119 | + } | ||
| 120 | + Task task = bpmTaskService.getTask(reqVO.getTaskId()); | ||
| 121 | + if (ObjectUtil.isNull(task)) { | ||
| 122 | + throw exception(ErrorCodeConstants.TASK_NOT_EXISTS); | ||
| 123 | + } | ||
| 124 | + String processInstanceId = task.getProcessInstanceId(); | ||
| 125 | + if (StrUtil.isBlank(processInstanceId)) { | ||
| 126 | + throw exception(ErrorCodeConstants.PROCESS_INSTANCE_NOT_EXISTS); | ||
| 127 | + } | ||
| 117 | // 在能正常审批的情况下抄送流程 | 128 | // 在能正常审批的情况下抄送流程 |
| 118 | - BpmCandidateSourceInfo sourceInfo = new BpmCandidateSourceInfo(); | ||
| 119 | - sourceInfo.setTaskId(reqVO.getTaskKey()); | ||
| 120 | - sourceInfo.setProcessInstanceId(reqVO.getProcessInstanceKey()); | ||
| 121 | - sourceInfo.addRule(reqVO); | ||
| 122 | - sourceInfo.setCreator(String.valueOf(userId)); | ||
| 123 | - sourceInfo.setReason(reqVO.getReason()); | ||
| 124 | - if (!makeCopy(sourceInfo)) { | ||
| 125 | - throw new RuntimeException("抄送任务失败"); | 129 | + BpmProcessInstanceCopyDO copyDO = new BpmProcessInstanceCopyDO(); |
| 130 | + // 调用 | ||
| 131 | + // 设置任务id | ||
| 132 | + copyDO.setTaskId(reqVO.getTaskId()); | ||
| 133 | + copyDO.setTaskName(FlowableUtils.getTaskNameByTaskId(reqVO.getTaskId())); | ||
| 134 | + copyDO.setProcessInstanceId(processInstanceId); | ||
| 135 | + ProcessInstance processInstance = runtimeService.createProcessInstanceQuery() | ||
| 136 | + .processInstanceId(processInstanceId) | ||
| 137 | + .singleResult(); | ||
| 138 | + if (null == processInstance) { | ||
| 139 | + log.warn("相关流程实例不存在 {}", reqVO.getTaskId()); | ||
| 140 | + throw exception(ErrorCodeConstants.PROCESS_INSTANCE_NOT_EXISTS); | ||
| 126 | } | 141 | } |
| 127 | - return false; | 142 | + copyDO.setStartUserId(FlowableUtils.getStartUserIdFromProcessInstance(processInstance)); |
| 143 | + copyDO.setProcessInstanceName(processInstance.getName()); | ||
| 144 | + ProcessDefinition processDefinition = FlowableUtils.getProcessDefinition(processInstance.getProcessDefinitionId()); | ||
| 145 | + copyDO.setCategory(processDefinition.getCategory()); | ||
| 146 | + copyDO.setReason(reqVO.getReason()); | ||
| 147 | + copyDO.setCreator(String.valueOf(userId)); | ||
| 148 | + copyDO.setCreateTime(LocalDateTime.now()); | ||
| 149 | + List<BpmProcessInstanceCopyDO> copyList = new ArrayList<>(reqVO.getOptions().size()); | ||
| 150 | + for (Long copyUserId : reqVO.getOptions()) { | ||
| 151 | + BpmProcessInstanceCopyDO copy = BeanUtil.copyProperties(copyDO, BpmProcessInstanceCopyDO.class); | ||
| 152 | + copy.setUserId(copyUserId); | ||
| 153 | + copyList.add(copy); | ||
| 154 | + } | ||
| 155 | + processInstanceCopyMapper.insertBatch(copyList); | ||
| 156 | + return null; | ||
| 128 | } | 157 | } |
| 129 | 158 | ||
| 130 | - //获取流程抄送分页 TODO @kyle:接口已经注释,这里不用注释了哈; | ||
| 131 | @Override | 159 | @Override |
| 132 | - public PageResult<BpmProcessInstanceCCPageItemRespVO> getMyProcessInstanceCCPage(Long loginUserId, BpmProcessInstanceCCMyPageReqVO pageReqVO) { | 160 | + public PageResult<BpmProcessInstanceCopyDO> getMyProcessInstanceCopyPage(Long loginUserId, BpmProcessInstanceCopyMyPageReqVO pageReqVO) { |
| 133 | // 通过 BpmProcessInstanceExtDO 表,先查询到对应的分页 | 161 | // 通过 BpmProcessInstanceExtDO 表,先查询到对应的分页 |
| 134 | - // TODO @kyle:一般读逻辑,Service 返回 PageResult<BpmProcessInstanceCopyDO> 即可。关联数据的查询和拼接,交给 Controller;目的是:保证 Service 聚焦写逻辑,清晰简洁; | ||
| 135 | - PageResult<BpmProcessInstanceCopyDO> pageResult = processInstanceCopyMapper.selectPage(loginUserId, pageReqVO); | ||
| 136 | - if (CollUtil.isEmpty(pageResult.getList())) { | ||
| 137 | - return new PageResult<>(pageResult.getTotal()); | ||
| 138 | - } | ||
| 139 | - | ||
| 140 | - // TODO @kyle:这种可以简洁点;参考如下 | ||
| 141 | -// Map<String, ProcessInstance> processInstanceMap = bpmProcessInstanceService.getProcessInstanceMap( | ||
| 142 | -// convertSet(pageResult.getList(), BpmProcessInstanceCopyDO::getProcessInstanceId)); | ||
| 143 | - | ||
| 144 | - Set<String/* taskId */> taskIds = new HashSet<>(); | ||
| 145 | - Set<String/* processInstaneId */> processInstaneIds = new HashSet<>(); | ||
| 146 | - Set<Long/* userId */> userIds = new HashSet<>(); | ||
| 147 | - for (BpmProcessInstanceCopyDO doItem : pageResult.getList()) { | ||
| 148 | - taskIds.add(doItem.getTaskId()); | ||
| 149 | - processInstaneIds.add(doItem.getProcessInstanceId()); | ||
| 150 | - userIds.add(doItem.getStartUserId()); | ||
| 151 | - Long userId = Long.valueOf(doItem.getCreator()); | ||
| 152 | - userIds.add(userId); | ||
| 153 | - } | ||
| 154 | - | ||
| 155 | - Map<String, String> taskNameByTaskIds = FlowableUtils.getTaskNameByTaskIds(taskIds); | ||
| 156 | - Map<String, String> processInstanceNameByTaskIds = FlowableUtils.getProcessInstanceNameByTaskIds(processInstaneIds); | ||
| 157 | - | ||
| 158 | - Map<Long, String> userMap = adminUserApi.getUserList(userIds).stream().collect(Collectors.toMap( | ||
| 159 | - AdminUserRespDTO::getId, AdminUserRespDTO::getNickname)); | ||
| 160 | - | ||
| 161 | - // 转换返回 | ||
| 162 | - return BpmProcessInstanceCopyConvert.INSTANCE.convertPage(pageResult, taskNameByTaskIds, processInstanceNameByTaskIds, userMap); | 162 | + return processInstanceCopyMapper.selectPage(loginUserId, pageReqVO); |
| 163 | } | 163 | } |
| 164 | 164 | ||
| 165 | } | 165 | } |
yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/cc/dto/BpmDelegateExecutionDTO.java renamed to yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/task/cc/dto/BpmDelegateExecutionDTO.java
| 1 | -package cn.iocoder.yudao.module.bpm.service.cc.dto; | 1 | +package cn.iocoder.yudao.module.bpm.service.task.cc.dto; |
| 2 | 2 | ||
| 3 | import org.flowable.bpmn.model.FlowElement; | 3 | import org.flowable.bpmn.model.FlowElement; |
| 4 | import org.flowable.bpmn.model.FlowableListener; | 4 | import org.flowable.bpmn.model.FlowableListener; |
yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/util/FlowableUtils.java
| 1 | package cn.iocoder.yudao.module.bpm.util; | 1 | package cn.iocoder.yudao.module.bpm.util; |
| 2 | 2 | ||
| 3 | 3 | ||
| 4 | -import cn.hutool.core.collection.CollUtil; | ||
| 5 | import cn.hutool.extra.spring.SpringUtil; | 4 | import cn.hutool.extra.spring.SpringUtil; |
| 6 | import cn.iocoder.yudao.framework.common.util.number.NumberUtils; | 5 | import cn.iocoder.yudao.framework.common.util.number.NumberUtils; |
| 7 | import org.flowable.bpmn.model.BpmnModel; | 6 | import org.flowable.bpmn.model.BpmnModel; |
| @@ -15,7 +14,8 @@ import org.flowable.engine.repository.ProcessDefinition; | @@ -15,7 +14,8 @@ import org.flowable.engine.repository.ProcessDefinition; | ||
| 15 | import org.flowable.engine.runtime.ProcessInstance; | 14 | import org.flowable.engine.runtime.ProcessInstance; |
| 16 | import org.flowable.task.api.Task; | 15 | import org.flowable.task.api.Task; |
| 17 | 16 | ||
| 18 | -import java.util.*; | 17 | +import java.util.List; |
| 18 | +import java.util.Map; | ||
| 19 | 19 | ||
| 20 | /** | 20 | /** |
| 21 | * 流程引擎工具类封装 | 21 | * 流程引擎工具类封装 |
| @@ -88,40 +88,4 @@ public class FlowableUtils { | @@ -88,40 +88,4 @@ public class FlowableUtils { | ||
| 88 | return task.getName(); | 88 | return task.getName(); |
| 89 | } | 89 | } |
| 90 | 90 | ||
| 91 | - // TODO @kyle:Utils 里不做查询;可以封装到 bpmTaskService 里 | ||
| 92 | - public static Map<String/* taskId */, String/* taskName */> getTaskNameByTaskIds(Collection<String> taskIds) { | ||
| 93 | - TaskService taskService = SpringUtil.getBean(TaskService.class); | ||
| 94 | - List<Task> tasks = taskService.createTaskQuery().taskIds(taskIds).list(); | ||
| 95 | - if (CollUtil.isNotEmpty(tasks)) { | ||
| 96 | - Map<String/* taskId */, String/* taskName */> taskMap = new HashMap<>(tasks.size()); | ||
| 97 | - for (Task task : tasks) { | ||
| 98 | - taskMap.putIfAbsent(task.getId(), task.getName()); | ||
| 99 | - } | ||
| 100 | - return taskMap; | ||
| 101 | - } | ||
| 102 | - return Collections.emptyMap(); | ||
| 103 | - } | ||
| 104 | - | ||
| 105 | - public static String getProcessInstanceNameByTaskId(String processInstanceId) { | ||
| 106 | - RuntimeService runtimeService = SpringUtil.getBean(RuntimeService.class); | ||
| 107 | - ProcessInstance processInstance = runtimeService.createProcessInstanceQuery() | ||
| 108 | - .processInstanceId(processInstanceId) | ||
| 109 | - .singleResult(); | ||
| 110 | - return processInstance.getName(); | ||
| 111 | - } | ||
| 112 | - | ||
| 113 | - // TODO @kyle:Utils 里不做查询;可以封装到 bpmTaskService 里 | ||
| 114 | - public static Map<String/* processInstaneId */, String/* processInstaneName */> getProcessInstanceNameByTaskIds(Set<String> taskIds) { | ||
| 115 | - RuntimeService runtimeService = SpringUtil.getBean(RuntimeService.class); | ||
| 116 | - List<ProcessInstance> processInstances = runtimeService.createProcessInstanceQuery().processInstanceIds(taskIds).list(); | ||
| 117 | - if (CollUtil.isNotEmpty(processInstances)) { | ||
| 118 | - Map<String/* processInstaneId */, String/* processInstaneName */> processInstaneMap = new HashMap<>(processInstances.size()); | ||
| 119 | - for (ProcessInstance processInstance : processInstances) { | ||
| 120 | - processInstaneMap.putIfAbsent(processInstance.getId(), processInstance.getName()); | ||
| 121 | - } | ||
| 122 | - return processInstaneMap; | ||
| 123 | - } | ||
| 124 | - return Collections.emptyMap(); | ||
| 125 | - } | ||
| 126 | - | ||
| 127 | } | 91 | } |
yudao-module-bpm/yudao-module-bpm-biz/src/test/java/cn/iocoder/yudao/module/bpm/service/cc/BpmProcessInstanceCopyServiceTest.java
| 1 | package cn.iocoder.yudao.module.bpm.service.cc; | 1 | package cn.iocoder.yudao.module.bpm.service.cc; |
| 2 | 2 | ||
| 3 | import cn.iocoder.yudao.framework.test.core.ut.BaseDbUnitTest; | 3 | import cn.iocoder.yudao.framework.test.core.ut.BaseDbUnitTest; |
| 4 | +import cn.iocoder.yudao.module.bpm.service.task.cc.BpmProcessInstanceCopyServiceImpl; | ||
| 4 | import jakarta.annotation.Resource; | 5 | import jakarta.annotation.Resource; |
| 5 | import org.junit.jupiter.api.Test; | 6 | import org.junit.jupiter.api.Test; |
| 6 | import org.springframework.context.annotation.Import; | 7 | import org.springframework.context.annotation.Import; |