diff --git a/evo-admin/src/main/java/com/evo/attendance/mapper/RzAttendanceStatisticalMapper.java b/evo-admin/src/main/java/com/evo/attendance/mapper/RzAttendanceStatisticalMapper.java index 52b1372..09d5d8a 100644 --- a/evo-admin/src/main/java/com/evo/attendance/mapper/RzAttendanceStatisticalMapper.java +++ b/evo-admin/src/main/java/com/evo/attendance/mapper/RzAttendanceStatisticalMapper.java @@ -59,4 +59,10 @@ public interface RzAttendanceStatisticalMapper */ public List queryStatisticalByMonth(Date month); + /** + * 查询某个人考勤月的考勤统计信息 * + * @return 考勤统计集合 + */ + public List queryStatisticalByMonthAndName(@Param("attendanceDate") Date attendanceDate,@Param("name") String name); + } diff --git a/evo-admin/src/main/java/com/evo/attendance/service/IRzAttendanceService.java b/evo-admin/src/main/java/com/evo/attendance/service/IRzAttendanceService.java index 3187688..e35999d 100644 --- a/evo-admin/src/main/java/com/evo/attendance/service/IRzAttendanceService.java +++ b/evo-admin/src/main/java/com/evo/attendance/service/IRzAttendanceService.java @@ -52,4 +52,12 @@ public interface IRzAttendanceService * @return 考勤记录集合 */ public List listAttendanceByParams(RzAttendance rzAttendance); + + /** + * 手动更改考勤记录时更新考勤统计信息 + * + * @param rzAttendance 考勤记录 + * @return 考勤记录集合 + */ + public AjaxResult upateStatisticalByRzAttendance(RzAttendance rzAttendance); } diff --git a/evo-admin/src/main/java/com/evo/attendance/service/impl/RzAttendanceServiceImpl.java b/evo-admin/src/main/java/com/evo/attendance/service/impl/RzAttendanceServiceImpl.java index 8b9e24b..ad12e8e 100644 --- a/evo-admin/src/main/java/com/evo/attendance/service/impl/RzAttendanceServiceImpl.java +++ b/evo-admin/src/main/java/com/evo/attendance/service/impl/RzAttendanceServiceImpl.java @@ -1,5 +1,6 @@ package com.evo.attendance.service.impl; +import com.evo.attendance.domain.RzAttendanceStatistical; import com.evo.common.annotation.DataScope; import com.evo.common.core.domain.AjaxResult; import com.evo.common.core.domain.entity.SysDept; @@ -10,11 +11,15 @@ import com.evo.attendance.mapper.RzAttendanceMapper; import com.evo.attendance.mapper.RzAttendanceStatisticalMapper; import com.evo.attendance.service.IRzAttendanceService; import com.evo.common.utils.StringUtils; +import com.evo.personnelMatters.domain.RzOverTime; +import com.evo.personnelMatters.mapper.RzOverTimeMapper; import com.evo.system.mapper.SysDeptMapper; import org.springframework.stereotype.Service; import javax.annotation.Resource; import java.math.BigDecimal; import java.text.SimpleDateFormat; +import java.time.LocalDate; +import java.time.ZoneId; import java.util.Date; import java.util.List; @@ -33,6 +38,8 @@ public class RzAttendanceServiceImpl implements IRzAttendanceService private SysDeptMapper deptMapper; //部门 @Resource private RzAttendanceStatisticalMapper rzAttendanceStatisticalMapper; //考勤汇总 + @Resource + private RzOverTimeMapper rzOverTimeMapper; /** * 查询考勤记录 @@ -89,7 +96,12 @@ public class RzAttendanceServiceImpl implements IRzAttendanceService rzAttendance.setYcxFlag("0"); rzAttendance.setUpdateBy(SecurityUtils.getUsername()); rzAttendance.setUpdateTime(DateUtils.getNowDate()); - return rzAttendanceMapper.updateRzAttendance(rzAttendance); + + int count = rzAttendanceMapper.updateRzAttendance(rzAttendance); + if (count >0) { + upateStatisticalByRzAttendance(rzAttendance); + } + return count; } /** @@ -189,4 +201,50 @@ public class RzAttendanceServiceImpl implements IRzAttendanceService return rzAttendanceMapper.listAttendanceByParams(rzAttendance); } + public static int getMonthFromDate(Date date) { + if (date == null) { + return -1; // 或者抛出异常 + } + LocalDate localDate = date.toInstant().atZone(ZoneId.systemDefault()).toLocalDate(); + return localDate.getMonthValue(); // 返回 1-12 + } + + /** + * 手动更改考勤记录时更新考勤统计信息 + * + * @param rzAttendance 考勤记录 + * @return 考勤记录集合 + */ + public AjaxResult upateStatisticalByRzAttendance(RzAttendance rzAttendance) { + + //查询条件月统计的数据 + List ms_list = rzAttendanceStatisticalMapper.queryStatisticalByMonthAndName(rzAttendance.getAttendanceDate(),rzAttendance.getName()); + if (null != ms_list && ms_list.size() > 0) { + //初始化打卡记录 + RzAttendanceStatistical attendanceStatistical = ms_list.get(0); + attendanceStatistical.setEssentialAttendance(new BigDecimal("0.0")); + attendanceStatistical.setWorkOvertimeNumber(new BigDecimal("0.0")); + attendanceStatistical.setMiddleShiftNumber(0l); + attendanceStatistical.setNightNumber(0l); + //查询打卡记录 +// RzAttendance rzAttendance = new RzAttendance(); + rzAttendance.setAttendanceDate(rzAttendance.getAttendanceDate()); + rzAttendance.setStaffId(attendanceStatistical.getStaffId()); + List at_list = rzAttendanceMapper.listAttendanceByParams(rzAttendance); + for (RzAttendance attendance : at_list) { + attendanceStatistical.setEssentialAttendance(attendanceStatistical.getEssentialAttendance().add(attendance.getWorkSum())); + attendanceStatistical.setMiddleShiftNumber(attendanceStatistical.getMiddleShiftNumber() + attendance.getMiddleShiftNumber()); + attendanceStatistical.setNightNumber(attendanceStatistical.getNightNumber() + attendance.getNightNumber()); + } + //获取加班数据 + RzOverTime rzOverTime = rzOverTimeMapper.selectRzOverTimeByNameAndMonth(attendanceStatistical.getStaffId(), rzAttendance.getAttendanceDate()); + if (StringUtils.isNotNull(rzOverTime)) { + attendanceStatistical.setWorkOvertimeNumber(rzOverTime.getOverHours()); + } + attendanceStatistical.setRealAttendance(attendanceStatistical.getEssentialAttendance().add(attendanceStatistical.getWorkOvertimeNumber())); + rzAttendanceStatisticalMapper.updateRzAttendanceStatistical(attendanceStatistical); + } + return AjaxResult.success(); + } + } diff --git a/evo-admin/src/main/resources/mapper/attendance/RzAttendanceStatisticalMapper.xml b/evo-admin/src/main/resources/mapper/attendance/RzAttendanceStatisticalMapper.xml index 074dae8..00f05f1 100644 --- a/evo-admin/src/main/resources/mapper/attendance/RzAttendanceStatisticalMapper.xml +++ b/evo-admin/src/main/resources/mapper/attendance/RzAttendanceStatisticalMapper.xml @@ -136,4 +136,10 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" where DATE_FORMAT( month, '%Y%m' ) = DATE_FORMAT(#{month} , '%Y%m' ) AND del_flag = '0' + + +