From d0b280070e8c1789d8f5a39f5576165eaa848b1c Mon Sep 17 00:00:00 2001 From: Joshi <3040996759@qq.com> Date: Thu, 26 Jun 2025 18:34:54 +0800 Subject: [PATCH] =?UTF-8?q?=E8=BD=A6=E9=97=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../impl/OaAttendanceRecordServiceImpl.java | 79 +++++++++++++++---- .../mapper/oa/SysOaAttendanceMapper.xml | 2 +- 2 files changed, 63 insertions(+), 18 deletions(-) diff --git a/ruoyi-oa/src/main/java/com/ruoyi/oa/service/impl/OaAttendanceRecordServiceImpl.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/service/impl/OaAttendanceRecordServiceImpl.java index daa80a2..a215a0f 100644 --- a/ruoyi-oa/src/main/java/com/ruoyi/oa/service/impl/OaAttendanceRecordServiceImpl.java +++ b/ruoyi-oa/src/main/java/com/ruoyi/oa/service/impl/OaAttendanceRecordServiceImpl.java @@ -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 getAttendance(List userIds, String calcTime,String relationMonth) { + public List getAttendance(List userIds, String calcTime, String relationMonth) { // 首先查询合并好的projectIds 然后在查到的这个Long类型的列表后加入 0 1, 分别代表0出差1请假 - List projectIdsString = baseMapper.selectProjectIds(userIds,calcTime,relationMonth); + List projectIdsString = baseMapper.selectProjectIds(userIds, calcTime, relationMonth); List projectIds = parseProjectIds(projectIdsString); projectIds.add(0L); projectIds.add(1L); // 然后拿着每一个userId和projectId去签到表查询出勤 在传入的计算时间之前 List attendanceVoList = new ArrayList<>(); for (Long userId : userIds) { - List 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 getAttendance(List userIds, String calcTime,String relationMonth) { +// // 首先查询合并好的projectIds 然后在查到的这个Long类型的列表后加入 0 1, 分别代表0出差1请假 +// List projectIdsString = baseMapper.selectProjectIds(userIds,calcTime,relationMonth); +// List projectIds = parseProjectIds(projectIdsString); +// projectIds.add(0L); +// projectIds.add(1L); +// // 然后拿着每一个userId和projectId去签到表查询出勤 在传入的计算时间之前 +// List attendanceVoList = new ArrayList<>(); +// for (Long userId : userIds) { +// +// List 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 parseProjectIds(List projectIdsString) { // 使用 HashSet 来确保去重 diff --git a/ruoyi-oa/src/main/resources/mapper/oa/SysOaAttendanceMapper.xml b/ruoyi-oa/src/main/resources/mapper/oa/SysOaAttendanceMapper.xml index 93fd925..0f99efc 100644 --- a/ruoyi-oa/src/main/resources/mapper/oa/SysOaAttendanceMapper.xml +++ b/ruoyi-oa/src/main/resources/mapper/oa/SysOaAttendanceMapper.xml @@ -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}