fix:修改补卡记录同步更新考勤统计信息表

This commit is contained in:
lhb 2025-05-05 17:32:37 +08:00
parent 29930f98ff
commit d3943bad8c
4 changed files with 79 additions and 1 deletions

View File

@ -59,4 +59,10 @@ public interface RzAttendanceStatisticalMapper
*/
public List<RzAttendanceStatistical> queryStatisticalByMonth(Date month);
/**
* 查询某个人考勤月的考勤统计信息 *
* @return 考勤统计集合
*/
public List<RzAttendanceStatistical> queryStatisticalByMonthAndName(@Param("attendanceDate") Date attendanceDate,@Param("name") String name);
}

View File

@ -52,4 +52,12 @@ public interface IRzAttendanceService
* @return 考勤记录集合
*/
public List<RzAttendance> listAttendanceByParams(RzAttendance rzAttendance);
/**
* 手动更改考勤记录时更新考勤统计信息
*
* @param rzAttendance 考勤记录
* @return 考勤记录集合
*/
public AjaxResult upateStatisticalByRzAttendance(RzAttendance rzAttendance);
}

View File

@ -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<RzAttendanceStatistical> 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<RzAttendance> 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();
}
}

View File

@ -136,4 +136,10 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<include refid="selectRzAttendanceStatisticalVo"/>
where DATE_FORMAT( month, '%Y%m' ) = DATE_FORMAT(#{month} , '%Y%m' ) AND del_flag = '0'
</select>
<!-- 查询某个人考勤月所有的考勤统计 -->
<select id="queryStatisticalByMonthAndName" resultMap="RzAttendanceStatisticalResult">
<include refid="selectRzAttendanceStatisticalVo"/>
where DATE_FORMAT( month, '%Y%m' ) = DATE_FORMAT(#{attendanceDate} , '%Y%m' ) and name = #{name} AND del_flag = '0'
</select>
</mapper>