From 9f3c939abde3cea3508beb2f6dfbf9fe2194bce4 Mon Sep 17 00:00:00 2001 From: andy <1042025947@qq.com> Date: Thu, 26 Jun 2025 10:41:21 +0800 Subject: [PATCH] =?UTF-8?q?=E8=B0=83=E6=95=B4=E8=80=83=E5=8B=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mapper/RzAttendanceDetailMapper.java | 9 +- .../impl/TSDeviceExchangeProcessor.java | 7 +- .../impl/RzOverTimeDetailServiceImpl.java | 108 ++++++++++++++---- .../evo/system/service/RzUploadService.java | 9 ++ .../service/impl/RzUploadServiceImpl.java | 5 + .../service/impl/SysStaffServiceImpl.java | 21 ++-- .../attendance/RzAttendanceDetailMapper.xml | 13 +++ 7 files changed, 137 insertions(+), 35 deletions(-) diff --git a/evo-admin/src/main/java/com/evo/attendance/mapper/RzAttendanceDetailMapper.java b/evo-admin/src/main/java/com/evo/attendance/mapper/RzAttendanceDetailMapper.java index 2cd8cbb..2f48706 100644 --- a/evo-admin/src/main/java/com/evo/attendance/mapper/RzAttendanceDetailMapper.java +++ b/evo-admin/src/main/java/com/evo/attendance/mapper/RzAttendanceDetailMapper.java @@ -1,7 +1,6 @@ package com.evo.attendance.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; -import com.evo.attendance.domain.RzAttendance; import com.evo.attendance.domain.RzAttendanceDetail; import org.apache.ibatis.annotations.Param; @@ -66,4 +65,12 @@ public interface RzAttendanceDetailMapper extends BaseMapper * @return */ Long checkOverTimeCard(@Param("userId") Long userId, @Param("date") Date date); + + /** + * 查询员工最后一次上班卡. 只要上班卡, 其他地方可不使用 + * + * @param staffId + * @return 考勤明细集合 + */ + public RzAttendanceDetail selectLastRzAttendanceDetailByBk(@Param("staffId") Long staffId, @Param("buttonType") String buttonType, @Param("startDateTime") Date startDateTime, @Param("endDateTime") Date endDateTime); } diff --git a/evo-admin/src/main/java/com/evo/attendance/processor/impl/TSDeviceExchangeProcessor.java b/evo-admin/src/main/java/com/evo/attendance/processor/impl/TSDeviceExchangeProcessor.java index 357b5fd..05a945c 100644 --- a/evo-admin/src/main/java/com/evo/attendance/processor/impl/TSDeviceExchangeProcessor.java +++ b/evo-admin/src/main/java/com/evo/attendance/processor/impl/TSDeviceExchangeProcessor.java @@ -148,12 +148,9 @@ public class TSDeviceExchangeProcessor implements PunchTheClockStrategyExchangeP Integer minHour = ruleJson.getInteger("minHour"); //根据公司规定, 如果加班卡打卡时间早于19点,则按照19点计算 Date endMealDate = DateUtils.dateTime("yyyy-MM-dd HH:mm", sdfd.format(date)+" "+endMealTime); - if(rzSpecialAttendance.getWorkStartTime().compareTo(endMealDate) > 0){ - endMealDate = rzSpecialAttendance.getWorkStartTime(); - } - Long overMinutes = DateUtils.getBetweenMinutes(endMealDate, rzSpecialAttendance.getWorkEndTime()); + Long overMinutes = DateUtils.getBetweenMinutes(rzSpecialAttendance.getWorkStartTime(), rzSpecialAttendance.getWorkEndTime()); //核查当前人员, 当天是否吃完饭 //如果吃晚饭, 扣减30分钟 - if(rzRestaurantDetailMapper.checkDinnerByStaffIdAndDateAndSign(sysStaff.getUserId(), date, "晚餐").compareTo(0l) > 0){ + if((rzSpecialAttendance.getWorkStartTime().compareTo(endMealDate) <= 0) && (rzRestaurantDetailMapper.checkDinnerByStaffIdAndDateAndSign(sysStaff.getUserId(), date, "晚餐").compareTo(0l) > 0)){ overMinutes = new BigDecimal(overMinutes).subtract(new BigDecimal(ParamUtils.getShortBreakDeductionMinutes())).longValue(); } BigDecimal workHours = new BigDecimal(0); diff --git a/evo-admin/src/main/java/com/evo/personnelMatters/service/impl/RzOverTimeDetailServiceImpl.java b/evo-admin/src/main/java/com/evo/personnelMatters/service/impl/RzOverTimeDetailServiceImpl.java index 3e92d65..a30b387 100644 --- a/evo-admin/src/main/java/com/evo/personnelMatters/service/impl/RzOverTimeDetailServiceImpl.java +++ b/evo-admin/src/main/java/com/evo/personnelMatters/service/impl/RzOverTimeDetailServiceImpl.java @@ -1,6 +1,9 @@ package com.evo.personnelMatters.service.impl; -import com.evo.attendance.domain.RzAttendanceStatistical; +import com.evo.attendance.domain.RzAttendance; +import com.evo.attendance.domain.RzAttendanceDetail; +import com.evo.attendance.mapper.RzAttendanceDetailMapper; +import com.evo.attendance.mapper.RzAttendanceMapper; import com.evo.attendance.mapper.RzAttendanceStatisticalMapper; import com.evo.common.constant.Constants; import com.evo.common.core.domain.AjaxResult; @@ -11,10 +14,15 @@ import com.evo.personnelMatters.domain.RzOverTimeDetail; import com.evo.personnelMatters.mapper.RzOverTimeDetailMapper; import com.evo.personnelMatters.mapper.RzOverTimeMapper; import com.evo.personnelMatters.service.IRzOverTimeDetailService; +import com.evo.system.domain.SysStaff; +import com.evo.system.mapper.SysStaffMapper; +import org.apache.commons.lang3.ObjectUtils; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; + import javax.annotation.Resource; import java.math.BigDecimal; +import java.util.Date; import java.util.List; /** @@ -32,6 +40,12 @@ public class RzOverTimeDetailServiceImpl implements IRzOverTimeDetailService private RzOverTimeMapper rzOverTimeMapper; @Resource private RzAttendanceStatisticalMapper rzAttendanceStatisticalMapper; //打卡统计 + @Resource + private RzAttendanceDetailMapper rzAttendanceDetailMapper; + @Resource + private RzAttendanceMapper rzAttendanceMapper; + @Resource + private SysStaffMapper sysStaffMapper; /** * 查询加班详情 * @@ -44,6 +58,52 @@ public class RzOverTimeDetailServiceImpl implements IRzOverTimeDetailService return rzOverTimeDetailMapper.selectRzOverTimeDetailById(id); } + + private void createAttendanceDetail(RzOverTime rzOverTime, RzOverTimeDetail rzOverTimeDetail){ + //加班卡 + RzAttendanceDetail jbk = rzAttendanceDetailMapper.selectLastRzAttendanceDetailByBk(rzOverTime.getUserId(), "加班卡", rzOverTimeDetail.getOverTimeStart(), null); + SysStaff sysStaff = sysStaffMapper.selectSysStaffByUserId(rzOverTime.getUserId()); + RzAttendance attendance = null; + if(ObjectUtils.isEmpty(jbk)){ + attendance = rzAttendanceMapper.queryNowDayAttendanceByStatisticalIdAndDate(sysStaff.getUserId(), rzOverTimeDetail.getOverTimeStart()); + //获取员工的工作时长 + jbk = new RzAttendanceDetail(); + //打卡明细表中插入数据 + jbk.setButtonType("加班卡"); + jbk.setName(rzOverTimeDetail.getName()); + jbk.setAttendanceId(attendance.getId()); + jbk.setDateTime(rzOverTimeDetail.getOverTimeStart()); + jbk.setDelFlag(Constants.DELETE_FLAG_0); + jbk.setStaffId(rzOverTime.getUserId()); + jbk.setEquipmentCode(sysStaff.getTimeClock()); + jbk.setCreateTime(new Date()); + jbk.setRemark("加班补卡生成"); + rzAttendanceDetailMapper.insert(jbk); + } + //下班卡 + RzAttendanceDetail xbk = rzAttendanceDetailMapper.selectLastRzAttendanceDetailByBk(rzOverTime.getUserId(), "下班卡", rzOverTimeDetail.getOverTimeStart(),rzOverTimeDetail.getOverTimeEnd()); + if(ObjectUtils.isEmpty(xbk)){ + if(ObjectUtils.isEmpty(attendance)){ + attendance = rzAttendanceMapper.queryNowDayAttendanceByStatisticalIdAndDate(sysStaff.getUserId(), rzOverTimeDetail.getOverTimeStart()); + } + //获取员工的工作时长 + jbk = new RzAttendanceDetail(); + //打卡明细表中插入数据 + jbk.setButtonType("下班卡"); + jbk.setName(rzOverTimeDetail.getName()); + jbk.setAttendanceId(attendance.getId()); + jbk.setDateTime(rzOverTimeDetail.getOverTimeEnd()); + jbk.setDelFlag(Constants.DELETE_FLAG_0); + jbk.setStaffId(rzOverTime.getUserId()); + jbk.setEquipmentCode(sysStaff.getTimeClock()); + jbk.setCreateTime(new Date()); + jbk.setRemark("加班补卡生成"); + rzAttendanceDetailMapper.insert(jbk); + } + } + + + /** * 查询加班详情列表 * @@ -86,13 +146,15 @@ public class RzOverTimeDetailServiceImpl implements IRzOverTimeDetailService if(i < 1){ return AjaxResult.error(); } - //反写考勤汇总 - RzAttendanceStatistical rzAttendanceStatistical = rzAttendanceStatisticalMapper.getRzAttendanceStatisticalByDateAndName(rzOverTime.getUserId(),rzOverTime.getOverTimeMonth()); - rzAttendanceStatistical.setWorkOvertimeNumber(rzOverTime.getOverHours()); - i = rzAttendanceStatisticalMapper.updateRzAttendanceStatistical(rzAttendanceStatistical); - if(i < 1){ - return AjaxResult.error(); - } + + createAttendanceDetail(rzOverTime, rzOverTimeDetail); +// //反写考勤汇总 +// RzAttendanceStatistical rzAttendanceStatistical = rzAttendanceStatisticalMapper.getRzAttendanceStatisticalByDateAndName(rzOverTime.getUserId(),rzOverTime.getOverTimeMonth()); +// rzAttendanceStatistical.setWorkOvertimeNumber(rzOverTime.getOverHours()); +// i = rzAttendanceStatisticalMapper.updateRzAttendanceStatistical(rzAttendanceStatistical); +// if(i < 1){ +// return AjaxResult.error(); +// } return AjaxResult.success(); } @@ -123,16 +185,20 @@ public class RzOverTimeDetailServiceImpl implements IRzOverTimeDetailService if(i < 1){ return AjaxResult.error(); } + createAttendanceDetail(rzOverTime, rzOverTimeDetail); //反写考勤汇总 - RzAttendanceStatistical rzAttendanceStatistical = rzAttendanceStatisticalMapper.getRzAttendanceStatisticalByDateAndName(rzOverTime.getUserId(),rzOverTime.getOverTimeMonth()); - rzAttendanceStatistical.setWorkOvertimeNumber(rzOverTime.getOverHours()); - i = rzAttendanceStatisticalMapper.updateRzAttendanceStatistical(rzAttendanceStatistical); - if(i < 1){ - return AjaxResult.error(); - } +// RzAttendanceStatistical rzAttendanceStatistical = rzAttendanceStatisticalMapper.getRzAttendanceStatisticalByDateAndName(rzOverTime.getUserId(),rzOverTime.getOverTimeMonth()); +// rzAttendanceStatistical.setWorkOvertimeNumber(rzOverTime.getOverHours()); +// i = rzAttendanceStatisticalMapper.updateRzAttendanceStatistical(rzAttendanceStatistical); +// if(i < 1){ +// return AjaxResult.error(); +// } return AjaxResult.success(); } + + + /** * 删除加班详情信息 * @@ -156,13 +222,13 @@ public class RzOverTimeDetailServiceImpl implements IRzOverTimeDetailService if(i < 1){ return AjaxResult.error(); } - //反写考勤汇总 - RzAttendanceStatistical rzAttendanceStatistical = rzAttendanceStatisticalMapper.getRzAttendanceStatisticalByDateAndName(rzOverTime.getUserId(),rzOverTime.getOverTimeMonth()); - rzAttendanceStatistical.setWorkOvertimeNumber(rzOverTime.getOverHours()); - i = rzAttendanceStatisticalMapper.updateRzAttendanceStatistical(rzAttendanceStatistical); - if(i < 1){ - return AjaxResult.error(); - } +// //反写考勤汇总 +// RzAttendanceStatistical rzAttendanceStatistical = rzAttendanceStatisticalMapper.getRzAttendanceStatisticalByDateAndName(rzOverTime.getUserId(),rzOverTime.getOverTimeMonth()); +// rzAttendanceStatistical.setWorkOvertimeNumber(rzOverTime.getOverHours()); +// i = rzAttendanceStatisticalMapper.updateRzAttendanceStatistical(rzAttendanceStatistical); +// if(i < 1){ +// return AjaxResult.error(); +// } return AjaxResult.success(); } } diff --git a/evo-admin/src/main/java/com/evo/system/service/RzUploadService.java b/evo-admin/src/main/java/com/evo/system/service/RzUploadService.java index 9997403..5844469 100644 --- a/evo-admin/src/main/java/com/evo/system/service/RzUploadService.java +++ b/evo-admin/src/main/java/com/evo/system/service/RzUploadService.java @@ -21,6 +21,13 @@ public interface RzUploadService */ public RzUpload selectById(Long id); + /** + * 查询文件信息 + * + * @return 结果 + */ + public RzUpload selectByBusinessId(Long businessId, String type); + /** * 新增文件信息 * @@ -43,4 +50,6 @@ public interface RzUploadService */ public List selectListByBusinessIdAndyType(List businessIds, String type); + + } diff --git a/evo-admin/src/main/java/com/evo/system/service/impl/RzUploadServiceImpl.java b/evo-admin/src/main/java/com/evo/system/service/impl/RzUploadServiceImpl.java index c492aa9..e730e0a 100644 --- a/evo-admin/src/main/java/com/evo/system/service/impl/RzUploadServiceImpl.java +++ b/evo-admin/src/main/java/com/evo/system/service/impl/RzUploadServiceImpl.java @@ -41,6 +41,11 @@ public class RzUploadServiceImpl extends ServiceImpl i return getById(id); } + @Override + public RzUpload selectByBusinessId(Long businessId, String type) { + return getBaseMapper().selectOne(new LambdaQueryWrapper().eq(RzUpload::getBusinessId, businessId).eq(RzUpload::getType,type).eq(RzUpload::getValid,"valid")); + } + /** * 新增保存上传信息 * diff --git a/evo-admin/src/main/java/com/evo/system/service/impl/SysStaffServiceImpl.java b/evo-admin/src/main/java/com/evo/system/service/impl/SysStaffServiceImpl.java index 568c373..37745c3 100644 --- a/evo-admin/src/main/java/com/evo/system/service/impl/SysStaffServiceImpl.java +++ b/evo-admin/src/main/java/com/evo/system/service/impl/SysStaffServiceImpl.java @@ -1,12 +1,10 @@ package com.evo.system.service.impl; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; -import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; -import com.evo.attendance.service.IRzAttendanceStatisticalService; import com.evo.attendance.domain.vo.RzSalaryVo; +import com.evo.attendance.service.IRzAttendanceStatisticalService; import com.evo.common.annotation.DataScope; -import com.evo.common.annotation.Excel; import com.evo.common.constant.Constants; import com.evo.common.core.domain.AjaxResult; import com.evo.common.core.domain.entity.RzUpload; @@ -15,8 +13,6 @@ import com.evo.common.core.domain.entity.SysDictData; import com.evo.common.utils.*; import com.evo.common.utils.bean.BeanUtils; import com.evo.equipment.service.IEqSnDetailService; -import com.evo.restaurant.domain.RzRestaurantStatistics; -import com.evo.restaurant.mapper.RzRestaurantStatisticsMapper; import com.evo.restaurant.service.IRzRestaurantStatisticsService; import com.evo.system.domain.SysStaff; import com.evo.system.domain.SysStaffDetail; @@ -39,7 +35,9 @@ import org.springframework.transaction.annotation.Transactional; import org.springframework.web.multipart.MultipartFile; import javax.annotation.Resource; -import java.io.*; +import java.io.File; +import java.io.IOException; +import java.io.InputStream; import java.math.BigDecimal; import java.text.SimpleDateFormat; import java.util.ArrayList; @@ -164,8 +162,8 @@ public class SysStaffServiceImpl extends ServiceImpl i private void initCheckDevice(SysStaff sysStaff){ //如果文件Id不为空, 则需要更新打卡设备信息, 完成后, 同步更新图片的业务Id数据 + RzUpload upload = null; if(ObjectUtils.isNotEmpty(sysStaff.getFileId())){ - RzUpload upload = null; try { upload = rzUploadService.selectById(sysStaff.getFileId()); upload.setBusinessId(sysStaff.getUserId()); @@ -173,7 +171,14 @@ public class SysStaffServiceImpl extends ServiceImpl i } catch (Exception e) { log.error("处理上传照片信息出现错误", e); } - List dkj_list = new ArrayList(); + + } + if(upload == null){ + upload = rzUploadService.selectByBusinessId(sysStaff.getUserId(), "avatar"); + } + //不为空, 准备下发 + if(upload != null){ + List dkj_list = new ArrayList(); dkj_list.add(com.evo.equipment.constant.Constants.EQ_DEVICE_CODE); //食堂 dkj_list.add(com.evo.equipment.constant.Constants.EQ_DEVICE_PUBLIC_CODE); //公共 dkj_list.add(sysStaff.getTimeClock()); diff --git a/evo-admin/src/main/resources/mapper/attendance/RzAttendanceDetailMapper.xml b/evo-admin/src/main/resources/mapper/attendance/RzAttendanceDetailMapper.xml index b9d8f97..a1220dc 100644 --- a/evo-admin/src/main/resources/mapper/attendance/RzAttendanceDetailMapper.xml +++ b/evo-admin/src/main/resources/mapper/attendance/RzAttendanceDetailMapper.xml @@ -97,6 +97,19 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" where del_flag = '0' and DATE_FORMAT( date_time, '%Y%m%d' ) = DATE_FORMAT(#{date} , '%Y%m%d' ) and staff_id = #{userId} and button_type = '加班卡' + + +