feat(oa): 增加任务时间筛选功能并优化项目节点排序

- 在 ISysOaTaskService 接口及其实现类中增加 startTime 和 endTime 参数,
  用于筛选指定时间范围内的任务
- 在 OaProjectScheduleStepServiceImpl 中增加创建时间字段设置
- 优化个人报表查询逻辑,根据奖金池时间范围筛选项目步骤和任务
- 更新 TableDataConstantUtil 中多个项目节点的排序编号,确保节点顺序正确
- 调整部分项目阶段描述内容,使信息更加完整准确
This commit is contained in:
2025-10-28 11:12:53 +08:00
parent 7b3af936ab
commit da490a703c
4 changed files with 92 additions and 86 deletions

View File

@@ -9,6 +9,7 @@ import com.ruoyi.common.core.page.TableDataInfo;
import com.ruoyi.common.core.domain.PageQuery;
import java.util.Collection;
import java.util.Date;
import java.util.List;
/**
@@ -120,6 +121,6 @@ public interface ISysOaTaskService {
* @param projectIds 项目ID列表
* @return 符合条件的任务列表
*/
List<SysOaTask> getTasksByNicknameAndProjectIds(String nickName, List<Long> projectIds);
List<SysOaTask> getTasksByNicknameAndProjectIds(String nickName, List<Long> projectIds, Date startTime,Date endTime);
}

View File

@@ -17,9 +17,7 @@ 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.mapper.*;
import com.ruoyi.oa.service.ISysOaTaskService;
import com.ruoyi.system.mapper.SysUserMapper;
import lombok.RequiredArgsConstructor;
@@ -27,7 +25,6 @@ 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.mapper.OaProjectScheduleStepMapper;
import com.ruoyi.oa.service.IOaProjectScheduleStepService;
import org.springframework.transaction.annotation.Transactional;
@@ -47,6 +44,8 @@ public class OaProjectScheduleStepServiceImpl implements IOaProjectScheduleStepS
private final OaProjectScheduleStepMapper baseMapper;
private final OaBonusPoolMapper bonusPoolMapper;
private final OaProjectScheduleMapper scheduleMapper;
private final SysUserMapper sysUserMapper;
@@ -277,6 +276,7 @@ public class OaProjectScheduleStepServiceImpl implements IOaProjectScheduleStepS
step.setStepOrder((long) stepOrder.getAndIncrement()); // 步骤序号(非空,递增生成)
step.setStepName(node.getStepName());// 步骤名称非空从NodeDTO获取建议用二级节点名
step.setSortNum(node.getSortNum());
step.setCreateTime(new Date());
return step;
}).collect(Collectors.toList());
@@ -342,6 +342,13 @@ public class OaProjectScheduleStepServiceImpl implements IOaProjectScheduleStepS
*/
@Override
public PersonalReportDTO personalReport(Long poolId, String nickName) {
// 查询奖金池信息(获取开始时间和结束时间)
OaBonusPool bonusPool = bonusPoolMapper.selectById(poolId);
if (bonusPool == null) {
throw new RuntimeException("未找到奖金池:" + poolId);
}
Date startTime = bonusPool.getStartDate();
Date endTime = bonusPool.getEndDate();
// 查询用户基本信息
SysUser user = sysUserMapper.selectOne(
Wrappers.<SysUser>lambdaQuery()
@@ -401,6 +408,7 @@ public class OaProjectScheduleStepServiceImpl implements IOaProjectScheduleStepS
.eq(OaProjectScheduleStep::getNodeHeader, nickName)
.eq(OaProjectScheduleStep::getDelFlag, "0")
.eq(OaProjectScheduleStep::getUseFlag, 1)
.between(OaProjectScheduleStep::getUpdateTime, startTime, endTime) // 时间范围筛选
);
// 为每个步骤设置对应的项目ID
@@ -428,7 +436,7 @@ public class OaProjectScheduleStepServiceImpl implements IOaProjectScheduleStepS
.filter(step -> step.getEndTime().isAfter(step.getOriginalEndTime()))
.count());
// 查询用户相关任务
List<SysOaTask> tasks = sysOaTaskService.getTasksByNicknameAndProjectIds(nickName, projectIds);
List<SysOaTask> tasks = sysOaTaskService.getTasksByNicknameAndProjectIds(nickName, projectIds,startTime, endTime);
// 封装返回DTO
PersonalReportDTO result = new PersonalReportDTO();
result.setUserInfo(user);

View File

@@ -314,8 +314,7 @@ public class SysOaTaskServiceImpl implements ISysOaTaskService {
@Override
public List<SysOaTask> getTasksByNicknameAndProjectIds(String nickName, List<Long> projectIds) {
// 假设已有用户Mapper可以查询ID
public List<SysOaTask> getTasksByNicknameAndProjectIds(String nickName, List<Long> projectIds, Date startTime, Date endTime) {
SysUser user = userMapper.selectOne(Wrappers.<SysUser>lambdaQuery()
.eq(SysUser::getNickName, nickName)
.eq(SysUser::getDelFlag, "0"));
@@ -324,12 +323,10 @@ public class SysOaTaskServiceImpl implements ISysOaTaskService {
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在列表中
.eq(SysOaTask::getWorkerId, user.getUserId())
.in(projectIds != null && !projectIds.isEmpty(), SysOaTask::getProjectId, projectIds)
.between(SysOaTask::getBeginTime, startTime, endTime)); // 任务开始时间筛选
}
}