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} + + + +