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.domain.OaAttendanceRecord;
import com.ruoyi.oa.mapper.OaAttendanceRecordMapper; import com.ruoyi.oa.mapper.OaAttendanceRecordMapper;
import com.ruoyi.oa.service.IOaAttendanceRecordService; import com.ruoyi.oa.service.IOaAttendanceRecordService;
import com.ruoyi.common.utils.DateUtils;
import com.ruoyi.oa.domain.vo.SysOaAttendanceVo;
import java.util.*; import java.util.*;
@@ -150,51 +152,94 @@ public class OaAttendanceRecordServiceImpl implements IOaAttendanceRecordService
/** /**
* *
* @param userIds * @param userIds
* @param calcTime yyyy-MM-dd * @param calcTime "yyyy-MM-dd"
* @param relationMonth yyyy-MM-dd * @param relationMonth "yyyy-MM-dd"
* @return * @return
*/ */
@Override @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请假 // 首先查询合并好的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); List<Long> projectIds = parseProjectIds(projectIdsString);
projectIds.add(0L); projectIds.add(0L);
projectIds.add(1L); projectIds.add(1L);
// 然后拿着每一个userId和projectId去签到表查询出勤 在传入的计算时间之前 // 然后拿着每一个userId和projectId去签到表查询出勤 在传入的计算时间之前
List<ProjectAttendanceVo> attendanceVoList = new ArrayList<>(); List<ProjectAttendanceVo> attendanceVoList = new ArrayList<>();
for (Long userId : userIds) { for (Long userId : userIds) {
List<ProjectAttendance> projects = new ArrayList<>(); List<ProjectAttendance> projects = new ArrayList<>();
for (Long projectId : projectIds) { for (Long projectId : projectIds) {
// 老规矩如果calcTime和relationMonth不在一个月则查询relationMonth全月的 如果在一个月则查询从一号到calcTime的出勤次数 及day_length>0或hour>0或project_id=0 // 老规矩如果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 projectAttendance = new ProjectAttendance();
projectAttendance.setProjectId(projectId); projectAttendance.setProjectId(projectId);
projectAttendance.setWorkDays(workDays); projectAttendance.setWorkDays(workDays);
if (projectId.equals(0L)) { if (projectId.equals(0L)) {
projectAttendance.setProjectName("出差"); projectAttendance.setProjectName("出差");
}else if (projectId.equals(1L)) { } else if (projectId.equals(1L)) {
projectAttendance.setProjectName("请假"); projectAttendance.setProjectName("请假");
}else{ } else {
SysOaProjectVo sysOaProjectVo = projectMapper.selectVoById(projectId); SysOaProjectVo sysOaProjectVo = projectMapper.selectVoById(projectId);
projectAttendance.setProjectName(sysOaProjectVo.getProjectName()); 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; 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) { public static List<Long> parseProjectIds(List<String> projectIdsString) {
// 使用 HashSet 来确保去重 // 使用 HashSet 来确保去重

View File

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