This commit is contained in:
2025-06-26 18:34:54 +08:00
parent c9f7131f04
commit d0b280070e
2 changed files with 63 additions and 18 deletions

View File

@@ -21,6 +21,8 @@ import com.ruoyi.oa.domain.vo.OaAttendanceRecordVo;
import com.ruoyi.oa.domain.OaAttendanceRecord;
import com.ruoyi.oa.mapper.OaAttendanceRecordMapper;
import com.ruoyi.oa.service.IOaAttendanceRecordService;
import com.ruoyi.common.utils.DateUtils;
import com.ruoyi.oa.domain.vo.SysOaAttendanceVo;
import java.util.*;
@@ -150,51 +152,94 @@ public class OaAttendanceRecordServiceImpl implements IOaAttendanceRecordService
/**
*
* @param userIds
* @param calcTime yyyy-MM-dd
* @param relationMonth yyyy-MM-dd
* @param calcTime "yyyy-MM-dd"
* @param relationMonth "yyyy-MM-dd"
* @return
*/
@Override
public List<ProjectAttendanceVo> getAttendance(List<Long> userIds, String calcTime,String relationMonth) {
public List<ProjectAttendanceVo> getAttendance(List<Long> userIds, String calcTime, String relationMonth) {
// 首先查询合并好的projectIds 然后在查到的这个Long类型的列表后加入 0 1, 分别代表0出差1请假
List<String> projectIdsString = baseMapper.selectProjectIds(userIds,calcTime,relationMonth);
List<String> projectIdsString = baseMapper.selectProjectIds(userIds, calcTime, relationMonth);
List<Long> projectIds = parseProjectIds(projectIdsString);
projectIds.add(0L);
projectIds.add(1L);
// 然后拿着每一个userId和projectId去签到表查询出勤 在传入的计算时间之前
List<ProjectAttendanceVo> attendanceVoList = new ArrayList<>();
for (Long userId : userIds) {
List<ProjectAttendance> projects = new ArrayList<>();
for (Long projectId : projectIds) {
// 老规矩如果calcTime和relationMonth不在一个月则查询relationMonth全月的 如果在一个月则查询从一号到calcTime的出勤次数 及day_length>0或hour>0或project_id=0
Long workDays = attendanceMapper.getWorkDaysByUserIdAndProjectId(userId,projectId,calcTime,relationMonth);
Long workDays = attendanceMapper.getWorkDaysByUserIdAndProjectId(userId, projectId, calcTime, relationMonth);
ProjectAttendance projectAttendance = new ProjectAttendance();
projectAttendance.setProjectId(projectId);
projectAttendance.setWorkDays(workDays);
if (projectId.equals(0L)) {
projectAttendance.setProjectName("出差");
}else if (projectId.equals(1L)) {
} else if (projectId.equals(1L)) {
projectAttendance.setProjectName("请假");
}else{
} else {
SysOaProjectVo sysOaProjectVo = projectMapper.selectVoById(projectId);
projectAttendance.setProjectName(sysOaProjectVo.getProjectName());
}
projects.add(projectAttendance);
// 只有当workDays > 0时才添加到列表中
if (workDays > 0) {
projects.add(projectAttendance);
}
}
// 如果有任何记录,添加到结果列表
if (!projects.isEmpty()) {
ProjectAttendanceVo projectAttendanceVo = new ProjectAttendanceVo();
projectAttendanceVo.setProjects(projects);
projectAttendanceVo.setRelationMonth(relationMonth);
projectAttendanceVo.setNickName(userMapper.selectVoById(userId).getNickName());
attendanceVoList.add(projectAttendanceVo);
}
ProjectAttendanceVo projectAttendanceVo = new ProjectAttendanceVo();
projectAttendanceVo.setProjects(projects);
projectAttendanceVo.setRelationMonth(relationMonth);
projectAttendanceVo.setNickName(userMapper.selectVoById(userId).getNickName());
attendanceVoList.add(projectAttendanceVo);
}
//
return attendanceVoList;
}
//TODO 原本代码逻辑
// @Override
// public List<ProjectAttendanceVo> getAttendance(List<Long> userIds, String calcTime,String relationMonth) {
// // 首先查询合并好的projectIds 然后在查到的这个Long类型的列表后加入 0 1, 分别代表0出差1请假
// List<String> projectIdsString = baseMapper.selectProjectIds(userIds,calcTime,relationMonth);
// List<Long> projectIds = parseProjectIds(projectIdsString);
// projectIds.add(0L);
// projectIds.add(1L);
// // 然后拿着每一个userId和projectId去签到表查询出勤 在传入的计算时间之前
// List<ProjectAttendanceVo> attendanceVoList = new ArrayList<>();
// for (Long userId : userIds) {
//
// List<ProjectAttendance> projects = new ArrayList<>();
// for (Long projectId : projectIds) {
// // 老规矩如果calcTime和relationMonth不在一个月则查询relationMonth全月的 如果在一个月则查询从一号到calcTime的出勤次数 及day_length>0或hour>0或project_id=0
// Long workDays = attendanceMapper.getWorkDaysByUserIdAndProjectId(userId,projectId,calcTime,relationMonth);
//
// ProjectAttendance projectAttendance = new ProjectAttendance();
// projectAttendance.setProjectId(projectId);
// projectAttendance.setWorkDays(workDays);
// if (projectId.equals(0L)) {
// projectAttendance.setProjectName("出差");
// }else if (projectId.equals(1L)) {
// projectAttendance.setProjectName("请假");
// }else{
// SysOaProjectVo sysOaProjectVo = projectMapper.selectVoById(projectId);
// projectAttendance.setProjectName(sysOaProjectVo.getProjectName());
// }
//
// projects.add(projectAttendance);
// }
// ProjectAttendanceVo projectAttendanceVo = new ProjectAttendanceVo();
// projectAttendanceVo.setProjects(projects);
// projectAttendanceVo.setRelationMonth(relationMonth);
// projectAttendanceVo.setNickName(userMapper.selectVoById(userId).getNickName());
// attendanceVoList.add(projectAttendanceVo);
// }
// //
// return attendanceVoList;
// }
public static List<Long> parseProjectIds(List<String> projectIdsString) {
// 使用 HashSet 来确保去重

View File

@@ -309,7 +309,7 @@
SELECT
COALESCE(SUM(CASE
WHEN (day_length > 0 OR hour > 0)
OR project_id = 0
OR project_id IN (0, 1)
THEN 1 ELSE 0 END), 0) AS work_days
FROM sys_oa_attendance oas
WHERE oas.user_id = #{userId}