新增每天考勤的时间线展示

考勤, 补卡调整
This commit is contained in:
andy 2025-07-21 08:54:51 +08:00
parent e2cf37df5d
commit 6aa772715a
8 changed files with 227 additions and 119 deletions

View File

@ -1,6 +1,8 @@
package com.evo.attendance.controller;
import com.evo.attendance.domain.RzAttendanceDetail;
import com.evo.attendance.domain.vo.RzAttendanceDetailVO;
import com.evo.attendance.service.RzAttendanceDetailService;
import com.evo.common.annotation.Log;
import com.evo.common.core.controller.BaseController;
import com.evo.common.core.domain.AjaxResult;
@ -30,7 +32,8 @@ public class RzAttendanceController extends BaseController
{
@Resource
private IRzAttendanceService rzAttendanceService;
@Resource
private RzAttendanceDetailService rzAttendanceDetailService;
/**
* 查询考勤记录列表
*/
@ -115,4 +118,11 @@ public class RzAttendanceController extends BaseController
return rzAttendanceService.importAttendance(attendanceList);
}
@GetMapping(value = "/detail/list/{id}")
public AjaxResult findDetailList(@PathVariable("id") Long id)
{
return success(rzAttendanceDetailService.selectListByAttendanceId(id));
}
}

View File

@ -0,0 +1,68 @@
package com.evo.attendance.domain.vo;
import com.evo.common.constant.Constants;
import lombok.Data;
/**
* 打卡详情时间线
*
* @ClassName:RzAttendanceDetailTimeLineVO
* @date: 2025年07月17日 10:35
* @author: andy.shi
* @contact: 17330188597
* @remark: 开发人员联系方式 1042025947@qq.com/微信同步
*/
@Data
public class RzAttendanceDetailTimeLineVO {
String content;
String timestamp;
String type;
String icon;
String size = "large";
public RzAttendanceDetailTimeLineVO(String content, String timestamp, String delFlag) {
this.content = content;
this.timestamp = timestamp;
TimeLineEnum timeLine = TimeLineEnum.get(content, delFlag);
this.type = timeLine.type;
this.icon = timeLine.icon;
}
enum TimeLineEnum{
UP("上班", "primary","el-icon-caret-top"),
OVERTIME("加班", "success","el-icon-plus"),
DOWN("下班", "warning","el-icon-caret-bottom"),
REVOKE("撤销", "danger","el-icon-close"),
DEFAULT("", "",""),
;
String typeWork;
String type;
String icon;
TimeLineEnum(String typeWork, String type, String icon) {
this.typeWork = typeWork;
this.type = type;
this.icon = icon;
}
public static TimeLineEnum get(String typeWork, String delFlag){
if(Constants.DELETE_FLAG_1.equals(delFlag)){
return REVOKE;
}
for (TimeLineEnum timeLine : TimeLineEnum.values()){
if(typeWork.contains(timeLine.typeWork)){
return timeLine;
}
}
return DEFAULT;
}
}
}

View File

