Przeglądaj źródła

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

YunaiV 2 lat temu
rodzic
commit
da4f300824

+ 3 - 1
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;
 
 /**
  * @author kemengkai
- * @create 2022-05-07 08:05
+ * @create 2022-05-07 08:05 TODO ke:vo 类,使用 swagger 注解即可
  */
 @Data
 @AllArgsConstructor
 @NoArgsConstructor
 public class BpmTaskBackReqVO {
 
+    // TODO ke:userId 应该使用后端的,不能前端传递,不然就越权了
     @ApiModelProperty(value = "用户id", required = true, example = "1")
     @NotEmpty(message = "用户id不能为空")
     private String userId;
 
+    // TODO ke:procInstId、taskId、oldTaskDefKey 三个,是不是只要传递一个 taskId?字段不要存在推导关系
     @ApiModelProperty(value = "流程编号id", required = true, example = "730da750-cc4f-11ec-b58e-1e429355e4a0")
     @NotEmpty(message = "流程编号id不能为空")
     private String procInstId;

+ 3 - 1
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;
 
 /**
  * @author kemengkai
- * @create 2022-05-09 09:26
+ * @create 2022-05-09 09:26 TODO @ke:@date 哈。ps:一般这种类,可以不用谢类注释和方法注释。因为是 dao 是通用操作,所以都是通过方法名,可以指导它的用途
  */
 @Mapper
 public interface BpmActivityMapper extends BaseMapperX<BpmActivityDO> {
 
+    // TODO @ke:这个方法,是不是暂时用不到呀。如果是的话,可以删除哈
     /**
      * 获取所有历史任务
      *
@@ -21,6 +22,7 @@ public interface BpmActivityMapper extends BaseMapperX<BpmActivityDO> {
      */
     List<BpmActivityDO> listAll();
 
+    // TODO @ke:可以试试,把 activiti 的表,映射成对应的实体,然后读取下。我们尽量避免 xml 操作,因为要做多 db 类型的支持,例如说 oracle 等。通过 mybatis plus 帮助我们生成不同数据库的表操作
     /**
      * 获取指定流程的历史任务
      *

+ 2 - 0
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<BpmTaskExtDO> {
         return selectList(BpmTaskExtDO::getProcessInstanceId, processInstanceId);
     }
 
+    // TODO @ke:可以使用类上上面的 default 方法实现。然后,方法的命名上,要保持和 db 一样。因为 mapper 是数据层,不关注业务。例如说,这里,其实复用 updateByTaskId 方法即可
     /**
      * 任务驳回
      *
@@ -38,6 +39,7 @@ public interface BpmTaskExtMapper extends BaseMapperX<BpmTaskExtDO> {
      */
     Boolean backByTaskId(@Param("taskId") String taskId, @Param("reason") String reason);
 
+    // TODO @ke:tong上哈
     /**
      * 逻辑删除任务
      *

+ 1 - 1
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 {
             ObjectProvider<FlowableEventListener> listeners,
             BpmActivityBehaviorFactory bpmActivityBehaviorFactory) {
         return configuration -> {
-            // 注册监听器,例如说 BpmActivitiEventListener
+            // 注册监听器,例如说 BpmActivityEventListener
             configuration.setEventListeners(ListUtil.toList(listeners.iterator()));
             // 设置 ActivityBehaviorFactory 实现类,用于流程任务的审核人的自定义
             configuration.setActivityBehaviorFactory(bpmActivityBehaviorFactory);

+ 2 - 0
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 {
                 .setBpmTaskRuleService(bpmTaskRuleService);
     }
 
+    // TODO @ke:SequentialMultiInstanceBehavior 这个抽空也可以看看
+
 }

+ 3 - 2
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 {
     @Override
     @TenantIgnore
     public List<BpmActivityRespVO> getActivityListByProcessInstanceId(String procInstId) {
-//                List<HistoricActivityInstance> activityList = historyService.createHistoricActivityInstanceQuery()
-//                        .processInstanceId(procInstId).list();
+//        List<HistoricActivityInstance> activityList = historyService.createHistoricActivityInstanceQuery()
+//                .processInstanceId(procInstId).list();
+        // TODO @ke:这个是想要过滤掉 aha.act_type_ != 'sequenceFlow' 类型么?
         List<BpmActivityDO> bpmActivityDOList = bpmActivityMapper.listAllByProcInstIdAndDelete(procInstId);
         return BpmActivityConvert.INSTANCE.convertList(bpmActivityDOList);
     }

+ 3 - 0
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 {
 
         // 拼接数据
 //        List<BpmTaskExtDO> tmpBpmTaskExtDOList = taskExtMapper.listByProcInstId(processInstanceId);
+        // TODO @ke:这个钉钉是咋处理的?得讨论下流程预测的需要程度哈。
         List<BpmTaskExtDO> tmpBpmTaskExtDOList = taskExtMapper.selectListByProcessInstanceId(processInstanceId);
         tmpBpmTaskExtDOList.sort(Comparator.comparing(BpmTaskExtDO::getCreateTime));
         return hiTaskInstService.taskGetComment(tmpBpmTaskExtDOList, "");
@@ -247,9 +248,11 @@ public class BpmTaskServiceImpl implements BpmTaskService {
 
         //        List<HistoricActivityInstance> hisActInstList =
         //            historyService.createHistoricActivityInstanceQuery().processInstanceId(reqVO.getProcInstId()).list();
+        // TODO @ke:使用 historyService.createHistoricActivityInstanceQuery().processInstanceId(reqVO.getProcInstId()).list() 读取,会存在啥问题呀?
         List<BpmActivityDO> bpmActivityDOList = bpmActivityMapper.listAllByProcInstIdAndDelete(reqVO.getProcInstId());
         //        List<BpmActivityDO> bpmActivityDOList = BpmTaskConvert.INSTANCE.copyList(hisActInstList, BpmActivityDO.class);
         //        bpmActivityDOList.forEach(bpmActivityDO -> log.info("bpmActivityDO = " + bpmActivityDO));
+        // TODO @ke:如果 开始->a->b->c->d->结束,从 d 驳回到 b 的话,这样会不会导致 a 也被删除呀?http://blog.wya1.com/article/636697030/details/7296 可以看看这篇文章哈。
         List<String> taskIdList = bpmActivityDOList.stream().filter(
                 bpmActivityDO -> bpmActivityDO.getActivityId().equals(reqVO.getOldTaskDefKey())
                     && !bpmActivityDO.getTaskId().equals(reqVO.getTaskId())).map(BpmActivityDO::getTaskId)