处理跨天加班的情况

This commit is contained in:
andy 2026-01-20 10:30:44 +08:00
parent 5eb3a19934
commit 56e6aa2bc8
3 changed files with 22 additions and 1 deletions

View File

@ -394,9 +394,14 @@ public class KQDeviceExchangeProcessor implements PunchTheClockStrategyExchangeP
} }
//查找加班详情 加班统计ID和加班开始时间 //查找加班详情 加班统计ID和加班开始时间
RzOverTimeDetail rzOverTimeDetail = rzOverTimeDetailMapper.queryRzOverTimeDetailByDateAndOverId(rzOverTime.getId(),date); RzOverTimeDetail rzOverTimeDetail = rzOverTimeDetailMapper.queryRzOverTimeDetailByDateAndOverId(rzOverTime.getId(),date);
if(ObjectUtils.isEmpty(rzOverTimeDetail)){
//特殊情况, 会存在过12点的情况, 这时候需要核查下前一天没有下班的加班数据
rzOverTimeDetail = rzOverTimeDetailMapper.queryRzOverTimeDetailByDateAndOverIdAndOverTimeEndIsNull(rzOverTime.getId(), DateUtils.addDays(date,-1));
//如果前一天也为空
if(ObjectUtils.isEmpty(rzOverTimeDetail)){ if(ObjectUtils.isEmpty(rzOverTimeDetail)){
return initMessage(1, "未找到当天的加班信息, 请补卡"); return initMessage(1, "未找到当天的加班信息, 请补卡");
} }
}
rzOverTimeDetail.setOverTimeEnd(date); rzOverTimeDetail.setOverTimeEnd(date);
//计算加班时长 分钟 //计算加班时长 分钟
KqUtils.calculateOverTimeHours(rzOverTimeDetail, sysStaff.getUserId(), sn); KqUtils.calculateOverTimeHours(rzOverTimeDetail, sysStaff.getUserId(), sn);

View File

@ -53,6 +53,11 @@ public interface RzOverTimeDetailMapper extends BaseMapper<RzOverTimeDetail>
*/ */
public RzOverTimeDetail queryRzOverTimeDetailByDateAndOverId(@Param("overId") Long overId,@Param("date") Date date); public RzOverTimeDetail queryRzOverTimeDetailByDateAndOverId(@Param("overId") Long overId,@Param("date") Date date);
/**
* 根据加班统计ID和加班开始时间查询加班情况, 并且加班的下班时间为空的
* @return
*/
public RzOverTimeDetail queryRzOverTimeDetailByDateAndOverIdAndOverTimeEndIsNull(@Param("overId") Long overId,@Param("date") Date date);
/** /**
* 查询加班详情 * 查询加班详情
* *

View File

@ -91,6 +91,17 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
del_flag = '0' and over_time_id = #{overId} and DATE_FORMAT(over_time_start, '%Y%m%d' ) = DATE_FORMAT(#{date} , '%Y%m%d' ) del_flag = '0' and over_time_id = #{overId} and DATE_FORMAT(over_time_start, '%Y%m%d' ) = DATE_FORMAT(#{date} , '%Y%m%d' )
order by over_time_start desc limit 1 order by over_time_start desc limit 1
</select> </select>
<select id="queryRzOverTimeDetailByDateAndOverIdAndOverTimeEndIsNull" resultMap="RzOverTimeDetailResult">
<include refid="selectRzOverTimeDetailVo"/>
where
del_flag = '0' and over_time_id = #{overId} and DATE_FORMAT(over_time_start, '%Y%m%d' ) = DATE_FORMAT(#{date} , '%Y%m%d' ) and over_time_end is null
order by over_time_start desc limit 1
</select>
<!-- 根据加班统计ID查询加班情况 --> <!-- 根据加班统计ID查询加班情况 -->
<select id="queryRzOverTimeDetailByOverId" resultMap="RzOverTimeDetailResult"> <select id="queryRzOverTimeDetailByOverId" resultMap="RzOverTimeDetailResult">
<include refid="selectRzOverTimeDetailVo"/> <include refid="selectRzOverTimeDetailVo"/>