新增每天考勤的时间线展示
考勤, 补卡调整
This commit is contained in:
parent
e2cf37df5d
commit
6aa772715a
@ -1,6 +1,8 @@
|
|||||||
package com.evo.attendance.controller;
|
package com.evo.attendance.controller;
|
||||||
|
|
||||||
|
import com.evo.attendance.domain.RzAttendanceDetail;
|
||||||
import com.evo.attendance.domain.vo.RzAttendanceDetailVO;
|
import com.evo.attendance.domain.vo.RzAttendanceDetailVO;
|
||||||
|
import com.evo.attendance.service.RzAttendanceDetailService;
|
||||||
import com.evo.common.annotation.Log;
|
import com.evo.common.annotation.Log;
|
||||||
import com.evo.common.core.controller.BaseController;
|
import com.evo.common.core.controller.BaseController;
|
||||||
import com.evo.common.core.domain.AjaxResult;
|
import com.evo.common.core.domain.AjaxResult;
|
||||||
@ -30,7 +32,8 @@ public class RzAttendanceController extends BaseController
|
|||||||
{
|
{
|
||||||
@Resource
|
@Resource
|
||||||
private IRzAttendanceService rzAttendanceService;
|
private IRzAttendanceService rzAttendanceService;
|
||||||
|
@Resource
|
||||||
|
private RzAttendanceDetailService rzAttendanceDetailService;
|
||||||
/**
|
/**
|
||||||
* 查询考勤记录列表
|
* 查询考勤记录列表
|
||||||
*/
|
*/
|
||||||
@ -115,4 +118,11 @@ public class RzAttendanceController extends BaseController
|
|||||||
|
|
||||||
return rzAttendanceService.importAttendance(attendanceList);
|
return rzAttendanceService.importAttendance(attendanceList);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@GetMapping(value = "/detail/list/{id}")
|
||||||
|
public AjaxResult findDetailList(@PathVariable("id") Long id)
|
||||||
|
{
|
||||||
|
return success(rzAttendanceDetailService.selectListByAttendanceId(id));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -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;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -3,9 +3,11 @@ package com.evo.attendance.service;
|
|||||||
import com.baomidou.mybatisplus.extension.service.IService;
|
import com.baomidou.mybatisplus.extension.service.IService;
|
||||||
import com.evo.attendance.domain.RzAttendance;
|
import com.evo.attendance.domain.RzAttendance;
|
||||||
import com.evo.attendance.domain.RzAttendanceDetail;
|
import com.evo.attendance.domain.RzAttendanceDetail;
|
||||||
|
import com.evo.attendance.domain.vo.RzAttendanceDetailTimeLineVO;
|
||||||
import org.apache.ibatis.annotations.Param;
|
import org.apache.ibatis.annotations.Param;
|
||||||
|
|
||||||
import java.util.Date;
|
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 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 selectLastRzAttendanceDetail(Long staffId);
|
||||||
|
|
||||||
public RzAttendanceDetail selectRzAttendanceDetailByStaffId(Long staffId);
|
public RzAttendanceDetail selectRzAttendanceDetailByStaffId(Long staffId);
|
||||||
|
|
||||||
public RzAttendanceDetail selectLastWorkCardByStaffId(@Param("staffId") Long staffId);
|
public RzAttendanceDetail selectLastWorkCardByStaffId(@Param("staffId") Long staffId);
|
||||||
|
|
||||||
|
public List<RzAttendanceDetailTimeLineVO> selectListByAttendanceId(Long attId);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -4,13 +4,17 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
|||||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||||
import com.evo.attendance.domain.RzAttendance;
|
import com.evo.attendance.domain.RzAttendance;
|
||||||
import com.evo.attendance.domain.RzAttendanceDetail;
|
import com.evo.attendance.domain.RzAttendanceDetail;
|
||||||
|
import com.evo.attendance.domain.vo.RzAttendanceDetailTimeLineVO;
|
||||||
import com.evo.attendance.mapper.RzAttendanceDetailMapper;
|
import com.evo.attendance.mapper.RzAttendanceDetailMapper;
|
||||||
import com.evo.attendance.service.RzAttendanceDetailService;
|
import com.evo.attendance.service.RzAttendanceDetailService;
|
||||||
import com.evo.common.constant.Constants;
|
import com.evo.common.constant.Constants;
|
||||||
|
import com.evo.common.utils.DateUtils;
|
||||||
import org.apache.commons.lang3.ObjectUtils;
|
import org.apache.commons.lang3.ObjectUtils;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 类
|
* 类
|
||||||
@ -26,8 +30,27 @@ public class RzAttendanceDetailServiceImpl extends ServiceImpl<RzAttendanceDetai
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public RzAttendanceDetail addDetail(RzAttendance attendance, String rules, String sn, Date date, String remark) {
|
public RzAttendanceDetail addDetail(RzAttendance attendance, String rules, String sn, Date date, String remark) {
|
||||||
//获取员工的工作时长
|
return addOrUpdateDetail("clock_in", attendance,rules,sn,date,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));
|
}
|
||||||
|
|
||||||
|
@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)){
|
if(ObjectUtils.isEmpty(attendanceDetail)){
|
||||||
attendanceDetail = new RzAttendanceDetail();
|
attendanceDetail = new RzAttendanceDetail();
|
||||||
attendanceDetail.setStaffId(attendance.getStaffId());
|
attendanceDetail.setStaffId(attendance.getStaffId());
|
||||||
@ -64,4 +87,11 @@ public class RzAttendanceDetailServiceImpl extends ServiceImpl<RzAttendanceDetai
|
|||||||
public RzAttendanceDetail selectLastWorkCardByStaffId(Long staffId) {
|
public RzAttendanceDetail selectLastWorkCardByStaffId(Long staffId) {
|
||||||
return getBaseMapper().selectLastWorkCardByStaffId(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());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -97,13 +97,14 @@ public class RzAttendanceServiceImpl extends ServiceImpl<RzAttendanceMapper, RzA
|
|||||||
if(rzAttendance.getWorkEndTime() == null){
|
if(rzAttendance.getWorkEndTime() == null){
|
||||||
//跟新成功, 插入上班卡信息
|
//跟新成功, 插入上班卡信息
|
||||||
if(getBaseMapper().updateRzAttendance(rzAttendance) > 0){
|
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;
|
return 1;
|
||||||
}else if(rzAttendance.getWorkStartTime() != null && rzAttendance.getWorkEndTime() != null){
|
}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)){
|
if(KqUtils.workOffDutyCard(rzAttendance.getWorkEndTime(), rzAttendance.getRules(), rzAttendance)){
|
||||||
//此处特殊, 使用rules 记录下班卡规则, 但是不持久化
|
//此处特殊, 使用rules 记录下班卡规则, 但是不持久化
|
||||||
rzAttendanceDetailService.addDetail(rzAttendance, "下班卡", sysUser.getTimeClock(), rzAttendance.getWorkEndTime(),rzAttendance.getRemark());
|
rzAttendanceDetailService.addOrUpdateDetail("fill_in",rzAttendance, "下班卡", sysUser.getTimeClock(), rzAttendance.getWorkEndTime(),rzAttendance.getRemark());
|
||||||
}
|
}
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -5,6 +5,7 @@ import java.util.List;
|
|||||||
import com.evo.attendance.domain.RzSpecialOverTime;
|
import com.evo.attendance.domain.RzSpecialOverTime;
|
||||||
import com.evo.attendance.mapper.RzSpecialOverTimeMapper;
|
import com.evo.attendance.mapper.RzSpecialOverTimeMapper;
|
||||||
import com.evo.attendance.service.IRzSpecialOverTimeService;
|
import com.evo.attendance.service.IRzSpecialOverTimeService;
|
||||||
|
import com.evo.common.annotation.DataScope;
|
||||||
import com.evo.common.utils.DateUtils;
|
import com.evo.common.utils.DateUtils;
|
||||||
import com.evo.common.utils.SecurityUtils;
|
import com.evo.common.utils.SecurityUtils;
|
||||||
import com.evo.system.mapper.SysDeptMapper;
|
import com.evo.system.mapper.SysDeptMapper;
|
||||||
@ -44,6 +45,7 @@ public class RzSpecialOverTimeServiceImpl implements IRzSpecialOverTimeService
|
|||||||
* @return 特殊加班管理
|
* @return 特殊加班管理
|
||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
|
@DataScope(deptAlias = "r")
|
||||||
public List<RzSpecialOverTime> selectRzSpecialOverTimeList(RzSpecialOverTime rzSpecialOverTime)
|
public List<RzSpecialOverTime> selectRzSpecialOverTimeList(RzSpecialOverTime rzSpecialOverTime)
|
||||||
{
|
{
|
||||||
List<RzSpecialOverTime> reslut = rzSpecialOverTimeMapper.selectRzSpecialOverTimeList(rzSpecialOverTime);
|
List<RzSpecialOverTime> reslut = rzSpecialOverTimeMapper.selectRzSpecialOverTimeList(rzSpecialOverTime);
|
||||||
|
|||||||
@ -1,25 +1,17 @@
|
|||||||
package com.evo.common.controller;
|
package com.evo.common.controller;
|
||||||
|
|
||||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
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.IRzAttendanceService;
|
||||||
import com.evo.attendance.service.IRzAttendanceStatisticalService;
|
import com.evo.attendance.service.IRzAttendanceStatisticalService;
|
||||||
import com.evo.attendance.service.RzAttendanceDetailService;
|
import com.evo.attendance.service.RzAttendanceDetailService;
|
||||||
import com.evo.common.constant.Constants;
|
import com.evo.common.constant.Constants;
|
||||||
import com.evo.common.core.domain.AjaxResult;
|
import com.evo.common.core.domain.AjaxResult;
|
||||||
import com.evo.common.utils.Collections;
|
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.RzOverTimeDetailMapper;
|
||||||
import com.evo.personnelMatters.mapper.RzOverTimeMapper;
|
import com.evo.personnelMatters.mapper.RzOverTimeMapper;
|
||||||
import com.evo.restaurant.service.IRzRestaurantStatisticsService;
|
import com.evo.restaurant.service.IRzRestaurantStatisticsService;
|
||||||
import com.evo.system.domain.SysStaff;
|
import com.evo.system.domain.SysStaff;
|
||||||
import com.evo.system.service.ISysStaffService;
|
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.GetMapping;
|
||||||
import org.springframework.web.bind.annotation.PostMapping;
|
import org.springframework.web.bind.annotation.PostMapping;
|
||||||
import org.springframework.web.bind.annotation.RequestMapping;
|
import org.springframework.web.bind.annotation.RequestMapping;
|
||||||
@ -29,12 +21,10 @@ import javax.annotation.Resource;
|
|||||||
import java.io.BufferedReader;
|
import java.io.BufferedReader;
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.io.FileReader;
|
import java.io.FileReader;
|
||||||
import java.math.BigDecimal;
|
|
||||||
import java.text.ParseException;
|
import java.text.ParseException;
|
||||||
import java.text.SimpleDateFormat;
|
import java.text.SimpleDateFormat;
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
|
||||||
import java.util.concurrent.atomic.AtomicReference;
|
import java.util.concurrent.atomic.AtomicReference;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
@ -108,62 +98,62 @@ public class TestController {
|
|||||||
|
|
||||||
@PostMapping("/qxdk")
|
@PostMapping("/qxdk")
|
||||||
public AjaxResult qxdk() throws ParseException {
|
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()));
|
// 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));
|
// }).collect(Collectors.toMap(SysStaff::getUserId, SysStaff::getTimeClock));
|
||||||
|
//
|
||||||
|
//
|
||||||
Date d = new SimpleDateFormat("yyyy-MM-dd").parse("2025-07-08");
|
// Date d = new SimpleDateFormat("yyyy-MM-dd").parse("2025-07-08");
|
||||||
Map<String, Integer> timeMap = Collections.asMap("上班卡(倒班12时制)",12,"上班卡(单班制)",9,"上班卡(倒班8时制)",9);
|
// Map<String, Integer> timeMap = Collections.asMap("上班卡(倒班12时制)",12,"上班卡(单班制)",9,"上班卡(倒班8时制)",9);
|
||||||
List<RzAttendance> list = rzAttendanceService.list(new LambdaQueryWrapper<RzAttendance>()
|
// List<RzAttendance> list = rzAttendanceService.list(new LambdaQueryWrapper<RzAttendance>()
|
||||||
.eq(RzAttendance::getDelFlag, Constants.DELETE_FLAG_0)
|
// .eq(RzAttendance::getDelFlag, Constants.DELETE_FLAG_0)
|
||||||
.apply(" date_format(`attendance_date`,'%Y%m%d')=date_format({0},'%Y%m%d') ",d)
|
// .apply(" date_format(`attendance_date`,'%Y%m%d')=date_format({0},'%Y%m%d') ",d)
|
||||||
.apply(" work_start_time is not null ")
|
// .apply(" work_start_time is not null ")
|
||||||
).stream().map(data ->{
|
// ).stream().map(data ->{
|
||||||
data.setWorkEndTime(DateUtils.addHours(data.getWorkStartTime(), timeMap.get(data.getRules())));
|
// data.setWorkEndTime(DateUtils.addHours(data.getWorkStartTime(), timeMap.get(data.getRules())));
|
||||||
return data;
|
// return data;
|
||||||
}).collect(Collectors.toList());
|
// }).collect(Collectors.toList());
|
||||||
|
//
|
||||||
if(Collections.isNotEmpty(list)){
|
// if(Collections.isNotEmpty(list)){
|
||||||
//更新所有的卡时间
|
// //更新所有的卡时间
|
||||||
rzAttendanceService.updateBatchById(list);
|
// rzAttendanceService.updateBatchById(list);
|
||||||
for (RzAttendance rzAttendance : 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,"%上班%"));
|
// 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)){
|
// if(Collections.isEmpty(sbList)){
|
||||||
rzAttendanceDetailService.addDetail(rzAttendance, rzAttendance.getRules(), snMap.get(rzAttendance.getStaffId()), rzAttendance.getWorkStartTime(), "系统清洗");
|
// rzAttendanceDetailService.addOrUpdateDetail(rzAttendance, rzAttendance.getRules(), snMap.get(rzAttendance.getStaffId()), rzAttendance.getWorkStartTime(), "系统清洗");
|
||||||
}else if(sbList.size() > 1){
|
// }else if(sbList.size() > 1){
|
||||||
sbList.remove(0);
|
// sbList.remove(0);
|
||||||
rzAttendanceDetailService.removeByIds(sbList);
|
// 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,"%下班%"));
|
// 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)){
|
// if(ObjectUtils.isEmpty(xbList)){
|
||||||
rzAttendanceDetailService.addDetail(rzAttendance, "下班卡", snMap.get(rzAttendance.getStaffId()), rzAttendance.getWorkEndTime(), "系统清洗");
|
// rzAttendanceDetailService.addOrUpdateDetail(rzAttendance, "下班卡", snMap.get(rzAttendance.getStaffId()), rzAttendance.getWorkEndTime(), "系统清洗");
|
||||||
}else if(xbList.size() > 1){
|
// }else if(xbList.size() > 1){
|
||||||
xbList.remove(0);
|
// xbList.remove(0);
|
||||||
rzAttendanceDetailService.removeByIds(xbList);
|
// rzAttendanceDetailService.removeByIds(xbList);
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
|
//
|
||||||
|
//
|
||||||
|
//
|
||||||
list = rzAttendanceService.list(new LambdaQueryWrapper<RzAttendance>()
|
// list = rzAttendanceService.list(new LambdaQueryWrapper<RzAttendance>()
|
||||||
.eq(RzAttendance::getDelFlag, Constants.DELETE_FLAG_0)
|
// .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(" 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 ")
|
// .apply(" work_start_time is not null ")
|
||||||
);
|
// );
|
||||||
|
//
|
||||||
if(Collections.isNotEmpty(list)){
|
// if(Collections.isNotEmpty(list)){
|
||||||
//更新所有的卡时间
|
// //更新所有的卡时间
|
||||||
for (RzAttendance rzAttendance : 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,"%上班%"));
|
// 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)){
|
// if(Collections.isEmpty(sbList)){
|
||||||
rzAttendanceDetailService.addDetail(rzAttendance, rzAttendance.getRules(), snMap.get(rzAttendance.getStaffId()), rzAttendance.getWorkStartTime(), "系统清洗");
|
// rzAttendanceDetailService.addOrUpdateDetail(rzAttendance, rzAttendance.getRules(), snMap.get(rzAttendance.getStaffId()), rzAttendance.getWorkStartTime(), "系统清洗");
|
||||||
}else if(sbList.size() > 1){
|
// }else if(sbList.size() > 1){
|
||||||
sbList.remove(0);
|
// sbList.remove(0);
|
||||||
rzAttendanceDetailService.removeByIds(sbList);
|
// rzAttendanceDetailService.removeByIds(sbList);
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
return AjaxResult.success();
|
return AjaxResult.success();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -201,53 +191,53 @@ public class TestController {
|
|||||||
@PostMapping("/jb")
|
@PostMapping("/jb")
|
||||||
public AjaxResult jb() throws Exception{
|
public AjaxResult jb() throws Exception{
|
||||||
|
|
||||||
BufferedReader reader = new BufferedReader(new FileReader(new File("D:\\andy\\文档\\考勤\\7月8号加班数据清洗.txt")));
|
// BufferedReader reader = new BufferedReader(new FileReader(new File("D:\\andy\\文档\\考勤\\7月8号加班数据清洗.txt")));
|
||||||
String line = reader.readLine();
|
// String line = reader.readLine();
|
||||||
while (line != null) {
|
// while (line != null) {
|
||||||
String[] info = line.split("-");
|
// String[] info = line.split("-");
|
||||||
RzAttendanceDetail detail = rzAttendanceDetailService.getOne(new LambdaQueryWrapper<RzAttendanceDetail>()
|
// RzAttendanceDetail detail = rzAttendanceDetailService.getOne(new LambdaQueryWrapper<RzAttendanceDetail>()
|
||||||
.eq(RzAttendanceDetail::getDelFlag, Constants.DELETE_FLAG_0)
|
// .eq(RzAttendanceDetail::getDelFlag, Constants.DELETE_FLAG_0)
|
||||||
.eq(RzAttendanceDetail::getName, info[0])
|
// .eq(RzAttendanceDetail::getName, info[0])
|
||||||
.eq(RzAttendanceDetail::getButtonType,"下班卡")
|
// .eq(RzAttendanceDetail::getButtonType,"下班卡")
|
||||||
.apply(" DATE_FORMAT(date_time,'%Y%m%d') = DATE_FORMAT({0},'%Y%m%d') ", "2025-07-08"));
|
// .apply(" DATE_FORMAT(date_time,'%Y%m%d') = DATE_FORMAT({0},'%Y%m%d') ", "2025-07-08"));
|
||||||
|
//
|
||||||
RzAttendance attendance= rzAttendanceService.getOne(new LambdaQueryWrapper<RzAttendance>()
|
// RzAttendance attendance= rzAttendanceService.getOne(new LambdaQueryWrapper<RzAttendance>()
|
||||||
.eq(RzAttendance::getDelFlag, Constants.DELETE_FLAG_0)
|
// .eq(RzAttendance::getDelFlag, Constants.DELETE_FLAG_0)
|
||||||
.eq(RzAttendance::getName, info[0])
|
// .eq(RzAttendance::getName, info[0])
|
||||||
.eq(RzAttendance::getAttendanceDate, "2025-07-08")
|
// .eq(RzAttendance::getAttendanceDate, "2025-07-08")
|
||||||
);
|
// );
|
||||||
System.out.println(info[0]);
|
// System.out.println(info[0]);
|
||||||
SysStaff sysStaff = sysStaffService.getById(detail.getStaffId());
|
// SysStaff sysStaff = sysStaffService.getById(detail.getStaffId());
|
||||||
RzOverTime rzOverTime = rzOverTimeMapper.selectRzOverTimeByNameAndMonth(sysStaff.getUserId(),detail.getDateTime());
|
// RzOverTime rzOverTime = rzOverTimeMapper.selectRzOverTimeByNameAndMonth(sysStaff.getUserId(),detail.getDateTime());
|
||||||
if(rzOverTime == null){
|
// if(rzOverTime == null){
|
||||||
rzOverTime = new RzOverTime();
|
// rzOverTime = new RzOverTime();
|
||||||
rzOverTime.setUserId(sysStaff.getUserId());
|
// rzOverTime.setUserId(sysStaff.getUserId());
|
||||||
rzOverTime.setOverHours(new BigDecimal("0.0"));
|
// rzOverTime.setOverHours(new BigDecimal("0.0"));
|
||||||
rzOverTime.setDeptId(sysStaff.getDeptId());
|
// rzOverTime.setDeptId(sysStaff.getDeptId());
|
||||||
rzOverTime.setName(sysStaff.getName());
|
// rzOverTime.setName(sysStaff.getName());
|
||||||
rzOverTime.setOverTimeMonth(detail.getDateTime());
|
// rzOverTime.setOverTimeMonth(detail.getDateTime());
|
||||||
rzOverTimeMapper.insert(rzOverTime);
|
// rzOverTimeMapper.insert(rzOverTime);
|
||||||
}
|
// }
|
||||||
|
//
|
||||||
detail = rzAttendanceDetailService.addDetail(attendance, "加班卡", detail.getEquipmentCode(), com.evo.common.utils.DateUtils.addSeconds(detail.getDateTime(), 10), "数据清洗");
|
// detail = rzAttendanceDetailService.addOrUpdateDetail(attendance, "加班卡", detail.getEquipmentCode(), com.evo.common.utils.DateUtils.addSeconds(detail.getDateTime(), 10), "数据清洗");
|
||||||
RzOverTimeDetail rzOverTimeDetail = new RzOverTimeDetail();
|
// RzOverTimeDetail rzOverTimeDetail = new RzOverTimeDetail();
|
||||||
rzOverTimeDetail.setOverTimeId(rzOverTime.getId());
|
// rzOverTimeDetail.setOverTimeId(rzOverTime.getId());
|
||||||
rzOverTimeDetail.setOverTimeStart(detail.getDateTime());
|
// rzOverTimeDetail.setOverTimeStart(detail.getDateTime());
|
||||||
rzOverTimeDetail.setName(sysStaff.getName());
|
// rzOverTimeDetail.setName(sysStaff.getName());
|
||||||
rzOverTimeDetail.setDelFlag(Constants.DELETE_FLAG_0);
|
// rzOverTimeDetail.setDelFlag(Constants.DELETE_FLAG_0);
|
||||||
rzOverTimeDetail.setCreateBy("admin");
|
// rzOverTimeDetail.setCreateBy("admin");
|
||||||
rzOverTimeDetail.setCreateTime(com.evo.common.utils.DateUtils.getNowDate());
|
// 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()), "数据清洗");
|
// 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());
|
// rzOverTimeDetail.setOverTimeEnd(detail.getDateTime());
|
||||||
rzOverTimeDetailMapper.insert(rzOverTimeDetail);
|
// rzOverTimeDetailMapper.insert(rzOverTimeDetail);
|
||||||
KqUtils.calculateOverTimeHours(rzOverTimeDetail, sysStaff.getUserId(), sysStaff.getTimeClock());
|
// KqUtils.calculateOverTimeHours(rzOverTimeDetail, sysStaff.getUserId(), sysStaff.getTimeClock());
|
||||||
rzOverTimeDetailMapper.updateRzOverTimeDetail(rzOverTimeDetail);
|
// rzOverTimeDetailMapper.updateRzOverTimeDetail(rzOverTimeDetail);
|
||||||
//加班修改统计
|
// //加班修改统计
|
||||||
rzOverTime.setOverHours(rzOverTime.getOverHours().add(rzOverTimeDetail.getOverTimeHours()));
|
// rzOverTime.setOverHours(rzOverTime.getOverHours().add(rzOverTimeDetail.getOverTimeHours()));
|
||||||
rzOverTimeMapper.updateRzOverTime(rzOverTime);
|
// rzOverTimeMapper.updateRzOverTime(rzOverTime);
|
||||||
line = reader.readLine();
|
// line = reader.readLine();
|
||||||
}
|
// }
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -19,7 +19,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
|||||||
</resultMap>
|
</resultMap>
|
||||||
|
|
||||||
<sql id="selectRzSpecialOverTimeVo">
|
<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>
|
</sql>
|
||||||
|
|
||||||
<select id="selectRzSpecialOverTimeList" parameterType="RzSpecialOverTime" resultMap="RzSpecialOverTimeResult">
|
<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="deptId != null "> and dept_id = #{deptId}</if>
|
||||||
<if test="name != null and name != ''"> and name like concat('%', #{name}, '%')</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>
|
<if test="overDate != null "> and date_format(over_date,'%y%m') = date_format(#{overDate},'%y%m')</if>
|
||||||
|
${params.dataScope}
|
||||||
</where>
|
</where>
|
||||||
</select>
|
</select>
|
||||||
|
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user