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,6 +13,7 @@ import lombok.Getter;
13 @Getter 13 @Getter
14 @AllArgsConstructor 14 @AllArgsConstructor
15 public enum BpmProcessNodeProgressEnum { 15 public enum BpmProcessNodeProgressEnum {
  16 +
16 // 0 未开始 17 // 0 未开始
17 NOT_START(0,"未开始"), 18 NOT_START(0,"未开始"),
18 // 1 ~ 20 进行中 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,7 +47,6 @@ public class BpmProcessInstanceController {
47 private BpmProcessInstanceService processInstanceService; 47 private BpmProcessInstanceService processInstanceService;
48 @Resource 48 @Resource
49 private BpmTaskService taskService; 49 private BpmTaskService taskService;
50 -  
51 @Resource 50 @Resource
52 private BpmProcessDefinitionService processDefinitionService; 51 private BpmProcessDefinitionService processDefinitionService;
53 @Resource 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,17 +22,24 @@ public class BpmProcessInstanceProgressRespVO {
22 22
23 @Schema(description = "节点编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "StartUserNode") 23 @Schema(description = "节点编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "StartUserNode")
24 private String id; // Bpmn XML 节点 Id 24 private String id; // Bpmn XML 节点 Id
  25 +
25 @Schema(description = "节点名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "发起人") 26 @Schema(description = "节点名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "发起人")
26 private String name; 27 private String name;
  28 +
  29 + @Schema(description = "节点展示内容", requiredMode = Schema.RequiredMode.REQUIRED, example = "指定成员: 芋道源码")
27 private String displayText; 30 private String displayText;
  31 +
28 @Schema(description = "节点类型", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") 32 @Schema(description = "节点类型", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
29 private Integer nodeType; // 参见 BpmSimpleModelNodeType 枚举 33 private Integer nodeType; // 参见 BpmSimpleModelNodeType 枚举
  34 +
30 @Schema(description = "节点状态", requiredMode = Schema.RequiredMode.REQUIRED, example = "0") 35 @Schema(description = "节点状态", requiredMode = Schema.RequiredMode.REQUIRED, example = "0")
31 private Integer status; // 参见 BpmProcessNodeProgressEnum 枚举 36 private Integer status; // 参见 BpmProcessNodeProgressEnum 枚举
  37 +
32 @Schema(description = "节点的开始时间") 38 @Schema(description = "节点的开始时间")
33 private LocalDateTime startTime; 39 private LocalDateTime startTime;
34 @Schema(description = "节点的结束时间") 40 @Schema(description = "节点的结束时间")
35 private LocalDateTime endTime; 41 private LocalDateTime endTime;
  42 +
36 @Schema(description = "用户列表") 43 @Schema(description = "用户列表")
37 private List<User> userList; 44 private List<User> userList;
38 @Schema(description = "分支节点") 45 @Schema(description = "分支节点")
@@ -48,13 +55,19 @@ public class BpmProcessInstanceProgressRespVO { @@ -48,13 +55,19 @@ public class BpmProcessInstanceProgressRespVO {
48 55
49 @Schema(description = "用户编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") 56 @Schema(description = "用户编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
50 private Long id; 57 private Long id;
  58 +
51 @Schema(description = "用户昵称", requiredMode = Schema.RequiredMode.REQUIRED, example = "芋艿") 59 @Schema(description = "用户昵称", requiredMode = Schema.RequiredMode.REQUIRED, example = "芋艿")
52 private String nickname; 60 private String nickname;
  61 +
53 @Schema(description = "用户头像", example = "芋艿") 62 @Schema(description = "用户头像", example = "芋艿")
54 private String avatar; 63 private String avatar;
  64 +
55 @Schema(description = "是否已处理", requiredMode = Schema.RequiredMode.REQUIRED, example = "true") 65 @Schema(description = "是否已处理", requiredMode = Schema.RequiredMode.REQUIRED, example = "true")
56 private Boolean processed; 66 private Boolean processed;
  67 +
57 @Schema(description = "用户任务的处理状态", example = "1") 68 @Schema(description = "用户任务的处理状态", example = "1")
58 private Integer userTaskStatus; 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,7 +20,9 @@ public interface BpmProcessInstanceCopyMapper extends BaseMapperX&lt;BpmProcessInst
20 .orderByDesc(BpmProcessInstanceCopyDO::getId)); 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,6 +30,15 @@ public interface BpmTaskCandidateStrategy {
30 void validateParam(String param); 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 * @param execution 执行任务 44 * @param execution 执行任务
@@ -37,11 +46,12 @@ public interface BpmTaskCandidateStrategy { @@ -37,11 +46,12 @@ public interface BpmTaskCandidateStrategy {
37 */ 46 */
38 Set<Long> calculateUsers(DelegateExecution execution, String param); 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 * @param param 节点的参数 55 * @param param 节点的参数
46 * @return 用户编号集合 56 * @return 用户编号集合
47 */ 57 */
@@ -49,13 +59,6 @@ public interface BpmTaskCandidateStrategy { @@ -49,13 +59,6 @@ public interface BpmTaskCandidateStrategy {
49 return Collections.emptySet(); 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,16 +41,11 @@ public class BpmTaskCandidateDeptMemberStrategy implements BpmTaskCandidateStrat
41 41
42 @Override 42 @Override
43 public Set<Long> calculateUsers(DelegateExecution execution, String param) { 43 public Set<Long> calculateUsers(DelegateExecution execution, String param) {
44 - return calculateUsersByParam(param); 44 + return calculateUsers((String) null, param);
45 } 45 }
46 46
47 @Override 47 @Override
48 public Set<Long> calculateUsers(String processInstanceId, String param) { 48 public Set<Long> calculateUsers(String processInstanceId, String param) {
49 - return calculateUsersByParam(param);  
50 - }  
51 -  
52 - private Set<Long> calculateUsersByParam(String param) {  
53 -  
54 Set<Long> deptIds = StrUtils.splitToLongSet(param); 49 Set<Long> deptIds = StrUtils.splitToLongSet(param);
55 List<AdminUserRespDTO> users = adminUserApi.getUserListByDeptIds(deptIds); 50 List<AdminUserRespDTO> users = adminUserApi.getUserListByDeptIds(deptIds);
56 return convertSet(users, AdminUserRespDTO::getId); 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,7 +45,7 @@ public class BpmTaskCandidateRoleStrategy implements BpmTaskCandidateStrategy {
45 return calculateUsersByParam(param); 45 return calculateUsersByParam(param);
46 } 46 }
47 47
48 - private Set<Long> calculateUsersByParam(String param) { 48 + private Set<Long> calculateUsersByParam(String param) {
49 Set<Long> roleIds = StrUtils.splitToLongSet(param); 49 Set<Long> roleIds = StrUtils.splitToLongSet(param);
50 return permissionApi.getUserRoleIdListByRoleIds(roleIds); 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,13 +34,13 @@ public class BpmTaskCandidateStartUserStrategy implements BpmTaskCandidateStrate
34 public void validateParam(String param) {} 34 public void validateParam(String param) {}
35 35
36 @Override 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 @Override 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 @Override 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,6 +519,7 @@ public class SimpleModelUtils {
519 519
520 private static void processMultiInstanceLoopCharacteristics(Integer approveMethod, Integer approveRatio, UserTask userTask) { 520 private static void processMultiInstanceLoopCharacteristics(Integer approveMethod, Integer approveRatio, UserTask userTask) {
521 BpmUserTaskApproveMethodEnum approveMethodEnum = BpmUserTaskApproveMethodEnum.valueOf(approveMethod); 521 BpmUserTaskApproveMethodEnum approveMethodEnum = BpmUserTaskApproveMethodEnum.valueOf(approveMethod);
  522 + // TODO @jason:这种枚举,最终不要去掉哈 BpmUserTaskApproveMethodEnum。因为容易不经意重叠
522 if (approveMethodEnum == null || approveMethodEnum == RANDOM) { 523 if (approveMethodEnum == null || approveMethodEnum == RANDOM) {
523 return; 524 return;
524 } 525 }
@@ -656,7 +657,7 @@ public class SimpleModelUtils { @@ -656,7 +657,7 @@ public class SimpleModelUtils {
656 traverseNodeToBuildNodeProgress(processInstance, simpleModel.getChildNode(), historicActivityList, activityInstanceMap, nodeProgresses, returnNodePosition); 657 traverseNodeToBuildNodeProgress(processInstance, simpleModel.getChildNode(), historicActivityList, activityInstanceMap, nodeProgresses, returnNodePosition);
657 } 658 }
658 659
659 - 660 + // TODO @芋艿:重点在 review 下
660 private static void buildNodeProgress(HistoricProcessInstance processInstance, BpmSimpleModelNodeVO node, List<ProcessNodeProgress> nodeProgresses, 661 private static void buildNodeProgress(HistoricProcessInstance processInstance, BpmSimpleModelNodeVO node, List<ProcessNodeProgress> nodeProgresses,
661 List<HistoricActivityInstance> historicActivityList, Map<String, HistoricActivityInstance> activityInstanceMap, List<Integer> returnNodePosition) { 662 List<HistoricActivityInstance> historicActivityList, Map<String, HistoricActivityInstance> activityInstanceMap, List<Integer> returnNodePosition) {
662 BpmSimpleModelNodeType nodeType = BpmSimpleModelNodeType.valueOf(node.getType()); 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,11 +48,12 @@ public interface BpmProcessDefinitionService {
48 * @param model 流程模型 48 * @param model 流程模型
49 * @param modelMetaInfo 流程模型元信息 49 * @param modelMetaInfo 流程模型元信息
50 * @param bpmnBytes BPMN XML 字节数组 50 * @param bpmnBytes BPMN XML 字节数组
51 - * @param simpleBytes simple model json 字节数组 51 + * @param simpleBytes SIMPLE Model JSON 字节数组
52 * @param form 表单 52 * @param form 表单
53 * @return 流程编号 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,7 +29,9 @@ public interface BpmActivityService {
29 List<HistoricActivityInstance> getHistoricActivityListByExecutionId(String executionId); 29 List<HistoricActivityInstance> getHistoricActivityListByExecutionId(String executionId);
30 30
31 /** 31 /**
32 - * 获取活动的用户列表。 例如:抄送人列表。 审批人列表 32 + * 获取活动的用户列表。
  33 + *
  34 + * 例如:抄送人列表、审批人列表
33 * 35 *
34 * @param historicActivity 活动 36 * @param historicActivity 活动
35 * @param isMultiInstance 是否多实例 (会签,或签 ) 37 * @param isMultiInstance 是否多实例 (会签,或签 )
@@ -37,10 +39,11 @@ public interface BpmActivityService { @@ -37,10 +39,11 @@ public interface BpmActivityService {
37 * @return 用户列表 39 * @return 用户列表
38 */ 40 */
39 List<BpmProcessInstanceProgressRespVO.User> getHistoricActivityUserList(HistoricActivityInstance historicActivity, 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 * @param historicActivity 活动 48 * @param historicActivity 活动
46 * @param isMultiInstance 是否多实例 (会签,或签 ) 49 * @param isMultiInstance 是否多实例 (会签,或签 )
@@ -48,11 +51,15 @@ public interface BpmActivityService { @@ -48,11 +51,15 @@ public interface BpmActivityService {
48 * @return 活动的进度状态 51 * @return 活动的进度状态
49 */ 52 */
50 Integer getHistoricActivityProgressStatus(HistoricActivityInstance historicActivity, 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 Integer getNotRunActivityProgressStatus(Integer processInstanceStatus); 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,6 +72,7 @@ public class BpmActivityServiceImpl implements BpmActivityService {
72 return historyService.createHistoricActivityInstanceQuery().executionId(executionId).list(); 72 return historyService.createHistoricActivityInstanceQuery().executionId(executionId).list();
73 } 73 }
74 74
  75 + // TODO @芋艿:重点在 review 下~
75 @Override 76 @Override
76 public List<User> getHistoricActivityUserList(HistoricActivityInstance historicActivity 77 public List<User> getHistoricActivityUserList(HistoricActivityInstance historicActivity
77 , Boolean isMultiInstance, List<HistoricActivityInstance> historicActivityList) { 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,6 +43,7 @@ public interface BpmProcessInstanceCopyService {
43 */ 43 */
44 PageResult<BpmProcessInstanceCopyDO> getProcessInstanceCopyPage(Long userId, 44 PageResult<BpmProcessInstanceCopyDO> getProcessInstanceCopyPage(Long userId,
45 BpmProcessInstanceCopyPageReqVO pageReqVO); 45 BpmProcessInstanceCopyPageReqVO pageReqVO);
  46 + // TODO @芋艿:重点在 review 下
46 /** 47 /**
47 * 通过流程实例和流程活动编号获取抄送人的 Id 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,7 +89,7 @@ public class BpmProcessInstanceCopyServiceImpl implements BpmProcessInstanceCopy
89 89
90 @Override 90 @Override
91 public Set<Long> getCopyUserIds(String processInstanceId, String activityId) { 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 BpmProcessInstanceCopyDO::getUserId); 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,6 +92,7 @@ public interface BpmProcessInstanceService {
92 */ 92 */
93 Map<String, String> getProcessInstanceFormFieldsPermission(@Valid BpmProcessInstanceFormFieldsPermissionReqVO reqVO); 93 Map<String, String> getProcessInstanceFormFieldsPermission(@Valid BpmProcessInstanceFormFieldsPermissionReqVO reqVO);
94 94
  95 + // TODO @芋艿:重点在 review 下
95 /** 96 /**
96 * 获取流程实例的进度 97 * 获取流程实例的进度
97 * 98 *