Commit da4f30082415316a4b844d08ad54287082a9aa35
1 parent
5c3f30e6
code review 工作流的驳回逻辑实现代码
Showing
7 changed files
with
17 additions
and
5 deletions
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<BpmActivityDO> { | @@ -21,6 +22,7 @@ public interface BpmActivityMapper extends BaseMapperX<BpmActivityDO> { | ||
| 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<BpmTaskExtDO> { | @@ -28,6 +28,7 @@ public interface BpmTaskExtMapper extends BaseMapperX<BpmTaskExtDO> { | ||
| 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<BpmTaskExtDO> { | @@ -38,6 +39,7 @@ public interface BpmTaskExtMapper extends BaseMapperX<BpmTaskExtDO> { | ||
| 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) |