From f6d8cb3ba780847e947b610c63c6bb6724d25a13 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B1=88=E5=B1=95=E8=88=AA?= <2426745133@qq.com> Date: Mon, 3 Nov 2025 19:56:28 +0800 Subject: [PATCH] =?UTF-8?q?11-3-=E8=8E=B7=E5=8F=96=E5=BE=85=E5=8A=9E?= =?UTF-8?q?=E4=BA=8B=E9=A1=B9=E4=B8=8D=E5=88=86=E9=A1=B5=E7=89=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/PersonalHomeController.java | 85 +++++++++++++++++++ .../workflow/mapper/FlwTaskMapper.java | 8 ++ .../mapper/workflow/FlwTaskMapper.xml | 45 ++++++++++ 3 files changed, 138 insertions(+) diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/bigscreen/controller/PersonalHomeController.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/bigscreen/controller/PersonalHomeController.java index 5ff6d74e..e7018088 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/bigscreen/controller/PersonalHomeController.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/bigscreen/controller/PersonalHomeController.java @@ -1,10 +1,32 @@ package org.dromara.bigscreen.controller; +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 org.dromara.common.core.domain.R; +import org.dromara.common.core.domain.dto.UserDTO; +import org.dromara.common.core.enums.BusinessStatusEnum; +import org.dromara.common.core.utils.StreamUtils; +import org.dromara.common.satoken.utils.LoginHelper; import org.dromara.common.web.core.BaseController; +import org.dromara.system.service.impl.SysUserServiceImpl; +import org.dromara.warm.flow.core.FlowEngine; +import org.dromara.warm.flow.core.entity.User; +import org.dromara.warm.flow.core.enums.NodeType; +import org.dromara.warm.flow.orm.entity.FlowDefinition; +import org.dromara.warm.flow.orm.mapper.FlowDefinitionMapper; +import org.dromara.workflow.domain.bo.FlowTaskBo; +import org.dromara.workflow.domain.vo.FlowTaskVo; +import org.dromara.workflow.mapper.FlwTaskMapper; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; +import java.util.*; + /** * 个人首页接口 */ @@ -12,4 +34,67 @@ import org.springframework.web.bind.annotation.RestController; @RestController @RequestMapping("/personalHome") public class PersonalHomeController extends BaseController { + + @Autowired + private FlwTaskMapper flwTaskMapper; + @Autowired + private FlowDefinitionMapper flowDefinitionMapper; + @Autowired + private SysUserServiceImpl userService; + + @GetMapping("/getTaskList") + public R> getTaskList(FlowTaskBo flowTaskBo) { + QueryWrapper queryWrapper = new QueryWrapper<>(); + List definitionIds = new ArrayList<>(); + if (!"0".equals(flowTaskBo.getProjectId())){ + List flowDefinitions = flowDefinitionMapper.selectList(new LambdaQueryWrapper() + .select(FlowDefinition::getId) + .like(FlowDefinition::getFlowCode, flowTaskBo.getProjectId())); + if (flowDefinitions != null && !flowDefinitions.isEmpty()) { + flowDefinitions.forEach(flowDefinition -> { + definitionIds.add(flowDefinition.getId()); + }); + } + if (definitionIds.isEmpty()) { + return null; + } + } + queryWrapper.eq("t.node_type", NodeType.BETWEEN.getKey()); + queryWrapper.in("t.processed_by", LoginHelper.getUserIdStr()); + queryWrapper.in("t.flow_status", BusinessStatusEnum.WAITING.getStatus()); + List page = this.getFlowTaskDefinitionIdsVoPage(definitionIds, queryWrapper); + return R.ok(page); + } + + private List getFlowTaskDefinitionIdsVoPage(List definitionIds, QueryWrapper queryWrapper) { + List records = flwTaskMapper.getListRunTaskDefinitionInfo(definitionIds, queryWrapper); + 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 records; + } + + public Map> currentTaskAllUser(List taskIdList) { + Map> map = new HashMap<>(); + // 获取与当前任务关联的用户列表 + List associatedUsers = FlowEngine.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 userDtoList = userService.selectListByIds(StreamUtils.toList(value, e -> Convert.toLong(e.getProcessedBy()))); + map.put(entry.getKey(), userDtoList); + } + } + return map; + } + } diff --git a/xinnengyuan/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/mapper/FlwTaskMapper.java b/xinnengyuan/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/mapper/FlwTaskMapper.java index 4dc4e164..8068e4c8 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/mapper/FlwTaskMapper.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/mapper/FlwTaskMapper.java @@ -30,6 +30,14 @@ public interface FlwTaskMapper { Page getListRunTask(@Param("page") Page page, @Param(Constants.WRAPPER) Wrapper queryWrapper); Page getListRunTaskDefinitionIds(@Param("page") Page page, @Param("definitionIds") List definitionIds, @Param(Constants.WRAPPER) Wrapper queryWrapper); + /** + * 不分页版 + * @param definitionIds + * @param queryWrapper + * @return + */ + List getListRunTaskDefinitionInfo(@Param("definitionIds") List definitionIds, @Param(Constants.WRAPPER) Wrapper queryWrapper); + /** * 获取待办信息 * diff --git a/xinnengyuan/ruoyi-modules/ruoyi-workflow/src/main/resources/mapper/workflow/FlwTaskMapper.xml b/xinnengyuan/ruoyi-modules/ruoyi-workflow/src/main/resources/mapper/workflow/FlwTaskMapper.xml index cda67f91..c3196faa 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-workflow/src/main/resources/mapper/workflow/FlwTaskMapper.xml +++ b/xinnengyuan/ruoyi-modules/ruoyi-workflow/src/main/resources/mapper/workflow/FlwTaskMapper.xml @@ -42,6 +42,51 @@ ) t ${ew.getCustomSqlSegment} + + + +