Commit da4f30082415316a4b844d08ad54287082a9aa35

Authored by YunaiV
1 parent 5c3f30e6

code review 工作流的驳回逻辑实现代码

yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/task/vo/task/BpmTaskBackReqVO.java
@@ -10,17 +10,19 @@ import javax.validation.constraints.NotNull; @@ -10,17 +10,19 @@ import javax.validation.constraints.NotNull;
10 10
11 /** 11 /**
12 * @author kemengkai 12 * @author kemengkai
13 - * @create 2022-05-07 08:05 13 + * @create 2022-05-07 08:05 TODO ke:vo 类,使用 swagger 注解即可
14 */ 14 */
15 @Data 15 @Data
16 @AllArgsConstructor 16 @AllArgsConstructor
17 @NoArgsConstructor 17 @NoArgsConstructor
18 public class BpmTaskBackReqVO { 18 public class BpmTaskBackReqVO {
19 19
  20 + // TODO ke:userId 应该使用后端的,不能前端传递,不然就越权了
20 @ApiModelProperty(value = "用户id", required = true, example = "1") 21 @ApiModelProperty(value = "用户id", required = true, example = "1")
21 @NotEmpty(message = "用户id不能为空") 22 @NotEmpty(message = "用户id不能为空")
22 private String userId; 23 private String userId;
23 24
  25 + // TODO ke:procInstId、taskId、oldTaskDefKey 三个,是不是只要传递一个 taskId?字段不要存在推导关系
24 @ApiModelProperty(value = "流程编号id", required = true, example = "730da750-cc4f-11ec-b58e-1e429355e4a0") 26 @ApiModelProperty(value = "流程编号id", required = true, example = "730da750-cc4f-11ec-b58e-1e429355e4a0")
25 @NotEmpty(message = "流程编号id不能为空") 27 @NotEmpty(message = "流程编号id不能为空")
26 private String procInstId; 28 private String procInstId;
yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/dal/mysql/task/BpmActivityMapper.java
@@ -9,11 +9,12 @@ import java.util.List; @@ -9,11 +9,12 @@ import java.util.List;
9 9
10 /** 10 /**
11 * @author kemengkai 11 * @author kemengkai
12 - * @create 2022-05-09 09:26 12 + * @create 2022-05-09 09:26 TODO @ke:@date 哈。ps:一般这种类,可以不用谢类注释和方法注释。因为是 dao 是通用操作,所以都是通过方法名,可以指导它的用途
13 */ 13 */
14 @Mapper 14 @Mapper
15 public interface BpmActivityMapper extends BaseMapperX<BpmActivityDO> { 15 public interface BpmActivityMapper extends BaseMapperX<BpmActivityDO> {
16 16
  17 + // TODO @ke:这个方法,是不是暂时用不到呀。如果是的话,可以删除哈
17 /** 18 /**
18 * 获取所有历史任务 19 * 获取所有历史任务
19 * 20 *
@@ -21,6 +22,7 @@ public interface BpmActivityMapper extends BaseMapperX&lt;BpmActivityDO&gt; { @@ -21,6 +22,7 @@ public interface BpmActivityMapper extends BaseMapperX&lt;BpmActivityDO&gt; {
21 */ 22 */
22 List<BpmActivityDO> listAll(); 23 List<BpmActivityDO> listAll();
23 24
  25 + // TODO @ke:可以试试,把 activiti 的表,映射成对应的实体,然后读取下。我们尽量避免 xml 操作,因为要做多 db 类型的支持,例如说 oracle 等。通过 mybatis plus 帮助我们生成不同数据库的表操作
24 /** 26 /**
25 * 获取指定流程的历史任务 27 * 获取指定流程的历史任务
26 * 28 *
yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/dal/mysql/task/BpmTaskExtMapper.java
@@ -28,6 +28,7 @@ public interface BpmTaskExtMapper extends BaseMapperX&lt;BpmTaskExtDO&gt; { @@ -28,6 +28,7 @@ public interface BpmTaskExtMapper extends BaseMapperX&lt;BpmTaskExtDO&gt; {
28 return selectList(BpmTaskExtDO::getProcessInstanceId, processInstanceId); 28 return selectList(BpmTaskExtDO::getProcessInstanceId, processInstanceId);
29 } 29 }
30 30
  31 + // TODO @ke:可以使用类上上面的 default 方法实现。然后,方法的命名上,要保持和 db 一样。因为 mapper 是数据层,不关注业务。例如说,这里,其实复用 updateByTaskId 方法即可
31 /** 32 /**
32 * 任务驳回 33 * 任务驳回
33 * 34 *
@@ -38,6 +39,7 @@ public interface BpmTaskExtMapper extends BaseMapperX&lt;BpmTaskExtDO&gt; { @@ -38,6 +39,7 @@ public interface BpmTaskExtMapper extends BaseMapperX&lt;BpmTaskExtDO&gt; {
38 */ 39 */
39 Boolean backByTaskId(@Param("taskId") String taskId, @Param("reason") String reason); 40 Boolean backByTaskId(@Param("taskId") String taskId, @Param("reason") String reason);
40 41
  42 + // TODO @ke:tong上哈
41 /** 43 /**
42 * 逻辑删除任务 44 * 逻辑删除任务
43 * 45 *
yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/framework/flowable/config/BpmFlowableConfiguration.java
@@ -29,7 +29,7 @@ public class BpmFlowableConfiguration { @@ -29,7 +29,7 @@ public class BpmFlowableConfiguration {
29 ObjectProvider<FlowableEventListener> listeners, 29 ObjectProvider<FlowableEventListener> listeners,
30 BpmActivityBehaviorFactory bpmActivityBehaviorFactory) { 30 BpmActivityBehaviorFactory bpmActivityBehaviorFactory) {
31 return configuration -> { 31 return configuration -> {
32 - // 注册监听器,例如说 BpmActivitiEventListener 32 + // 注册监听器,例如说 BpmActivityEventListener
33 configuration.setEventListeners(ListUtil.toList(listeners.iterator())); 33 configuration.setEventListeners(ListUtil.toList(listeners.iterator()));
34 // 设置 ActivityBehaviorFactory 实现类,用于流程任务的审核人的自定义 34 // 设置 ActivityBehaviorFactory 实现类,用于流程任务的审核人的自定义
35 configuration.setActivityBehaviorFactory(bpmActivityBehaviorFactory); 35 configuration.setActivityBehaviorFactory(bpmActivityBehaviorFactory);
yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/framework/flowable/core/behavior/BpmActivityBehaviorFactory.java
@@ -39,4 +39,6 @@ public class BpmActivityBehaviorFactory extends DefaultActivityBehaviorFactory { @@ -39,4 +39,6 @@ public class BpmActivityBehaviorFactory extends DefaultActivityBehaviorFactory {
39 .setBpmTaskRuleService(bpmTaskRuleService); 39 .setBpmTaskRuleService(bpmTaskRuleService);
40 } 40 }
41 41
  42 + // TODO @ke:SequentialMultiInstanceBehavior 这个抽空也可以看看
  43 +
42 } 44 }
yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/task/BpmActivityServiceImpl.java
@@ -34,8 +34,9 @@ public class BpmActivityServiceImpl implements BpmActivityService { @@ -34,8 +34,9 @@ public class BpmActivityServiceImpl implements BpmActivityService {
34 @Override 34 @Override
35 @TenantIgnore 35 @TenantIgnore
36 public List<BpmActivityRespVO> getActivityListByProcessInstanceId(String procInstId) { 36 public List<BpmActivityRespVO> getActivityListByProcessInstanceId(String procInstId) {
37 -// List<HistoricActivityInstance> activityList = historyService.createHistoricActivityInstanceQuery()  
38 -// .processInstanceId(procInstId).list(); 37 +// List<HistoricActivityInstance> activityList = historyService.createHistoricActivityInstanceQuery()
  38 +// .processInstanceId(procInstId).list();
  39 + // TODO @ke:这个是想要过滤掉 aha.act_type_ != 'sequenceFlow' 类型么?
39 List<BpmActivityDO> bpmActivityDOList = bpmActivityMapper.listAllByProcInstIdAndDelete(procInstId); 40 List<BpmActivityDO> bpmActivityDOList = bpmActivityMapper.listAllByProcInstIdAndDelete(procInstId);
40 return BpmActivityConvert.INSTANCE.convertList(bpmActivityDOList); 41 return BpmActivityConvert.INSTANCE.convertList(bpmActivityDOList);
41 } 42 }
yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/task/BpmTaskServiceImpl.java
@@ -188,6 +188,7 @@ public class BpmTaskServiceImpl implements BpmTaskService { @@ -188,6 +188,7 @@ public class BpmTaskServiceImpl implements BpmTaskService {
188 188
189 // 拼接数据 189 // 拼接数据
190 // List<BpmTaskExtDO> tmpBpmTaskExtDOList = taskExtMapper.listByProcInstId(processInstanceId); 190 // List<BpmTaskExtDO> tmpBpmTaskExtDOList = taskExtMapper.listByProcInstId(processInstanceId);
  191 + // TODO @ke:这个钉钉是咋处理的?得讨论下流程预测的需要程度哈。
191 List<BpmTaskExtDO> tmpBpmTaskExtDOList = taskExtMapper.selectListByProcessInstanceId(processInstanceId); 192 List<BpmTaskExtDO> tmpBpmTaskExtDOList = taskExtMapper.selectListByProcessInstanceId(processInstanceId);
192 tmpBpmTaskExtDOList.sort(Comparator.comparing(BpmTaskExtDO::getCreateTime)); 193 tmpBpmTaskExtDOList.sort(Comparator.comparing(BpmTaskExtDO::getCreateTime));
193 return hiTaskInstService.taskGetComment(tmpBpmTaskExtDOList, ""); 194 return hiTaskInstService.taskGetComment(tmpBpmTaskExtDOList, "");
@@ -247,9 +248,11 @@ public class BpmTaskServiceImpl implements BpmTaskService { @@ -247,9 +248,11 @@ public class BpmTaskServiceImpl implements BpmTaskService {
247 248
248 // List<HistoricActivityInstance> hisActInstList = 249 // List<HistoricActivityInstance> hisActInstList =
249 // historyService.createHistoricActivityInstanceQuery().processInstanceId(reqVO.getProcInstId()).list(); 250 // historyService.createHistoricActivityInstanceQuery().processInstanceId(reqVO.getProcInstId()).list();
  251 + // TODO @ke:使用 historyService.createHistoricActivityInstanceQuery().processInstanceId(reqVO.getProcInstId()).list() 读取,会存在啥问题呀?
250 List<BpmActivityDO> bpmActivityDOList = bpmActivityMapper.listAllByProcInstIdAndDelete(reqVO.getProcInstId()); 252 List<BpmActivityDO> bpmActivityDOList = bpmActivityMapper.listAllByProcInstIdAndDelete(reqVO.getProcInstId());
251 // List<BpmActivityDO> bpmActivityDOList = BpmTaskConvert.INSTANCE.copyList(hisActInstList, BpmActivityDO.class); 253 // List<BpmActivityDO> bpmActivityDOList = BpmTaskConvert.INSTANCE.copyList(hisActInstList, BpmActivityDO.class);
252 // bpmActivityDOList.forEach(bpmActivityDO -> log.info("bpmActivityDO = " + bpmActivityDO)); 254 // bpmActivityDOList.forEach(bpmActivityDO -> log.info("bpmActivityDO = " + bpmActivityDO));
  255 + // TODO @ke:如果 开始->a->b->c->d->结束,从 d 驳回到 b 的话,这样会不会导致 a 也被删除呀?http://blog.wya1.com/article/636697030/details/7296 可以看看这篇文章哈。
253 List<String> taskIdList = bpmActivityDOList.stream().filter( 256 List<String> taskIdList = bpmActivityDOList.stream().filter(
254 bpmActivityDO -> bpmActivityDO.getActivityId().equals(reqVO.getOldTaskDefKey()) 257 bpmActivityDO -> bpmActivityDO.getActivityId().equals(reqVO.getOldTaskDefKey())
255 && !bpmActivityDO.getTaskId().equals(reqVO.getTaskId())).map(BpmActivityDO::getTaskId) 258 && !bpmActivityDO.getTaskId().equals(reqVO.getTaskId())).map(BpmActivityDO::getTaskId)