@ -3,9 +3,11 @@ package com.evo.attendance.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.evo.attendance.domain.RzAttendance;
import com.evo.attendance.domain.RzAttendanceDetail;
import com.evo.attendance.domain.vo.RzAttendanceDetailTimeLineVO;
import org.apache.ibatis.annotations.Param;
import java.util.Date;
import java.util.List;
/**
* 接口
@ -20,9 +22,13 @@ public interface RzAttendanceDetailService extends IService<RzAttendanceDetail>
public RzAttendanceDetail addDetail(RzAttendance attendance, String rules, String sn, Date date, String remark);
public RzAttendanceDetail addOrUpdateDetail(String source, RzAttendance attendance, String rules, String sn, Date date, String remark);
public RzAttendanceDetail selectLastRzAttendanceDetail(Long staffId);
public RzAttendanceDetail selectRzAttendanceDetailByStaffId(Long staffId);
public RzAttendanceDetail selectLastWorkCardByStaffId(@Param("staffId") Long staffId);
public List<RzAttendanceDetailTimeLineVO> selectListByAttendanceId(Long attId);
}

View File

@ -4,13 +4,17 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.evo.attendance.domain.RzAttendance;
import com.evo.attendance.domain.RzAttendanceDetail;
import com.evo.attendance.domain.vo.RzAttendanceDetailTimeLineVO;
import com.evo.attendance.mapper.RzAttendanceDetailMapper;
import com.evo.attendance.service.RzAttendanceDetailService;
import com.evo.common.constant.Constants;
import com.evo.common.utils.DateUtils;
import org.apache.commons.lang3.ObjectUtils;
import org.springframework.stereotype.Service;
import java.util.Date;
import java.util.List;
import java.util.stream.Collectors;
/**
*
@ -26,8 +30,27 @@ public class RzAttendanceDetailServiceImpl extends ServiceImpl<RzAttendanceDetai
@Override
public RzAttendanceDetail addDetail(RzAttendance attendance, String rules, String sn, Date date, String remark) {
//获取员工的工作时长
RzAttendanceDetail attendanceDetail = getOne(new LambdaQueryWrapper<RzAttendanceDetail>().eq(RzAttendanceDetail::getButtonType, rules).eq(RzAttendanceDetail::getDelFlag, Constants.DELETE_FLAG_0).eq(RzAttendanceDetail::getStaffId, attendance.getStaffId()).apply( " DATE_FORMAT(date_time,'%Y%m%d') = DATE_FORMAT({0},'%Y%m%d')", date));
return addOrUpdateDetail("clock_in", attendance,rules,sn,date,remark);
}
@Override
public RzAttendanceDetail addOrUpdateDetail(String source, RzAttendance attendance, String rules, String sn, Date date, String remark) {
RzAttendanceDetail attendanceDetail = null;
//clock_in为考勤机打卡, 不需要查询
if(!"clock_in".equals(source)){
//获取员工的工作时长
attendanceDetail = getOne(new LambdaQueryWrapper<RzAttendanceDetail>()
.eq(RzAttendanceDetail::getButtonType, rules)
.eq(RzAttendanceDetail::getDelFlag, Constants.DELETE_FLAG_0)
.eq(RzAttendanceDetail::getStaffId, attendance.getStaffId())
.eq(RzAttendanceDetail::getAttendanceId, attendance.getId())
//.apply( " DATE_FORMAT(date_time,'%Y%m%d') = DATE_FORMAT({0},'%Y%m%d')", date)
//以下为特殊规则, 只针对下班卡起作用
.orderByAsc("下班卡".equals(rules), RzAttendanceDetail::getDateTime)
.last("下班卡".equals(rules)," limit 1 ")
);
}
if(ObjectUtils.isEmpty(attendanceDetail)){
attendanceDetail = new RzAttendanceDetail();
attendanceDetail.setStaffId(attendance.getStaffId());
@ -64,4 +87,11 @@ public class RzAttendanceDetailServiceImpl extends ServiceImpl<RzAttendanceDetai
public RzAttendanceDetail selectLastWorkCardByStaffId(Long staffId) {
return getBaseMapper().selectLastWorkCardByStaffId(staffId);
}
@Override
public List<RzAttendanceDetailTimeLineVO> selectListByAttendanceId(Long attId) {
return list(new LambdaQueryWrapper<RzAttendanceDetail>().eq(RzAttendanceDetail::getAttendanceId, attId)).stream().map(data ->{
return new RzAttendanceDetailTimeLineVO(data.getButtonType(), DateUtils.parseDateToStr("yyyy-MM-dd HH:mm:ss",data.getDateTime()), data.getDelFlag());
}).collect(Collectors.toList());
}
}

View File

@ -97,13 +97,14 @@ public class RzAttendanceServiceImpl extends ServiceImpl<RzAttendanceMapper, RzA
if(rzAttendance.getWorkEndTime() == null){
//跟新成功, 插入上班卡信息
if(getBaseMapper().updateRzAttendance(rzAttendance) > 0){
rzAttendanceDetailService.addDetail(rzAttendance, rzAttendance.getRules(), sysUser.getTimeClock(), rzAttendance.getWorkStartTime(),rzAttendance.getRemark());
rzAttendanceDetailService.addOrUpdateDetail("fill_in", rzAttendance, rzAttendance.getRules(), sysUser.getTimeClock(), rzAttendance.getWorkStartTime(),rzAttendance.getRemark());
}
return 1;
}else if(rzAttendance.getWorkStartTime() != null && rzAttendance.getWorkEndTime() != null){
rzAttendanceDetailService.addOrUpdateDetail("fill_in",rzAttendance, rzAttendance.getRules(), sysUser.getTimeClock(), rzAttendance.getWorkStartTime(),rzAttendance.getRemark());
if(KqUtils.workOffDutyCard(rzAttendance.getWorkEndTime(), rzAttendance.getRules(), rzAttendance)){
//此处特殊, 使用rules 记录下班卡规则, 但是不持久化
rzAttendanceDetailService.addDetail(rzAttendance, "下班卡", sysUser.getTimeClock(), rzAttendance.getWorkEndTime(),rzAttendance.getRemark());
rzAttendanceDetailService.addOrUpdateDetail("fill_in",rzAttendance, "下班卡", sysUser.getTimeClock(), rzAttendance.getWorkEndTime(),rzAttendance.getRemark());
}
return 1;
}

View File

@ -5,6 +5,7 @@ import java.util.List;
import com.evo.attendance.domain.RzSpecialOverTime;
import com.evo.attendance.mapper.RzSpecialOverTimeMapper;
import com.evo.attendance.service.IRzSpecialOverTimeService;
import com.evo.common.annotation.DataScope;
import com.evo.common.utils.DateUtils;
import com.evo.common.utils.SecurityUtils;
import com.evo.system.mapper.SysDeptMapper;
@ -44,6 +45,7 @@ public class RzSpecialOverTimeServiceImpl implements IRzSpecialOverTimeService
* @return 特殊加班管理
*/
@Override
@DataScope(deptAlias = "r")
public List<RzSpecialOverTime> selectRzSpecialOverTimeList(RzSpecialOverTime rzSpecialOverTime)
{
List<RzSpecialOverTime> reslut = rzSpecialOverTimeMapper.selectRzSpecialOverTimeList(rzSpecialOverTime);

View File

@ -1,25 +1,17 @@
package com.evo.common.controller;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.evo.attendance.domain.RzAttendance;
import com.evo.attendance.domain.RzAttendanceDetail;
import com.evo.attendance.processor.KqUtils;
import com.evo.attendance.service.IRzAttendanceService;
import com.evo.attendance.service.IRzAttendanceStatisticalService;
import com.evo.attendance.service.RzAttendanceDetailService;
import com.evo.common.constant.Constants;
import com.evo.common.core.domain.AjaxResult;
import com.evo.common.utils.Collections;
import com.evo.common.utils.StringUtils;
import com.evo.personnelMatters.domain.RzOverTime;
import com.evo.personnelMatters.domain.RzOverTimeDetail;
import com.evo.personnelMatters.mapper.RzOverTimeDetailMapper;
import com.evo.personnelMatters.mapper.RzOverTimeMapper;
import com.evo.restaurant.service.IRzRestaurantStatisticsService;
import com.evo.system.domain.SysStaff;
import com.evo.system.service.ISysStaffService;
import org.apache.commons.lang3.ObjectUtils;
import org.apache.commons.lang3.time.DateUtils;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
@ -29,12 +21,10 @@ import javax.annotation.Resource;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.math.BigDecimal;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.concurrent.atomic.AtomicReference;
import java.util.stream.Collectors;
@ -108,62 +98,62 @@ public class TestController {
@PostMapping("/qxdk")
public AjaxResult qxdk() throws ParseException {
Map<Long, String> snMap = sysStaffService.list(new LambdaQueryWrapper<SysStaff>().eq(SysStaff::getDelFlag, Constants.DELETE_FLAG_0)).stream().filter(data->{ return (data.getUserId() != null && StringUtils.isNotEmpty(data.getTimeClock()));
}).collect(Collectors.toMap(SysStaff::getUserId, SysStaff::getTimeClock));
Date d = new SimpleDateFormat("yyyy-MM-dd").parse("2025-07-08");
Map<String, Integer> timeMap = Collections.asMap("上班卡倒班12时制",12,"上班卡(单班制)",9,"上班卡倒班8时制",9);
List<RzAttendance> list = rzAttendanceService.list(new LambdaQueryWrapper<RzAttendance>()
.eq(RzAttendance::getDelFlag, Constants.DELETE_FLAG_0)
.apply(" date_format(`attendance_date`,'%Y%m%d')=date_format({0},'%Y%m%d') ",d)
.apply(" work_start_time is not null ")
).stream().map(data ->{
data.setWorkEndTime(DateUtils.addHours(data.getWorkStartTime(), timeMap.get(data.getRules())));
return data;
}).collect(Collectors.toList());
if(Collections.isNotEmpty(list)){
//更新所有的卡时间
rzAttendanceService.updateBatchById(list);
for (RzAttendance rzAttendance : list){
List<RzAttendanceDetail> sbList = rzAttendanceDetailService.list(new LambdaQueryWrapper<RzAttendanceDetail>().eq(RzAttendanceDetail::getDelFlag, Constants.DELETE_FLAG_0).eq(RzAttendanceDetail::getAttendanceId, rzAttendance.getId()).like(RzAttendanceDetail::getButtonType,"%上班%"));
if(Collections.isEmpty(sbList)){
rzAttendanceDetailService.addDetail(rzAttendance, rzAttendance.getRules(), snMap.get(rzAttendance.getStaffId()), rzAttendance.getWorkStartTime(), "系统清洗");
}else if(sbList.size() > 1){
sbList.remove(0);
rzAttendanceDetailService.removeByIds(sbList);
}
List<RzAttendanceDetail> xbList = rzAttendanceDetailService.list(new LambdaQueryWrapper<RzAttendanceDetail>().eq(RzAttendanceDetail::getDelFlag, Constants.DELETE_FLAG_0).eq(RzAttendanceDetail::getAttendanceId, rzAttendance.getId()).like(RzAttendanceDetail::getButtonType,"%下班%"));
if(ObjectUtils.isEmpty(xbList)){
rzAttendanceDetailService.addDetail(rzAttendance, "下班卡", snMap.get(rzAttendance.getStaffId()), rzAttendance.getWorkEndTime(), "系统清洗");
}else if(xbList.size() > 1){
xbList.remove(0);
rzAttendanceDetailService.removeByIds(xbList);
}
}
}
list = rzAttendanceService.list(new LambdaQueryWrapper<RzAttendance>()
.eq(RzAttendance::getDelFlag, Constants.DELETE_FLAG_0)
.apply(" date_format(`attendance_date`,'%Y%m%d')=date_format({0},'%Y%m%d') ",new SimpleDateFormat("yyyy-MM-dd").parse("2025-07-09"))
.apply(" work_start_time is not null ")
);
if(Collections.isNotEmpty(list)){
//更新所有的卡时间
for (RzAttendance rzAttendance : list){
List<RzAttendanceDetail> sbList = rzAttendanceDetailService.list(new LambdaQueryWrapper<RzAttendanceDetail>().eq(RzAttendanceDetail::getDelFlag, Constants.DELETE_FLAG_0).eq(RzAttendanceDetail::getAttendanceId, rzAttendance.getId()).like(RzAttendanceDetail::getButtonType,"%上班%"));
if(Collections.isEmpty(sbList)){
rzAttendanceDetailService.addDetail(rzAttendance, rzAttendance.getRules(), snMap.get(rzAttendance.getStaffId()), rzAttendance.getWorkStartTime(), "系统清洗");
}else if(sbList.size() > 1){
sbList.remove(0);
rzAttendanceDetailService.removeByIds(sbList);
}
}
}
// Map<Long, String> snMap = sysStaffService.list(new LambdaQueryWrapper<SysStaff>().eq(SysStaff::getDelFlag, Constants.DELETE_FLAG_0)).stream().filter(data->{ return (data.getUserId() != null && StringUtils.isNotEmpty(data.getTimeClock()));
// }).collect(Collectors.toMap(SysStaff::getUserId, SysStaff::getTimeClock));
//
//
// Date d = new SimpleDateFormat("yyyy-MM-dd").parse("2025-07-08");
// Map<String, Integer> timeMap = Collections.asMap("上班卡倒班12时制",12,"上班卡(单班制)",9,"上班卡倒班8时制",9);
// List<RzAttendance> list = rzAttendanceService.list(new LambdaQueryWrapper<RzAttendance>()
// .eq(RzAttendance::getDelFlag, Constants.DELETE_FLAG_0)
// .apply(" date_format(`attendance_date`,'%Y%m%d')=date_format({0},'%Y%m%d') ",d)
// .apply(" work_start_time is not null ")
// ).stream().map(data ->{
// data.setWorkEndTime(DateUtils.addHours(data.getWorkStartTime(), timeMap.get(data.getRules())));
// return data;
// }).collect(Collectors.toList());
//
// if(Collections.isNotEmpty(list)){
// //更新所有的卡时间
// rzAttendanceService.updateBatchById(list);
// for (RzAttendance rzAttendance : list){
// List<RzAttendanceDetail> sbList = rzAttendanceDetailService.list(new LambdaQueryWrapper<RzAttendanceDetail>().eq(RzAttendanceDetail::getDelFlag, Constants.DELETE_FLAG_0).eq(RzAttendanceDetail::getAttendanceId, rzAttendance.getId()).like(RzAttendanceDetail::getButtonType,"%上班%"));
// if(Collections.isEmpty(sbList)){
// rzAttendanceDetailService.addOrUpdateDetail(rzAttendance, rzAttendance.getRules(), snMap.get(rzAttendance.getStaffId()), rzAttendance.getWorkStartTime(), "系统清洗");
// }else if(sbList.size() > 1){
// sbList.remove(0);
// rzAttendanceDetailService.removeByIds(sbList);
// }
// List<RzAttendanceDetail> xbList = rzAttendanceDetailService.list(new LambdaQueryWrapper<RzAttendanceDetail>().eq(RzAttendanceDetail::getDelFlag, Constants.DELETE_FLAG_0).eq(RzAttendanceDetail::getAttendanceId, rzAttendance.getId()).like(RzAttendanceDetail::getButtonType,"%下班%"));
// if(ObjectUtils.isEmpty(xbList)){
// rzAttendanceDetailService.addOrUpdateDetail(rzAttendance, "下班卡", snMap.get(rzAttendance.getStaffId()), rzAttendance.getWorkEndTime(), "系统清洗");
// }else if(xbList.size() > 1){
// xbList.remove(0);
// rzAttendanceDetailService.removeByIds(xbList);
// }
// }
// }
//
//
//
// list = rzAttendanceService.list(new LambdaQueryWrapper<RzAttendance>()
// .eq(RzAttendance::getDelFlag, Constants.DELETE_FLAG_0)
// .apply(" date_format(`attendance_date`,'%Y%m%d')=date_format({0},'%Y%m%d') ",new SimpleDateFormat("yyyy-MM-dd").parse("2025-07-09"))
// .apply(" work_start_time is not null ")
// );
//
// if(Collections.isNotEmpty(list)){
// //更新所有的卡时间
// for (RzAttendance rzAttendance : list){
// List<RzAttendanceDetail> sbList = rzAttendanceDetailService.list(new LambdaQueryWrapper<RzAttendanceDetail>().eq(RzAttendanceDetail::getDelFlag, Constants.DELETE_FLAG_0).eq(RzAttendanceDetail::getAttendanceId, rzAttendance.getId()).like(RzAttendanceDetail::getButtonType,"%上班%"));
// if(Collections.isEmpty(sbList)){
// rzAttendanceDetailService.addOrUpdateDetail(rzAttendance, rzAttendance.getRules(), snMap.get(rzAttendance.getStaffId()), rzAttendance.getWorkStartTime(), "系统清洗");
// }else if(sbList.size() > 1){
// sbList.remove(0);
// rzAttendanceDetailService.removeByIds(sbList);
// }
// }
// }
return AjaxResult.success();
}
@ -201,53 +191,53 @@ public class TestController {
@PostMapping("/jb")
public AjaxResult jb() throws Exception{
BufferedReader reader = new BufferedReader(new FileReader(new File("D:\\andy\\文档\\考勤\\7月8号加班数据清洗.txt")));
String line = reader.readLine();
while (line != null) {
String[] info = line.split("-");
RzAttendanceDetail detail = rzAttendanceDetailService.getOne(new LambdaQueryWrapper<RzAttendanceDetail>()
.eq(RzAttendanceDetail::getDelFlag, Constants.DELETE_FLAG_0)
.eq(RzAttendanceDetail::getName, info[0])
.eq(RzAttendanceDetail::getButtonType,"下班卡")
.apply(" DATE_FORMAT(date_time,'%Y%m%d') = DATE_FORMAT({0},'%Y%m%d') ", "2025-07-08"));
RzAttendance attendance= rzAttendanceService.getOne(new LambdaQueryWrapper<RzAttendance>()
.eq(RzAttendance::getDelFlag, Constants.DELETE_FLAG_0)
.eq(RzAttendance::getName, info[0])
.eq(RzAttendance::getAttendanceDate, "2025-07-08")
);
System.out.println(info[0]);
SysStaff sysStaff = sysStaffService.getById(detail.getStaffId());
RzOverTime rzOverTime = rzOverTimeMapper.selectRzOverTimeByNameAndMonth(sysStaff.getUserId(),detail.getDateTime());
if(rzOverTime == null){
rzOverTime = new RzOverTime();
rzOverTime.setUserId(sysStaff.getUserId());
rzOverTime.setOverHours(new BigDecimal("0.0"));
rzOverTime.setDeptId(sysStaff.getDeptId());
rzOverTime.setName(sysStaff.getName());
rzOverTime.setOverTimeMonth(detail.getDateTime());
rzOverTimeMapper.insert(rzOverTime);
}
detail = rzAttendanceDetailService.addDetail(attendance, "加班卡", detail.getEquipmentCode(), com.evo.common.utils.DateUtils.addSeconds(detail.getDateTime(), 10), "数据清洗");
RzOverTimeDetail rzOverTimeDetail = new RzOverTimeDetail();
rzOverTimeDetail.setOverTimeId(rzOverTime.getId());
rzOverTimeDetail.setOverTimeStart(detail.getDateTime());
rzOverTimeDetail.setName(sysStaff.getName());
rzOverTimeDetail.setDelFlag(Constants.DELETE_FLAG_0);
rzOverTimeDetail.setCreateBy("admin");
rzOverTimeDetail.setCreateTime(com.evo.common.utils.DateUtils.getNowDate());
detail = rzAttendanceDetailService.addDetail(attendance, "下班卡", detail.getEquipmentCode(), com.evo.common.utils.DateUtils.addMinutes(detail.getDateTime(), new BigDecimal(info[1]).multiply(new BigDecimal(60)).add(new BigDecimal(30)).intValue()), "数据清洗");
rzOverTimeDetail.setOverTimeEnd(detail.getDateTime());
rzOverTimeDetailMapper.insert(rzOverTimeDetail);
KqUtils.calculateOverTimeHours(rzOverTimeDetail, sysStaff.getUserId(), sysStaff.getTimeClock());
rzOverTimeDetailMapper.updateRzOverTimeDetail(rzOverTimeDetail);
//加班修改统计
rzOverTime.setOverHours(rzOverTime.getOverHours().add(rzOverTimeDetail.getOverTimeHours()));
rzOverTimeMapper.updateRzOverTime(rzOverTime);
line = reader.readLine();
}
// BufferedReader reader = new BufferedReader(new FileReader(new File("D:\\andy\\文档\\考勤\\7月8号加班数据清洗.txt")));
// String line = reader.readLine();
// while (line != null) {
// String[] info = line.split("-");
// RzAttendanceDetail detail = rzAttendanceDetailService.getOne(new LambdaQueryWrapper<RzAttendanceDetail>()
// .eq(RzAttendanceDetail::getDelFlag, Constants.DELETE_FLAG_0)
// .eq(RzAttendanceDetail::getName, info[0])
// .eq(RzAttendanceDetail::getButtonType,"下班卡")
// .apply(" DATE_FORMAT(date_time,'%Y%m%d') = DATE_FORMAT({0},'%Y%m%d') ", "2025-07-08"));
//
// RzAttendance attendance= rzAttendanceService.getOne(new LambdaQueryWrapper<RzAttendance>()
// .eq(RzAttendance::getDelFlag, Constants.DELETE_FLAG_0)
// .eq(RzAttendance::getName, info[0])
// .eq(RzAttendance::getAttendanceDate, "2025-07-08")
// );
// System.out.println(info[0]);
// SysStaff sysStaff = sysStaffService.getById(detail.getStaffId());
// RzOverTime rzOverTime = rzOverTimeMapper.selectRzOverTimeByNameAndMonth(sysStaff.getUserId(),detail.getDateTime());
// if(rzOverTime == null){
// rzOverTime = new RzOverTime();
// rzOverTime.setUserId(sysStaff.getUserId());
// rzOverTime.setOverHours(new BigDecimal("0.0"));
// rzOverTime.setDeptId(sysStaff.getDeptId());
// rzOverTime.setName(sysStaff.getName());
// rzOverTime.setOverTimeMonth(detail.getDateTime());
// rzOverTimeMapper.insert(rzOverTime);
// }
//
// detail = rzAttendanceDetailService.addOrUpdateDetail(attendance, "加班卡", detail.getEquipmentCode(), com.evo.common.utils.DateUtils.addSeconds(detail.getDateTime(), 10), "数据清洗");
// RzOverTimeDetail rzOverTimeDetail = new RzOverTimeDetail();
// rzOverTimeDetail.setOverTimeId(rzOverTime.getId());
// rzOverTimeDetail.setOverTimeStart(detail.getDateTime());
// rzOverTimeDetail.setName(sysStaff.getName());
// rzOverTimeDetail.setDelFlag(Constants.DELETE_FLAG_0);
// rzOverTimeDetail.setCreateBy("admin");
// rzOverTimeDetail.setCreateTime(com.evo.common.utils.DateUtils.getNowDate());
//
// detail = rzAttendanceDetailService.addOrUpdateDetail(attendance, "下班卡", detail.getEquipmentCode(), com.evo.common.utils.DateUtils.addMinutes(detail.getDateTime(), new BigDecimal(info[1]).multiply(new BigDecimal(60)).add(new BigDecimal(30)).intValue()), "数据清洗");
// rzOverTimeDetail.setOverTimeEnd(detail.getDateTime());
// rzOverTimeDetailMapper.insert(rzOverTimeDetail);
// KqUtils.calculateOverTimeHours(rzOverTimeDetail, sysStaff.getUserId(), sysStaff.getTimeClock());
// rzOverTimeDetailMapper.updateRzOverTimeDetail(rzOverTimeDetail);
// //加班修改统计
// rzOverTime.setOverHours(rzOverTime.getOverHours().add(rzOverTimeDetail.getOverTimeHours()));
// rzOverTimeMapper.updateRzOverTime(rzOverTime);
// line = reader.readLine();
// }

View File

@ -19,7 +19,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
</resultMap>
<sql id="selectRzSpecialOverTimeVo">
select id, user_id, dept_id, name, over_date, sick_hours, del_flag, create_by, create_time, update_by, update_time from rz_special_over_time
select id, user_id, dept_id, name, over_date, sick_hours, del_flag, create_by, create_time, update_by, update_time from rz_special_over_time r
</sql>
<select id="selectRzSpecialOverTimeList" parameterType="RzSpecialOverTime" resultMap="RzSpecialOverTimeResult">
@ -30,6 +30,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if test="deptId != null "> and dept_id = #{deptId}</if>
<if test="name != null and name != ''"> and name like concat('%', #{name}, '%')</if>
<if test="overDate != null "> and date_format(over_date,'%y%m') = date_format(#{overDate},'%y%m')</if>
${params.dataScope}
</where>
</select>