From 4b6493cfd5c876b77d1e7aceaad3e66fb2853fd9 Mon Sep 17 00:00:00 2001 From: gssong <1742057357@qq.com> Date: Sun, 15 Dec 2024 01:37:52 +0800 Subject: [PATCH] =?UTF-8?q?update=20=E4=BC=98=E5=8C=96=E8=8E=B7=E5=8F=96?= =?UTF-8?q?=E5=8A=9E=E7=90=86=E4=BA=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../common/constant/FlowConstant.java | 5 - .../controller/FlwTaskController.java | 1 - .../workflow/domain/vo/FlowTaskVo.java | 9 +- .../workflow/service/IFlwTaskService.java | 24 ++--- .../service/impl/FlwTaskServiceImpl.java | 91 +++++++++---------- .../impl/TaskAssigneeTranslationImpl.java | 33 ------- .../dromara/workflow/utils/WorkflowUtils.java | 23 +---- 7 files changed, 61 insertions(+), 125 deletions(-) delete mode 100644 ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/TaskAssigneeTranslationImpl.java diff --git a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/common/constant/FlowConstant.java b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/common/constant/FlowConstant.java index 9b62fd833..18cc90678 100644 --- a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/common/constant/FlowConstant.java +++ b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/common/constant/FlowConstant.java @@ -8,11 +8,6 @@ package org.dromara.workflow.common.constant; */ public interface FlowConstant { - /** - * 任务Id转任务办理人名称 - */ - String TASK_ID_TO_ASSIGNEE = "task_id_to_assignee"; - /** * 流程发起人 */ diff --git a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/controller/FlwTaskController.java b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/controller/FlwTaskController.java index 1e14130ec..ba4b3fc87 100644 --- a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/controller/FlwTaskController.java +++ b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/controller/FlwTaskController.java @@ -10,7 +10,6 @@ import org.dromara.common.log.enums.BusinessType; import org.dromara.common.mybatis.core.page.PageQuery; import org.dromara.common.mybatis.core.page.TableDataInfo; import org.dromara.common.web.core.BaseController; -import org.dromara.warm.flow.core.entity.HisTask; import org.dromara.warm.flow.orm.entity.FlowHisTask; import org.dromara.workflow.domain.bo.*; import org.dromara.workflow.domain.vo.FlowHisTaskVo; diff --git a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/vo/FlowTaskVo.java b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/vo/FlowTaskVo.java index 4e8fb8b09..e56d4d1e5 100644 --- a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/vo/FlowTaskVo.java +++ b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/vo/FlowTaskVo.java @@ -4,7 +4,6 @@ import lombok.Data; import org.dromara.common.translation.annotation.Translation; import org.dromara.common.translation.constant.TransConstant; import org.dromara.warm.flow.core.entity.User; -import org.dromara.workflow.common.constant.FlowConstant; import java.io.Serial; import java.io.Serializable; @@ -121,11 +120,15 @@ public class FlowTaskVo implements Serializable { @Translation(type = TransConstant.DICT_TYPE_TO_LABEL, mapper = "flowStatus", other = "wf_business_status") private String flowStatusName; + /** + * 办理人ids + */ + private String assigneeIds; + /** * 办理人名称 */ - @Translation(type = FlowConstant.TASK_ID_TO_ASSIGNEE, mapper = "id") - private String transactorNames; + private String assigneeNames; /** * 抄送人id diff --git a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/IFlwTaskService.java b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/IFlwTaskService.java index 2bdb6714f..3f7a169c6 100644 --- a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/IFlwTaskService.java +++ b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/IFlwTaskService.java @@ -114,22 +114,6 @@ public interface IFlwTaskService { */ boolean terminationTask(FlowTerminationBo bo); - /** - * 通过taskId查询对应的任务办理人 - * - * @param taskIds taskId串逗号分隔 - * @return 任务办理人名称串逗号分隔 - */ - String selectAssigneeNamesByIds(String taskIds); - - /** - * 通过taskId查询对应的任务办理人列表 - * - * @param taskIdList 任务id - * @return 列表 - */ - List selectAssigneeByIds(List taskIdList); - /** * 按照任务id查询任务 * @@ -187,6 +171,14 @@ public interface IFlwTaskService { */ boolean taskOperation(TaskOperationBo bo, String taskOperation); + /** + * 获取任务所有办理人 + * + * @param taskIdList 任务id + * @return 结果 + */ + Map> currentTaskAllUser(List taskIdList); + /** * 获取当前任务的所有办理人 * diff --git a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/FlwTaskServiceImpl.java b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/FlwTaskServiceImpl.java index 26a307c7d..aaf5bf4da 100644 --- a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/FlwTaskServiceImpl.java +++ b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/FlwTaskServiceImpl.java @@ -2,7 +2,6 @@ package org.dromara.workflow.service.impl; import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.collection.CollUtil; -import cn.hutool.core.convert.Convert; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.incrementer.IdentifierGenerator; @@ -76,6 +75,7 @@ public class FlwTaskServiceImpl implements IFlwTaskService { private final HisTaskService hisTaskService; private final IdentifierGenerator identifierGenerator; private final NodeService nodeService; + private final org.dromara.common.core.service.UserService sysUserService = SpringUtils.getBean(org.dromara.common.core.service.UserService.class); /** * 启动任务 @@ -182,7 +182,7 @@ public class FlwTaskServiceImpl implements IFlwTaskService { // 获取与当前任务关联的用户列表 List associatedUsers = userService.getByAssociateds(Collections.singletonList(flowTask.getId())); if (CollUtil.isNotEmpty(associatedUsers)) { - userList.addAll(WorkflowUtils.getUser(associatedUsers, flowTask.getId())); + userList.addAll(WorkflowUtils.buildUser(associatedUsers, flowTask.getId())); } } // 批量删除现有任务的办理人记录 @@ -247,7 +247,7 @@ public class FlwTaskServiceImpl implements IFlwTaskService { queryWrapper.eq("t.node_type", NodeType.BETWEEN.getKey()); queryWrapper.in("t.processed_by", SpringUtils.getBean(WorkflowPermissionHandler.class).permissions()); queryWrapper.in("t.flow_status", BusinessStatusEnum.WAITING.getStatus()); - Page page = flwTaskMapper.getTaskWaitByPage(pageQuery.build(), queryWrapper); + Page page = getFlowTaskVoPage(pageQuery, queryWrapper); return TableDataInfo.build(page); } @@ -277,10 +277,27 @@ public class FlwTaskServiceImpl implements IFlwTaskService { public TableDataInfo pageByAllTaskWait(FlowTaskBo flowTaskBo, PageQuery pageQuery) { QueryWrapper queryWrapper = buildQueryWrapper(flowTaskBo); queryWrapper.eq("t.node_type", NodeType.BETWEEN.getKey()); - Page page = flwTaskMapper.getTaskWaitByPage(pageQuery.build(), queryWrapper); + Page page = getFlowTaskVoPage(pageQuery, queryWrapper); return TableDataInfo.build(page); } + private Page getFlowTaskVoPage(PageQuery pageQuery, QueryWrapper queryWrapper) { + Page page = flwTaskMapper.getTaskWaitByPage(pageQuery.build(), queryWrapper); + List records = page.getRecords(); + if (CollUtil.isNotEmpty(records)) { + List taskIds = StreamUtils.toList(records, FlowTaskVo::getId); + Map> listMap = currentTaskAllUser(taskIds); + records.forEach(t -> { + List userList = listMap.getOrDefault(t.getId(), Collections.emptyList()); + if (CollUtil.isNotEmpty(userList)) { + t.setAssigneeIds(StreamUtils.join(userList, e -> String.valueOf(e.getUserId()))); + t.setAssigneeNames(StreamUtils.join(userList, UserDTO::getNickName)); + } + }); + } + return page; + } + /** * 查询已办任务 * @@ -410,41 +427,6 @@ public class FlwTaskServiceImpl implements IFlwTaskService { } } - /** - * 通过taskId查询对应的任务办理人 - * - * @param taskIds taskId串逗号分隔 - * @return 任务办理人名称串逗号分隔 - */ - @Override - public String selectAssigneeNamesByIds(String taskIds) { - if (StringUtils.isBlank(taskIds)) { - return null; - } - List taskIdList = StringUtils.splitTo(taskIds, Convert::toLong); - List list = this.selectAssigneeByIds(taskIdList); - if (CollUtil.isEmpty(list)) { - return StringUtils.EMPTY; - } - return StreamUtils.join(list, UserDTO::getNickName); - } - - /** - * 通过taskId查询对应的任务办理人列表 - * - * @param taskIdList 任务id - * @return 列表 - */ - @Override - public List selectAssigneeByIds(List taskIdList) { - if (CollUtil.isEmpty(taskIdList)) { - return Collections.emptyList(); - } - List userList = userService.getByAssociateds(taskIdList - , UserType.APPROVAL.getKey(), UserType.TRANSFER.getKey(), UserType.DEPUTE.getKey()); - return WorkflowUtils.getHandlerUser(userList); - } - /** * 按照任务id查询任务 * @@ -637,6 +619,27 @@ public class FlwTaskServiceImpl implements IFlwTaskService { return true; } + /** + * 获取任务所有办理人 + * + * @param taskIdList 任务id + */ + @Override + public Map> currentTaskAllUser(List taskIdList) { + Map> map = new HashMap<>(); + // 获取与当前任务关联的用户列表 + List associatedUsers = userService.getByAssociateds(taskIdList); + Map> listMap = StreamUtils.groupByKey(associatedUsers, User::getAssociated); + for (Map.Entry> entry : listMap.entrySet()) { + List value = entry.getValue(); + if (CollUtil.isNotEmpty(value)) { + List userDTOS = sysUserService.selectListByIds(StreamUtils.toList(value, e -> Long.valueOf(e.getProcessedBy()))); + map.put(entry.getKey(), userDTOS); + } + } + return map; + } + /** * 获取当前任务的所有办理人 * @@ -645,14 +648,10 @@ public class FlwTaskServiceImpl implements IFlwTaskService { @Override public List currentTaskAllUser(Long taskId) { // 获取与当前任务关联的用户列表 - List associatedUsers = userService.getByAssociateds(Collections.singletonList(taskId)); - if (CollUtil.isEmpty(associatedUsers)) { + List userList = userService.getByAssociateds(Collections.singletonList(taskId)); + if (CollUtil.isEmpty(userList)) { return Collections.emptyList(); } - Set users = WorkflowUtils.getUser(associatedUsers, taskId); - if (CollUtil.isEmpty(users)) { - return Collections.emptyList(); - } - return WorkflowUtils.getHandlerUser(new ArrayList<>(users)); + return sysUserService.selectListByIds(StreamUtils.toList(userList, e -> Long.valueOf(e.getProcessedBy()))); } } diff --git a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/TaskAssigneeTranslationImpl.java b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/TaskAssigneeTranslationImpl.java deleted file mode 100644 index 9a67364b8..000000000 --- a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/TaskAssigneeTranslationImpl.java +++ /dev/null @@ -1,33 +0,0 @@ -package org.dromara.workflow.service.impl; - -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; -import org.dromara.common.translation.annotation.TranslationType; -import org.dromara.common.translation.core.TranslationInterface; -import org.dromara.workflow.common.constant.FlowConstant; -import org.dromara.workflow.service.IFlwTaskService; -import org.springframework.stereotype.Service; - -/** - * 任务办理人翻译实现 - * - * @author AprilWind - */ -@Slf4j -@RequiredArgsConstructor -@Service -@TranslationType(type = FlowConstant.TASK_ID_TO_ASSIGNEE) -public class TaskAssigneeTranslationImpl implements TranslationInterface { - - private final IFlwTaskService flwTaskService; - - @Override - public String translation(Object key, String other) { - if (key instanceof Long id) { - return flwTaskService.selectAssigneeNamesByIds(id.toString()); - } else if (key instanceof String id) { - return flwTaskService.selectAssigneeNamesByIds(id); - } - return null; - } -} diff --git a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/utils/WorkflowUtils.java b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/utils/WorkflowUtils.java index f16abb78c..0c5a0ad90 100644 --- a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/utils/WorkflowUtils.java +++ b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/utils/WorkflowUtils.java @@ -20,7 +20,6 @@ import org.dromara.workflow.service.IFlwTaskService; import org.dromara.workflow.service.IWfTaskAssigneeService; import java.util.*; -import java.util.stream.Collectors; /** @@ -34,31 +33,13 @@ public class WorkflowUtils { public static final IFlwTaskService iFlwTaskService = SpringUtils.getBean(IFlwTaskService.class); /** - * 获取办理人 - * - * @param userList 办理用户 - * @return 用户 - */ - public static List getHandlerUser(List userList) { - if (CollUtil.isEmpty(userList)) { - return Collections.emptyList(); - } - // 获取所有用户的 UserDTO 列表 - return new ArrayList<>(userList.stream() - .map(User::getProcessedBy) - .filter(Objects::nonNull) - .flatMap(processedBy -> taskAssigneeService.fetchUsersByStorageId(processedBy).stream()) - .collect(Collectors.toMap(UserDTO::getUserId, user -> user, (ex, rep) -> ex)).values()); - } - - /** - * 获取办理人 + * 构建工作流用户 * * @param userList 办理用户 * @param taskId 任务ID * @return 用户 */ - public static Set getUser(List userList, Long taskId) { + public static Set buildUser(List userList, Long taskId) { if (CollUtil.isEmpty(userList)) { return Set.of(); }