diff --git a/src/com/engine/kq/job/SynClockInTimeJob.java b/src/com/engine/kq/job/SynClockInTimeJob.java index c1a1d78..ac425dd 100644 --- a/src/com/engine/kq/job/SynClockInTimeJob.java +++ b/src/com/engine/kq/job/SynClockInTimeJob.java @@ -1,9 +1,12 @@ package com.engine.kq.job; +import com.engine.kq.biz.KQReportBiz; +import com.engine.kq.biz.KQTimesArrayComInfo; import org.apache.commons.lang3.StringUtils; import weaver.conn.RecordSet; import weaver.general.TimeUtil; import weaver.general.Util; +import weaver.hrm.User; import weaver.interfaces.schedule.BaseCronJob; import java.text.SimpleDateFormat; @@ -30,7 +33,8 @@ public class SynClockInTimeJob extends BaseCronJob { try{ RecordSet rs1 = new RecordSet(); //只查询 来源 是 导入的 - rs.executeQuery("select * from uf_jbtz where ly=1 and ksrq>=? and jsrq<=?",lastdate,currentdate); +// rs.executeQuery("select * from uf_jbtz where ly=1 and ksrq>=? and jsrq<=?",lastdate,currentdate); + 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")); @@ -43,11 +47,22 @@ public class SynClockInTimeJob extends BaseCronJob { String starttime = ksrq+" "+kssj+":00"; String endtime = jsrq+" "+jssj+":00"; + User user = new User(Integer.parseInt(userid)); + 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); +// String earlystarttime = getEarlyStartTime(beforetwohours_starttime,starttime,ksrq,userid); +// String afterendtime = getAfterEndTime(endtime,aftertwohours_endtime,jsrq,userid); + + String earlystarttime = getEarlyStartTime(gzrq,userid,user); + + String afterendtime = ""; + if(checkIsNightSerial(userid,gzrq)){ + afterendtime = getAfterEndTime(gzrq,userid,user); + }else{ + afterendtime = getAfterEndTime(jsrq,userid,user); + } boolean bool = rs1.executeUpdate("update uf_jbtz set zzdksj=?,zwdkrq=? where id=?",earlystarttime,afterendtime,mainid); if(bool){ @@ -69,6 +84,182 @@ public class SynClockInTimeJob extends BaseCronJob { rs.writeLog("---------- end to syn overtime work card time ----------"); } + public static String getEarlyStartTime(String kqDate,String resourceId,User user){ + String result = ""; + Map data = null; + Map signStatusInfo = null; + RecordSet rs = new RecordSet(); + try { + String sql = " select kqdate, resourceid,groupid,serialid,serialnumber,workbegindate,workbegintime, " + + " workenddate,workendtime,workmins,signindate,signintime,signinid,signoutdate,signouttime,signoutid, " + + " attendanceMins,belatemins,graveBeLateMins,leaveearlymins,graveLeaveEarlyMins,absenteeismmins," + + " forgotcheckmins,forgotBeginWorkCheckMins,leaveMins,leaveInfo,evectionMins,outMins,otherinfo " + + " from kq_format_detail b " + + " where resourceid = " + resourceId + " and kqdate ='" + kqDate + "' " + + " order by serialnumber "; + rs.execute(sql); + while (rs.next()) { + String serialid = Util.null2String(rs.getString("serialid")); + String workbegindate = Util.null2String(rs.getString("workbegindate")).trim(); + String workbegintime = Util.null2String(rs.getString("workbegintime")).trim(); + String signinid = Util.null2String(rs.getString("signinid")).trim(); + String signintime = Util.null2String(rs.getString("signintime")).trim(); + String beLateMins = Util.null2String(rs.getString("beLateMins")).trim(); + String graveBeLateMins = Util.null2String(rs.getString("graveBeLateMins")).trim(); + String absenteeismMins = Util.null2String(rs.getString("absenteeismMins")).trim(); + String forgotBeginWorkCheckMins = Util.null2String(rs.getString("forgotBeginWorkCheckMins")).trim(); + int leaveMins = rs.getInt("leaveMins"); + String leaveInfo = Util.null2String(rs.getString("leaveInfo")); + int evectionMins = rs.getInt("evectionMins"); + int outMins = rs.getInt("outMins"); + if (serialid.length() > 0) { + if (workbegintime.length() > 0) { + signStatusInfo = new HashMap(); + signStatusInfo.put("workdate", workbegindate); + signStatusInfo.put("worktime", workbegintime); + signStatusInfo.put("signtime", signintime); + signStatusInfo.put("beLateMins", beLateMins); + signStatusInfo.put("forgotBeginWorkCheckMins", forgotBeginWorkCheckMins); + signStatusInfo.put("graveBeLateMins", graveBeLateMins); + signStatusInfo.put("absenteeismMins", absenteeismMins); + signStatusInfo.put("leaveMins", leaveMins); + signStatusInfo.put("leaveInfo", leaveInfo); + signStatusInfo.put("evectionMins", evectionMins); + signStatusInfo.put("outMins", outMins); + data = new HashMap<>(); + data.put("workTime", workbegintime); + data.put("signTime", signintime.length() == 0 ? "" : signintime); + data.put("signStatus", KQReportBiz.getSignStatus(signStatusInfo, user, "on")); + Map signDetailInfo = getSignDetailInfo(signinid); + data.put("addr", Util.null2String(signDetailInfo.get("addr"))); + } + } else { + signStatusInfo = new HashMap(); + signStatusInfo.put("leaveMins", leaveMins); + signStatusInfo.put("leaveInfo", leaveInfo); + signStatusInfo.put("evectionMins", evectionMins); + signStatusInfo.put("outMins", outMins); + if (signinid.length() > 0) { + data = new HashMap<>(); + data.put("signStatus", KQReportBiz.getSignStatus(signStatusInfo, user, "")); + data.put("signTime", signintime.length() == 0 ? "" : signintime); + Map signDetailInfo = getSignDetailInfo(signinid); + data.put("addr", Util.null2String(signDetailInfo.get("addr"))); + } else { + data = new HashMap<>(); + data.put("signStatus", KQReportBiz.getSignStatus(signStatusInfo, user, "")); + } + } + } + if(data.containsKey("signTime")){ + String signTime = data.get("signTime").toString(); + if(signTime != null && !"".equals(signTime)){ + result = kqDate + " " + signTime; + } + } + }catch (Exception e) { + rs.writeLog(e); + } + return result; + } + + public static String getAfterEndTime(String kqDate,String resourceId,User user){ + String result = ""; + KQTimesArrayComInfo kqTimesArrayComInfo = new KQTimesArrayComInfo(); + Map data = null; + Map signStatusInfo = null; + RecordSet rs = new RecordSet(); + try { + String sql = " select kqdate, resourceid,groupid,serialid,serialnumber,workbegindate,workbegintime, " + + " workenddate,workendtime,workmins,signindate,signintime,signinid,signoutdate,signouttime,signoutid, " + + " attendanceMins,belatemins,graveBeLateMins,leaveearlymins,graveLeaveEarlyMins,absenteeismmins," + + " forgotcheckmins,forgotBeginWorkCheckMins,leaveMins,leaveInfo,evectionMins,outMins,otherinfo " + + " from kq_format_detail b " + + " where resourceid = " + resourceId + " and kqdate ='" + kqDate + "' " + + " order by serialnumber "; + rs.execute(sql); + while (rs.next()) { + String serialid = Util.null2String(rs.getString("serialid")); + String workenddate = Util.null2String(rs.getString("workenddate")).trim(); + String workendtime = Util.null2String(rs.getString("workendtime")).trim(); + String signoutid = Util.null2String(rs.getString("signoutid")).trim(); + String signouttime = Util.null2String(rs.getString("signouttime")).trim(); + String leaveEarlyMins = Util.null2String(rs.getString("leaveEarlyMins")).trim(); + String graveLeaveEarlyMins = Util.null2String(rs.getString("graveLeaveEarlyMins")).trim(); + String absenteeismMins = Util.null2String(rs.getString("absenteeismMins")).trim(); + String forgotCheckMins = Util.null2String(rs.getString("forgotCheckMins")).trim(); + int leaveMins = rs.getInt("leaveMins"); + String leaveInfo = Util.null2String(rs.getString("leaveInfo")); + int evectionMins = rs.getInt("evectionMins"); + int outMins = rs.getInt("outMins"); + if (serialid.length() > 0) { + if (workendtime.length() > 0) { + signStatusInfo = new HashMap(); + signStatusInfo.put("workdate", workenddate); + signStatusInfo.put("worktime", kqTimesArrayComInfo.turn48to24Time(workendtime)); + signStatusInfo.put("signtime", signouttime); + signStatusInfo.put("leaveEarlyMins", leaveEarlyMins); + signStatusInfo.put("graveLeaveEarlyMins", graveLeaveEarlyMins); + signStatusInfo.put("forgotCheckMins", forgotCheckMins); + signStatusInfo.put("absenteeismMins", absenteeismMins); + signStatusInfo.put("leaveMins", leaveMins); + signStatusInfo.put("leaveInfo", leaveInfo); + signStatusInfo.put("evectionMins", evectionMins); + signStatusInfo.put("outMins", outMins); + data = new HashMap<>(); + data.put("workTime", kqTimesArrayComInfo.turn48to24Time(workendtime)); + data.put("signTime", signouttime.length() == 0 ? "" : signouttime); + data.put("signStatus", KQReportBiz.getSignStatus(signStatusInfo, user, "off")); + Map signDetailInfo = getSignDetailInfo(signoutid); + data.put("addr", Util.null2String(signDetailInfo.get("addr"))); + } + } else { + signStatusInfo = new HashMap(); + signStatusInfo.put("leaveMins", leaveMins); + signStatusInfo.put("leaveInfo", leaveInfo); + signStatusInfo.put("evectionMins", evectionMins); + signStatusInfo.put("outMins", outMins); + if (signoutid.length() > 0) { + data = new HashMap<>(); + data.put("signStatus", KQReportBiz.getSignStatus(signStatusInfo, user, "")); + data.put("signTime", signouttime.length() == 0 ? "" : signouttime); + Map signDetailInfo = getSignDetailInfo(signoutid); + data.put("addr", Util.null2String(signDetailInfo.get("addr"))); + } else { + data = new HashMap<>(); + data.put("signStatus", KQReportBiz.getSignStatus(signStatusInfo, user, "")); + } + } + } + if(data.containsKey("signTime")){ + String signTime = data.get("signTime").toString(); + if(signTime != null && !"".equals(signTime)){ + result = kqDate + " " + signTime; + } + } + }catch (Exception e) { + rs.writeLog(e); + } + return result; + } + + + public static Map getSignDetailInfo(String id){ + Map resultMap = new HashMap<>(); + RecordSet rs = new RecordSet(); + String sql = ""; + try{ + sql = " select addr from hrmschedulesign where id = ? "; + rs.executeQuery(sql,id); + if(rs.next()){ + resultMap.put("addr",Util.null2String(rs.getString("addr"))); + } + }catch (Exception e){ + rs.writeLog(e); + } + return resultMap; + } + /** * 获取 最早开始日期时间 * @param beforetwohours_starttime @@ -78,7 +269,7 @@ public class SynClockInTimeJob extends BaseCronJob { * @return */ public static String getEarlyStartTime(String beforetwohours_starttime,String starttime,String ksrq,String userid){ - String result = starttime; + String result = ""; RecordSet rs = new RecordSet(); SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); List list = new ArrayList<>(); @@ -99,10 +290,10 @@ public class SynClockInTimeJob extends BaseCronJob { String signTime = Util.null2String(rs.getString("signTime")); String signdatetime = signDate + " " + signTime; - boolean bool = belongCalendar(signdatetime, beforetwohours_starttime, starttime); - if (bool) { - list.add(format.parse(signdatetime)); - } +// boolean bool = belongCalendar(signdatetime, beforetwohours_starttime, starttime); +// if (bool) { + list.add(format.parse(signdatetime)); +// } } if(list.size()>0){ if(list.size()>1){ @@ -127,7 +318,7 @@ public class SynClockInTimeJob extends BaseCronJob { * @return */ public static String getAfterEndTime(String endtime,String aftertwohours_endtime,String jsrq,String userid){ - String result = endtime; + String result = ""; RecordSet rs = new RecordSet(); SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); List list = new ArrayList<>(); @@ -148,10 +339,10 @@ public class SynClockInTimeJob extends BaseCronJob { String signTime = Util.null2String(rs.getString("signTime")); String signdatetime = signDate + " " + signTime; - boolean bool = belongCalendar(signdatetime, endtime, aftertwohours_endtime); - if (bool) { - list.add(format.parse(signdatetime)); - } +// boolean bool = belongCalendar(signdatetime, endtime, aftertwohours_endtime); +// if (bool) { + list.add(format.parse(signdatetime)); +// } } if(list.size()>0){ if(list.size()>1){ @@ -254,4 +445,24 @@ public class SynClockInTimeJob extends BaseCronJob { return ""; } + /** + * 判断 班次是否是 跨夜 班次 + * @param userid + * @param date + * @return + */ + public static boolean checkIsNightSerial(String userid,String date){ + boolean bool = false; + RecordSet rs = new RecordSet(); + String night_serialids = rs.getPropValue("nbjh_ygdjblc","night_serialids"); + rs.executeQuery("select * from kq_format_detail where resourceid = ? and kqdate = ? ",userid,date); + while(rs.next()){ + String serialid = Util.null2String(rs.getString("serialid")); + if((","+night_serialids+",").contains((","+serialid+","))){ + bool = true; + } + } + return bool; + } + } diff --git a/src/com/engine/kq/job/UpdateEffectiveDuration.java b/src/com/engine/kq/job/UpdateEffectiveDuration.java index f42de8f..501473a 100644 --- a/src/com/engine/kq/job/UpdateEffectiveDuration.java +++ b/src/com/engine/kq/job/UpdateEffectiveDuration.java @@ -56,15 +56,18 @@ public class UpdateEffectiveDuration { LocalDateTime endWorkTime = LocalDateTime.parse(endTime, DATE_TIME_FORMATTER); // 最早、最晚打卡时间,与开始时间、结束时间,是否存在交集 boolean hasIntersection = startSignTime.isBefore(endWorkTime) && endSignTime.isAfter(startWorkTime); - recordSet.executeQuery("select gjsc from uf_jbtz where id = ?", mainId); + recordSet.executeQuery("select gjsc,ly from uf_jbtz where id = ?", mainId); double gjscHours = 0.0; + String ly = ""; if (recordSet.next()) { gjscHours = recordSet.getDouble("gjsc"); + ly = recordSet.getString("ly"); } if (gjscHours < 0) { throw new Exception("mainId===" + mainId + ",共计时长小于0"); } - if (hasIntersection) { + // 只处理来源为导入的数据 + if ("1".equals(ly) && hasIntersection) { int totalMinutes = 0; if (startSignTime.isAfter(startWorkTime)) { int startDifference = (int) (startWorkTime.until(startSignTime, ChronoUnit.MINUTES));