diff --git a/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/dto/PersonalReportDTO.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/dto/PersonalReportDTO.java index ce6bce3..8c05926 100644 --- a/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/dto/PersonalReportDTO.java +++ b/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/dto/PersonalReportDTO.java @@ -3,6 +3,7 @@ package com.ruoyi.oa.domain.dto; import com.ruoyi.common.core.domain.entity.SysUser; import com.ruoyi.oa.domain.OaProjectScheduleStep; import com.ruoyi.oa.domain.SysOaProject; +import com.ruoyi.oa.domain.SysOaTask; import lombok.Data; import java.util.List; @@ -21,6 +22,8 @@ public class PersonalReportDTO { private ProgressStats progressStats; private List userSteps; + //nickname和projectId关联的任务 + private List tasks; /** * 进度统计内部类(封装total、completed等字段) */ diff --git a/ruoyi-oa/src/main/java/com/ruoyi/oa/service/ISysOaTaskService.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/service/ISysOaTaskService.java index a24f492..7a59739 100644 --- a/ruoyi-oa/src/main/java/com/ruoyi/oa/service/ISysOaTaskService.java +++ b/ruoyi-oa/src/main/java/com/ruoyi/oa/service/ISysOaTaskService.java @@ -1,6 +1,7 @@ package com.ruoyi.oa.service; import com.ruoyi.common.core.domain.R; +import com.ruoyi.oa.domain.SysOaTask; import com.ruoyi.oa.domain.UserMonthlyData; import com.ruoyi.oa.domain.vo.SysOaTaskVo; import com.ruoyi.oa.domain.bo.SysOaTaskBo; @@ -112,4 +113,13 @@ public interface ISysOaTaskService { */ List queryListPlus(SysOaTaskBo bo); + + /** + * 根据用户名和项目ID列表查询任务 + * @param nickName 执行人用户名 + * @param projectIds 项目ID列表 + * @return 符合条件的任务列表 + */ + List getTasksByNicknameAndProjectIds(String nickName, List projectIds); + } diff --git a/ruoyi-oa/src/main/java/com/ruoyi/oa/service/impl/OaProjectScheduleStepServiceImpl.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/service/impl/OaProjectScheduleStepServiceImpl.java index 1aaf661..fc51ce4 100644 --- a/ruoyi-oa/src/main/java/com/ruoyi/oa/service/impl/OaProjectScheduleStepServiceImpl.java +++ b/ruoyi-oa/src/main/java/com/ruoyi/oa/service/impl/OaProjectScheduleStepServiceImpl.java @@ -13,22 +13,20 @@ import com.ruoyi.common.core.page.TableDataInfo; import com.ruoyi.common.core.domain.PageQuery; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.core.toolkit.Wrappers; -import com.ruoyi.oa.domain.OaBonusProjectRel; -import com.ruoyi.oa.domain.OaProjectSchedule; -import com.ruoyi.oa.domain.SysOaProject; +import com.ruoyi.oa.domain.*; import com.ruoyi.oa.domain.bo.BatchBo; import com.ruoyi.oa.domain.dto.NodeDTO; import com.ruoyi.oa.domain.dto.PersonalReportDTO; import com.ruoyi.oa.mapper.OaBonusProjectRelMapper; import com.ruoyi.oa.mapper.OaProjectScheduleMapper; import com.ruoyi.oa.mapper.SysOaProjectMapper; +import com.ruoyi.oa.service.ISysOaTaskService; import com.ruoyi.system.mapper.SysUserMapper; import lombok.RequiredArgsConstructor; import org.flowable.job.service.impl.ServiceImpl; import org.springframework.stereotype.Service; import com.ruoyi.oa.domain.bo.OaProjectScheduleStepBo; import com.ruoyi.oa.domain.vo.OaProjectScheduleStepVo; -import com.ruoyi.oa.domain.OaProjectScheduleStep; import com.ruoyi.oa.mapper.OaProjectScheduleStepMapper; import com.ruoyi.oa.service.IOaProjectScheduleStepService; import org.springframework.transaction.annotation.Transactional; @@ -61,6 +59,8 @@ public class OaProjectScheduleStepServiceImpl implements IOaProjectScheduleStepS private final OaProjectScheduleStepMapper projectScheduleStepMapper; + private final ISysOaTaskService sysOaTaskService; + /** @@ -342,7 +342,7 @@ public class OaProjectScheduleStepServiceImpl implements IOaProjectScheduleStepS */ @Override public PersonalReportDTO personalReport(Long poolId, String nickName) { - // 1. 查询用户基本信息 + // 查询用户基本信息 SysUser user = sysUserMapper.selectOne( Wrappers.lambdaQuery() .eq(SysUser::getNickName, nickName) @@ -352,7 +352,7 @@ public class OaProjectScheduleStepServiceImpl implements IOaProjectScheduleStepS throw new RuntimeException("未找到用户:" + nickName); } - // 2. 查询奖金池关联的项目ID + // 查询奖金池关联的项目ID List rels = bonusProjectRelMapper.selectList( Wrappers.lambdaQuery() .eq(OaBonusProjectRel::getPoolId, poolId) @@ -362,14 +362,14 @@ public class OaProjectScheduleStepServiceImpl implements IOaProjectScheduleStepS ? Collections.emptyList() : rels.stream().map(OaBonusProjectRel::getProjectId).collect(Collectors.toList()); - // 3. 筛选用户负责的项目 + // 筛选用户负责的项目 List responsibleProjects = projectMapper.selectList( Wrappers.lambdaQuery() .in(SysOaProject::getProjectId, projectIds) .eq(SysOaProject::getFunctionary, nickName) ); - // 4. 查询用户负责的进度步骤(核心数据),并关联项目ID + // 查询用户负责的进度步骤(核心数据),并关联项目ID List userSteps = new ArrayList<>(); // 存储 scheduleId 与 projectId 的映射关系(关键:通过进度主表关联项目ID) Map scheduleProjectMap = new HashMap<>(); @@ -414,7 +414,7 @@ public class OaProjectScheduleStepServiceImpl implements IOaProjectScheduleStepS } } - // 5. 统计进度数据(逻辑不变) + // 统计进度数据 PersonalReportDTO.ProgressStats progressStats = new PersonalReportDTO.ProgressStats(); progressStats.setTotal((long) userSteps.size()); progressStats.setCompleted(userSteps.stream() @@ -427,13 +427,15 @@ public class OaProjectScheduleStepServiceImpl implements IOaProjectScheduleStepS .filter(step -> step.getEndTime() != null && step.getOriginalEndTime() != null) .filter(step -> step.getEndTime().isAfter(step.getOriginalEndTime())) .count()); - - // 6. 封装返回DTO + // 查询用户相关任务 + List tasks = sysOaTaskService.getTasksByNicknameAndProjectIds(nickName, projectIds); + // 封装返回DTO PersonalReportDTO result = new PersonalReportDTO(); result.setUserInfo(user); result.setResponsibleProjects(responsibleProjects); result.setProgressStats(progressStats); result.setUserSteps(userSteps); // 此时userSteps已包含每个步骤对应的projectId + result.setTasks(tasks); return result; } diff --git a/ruoyi-oa/src/main/java/com/ruoyi/oa/service/impl/SysOaTaskServiceImpl.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/service/impl/SysOaTaskServiceImpl.java index 6cf10e0..bab5987 100644 --- a/ruoyi-oa/src/main/java/com/ruoyi/oa/service/impl/SysOaTaskServiceImpl.java +++ b/ruoyi-oa/src/main/java/com/ruoyi/oa/service/impl/SysOaTaskServiceImpl.java @@ -1,7 +1,9 @@ package com.ruoyi.oa.service.impl; import cn.hutool.core.bean.BeanUtil; +import cn.hutool.core.collection.CollUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.ruoyi.common.core.domain.entity.SysUser; import com.ruoyi.common.helper.LoginHelper; import com.ruoyi.common.core.page.TableDataInfo; import com.ruoyi.common.core.domain.PageQuery; @@ -11,6 +13,7 @@ import com.ruoyi.oa.domain.*; import com.ruoyi.oa.domain.bo.SysOaTaskItemBo; import com.ruoyi.oa.mapper.SysOaTaskItemMapper; import com.ruoyi.oa.service.ISysOaTaskItemService; +import com.ruoyi.system.mapper.SysUserMapper; import com.ruoyi.system.service.ISysOssService; import jodd.util.StringUtil; import lombok.RequiredArgsConstructor; @@ -45,6 +48,8 @@ public class SysOaTaskServiceImpl implements ISysOaTaskService { private final ISysOssService ossService; + private SysUserMapper userMapper; + /** * 查询任务管理 */ @@ -136,6 +141,7 @@ public class SysOaTaskServiceImpl implements ISysOaTaskService { return baseMapper.queryListPlus(bo); } + private QueryWrapper buildQueryWrapper(SysOaTaskBo bo) { Map params = bo.getParams(); QueryWrapper lqw = Wrappers.query(); @@ -305,4 +311,25 @@ public class SysOaTaskServiceImpl implements ISysOaTaskService { .atZone(ZoneId.systemDefault()) .toInstant()); } + + + @Override + public List getTasksByNicknameAndProjectIds(String nickName, List projectIds) { + // 假设已有用户Mapper可以查询ID + SysUser user = userMapper.selectOne(Wrappers.lambdaQuery() + .eq(SysUser::getNickName, nickName) + .eq(SysUser::getDelFlag, "0")); + + if (user == null) { + return Collections.emptyList(); + } + + // 查询条件: + // 1. 任务执行人ID = 当前用户ID + // 2. 任务所属项目ID在奖金池关联的项目列表中 + // 3. 未删除 + return baseMapper.selectList(Wrappers.lambdaQuery() + .eq(SysOaTask::getWorkerId, user.getUserId()) // 执行人ID匹配 + .in(projectIds != null && !projectIds.isEmpty(), SysOaTask::getProjectId, projectIds)); // 项目ID在列表中 + } }