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 | 10 | |
| 11 | 11 | /** |
| 12 | 12 | * @author kemengkai |
| 13 | - * @create 2022-05-07 08:05 | |
| 13 | + * @create 2022-05-07 08:05 TODO ke:vo 类,使用 swagger 注解即可 | |
| 14 | 14 | */ |
| 15 | 15 | @Data |
| 16 | 16 | @AllArgsConstructor |
| 17 | 17 | @NoArgsConstructor |
| 18 | 18 | public class BpmTaskBackReqVO { |
| 19 | 19 | |
| 20 | + // TODO ke:userId 应该使用后端的,不能前端传递,不然就越权了 | |
| 20 | 21 | @ApiModelProperty(value = "用户id", required = true, example = "1") |
| 21 | 22 | @NotEmpty(message = "用户id不能为空") |
| 22 | 23 | private String userId; |
| 23 | 24 | |
| 25 | + // TODO ke:procInstId、taskId、oldTaskDefKey 三个,是不是只要传递一个 taskId?字段不要存在推导关系 | |
| 24 | 26 | @ApiModelProperty(value = "流程编号id", required = true, example = "730da750-cc4f-11ec-b58e-1e429355e4a0") |
| 25 | 27 | @NotEmpty(message = "流程编号id不能为空") |
| 26 | 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 | 9 | |
| 10 | 10 | /** |
| 11 | 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 | 14 | @Mapper |
| 15 | 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 | 22 | */ |
| 22 | 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 | 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 | 39 | */ |
| 39 | 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 | 29 | ObjectProvider<FlowableEventListener> listeners, |
| 30 | 30 | BpmActivityBehaviorFactory bpmActivityBehaviorFactory) { |
| 31 | 31 | return configuration -> { |
| 32 | - // 注册监听器,例如说 BpmActivitiEventListener | |
| 32 | + // 注册监听器,例如说 BpmActivityEventListener | |
| 33 | 33 | configuration.setEventListeners(ListUtil.toList(listeners.iterator())); |
| 34 | 34 | // 设置 ActivityBehaviorFactory 实现类,用于流程任务的审核人的自定义 |
| 35 | 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
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 | 34 | @Override |
| 35 | 35 | @TenantIgnore |
| 36 | 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 | 40 | List<BpmActivityDO> bpmActivityDOList = bpmActivityMapper.listAllByProcInstIdAndDelete(procInstId); |
| 40 | 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 | 188 | |
| 189 | 189 | // 拼接数据 |
| 190 | 190 | // List<BpmTaskExtDO> tmpBpmTaskExtDOList = taskExtMapper.listByProcInstId(processInstanceId); |
| 191 | + // TODO @ke:这个钉钉是咋处理的?得讨论下流程预测的需要程度哈。 | |
| 191 | 192 | List<BpmTaskExtDO> tmpBpmTaskExtDOList = taskExtMapper.selectListByProcessInstanceId(processInstanceId); |
| 192 | 193 | tmpBpmTaskExtDOList.sort(Comparator.comparing(BpmTaskExtDO::getCreateTime)); |
| 193 | 194 | return hiTaskInstService.taskGetComment(tmpBpmTaskExtDOList, ""); |
| ... | ... | @@ -247,9 +248,11 @@ public class BpmTaskServiceImpl implements BpmTaskService { |
| 247 | 248 | |
| 248 | 249 | // List<HistoricActivityInstance> hisActInstList = |
| 249 | 250 | // historyService.createHistoricActivityInstanceQuery().processInstanceId(reqVO.getProcInstId()).list(); |
| 251 | + // TODO @ke:使用 historyService.createHistoricActivityInstanceQuery().processInstanceId(reqVO.getProcInstId()).list() 读取,会存在啥问题呀? | |
| 250 | 252 | List<BpmActivityDO> bpmActivityDOList = bpmActivityMapper.listAllByProcInstIdAndDelete(reqVO.getProcInstId()); |
| 251 | 253 | // List<BpmActivityDO> bpmActivityDOList = BpmTaskConvert.INSTANCE.copyList(hisActInstList, BpmActivityDO.class); |
| 252 | 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 | 256 | List<String> taskIdList = bpmActivityDOList.stream().filter( |
| 254 | 257 | bpmActivityDO -> bpmActivityDO.getActivityId().equals(reqVO.getOldTaskDefKey()) |
| 255 | 258 | && !bpmActivityDO.getTaskId().equals(reqVO.getTaskId())).map(BpmActivityDO::getTaskId) | ... | ... |