diff --git a/yudao-framework/yudao-common/src/main/java/cn/iocoder/yudao/framework/common/util/collection/CollectionUtils.java b/yudao-framework/yudao-common/src/main/java/cn/iocoder/yudao/framework/common/util/collection/CollectionUtils.java index 9ac411732..b8d57df6d 100644 --- a/yudao-framework/yudao-common/src/main/java/cn/iocoder/yudao/framework/common/util/collection/CollectionUtils.java +++ b/yudao-framework/yudao-common/src/main/java/cn/iocoder/yudao/framework/common/util/collection/CollectionUtils.java @@ -3,7 +3,6 @@ package cn.iocoder.yudao.framework.common.util.collection; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.util.ArrayUtil; -import cn.iocoder.yudao.framework.common.util.number.NumberUtils; import com.google.common.collect.ImmutableMap; import java.util.*; @@ -269,7 +268,7 @@ public class CollectionUtils { return deptId == null ? Collections.emptyList() : Collections.singleton(deptId); } - public static List convertListByMultiAttr(Collection from, + public static List convertListByFlatMap(Collection from, Function> func) { if (CollUtil.isEmpty(from)) { return new ArrayList<>(); @@ -277,11 +276,12 @@ public class CollectionUtils { return from.stream().flatMap(func).filter(Objects::nonNull).collect(Collectors.toList()); } - public static Set convertSetByMultiAttr(Collection from, - Function> func) { + public static Set convertSetByFlatMap(Collection from, + Function> func) { if (CollUtil.isEmpty(from)) { return new HashSet<>(); } return from.stream().flatMap(func).filter(Objects::nonNull).collect(Collectors.toSet()); } + } diff --git a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/task/BpmTaskController.java b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/task/BpmTaskController.java index 7a8c8b8c8..dcfab78ef 100644 --- a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/task/BpmTaskController.java +++ b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/task/BpmTaskController.java @@ -101,22 +101,22 @@ public class BpmTaskController { @PutMapping("/create-sign") @Operation(summary = "加签", description = "before 前加签,after 后加签") @PreAuthorize("@ss.hasPermission('bpm:task:update')") - public CommonResult addSignTask(@Valid @RequestBody BpmTaskAddSignReqVO reqVO) { - taskService.addSignTask(getLoginUserId(), reqVO); + public CommonResult createSignTask(@Valid @RequestBody BpmTaskAddSignReqVO reqVO) { + taskService.createSignTask(getLoginUserId(), reqVO); return success(true); } @DeleteMapping("/delete-sign") @Operation(summary = "减签") @PreAuthorize("@ss.hasPermission('bpm:task:update')") - public CommonResult subSignTask(@Valid @RequestBody BpmTaskSubSignReqVO reqVO) { - taskService.subSignTask(getLoginUserId(), reqVO); + public CommonResult deleteSignTask(@Valid @RequestBody BpmTaskSubSignReqVO reqVO) { + taskService.deleteSignTask(getLoginUserId(), reqVO); return success(true); } @GetMapping("children-list") @Operation(summary = "获取能被减签的任务") - @Parameter(name = "parentId", description = "父级任务ID", required = true) + @Parameter(name = "parentId", description = "父级任务 ID", required = true) @PreAuthorize("@ss.hasPermission('bpm:task:update')") public CommonResult> getChildrenTaskList(@RequestParam("parentId") String parentId) { return success(taskService.getChildrenTaskList(parentId)); diff --git a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/convert/task/BpmTaskConvert.java b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/convert/task/BpmTaskConvert.java index 470cba6ce..60ce84021 100644 --- a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/convert/task/BpmTaskConvert.java +++ b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/convert/task/BpmTaskConvert.java @@ -1,6 +1,5 @@ package cn.iocoder.yudao.module.bpm.convert.task; -import cn.hutool.core.collection.CollUtil; import cn.hutool.core.date.LocalDateTimeUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; @@ -27,6 +26,9 @@ import java.util.Date; import java.util.List; import java.util.Map; +import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertMultiMap; +import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.filterList; + /** * Bpm 任务 Convert * @@ -171,9 +173,7 @@ public interface BpmTaskConvert { Map idTaskMap){ return CollectionUtils.convertList(bpmTaskExtDOList, task -> { BpmTaskSubSignRespVO bpmTaskSubSignRespVO = new BpmTaskSubSignRespVO() - .setName(task.getName()) - .setId(task.getTaskId()); - + .setId(task.getTaskId()).setName(task.getName()); // 后加签任务不会直接设置 assignee ,所以不存在 assignee 的情况,则去取 owner Task sourceTask = idTaskMap.get(task.getTaskId()); String assignee = ObjectUtil.defaultIfBlank(sourceTask.getOwner(),sourceTask.getAssignee()); @@ -190,12 +190,12 @@ public interface BpmTaskConvert { * @return 转换后的父子级数组 */ default List convertChildrenList(List sourceList) { - List childrenTaskList = CollectionUtils.filterList(sourceList, r -> StrUtil.isNotEmpty(r.getParentTaskId())); - Map> parentChildrenTaskListMap = CollectionUtils.convertMultiMap(childrenTaskList, BpmTaskRespVO::getParentTaskId); + List childrenTaskList = filterList(sourceList, r -> StrUtil.isNotEmpty(r.getParentTaskId())); + Map> parentChildrenTaskListMap = convertMultiMap(childrenTaskList, BpmTaskRespVO::getParentTaskId); for (BpmTaskRespVO bpmTaskRespVO : sourceList) { bpmTaskRespVO.setChildren(parentChildrenTaskListMap.get(bpmTaskRespVO.getId())); } - return CollectionUtils.filterList(sourceList, r -> StrUtil.isEmpty(r.getParentTaskId())); + return filterList(sourceList, r -> StrUtil.isEmpty(r.getParentTaskId())); } } diff --git a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/task/BpmTaskService.java b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/task/BpmTaskService.java index 5310f3e68..42be9260a 100644 --- a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/task/BpmTaskService.java +++ b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/task/BpmTaskService.java @@ -163,7 +163,7 @@ public interface BpmTaskService { * @param userId 被加签的用户和任务 ID,加签类型 * @param reqVO 当前用户 ID */ - void addSignTask(Long userId, BpmTaskAddSignReqVO reqVO); + void createSignTask(Long userId, BpmTaskAddSignReqVO reqVO); /** * 任务减签名 @@ -171,7 +171,7 @@ public interface BpmTaskService { * @param userId 当前用户ID * @param reqVO 被减签的任务 ID,理由 */ - void subSignTask(Long userId, BpmTaskSubSignReqVO reqVO); + void deleteSignTask(Long userId, BpmTaskSubSignReqVO reqVO); /** * 获取指定任务的子任务和审批人信息 diff --git a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/task/BpmTaskServiceImpl.java b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/task/BpmTaskServiceImpl.java index e195608a0..2b0e18e70 100644 --- a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/task/BpmTaskServiceImpl.java +++ b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/task/BpmTaskServiceImpl.java @@ -711,7 +711,7 @@ public class BpmTaskServiceImpl implements BpmTaskService { @Override @Transactional(rollbackFor = Exception.class) - public void addSignTask(Long userId, BpmTaskAddSignReqVO reqVO) { + public void createSignTask(Long userId, BpmTaskAddSignReqVO reqVO) { // 1. 获取和校验任务 TaskEntityImpl taskEntity = validateAddSign(userId, reqVO); List userList = adminUserApi.getUserList(reqVO.getUserIdList()); @@ -826,7 +826,7 @@ public class BpmTaskServiceImpl implements BpmTaskService { @Override @Transactional(rollbackFor = Exception.class) - public void subSignTask(Long userId, BpmTaskSubSignReqVO reqVO) { + public void deleteSignTask(Long userId, BpmTaskSubSignReqVO reqVO) { // 1.1 校验 task 可以被减签 Task task = validateSubSign(reqVO.getId()); // 1.2 校验取消人存在 @@ -902,12 +902,14 @@ public class BpmTaskServiceImpl implements BpmTaskService { stack.push(parentTaskId); //控制遍历的次数不超过 Byte.MAX_VALUE,避免脏数据造成死循环 int count = 0; + // TODO @海:< 的前后空格,要注意哈; while (!stack.isEmpty() && count childrenTaskIdList = getChildrenTaskIdList(taskId); if (CollUtil.isNotEmpty(childrenTaskIdList)) { for (String childTaskId : childrenTaskIdList) { @@ -920,7 +922,6 @@ public class BpmTaskServiceImpl implements BpmTaskService { return allChildTaskIds; } - /** * 获取指定父级任务的所有子任务 ID 集合 * @@ -954,13 +955,11 @@ public class BpmTaskServiceImpl implements BpmTaskService { } List childrenTaskIdList = convertList(taskList, Task::getId); - - // 2. 将 owner 和 assignee 统一到一个集合中 - List userIds = convertListByMultiAttr(taskList,control -> + // 2.1 将 owner 和 assignee 统一到一个集合中 + List userIds = convertListByFlatMap(taskList, control -> Stream.of(NumberUtils.parseLong(control.getAssignee()), NumberUtils.parseLong(control.getOwner())) .filter(Objects::nonNull)); - - // 3. 组装数据 + // 2.2 组装数据 Map userMap = adminUserApi.getUserMap(userIds); List taskExtList = taskExtMapper.selectProcessListByTaskIds(childrenTaskIdList); Map idTaskMap = convertMap(taskList, TaskInfo::getId);