Commit 4d15396e36abd22d99792f8155d0aa35d03769e5
1 parent
f03e26bc
【代码评审】工作流:获得审批的进展
Showing
15 changed files
with
60 additions
and
35 deletions
yudao-module-bpm/yudao-module-bpm-api/src/main/java/cn/iocoder/yudao/module/bpm/enums/definition/BpmProcessNodeProgressEnum.java
yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/task/BpmProcessInstanceController.java
| ... | ... | @@ -47,7 +47,6 @@ public class BpmProcessInstanceController { |
| 47 | 47 | private BpmProcessInstanceService processInstanceService; |
| 48 | 48 | @Resource |
| 49 | 49 | private BpmTaskService taskService; |
| 50 | - | |
| 51 | 50 | @Resource |
| 52 | 51 | private BpmProcessDefinitionService processDefinitionService; |
| 53 | 52 | @Resource | ... | ... |
yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/task/vo/instance/BpmProcessInstanceProgressRespVO.java
| ... | ... | @@ -22,17 +22,24 @@ public class BpmProcessInstanceProgressRespVO { |
| 22 | 22 | |
| 23 | 23 | @Schema(description = "节点编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "StartUserNode") |
| 24 | 24 | private String id; // Bpmn XML 节点 Id |
| 25 | + | |
| 25 | 26 | @Schema(description = "节点名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "发起人") |
| 26 | 27 | private String name; |
| 28 | + | |
| 29 | + @Schema(description = "节点展示内容", requiredMode = Schema.RequiredMode.REQUIRED, example = "指定成员: 芋道源码") | |
| 27 | 30 | private String displayText; |
| 31 | + | |
| 28 | 32 | @Schema(description = "节点类型", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") |
| 29 | 33 | private Integer nodeType; // 参见 BpmSimpleModelNodeType 枚举 |
| 34 | + | |
| 30 | 35 | @Schema(description = "节点状态", requiredMode = Schema.RequiredMode.REQUIRED, example = "0") |
| 31 | 36 | private Integer status; // 参见 BpmProcessNodeProgressEnum 枚举 |
| 37 | + | |
| 32 | 38 | @Schema(description = "节点的开始时间") |
| 33 | 39 | private LocalDateTime startTime; |
| 34 | 40 | @Schema(description = "节点的结束时间") |
| 35 | 41 | private LocalDateTime endTime; |
| 42 | + | |
| 36 | 43 | @Schema(description = "用户列表") |
| 37 | 44 | private List<User> userList; |
| 38 | 45 | @Schema(description = "分支节点") |
| ... | ... | @@ -48,13 +55,19 @@ public class BpmProcessInstanceProgressRespVO { |
| 48 | 55 | |
| 49 | 56 | @Schema(description = "用户编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") |
| 50 | 57 | private Long id; |
| 58 | + | |
| 51 | 59 | @Schema(description = "用户昵称", requiredMode = Schema.RequiredMode.REQUIRED, example = "芋艿") |
| 52 | 60 | private String nickname; |
| 61 | + | |
| 53 | 62 | @Schema(description = "用户头像", example = "芋艿") |
| 54 | 63 | private String avatar; |
| 64 | + | |
| 55 | 65 | @Schema(description = "是否已处理", requiredMode = Schema.RequiredMode.REQUIRED, example = "true") |
| 56 | 66 | private Boolean processed; |
| 67 | + | |
| 57 | 68 | @Schema(description = "用户任务的处理状态", example = "1") |
| 58 | 69 | private Integer userTaskStatus; |
| 70 | + | |
| 59 | 71 | } |
| 72 | + | |
| 60 | 73 | } | ... | ... |
yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/dal/mysql/task/BpmProcessInstanceCopyMapper.java
| ... | ... | @@ -20,7 +20,9 @@ public interface BpmProcessInstanceCopyMapper extends BaseMapperX<BpmProcessInst |
| 20 | 20 | .orderByDesc(BpmProcessInstanceCopyDO::getId)); |
| 21 | 21 | } |
| 22 | 22 | |
| 23 | - default List<BpmProcessInstanceCopyDO> selectListByProcInstIdAndActId(String processInstanceId, String activityId) { | |
| 24 | - return selectList(BpmProcessInstanceCopyDO::getProcessInstanceId, processInstanceId, BpmProcessInstanceCopyDO::getActivityId, activityId); | |
| 23 | + default List<BpmProcessInstanceCopyDO> selectListByProcessIstanceIdAndActivityId(String processInstanceId, String activityId) { | |
| 24 | + return selectList(BpmProcessInstanceCopyDO::getProcessInstanceId, processInstanceId, | |
| 25 | + BpmProcessInstanceCopyDO::getActivityId, activityId); | |
| 25 | 26 | } |
| 27 | + | |
| 26 | 28 | } | ... | ... |
yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/framework/flowable/core/candidate/BpmTaskCandidateStrategy.java
| ... | ... | @@ -30,6 +30,15 @@ public interface BpmTaskCandidateStrategy { |
| 30 | 30 | void validateParam(String param); |
| 31 | 31 | |
| 32 | 32 | /** |
| 33 | + * 是否一定要输入参数 | |
| 34 | + * | |
| 35 | + * @return 是否 | |
| 36 | + */ | |
| 37 | + default boolean isParamRequired() { | |
| 38 | + return true; | |
| 39 | + } | |
| 40 | + | |
| 41 | + /** | |
| 33 | 42 | * 基于执行任务,获得任务的候选用户们 |
| 34 | 43 | * |
| 35 | 44 | * @param execution 执行任务 |
| ... | ... | @@ -37,11 +46,12 @@ public interface BpmTaskCandidateStrategy { |
| 37 | 46 | */ |
| 38 | 47 | Set<Long> calculateUsers(DelegateExecution execution, String param); |
| 39 | 48 | |
| 40 | - | |
| 41 | 49 | /** |
| 42 | - * 基于流程实例,获得任务的候选用户们。 用于获取未执行节点的候选用户们 | |
| 50 | + * 基于流程实例,获得任务的候选用户们 | |
| 43 | 51 | * |
| 44 | - * @param processInstanceId 流程实例 | |
| 52 | + * 目的:用于获取未执行节点的候选用户们 | |
| 53 | + * | |
| 54 | + * @param processInstanceId 流程实例编号 | |
| 45 | 55 | * @param param 节点的参数 |
| 46 | 56 | * @return 用户编号集合 |
| 47 | 57 | */ |
| ... | ... | @@ -49,13 +59,6 @@ public interface BpmTaskCandidateStrategy { |
| 49 | 59 | return Collections.emptySet(); |
| 50 | 60 | } |
| 51 | 61 | |
| 52 | - /** | |
| 53 | - * 是否一定要输入参数 | |
| 54 | - * | |
| 55 | - * @return 是否 | |
| 56 | - */ | |
| 57 | - default boolean isParamRequired() { | |
| 58 | - return true; | |
| 59 | - } | |
| 62 | + // TODO @芋艿:后续可以抽象一个 calculateUsers(String param),默认 calculateUsers 和 calculateUsers 调用它 | |
| 60 | 63 | |
| 61 | 64 | } | ... | ... |
yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/framework/flowable/core/candidate/strategy/BpmTaskCandidateDeptMemberStrategy.java
| ... | ... | @@ -41,16 +41,11 @@ public class BpmTaskCandidateDeptMemberStrategy implements BpmTaskCandidateStrat |
| 41 | 41 | |
| 42 | 42 | @Override |
| 43 | 43 | public Set<Long> calculateUsers(DelegateExecution execution, String param) { |
| 44 | - return calculateUsersByParam(param); | |
| 44 | + return calculateUsers((String) null, param); | |
| 45 | 45 | } |
| 46 | 46 | |
| 47 | 47 | @Override |
| 48 | 48 | public Set<Long> calculateUsers(String processInstanceId, String param) { |
| 49 | - return calculateUsersByParam(param); | |
| 50 | - } | |
| 51 | - | |
| 52 | - private Set<Long> calculateUsersByParam(String param) { | |
| 53 | - | |
| 54 | 49 | Set<Long> deptIds = StrUtils.splitToLongSet(param); |
| 55 | 50 | List<AdminUserRespDTO> users = adminUserApi.getUserListByDeptIds(deptIds); |
| 56 | 51 | return convertSet(users, AdminUserRespDTO::getId); | ... | ... |
yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/framework/flowable/core/candidate/strategy/BpmTaskCandidateRoleStrategy.java
| ... | ... | @@ -45,7 +45,7 @@ public class BpmTaskCandidateRoleStrategy implements BpmTaskCandidateStrategy { |
| 45 | 45 | return calculateUsersByParam(param); |
| 46 | 46 | } |
| 47 | 47 | |
| 48 | - private Set<Long> calculateUsersByParam(String param) { | |
| 48 | + private Set<Long> calculateUsersByParam(String param) { | |
| 49 | 49 | Set<Long> roleIds = StrUtils.splitToLongSet(param); |
| 50 | 50 | return permissionApi.getUserRoleIdListByRoleIds(roleIds); |
| 51 | 51 | } | ... | ... |
yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/framework/flowable/core/candidate/strategy/BpmTaskCandidateStartUserStrategy.java
| ... | ... | @@ -34,13 +34,13 @@ public class BpmTaskCandidateStartUserStrategy implements BpmTaskCandidateStrate |
| 34 | 34 | public void validateParam(String param) {} |
| 35 | 35 | |
| 36 | 36 | @Override |
| 37 | - public Set<Long> calculateUsers(DelegateExecution execution, String param) { | |
| 38 | - return getStartUserOfProcessInstance(execution.getProcessInstanceId()); | |
| 37 | + public boolean isParamRequired() { | |
| 38 | + return false; | |
| 39 | 39 | } |
| 40 | 40 | |
| 41 | 41 | @Override |
| 42 | - public boolean isParamRequired() { | |
| 43 | - return false; | |
| 42 | + public Set<Long> calculateUsers(DelegateExecution execution, String param) { | |
| 43 | + return getStartUserOfProcessInstance(execution.getProcessInstanceId()); | |
| 44 | 44 | } |
| 45 | 45 | |
| 46 | 46 | @Override | ... | ... |
yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/framework/flowable/core/util/SimpleModelUtils.java
| ... | ... | @@ -519,6 +519,7 @@ public class SimpleModelUtils { |
| 519 | 519 | |
| 520 | 520 | private static void processMultiInstanceLoopCharacteristics(Integer approveMethod, Integer approveRatio, UserTask userTask) { |
| 521 | 521 | BpmUserTaskApproveMethodEnum approveMethodEnum = BpmUserTaskApproveMethodEnum.valueOf(approveMethod); |
| 522 | + // TODO @jason:这种枚举,最终不要去掉哈 BpmUserTaskApproveMethodEnum。因为容易不经意重叠 | |
| 522 | 523 | if (approveMethodEnum == null || approveMethodEnum == RANDOM) { |
| 523 | 524 | return; |
| 524 | 525 | } |
| ... | ... | @@ -656,7 +657,7 @@ public class SimpleModelUtils { |
| 656 | 657 | traverseNodeToBuildNodeProgress(processInstance, simpleModel.getChildNode(), historicActivityList, activityInstanceMap, nodeProgresses, returnNodePosition); |
| 657 | 658 | } |
| 658 | 659 | |
| 659 | - | |
| 660 | + // TODO @芋艿:重点在 review 下 | |
| 660 | 661 | private static void buildNodeProgress(HistoricProcessInstance processInstance, BpmSimpleModelNodeVO node, List<ProcessNodeProgress> nodeProgresses, |
| 661 | 662 | List<HistoricActivityInstance> historicActivityList, Map<String, HistoricActivityInstance> activityInstanceMap, List<Integer> returnNodePosition) { |
| 662 | 663 | BpmSimpleModelNodeType nodeType = BpmSimpleModelNodeType.valueOf(node.getType()); | ... | ... |
yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/definition/BpmProcessDefinitionService.java
| ... | ... | @@ -48,11 +48,12 @@ public interface BpmProcessDefinitionService { |
| 48 | 48 | * @param model 流程模型 |
| 49 | 49 | * @param modelMetaInfo 流程模型元信息 |
| 50 | 50 | * @param bpmnBytes BPMN XML 字节数组 |
| 51 | - * @param simpleBytes simple model json 字节数组 | |
| 51 | + * @param simpleBytes SIMPLE Model JSON 字节数组 | |
| 52 | 52 | * @param form 表单 |
| 53 | 53 | * @return 流程编号 |
| 54 | 54 | */ |
| 55 | - String createProcessDefinition(Model model, BpmModelMetaInfoVO modelMetaInfo, byte[] bpmnBytes, byte[] simpleBytes, BpmFormDO form); | |
| 55 | + String createProcessDefinition(Model model, BpmModelMetaInfoVO modelMetaInfo, | |
| 56 | + byte[] bpmnBytes, byte[] simpleBytes, BpmFormDO form); | |
| 56 | 57 | |
| 57 | 58 | /** |
| 58 | 59 | * 更新流程定义状态 | ... | ... |
yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/task/BpmActivityService.java
| ... | ... | @@ -29,7 +29,9 @@ public interface BpmActivityService { |
| 29 | 29 | List<HistoricActivityInstance> getHistoricActivityListByExecutionId(String executionId); |
| 30 | 30 | |
| 31 | 31 | /** |
| 32 | - * 获取活动的用户列表。 例如:抄送人列表。 审批人列表 | |
| 32 | + * 获取活动的用户列表。 | |
| 33 | + * | |
| 34 | + * 例如:抄送人列表、审批人列表 | |
| 33 | 35 | * |
| 34 | 36 | * @param historicActivity 活动 |
| 35 | 37 | * @param isMultiInstance 是否多实例 (会签,或签 ) |
| ... | ... | @@ -37,10 +39,11 @@ public interface BpmActivityService { |
| 37 | 39 | * @return 用户列表 |
| 38 | 40 | */ |
| 39 | 41 | List<BpmProcessInstanceProgressRespVO.User> getHistoricActivityUserList(HistoricActivityInstance historicActivity, |
| 40 | - Boolean isMultiInstance, List<HistoricActivityInstance> historicActivityList); | |
| 42 | + Boolean isMultiInstance, | |
| 43 | + List<HistoricActivityInstance> historicActivityList); | |
| 41 | 44 | |
| 42 | 45 | /** |
| 43 | - * 获取活动的进度状态。 | |
| 46 | + * 获取活动的进度状态 | |
| 44 | 47 | * |
| 45 | 48 | * @param historicActivity 活动 |
| 46 | 49 | * @param isMultiInstance 是否多实例 (会签,或签 ) |
| ... | ... | @@ -48,11 +51,15 @@ public interface BpmActivityService { |
| 48 | 51 | * @return 活动的进度状态 |
| 49 | 52 | */ |
| 50 | 53 | Integer getHistoricActivityProgressStatus(HistoricActivityInstance historicActivity, |
| 51 | - Boolean isMultiInstance, List<HistoricActivityInstance> historicActivityList); | |
| 54 | + Boolean isMultiInstance, | |
| 55 | + List<HistoricActivityInstance> historicActivityList); | |
| 52 | 56 | |
| 57 | + // TODO @jason:可以写下这 2 个方法的注释 | |
| 53 | 58 | Integer getNotRunActivityProgressStatus(Integer processInstanceStatus); |
| 54 | 59 | |
| 55 | - List<BpmProcessInstanceProgressRespVO.User> getNotRunActivityUserList(String processInstanceId, Integer processInstanceStatus | |
| 56 | - , Integer candidateStrategy, String candidateParam); | |
| 60 | + List<BpmProcessInstanceProgressRespVO.User> getNotRunActivityUserList(String processInstanceId, | |
| 61 | + Integer processInstanceStatus, | |
| 62 | + Integer candidateStrategy, | |
| 63 | + String candidateParam); | |
| 57 | 64 | |
| 58 | 65 | } | ... | ... |
yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/task/BpmActivityServiceImpl.java
| ... | ... | @@ -72,6 +72,7 @@ public class BpmActivityServiceImpl implements BpmActivityService { |
| 72 | 72 | return historyService.createHistoricActivityInstanceQuery().executionId(executionId).list(); |
| 73 | 73 | } |
| 74 | 74 | |
| 75 | + // TODO @芋艿:重点在 review 下~ | |
| 75 | 76 | @Override |
| 76 | 77 | public List<User> getHistoricActivityUserList(HistoricActivityInstance historicActivity |
| 77 | 78 | , Boolean isMultiInstance, List<HistoricActivityInstance> historicActivityList) { | ... | ... |
yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/task/BpmProcessInstanceCopyService.java
| ... | ... | @@ -43,6 +43,7 @@ public interface BpmProcessInstanceCopyService { |
| 43 | 43 | */ |
| 44 | 44 | PageResult<BpmProcessInstanceCopyDO> getProcessInstanceCopyPage(Long userId, |
| 45 | 45 | BpmProcessInstanceCopyPageReqVO pageReqVO); |
| 46 | + // TODO @芋艿:重点在 review 下 | |
| 46 | 47 | /** |
| 47 | 48 | * 通过流程实例和流程活动编号获取抄送人的 Id |
| 48 | 49 | * | ... | ... |
yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/task/BpmProcessInstanceCopyServiceImpl.java
| ... | ... | @@ -89,7 +89,7 @@ public class BpmProcessInstanceCopyServiceImpl implements BpmProcessInstanceCopy |
| 89 | 89 | |
| 90 | 90 | @Override |
| 91 | 91 | public Set<Long> getCopyUserIds(String processInstanceId, String activityId) { |
| 92 | - return CollectionUtils.convertSet(processInstanceCopyMapper.selectListByProcInstIdAndActId(processInstanceId, activityId), | |
| 92 | + return CollectionUtils.convertSet(processInstanceCopyMapper.selectListByProcessIstanceIdAndActivityId(processInstanceId, activityId), | |
| 93 | 93 | BpmProcessInstanceCopyDO::getUserId); |
| 94 | 94 | } |
| 95 | 95 | ... | ... |
yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/task/BpmProcessInstanceService.java