package com.engine.kq.job;
import com.alibaba.fastjson.JSON;
import com.engine.kq.biz.KQShiftOnOffWorkSectionComInfo;
import com.engine.kq.biz.KQShiftRestTimeSectionComInfo;
import com.engine.kq.biz.KQWorkTime;
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import weaver.common.DateUtil;
import weaver.conn.RecordSet;
import weaver.general.TimeUtil;
import weaver.general.Util;
import weaver.interfaces.schedule.BaseCronJob;
import java.text.SimpleDateFormat;
import java.time.LocalDateTime;
import java.time.LocalTime;
import java.time.format.DateTimeFormatter;
import java.time.temporal.ChronoUnit;
import java.util.*;
/**
* @Title
* @Author wangchaofa
* @CreateDate 2024/1/7
* @Version 1.0
* @Description
*/
public class SynClockInTimeJob extends BaseCronJob {
/**
* 日期时间格式化
*/
private static final DateTimeFormatter DATE_TIME_FORMATTER = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm");
@Override
public void execute() {
RecordSet rs = new RecordSet();
rs.writeLog("----------- start to syn overtime work card time ------------");
String currentdate = TimeUtil.getCurrentDateString();
String currenttime = TimeUtil.getOnlyCurrentTimeString();
String currentdatetime = currentdate+" "+currenttime;
String lastdate = addDateDay(currentdate,-50);
String lastdatetime = lastdate+" "+currenttime;
try{
RecordSet rs1 = new RecordSet();
rs.executeQuery("select * from uf_jbtz where ksrq>=? and jsrq<=?",lastdate,currentdate);
while(rs.next()){
String mainid = Util.null2String(rs.getString("id"));
String userid = Util.null2String(rs.getString("jbr"));
String ksrq = Util.null2String(rs.getString("ksrq"));
String kssj = Util.null2String(rs.getString("kssj"));
String jsrq = Util.null2String(rs.getString("jsrq"));
String jssj = Util.null2String(rs.getString("jssj"));
String starttime = ksrq+" "+kssj+":00";
String endtime = jsrq+" "+jssj+":00";
String beforetwohours_starttime = addDateHour(starttime,-2);
String aftertwohours_endtime = addDateHour(endtime,2);
String earlystarttime = getEarlyStartTime(beforetwohours_starttime,starttime,ksrq,userid);
String afterendtime = getAfterEndTime(endtime,aftertwohours_endtime,jsrq,userid);
boolean bool = rs1.executeUpdate("update uf_jbtz set zzdksj=?,zwdkrq=? where id=?",earlystarttime,afterendtime,mainid);
if(bool){
rs.writeLog(userid+ " ------------ "+ kssj +" ------------ "+ jsrq +" ---------- "+ bool);
// 计算有效时长
rs.writeLog("计算有效时长开始");
String gzrq = Util.null2String(rs.getString("gzrq"));
updateEffectiveDuration(mainid, userid, gzrq, earlystarttime, afterendtime);
rs.writeLog("计算有效时长结束");
}
}
}catch(Exception e){
e.printStackTrace();
rs.writeLog("---------- syn overtime work card time error ---------- "+ e);
}
rs.writeLog("---------- end to syn overtime work card time ----------");
}
/**
* 更新加班台账表,有效时长字段
*
* 导入的加班数据增加根据班次的最早最晚打卡时间取交集,按照系统的加班单和打卡数据取交集处理
*
* @param mainId 当前数据ID
* @param userId 加班人ID
* @param gzrq 归属日志
* @param earlyStartTime 最早打卡时间
* @param afterEndTime 最晚打卡时间
*/
private void updateEffectiveDuration(String mainId, String userId, String gzrq, String earlyStartTime, String afterEndTime) {
RecordSet recordSet = new RecordSet();
try {
KQWorkTime kqWorkTime = new KQWorkTime();
Map serialInfo = kqWorkTime.getSerialInfo(userId, gzrq, false, true);
recordSet.writeLog("userId==" + userId + ",serialInfo===" + JSON.toJSONString(serialInfo));
String serialId = Util.null2String(serialInfo.get(gzrq));
List