feat(oa): 添加根据用户名和项目ID列表查询任务功能
- 在 ISysOaTaskService 接口中新增 getTasksByNicknameAndProjectIds 方法- 实现在 SysOaTaskServiceImpl 中的具体逻辑,支持按执行人和项目筛选任务- 更新 PersonalReportDTO以包含关联的任务列表 - 修改 OaProjectScheduleStepServiceImpl 中的 personalReport 方法, 调用新接口获取任务数据并封装到返回结果中 -优化代码结构,移除冗余的注释编号,提升可读性- 添加必要的导入语句以支持新功能实现
This commit is contained in:
@@ -3,6 +3,7 @@ package com.ruoyi.oa.domain.dto;
|
|||||||
import com.ruoyi.common.core.domain.entity.SysUser;
|
import com.ruoyi.common.core.domain.entity.SysUser;
|
||||||
import com.ruoyi.oa.domain.OaProjectScheduleStep;
|
import com.ruoyi.oa.domain.OaProjectScheduleStep;
|
||||||
import com.ruoyi.oa.domain.SysOaProject;
|
import com.ruoyi.oa.domain.SysOaProject;
|
||||||
|
import com.ruoyi.oa.domain.SysOaTask;
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
@@ -21,6 +22,8 @@ public class PersonalReportDTO {
|
|||||||
private ProgressStats progressStats;
|
private ProgressStats progressStats;
|
||||||
private List<OaProjectScheduleStep> userSteps;
|
private List<OaProjectScheduleStep> userSteps;
|
||||||
|
|
||||||
|
//nickname和projectId关联的任务
|
||||||
|
private List<SysOaTask> tasks;
|
||||||
/**
|
/**
|
||||||
* 进度统计内部类(封装total、completed等字段)
|
* 进度统计内部类(封装total、completed等字段)
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
package com.ruoyi.oa.service;
|
package com.ruoyi.oa.service;
|
||||||
|
|
||||||
import com.ruoyi.common.core.domain.R;
|
import com.ruoyi.common.core.domain.R;
|
||||||
|
import com.ruoyi.oa.domain.SysOaTask;
|
||||||
import com.ruoyi.oa.domain.UserMonthlyData;
|
import com.ruoyi.oa.domain.UserMonthlyData;
|
||||||
import com.ruoyi.oa.domain.vo.SysOaTaskVo;
|
import com.ruoyi.oa.domain.vo.SysOaTaskVo;
|
||||||
import com.ruoyi.oa.domain.bo.SysOaTaskBo;
|
import com.ruoyi.oa.domain.bo.SysOaTaskBo;
|
||||||
@@ -112,4 +113,13 @@ public interface ISysOaTaskService {
|
|||||||
*/
|
*/
|
||||||
List<SysOaTaskVo> queryListPlus(SysOaTaskBo bo);
|
List<SysOaTaskVo> queryListPlus(SysOaTaskBo bo);
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 根据用户名和项目ID列表查询任务
|
||||||
|
* @param nickName 执行人用户名
|
||||||
|
* @param projectIds 项目ID列表
|
||||||
|
* @return 符合条件的任务列表
|
||||||
|
*/
|
||||||
|
List<SysOaTask> getTasksByNicknameAndProjectIds(String nickName, List<Long> projectIds);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -13,22 +13,20 @@ import com.ruoyi.common.core.page.TableDataInfo;
|
|||||||
import com.ruoyi.common.core.domain.PageQuery;
|
import com.ruoyi.common.core.domain.PageQuery;
|
||||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||||
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
||||||
import com.ruoyi.oa.domain.OaBonusProjectRel;
|
import com.ruoyi.oa.domain.*;
|
||||||
import com.ruoyi.oa.domain.OaProjectSchedule;
|
|
||||||
import com.ruoyi.oa.domain.SysOaProject;
|
|
||||||
import com.ruoyi.oa.domain.bo.BatchBo;
|
import com.ruoyi.oa.domain.bo.BatchBo;
|
||||||
import com.ruoyi.oa.domain.dto.NodeDTO;
|
import com.ruoyi.oa.domain.dto.NodeDTO;
|
||||||
import com.ruoyi.oa.domain.dto.PersonalReportDTO;
|
import com.ruoyi.oa.domain.dto.PersonalReportDTO;
|
||||||
import com.ruoyi.oa.mapper.OaBonusProjectRelMapper;
|
import com.ruoyi.oa.mapper.OaBonusProjectRelMapper;
|
||||||
import com.ruoyi.oa.mapper.OaProjectScheduleMapper;
|
import com.ruoyi.oa.mapper.OaProjectScheduleMapper;
|
||||||
import com.ruoyi.oa.mapper.SysOaProjectMapper;
|
import com.ruoyi.oa.mapper.SysOaProjectMapper;
|
||||||
|
import com.ruoyi.oa.service.ISysOaTaskService;
|
||||||
import com.ruoyi.system.mapper.SysUserMapper;
|
import com.ruoyi.system.mapper.SysUserMapper;
|
||||||
import lombok.RequiredArgsConstructor;
|
import lombok.RequiredArgsConstructor;
|
||||||
import org.flowable.job.service.impl.ServiceImpl;
|
import org.flowable.job.service.impl.ServiceImpl;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
import com.ruoyi.oa.domain.bo.OaProjectScheduleStepBo;
|
import com.ruoyi.oa.domain.bo.OaProjectScheduleStepBo;
|
||||||
import com.ruoyi.oa.domain.vo.OaProjectScheduleStepVo;
|
import com.ruoyi.oa.domain.vo.OaProjectScheduleStepVo;
|
||||||
import com.ruoyi.oa.domain.OaProjectScheduleStep;
|
|
||||||
import com.ruoyi.oa.mapper.OaProjectScheduleStepMapper;
|
import com.ruoyi.oa.mapper.OaProjectScheduleStepMapper;
|
||||||
import com.ruoyi.oa.service.IOaProjectScheduleStepService;
|
import com.ruoyi.oa.service.IOaProjectScheduleStepService;
|
||||||
import org.springframework.transaction.annotation.Transactional;
|
import org.springframework.transaction.annotation.Transactional;
|
||||||
@@ -61,6 +59,8 @@ public class OaProjectScheduleStepServiceImpl implements IOaProjectScheduleStepS
|
|||||||
|
|
||||||
private final OaProjectScheduleStepMapper projectScheduleStepMapper;
|
private final OaProjectScheduleStepMapper projectScheduleStepMapper;
|
||||||
|
|
||||||
|
private final ISysOaTaskService sysOaTaskService;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -342,7 +342,7 @@ public class OaProjectScheduleStepServiceImpl implements IOaProjectScheduleStepS
|
|||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
public PersonalReportDTO personalReport(Long poolId, String nickName) {
|
public PersonalReportDTO personalReport(Long poolId, String nickName) {
|
||||||
// 1. 查询用户基本信息
|
// 查询用户基本信息
|
||||||
SysUser user = sysUserMapper.selectOne(
|
SysUser user = sysUserMapper.selectOne(
|
||||||
Wrappers.<SysUser>lambdaQuery()
|
Wrappers.<SysUser>lambdaQuery()
|
||||||
.eq(SysUser::getNickName, nickName)
|
.eq(SysUser::getNickName, nickName)
|
||||||
@@ -352,7 +352,7 @@ public class OaProjectScheduleStepServiceImpl implements IOaProjectScheduleStepS
|
|||||||
throw new RuntimeException("未找到用户:" + nickName);
|
throw new RuntimeException("未找到用户:" + nickName);
|
||||||
}
|
}
|
||||||
|
|
||||||
// 2. 查询奖金池关联的项目ID
|
// 查询奖金池关联的项目ID
|
||||||
List<OaBonusProjectRel> rels = bonusProjectRelMapper.selectList(
|
List<OaBonusProjectRel> rels = bonusProjectRelMapper.selectList(
|
||||||
Wrappers.<OaBonusProjectRel>lambdaQuery()
|
Wrappers.<OaBonusProjectRel>lambdaQuery()
|
||||||
.eq(OaBonusProjectRel::getPoolId, poolId)
|
.eq(OaBonusProjectRel::getPoolId, poolId)
|
||||||
@@ -362,14 +362,14 @@ public class OaProjectScheduleStepServiceImpl implements IOaProjectScheduleStepS
|
|||||||
? Collections.emptyList()
|
? Collections.emptyList()
|
||||||
: rels.stream().map(OaBonusProjectRel::getProjectId).collect(Collectors.toList());
|
: rels.stream().map(OaBonusProjectRel::getProjectId).collect(Collectors.toList());
|
||||||
|
|
||||||
// 3. 筛选用户负责的项目
|
// 筛选用户负责的项目
|
||||||
List<SysOaProject> responsibleProjects = projectMapper.selectList(
|
List<SysOaProject> responsibleProjects = projectMapper.selectList(
|
||||||
Wrappers.<SysOaProject>lambdaQuery()
|
Wrappers.<SysOaProject>lambdaQuery()
|
||||||
.in(SysOaProject::getProjectId, projectIds)
|
.in(SysOaProject::getProjectId, projectIds)
|
||||||
.eq(SysOaProject::getFunctionary, nickName)
|
.eq(SysOaProject::getFunctionary, nickName)
|
||||||
);
|
);
|
||||||
|
|
||||||
// 4. 查询用户负责的进度步骤(核心数据),并关联项目ID
|
// 查询用户负责的进度步骤(核心数据),并关联项目ID
|
||||||
List<OaProjectScheduleStep> userSteps = new ArrayList<>();
|
List<OaProjectScheduleStep> userSteps = new ArrayList<>();
|
||||||
// 存储 scheduleId 与 projectId 的映射关系(关键:通过进度主表关联项目ID)
|
// 存储 scheduleId 与 projectId 的映射关系(关键:通过进度主表关联项目ID)
|
||||||
Map<Long, Long> scheduleProjectMap = new HashMap<>();
|
Map<Long, Long> scheduleProjectMap = new HashMap<>();
|
||||||
@@ -414,7 +414,7 @@ public class OaProjectScheduleStepServiceImpl implements IOaProjectScheduleStepS
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// 5. 统计进度数据(逻辑不变)
|
// 统计进度数据
|
||||||
PersonalReportDTO.ProgressStats progressStats = new PersonalReportDTO.ProgressStats();
|
PersonalReportDTO.ProgressStats progressStats = new PersonalReportDTO.ProgressStats();
|
||||||
progressStats.setTotal((long) userSteps.size());
|
progressStats.setTotal((long) userSteps.size());
|
||||||
progressStats.setCompleted(userSteps.stream()
|
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() != null && step.getOriginalEndTime() != null)
|
||||||
.filter(step -> step.getEndTime().isAfter(step.getOriginalEndTime()))
|
.filter(step -> step.getEndTime().isAfter(step.getOriginalEndTime()))
|
||||||
.count());
|
.count());
|
||||||
|
// 查询用户相关任务
|
||||||
// 6. 封装返回DTO
|
List<SysOaTask> tasks = sysOaTaskService.getTasksByNicknameAndProjectIds(nickName, projectIds);
|
||||||
|
// 封装返回DTO
|
||||||
PersonalReportDTO result = new PersonalReportDTO();
|
PersonalReportDTO result = new PersonalReportDTO();
|
||||||
result.setUserInfo(user);
|
result.setUserInfo(user);
|
||||||
result.setResponsibleProjects(responsibleProjects);
|
result.setResponsibleProjects(responsibleProjects);
|
||||||
result.setProgressStats(progressStats);
|
result.setProgressStats(progressStats);
|
||||||
result.setUserSteps(userSteps); // 此时userSteps已包含每个步骤对应的projectId
|
result.setUserSteps(userSteps); // 此时userSteps已包含每个步骤对应的projectId
|
||||||
|
result.setTasks(tasks);
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,7 +1,9 @@
|
|||||||
package com.ruoyi.oa.service.impl;
|
package com.ruoyi.oa.service.impl;
|
||||||
|
|
||||||
import cn.hutool.core.bean.BeanUtil;
|
import cn.hutool.core.bean.BeanUtil;
|
||||||
|
import cn.hutool.core.collection.CollUtil;
|
||||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
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.helper.LoginHelper;
|
||||||
import com.ruoyi.common.core.page.TableDataInfo;
|
import com.ruoyi.common.core.page.TableDataInfo;
|
||||||
import com.ruoyi.common.core.domain.PageQuery;
|
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.domain.bo.SysOaTaskItemBo;
|
||||||
import com.ruoyi.oa.mapper.SysOaTaskItemMapper;
|
import com.ruoyi.oa.mapper.SysOaTaskItemMapper;
|
||||||
import com.ruoyi.oa.service.ISysOaTaskItemService;
|
import com.ruoyi.oa.service.ISysOaTaskItemService;
|
||||||
|
import com.ruoyi.system.mapper.SysUserMapper;
|
||||||
import com.ruoyi.system.service.ISysOssService;
|
import com.ruoyi.system.service.ISysOssService;
|
||||||
import jodd.util.StringUtil;
|
import jodd.util.StringUtil;
|
||||||
import lombok.RequiredArgsConstructor;
|
import lombok.RequiredArgsConstructor;
|
||||||
@@ -45,6 +48,8 @@ public class SysOaTaskServiceImpl implements ISysOaTaskService {
|
|||||||
|
|
||||||
private final ISysOssService ossService;
|
private final ISysOssService ossService;
|
||||||
|
|
||||||
|
private SysUserMapper userMapper;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 查询任务管理
|
* 查询任务管理
|
||||||
*/
|
*/
|
||||||
@@ -136,6 +141,7 @@ public class SysOaTaskServiceImpl implements ISysOaTaskService {
|
|||||||
return baseMapper.queryListPlus(bo);
|
return baseMapper.queryListPlus(bo);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
private QueryWrapper<SysOaTask> buildQueryWrapper(SysOaTaskBo bo) {
|
private QueryWrapper<SysOaTask> buildQueryWrapper(SysOaTaskBo bo) {
|
||||||
Map<String, Object> params = bo.getParams();
|
Map<String, Object> params = bo.getParams();
|
||||||
QueryWrapper<SysOaTask> lqw = Wrappers.query();
|
QueryWrapper<SysOaTask> lqw = Wrappers.query();
|
||||||
@@ -305,4 +311,25 @@ public class SysOaTaskServiceImpl implements ISysOaTaskService {
|
|||||||
.atZone(ZoneId.systemDefault())
|
.atZone(ZoneId.systemDefault())
|
||||||
.toInstant());
|
.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在列表中
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user