Commit 4d15396e36abd22d99792f8155d0aa35d03769e5

Authored by YunaiV
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
... ... @@ -13,6 +13,7 @@ import lombok.Getter;
13 13 @Getter
14 14 @AllArgsConstructor
15 15 public enum BpmProcessNodeProgressEnum {
  16 +
16 17 // 0 未开始
17 18 NOT_START(0,"未开始"),
18 19 // 1 ~ 20 进行中
... ...
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&lt;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
... ... @@ -92,6 +92,7 @@ public interface BpmProcessInstanceService {
92 92 */
93 93 Map<String, String> getProcessInstanceFormFieldsPermission(@Valid BpmProcessInstanceFormFieldsPermissionReqVO reqVO);
94 94  
  95 + // TODO @芋艿:重点在 review 下
95 96 /**
96 97 * 获取流程实例的进度
97 98 *
... ...