feat(oa): 添加根据用户名和项目ID列表查询任务功能

- 在 ISysOaTaskService 接口中新增 getTasksByNicknameAndProjectIds 方法- 实现在 SysOaTaskServiceImpl 中的具体逻辑,支持按执行人和项目筛选任务- 更新 PersonalReportDTO以包含关联的任务列表
- 修改 OaProjectScheduleStepServiceImpl 中的 personalReport 方法, 调用新接口获取任务数据并封装到返回结果中
-优化代码结构,移除冗余的注释编号,提升可读性- 添加必要的导入语句以支持新功能实现
This commit is contained in:
2025-10-27 09:51:11 +08:00
parent 7fe7f20445
commit e10ba62c8b
4 changed files with 53 additions and 11 deletions

View File

@@ -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<OaProjectScheduleStep> userSteps;
//nickname和projectId关联的任务
private List<SysOaTask> tasks;
/**
* 进度统计内部类封装total、completed等字段
*/

View File

@@ -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<SysOaTaskVo> queryListPlus(SysOaTaskBo bo);
/**
* 根据用户名和项目ID列表查询任务
* @param nickName 执行人用户名
* @param projectIds 项目ID列表
* @return 符合条件的任务列表
*/
List<SysOaTask> getTasksByNicknameAndProjectIds(String nickName, List<Long> projectIds);
}

View File

@@ -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.<SysUser>lambdaQuery()
.eq(SysUser::getNickName, nickName)
@@ -352,7 +352,7 @@ public class OaProjectScheduleStepServiceImpl implements IOaProjectScheduleStepS
throw new RuntimeException("未找到用户:" + nickName);
}
// 2. 查询奖金池关联的项目ID
// 查询奖金池关联的项目ID
List<OaBonusProjectRel> rels = bonusProjectRelMapper.selectList(
Wrappers.<OaBonusProjectRel>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<SysOaProject> responsibleProjects = projectMapper.selectList(
Wrappers.<SysOaProject>lambdaQuery()
.in(SysOaProject::getProjectId, projectIds)
.eq(SysOaProject::getFunctionary, nickName)
);
// 4. 查询用户负责的进度步骤核心数据并关联项目ID
// 查询用户负责的进度步骤核心数据并关联项目ID
List<OaProjectScheduleStep> userSteps = new ArrayList<>();
// 存储 scheduleId 与 projectId 的映射关系关键通过进度主表关联项目ID
Map<Long, Long> 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<SysOaTask> 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;
}

View File

@@ -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<SysOaTask> buildQueryWrapper(SysOaTaskBo bo) {
Map<String, Object> params = bo.getParams();
QueryWrapper<SysOaTask> lqw = Wrappers.query();
@@ -305,4 +311,25 @@ public class SysOaTaskServiceImpl implements ISysOaTaskService {
.atZone(ZoneId.systemDefault())
.toInstant());
}
@Override
public List<SysOaTask> getTasksByNicknameAndProjectIds(String nickName, List<Long> projectIds) {
// 假设已有用户Mapper可以查询ID
SysUser user = userMapper.selectOne(Wrappers.<SysUser>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.<SysOaTask>lambdaQuery()
.eq(SysOaTask::getWorkerId, user.getUserId()) // 执行人ID匹配
.in(projectIds != null && !projectIds.isEmpty(), SysOaTask::getProjectId, projectIds)); // 项目ID在列表中
}
}