diff --git a/log/sdk.log b/log/sdk.log index 5a71668..a395a05 100644 --- a/log/sdk.log +++ b/log/sdk.log @@ -774,3 +774,5 @@ 2023-11-28 19:57:25,603 [main] [com.engine.common.util.Utils] [INFO] - 请假外出时间 右边 2023-11-28 20:02:25,544 [Timer-0] [A2] [INFO] - rootPath == null 2023-11-28 20:02:25,545 [Timer-0] [A2] [INFO] - filePath == nullWEB-INF\prop\isSyncLog4j.properties +2023-12-05 21:53:39,011 [Timer-0] [A2] [INFO] - rootPath == null +2023-12-05 21:53:39,021 [Timer-0] [A2] [INFO] - filePath == nullWEB-INF\prop\isSyncLog4j.properties diff --git a/out/artifacts/hrm_attendance/hrm-attendance.jar b/out/artifacts/hrm_attendance/hrm-attendance.jar index 535c18f..ce98189 100644 Binary files a/out/artifacts/hrm_attendance/hrm-attendance.jar and b/out/artifacts/hrm_attendance/hrm-attendance.jar differ diff --git a/src/com/engine/attendance/attendanceanalysis/cmd/GetClockInPointCmd.java b/src/com/engine/attendance/attendanceanalysis/cmd/GetClockInPointCmd.java index b14b05a..4b0f97c 100644 --- a/src/com/engine/attendance/attendanceanalysis/cmd/GetClockInPointCmd.java +++ b/src/com/engine/attendance/attendanceanalysis/cmd/GetClockInPointCmd.java @@ -14,6 +14,8 @@ import com.google.common.collect.Maps; import lombok.extern.slf4j.Slf4j; import weaver.general.Util; +import java.time.ZoneOffset; +import java.util.Comparator; import java.util.List; import java.util.Map; import java.util.stream.Collectors; @@ -22,10 +24,11 @@ import java.util.stream.Collectors; * 获取打卡卡点 */ @Slf4j -public class GetClockInPointCmd extends AbstractCommonCommand> { - public GetClockInPointCmd(Map params){ - this.params=params; +public class GetClockInPointCmd extends AbstractCommonCommand> { + public GetClockInPointCmd(Map params) { + this.params = params; } + @Override public BizLogContext getLogContext() { return null; @@ -35,241 +38,417 @@ public class GetClockInPointCmd extends AbstractCommonCommand public Map execute(CommandContext commandContext) { Map resultMap = Maps.newHashMap(); String analysisDate = Util.null2String(params.get("analysisDate")); - List> needClockInSchedule = (List>)params.get("needClockInSchedule"); - List> clockInTimeList = (List>)params.get("clockInTimeList"); - List>> clcokInTimeData = getClockInPoint(analysisDate,needClockInSchedule,clockInTimeList); - resultMap.put("clcokInTimeData",clcokInTimeData); + List> scheduleResult = (List>) params.get("scheduleResult"); + List> clockInTimeList = (List>) params.get("clockInTimeList"); + List> askForLeaveAndEvctionScheduleList = (List>) params.get("askForLeaveAndEvctionSchedule"); + List> needClockInList = scheduleResult.stream().filter(e -> !ClassSegmentTypeEnum.REST_AND_DINE.getKey().equals(e.get("bdlx")) && !ClassSegmentTypeEnum.REST_PERIOD.getKey().equals(e.get("bdlx")) && + !ClassSegmentTypeEnum.DINING_PERIOD.getKey().equals(e.get("bdlx")) ).collect(Collectors.toList()); + + /** + * 当请假或外出开始时间和外出时间在上班之外时,不需要打卡 + */ + log.info("未重新计算卡点时 老的scheduleResult : [{}],askForLeaveAndEvctionScheduleList:[{}]",scheduleResult,askForLeaveAndEvctionScheduleList); + if (needClockInList.size() > 0 && askForLeaveAndEvctionScheduleList.size() > 0) { + String startTime = analysisDate + " " + needClockInList.get(0).get("dtkssj").toString(); + String endStartTime = analysisDate + " " + needClockInList.get(needClockInList.size()-1).get("dtkssj").toString(); + String endTime = analysisDate + " " + needClockInList.get(needClockInList.size()-1).get("dtjssj").toString(); + if (DateUtil.getTime(endStartTime).compareTo(DateUtil.getTime(endTime)) > 0) { + endTime = DateUtil.AfterDay(analysisDate, 1) + " " + needClockInList.get(needClockInList.size()-1).get("dtjssj"); + } + for (Map askForLeaveAndEvctionSchedule :askForLeaveAndEvctionScheduleList){ + String dtkssj = analysisDate + " " + askForLeaveAndEvctionSchedule.get("dtkssj"); + String dtjssj = analysisDate + " " + askForLeaveAndEvctionSchedule.get("dtjssj"); + if (DateUtil.getTime(dtkssj).compareTo(DateUtil.getTime(dtjssj)) > 0) { + dtjssj = DateUtil.AfterDay(analysisDate, 1) + " " + askForLeaveAndEvctionSchedule.get("dtjssj"); + } + if (DateUtil.getTime(dtkssj).compareTo(DateUtil.getTime(startTime))<0 || DateUtil.getTime(dtkssj).compareTo(DateUtil.getTime(endTime)) > 0){ + askForLeaveAndEvctionSchedule.put("ksdk",CheckBoxEnum.UNCHECKED.getKey()); + } + if (DateUtil.getTime(dtjssj).compareTo(DateUtil.getTime(endTime))>0 || DateUtil.getTime(dtjssj).compareTo(DateUtil.getTime(startTime))<0){ + askForLeaveAndEvctionSchedule.put("jsdk",CheckBoxEnum.UNCHECKED.getKey()); + } + + } + } + + /** + * 当请假或外出包含打卡卡点时,判断该卡点是否需要打卡 + */ + for (Map askForLeaveAndEvctionMap :askForLeaveAndEvctionScheduleList){ + String evctiondtkssj = analysisDate + " " +Util.null2String(askForLeaveAndEvctionMap.get("dtkssj")); + String evctionksdk = Util.null2String(askForLeaveAndEvctionMap.get("ksdk")); + String evctiondtjssj = analysisDate + " " +Util.null2String(askForLeaveAndEvctionMap.get("dtjssj")); + String evctionjsdk = Util.null2String(askForLeaveAndEvctionMap.get("jsdk")); + if (DateUtil.getTime(evctiondtkssj).compareTo(DateUtil.getTime(evctiondtjssj)) > 0) { + evctiondtjssj = DateUtil.AfterDay(analysisDate, 1) + " " + Util.null2String(askForLeaveAndEvctionMap.get("dtjssj")); + } + List lists = Lists.newArrayList(); + for (int i=0;i 0) { + dtjssj = DateUtil.AfterDay(analysisDate, 1) + " " + Util.null2String(scheduleResult.get(i).get("dtjssj")); + } + if (DateUtil.getTime(evctiondtkssj).compareTo(DateUtil.getTime(dtkssj)) <= 0 && DateUtil.getTime(evctiondtjssj).compareTo(DateUtil.getTime(dtkssj)) >=0 + && !ClassSegmentTypeEnum.REST_AND_DINE.getKey().equals(bdlx) && !ClassSegmentTypeEnum.REST_PERIOD.getKey().equals(bdlx) && !ClassSegmentTypeEnum.DINING_PERIOD.getKey().equals(bdlx)){ + lists.add(scheduleResult.get(i).get("dtkssj")+"-"+ClockPointEnum.START.getKey()+"-"+Util.null2String(scheduleResult.get(i).get("ksdk"))); + } + if (DateUtil.getTime(evctiondtkssj).compareTo(DateUtil.getTime(dtjssj)) <= 0 && DateUtil.getTime(evctiondtjssj).compareTo(DateUtil.getTime(dtjssj)) >=0 + && !ClassSegmentTypeEnum.REST_AND_DINE.getKey().equals(bdlx) && !ClassSegmentTypeEnum.REST_PERIOD.getKey().equals(bdlx) && !ClassSegmentTypeEnum.DINING_PERIOD.getKey().equals(bdlx)){ + lists.add(scheduleResult.get(i).get("dtjssj")+"-"+ClockPointEnum.END.getKey()+"-"+Util.null2String(scheduleResult.get(i).get("jsdk"))); + } + } + //新打卡 + List newNeedClockLists = Lists.newArrayList(); + if (lists.size() == 1){ + String str = lists.get(0); + if (ClockPointEnum.START.getKey().equals(str.split("-")[1]) && CheckBoxEnum.CHECKED.getKey().equals(evctionjsdk)){ + newNeedClockLists.add(str.split("-")[0]+"-"+str.split("-")[1]+"-0"); + }else if (ClockPointEnum.END.getKey().equals(str.split("-")[1]) && CheckBoxEnum.CHECKED.getKey().equals(evctionksdk)){ + newNeedClockLists.add(str.split("-")[0]+"-"+str.split("-")[1]+"-0"); + } + }else if (lists.size() > 1){ + for(int i=0;i 0){ + scheduleResult.addAll(askForLeaveAndEvctionScheduleList); + scheduleResult = scheduleResult.stream().sorted(Comparator.comparing(e->DateUtil.getTime(analysisDate+" "+e.get("dtkssj")).toInstant(ZoneOffset.of("+8")).toEpochMilli())).collect(Collectors.toList()); + } + List>> clcokInTimeData = getClockInPoint(analysisDate, scheduleResult, clockInTimeList); + resultMap.put("clcokInTimeData", clcokInTimeData); return resultMap; } + /** * 获取打卡卡点 - * @param analysisDate 分析日期 - * @param needClockInSchedule 需要打卡的班次 - * @param clockInTimeList 打卡集合 - * @return + * + * @param analysisDate 分析日期 + * @param scheduleResult 需要打卡的班次 + * @param clockInTimeList 打卡集合 + * @return {2023-11-12 09:00|0|3|2023-11-12 09:15={signtime=09:11:00, id=48, userid=53, signdate=2023-11-12}} + * 班次时间|打卡类型(上班卡或下班卡)|打卡时间处所在位置|弹性时间 = 打卡时间map集合 */ - public static List>> getClockInPoint(String analysisDate, List> needClockInSchedule, List> clockInTimeList){ - List>> clcokInTimeData = Lists.newArrayList(); - for (Map needClockIn :needClockInSchedule){ - if (CheckBoxEnum.CHECKED.getKey().equals(needClockIn.get("ksdk"))){ - String dtkssj = analysisDate+" "+needClockIn.get("dtkssj"); - String dtjssj = analysisDate+" "+needClockIn.get("dtjssj"); - if (DateUtil.getTime(dtkssj).compareTo(DateUtil.getTime(dtjssj)) > 0){ - dtjssj = DateUtil.AfterDay(analysisDate,1) +" "+needClockIn.get("dtjssj"); + public static List>> getClockInPoint(String analysisDate, List> scheduleResult, List> clockInTimeList) { + + /** + * 正常排班进行卡点 + */ + List>> clcokInTimeData = Lists.newArrayList(); + for (Map needClockIn : scheduleResult) { + if (CheckBoxEnum.CHECKED.getKey().equals(needClockIn.get("ksdk"))) { + String dtkssj = analysisDate + " " + needClockIn.get("dtkssj"); + String dtjssj = analysisDate + " " + needClockIn.get("dtjssj"); + if (DateUtil.getTime(dtkssj).compareTo(DateUtil.getTime(dtjssj)) > 0) { + dtjssj = DateUtil.AfterDay(analysisDate, 1) + " " + needClockIn.get("dtjssj"); } int tqdkfzs = Integer.valueOf(Util.null2String(needClockIn.get("tqdkfzs"))); - Map> ksdkNearestClcokInTime = Utils.getNearestClcokInTimeCmd(dtkssj,clockInTimeList); + Map> ksdkNearestClcokInTime = Utils.getNearestClcokInTimeCmd(dtkssj, clockInTimeList); String timeType = ClockPointEnum.EMPTY.getKey(); - Map> clcokInTimeMap = Maps.newHashMap(); - if (ksdkNearestClcokInTime.get(ClockPointEnum.EQUAL.getKey()) != null){ - timeType=ClockPointEnum.EQUAL.getKey(); + Map> clcokInTimeMap = Maps.newHashMap(); + if (ksdkNearestClcokInTime.get(ClockPointEnum.EQUAL.getKey()) != null) { + timeType = ClockPointEnum.EQUAL.getKey(); } - if (ClockPointEnum.EMPTY.getKey().equals(timeType) && ksdkNearestClcokInTime.get(ClockPointEnum.BEFORE.getKey()) != null){ - String clockInTime = ksdkNearestClcokInTime.get(ClockPointEnum.BEFORE.getKey()).get("signdate") +" "+ksdkNearestClcokInTime.get(ClockPointEnum.BEFORE.getKey()).get("signtime"); - if (DateUtil.getTime(clockInTime).compareTo(DateUtil.getTime(DateUtil.beforeMinutes(dtkssj,tqdkfzs))) >=0){ + if (ClockPointEnum.EMPTY.getKey().equals(timeType) && ksdkNearestClcokInTime.get(ClockPointEnum.BEFORE.getKey()) != null) { + String clockInTime = ksdkNearestClcokInTime.get(ClockPointEnum.BEFORE.getKey()).get("signdate") + " " + ksdkNearestClcokInTime.get(ClockPointEnum.BEFORE.getKey()).get("signtime"); + if (DateUtil.getTime(clockInTime).compareTo(DateUtil.getTime(DateUtil.beforeMinutes(dtkssj, tqdkfzs))) >= 0) { //打卡时间大于等于最早打卡时间 - timeType=ClockPointEnum.BEFORE.getKey(); + timeType = ClockPointEnum.BEFORE.getKey(); } } - if (ClockPointEnum.EMPTY.getKey().equals(timeType) && ksdkNearestClcokInTime.get(ClockPointEnum.AFTER.getKey()) != null){ - String clockInTime = ksdkNearestClcokInTime.get(ClockPointEnum.AFTER.getKey()).get("signdate") +" "+ksdkNearestClcokInTime.get(ClockPointEnum.AFTER.getKey()).get("signtime"); - if (DateUtil.getTime(clockInTime).compareTo(DateUtil.getTime(dtjssj)) < 0){ + if (ClockPointEnum.EMPTY.getKey().equals(timeType) && ksdkNearestClcokInTime.get(ClockPointEnum.AFTER.getKey()) != null) { + String clockInTime = ksdkNearestClcokInTime.get(ClockPointEnum.AFTER.getKey()).get("signdate") + " " + ksdkNearestClcokInTime.get(ClockPointEnum.AFTER.getKey()).get("signtime"); + if (DateUtil.getTime(clockInTime).compareTo(DateUtil.getTime(dtjssj)) < 0) { //打卡时间小于结束时间 - timeType=ClockPointEnum.AFTER.getKey(); + timeType = ClockPointEnum.AFTER.getKey(); } } - clcokInTimeMap.put(dtkssj+"|"+ClockPointEnum.START.getKey()+"|"+timeType,ksdkNearestClcokInTime.get(timeType)); + clcokInTimeMap.put(dtkssj + "|" + ClockPointEnum.START.getKey() + "|" + timeType, ksdkNearestClcokInTime.get(timeType)); clcokInTimeData.add(clcokInTimeMap); } - if (CheckBoxEnum.CHECKED.getKey().equals(needClockIn.get("jsdk"))){ - String dtkssj = analysisDate+" "+needClockIn.get("dtkssj"); - String dtjssj = analysisDate+" "+needClockIn.get("dtjssj"); + if (CheckBoxEnum.CHECKED.getKey().equals(needClockIn.get("jsdk"))) { + String dtkssj = analysisDate + " " + needClockIn.get("dtkssj"); + String dtjssj = analysisDate + " " + needClockIn.get("dtjssj"); int thdkfzs = Integer.valueOf(Util.null2String(needClockIn.get("thdkfzs"))); - if (DateUtil.getTime(dtkssj).compareTo(DateUtil.getTime(dtjssj)) > 0){ - dtjssj = DateUtil.AfterDay(analysisDate,1) +" "+needClockIn.get("dtjssj"); + if (DateUtil.getTime(dtkssj).compareTo(DateUtil.getTime(dtjssj)) > 0) { + dtjssj = DateUtil.AfterDay(analysisDate, 1) + " " + needClockIn.get("dtjssj"); } - Map> jsdkNearestClcokInTime = Utils.getNearestClcokInTimeCmd(dtjssj,clockInTimeList); + Map> jsdkNearestClcokInTime = Utils.getNearestClcokInTimeCmd(dtjssj, clockInTimeList); String timeType = ClockPointEnum.EMPTY.getKey(); - Map> clcokInTimeMap = Maps.newHashMap(); - if (jsdkNearestClcokInTime.get(ClockPointEnum.EQUAL.getKey()) != null){ - timeType=ClockPointEnum.EQUAL.getKey(); + Map> clcokInTimeMap = Maps.newHashMap(); + if (jsdkNearestClcokInTime.get(ClockPointEnum.EQUAL.getKey()) != null) { + timeType = ClockPointEnum.EQUAL.getKey(); } - if (ClockPointEnum.EMPTY.getKey().equals(timeType) && jsdkNearestClcokInTime.get(ClockPointEnum.AFTER.getKey()) != null){ - String clockInTime = jsdkNearestClcokInTime.get(ClockPointEnum.AFTER.getKey()).get("signdate") +" "+jsdkNearestClcokInTime.get(ClockPointEnum.AFTER.getKey()).get("signtime"); - if (DateUtil.getTime(clockInTime).compareTo(DateUtil.getTime(DateUtil.AfterMinutes(dtjssj,thdkfzs))) <=0){ - timeType=ClockPointEnum.AFTER.getKey(); + if (ClockPointEnum.EMPTY.getKey().equals(timeType) && jsdkNearestClcokInTime.get(ClockPointEnum.AFTER.getKey()) != null) { + String clockInTime = jsdkNearestClcokInTime.get(ClockPointEnum.AFTER.getKey()).get("signdate") + " " + jsdkNearestClcokInTime.get(ClockPointEnum.AFTER.getKey()).get("signtime"); + if (DateUtil.getTime(clockInTime).compareTo(DateUtil.getTime(DateUtil.AfterMinutes(dtjssj, thdkfzs))) <= 0) { + timeType = ClockPointEnum.AFTER.getKey(); } } - if (ClockPointEnum.EMPTY.getKey().equals(timeType) && jsdkNearestClcokInTime.get(ClockPointEnum.BEFORE.getKey()) != null){ - String clockInTime = jsdkNearestClcokInTime.get(ClockPointEnum.BEFORE.getKey()).get("signdate") +" "+jsdkNearestClcokInTime.get(ClockPointEnum.BEFORE.getKey()).get("signtime"); - if (DateUtil.getTime(clockInTime).compareTo(DateUtil.getTime(dtkssj)) >0){ - timeType=ClockPointEnum.BEFORE.getKey(); + if (ClockPointEnum.EMPTY.getKey().equals(timeType) && jsdkNearestClcokInTime.get(ClockPointEnum.BEFORE.getKey()) != null) { + String clockInTime = jsdkNearestClcokInTime.get(ClockPointEnum.BEFORE.getKey()).get("signdate") + " " + jsdkNearestClcokInTime.get(ClockPointEnum.BEFORE.getKey()).get("signtime"); + if (DateUtil.getTime(clockInTime).compareTo(DateUtil.getTime(dtkssj)) > 0) { + timeType = ClockPointEnum.BEFORE.getKey(); } } - clcokInTimeMap.put(dtjssj+"|"+ClockPointEnum.END.getKey()+"|"+timeType,jsdkNearestClcokInTime.get(timeType)); + clcokInTimeMap.put(dtjssj + "|" + ClockPointEnum.END.getKey() + "|" + timeType, jsdkNearestClcokInTime.get(timeType)); clcokInTimeData.add(clcokInTimeMap); } } - //当弹性上下班时 - if (needClockInSchedule.size() > 0){ + clcokInTimeData = clcokInTimeData.stream().sorted(Comparator.comparing(e->{ + //卡点 + String point = ""; + //当天打卡数据 + for (Map.Entry> entry :e.entrySet()){ + point = entry.getKey(); + } + return DateUtil.getTime(point.split("\\|")[0]).toInstant(ZoneOffset.of("+8")).toEpochMilli(); + })).collect(Collectors.toList()); + /** + * 计算弹性上下班 + */ + if (scheduleResult.size() > 0) { + //上下班弹性, + List> workScheduleList = scheduleResult.stream().filter(e -> ClassSegmentTypeEnum.WORK_TIME.getKey().equals(e.get("bdlx")) || ClassSegmentTypeEnum.EXTENDED_OVERTIME.getKey().equals(e.get("bdlx")) + || ClassSegmentTypeEnum.EARLY_OVERTIME.getKey().equals(e.get("bdlx"))).collect(Collectors.toList()); + + //请假和外出集合 + List> leaveAndEvctionList = scheduleResult.stream().filter(e -> ClassSegmentTypeEnum.ASK_FOR_LEAVE.getKey().equals(e.get("bdlx")) || + ClassSegmentTypeEnum.EVECTION.getKey().equals(e.get("bdlx"))).collect(Collectors.toList()); //是否弹性 - String sfdx = Util.null2String(needClockInSchedule.get(0).get("sfdx")); - //最大弹性分钟 - int zddxfz = Integer.valueOf(Util.null2String(needClockInSchedule.get(0).get("zddxfz"))); - //弹性核算 - int dxhs = Integer.valueOf(Util.null2String(needClockInSchedule.get(0).get("dxhs"))); + String sfdx = Util.null2String(workScheduleList.get(0).get("sfdx")); + //上班是否需要打卡 + String ifToWorkClock = Util.null2String(workScheduleList.get(0).get("ksdk")); + //下班是否需要打卡 + String ifToCloseClock = Util.null2String(workScheduleList.get(workScheduleList.size()-1).get("jsdk")); - if (CheckBoxEnum.CHECKED.getKey().equals(sfdx)){ - //上下班弹性 - List> needClockInStartList = needClockInSchedule.stream().filter(e -> ClassSegmentTypeEnum.WORK_TIME.getKey().equals(e.get("bdlx")) && CheckBoxEnum.CHECKED.getKey().equals(e.get("ksdk"))).collect(Collectors.toList()); + //第一条工作时段、早上加班必须要求打卡并且上班之前没有请假 + if (workScheduleList.size() > 0 && CheckBoxEnum.CHECKED.getKey().equals(sfdx)) { + //最大弹性分钟 + int zddxfz = Integer.valueOf(Util.null2String(workScheduleList.get(0).get("zddxfz"))); + //弹性核算 + int dxhs = Integer.valueOf(Util.null2String(workScheduleList.get(0).get("dxhs"))); + Map ksdkMap = workScheduleList.get(0); + String kssjStart = analysisDate + " " + Util.null2String(ksdkMap.get("dtkssj")); + String jssjStart = analysisDate + " " + Util.null2String(ksdkMap.get("dtjssj")); - List> needClockInEndList = needClockInSchedule.stream().filter(e -> ClassSegmentTypeEnum.WORK_TIME.getKey().equals(e.get("bdlx")) && CheckBoxEnum.CHECKED.getKey().equals(e.get("jsdk"))).collect(Collectors.toList()); - if (needClockInStartList.size()>0 && needClockInEndList.size()>0){ - Map ksdkMap = needClockInStartList.get(0); - String kssjStart = analysisDate + " " +Util.null2String(ksdkMap.get("dtkssj")); - String jssjStart = analysisDate +" "+Util.null2String(ksdkMap.get("dtjssj")); + Map jsdkMap = workScheduleList.get(workScheduleList.size() - 1); + int thdkfzs = Integer.valueOf(Util.null2String(jsdkMap.get("thdkfzs"))); + String kssjEnd = analysisDate + " " + Util.null2String(jsdkMap.get("dtkssj")); + String jssjEnd = analysisDate + " " + Util.null2String(jsdkMap.get("dtjssj")); - Map jsdkMap = needClockInEndList.get(needClockInEndList.size()-1); - int thdkfzs = Integer.valueOf(Util.null2String(jsdkMap.get("thdkfzs"))); - String kssjEnd = analysisDate + " " +Util.null2String(jsdkMap.get("dtkssj")); - String jssjEnd = analysisDate +" "+Util.null2String(jsdkMap.get("dtjssj")); + if (ksdkMap != jsdkMap) { + if (DateUtil.getTime(kssjStart).compareTo(DateUtil.getTime(jssjStart)) > 0) { + kssjStart = DateUtil.beforeDay(analysisDate, 1) + " " + Util.null2String(ksdkMap.get("dtkssj")); + } + if (DateUtil.getTime(kssjEnd).compareTo(DateUtil.getTime(jssjEnd)) > 0) { + jssjEnd = DateUtil.AfterDay(analysisDate, 1) + " " + Util.null2String(jsdkMap.get("dtjssj")); + } + } else { + jssjEnd = DateUtil.AfterDay(analysisDate, 1) + " " + Util.null2String(jsdkMap.get("dtjssj")); + } - if (ksdkMap != jsdkMap){ - if (DateUtil.getTime(kssjStart).compareTo(DateUtil.getTime(jssjStart)) > 0){ - kssjStart = DateUtil.beforeDay(analysisDate,1)+" "+Util.null2String(ksdkMap.get("dtkssj")); + //弹性上班时间 + String flexibleWorkTime = ""; + //弹性下班时间 + String flexibleOffWorkTime=""; + if (leaveAndEvctionList.size() >0){ + //第一笔请假、外出时间 + Map leaveAndEvctionMap = leaveAndEvctionList.get(0); + String leaveAndEvctionkssj = analysisDate + " " + Util.null2String(leaveAndEvctionMap.get("dtkssj")); + //最大开始弹性时间 + String minkssjStart = DateUtil.beforeMinutes(kssjStart,zddxfz); + String maxkssjStart = DateUtil.AfterMinutes(kssjStart,zddxfz); + //请假开始时间在最大开始弹性时间之内 + if (DateUtil.getTime(leaveAndEvctionkssj).compareTo(DateUtil.getTime(maxkssjStart))<=0){ + //弹性上班卡 + flexibleWorkTime = leaveAndEvctionkssj; + if (DateUtil.getTime(leaveAndEvctionkssj).compareTo(DateUtil.getTime(minkssjStart)) <0){ + flexibleWorkTime=minkssjStart; } - if (DateUtil.getTime(kssjEnd).compareTo(DateUtil.getTime(jssjEnd)) > 0){ - jssjEnd = DateUtil.AfterDay(analysisDate,1)+" "+Util.null2String(jsdkMap.get("dtjssj")); + + //弹性下班时间点 + int betweenToWorkTime = DateUtil.getBetWeenMinutes(flexibleWorkTime, kssjStart); + //弹性下班时间点 + flexibleOffWorkTime = jssjEnd; + if (betweenToWorkTime >= 0) { + flexibleOffWorkTime = DateUtil.beforeMinutes(flexibleOffWorkTime, Math.abs(betweenToWorkTime)); + } else if (betweenToWorkTime < 0) { + flexibleOffWorkTime = DateUtil.AfterMinutes(flexibleOffWorkTime, Math.abs(betweenToWorkTime)); } - }else { - jssjEnd = DateUtil.AfterDay(analysisDate,1)+" "+Util.null2String(jsdkMap.get("dtjssj")); + } - //弹性上班卡 - String flexibleWork = ""; - for (int i=0;i> clcokInTimeMap = clcokInTimeData.get(i); - //卡点 - String point = ""; - //当天打卡数据 - Map clcokInTime = null; - for (Map.Entry> entry :clcokInTimeMap.entrySet()){ - point = entry.getKey(); - clcokInTime = entry.getValue(); - } - //需要计算的班次打卡时间点 - String pointTime = point.split("\\|")[0]; - //start:开始打卡时间点,end:结束打卡时间点 - String pointType = point.split("\\|")[1]; - //empty:漏卡,equal:打卡时间和班次时间相等,before:打卡时间在班次时间之前,after:打卡时间在班次时间之后 - String timeType = point.split("\\|")[2]; + } + //弹性上班卡 + for (int i = 0; i < clcokInTimeData.size(); i++) { + Map> clcokInTimeMap = clcokInTimeData.get(i); + //卡点 + String point = ""; + //当天打卡数据 + Map clcokInTime = null; + for (Map.Entry> entry : clcokInTimeMap.entrySet()) { + point = entry.getKey(); + clcokInTime = entry.getValue(); + } + //需要计算的班次打卡时间点 + String pointTime = point.split("\\|")[0]; + //start:开始打卡时间点,end:结束打卡时间点 + String pointType = point.split("\\|")[1]; + //empty:漏卡,equal:打卡时间和班次时间相等,before:打卡时间在班次时间之前,after:打卡时间在班次时间之后 + String timeType = point.split("\\|")[2]; - if (pointTime.equals(kssjStart) && ClockPointEnum.START.getKey().equals(pointType) && clcokInTime != null){ - String signTime = clcokInTime.get("signdate")+" "+clcokInTime.get("signtime"); - //该卡点是弹性开始时间 - if (ClockPointEnum.BEFORE.getKey().equals(timeType)){ - int betWeenTime = DateUtil.getBetWeenMinutes(signTime,kssjStart); + if (pointTime.equals(kssjStart) && ClockPointEnum.START.getKey().equals(pointType) && clcokInTime != null + && CheckBoxEnum.CHECKED.getKey().equals(ifToWorkClock)) { + String signTime = clcokInTime.get("signdate") + " " + clcokInTime.get("signtime"); + //该卡点是弹性开始时间 + if ("".equals(flexibleWorkTime) ){ + //弹性上班期间未被请假开始时间占据 + if (ClockPointEnum.BEFORE.getKey().equals(timeType)) { + int betWeenTime = DateUtil.getBetWeenMinutes(signTime, kssjStart); String newPonit = point; - if (betWeenTime <= zddxfz){ - betWeenTime = Double.valueOf(Utils.getItemdurationDown(5.0, AccountingUnitEnum.MINUTES.getKey(),betWeenTime,AccountingUnitEnum.MINUTES)).intValue(); - flexibleWork = DateUtil.beforeMinutes(kssjStart,betWeenTime); - newPonit = pointTime+"|"+pointType+"|"+ClockPointEnum.EQUAL.getKey()+"|"+flexibleWork; - }else if (betWeenTime > zddxfz){ - newPonit = point +"|"+DateUtil.beforeMinutes(kssjStart,zddxfz); - flexibleWork = DateUtil.beforeMinutes(kssjStart,zddxfz); + if (betWeenTime <= zddxfz) { + betWeenTime = Double.valueOf(Utils.getItemdurationDown(dxhs, AccountingUnitEnum.MINUTES.getKey(), betWeenTime, AccountingUnitEnum.MINUTES)).intValue(); + flexibleWorkTime = DateUtil.beforeMinutes(kssjStart, betWeenTime); + newPonit = pointTime + "|" + pointType + "|" + ClockPointEnum.EQUAL.getKey() + "|" + flexibleWorkTime; + } else if (betWeenTime > zddxfz) { + flexibleWorkTime = DateUtil.beforeMinutes(kssjStart, zddxfz); + newPonit = point + "|" + flexibleWorkTime; } clcokInTimeMap.remove(point); - clcokInTimeMap.put(newPonit,clcokInTime); - }else if (ClockPointEnum.AFTER.getKey().equals(timeType)){ + clcokInTimeMap.put(newPonit, clcokInTime); + } else if (ClockPointEnum.AFTER.getKey().equals(timeType)) { //迟到 String newPonit = point; - int betWeenTime = DateUtil.getBetWeenMinutes(kssjStart,signTime); - if (betWeenTime <= zddxfz){ - betWeenTime = Double.valueOf(Utils.getItemduration(5.0, AccountingUnitEnum.MINUTES.getKey(),betWeenTime,AccountingUnitEnum.MINUTES)).intValue(); - flexibleWork = DateUtil.AfterMinutes(kssjStart,betWeenTime); - newPonit = pointTime+"|"+pointType+"|"+ClockPointEnum.EQUAL.getKey()+"|"+flexibleWork; - }else if (betWeenTime > zddxfz){ - newPonit = point +"|"+DateUtil.AfterMinutes(kssjStart,zddxfz); - flexibleWork = DateUtil.AfterMinutes(kssjStart,zddxfz); + int betWeenTime = DateUtil.getBetWeenMinutes(kssjStart, signTime); + if (betWeenTime <= zddxfz) { + betWeenTime = Double.valueOf(Utils.getItemduration(dxhs, AccountingUnitEnum.MINUTES.getKey(), betWeenTime, AccountingUnitEnum.MINUTES)).intValue(); + flexibleWorkTime = DateUtil.AfterMinutes(kssjStart, betWeenTime); + newPonit = pointTime + "|" + pointType + "|" + ClockPointEnum.EQUAL.getKey() + "|" + flexibleWorkTime; + } else if (betWeenTime > zddxfz) { + flexibleWorkTime = DateUtil.AfterMinutes(kssjStart, zddxfz); + newPonit = point + "|" + flexibleWorkTime; } clcokInTimeMap.remove(point); - clcokInTimeMap.put(newPonit,clcokInTime); + clcokInTimeMap.put(newPonit, clcokInTime); } - }else if (pointTime.equals(jssjEnd) && ClockPointEnum.END.getKey().equals(pointType) && clcokInTime != null){ - //该卡点是弹性下班点 - - int betweenToWorkTime = DateUtil.getBetWeenMinutes(flexibleWork,kssjStart); + }else { + //弹性上班期间被请假开始时间占据 + String newPonit = point +"|"+flexibleWorkTime; + clcokInTimeMap.remove(point); + clcokInTimeMap.put(newPonit, clcokInTime); + } + } else if (pointTime.equals(jssjEnd) && ClockPointEnum.END.getKey().equals(pointType) && CheckBoxEnum.CHECKED.getKey().equals(ifToCloseClock)) { + //该卡点是弹性下班点 + if ("".equals(flexibleOffWorkTime) && !"".equals(flexibleWorkTime)){ + int betweenToWorkTime = DateUtil.getBetWeenMinutes(flexibleWorkTime, kssjStart); //弹性下班时间点 - String flexibleOffWork = jssjEnd; - if (betweenToWorkTime >=0){ - flexibleOffWork = DateUtil.beforeMinutes(flexibleOffWork,Math.abs(betweenToWorkTime)); - }else if (betweenToWorkTime < 0){ - flexibleOffWork = DateUtil.AfterMinutes(flexibleOffWork,Math.abs(betweenToWorkTime)); + flexibleOffWorkTime = jssjEnd; + if (betweenToWorkTime >= 0) { + flexibleOffWorkTime = DateUtil.beforeMinutes(flexibleOffWorkTime, Math.abs(betweenToWorkTime)); + } else if (betweenToWorkTime < 0) { + flexibleOffWorkTime = DateUtil.AfterMinutes(flexibleOffWorkTime, Math.abs(betweenToWorkTime)); } - + } + if (!"".equals(flexibleOffWorkTime)){ //根据弹性下班时间点重新计算 - Map> jsdkNearestClcokInTime = Utils.getNearestClcokInTimeCmd(flexibleOffWork,clockInTimeList); + Map> jsdkNearestClcokInTime = Utils.getNearestClcokInTimeCmd(flexibleOffWorkTime, clockInTimeList); String newtimeType = ClockPointEnum.EMPTY.getKey(); - if (jsdkNearestClcokInTime.get(ClockPointEnum.EQUAL.getKey()) != null){ - newtimeType=ClockPointEnum.EQUAL.getKey(); + if (jsdkNearestClcokInTime.get(ClockPointEnum.EQUAL.getKey()) != null) { + newtimeType = ClockPointEnum.EQUAL.getKey(); } - if (ClockPointEnum.EMPTY.getKey().equals(newtimeType) && jsdkNearestClcokInTime.get(ClockPointEnum.AFTER.getKey()) != null){ - String clockInTime = jsdkNearestClcokInTime.get(ClockPointEnum.AFTER.getKey()).get("signdate") +" "+jsdkNearestClcokInTime.get(ClockPointEnum.AFTER.getKey()).get("signtime"); - if (DateUtil.getTime(clockInTime).compareTo(DateUtil.getTime(DateUtil.AfterMinutes(flexibleOffWork,thdkfzs))) <=0){ - newtimeType=ClockPointEnum.AFTER.getKey(); + if (ClockPointEnum.EMPTY.getKey().equals(newtimeType) && jsdkNearestClcokInTime.get(ClockPointEnum.AFTER.getKey()) != null) { + String clockInTime = jsdkNearestClcokInTime.get(ClockPointEnum.AFTER.getKey()).get("signdate") + " " + jsdkNearestClcokInTime.get(ClockPointEnum.AFTER.getKey()).get("signtime"); + if (DateUtil.getTime(clockInTime).compareTo(DateUtil.getTime(DateUtil.AfterMinutes(flexibleOffWorkTime, thdkfzs))) <= 0) { + newtimeType = ClockPointEnum.AFTER.getKey(); } } - if (ClockPointEnum.EMPTY.getKey().equals(newtimeType) && jsdkNearestClcokInTime.get(ClockPointEnum.BEFORE.getKey()) != null){ - String clockInTime = jsdkNearestClcokInTime.get(ClockPointEnum.BEFORE.getKey()).get("signdate") +" "+jsdkNearestClcokInTime.get(ClockPointEnum.BEFORE.getKey()).get("signtime"); - if (DateUtil.getTime(clockInTime).compareTo(DateUtil.getTime(kssjEnd)) >0){ - newtimeType=ClockPointEnum.BEFORE.getKey(); + if (ClockPointEnum.EMPTY.getKey().equals(newtimeType) && jsdkNearestClcokInTime.get(ClockPointEnum.BEFORE.getKey()) != null) { + String clockInTime = jsdkNearestClcokInTime.get(ClockPointEnum.BEFORE.getKey()).get("signdate") + " " + jsdkNearestClcokInTime.get(ClockPointEnum.BEFORE.getKey()).get("signtime"); + if (DateUtil.getTime(clockInTime).compareTo(DateUtil.getTime(kssjEnd)) > 0) { + newtimeType = ClockPointEnum.BEFORE.getKey(); } } - String newPonit = jssjEnd+"|"+ClockPointEnum.END.getKey()+"|"+newtimeType+"|"+flexibleOffWork; + String newPonit = jssjEnd + "|" + ClockPointEnum.END.getKey() + "|" + newtimeType + "|" + flexibleOffWorkTime; clcokInTimeMap.remove(point); - clcokInTimeMap.put(newPonit,jsdkNearestClcokInTime.get(newtimeType)); + clcokInTimeMap.put(newPonit, jsdkNearestClcokInTime.get(newtimeType)); } } - } } } - //当有2笔需要打卡时,可能会有打卡歧义的情况,歧义情况取2个时间点的中间值,当打卡时间小于中间值归属前一个打卡,大于则相反 - if (clcokInTimeData.size() >1){ - for (int i=0;i> beforeClcokInTimeData = clcokInTimeData.get(i); - Map> afterClcokInTimeData = clcokInTimeData.get(i+1); - Map beforeClcokInTimeMap = null; + + /** + * 当有2笔需要打卡时,可能会有打卡歧义的情况,歧义情况取2个时间点的中间值,当打卡时间小于中间值归属前一个打卡,大于则相反 + */ + if (clcokInTimeData.size() > 1) { + for (int i = 0; i < clcokInTimeData.size() - 1; i++) { + Map> beforeClcokInTimeData = clcokInTimeData.get(i); + Map> afterClcokInTimeData = clcokInTimeData.get(i + 1); + Map beforeClcokInTimeMap = null; String beforeClcokInTime = ""; String afterClcokInTime = ""; - Map afterClcokInTimeMap = null; - for (Map.Entry> beforeEntry :beforeClcokInTimeData.entrySet()){ + Map afterClcokInTimeMap = null; + for (Map.Entry> beforeEntry : beforeClcokInTimeData.entrySet()) { beforeClcokInTimeMap = beforeEntry.getValue(); beforeClcokInTime = beforeEntry.getKey(); } - for (Map.Entry> afterEntry :afterClcokInTimeData.entrySet()){ + for (Map.Entry> afterEntry : afterClcokInTimeData.entrySet()) { afterClcokInTimeMap = afterEntry.getValue(); afterClcokInTime = afterEntry.getKey(); } //重复 - if (beforeClcokInTimeMap != null && beforeClcokInTimeMap == afterClcokInTimeMap ){ + if (beforeClcokInTimeMap != null && beforeClcokInTimeMap == afterClcokInTimeMap) { String beforeTime = beforeClcokInTime.split("\\|")[0]; String afterTime = afterClcokInTime.split("\\|")[0]; - long betWeenMinutes = DateUtil.getBetWeenMinutes(beforeTime,afterTime); + long betWeenMinutes = DateUtil.getBetWeenMinutes(beforeTime, afterTime); - String middileTime = DateUtil.AfterMinutes(beforeTime,betWeenMinutes/2); + String middileTime = DateUtil.AfterMinutes(beforeTime, betWeenMinutes / 2); - String signdateTime = beforeClcokInTimeMap.get("signdate") +" "+beforeClcokInTimeMap.get("signtime"); + String signdateTime = beforeClcokInTimeMap.get("signdate") + " " + beforeClcokInTimeMap.get("signtime"); - if (DateUtil.getTime(signdateTime).compareTo(DateUtil.getTime(middileTime)) <=0){ + if (DateUtil.getTime(signdateTime).compareTo(DateUtil.getTime(middileTime)) <= 0) { //该打卡归属前一个打卡点 - afterClcokInTimeData.put(afterClcokInTime,null); - }else if (DateUtil.getTime(signdateTime).compareTo(DateUtil.getTime(middileTime)) >0){ + afterClcokInTimeData.put(afterClcokInTime, null); + } else if (DateUtil.getTime(signdateTime).compareTo(DateUtil.getTime(middileTime)) > 0) { //该打卡归属后一个打卡点 - beforeClcokInTimeData.put(beforeClcokInTime,null); + beforeClcokInTimeData.put(beforeClcokInTime, null); } } } diff --git a/src/com/engine/attendance/attendanceanalysis/cmd/recordDataCmd.java b/src/com/engine/attendance/attendanceanalysis/cmd/recordDataCmd.java index ec1a377..3990ea6 100644 --- a/src/com/engine/attendance/attendanceanalysis/cmd/recordDataCmd.java +++ b/src/com/engine/attendance/attendanceanalysis/cmd/recordDataCmd.java @@ -9,6 +9,7 @@ import com.engine.common.util.DbTools; import com.engine.core.interceptor.CommandContext; import com.google.common.collect.Lists; import lombok.extern.slf4j.Slf4j; +import weaver.conn.RecordSetTrans; import weaver.general.Util; import java.util.List; @@ -146,6 +147,32 @@ public class recordDataCmd extends AbstractCommonCommand> { DbTools.update(sql,insertDatas.toArray()); } + updateWorkOverTimeDate(userId,analysisDate); return null; } + + public void updateWorkOverTimeDate(String userId,String date){ + String sql = "select id from uf_jcl_kq_cqjg where ygid=? and rq=?"; + List> dataList = DbTools.getSqlToList(sql,userId,date); + if (dataList.size() > 0){ + String id = Util.null2String(dataList.get(0).get("id")); + RecordSetTrans rst = new RecordSetTrans(); + rst.setAutoCommit(false); + try { + sql = "delete from uf_jcl_kq_jbjg where lyid=?"; + rst.executeUpdate(sql,id); + sql = "delete from uf_jcl_kq_jqye where lyid=?"; + rst.executeUpdate(sql,id); + sql = "update uf_jcl_kq_jbjg set lyid =? where lyid=?"; + rst.executeUpdate(sql,id,userId+"-"+DateUtil.getCurrentDate()); + sql = "update uf_jcl_kq_jqye set lyid =? where lyid=?"; + rst.executeUpdate(sql,id,userId+"-"+DateUtil.getCurrentDate()); + rst.commit(); + }catch (Exception e){ + rst.rollback(); + log.error("updateWorkOverTimeDate error :{}",e); + } + } + } + } diff --git a/src/com/engine/attendance/attendanceanalysis/service/impl/AbnormalAttendanceServiceImpl.java b/src/com/engine/attendance/attendanceanalysis/service/impl/AbnormalAttendanceServiceImpl.java index e147cdd..3db3f37 100644 --- a/src/com/engine/attendance/attendanceanalysis/service/impl/AbnormalAttendanceServiceImpl.java +++ b/src/com/engine/attendance/attendanceanalysis/service/impl/AbnormalAttendanceServiceImpl.java @@ -89,7 +89,10 @@ public class AbnormalAttendanceServiceImpl extends Service implements AbnormalAt saveWorkTimeBeLateParam.put("betweenMinutes",between); saveWorkTimeBeLateParam.put("itemType", AttendanceItemTypeEnum.LATE); saveWorkTimeBeLateParam.put("hsdw",hsdw); + saveWorkTimeBeLateParam.put("hsl",hsl); saveWorkTimeBeLateParam.put("kczgsc",kczgsc); + saveWorkTimeBeLateParam.put("classStartTime",classStartTime); + saveWorkTimeBeLateParam.put("classEndTime",clockInTime); resultList.add(saveWorkTimeBeLateParam); } @@ -133,7 +136,10 @@ public class AbnormalAttendanceServiceImpl extends Service implements AbnormalAt saveWorkTimeBeLateParam.put("betweenMinutes",between); saveWorkTimeBeLateParam.put("itemType", AttendanceItemTypeEnum.LATE); saveWorkTimeBeLateParam.put("hsdw",hsdw); + saveWorkTimeBeLateParam.put("hsl",hsl); saveWorkTimeBeLateParam.put("kczgsc",kczgsc); + saveWorkTimeBeLateParam.put("classStartTime",classStartTime); + saveWorkTimeBeLateParam.put("classEndTime",clockInTime); resultList.add(saveWorkTimeBeLateParam); } @@ -177,6 +183,9 @@ public class AbnormalAttendanceServiceImpl extends Service implements AbnormalAt saveWorkTimeBeLateParam.put("itemType", AttendanceItemTypeEnum.LATE); saveWorkTimeBeLateParam.put("hsdw",hsdw); saveWorkTimeBeLateParam.put("kczgsc",kczgsc); + saveWorkTimeBeLateParam.put("hsl",hsl); + saveWorkTimeBeLateParam.put("classStartTime",classStartTime); + saveWorkTimeBeLateParam.put("classEndTime",clockInTime); resultList.add(saveWorkTimeBeLateParam); } @@ -256,6 +265,9 @@ public class AbnormalAttendanceServiceImpl extends Service implements AbnormalAt saveWorkTimeBeLateParam.put("itemType", AttendanceItemTypeEnum.LEAVE_EARLY); saveWorkTimeBeLateParam.put("hsdw",hsdw); saveWorkTimeBeLateParam.put("kczgsc",kczgsc); + saveWorkTimeBeLateParam.put("hsl",hsl); + saveWorkTimeBeLateParam.put("classStartTime",clockInTime); + saveWorkTimeBeLateParam.put("classEndTime",classEndTime); resultList.add(saveWorkTimeBeLateParam); } @@ -301,6 +313,9 @@ public class AbnormalAttendanceServiceImpl extends Service implements AbnormalAt saveWorkTimeBeLateParam.put("itemType", AttendanceItemTypeEnum.LEAVE_EARLY); saveWorkTimeBeLateParam.put("hsdw",hsdw); saveWorkTimeBeLateParam.put("kczgsc",kczgsc); + saveWorkTimeBeLateParam.put("hsl",hsl); + saveWorkTimeBeLateParam.put("classStartTime",clockInTime); + saveWorkTimeBeLateParam.put("classEndTime",classEndTime); resultList.add(saveWorkTimeBeLateParam); } @@ -345,6 +360,9 @@ public class AbnormalAttendanceServiceImpl extends Service implements AbnormalAt saveWorkTimeBeLateParam.put("itemType", AttendanceItemTypeEnum.LEAVE_EARLY); saveWorkTimeBeLateParam.put("hsdw",hsdw); saveWorkTimeBeLateParam.put("kczgsc",kczgsc); + saveWorkTimeBeLateParam.put("hsl",hsl); + saveWorkTimeBeLateParam.put("classStartTime",clockInTime); + saveWorkTimeBeLateParam.put("classEndTime",classEndTime); resultList.add(saveWorkTimeBeLateParam); } diff --git a/src/com/engine/attendance/attendanceanalysis/service/impl/AskForLeaveServiceImpl.java b/src/com/engine/attendance/attendanceanalysis/service/impl/AskForLeaveServiceImpl.java index 8a0d5f3..41461f7 100644 --- a/src/com/engine/attendance/attendanceanalysis/service/impl/AskForLeaveServiceImpl.java +++ b/src/com/engine/attendance/attendanceanalysis/service/impl/AskForLeaveServiceImpl.java @@ -1,6 +1,8 @@ package com.engine.attendance.attendanceanalysis.service.impl; import com.engine.attendance.attendanceanalysis.service.AskForLeaveService; +import com.engine.attendance.enums.AccountingUnitEnum; +import com.engine.attendance.enums.AttendanceItemTypeEnum; import com.engine.attendance.enums.CheckBoxEnum; import com.engine.attendance.enums.WorkForTimeEnum; import com.engine.common.util.DateUtil; @@ -31,13 +33,26 @@ public class AskForLeaveServiceImpl extends Service implements AskForLeaveServic List> offsetAskForLeaveAnomaly = Lists.newArrayList(); for (int i=0;i=0){ + AttendanceItemTypeEnum itemType = (AttendanceItemTypeEnum)abnormalClockInList.get(i).get("itemType"); + String classStartTime = Util.null2String(abnormalClockInList.get(i).get("classStartTime")); + String classEndTime = Util.null2String(abnormalClockInList.get(i).get("classEndTime")); + if ((zysd.contains(Utils.getWorkFor(bdlx)) || zysd.contains(WorkForTimeEnum.ALL_TIME.getKey())) && + !AttendanceItemTypeEnum.MISSE_CARD.equals(itemType)){ + Map leaveMap = Maps.newHashMap(); + leaveMap.put("kssj",kssj); + leaveMap.put("jssj",jssj); + int betweenTime = DateUtil.getBetWeenMinutes(classStartTime,classEndTime); + int intersectionTime = Utils.getIntersectionTime(classStartTime,classEndTime,leaveMap); + if (betweenTime == intersectionTime){ offsetAskForLeaveAnomaly.add(abnormalClockInList.get(i)); + }else { + String hsdw = Util.null2String(abnormalClockInList.get(i).get("hsdw")); + int hsl = Integer.valueOf(Util.null2String(abnormalClockInList.get(i).get("hsl"))); + double itemduration = Utils.getItemduration(hsl,hsdw,betweenTime-intersectionTime, AccountingUnitEnum.MINUTES); + abnormalClockInList.get(i).put("itemduration",itemduration); } + } } abnormalClockInList.removeAll(offsetAskForLeaveAnomaly); diff --git a/src/com/engine/attendance/attendanceanalysis/service/impl/EvectionServiceImpl.java b/src/com/engine/attendance/attendanceanalysis/service/impl/EvectionServiceImpl.java index 49a8086..eeccf0e 100644 --- a/src/com/engine/attendance/attendanceanalysis/service/impl/EvectionServiceImpl.java +++ b/src/com/engine/attendance/attendanceanalysis/service/impl/EvectionServiceImpl.java @@ -1,6 +1,8 @@ package com.engine.attendance.attendanceanalysis.service.impl; import com.engine.attendance.attendanceanalysis.service.EvectionService; +import com.engine.attendance.enums.AccountingUnitEnum; +import com.engine.attendance.enums.AttendanceItemTypeEnum; import com.engine.attendance.enums.CheckBoxEnum; import com.engine.attendance.enums.WorkForTimeEnum; import com.engine.common.util.DateUtil; @@ -29,12 +31,25 @@ public class EvectionServiceImpl extends Service implements EvectionService { List> offsetEvectionAnomaly = Lists.newArrayList(); for (int i=0;i= 0) { + AttendanceItemTypeEnum itemType = (AttendanceItemTypeEnum)abnormalClockInList.get(i).get("itemType"); + String classStartTime = Util.null2String(abnormalClockInList.get(i).get("classStartTime")); + String classEndTime = Util.null2String(abnormalClockInList.get(i).get("classEndTime")); + if ((zysd.contains(Utils.getWorkFor(bdlx)) || zysd.contains(WorkForTimeEnum.ALL_TIME.getKey())) && + !AttendanceItemTypeEnum.MISSE_CARD.equals(itemType)) { + + Map leaveMap = Maps.newHashMap(); + leaveMap.put("kssj",kssj); + leaveMap.put("jssj",jssj); + int betweenTime = DateUtil.getBetWeenMinutes(classStartTime,classEndTime); + int intersectionTime = Utils.getIntersectionTime(classStartTime,classEndTime,leaveMap); + if (betweenTime == intersectionTime){ offsetEvectionAnomaly.add(abnormalClockInList.get(i)); + }else { + String hsdw = Util.null2String(abnormalClockInList.get(i).get("hsdw")); + int hsl = Integer.valueOf(Util.null2String(abnormalClockInList.get(i).get("hsl"))); + double itemduration = Utils.getItemduration(hsl,hsdw,betweenTime-intersectionTime, AccountingUnitEnum.MINUTES); + abnormalClockInList.get(i).put("itemduration",itemduration); } } } diff --git a/src/com/engine/attendance/attendanceanalysis/service/impl/UtilServiceImpl.java b/src/com/engine/attendance/attendanceanalysis/service/impl/UtilServiceImpl.java index 60f64af..ede3001 100644 --- a/src/com/engine/attendance/attendanceanalysis/service/impl/UtilServiceImpl.java +++ b/src/com/engine/attendance/attendanceanalysis/service/impl/UtilServiceImpl.java @@ -16,11 +16,9 @@ import com.engine.core.impl.Service; import com.google.common.collect.Lists; import com.google.common.collect.Maps; import lombok.extern.slf4j.Slf4j; -import weaver.conn.RecordSet; import weaver.general.Util; import java.util.List; import java.util.Map; -import java.util.UUID; import java.util.stream.Collectors; @Slf4j @@ -132,11 +130,11 @@ public class UtilServiceImpl extends Service implements UtilService { map.put("dtjssj",overtimePlan.get("jssj")); map.put("ksdk","0"); map.put("jsdk","0"); - map.put("tqdkfzs","30"); - map.put("thdkfzs","30"); - map.put("sfdx","0"); - map.put("zddxfz","0"); - map.put("dxhs","0"); + map.put("tqdkfzs","60"); + map.put("thdkfzs","60"); + map.put("sfdx",Util.null2String(dataList.get(0).get("sfdx"))); + map.put("zddxfz",Util.null2String(dataList.get(0).get("zddxfz"))); + map.put("dxhs",Util.null2String(dataList.get(0).get("dxhs"))); map.put("rqlx",dateMap.get(e.getKey())); map.put("edxss",overtimePlan.get("jbsc")); if (attendanceItems.size() >0){ diff --git a/src/com/engine/attendance/attendanceanalysis/service/impl/WorkOverTimeServiceImpl.java b/src/com/engine/attendance/attendanceanalysis/service/impl/WorkOverTimeServiceImpl.java index e04b385..a443e4e 100644 --- a/src/com/engine/attendance/attendanceanalysis/service/impl/WorkOverTimeServiceImpl.java +++ b/src/com/engine/attendance/attendanceanalysis/service/impl/WorkOverTimeServiceImpl.java @@ -3,7 +3,6 @@ package com.engine.attendance.attendanceanalysis.service.impl; import com.engine.attendance.attendanceanalysis.cmd.item.WorkOvertimeItemCmd; import com.engine.attendance.attendanceanalysis.service.WorkOverTimeService; import com.engine.attendance.enums.*; -import com.engine.common.util.CommonUtil; import com.engine.common.util.DateUtil; import com.engine.common.util.DbTools; import com.engine.common.util.Utils; @@ -380,6 +379,7 @@ public class WorkOverTimeServiceImpl extends Service implements WorkOverTimeServ insertParam.put("sjjssj",realityEndime.split(" ")[1]); insertParam.put("sjjbsc",itemduration); insertParam.put("jbjgly","4"); + insertParam.put("lyid",userId+"-"+DateUtil.getCurrentDate()); insertParam.put("zt","1"); Utils.InsertFormTable("uf_jcl_kq_jbjg",insertParam,(Map)params.get("formmodeIdMap")); @@ -391,6 +391,7 @@ public class WorkOverTimeServiceImpl extends Service implements WorkOverTimeServ Map insertHoliDayParam = Maps.newHashMap(); insertHoliDayParam.put("ygid",userId); insertHoliDayParam.put("jqid",workTimeBeLateItems.get(0).get("zrdjb")); + insertHoliDayParam.put("lyid",userId+"-"+DateUtil.getCurrentDate()); //转入的假期额度生效日期 String yesxrq = Util.null2String(workTimeBeLateItems.get(0).get("yesxrq")); if ("0".equals(yesxrq)){ @@ -407,47 +408,47 @@ public class WorkOverTimeServiceImpl extends Service implements WorkOverTimeServ String yekyzq = Util.null2String(workTimeBeLateItems.get(0).get("yekyzq")); if ("0".equals(yekyzq)){ //一个月 - insertHoliDayParam.put("jzrq",DateUtil.nextMonth(analysisDate,1,DateUtil.yyyyMMdd)); + insertHoliDayParam.put("jzrq",DateUtil.nextMonth(insertHoliDayParam.get("sxrq").toString(),1,DateUtil.yyyyMMdd)); }else if ("1".equals(yekyzq)){ //两个月 - insertHoliDayParam.put("jzrq",DateUtil.nextMonth(analysisDate,2,DateUtil.yyyyMMdd)); + insertHoliDayParam.put("jzrq",DateUtil.nextMonth(insertHoliDayParam.get("sxrq").toString(),2,DateUtil.yyyyMMdd)); }else if ("2".equals(yekyzq)){ //三个月 - insertHoliDayParam.put("jzrq",DateUtil.nextMonth(analysisDate,3,DateUtil.yyyyMMdd)); + insertHoliDayParam.put("jzrq",DateUtil.nextMonth(insertHoliDayParam.get("sxrq").toString(),3,DateUtil.yyyyMMdd)); }else if ("3".equals(yekyzq)){ //六个月 - insertHoliDayParam.put("jzrq",DateUtil.nextMonth(analysisDate,6,DateUtil.yyyyMMdd)); + insertHoliDayParam.put("jzrq",DateUtil.nextMonth(insertHoliDayParam.get("sxrq").toString(),6,DateUtil.yyyyMMdd)); }else if ("4".equals(yekyzq)){ //十二个月 - insertHoliDayParam.put("jzrq",DateUtil.nextMonth(analysisDate,12,DateUtil.yyyyMMdd)); + insertHoliDayParam.put("jzrq",DateUtil.nextMonth(insertHoliDayParam.get("sxrq").toString(),12,DateUtil.yyyyMMdd)); }else if ("5".equals(yekyzq)){ //季度 - insertHoliDayParam.put("jzrq",DateUtil.nextMonth(analysisDate,3,DateUtil.yyyyMMdd)); + insertHoliDayParam.put("jzrq",DateUtil.nextMonth(insertHoliDayParam.get("sxrq").toString(),3,DateUtil.yyyyMMdd)); }else if ("6".equals(yekyzq)){ //半年 - insertHoliDayParam.put("jzrq",DateUtil.nextMonth(analysisDate,6,DateUtil.yyyyMMdd)); + insertHoliDayParam.put("jzrq",DateUtil.nextMonth(insertHoliDayParam.get("sxrq").toString(),6,DateUtil.yyyyMMdd)); }else if ("7".equals(yekyzq)){ //一年 - insertHoliDayParam.put("jzrq",DateUtil.nextMonth(analysisDate,12,DateUtil.yyyyMMdd)); + insertHoliDayParam.put("jzrq",DateUtil.nextMonth(insertHoliDayParam.get("sxrq").toString(),12,DateUtil.yyyyMMdd)); } insertHoliDayParam.put("ktsc",itemduration); String zdyqsc = Util.null2String(workTimeBeLateItems.get(0).get("zdyqsc")); if ("0".equals(zdyqsc)){ //一个月 - insertHoliDayParam.put("yqsxrq",DateUtil.nextMonth(analysisDate,1,DateUtil.yyyyMMdd)); + insertHoliDayParam.put("yqsxrq",DateUtil.nextMonth(insertHoliDayParam.get("jzrq").toString(),1,DateUtil.yyyyMMdd)); }else if ("1".equals(zdyqsc)){ //两个月 - insertHoliDayParam.put("yqsxrq",DateUtil.nextMonth(analysisDate,2,DateUtil.yyyyMMdd)); + insertHoliDayParam.put("yqsxrq",DateUtil.nextMonth(insertHoliDayParam.get("jzrq").toString(),2,DateUtil.yyyyMMdd)); }else if ("2".equals(zdyqsc)){ //三个月 - insertHoliDayParam.put("yqsxrq",DateUtil.nextMonth(analysisDate,3,DateUtil.yyyyMMdd)); + insertHoliDayParam.put("yqsxrq",DateUtil.nextMonth(insertHoliDayParam.get("jzrq").toString(),3,DateUtil.yyyyMMdd)); }else if ("3".equals(zdyqsc)){ //半年 - insertHoliDayParam.put("yqsxrq",DateUtil.nextMonth(analysisDate,6,DateUtil.yyyyMMdd)); + insertHoliDayParam.put("yqsxrq",DateUtil.nextMonth(insertHoliDayParam.get("jzrq").toString(),6,DateUtil.yyyyMMdd)); }else if ("4".equals(zdyqsc)){ //一年 - insertHoliDayParam.put("yqsxrq",DateUtil.nextMonth(analysisDate,12,DateUtil.yyyyMMdd)); + insertHoliDayParam.put("yqsxrq",DateUtil.nextMonth(insertHoliDayParam.get("jzrq").toString(),12,DateUtil.yyyyMMdd)); } Utils.InsertFormTable("uf_jcl_kq_jqye",insertHoliDayParam,(Map)params.get("formmodeIdMap")); diff --git a/src/com/engine/attendance/attendanceanalysis/wrapper/AttendanceAnalysisWrapper.java b/src/com/engine/attendance/attendanceanalysis/wrapper/AttendanceAnalysisWrapper.java index 244f037..fe89bee 100644 --- a/src/com/engine/attendance/attendanceanalysis/wrapper/AttendanceAnalysisWrapper.java +++ b/src/com/engine/attendance/attendanceanalysis/wrapper/AttendanceAnalysisWrapper.java @@ -1,14 +1,11 @@ package com.engine.attendance.attendanceanalysis.wrapper; -import com.engine.attendance.attendanceanalysis.cmd.GetClockInPointCmd; import com.engine.attendance.attendanceanalysis.service.ForgetClockInService; import com.engine.attendance.attendanceanalysis.service.UtilService; import com.engine.attendance.attendanceanalysis.service.impl.ForgetClockInServiceImpl; import com.engine.attendance.attendanceanalysis.service.impl.UtilServiceImpl; -import com.engine.attendance.enums.AccountingUnitEnum; import com.engine.attendance.enums.CheckBoxEnum; import com.engine.attendance.enums.ClassSegmentTypeEnum; -import com.engine.attendance.enums.ClockPointEnum; import com.engine.common.util.DateUtil; import com.engine.common.util.DbTools; import com.engine.common.util.ServiceUtil; @@ -172,6 +169,7 @@ public class AttendanceAnalysisWrapper extends Service { sql = "select hsl,hsdw,lgsbxydk,tqlghlfzs,fgsbxydk,thfghlfzs,tybcndbjlhbjs,zdycbcndfgzsd,zdycrqqjndxxb,zysd from uf_jcl_kq_kqxm where id=?"; + List> askForLeaveAndEvctionSchedule = Lists.newArrayList(); for (Map askForLeaveData : askForLeaveList){ Map askForLeaveItem = DbTools.getSqlToMap(sql,askForLeaveData.get("jqlx")); //全天请假 @@ -188,10 +186,11 @@ public class AttendanceAnalysisWrapper extends Service { } askForLeaveItems.put(askForLeaveData.get("jqlx").toString(),askForLeaveItem); + List> finalScheduleResult = scheduleResult; Map askForLeaveMap = new HashMap(){{ - put("bcxx",scheduleResult.get(0).get("bcxx")); - put("bcsdxx",scheduleResult.get(0).get("bcsdxx")); - put("edsc",scheduleResult.get(0).get("edsc")); + put("bcxx", finalScheduleResult.get(0).get("bcxx")); + put("bcsdxx", finalScheduleResult.get(0).get("bcsdxx")); + put("edsc", finalScheduleResult.get(0).get("edsc")); put("bdlx", ClassSegmentTypeEnum.EVECTION.getKey()); put("dtkssj",askForLeaveData.get("kssj")); put("dtjssj",askForLeaveData.get("jssj")); @@ -199,14 +198,13 @@ public class AttendanceAnalysisWrapper extends Service { put("jsdk",askForLeaveItem.get("lgsbxydk")); put("tqdkfzs","60"); put("thdkfzs","60"); - put("sfdx","1"); - put("zddxfz",askForLeaveItem.get("tqlghlfzs")); - put("dxhs",askForLeaveItem.get("thfghlfzs")); + put("tqlghlfzs",askForLeaveItem.get("tqlghlfzs")); + put("thfghlfzs",askForLeaveItem.get("thfghlfzs")); }}; - if (!"".equals(Util.null2String(askForLeaveData.get("kssj"))) && !"".equals(Util.null2String(askForLeaveData.get("jssj"))) &&(CheckBoxEnum.CHECKED.getKey().equals(askForLeaveItem.get("lgsbxydk")) || CheckBoxEnum.CHECKED.getKey().equals(askForLeaveItem.get("fgsbxydk")))){ - needClockInSchedule.add(askForLeaveMap); - scheduleResult.add(askForLeaveMap); + if (!"".equals(Util.null2String(askForLeaveData.get("kssj"))) && !"".equals(Util.null2String(askForLeaveData.get("jssj")))){ + //scheduleResult.add(askForLeaveMap); + askForLeaveAndEvctionSchedule.add(askForLeaveMap); } } for (Map evectionData :evectionList){ @@ -224,10 +222,11 @@ public class AttendanceAnalysisWrapper extends Service { return; } evectionItems.put(evectionData.get("cclx").toString(),evectionItem); + List> finalScheduleResult1 = scheduleResult; Map evectionMap = new HashMap(){{ - put("bcxx",scheduleResult.get(0).get("bcxx")); - put("bcsdxx",scheduleResult.get(0).get("bcsdxx")); - put("edsc",scheduleResult.get(0).get("edsc")); + put("bcxx", finalScheduleResult1.get(0).get("bcxx")); + put("bcsdxx", finalScheduleResult1.get(0).get("bcsdxx")); + put("edsc", finalScheduleResult1.get(0).get("edsc")); put("bdlx", ClassSegmentTypeEnum.ASK_FOR_LEAVE.getKey()); put("dtkssj",evectionData.get("kssj")); put("dtjssj",evectionData.get("jssj")); @@ -235,22 +234,22 @@ public class AttendanceAnalysisWrapper extends Service { put("jsdk",evectionItem.get("lgsbxydk")); put("tqdkfzs","60"); put("thdkfzs","60"); - put("sfdx","1"); - put("zddxfz",evectionItem.get("tqlghlfzs")); - put("dxhs",evectionItem.get("thfghlfzs")); + put("tqlghlfzs",evectionItem.get("tqlghlfzs")); + put("thfghlfzs",evectionItem.get("thfghlfzs")); }}; - if (!"".equals(Util.null2String(evectionData.get("kssj"))) && !"".equals(Util.null2String(evectionData.get("jssj"))) && (CheckBoxEnum.CHECKED.getKey().equals(evectionItem.get("lgsbxydk")) || CheckBoxEnum.CHECKED.getKey().equals(evectionItem.get("fgsbxydk")))){ - needClockInSchedule.add(evectionMap); - scheduleResult.add(evectionMap); + if (!"".equals(Util.null2String(evectionData.get("kssj"))) && !"".equals(Util.null2String(evectionData.get("jssj")))){ + //scheduleResult.add(evectionMap); + askForLeaveAndEvctionSchedule.add(evectionMap); } } - needClockInSchedule = needClockInSchedule.stream().sorted(Comparator.comparing(e->DateUtil.getTime(analysisDate+" "+e.get("dtkssj")).toInstant(ZoneOffset.of("+8")).toEpochMilli())).collect(Collectors.toList()); + scheduleResult = scheduleResult.stream().sorted(Comparator.comparing(e->DateUtil.getTime(analysisDate+" "+e.get("dtkssj")).toInstant(ZoneOffset.of("+8")).toEpochMilli())).collect(Collectors.toList()); Map clcokInTimeDataParam = Maps.newHashMap(); clcokInTimeDataParam.put("analysisDate",analysisDate); - clcokInTimeDataParam.put("needClockInSchedule",needClockInSchedule); + clcokInTimeDataParam.put("scheduleResult",scheduleResult); clcokInTimeDataParam.put("clockInTimeList",clockInTimeList); + clcokInTimeDataParam.put("askForLeaveAndEvctionSchedule",askForLeaveAndEvctionSchedule); List>> clcokInTimeData = utilService.getClockInPointCmd(clcokInTimeDataParam); Map recordAbnormalParam = Maps.newHashMap(); diff --git a/src/com/engine/common/util/Utils.java b/src/com/engine/common/util/Utils.java index a9f1a64..773fea6 100644 --- a/src/com/engine/common/util/Utils.java +++ b/src/com/engine/common/util/Utils.java @@ -428,12 +428,40 @@ public class Utils { log.info("请假外出时间 左边"); }else if (DateUtil.getTime(kssj).compareTo(DateUtil.getTime(leavekssj)) >=0 && DateUtil.getTime(jssj).compareTo(DateUtil.getTime(leavejssj)) <=0){ //请假外出时间中间 - betweenMinutes = 0; + betweenMinutes = DateUtil.getBetWeenMinutes(kssj,jssj); log.info("加班实际在请假外出时间中间"); } return betweenMinutes; } + /** + * map中的开始时间和结束时间,在kssj和jssj中占据的分钟数 + * @return + */ + public static int getIntersectionTime(String kssj,String jssj,Map map){ + String leavekssj = map.get("kssj").toString(); + String leavejssj = map.get("jssj").toString(); + int betweenMinutes=0; + if (DateUtil.getTime(kssj).compareTo(DateUtil.getTime(leavekssj)) <=0 && DateUtil.getTime(jssj).compareTo(DateUtil.getTime(leavejssj)) >=0){ + //时间在中间 + betweenMinutes = DateUtil.getBetWeenMinutes(leavekssj,leavejssj); + log.info("时间在中间,被包含"); + }else if (DateUtil.getTime(kssj).compareTo(DateUtil.getTime(leavekssj)) <=0 && DateUtil.getTime(jssj).compareTo(DateUtil.getTime(leavejssj)) <=0 && DateUtil.getTime(jssj).compareTo(DateUtil.getTime(leavekssj)) >=0){ + //时间 右边 + betweenMinutes = DateUtil.getBetWeenMinutes(leavekssj,jssj); + log.info("时间 右边"); + }else if (DateUtil.getTime(kssj).compareTo(DateUtil.getTime(leavekssj)) >=0 && DateUtil.getTime(jssj).compareTo(DateUtil.getTime(leavejssj)) >=0 && DateUtil.getTime(kssj).compareTo(DateUtil.getTime(leavejssj)) <=0){ + //时间 左边 + betweenMinutes = DateUtil.getBetWeenMinutes(kssj,leavejssj); + log.info("时间 左边"); + }else if (DateUtil.getTime(kssj).compareTo(DateUtil.getTime(leavekssj)) >=0 && DateUtil.getTime(jssj).compareTo(DateUtil.getTime(leavejssj)) <=0){ + //请假外出时间中间 + betweenMinutes = DateUtil.getBetWeenMinutes(kssj,jssj); + log.info("时间在中间,包含"); + } + return betweenMinutes; + } + public static Map getFormmodeIdMap(){ String sql = "select modeid,tablename from uf_jcl_form_table "; List> dataList = DbTools.getSqlToList(sql); diff --git a/target/classes/com/engine/attendance/attendanceanalysis/cmd/GetClockInPointCmd.class b/target/classes/com/engine/attendance/attendanceanalysis/cmd/GetClockInPointCmd.class index 110e3b6..d225959 100644 Binary files a/target/classes/com/engine/attendance/attendanceanalysis/cmd/GetClockInPointCmd.class and b/target/classes/com/engine/attendance/attendanceanalysis/cmd/GetClockInPointCmd.class differ diff --git a/target/classes/com/engine/attendance/attendanceanalysis/cmd/recordDataCmd.class b/target/classes/com/engine/attendance/attendanceanalysis/cmd/recordDataCmd.class index 6f8b149..d4be6c9 100644 Binary files a/target/classes/com/engine/attendance/attendanceanalysis/cmd/recordDataCmd.class and b/target/classes/com/engine/attendance/attendanceanalysis/cmd/recordDataCmd.class differ diff --git a/target/classes/com/engine/attendance/attendanceanalysis/service/impl/AbnormalAttendanceServiceImpl.class b/target/classes/com/engine/attendance/attendanceanalysis/service/impl/AbnormalAttendanceServiceImpl.class index 87424a0..308ec40 100644 Binary files a/target/classes/com/engine/attendance/attendanceanalysis/service/impl/AbnormalAttendanceServiceImpl.class and b/target/classes/com/engine/attendance/attendanceanalysis/service/impl/AbnormalAttendanceServiceImpl.class differ diff --git a/target/classes/com/engine/attendance/attendanceanalysis/service/impl/AskForLeaveServiceImpl.class b/target/classes/com/engine/attendance/attendanceanalysis/service/impl/AskForLeaveServiceImpl.class index f04e9ab..6b6ab9a 100644 Binary files a/target/classes/com/engine/attendance/attendanceanalysis/service/impl/AskForLeaveServiceImpl.class and b/target/classes/com/engine/attendance/attendanceanalysis/service/impl/AskForLeaveServiceImpl.class differ diff --git a/target/classes/com/engine/attendance/attendanceanalysis/service/impl/EvectionServiceImpl.class b/target/classes/com/engine/attendance/attendanceanalysis/service/impl/EvectionServiceImpl.class index 679301b..b8588de 100644 Binary files a/target/classes/com/engine/attendance/attendanceanalysis/service/impl/EvectionServiceImpl.class and b/target/classes/com/engine/attendance/attendanceanalysis/service/impl/EvectionServiceImpl.class differ diff --git a/target/classes/com/engine/attendance/attendanceanalysis/service/impl/UtilServiceImpl.class b/target/classes/com/engine/attendance/attendanceanalysis/service/impl/UtilServiceImpl.class index 1169b39..83a41d7 100644 Binary files a/target/classes/com/engine/attendance/attendanceanalysis/service/impl/UtilServiceImpl.class and b/target/classes/com/engine/attendance/attendanceanalysis/service/impl/UtilServiceImpl.class differ diff --git a/target/classes/com/engine/attendance/attendanceanalysis/service/impl/WorkOverTimeServiceImpl.class b/target/classes/com/engine/attendance/attendanceanalysis/service/impl/WorkOverTimeServiceImpl.class index c11a91d..b9306cd 100644 Binary files a/target/classes/com/engine/attendance/attendanceanalysis/service/impl/WorkOverTimeServiceImpl.class and b/target/classes/com/engine/attendance/attendanceanalysis/service/impl/WorkOverTimeServiceImpl.class differ diff --git a/target/classes/com/engine/attendance/attendanceanalysis/wrapper/AttendanceAnalysisWrapper$1.class b/target/classes/com/engine/attendance/attendanceanalysis/wrapper/AttendanceAnalysisWrapper$1.class index 97b1f7a..193c603 100644 Binary files a/target/classes/com/engine/attendance/attendanceanalysis/wrapper/AttendanceAnalysisWrapper$1.class and b/target/classes/com/engine/attendance/attendanceanalysis/wrapper/AttendanceAnalysisWrapper$1.class differ diff --git a/target/classes/com/engine/attendance/attendanceanalysis/wrapper/AttendanceAnalysisWrapper$2.class b/target/classes/com/engine/attendance/attendanceanalysis/wrapper/AttendanceAnalysisWrapper$2.class index c0d4b81..8f942b1 100644 Binary files a/target/classes/com/engine/attendance/attendanceanalysis/wrapper/AttendanceAnalysisWrapper$2.class and b/target/classes/com/engine/attendance/attendanceanalysis/wrapper/AttendanceAnalysisWrapper$2.class differ diff --git a/target/classes/com/engine/attendance/attendanceanalysis/wrapper/AttendanceAnalysisWrapper.class b/target/classes/com/engine/attendance/attendanceanalysis/wrapper/AttendanceAnalysisWrapper.class index 369305d..63de041 100644 Binary files a/target/classes/com/engine/attendance/attendanceanalysis/wrapper/AttendanceAnalysisWrapper.class and b/target/classes/com/engine/attendance/attendanceanalysis/wrapper/AttendanceAnalysisWrapper.class differ diff --git a/target/classes/com/engine/common/util/Utils.class b/target/classes/com/engine/common/util/Utils.class index 6877cad..0cf5ba8 100644 Binary files a/target/classes/com/engine/common/util/Utils.class and b/target/classes/com/engine/common/util/Utils.class differ diff --git a/target/test-classes/Test$1.class b/target/test-classes/Test$1.class index 1e2b2a0..740d834 100644 Binary files a/target/test-classes/Test$1.class and b/target/test-classes/Test$1.class differ diff --git a/target/test-classes/Test$10.class b/target/test-classes/Test$10.class index 43d0708..cc64675 100644 Binary files a/target/test-classes/Test$10.class and b/target/test-classes/Test$10.class differ diff --git a/target/test-classes/Test$11.class b/target/test-classes/Test$11.class index fe20f8a..3358beb 100644 Binary files a/target/test-classes/Test$11.class and b/target/test-classes/Test$11.class differ diff --git a/target/test-classes/Test$12.class b/target/test-classes/Test$12.class index 7f00bf3..d478144 100644 Binary files a/target/test-classes/Test$12.class and b/target/test-classes/Test$12.class differ diff --git a/target/test-classes/Test$13.class b/target/test-classes/Test$13.class index fc0363f..01a734f 100644 Binary files a/target/test-classes/Test$13.class and b/target/test-classes/Test$13.class differ diff --git a/target/test-classes/Test$2.class b/target/test-classes/Test$2.class index db1928d..4558d8e 100644 Binary files a/target/test-classes/Test$2.class and b/target/test-classes/Test$2.class differ diff --git a/target/test-classes/Test$3.class b/target/test-classes/Test$3.class index 3634031..0782d79 100644 Binary files a/target/test-classes/Test$3.class and b/target/test-classes/Test$3.class differ diff --git a/target/test-classes/Test$4.class b/target/test-classes/Test$4.class index 66b1496..5057d55 100644 Binary files a/target/test-classes/Test$4.class and b/target/test-classes/Test$4.class differ diff --git a/target/test-classes/Test$5.class b/target/test-classes/Test$5.class index 48401f1..85bd6ca 100644 Binary files a/target/test-classes/Test$5.class and b/target/test-classes/Test$5.class differ diff --git a/target/test-classes/Test$6.class b/target/test-classes/Test$6.class index 90f1c11..74aab46 100644 Binary files a/target/test-classes/Test$6.class and b/target/test-classes/Test$6.class differ diff --git a/target/test-classes/Test$7.class b/target/test-classes/Test$7.class index 7cff7c2..ea3ec6c 100644 Binary files a/target/test-classes/Test$7.class and b/target/test-classes/Test$7.class differ diff --git a/target/test-classes/Test$8.class b/target/test-classes/Test$8.class index f4ed027..d5e77b9 100644 Binary files a/target/test-classes/Test$8.class and b/target/test-classes/Test$8.class differ diff --git a/target/test-classes/Test$9.class b/target/test-classes/Test$9.class index fd531bc..ecc32d4 100644 Binary files a/target/test-classes/Test$9.class and b/target/test-classes/Test$9.class differ diff --git a/target/test-classes/Test.class b/target/test-classes/Test.class index 0ffb9b0..9a37a49 100644 Binary files a/target/test-classes/Test.class and b/target/test-classes/Test.class differ diff --git a/test/Test.java b/test/Test.java index 58cb8ab..0b65ea0 100644 --- a/test/Test.java +++ b/test/Test.java @@ -1,6 +1,7 @@ import com.engine.attendance.attendanceanalysis.cmd.GetClockInTimeItemCmd; +import com.engine.attendance.enums.AttendanceItemTypeEnum; import com.engine.common.util.DateUtil; import com.engine.common.util.Utils; import com.google.common.collect.Lists; @@ -14,7 +15,9 @@ import java.util.stream.Collectors; public class Test { public static void main(String[] args) { - System.out.println("18:13:00".substring(0,5)); + List list = Lists.newArrayList(); + aa(list); + System.out.println(list); // Map params = Maps.newHashMap(); // List> attendanceItems = new ArrayList<>(); // Map map = new HashMap<>(); @@ -60,7 +63,8 @@ public class Test { // } // System.out.println("aaaa"); - System.out.println(DateUtil.getBetWeenMinutes("2023-11-25 20:45:00","2023-11-25 21:00")); + System.out.println(AttendanceItemTypeEnum.MISSE_CARD.equals(AttendanceItemTypeEnum.MISSE_CARD)); + //System.out.println(Util.getIntValue("")); // List> beforeleaveDate = Lists.newArrayList(); // for (int i=beforeleaveDate.size()-1;i>=0;i--){ @@ -434,8 +438,13 @@ public class Test { params.put("clockInTimeCollect",collect); params.put("schedulingResultCollect",schedulingResultsMap); - Map beforeOneDayClockInTimeList = new GetClockInTimeItemCmd(params).execute(null); - System.out.println(beforeOneDayClockInTimeList); } + + public static void aa(List list){ + list.add(1); + list.add(5); + list.add(4); + list = list.stream().filter(e -> e <=4).collect(Collectors.toList()); + } }