From 860a8254419fb787f8cadaaf2992c23f572e1616 Mon Sep 17 00:00:00 2001 From: liuliang <401809302@qq.com> Date: Fri, 10 Nov 2023 00:16:44 +0800 Subject: [PATCH] liuliang --- .../attendanceanalysis/cmd/BeLateCmd.java | 37 +++ .../cmd/GetClockInTimeCmd.java | 42 ++-- .../attendanceanalysis/cmd/LeaveEarlyCmd.java | 23 ++ .../service/BeLateService.java | 16 +- .../service/ForgetClockInService.java | 6 + .../service/UtilService.java | 2 +- .../service/impl/BeLateServiceImpl.java | 12 + .../impl/ForgetClockInServiceImpl.java | 5 + .../service/impl/UtilServiceImpl.java | 100 +++++++- .../wrapper/AttendanceAnalysisWrapper.java | 234 +++++++++++++++++- .../UpdateAttendanceResultWrapper.java | 28 +++ .../GetAttendanceItemsByPersonDataCmd.java | 2 +- .../engine/attendance/enums/CheckBoxEnum.java | 27 ++ .../enums/ClassSegmentTypeEnum.java | 5 +- .../engine/attendance/enums/PeriodOfTime.java | 32 +++ .../workflow/web/ProcessSubmitCheckApi.java | 4 +- src/com/engine/common/cmd/GetDateCmd.java | 33 +++ src/com/engine/common/util/DateUtil.java | 16 +- src/com/engine/common/util/Utils.java | 30 +++ .../GetAttendanceItemsByPersonDataCmd.class | Bin 8377 -> 8378 bytes .../attendanceanalysis/cmd/BeLateCmd.class | Bin 0 -> 1888 bytes .../cmd/GetClockInTimeCmd.class | Bin 14542 -> 14342 bytes .../cmd/LeaveEarlyCmd.class | Bin 0 -> 1325 bytes .../service/BeLateService.class | Bin 351 -> 485 bytes .../service/impl/BeLateServiceImpl.class | Bin 847 -> 1137 bytes .../service/impl/UtilServiceImpl.class | Bin 6324 -> 11594 bytes .../wrapper/AttendanceAnalysisWrapper$1.class | Bin 0 -> 1971 bytes .../wrapper/AttendanceAnalysisWrapper$2.class | Bin 0 -> 1965 bytes .../wrapper/AttendanceAnalysisWrapper.class | Bin 5557 -> 14122 bytes .../attendance/enums/CheckBoxEnum.class | Bin 0 -> 1547 bytes .../enums/ClassSegmentTypeEnum.class | Bin 1978 -> 2246 bytes .../attendance/enums/PeriodOfTime.class | Bin 0 -> 1615 bytes .../com/engine/common/cmd/GetDateCmd.class | Bin 0 -> 2096 bytes .../com/engine/common/util/DateUtil.class | Bin 4865 -> 4997 bytes .../com/engine/common/util/Utils$1.class | Bin 535 -> 535 bytes .../com/engine/common/util/Utils$2.class | Bin 517 -> 517 bytes .../com/engine/common/util/Utils$3.class | Bin 908 -> 908 bytes .../com/engine/common/util/Utils.class | Bin 7270 -> 9002 bytes target/test-classes/Test.class | Bin 1478 -> 1343 bytes test/Test.java | 59 ++++- 40 files changed, 667 insertions(+), 46 deletions(-) create mode 100644 src/com/engine/attendance/attendanceanalysis/cmd/BeLateCmd.java create mode 100644 src/com/engine/attendance/attendanceanalysis/cmd/LeaveEarlyCmd.java create mode 100644 src/com/engine/attendance/attendanceanalysis/wrapper/UpdateAttendanceResultWrapper.java create mode 100644 src/com/engine/attendance/enums/CheckBoxEnum.java create mode 100644 src/com/engine/attendance/enums/PeriodOfTime.java create mode 100644 src/com/engine/common/cmd/GetDateCmd.java create mode 100644 target/classes/com/engine/attendance/attendanceanalysis/cmd/BeLateCmd.class create mode 100644 target/classes/com/engine/attendance/attendanceanalysis/cmd/LeaveEarlyCmd.class create mode 100644 target/classes/com/engine/attendance/attendanceanalysis/wrapper/AttendanceAnalysisWrapper$1.class create mode 100644 target/classes/com/engine/attendance/attendanceanalysis/wrapper/AttendanceAnalysisWrapper$2.class create mode 100644 target/classes/com/engine/attendance/enums/CheckBoxEnum.class create mode 100644 target/classes/com/engine/attendance/enums/PeriodOfTime.class create mode 100644 target/classes/com/engine/common/cmd/GetDateCmd.class diff --git a/src/com/engine/attendance/attendanceanalysis/cmd/BeLateCmd.java b/src/com/engine/attendance/attendanceanalysis/cmd/BeLateCmd.java new file mode 100644 index 0000000..254a774 --- /dev/null +++ b/src/com/engine/attendance/attendanceanalysis/cmd/BeLateCmd.java @@ -0,0 +1,37 @@ +package com.engine.attendance.attendanceanalysis.cmd; + +import com.engine.common.biz.AbstractCommonCommand; +import com.engine.common.entity.BizLogContext; +import com.engine.core.interceptor.CommandContext; +import weaver.general.Util; + +import java.util.List; +import java.util.Map; + +public class BeLateCmd extends AbstractCommonCommand> { + @Override + public BizLogContext getLogContext() { + return null; + } + public BeLateCmd(Map params){ + this.params=params; + } + + @Override + public Map execute(CommandContext commandContext) { + //分析人员 + String userId = Util.null2String(params.get("userId")); + //分析日期 + String analysisDate = Util.null2String(params.get("analysisDate")); + //打卡数据 + List> clockInTimeList = (List>)params.get("analysisDate"); + //班次 + List> scheduleResult = (List>)params.get("scheduleResult"); + //考勤项目 + List> attendanceItems = (List>)params.get("attendanceItems"); + + + + return null; + } +} diff --git a/src/com/engine/attendance/attendanceanalysis/cmd/GetClockInTimeCmd.java b/src/com/engine/attendance/attendanceanalysis/cmd/GetClockInTimeCmd.java index 5180b9f..5254111 100644 --- a/src/com/engine/attendance/attendanceanalysis/cmd/GetClockInTimeCmd.java +++ b/src/com/engine/attendance/attendanceanalysis/cmd/GetClockInTimeCmd.java @@ -54,42 +54,36 @@ public class GetClockInTimeCmd extends AbstractCommonCommand> if (needGetDateList == null || needGetDateScheduling== null){ return resultMap; - }else if (beforeNeedGetDateList == null && afterNeedGetDateList == null){ + }else if (beforeNeedGetDateList == null && afterNeedGetDateList == null ){ resultList = needGetDateList; }else if (beforeNeedGetDateList != null && afterNeedGetDateList == null){//前一天有打卡数据,后一天没有打卡数据 if (beforeNeedGetDateScheduling == null){ resultMap.put("resultList",needGetDateList); return resultMap; } - //前一天是否跨天 1:跨天 - String beforesfkt = Util.null2String(beforeNeedGetDateScheduling.get(0).get("sfkt")); - //当天是否跨天 1:跨天 - String nowsfkt = Util.null2String(beforeNeedGetDateScheduling.get(0).get("sfkt")); - if (!"1".equals(beforesfkt) && !"1".equals(nowsfkt)){ - resultList = needGetDateList; - }else if ("1".equals(beforesfkt) && !"1".equals(nowsfkt)){ - //前一天跨天,当天没有跨天 - - }else if (!"1".equals(beforesfkt) && "1".equals(nowsfkt)){ - //前一天没有跨天,当天跨天 - - }else if ("1".equals(beforesfkt) && "1".equals(nowsfkt)){ - //前一天跨天,当天也跨天 - - } - + resultList=computeStartTime(beforeNeedGetDateScheduling,beforeNeedGetDateList,needGetDateScheduling,needGetDateList,needGetDate); }else if (beforeNeedGetDateList == null && afterNeedGetDateList != null){ //前一天没有打卡数据,后一天有打卡数据 - if (afterNeedGetDateList == null){ + if (afterNeedGetDateScheduling == null){ resultMap.put("resultList",needGetDateList); return resultMap; } - - - + resultList=computeEndTime(afterNeedGetDateScheduling,afterNeedGetDateList,needGetDateScheduling,needGetDateList,needGetDate); }else if (beforeNeedGetDateList !=null && afterNeedGetDateList != null){ //前后一天都有打卡数据 + if (beforeNeedGetDateScheduling == null && afterNeedGetDateScheduling ==null){ + resultList = needGetDateList; + }else if (beforeNeedGetDateScheduling != null && afterNeedGetDateScheduling ==null){ + resultList=computeStartTime(beforeNeedGetDateScheduling,beforeNeedGetDateList,needGetDateScheduling,needGetDateList,needGetDate); + }else if (beforeNeedGetDateScheduling == null && afterNeedGetDateScheduling != null){ + resultList=computeEndTime(afterNeedGetDateScheduling,afterNeedGetDateList,needGetDateScheduling,needGetDateList,needGetDate); + }else if (beforeNeedGetDateScheduling != null && afterNeedGetDateScheduling != null){ + resultList=computeStartTime(beforeNeedGetDateScheduling,beforeNeedGetDateList,needGetDateScheduling,needGetDateList,needGetDate); + resultList=computeEndTime(afterNeedGetDateScheduling,afterNeedGetDateList,needGetDateScheduling,resultList,needGetDate); + + } } + resultList = resultList.stream().sorted(Comparator.comparing(e->DateUtil.getTime(e.get("signdate")+" "+e.get("signtime")).toInstant(ZoneOffset.of("+8")).toEpochMilli())).collect(Collectors.toList()); resultMap.put("resultList",resultList); return resultMap; } @@ -284,7 +278,7 @@ public class GetClockInTimeCmd extends AbstractCommonCommand> } //排序 - needGetDateList = needGetDateList.stream().sorted(Comparator.comparing(e->DateUtil.getTime(e.get("signdate")+" "+e.get("signtime")).toInstant(ZoneOffset.of("+8")).toEpochMilli())).collect(Collectors.toList()); + // needGetDateList = needGetDateList.stream().sorted(Comparator.comparing(e->DateUtil.getTime(e.get("signdate")+" "+e.get("signtime")).toInstant(ZoneOffset.of("+8")).toEpochMilli())).collect(Collectors.toList()); } return needGetDateList; @@ -392,7 +386,7 @@ public class GetClockInTimeCmd extends AbstractCommonCommand> } //排序 - needGetDateList = needGetDateList.stream().sorted(Comparator.comparing(e->DateUtil.getTime(e.get("signdate")+" "+e.get("signtime")).toInstant(ZoneOffset.of("+8")).toEpochMilli())).collect(Collectors.toList()); + // needGetDateList = needGetDateList.stream().sorted(Comparator.comparing(e->DateUtil.getTime(e.get("signdate")+" "+e.get("signtime")).toInstant(ZoneOffset.of("+8")).toEpochMilli())).collect(Collectors.toList()); } return needGetDateList; } diff --git a/src/com/engine/attendance/attendanceanalysis/cmd/LeaveEarlyCmd.java b/src/com/engine/attendance/attendanceanalysis/cmd/LeaveEarlyCmd.java new file mode 100644 index 0000000..3b8842e --- /dev/null +++ b/src/com/engine/attendance/attendanceanalysis/cmd/LeaveEarlyCmd.java @@ -0,0 +1,23 @@ +package com.engine.attendance.attendanceanalysis.cmd; + +import com.engine.common.biz.AbstractCommonCommand; +import com.engine.common.entity.BizLogContext; +import com.engine.core.interceptor.CommandContext; + +import java.util.Map; + +public class LeaveEarlyCmd extends AbstractCommonCommand> { + + public LeaveEarlyCmd(Map params){ + this.params=params; + } + @Override + public BizLogContext getLogContext() { + return null; + } + + @Override + public Map execute(CommandContext commandContext) { + return null; + } +} diff --git a/src/com/engine/attendance/attendanceanalysis/service/BeLateService.java b/src/com/engine/attendance/attendanceanalysis/service/BeLateService.java index 841a25f..bec9783 100644 --- a/src/com/engine/attendance/attendanceanalysis/service/BeLateService.java +++ b/src/com/engine/attendance/attendanceanalysis/service/BeLateService.java @@ -3,7 +3,7 @@ package com.engine.attendance.attendanceanalysis.service; import java.util.Map; /** - * 旷工service + * 旷工、早退、迟到service */ public interface BeLateService { /** @@ -12,4 +12,18 @@ public interface BeLateService { * @return */ Map fullDayAbsenteeism(Map params); + + /** + * 迟到 + * @param params + * @return + */ + boolean beLate(Map params); + + /** + * 早退 + * @param params + * @return + */ + boolean leaveEarly(Map params); } diff --git a/src/com/engine/attendance/attendanceanalysis/service/ForgetClockInService.java b/src/com/engine/attendance/attendanceanalysis/service/ForgetClockInService.java index e753511..f1d1a4d 100644 --- a/src/com/engine/attendance/attendanceanalysis/service/ForgetClockInService.java +++ b/src/com/engine/attendance/attendanceanalysis/service/ForgetClockInService.java @@ -13,4 +13,10 @@ public interface ForgetClockInService { * @return */ Map ForgetClockInAllDays(Map params); + /** + * 漏打卡 + * @param params + * @return + */ + Map ForgetClockIn(Map params); } diff --git a/src/com/engine/attendance/attendanceanalysis/service/UtilService.java b/src/com/engine/attendance/attendanceanalysis/service/UtilService.java index 0b87642..cb9b93c 100644 --- a/src/com/engine/attendance/attendanceanalysis/service/UtilService.java +++ b/src/com/engine/attendance/attendanceanalysis/service/UtilService.java @@ -8,7 +8,7 @@ import java.util.Map; */ public interface UtilService { /** - * 获得人员班次信息 + * 获得人员班次信息,加班计划 * @param params * @return */ diff --git a/src/com/engine/attendance/attendanceanalysis/service/impl/BeLateServiceImpl.java b/src/com/engine/attendance/attendanceanalysis/service/impl/BeLateServiceImpl.java index f3cf6a4..1be88a1 100644 --- a/src/com/engine/attendance/attendanceanalysis/service/impl/BeLateServiceImpl.java +++ b/src/com/engine/attendance/attendanceanalysis/service/impl/BeLateServiceImpl.java @@ -12,4 +12,16 @@ public class BeLateServiceImpl extends Service implements BeLateService { return null; } + + @Override + public boolean beLate(Map params) { + + + return false; + } + + @Override + public boolean leaveEarly(Map params) { + return false; + } } diff --git a/src/com/engine/attendance/attendanceanalysis/service/impl/ForgetClockInServiceImpl.java b/src/com/engine/attendance/attendanceanalysis/service/impl/ForgetClockInServiceImpl.java index 5a1ec25..0f9e689 100644 --- a/src/com/engine/attendance/attendanceanalysis/service/impl/ForgetClockInServiceImpl.java +++ b/src/com/engine/attendance/attendanceanalysis/service/impl/ForgetClockInServiceImpl.java @@ -16,4 +16,9 @@ public class ForgetClockInServiceImpl extends Service implements ForgetClockInSe Map result = commandExecutor.execute(new UpdateAttendanceResultsCmd(params)); return result; } + + @Override + public Map ForgetClockIn(Map params) { + return null; + } } diff --git a/src/com/engine/attendance/attendanceanalysis/service/impl/UtilServiceImpl.java b/src/com/engine/attendance/attendanceanalysis/service/impl/UtilServiceImpl.java index 10cee9d..b2a816f 100644 --- a/src/com/engine/attendance/attendanceanalysis/service/impl/UtilServiceImpl.java +++ b/src/com/engine/attendance/attendanceanalysis/service/impl/UtilServiceImpl.java @@ -1,10 +1,15 @@ package com.engine.attendance.attendanceanalysis.service.impl; import com.engine.attendance.attendanceanalysis.cmd.GetClockInTimeCmd; -import com.engine.attendance.attendanceanalysis.cmd.UpdateAttendanceResultsCmd; import com.engine.attendance.attendanceanalysis.service.UtilService; +import com.engine.attendance.attendanceplan.service.AttendancePlanService; +import com.engine.attendance.attendanceplan.service.impl.AttendancePlanServiceImpl; import com.engine.attendance.component.persongroup.service.SchedulingResultsService; import com.engine.attendance.component.persongroup.service.impl.SchedulingResultsServiceImpl; +import com.engine.attendance.enums.AttendanceItemTypeEnum; +import com.engine.attendance.enums.ClassSegmentTypeEnum; +import com.engine.attendance.enums.WorkForTimeEnum; +import com.engine.common.cmd.GetDateCmd; import com.engine.common.util.DateUtil; import com.engine.common.util.DbTools; import com.engine.common.util.ServiceUtil; @@ -13,7 +18,6 @@ import com.google.common.collect.Lists; import com.google.common.collect.Maps; import lombok.extern.slf4j.Slf4j; import weaver.general.Util; - import java.util.List; import java.util.Map; import java.util.stream.Collectors; @@ -21,14 +25,18 @@ import java.util.stream.Collectors; @Slf4j public class UtilServiceImpl extends Service implements UtilService { private SchedulingResultsService schedulingResultsService = ServiceUtil.getService(SchedulingResultsServiceImpl.class); + private AttendancePlanService basicsetService = ServiceUtil.getService(AttendancePlanServiceImpl.class); + + @Override public Map>> getSchedulingInFormation(Map params) { /** 班次信息*/ Map schedulingResultsMap = schedulingResultsService.queryDataTable(params); List> schedulingResultsList = (List>)schedulingResultsMap.get("data"); + schedulingResultsList = schedulingResultsList.stream().filter(e -> !"1".equals(e.get("sfxx"))).collect(Collectors.toList()); Map schedulingMap = schedulingResultsList.stream().collect(Collectors.toMap(e-> Util.null2String(e.get("bcxx")), e->Util.null2String(e.get("bcrq")))); - String sql = "select a.id bcxx,a.bcsdxx,a.sfkt,b.bdlx,b.kssj dtkssj,b.jssj dtjssj,b.ksdk,b.jsdk,b.tqdkfzs,b.thdkfzs from uf_jcl_kq_bcxx a left join uf_jcl_kq_bcxx_dt1 b on a.id=b.mainid where a.id in ("; + String sql = "select a.id bcxx,a.edsc,a.bcsdxx,a.sfdx,a.sfkt,b.bdlx,b.zddxfz,b.dxhs,b.kssj dtkssj,b.jssj dtjssj,b.ksdk,b.jsdk,b.tqdkfzs,b.thdkfzs from uf_jcl_kq_bcxx a left join uf_jcl_kq_bcxx_dt1 b on a.id=b.mainid where a.id in ("; String bcxxIds = ""; for (Map.Entry entry :schedulingMap.entrySet()){ bcxxIds +=entry.getKey() +","; @@ -43,8 +51,94 @@ public class UtilServiceImpl extends Service implements UtilService { }); /** 加班计划*/ + sql = "select jbry,ksrq,kssj,jsrq,jssj,jbsc from uf_jcl_kq_jbjh_dt1 where jbry=? and ksrq>=? and ksrq<=? and (jbcx=0 or jbcx is null)"; + Map>> overtimePlanMap = DbTools.getSqlToList(sql,params.get("pbdx"),params.get("startDate"),params.get("endDate")).stream().collect(Collectors.groupingBy(e -> Util.null2String(e.get("ksrq")))); + + //考勤项目 + Map paramMap = Maps.newHashMap(); + paramMap.put("startDate",""); + paramMap.put("endDate",""); + paramMap.put("resourceId",params.get("pbdx")); + paramMap.put("modeId","204"); + Map attendanceItemMap = basicsetService.getAttendanceItemsByPerson(paramMap); + List> attendanceItems = (List>)attendanceItemMap.get("data"); + //日期集合 + Map dateParam = Maps.newHashMap(); + dateParam.put("nd",Util.null2String(params.get("startDate")).split("-")[0]); + Map result = commandExecutor.execute(new GetDateCmd(dateParam)); + List> List = (List>)result.get("data"); + Map dateMap = List.stream().collect(Collectors.toMap(e->Util.null2String(e.get("rq")),e->Util.null2String(e.get("rqlx")))); + + + for (Map.Entry>> e: overtimePlanMap.entrySet()){ + if (resultMap.get(e.getKey()) == null){ + resultMap.put(e.getKey(),Lists.newArrayList()); + } + List> resultList = resultMap.get(e.getKey()); + Map overtimePlan = e.getValue().get(0); + Map map = Maps.newHashMap(); + if (!overtimePlan.get("ksrq").equals(overtimePlan.get("jsrq"))){ + map.put("sfkt","1"); + }else { + map.put("sfkt","0"); + } + //查找对应的考勤项目 + attendanceItems = attendanceItems.stream().filter(s->{ + //项目类型 + String xmlx = Util.null2String(s.get("xmlx")); + //作用时段 + String zysd = Util.null2String(s.get("zysd")); + //项目绑定的日期类型 + String bddrqlx = Util.null2String(s.get("bddrqlx")); + //日期类型 + String dateType = dateMap.get(e.getKey()); + + if (xmlx.equals(AttendanceItemTypeEnum.WORK_OVERTIME.getKey()) && (zysd.equals(WorkForTimeEnum.PLAN_WORK_OVERTIME.getKey()) || zysd.equals(WorkForTimeEnum.ALL_TIME.getKey())) && bddrqlx.contains(dateType)){ + return true; + } + return false; + }).collect(Collectors.toList()); + + + map.put("bcxx","0"); + map.put("bcsdxx",""); + map.put("edsc","8"); + map.put("bdlx", ClassSegmentTypeEnum.OVERTIME_PLAN.getKey()); + map.put("dtkssj",overtimePlan.get("kssj")); + 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"); + if (attendanceItems.size() >0){ + map.put("ksdk",attendanceItems.get(0).get("ksjbbxydk")); + map.put("jsdk",attendanceItems.get(0).get("jsjbbxydk")); + map.put("tqdkfzs",attendanceItems.get(0).get("tqdkyxfzs")); + map.put("thdkfzs",attendanceItems.get(0).get("thdkyxfzs")); + map.put("jbwdhlfzs",attendanceItems.get(0).get("jbwdhlfzs")); + map.put("jbzzhlfzs",attendanceItems.get(0).get("jbzzhlfzs")); + } + if (resultList.size() == 0){ + resultList.add(map); + } + for (int j=0;j=0 && DateUtil.getTime(kssj3).compareTo(DateUtil.getTime(kssj2)) <=0){ + map.put("bcxx",resultList.get(0).get("bcxx")); + map.put("bcsdxx",resultList.get(0).get("bcsdxx")); + map.put("edsc",resultList.get(0).get("edsc")); + resultList.add(j,map); + } + } + + } log.info("SchedulingResults : [{}]",resultMap); return resultMap; diff --git a/src/com/engine/attendance/attendanceanalysis/wrapper/AttendanceAnalysisWrapper.java b/src/com/engine/attendance/attendanceanalysis/wrapper/AttendanceAnalysisWrapper.java index cefbfba..e16707a 100644 --- a/src/com/engine/attendance/attendanceanalysis/wrapper/AttendanceAnalysisWrapper.java +++ b/src/com/engine/attendance/attendanceanalysis/wrapper/AttendanceAnalysisWrapper.java @@ -1,5 +1,6 @@ package com.engine.attendance.attendanceanalysis.wrapper; +import com.engine.attendance.attendanceanalysis.cmd.UpdateAttendanceResultsCmd; import com.engine.attendance.attendanceanalysis.service.BeLateService; import com.engine.attendance.attendanceanalysis.service.ForgetClockInService; import com.engine.attendance.attendanceanalysis.service.UtilService; @@ -8,16 +9,21 @@ import com.engine.attendance.attendanceanalysis.service.impl.ForgetClockInServic import com.engine.attendance.attendanceanalysis.service.impl.UtilServiceImpl; import com.engine.attendance.attendanceplan.service.AttendancePlanService; import com.engine.attendance.attendanceplan.service.impl.AttendancePlanServiceImpl; -import com.engine.attendance.component.persongroup.service.SchedulingResultsService; -import com.engine.attendance.component.persongroup.service.impl.SchedulingResultsServiceImpl; -import com.engine.attendance.enums.WorkForTimeEnum; +import com.engine.attendance.enums.CheckBoxEnum; +import com.engine.attendance.enums.ClassSegmentTypeEnum; +import com.engine.attendance.enums.PeriodOfTime; import com.engine.common.util.DateUtil; import com.engine.common.util.DbTools; import com.engine.common.util.ServiceUtil; +import com.engine.common.util.Utils; import com.engine.core.impl.Service; +import com.google.common.collect.Lists; import com.google.common.collect.Maps; +import com.icbc.api.internal.apache.http.M; import weaver.general.Util; +import java.time.ZoneOffset; +import java.util.Comparator; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -37,13 +43,14 @@ public class AttendanceAnalysisWrapper extends Service { String beforeThreeDayDate = DateUtil.getCurrentDateMinusDay(3); String beforeTwoDayDate = DateUtil.getCurrentDateMinusDay(2); String beforeOneDayDate = DateUtil.getCurrentDateMinusDay(1); + /** 打卡数据 */ Map>> collect = dataList.stream().collect(Collectors.groupingBy(e -> Util.null2String(e.get("signdate")))); /**获得人员考勤项目*/ Map paramMap = Maps.newHashMap(); paramMap.put("startDate",""); paramMap.put("endDate",""); - paramMap.put("resourceId","85"); + paramMap.put("resourceId",userId); paramMap.put("modeId","204"); Map dataMap = basicsetService.getAttendanceItemsByPerson(paramMap); List> attendanceItems = (List>)dataMap.get("data"); @@ -61,7 +68,7 @@ public class AttendanceAnalysisWrapper extends Service { Map>> schedulingResultsMap = utilService.getSchedulingInFormation(paramMap); /**获得人员加班计划*/ - String sql = "select jbry,ksrq,kssj,jsrq,jssj,jbsc, from uf_jcl_kq_jbjh_dt1 where jbry=? and ksrq>=? and ksrq<=? and jbcx=1"; + String sql = "select jbry,ksrq,kssj,jsrq,jssj,jbsc from uf_jcl_kq_jbjh_dt1 where jbry=? and ksrq>=? and ksrq<=? and (jbcx=0 or jbcx is null)"; Map>> overtimePlanMap = DbTools.getSqlToList(sql,userId,beforeOneDayDate,beforeThreeDayDate).stream().collect(Collectors.groupingBy(e -> Util.null2String(e.get("ksrq")))); Map forgetClockInParam = Maps.newHashMap(); forgetClockInParam.put("classInfo",schedulingResultsMap.get(beforeOneDayDate)); @@ -69,6 +76,21 @@ public class AttendanceAnalysisWrapper extends Service { /**计算获取前一天和第二天打卡数据*/ + Map getClockTimeParam = Maps.newHashMap(); + getClockTimeParam.put("date",beforeOneDayDate); + getClockTimeParam.put("clockInTimeCollect",collect); + getClockTimeParam.put("schedulingResultCollect",schedulingResultsMap); + //前一天打卡数据 + List> beforeOneDayClockInTimeList = utilService.getClockInTime(getClockTimeParam); + + getClockTimeParam.put("date",beforeTwoDayDate); + //前第二天打卡数据 + List> beforeTwoDayClockInTimeList = utilService.getClockInTime(getClockTimeParam); + + + + + if (collect.size() == 0){ //没有打卡数据,漏打卡 forgetClockInParam.put("date",beforeOneDayDate); @@ -81,7 +103,7 @@ public class AttendanceAnalysisWrapper extends Service { }else { - //否则前一天记为漏打卡 + //若为正常工作日,则记为漏打卡 } @@ -89,7 +111,7 @@ public class AttendanceAnalysisWrapper extends Service { //有2天有打卡数据 if (collect.get(beforeOneDayDate) == null){ - //前一天漏打卡 + //若为正常工作日,前一天漏打卡 }else if(collect.get(beforeOneDayDate) != null && collect.get(beforeTwoDayDate) == null){ @@ -110,6 +132,204 @@ public class AttendanceAnalysisWrapper extends Service { } } + /** + * 分析数据 + * @param userId 分析人员 + * @param analysisDate 分析日期 + * @param clockInTimeList 打卡数据 + * @param scheduleResult 班次 + * @param attendanceItems 考勤项目 + */ + public void analysis(String userId,String analysisDate,List> clockInTimeList,List> scheduleResult,List> attendanceItems){ + if (scheduleResult == null || scheduleResult.size() ==0){ + //没有排班 + + return; + } + List> needClockInSchedule = scheduleResult.stream().filter(e -> "1".equals(e.get("ksdk")) || "1".equals(e.get("jsdk"))).collect(Collectors.toList()); + if(clockInTimeList == null || clockInTimeList.size() == 0){ + if (needClockInSchedule.size() > 0){ + //全天漏打卡 + return; + }else { + + } + } + //请假记录 + String sql = "select a.qjry,a.jqlx,a.cxjqj,b.ksrq,b.kssj,b.jsrq,b.jssj,b.qjsc,b.qtj,b.btj from uf_jcl_kq_qjjl a left join uf_jcl_kq_qjjl_dt1 b on a.id = b.mainid where a.qjry=? and b.ksrq=? and (b.cxqj=0 or b.cxqj is null)"; + List> askForLeaveList = DbTools.getSqlToList(sql,userId,analysisDate); + + //出差记录 + sql = "select a.ccr,a.cclx,a.ccsd,b.ksrq,b.jsrq,b.kssj,b.jssj,b.ccsc,b.qtcc,b.btcc,b.cxcc from uf_jcl_kq_ccjl a left join uf_jcl_kq_ccjl_dt1 b on a.id = b.mainid where a.ccr=? and a.ksrq=? and (b.cxcc=0 or b.cxcc is null)"; + List> evectionList = DbTools.getSqlToList(sql,userId,analysisDate); + + Map updateAttendacneParams = Maps.newHashMap(); + updateAttendacneParams.put("userId",userId); + updateAttendacneParams.put("date",analysisDate); + updateAttendacneParams.put("classInfo",scheduleResult); + + sql = "select hsl,hsdw,lgsbxydk,tqlghlfzs,fgsbxydk,thfghlfzs,tybcndbjlhbjs,zdycbcndfgzsd,zdycrqqjndxxb from uf_jcl_kq_kqxm where id=?"; + for (Map askForLeaveData : askForLeaveList){ + //全天请假 + if (PeriodOfTime.ALLDAY.getKey().equals(askForLeaveData.get("cxjqj"))){ + updateAttendacneParams.put("item",askForLeaveData.get("jqlx")); + updateAttendacneParams.put("itemduration",scheduleResult.get(0).get("edsc")); + commandExecutor.execute(new UpdateAttendanceResultsCmd(updateAttendacneParams)); + return; + } + Map askForLeaveItem = DbTools.getSqlToMap(sql,askForLeaveData.get("jqlx")); + 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("bdlx", ClassSegmentTypeEnum.ASK_FOR_LEAVE.getKey()); + put("dtkssj",askForLeaveData.get("kssj")); + put("dtjssj",askForLeaveData.get("jssj")); + put("ksdk",askForLeaveItem.get("fgsbxydk")); + put("jsdk",askForLeaveItem.get("lgsbxydk")); + put("tqdkfzs","60"); + put("thdkfzs","60"); + put("sfdx","1"); + put("zddxfz",askForLeaveItem.get("tqlghlfzs")); + put("dxhs",askForLeaveItem.get("thfghlfzs")); + }}; + + scheduleResult.add(askForLeaveMap); + if (CheckBoxEnum.CHECKED.getKey().equals(askForLeaveItem.get("lgsbxydk")) || CheckBoxEnum.CHECKED.getKey().equals(askForLeaveItem.get("fgsbxydk"))){ + needClockInSchedule.add(askForLeaveMap); + } + } + for (Map evectionData :evectionList){ + //全天出差 + if (PeriodOfTime.ALLDAY.getKey().equals(evectionData.get("ccsd"))) { + updateAttendacneParams.put("item", evectionData.get("cclx")); + updateAttendacneParams.put("itemduration", scheduleResult.get(0).get("edsc")); + commandExecutor.execute(new UpdateAttendanceResultsCmd(updateAttendacneParams)); + return; + } + Map evectionItem = DbTools.getSqlToMap(sql,evectionData.get("cclx")); + 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("bdlx", ClassSegmentTypeEnum.ASK_FOR_LEAVE.getKey()); + put("dtkssj",evectionData.get("kssj")); + put("dtjssj",evectionData.get("jssj")); + put("ksdk",evectionItem.get("fgsbxydk")); + put("jsdk",evectionItem.get("lgsbxydk")); + put("tqdkfzs","60"); + put("thdkfzs","60"); + put("sfdx","1"); + put("zddxfz",evectionItem.get("tqlghlfzs")); + put("dxhs",evectionItem.get("thfghlfzs")); + }}; + scheduleResult.add(evectionMap); + if (CheckBoxEnum.CHECKED.getKey().equals(evectionItem.get("lgsbxydk")) || CheckBoxEnum.CHECKED.getKey().equals(evectionItem.get("fgsbxydk"))){ + needClockInSchedule.add(evectionMap); + } + } + + needClockInSchedule = needClockInSchedule.stream().sorted(Comparator.comparing(e->DateUtil.getTime(analysisDate+" "+e.get("dtkssj")).toInstant(ZoneOffset.of("+8")).toEpochMilli())).collect(Collectors.toList()); + + 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"); + int tqdkfzs = Integer.valueOf(Util.null2String(needClockIn.get("tqdkfzs"))); + Map> ksdkNearestClcokInTime = Utils.getNearestClcokInTimeCmd(dtkssj,clockInTimeList); + String timeType = "empty"; + Map> clcokInTimeMap = Maps.newHashMap(); + if (ksdkNearestClcokInTime.get("equal") != null){ + timeType="equal"; + } + if ("empty".equals(timeType) && ksdkNearestClcokInTime.get("before") != null){ + String clockInTime = ksdkNearestClcokInTime.get("before").get("signdate") +" "+ksdkNearestClcokInTime.get("before").get("signtime"); + if (DateUtil.getTime(clockInTime).compareTo(DateUtil.getTime(DateUtil.beforeMinutes(dtkssj,tqdkfzs))) >=0){ + //打卡时间大于等于最早打卡时间 + timeType="before"; + } + } + if ("empty".equals(timeType) && ksdkNearestClcokInTime.get("after") != null){ + String clockInTime = ksdkNearestClcokInTime.get("after").get("signdate") +" "+ksdkNearestClcokInTime.get("after").get("signtime"); + if (DateUtil.getTime(clockInTime).compareTo(DateUtil.getTime(dtjssj)) < 0){ + //打卡时间小于结束时间 + timeType="after"; + } + } + clcokInTimeMap.put(dtkssj+"|start|"+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"); + 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"); + } + Map> jsdkNearestClcokInTime = Utils.getNearestClcokInTimeCmd(dtjssj,clockInTimeList); + + String timeType = "empty"; + Map> clcokInTimeMap = Maps.newHashMap(); + if (jsdkNearestClcokInTime.get("equal") != null){ + timeType="equal"; + } + if ("empty".equals(timeType) && jsdkNearestClcokInTime.get("after") != null){ + String clockInTime = jsdkNearestClcokInTime.get("after").get("signdate") +" "+jsdkNearestClcokInTime.get("after").get("signtime"); + if (DateUtil.getTime(clockInTime).compareTo(DateUtil.getTime(DateUtil.AfterMinutes(dtjssj,thdkfzs))) <=0){ + timeType="after"; + } + } + if ("empty".equals(timeType) && jsdkNearestClcokInTime.get("before") != null){ + String clockInTime = jsdkNearestClcokInTime.get("before").get("signdate") +" "+jsdkNearestClcokInTime.get("before").get("signtime"); + if (DateUtil.getTime(clockInTime).compareTo(DateUtil.getTime(dtkssj)) >0){ + timeType="before"; + } + } + clcokInTimeMap.put(dtjssj+"|end|"+timeType,jsdkNearestClcokInTime.get(timeType)); + clcokInTimeData.add(clcokInTimeMap); + } + } + //当有2笔需要打卡时,可能会有打卡歧义的情况,歧义情况取2个时间点的中间值,当打卡时间小于中间值归属前一个打卡,大于则相反 + if (clcokInTimeData.size() >1){ + for (int i=0;i> 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()){ + beforeClcokInTimeMap = beforeEntry.getValue(); + beforeClcokInTime = beforeEntry.getKey(); + } + for (Map.Entry> afterEntry :afterClcokInTimeData.entrySet()){ + afterClcokInTimeMap = afterEntry.getValue(); + afterClcokInTime = afterEntry.getKey(); + } + //重复 + if (beforeClcokInTimeMap != null && beforeClcokInTimeMap == afterClcokInTimeMap ){ + String beforeTime = beforeClcokInTime.split("\\|")[0]; + String afterTime = afterClcokInTime.split("\\|")[0]; + long betWeenMinutes = DateUtil.getBetWeenMinutes(beforeTime,afterTime); + + String middileTime = DateUtil.AfterMinutes(beforeTime,betWeenMinutes/2); + + String signdateTime = beforeClcokInTimeMap.get("signdate") +" "+beforeClcokInTimeMap.get("signtime"); + + 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); + } + } + } + } + + } } diff --git a/src/com/engine/attendance/attendanceanalysis/wrapper/UpdateAttendanceResultWrapper.java b/src/com/engine/attendance/attendanceanalysis/wrapper/UpdateAttendanceResultWrapper.java new file mode 100644 index 0000000..298d080 --- /dev/null +++ b/src/com/engine/attendance/attendanceanalysis/wrapper/UpdateAttendanceResultWrapper.java @@ -0,0 +1,28 @@ +package com.engine.attendance.attendanceanalysis.wrapper; + + +import com.engine.core.impl.Service; + +import java.util.List; +import java.util.Map; + +public class UpdateAttendanceResultWrapper extends Service { + + public boolean recordAbnormalClockIn(Map params){ + //卡点 + List>> clcokInTimeList = (List>>)params.get("clcokInTimeList"); + //考勤项目 + List> attendanceItems = (List>)params.get("attendanceItems"); + //排班 + List> scheduleResult = (List>)params.get("scheduleResult"); + + + + + for (int i=0;i> attendanceItems = DbTools.getSqlToList(sql); log.info("dataIds : {}",dataIds); - sql = "select b.id `key`,b.mc kqxm,c.mc,b.* famc from uf_jcl_kq_kqfa_dt1 a left join uf_jcl_kq_kqxm b on a.kqxm=b.id left join uf_jcl_kq_kqfa c on a.mainid=c.id where mainid in ("+String.join(",",dataIds)+")"; + sql = "select b.id `key`,b.mc kqxm,c.mc famc,b.* from uf_jcl_kq_kqfa_dt1 a left join uf_jcl_kq_kqxm b on a.kqxm=b.id left join uf_jcl_kq_kqfa c on a.mainid=c.id where mainid in ("+String.join(",",dataIds)+")"; if (dataIds.size() > 0){ log.info("query attendanceItems sql : {}",sql); attendanceItems.addAll(DbTools.getSqlToList(sql)); diff --git a/src/com/engine/attendance/enums/CheckBoxEnum.java b/src/com/engine/attendance/enums/CheckBoxEnum.java new file mode 100644 index 0000000..14a50fd --- /dev/null +++ b/src/com/engine/attendance/enums/CheckBoxEnum.java @@ -0,0 +1,27 @@ +package com.engine.attendance.enums; + +import com.finance.toolkit.BaseEnum; + +public enum CheckBoxEnum implements BaseEnum { + UNCHECKED("0","未选中"), + CHECKED("1","选中"); + + private String key; + private String value; + + CheckBoxEnum(String key, String value){ + this.key=key; + this.value=value; + } + + + @Override + public String getKey() { + return this.key; + } + + @Override + public String getValue() { + return this.value; + } +} diff --git a/src/com/engine/attendance/enums/ClassSegmentTypeEnum.java b/src/com/engine/attendance/enums/ClassSegmentTypeEnum.java index 6f94891..ab25257 100644 --- a/src/com/engine/attendance/enums/ClassSegmentTypeEnum.java +++ b/src/com/engine/attendance/enums/ClassSegmentTypeEnum.java @@ -11,7 +11,10 @@ public enum ClassSegmentTypeEnum implements BaseEnum { EXTENDED_OVERTIME("2","延长加班"), EARLY_OVERTIME("3","早到加班"), REST_PERIOD("4","休息时段"), - DINING_PERIOD("5","就餐时段"); + DINING_PERIOD("5","就餐时段"), + OVERTIME_PLAN("6","加班计划"), + ASK_FOR_LEAVE("7","请假假期"), + EVECTION("8","外出出差"); private String key; private String value; diff --git a/src/com/engine/attendance/enums/PeriodOfTime.java b/src/com/engine/attendance/enums/PeriodOfTime.java new file mode 100644 index 0000000..9c1f698 --- /dev/null +++ b/src/com/engine/attendance/enums/PeriodOfTime.java @@ -0,0 +1,32 @@ +package com.engine.attendance.enums; + +import com.finance.toolkit.BaseEnum; + +/** + * 时段 + */ +public enum PeriodOfTime implements BaseEnum { + ALLDAY("0","全天"), + HOUR("1","小时"), + HALFDAY("2","半天"); + + + private String key; + private String value; + + PeriodOfTime(String key, String value){ + this.key=key; + this.value=value; + } + + + @Override + public String getKey() { + return this.key; + } + + @Override + public String getValue() { + return this.value; + } +} diff --git a/src/com/engine/attendance/workflow/web/ProcessSubmitCheckApi.java b/src/com/engine/attendance/workflow/web/ProcessSubmitCheckApi.java index 9b59da3..60cbdcf 100644 --- a/src/com/engine/attendance/workflow/web/ProcessSubmitCheckApi.java +++ b/src/com/engine/attendance/workflow/web/ProcessSubmitCheckApi.java @@ -35,6 +35,8 @@ public class ProcessSubmitCheckApi { log.error("execute fail,catch error: [{}]",e); return ApiReturnTools.error("500","processSubmitCheck error"); } - } + + + } diff --git a/src/com/engine/common/cmd/GetDateCmd.java b/src/com/engine/common/cmd/GetDateCmd.java new file mode 100644 index 0000000..06454d8 --- /dev/null +++ b/src/com/engine/common/cmd/GetDateCmd.java @@ -0,0 +1,33 @@ +package com.engine.common.cmd; + +import com.engine.common.biz.AbstractCommonCommand; +import com.engine.common.entity.BizLogContext; +import com.engine.common.util.DbTools; +import com.engine.core.interceptor.CommandContext; +import com.google.common.collect.Maps; +import weaver.general.Util; + +import java.util.List; +import java.util.Map; + +public class GetDateCmd extends AbstractCommonCommand> { + + public GetDateCmd(Map params){ + this.params=params; + } + + @Override + public BizLogContext getLogContext() { + return null; + } + + @Override + public Map execute(CommandContext commandContext) { + String nd = Util.null2String(params.get("nd")); + String sql = "select nd,rq,nlrq,rqlx,xq from uf_jcl_kq_rlxx where nd=?"; + List> dataList = DbTools.getSqlToList(sql,nd); + Map resultMap = Maps.newHashMap(); + resultMap.put("data",dataList); + return resultMap; + } +} diff --git a/src/com/engine/common/util/DateUtil.java b/src/com/engine/common/util/DateUtil.java index 69ad30c..0eb5704 100644 --- a/src/com/engine/common/util/DateUtil.java +++ b/src/com/engine/common/util/DateUtil.java @@ -35,12 +35,12 @@ public class DateUtil { } public static String beforeMinutes(String time,long minutes){ - LocalDateTime localDateTime = LocalDate.parse(time, yyyyMMddHHmm).atStartOfDay(); + LocalDateTime localDateTime = DateUtil.getTime(time); return localDateTime.minusDays(minutes).format(yyyyMMddHHmm); } public static String AfterMinutes(String time,long minutes){ - LocalDateTime localDateTime = LocalDate.parse(time, yyyyMMddHHmm).atStartOfDay(); + LocalDateTime localDateTime = DateUtil.getTime(time); return localDateTime.plusMinutes(minutes).format(yyyyMMddHHmm); } @@ -153,6 +153,18 @@ public class DateUtil { long daysBetween = ChronoUnit.MINUTES.between(startDate, endDate); return Math.toIntExact(daysBetween); } + /** + * 获得当前时间相差的分钟数 + * @param startTime 开始时间 yyyy-MM-dd + * @return + */ + public static int getBetWeenMinutes(String startTime,String endTime){ + LocalDateTime startDate = DateUtil.getTime(startTime); + LocalDateTime endDate = DateUtil.getTime(endTime); + + long daysBetween = ChronoUnit.MINUTES.between(startDate, endDate); + return Math.toIntExact(daysBetween); + } /** * 获得两个时间相差的小时 diff --git a/src/com/engine/common/util/Utils.java b/src/com/engine/common/util/Utils.java index 9ed593b..f30f689 100644 --- a/src/com/engine/common/util/Utils.java +++ b/src/com/engine/common/util/Utils.java @@ -1,5 +1,6 @@ package com.engine.common.util; +import com.google.common.collect.Maps; import com.google.common.reflect.TypeToken; import com.google.gson.Gson; import org.jetbrains.annotations.NotNull; @@ -205,4 +206,33 @@ public class Utils { } } + + /** + * 获得time时间内最近的前后打卡时间数据 + * @param time + * @param clockInTimeList 打卡数据 + * @return + */ + public static Map> getNearestClcokInTimeCmd(String time,List> clockInTimeList){ + Map> resultMap = Maps.newHashMap(); + for (int i=0;i clockInTimeList.size()-1){ + j = clockInTimeList.size()-1; + } + String afterSignDateTime = clockInTimeList.get(j).get("signdate") +" "+clockInTimeList.get(j).get("signtime"); + if (i==0 && DateUtil.getTime(time).compareTo(DateUtil.getTime(signDateTime)) <0){ + resultMap.put("after",clockInTimeList.get(i)); + }else if (i == clockInTimeList.size()-1 && DateUtil.getTime(time).compareTo(DateUtil.getTime(signDateTime)) >0){ + resultMap.put("before",clockInTimeList.get(i)); + }else if (DateUtil.getTime(time).compareTo(DateUtil.getTime(signDateTime)) >0 && DateUtil.getTime(time).compareTo(DateUtil.getTime(afterSignDateTime)) <0){ + resultMap.put("before",clockInTimeList.get(i)); + resultMap.put("after",clockInTimeList.get(j)); + }else if (DateUtil.getTime(time).compareTo(DateUtil.getTime(signDateTime)) == 0){ + resultMap.put("equal",clockInTimeList.get(i)); + } + } + return resultMap; + } } diff --git a/target/classes/com/engine/attendance/attendancePlan/cmd/GetAttendanceItemsByPersonDataCmd.class b/target/classes/com/engine/attendance/attendancePlan/cmd/GetAttendanceItemsByPersonDataCmd.class index e789cefaa69405f7e28ec83d6f7413c7dac12200..a415caeceddb6c480c2de73f93473a313233a845 100644 GIT binary patch delta 69 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 K+Pz3PfAtr<52*V9 literal 14542 zcmd^G33y!9bv|b_nm5anEsYj?yki8|l5BZjWNfi{JN7-Lczz=;b50vMYVN}6DkgtkyfDNB+D2yIFe2x*$ID*w6ny*F=0BY6S7 zFW=Yiv);S!F6W$k?)lF>=ic#;K6(5}BAUTB2k9)@7oam~zn{JyB7+_e(s$|a{j|=Y zC;XHM(v$QLL3)b5XV5HG8pc|7f>F6n$AL?Jrpr)T{1!yx^LejEg)XXWuv((=z? zFnKXVKcRmM(o6L3QhHe$UNPv^AdRAZ@_5ZpKlRhkr1*0`{YRLXUKA#;2k8xZQ;7Xi z9&d%oLobG@Odei&l*_{>ok!9C_~{lu{W?g$p?Bo*u2A@`pWgG+?}X$3h9T}BL-am< zAX0o7Ccj7)qK`xL3H9N@6sCZ5`3ZZ1T*h9sa(S47!X-p6`so{>$$qI0gvq2oLMjgV z*$i?84}q{eG{}`)1@;{FbG4sq46Ze}j>&goB9+L^2a5@9>!TZ^&AquqvUzE=XWqnf znY^v(Se$8STOt)-*4w={o>>`Pn?y~xE!`eXo*T_1N~JgH<{=_f zo*Glrk?>{;rQ-1zmTzHHBoDW{RxzDSLcdJIvhC~QvEC%qzdWApP3BtdmH>prH!KZ8 z>vCHniy@V+IY|vBHPppOcdB*OtZ-N`)#~Xl%L}IakL*|P9#s?VfQtJK8c|&B9<$yh zCMGeUr6@d!5LOQxUjq(M7VFsOd}X7jx|n?$S}@ZUxoCSA1Xh?;USOEP!{JilMVZ<^ zjrkqsl(57wydIc4WXa?N^-M80@??q@S{?Nr=C>Q~ZgeP;Fxg}@EA|@IcBiePE1O;K zAZNY$Fgp?%S4Y8&?joTuNKCuZD>j{lcQD2|DVOLDqOAw zu^5v-h8;+o0wMx>#4o7K9LdIWaOOz2pmvS7U%BAIz$;TX{tq z2-TgoIU3yw72FscVfs}ump_X&A8bxXD8XWtm1Nqupy`(fShN)=!u3TarL6RS}_d$7h?{iL%-TD)f- zqJ0J;z>=Knrw`Zybw>)vIAKCPR5)N8G!-k1Usc4tHnF97!P;yt6KzNEDOK`B)O+++ z9bA#_ML@ndA(>EJzx-vgD%bGkFqEHtB10n@PLqa+8}G+NeAw zozBU`dzQv?>(a68P#;gNfP@S$1cW|ljZVh*vQ$>;FoN*;x= z=T_3aCZEUW8w@pHz^hHZkk_E$B9kxXOW4DH}fgV%`)VrH*m(_tjReM?kw)b3arn@y71~!ulevDpCajH zYIG4mQL@DWZ5QcfLGMAcL|8)cO2QN6&1?yBpD2<`rm_i=$(A9LWjfw+d2UB(1=Q{; z`1noYiZjif@f7GJo6o@kg5-w1$>cPhbRL?Rlbnu`X?3R4oymB!rG$2!G0K?)cJp8= zzUj1RcAbjfYmsB;=V4XD6^|X5ieL(4OpsZS$wW8HH%z^Nkkeq3vd%IrfmBK&TaTV; zKyOG3qnnvda4XH4)ah=mITQ6Skd#vmDnl%rKYDO0S5MAe^#0~E)$P-GmR{mzpj;26Ew~X@7rb|jLRI@4VDrdooCdu&+&%UdgSEiXJT4Jky?dvk> zRJyrUy$b0~Tp|K(k;i57*eZ|93vf|>o>&;HhR-!1(a$_{v8$Yvyss0dZ zw4$y+664O5L24lo>zfK$OA{$%h_HpSXe=huUBOh2B}zh-V{J7n^K>k4v1P|lSxw%& zT9t~lf3)<4!z`wmC9T(?;Wpkp36S<>)0tcxb~4pXz}3Y)GOHlyAQ98J5(blS9Cls7 zOl(IEF2=fOc9}YdgmnVx-jw<%G%#y{L_1%CqL8HE2=FkZI$m8$iaX*3-x=%`fE2TYB`j$NIp?jIeD+v??5~+>pF5p+?B8b_d9f(=e z8CYznJO5?yjZkr0I^ETaEXrJx!nWIrW38-M`?GGfS@d-DcN#+8WIS812U?k}+t0XQ zS}<@Wj@aGZ55G~f9DJYp84K846=^T93>E3iMorf=s zlNcWqFF@JETi2{c=|Yq}v<9V%=wdvDTNB>W$HNb*R^j4PHNzEkO~GSPXNf~W10&0> zgcL)G_|}F;$P+HxPhJo0qw=Nd)2BY4B4e5Q^xK~;-hC8kDc?uI7T=^Mt2WePM7;SA z|D>kiJ~Exg02&J_f~rG>(;=igoe_<}N{z#FJWZy0noh^j9GXB2sR4F32`k!68Jb2{(G0qUW+P*pLw`+k z;TT%rKjz_*^F(OlBzl(S)4$LHdW%}=V_L{nw1|h(Vs54-yqMbf0;HIow49T)f-j|& zd>O6cYiSLC1@qRL}9k9Ql7}<$d4~^lCvVujq z4BBYWCW9_DXtVuqi$TTz0ME+NAJb{7d+?{2=^>Tx@bwtDQK>W0RqNxDz1^tsZe z!W->AoNU}rbxe=L#nFBmE)F8HpGF9{LT!y`9EnIEX2Y$;|6Llj>MT z31=4Qe>F-KVxbP^-&4rME`&NkD|SDW1i{$tP!d#oRY^QTIV|cma1djLj$5b$~i z!1^&D`z#>)93cBVAo~J;A3x7|gI)q;e^vn5Z4P7wlp3-E%3{b~hdK?}FQZfpS=l%> zpky;W9LQb|Dg!}w8})~5#)0exlxz+IK=w?H#qmcB*~xv>c$kpIp)tfj?92DVZv+76 zhi#i}7~E#d5#6eNu(5x?rA=ro1eMR;aJwS-j)0jLv|s*y$h91%5M|n z;kb$3mS2P+82mMYlHVYOco)IMZ|N?2524>5l-*pYr)s-vSf;i1D2bEC%Ah1pT9T88 zRoLbQ#qG-dmxJbou-{c!`>hBrZ-f;XpdY52Q1UCsJp)c%Mp`Sb=&BW0bY;agH3`Br zwbh^|?z*114}t~?U9J;OiF-yb?R9U4z2eAUFQMlRIDE0`d+nuZI;^EBFQxV35T)e$ z6)%ku@yXK2`bfaQV;steA&^s80Z@5Z58O+WB>FKB=uftTop7^?+Kj+%s&&`zqbYl7 z>TE229aer?OVEzAW`$})JL#(yr^ecl9eRbQE1F=U!Y+5q47)|xBeN2rEeE%g!jtT- z`)Q^J`IEc(4mwW7L;3EtMcsE(;F?h1?!KhG>C7THyxIF{PC=-+%w@I9kp2>TX%v@J zGaE=V{Ir<^2wg(-09VkfJe1z#O8Om#c`{ey-l&F`;)jJ7^Dyqlb@x^tfupxdz7}_1 zck_5<;alM6CLE%p}#`l@GAWf3DK>v(l_CEzlzqNSd5JXl*IRm7rfU- z0!kJVP?B)P3n@2|*nc@>U9Rlk2Z<*s``3X>g9>kinhsKgn)Y}?P3&LO5c?OaKY@%- z=%7j%#KO<^enK@~6!;^$2(J%l>IYQ*KJvZ1;o~Y!8-CfTASW5Z9@}@#?Qi%cVso!$ zG_XR;GQIs=k_`@bpJKCz(Fetf#f$_1%J#>WAYNehzKC}Kvv<`yX797i9?))KY6(SP z=Qvy2LFY*6M8;woElyN#78!rU3>VmZg$Ak>$s=ov7!gyO`|iHoa&n+t`$?AR&iBw> z`hsw9l8aC=hfpC0vj`@_0fL^a0JXF!@3NQU+=qAyjDIRjVjA-7>9mPw&{m#BH}V|1 z9})S>Jda*yOcJI)5m%XWaW~qE+t9^$uEj0rc3#9gaSM76ewFeqKEnQc?t^Ukbk;@0=5T$P;z-Enztlb4R~sq|G47T;40q+5o&Qb z7O)-Kg8txg=bt_sgs1fHR|162o}W*Uef>~aB8&D}n+Q&_>?~Tv1S&ig1bWW5cb{@O zYI87dQ@3^>f5aDVExG%+>Ma-sBmO$jT9^k~A!(zZOaR&dAa~VU)Q3a@bwgxts}z4y zWg$Hr2|Gwf$wGRyJ-6y&999?Nutufpks9rm1nE_g>O9hM8i+XUPU^JjRpn1p3ir>5 ztEIq~;IvR2U)bg_DgybP@110-k&6WQnwvK^D_k4iNw--%n`$vH>vXb^r@N(qXSH7H zYMW;@j!P{n)}}4tVZ>^`laAL(jMKlaxWDY$VeH!LBVNn*EiSojw|Lzt&J8$yBwhvI zbpcJlsog?eL+A0uK4XNZ8t`5>nrW^N%D|iCeI}Bua7`2?vLg zb>@MRb>@MRb>@MRKJ%F1`GpFneRQ7ZJIaR|wAFKy@}YjZ%d<}T(0~f3m*ez9&u2AN zTl{ktf6H?!t}4V(Tvbw~xXL+*<|QGv<^?aRyy>^8qL1F8U}3P0qY>>Ht>X~wQ_s*o z6|qSlPNS*@A7b^@FVNdbqq;@G`rcf8ny2NC~}Nk`Qi?kCf2UB?;j^`bY^qQIZgDw~v(2 zwvvQ!S6+(HAl8Oc?taRK$JBY&qX_&3oR9JKcn693Iz-!FrU;^FqHA#6@ElP6JpC)Z zV3mI1l>XBx{g+evl~ej}r}VZ}`aS(0j%PHzkL)_!XIXXZvqvCB*4%#2LHfg=0KJaF A-T(jq diff --git a/target/classes/com/engine/attendance/attendanceanalysis/cmd/LeaveEarlyCmd.class b/target/classes/com/engine/attendance/attendanceanalysis/cmd/LeaveEarlyCmd.class new file mode 100644 index 0000000000000000000000000000000000000000..747018704a62ed2829207f8fca30691c85f3b89f GIT binary patch literal 1325 zcmbtT%Wl&^6usl52?m)d@lhW#jwsz2}}ebLZ!;?>~s>5#2A-7TqdQo^F@%xl^RwBHd+F=t(8@ zKBIbbaLA9iGt)9~-tbAcHDZ+SN1k9*9Y`hK&cd;X-}7;ROnnf!JQ(pCZH<#FX^U9NaApUSD@hMqGJ{7AgwaWL6!o=f*6@9zR-in??+0D zW6h}DY-Kfo9ATuOh?aWpyp$)Wwct<`$HJXyFnHcv?TUpXff&1DqNCX91BNRvoziWs zo*78nX3%K`qrHE@W90tN{0-$|^x`a27FU^G93yY_Tnlx_^29k9Pj$>)ZIp^ss#i*E zxz`)=G}}=gMl*>2S|%Hx-O~r=t=Lqcdp1>Q+om0AFnWdyIOF0o>SUVXnvMDEnHc4o ztr6|wC2!$*6D%GM70IG=h(5qtu;unQV(rcsvOXiqQ3>B|Sfcajun||NjHr=RBWoi< zpE(l{tMF~uBvXTT0lr0bco*pszGm7Utf{fsr^R10rLf4<7U&6rm7+5v6);Ta6I2Hzl8Kl`6WY`&GH%e?|lxIsy^+_yAWn>W2@X1On zOVlqd$;{FBO)Rk1jACT4m>kV$&Ie?0<)kK-rMe~-d*ZR7-$NV~_*@b9Nsb delta 49 zcmey!ah^@$)W2Q(7#J8#7^Juum>I;_8N}HcB-j}wH%e?|oUG6EfRSmk0P_M?1_mYu FQ2;z;3V8qk 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 9a5e1ccd79fd9bb041a9ecc9464f3219635df632..2b46ea765da89c716899588ca3cb2eccfc77fb11 100644 GIT binary patch literal 11594 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 delta 2308 zcmZ{m3wT^b6~}+GuY33IO|sdfNj6Q|l(aP6tZhRREL)IJY_-r-Ess)A=_Xmyl!c_( zO(}|Or55qQ%MlAcK~#{c6jGXOBN$M`7T=;)#0Mh9cLhZRg>vR@T>1fi$#?FVnKS?Y zng5(K$$@kCbQBJ}wC_HkQ^g$KNX{bfFv=E-OTu)qH9~+(ZQc{1iuYPv79q_0VzOa- z48?Yb9b6gVgIs0tA)61|e8fb4G{V(f6X9B}Gv<1Wk6CDkdUD2mJVG5eSbV~!u+vQ3 z=rEI;jQOO^rz}40@EJZE!&hRs+2IyGAH&a=4Df9xv)gUH9N`XjnZZ{qzUq+VYZ2~b zx6ObdxXWa6x6PQt9`3Q(YccLHLD6EL#iYWY9U9OzzU^a&eSQ@W4W~!a7v&UHt2d>$ zq!*3m2eXTM(!3*Xd`2 zOZBecCHm%IL>~-YR>`;sBf809ExxWZ)>93kkxXthn^!m`XZ2uC2A8+#TS7@aWry`0 zmaDI|&({IxM4!s&$HT2^iOz*r=^f5|{iL%fbP{h;oTaN8>-6GCx5K?I_wfzIYH#Yg z$kM_xPIQ@Kg(A?O&Zk}O=K)3KD+e>AF5l!^is-i5vW*{!;(;>I{Xy?#l9sJJa34Sk`J?V0Yr!4;9@<;v@<&QMVnlnarp=Tba|G4=_Aoo7Q39pa~A)0d7c+s{=-3+|MH>;XY#jr$>oTWQkUV# zX2l9m;whh_cUI32D_8lHU(uwu#hS*RsBTquKm{GTR7jstoAh@nOW#@3qBqs{>9sYD z`uUn=V-MHvP_kg_GwOE9H>_3t_4=xrEA^I!{Sk#dkjbB&&W>jE&iYgJbM-y?>83S} zj;kW7(q+ip$Hm5EjTvN<9%=4UQGI*!qk(G0Jbk#iUU$z5>04(d3tiIDilx#89H>QpEmC=yc?sZpe?xa_V~+(ei0W+;iROWBjuuOFu&9@{RG~yMkty*&1u{qMK8}c+h_@b0#>Z#OP(&Y7(4VPSBoU zUMg(ZB)fPx9@xjRNSgC~+)Z0-K|EX};g^-&P!J`$MTzA^#m}DR50{IB@r32ceg4=mPUN)ooupn%ZxRtDu3lxQ?)i>U0oG!Nz z;Tcwo=M$bo6na=AZ)PX^d7DfIg!Dn)&N~PS_5G|BFC=8kIYZ(sp!xW>9Ig zT!bXnEw)m=a2zvOBC2)S)2lDM6;g-YN@*yfM+9^a|BWP~63)#ykA1dv&WVAWq__R%_%!xptqxO6O0b z9xud7P~AlAI1g}wCFZz3@3^6Yw|MMPAg+L%4gw-?$ZJ75UkAj)XntJ`d5m6*aa1CO zawh)|L`q_~{0hzSq97dWn&9{`+KeQsbQEuChDf;CJKl&03g-WVI{6#_mXLXft5k(Z fcDc-(J1t0T>o(rc6`s3|50t&nO?$WU1-|$)QklA4 diff --git a/target/classes/com/engine/attendance/attendanceanalysis/wrapper/AttendanceAnalysisWrapper$1.class b/target/classes/com/engine/attendance/attendanceanalysis/wrapper/AttendanceAnalysisWrapper$1.class new file mode 100644 index 0000000000000000000000000000000000000000..f45bd05472963359cebab2ca63ae331c2d735f75 GIT binary patch literal 1971 zcmb_dYg-#d6n-b!l1bPWy1gh~YFn{}?IlpPR$I|XgQWyeg5Vt|yOU&-%_hxmXyAGL z0saPmgCFz}Dpl+CgOA_*>TmEjRL^VzY}@dS+(;sa=@f}~IBs&xaNOdU<;Zi) zam;fpaJ*d_fn$l|eU4?06^;)Q_%MNw7>qUHj`~(b+HF@ZO26#}48!@VSQD9c z;JBH*;|JFmj;T1|*QOh-ycBElh6n`1P$Y0pH2cKO1hURB5L6t0betidw;J_~^vaGW zGa?A2XA94Y4uvP&b>HzbcUq#^l&ws5H!9n6t#m!K+Q4S+pEw_dre2!JyB0o@`CI!uKVa^9Oi@ z(FtNFRcN$ZmYjCfMo#U^<0W<3wD+86xeed(%5yTPH0%UE*6|5G)se=Sj^{C|;{}}4 z@uCtYKBH3?txhL_RUMy$G92Ek8lp*oMI9Dwx~HP$+no;0khX8BiMC4xmB1|nvsa~M|A z-4b<$SI!iI7TsyDXdg%Rnmkh0k5+wXt2&RTl{~U{7UdzhEJ>b7&x}PDUMNbo^n#`JrpysaMVl?mu1+s3uI6*u z8;m>hgBZ|q^XrcP2Ch~YBGvo^fPgu z^aV0%&~S*5|IG87VCIEQ#LSDEh?^tYCN%Rd4w=S)`5j{MZ6sp&1>6|eMlyyiq*hF0 z@L|_r#HBy%(j%_J-{Qy?hPo++DK2gtjkt{vITk^V6QUU>BFM=Qc_M;5X^eCeKD9G= z+IXgmJR1g|iUdCwBByteZ-{~zE|Q$Y5Xmi!;4b}fevbugql$aDgCFoEe#BS!318zr zex~oA#K+(G760Hj{EOf50Ds^T%|1!Fh*D%QL0XLz^;E;SOjZmpQD(X-yn-tjr%{T0 IXGqiMf91R%3IG5A literal 0 HcmV?d00001 diff --git a/target/classes/com/engine/attendance/attendanceanalysis/wrapper/AttendanceAnalysisWrapper$2.class b/target/classes/com/engine/attendance/attendanceanalysis/wrapper/AttendanceAnalysisWrapper$2.class new file mode 100644 index 0000000000000000000000000000000000000000..7bf853093768273fb163a2641bd333ca3fd1fe84 GIT binary patch literal 1965 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 delta 2016 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 hSQLFOlaU& z=~`ZjYw7ZtALVkNnJJkR(TXo~&iT$h-(`Q7dGY73zXMppP6kuBHjYW?W0;@7b==6{ zCO#a)QX021_z1T%xPykBf~Y-ITR+meX}PpUu`&TUD_=^(z$Irw%%wr z^)2ab8lK!}H!HN;F^FExqQsrroMUBwy4IWW%eh z(bjm)Y}tm_cj@?@6JefGi6UdNCB3TC+Hh=74m^QUap7+wm9}SkPxbrevmur~q~$<1 z`W`)4Esnl&rEXHA+mId4arF%nX4uWpN@Za*W@?&JlnxOB<^Q5jAZ9mJ{`_P|xf6)@ zx|YCL)9{R{*<*y$5#vgtxO8Q&Z+R>bfvpqQA(zJ$bV_Pfh8q8elT+Fexc4Sje2T(i z5@?Qc?bmkQe5SA0d!B1FJe57i4s-bCd}L})p9S&2RK1oRHqJGbH4RzZ)i8^<)3~Q$ z9rx4N(6EV5Sl&HpvFr|sR&;imCG!xkQ<@u`N-@HxkUDh&-)Y-_lHivk7K;y-q}z~ZZr*Am7OEc%@` zGKnZ<=LuX1TQ{1Kusxz8fis8Fcp_cBC2i>%mi{G2n!tqJx2&7Np!j!X;Xo0%@T&iQ zfp6A#9mnDT)975SYwbEg&)klB8EW}9(rsZWMf*BzE#Fehaaz`JY&w=or<%vKl(FUE zL!-CvH{T4W&yc22%vOqb`sC_(%teWLtrJlYF7fX$#s3PB0BaA^h~X`szUCU^nkoGP zQCj>7u^)JfBggL)R}h;ZdYtGpJk17ZoW%@Je5VSQ8sFhw;~Gfv+|6+x!#VEG<6VB0 zwK7+QiHYz1TV*BXOJ;oSfreP9oms*~>QFELK$1xQ7fU}PmWw|}B8DR*w{xkTtBK!` z{w7|o9bs%aafI>ZWImb8V@&55;dvD3*=1U}K|3nCwZO*9 z=$44MME|lx&Eq}#lH>Y5cX8gFrSuBfxy<_y$U@R*K`|8E6<^-vc^B}pFuhKDCF)dB fT_;wtpDHc>4DBQ*lMzl*p--_;&my^0{9gSFy`~|Z literal 0 HcmV?d00001 diff --git a/target/classes/com/engine/common/util/DateUtil.class b/target/classes/com/engine/common/util/DateUtil.class index 3aee837703bc6b1ff956da42c3828021dbec4edb..1f105b2d1f872e45e26b8aa76722b920a9c17b29 100644 GIT binary patch literal 4997 zcmb_gX;U266+I2J_Vj=N0a}qz6dAF2?FFeXkrP=(l{nouqtzF(#uP8U7Dw*DVSU+%4$i5Wog!B_>74PHcYsv%G|Ri zZs4Xgw`BNr6W_o$rTLcFcrJo5}WqTjRBrmR0ql*%`>`KDFJ9jR6-PRSL52KM)a8Vu}{?9#5pV(!*D zyGbwgq+y`_ZoJt-bwhD$@0ke2H6{#n+;YoN<8?8b zS-kEnxwKPP{tnxU+bfpmj==Z!f8=d$%be z3tl&+_W0`ANcA*uqVB?O26-dPE3>vsVdM?-IR;-FK?&Opg|Q8!*n2&x7bNf0wf}!A zB@Hy$T6fP^IhN(3FBh}HfV)m{y(ip-ZkRUqY-YxQNI zGrXQ^!BLs_@=W{ZA?v? z=x5*ZHedh`bCl$fGn|pbGic;~LiTQ=VH=HGh)ngFTZnEVwuSf|E_raK+SY;;S`}o6 zcMOlh29Igx3uGR-oB8y>u`ML&NC@*I1V5_4 zkMp3!&|@yWb9kJfz7LJ`Veo-w%y2Wu33Fo4W`=5Ja@w1g-fg6OKdcZxP9e${t0dL) zqow9Y3x<^+QJo9%Qo2i*u1`J?po!Y=!pbqs_1&#C?X6&TaR(+vH-DH`bu3HuPE zG8~|s#zj^5Q6w zG2;AV2&TB^=~J+(#5M!EjkYPKX#Z^<3u@C-Xo4Lu)P`y0QWHtdkc6b@NnFvu(>f>} zx?Bmoh4yW92zKWO_h9GIg6je74vpQSuyY!FPGgHSDUH$CeV(=wJlh`vzClT?DsW$# zJmMlv^K^k91KLajUAS6vp+qB55clQ)Rbk&%2X(mKgx4VJs2N;>N zw3lWnEU*{hjK?XeIE6(fC6P%nGDq$gnYS5-cj)W8^zywuMCL5B;zdUI1S2zruY{DK z+#8mlcYWHV1b5t>J1ntHW%~XlI7`zBe6{xNA%Z7=-K|F{o*$#3wM#vlTaT%y)p}e# cWAa_%Nw8OmDZ*IHZkkbS;>y>!-hik62S%PFdH?_b literal 4865 zcmb_f`Bxj)8NCA%l13xh2m@X*c2XO&M9$VYK-}7Z3kCr-V8>lEzyNZz5HX7FF4@|o z&Ej-V+H`Nzba9e8^c>3R5B&rBH}&-NesA7LV{54Sp*m;Yy!Yn4``vGOcSisE&p-YN z;4yq+;uxMupc}S{MJ!3PY{J2c%&kgqO`5zk*Q9w?9u%Zkl%^!ZvWay(XQF})nR884 z@w_zGWq8BHO?*w7uM7M)68I)wFxk9l;w8K+!&l@!0+gUeXbh0buO3`++qqghJb9_M!U8gc+AnorMA1@X+HVjz72?H(Oke%Ut zDes;&(A;zCvVq7*dD$_rXDVNErmMw8r!sFZ7C4icDlgfE%XTF%V?7yh*YdjCqL#G<2$VVI% z>&olkas#P?Q1ZPua3ByG#nyjB^NE7J;cDXvkIJZh)4<6PA{RrMG%w3~<07+hZiPWs z+f&-Be5vX>j6|&H_bjz2=MUqh@^x)Kz3R9l)k?)FxkAvuzMfEnfpwBy+Lc($-&|)m z;iaB547A^kH(RJ~C~oaN6QQ`qgn^E`_XtgIQ;ZKhYXc#X(RjimdvAnW3M>H0ZEDW7 zm!8ep>$*tx5c0g^UU8h#c)40(l-k3f8Q8>zYge@S_;R&kyZLg7@d@O0RL?S{0o<#O zy(2EY)zzbD&pMTSd70b8GT&Hbr?@@ll$O1iNJ_LT3^6_N7<*}K574XyhlXUkw<5_B z+Ti}{426N#I#{htCPO0ANGf1xM+p$(yL3@XdU&azb-lWU?n-<=}tr*_6@I8Fr!U;TJ;RpDkg&)cA$I|>nnor4tcck|&ZdrIx z5PoXmXLv7$pIex~F9hzFG5pHHukjlTzs2t?{2uSe@CTXsz``HBHGhiX&ldiI+cN!O z3?Ete7=N{J2e%EFqG|)V+<+)$TYb=#Lyh>@s%$Wrp2o@181~LYSqpK*jTqr&^p!0x0g`Xy@M2&2VOU+ z*7(BNOyM+eyzatI26-6EE3>vsP2}P7IR@VtLG{`Rg|Q8!*n2ancO#F}mH&S#B@Hy0 zsk`S39LsXiSBlwSz+I=fUar`M?7Z#-3#sv8&}koAM9D2{G3I-p0+4jewfZv98D3Ad z;Hb=dN^0P2kX;QV$f`aWWK&b(IE7Fvcy`AS2Y1%-3>>M4uIBv6TBTenFYvpD9}uJG zuFmmf2M$umI(qh0(2d%X`P~JX5lky0s@`(8ya!FUJW+DTZrCCc5uPo1mE3GdjQ$sRJRH28FrD`Se;l9I;8)2!ayRqofumbU(2)@4hY5Z}fp>Ew z9oEdH_XN%m)c2v8K0J9}GiJD%Zo(YjwVAdeIdagLKMRR$|;;vhaieL&hvoEAsE4^ zru-z!O^)Xtq8)s73k`+i9n^CQ&^xGmSdnAglE8%>VH(QZgBc5j`5eYIn~$}FmwLCb zclgk4TERtLa*|@aL^(`ekMP>d>pZVEUW3eJ%Qjl?co|jqv>vlwTkjYm70qgYmqNP8 zC`~e%IhNxLQ}TIon8Pd<0+G9c zlXr;qE>is4u^;a#CTEo|T{R|MnhBBB>2Bil{fx|`w3lKjJk4H&GajcXIZfhAno}_O zQn5_FSGXBTenZv1&*Xlvi{#HR6>)sI_5~mZM}EgLhbdcsLsRC6x~DT;>YmITRreP8 aI`G8LtAQk8EXFlO{%Jn>3ZFOOtN#Tb(G?N^ diff --git a/target/classes/com/engine/common/util/Utils$1.class b/target/classes/com/engine/common/util/Utils$1.class index 42fa089c6763dadc8402c3f4ca48955307cf3f6e..577d9aaadfa66712598aa9dc5110176d016d2370 100644 GIT binary patch delta 13 UcmbQvGM#0^4Ms-E$u}A803jX(g#Z8m delta 13 UcmbQvGM#0^4Ms+Z$u}A803jI!ga7~l diff --git a/target/classes/com/engine/common/util/Utils$2.class b/target/classes/com/engine/common/util/Utils$2.class index 66351bb9a3e97410d736223c5265bfea471eb1c6..c9693157060d10139766c4f48f0dbe5f4fccf5bd 100644 GIT binary patch delta 13 UcmZo=X=T}PjFC}l@^MBx03NLbJ^%m! delta 13 UcmZo=X=T}PjFC}t@^MBx03N6WJpcdz diff --git a/target/classes/com/engine/common/util/Utils$3.class b/target/classes/com/engine/common/util/Utils$3.class index 6d6b504d322f5003333ee4044ad4a69fda30f4d9..bfca27ba7f03fe6427a5822419683385e1574481 100644 GIT binary patch delta 19 bcmeBS?_uBYjEQmkGy4JnO790K delta 19 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 pYA)I(|Mj{|}4bhT8xD delta 2704 zcmZ`*33OCN7QHXM)bHPwgc$5J0qLMjkVI$|h$MtH5HJLT2|>b|7Li4a3`EAgQRIvw z;_@9wU`BLu#06BKHE3EuRK^i^ao@LbSJW97Fc@$B&vHhc9M1byuWsFXb>FMk+*SF} zz~ru<+qMDdFSBgaqb-C9NE`EzjVf$a*k&f%6&|*cgB`{^V&hRfX4Ab>;h#1%+QJCn z@i6{{Cyd#p@T37gWf-3}qh}1@S%v2e+4DAP@q&%rc+p1kCA@6oCA?zeRlF9)>v+SM zHx=Hp5yRUS?lwrW#PE)VcWu0f_s!WKSh&$RKUDa)jo$dk#>e>Za_prw=KXgNZ1 zm2}o}q(n59V~+D)I9ie?Q3j@^i$UZ|S3$PBcYdO2cD!PKV$mWk-Q*}O-6f`_K)Pz_ zAu%VeqqC-BnwF#G7~V}wPx*tALM^@ISS`J!NJ+7l# zYdM~w$O#e=1nMVL_8F+;L@oWKzs7oO&@w{fH=!2lb zQiaPE_^5U(EK_V-Xh%Q#_9CN$n|+565QQt0d+{O2CdY|f?#C;XutN+)9!k*-W$1}P z>$Jp3G7LR^NcZ+~`Hk1a_yk7EfryqzYIX4Kpe3Pm$Z4ck-V~Hf)4X{8A{ru@1APL`rcxa-~vE=GPOm1=$^J!2wr8 zO_?a=>%e{tR%qdDKaNuPn7;jpE8Ip;J9w5()=<1vG6<`s0yj$~Zl#E8Wh`!CS7>pIVgn1Imf>B+QeZoTmE?gdkV(QguBKD- zxW!nBYY=8I|G>4hA%?UD*K^e-It>Rmz~V6$XMdq>#!lRbzp|PJNEWfHSS#feY&CZT zdAx@U05Z+3K{gGkC!=}0Nt?0#4S#2?|9^4Kql(e&+1Bh^s61;fhxUHq*Wz6xQdu=_*Fbq5M< zB2+u_6;kLxK0Po~*84BV4doRQr&%k7Af+=Dq2S zlyEb-Q|O9T6k!`i;^8D8^A4)`7!&+BgMJeCvQKQn6NKy{WE)qWanm=I*V=?kH)mm@ z`@1=_Npb=1#ywo+B@bw9M)y)q(~5Tfg(loWhv)NnGs6{n^UOrw^Qx)ky@af`T8 z9Kln;9%3U(+XYQMk>AM{{y-7X$faV&V#1E)%9OxX)HnEYWoli6KUb#JJs^p+%$z)9 li=45Y5c69xkv5;-3U_YtKR@QrqN?84yTleez-a~^`~^CA`dV@8U;mi02#>LP?rSfJQrf5buwgQ zEa@zh)47PLW08+zQ_v+8buMvPV@2c2UfJI}nCrbz4xS$6n8sCu64w;QZObm?@>Z^3 zE!u^WWofJ$T<6ArCA(zhHP#Gna!aFZP+?u;w!t0lYTPr};J(2Fsv4UHTRiMFL$keK zq5RrH&2O8oS8sT(DYET*=F4uQWv)A2_lXDvt?qWW8*Nu1m##LQSB}|oyt?_g+i7_9 z-di;l8&+l6>E5n7xjJf%3+uVlakqVi%;8v9+RWOsj_>(qB}i4j=Cp<{1%%AT=Xupu zb`1H&;ZaeL-;g*iH&e1AIg(I*{{VB@WCZ{K delta 825 zcmZ8eOHUJF6g}VcF?Koyic+*xi|_JsP^+lrRf-~79#V8a)Ug>HI;0&C+;rm~s4V>f zZd@oPST)g|3lsl?TQ?@gor&U^sWIqGa^Lsdd+zsM`4FD?`0LF(0BPJ-prT*F0M3M= zVK9WVIOl`-{9VC$q!nDi#Sn&YNuju`;0iJ_hGmS@b9PXe0%E%UJXvd9GVa+G!!q=B zV^VhvfwugzzOHL)j%jImv+867VtKo$TX*z|sV`Z^;^wNc=o$i3|J4rf@n`haKdz;h zOIpFHnB`KYS>Q$HmX?ip(aDVR7l;%by?CEZ9<+?n`lq+!5wyq{Q!$P#BPu44lQF5{ zDz3?xQgI#AGH$52iM)&%6|D5N=4sv4e)l=Z-QI&)Ufb%H zx?X;f21PB*7jr+p63C3Qm7Yc|r~|#PAYRar&_)^bf>A_itIYzmV?VtR4xob(xA`%v zebn6zNcq0k@NuQPBZ()7Zo}Um*g^1-wEJ}Tn~PiXd%!US=w#vNHKWMk5OorHZ%{YE zA{-M#CxHozgUo}q3B=LGp$U5KI?c#oT1UKy^b-*oN%4a?A@&_*#$9lOh(YRjZ({@U zOkV@?>^AoG59}Z`> beforeleaveDate = Lists.newArrayList(); - for (int i=beforeleaveDate.size()-1;i>=0;i--){ - System.out.println(123123); - } -// System.out.println(DateUtil.getTime("2023-10-30 23:00").compareTo(DateUtil.getTime("2023-10-30 22:01"))); +// List> beforeleaveDate = Lists.newArrayList(); +// for (int i=beforeleaveDate.size()-1;i>=0;i--){ +// System.out.println(123123); +// } +// System.out.println("".split("-")[0]); +// for (int i=0;i<5;i++){ +// int j=i+1; +// if (j > 5-1){ +// j = 5-1; +// } +// System.out.println(j); +// } +// Map jsdkNearestClcokInTime = Maps.newHashMap(); +// jsdkNearestClcokInTime.put("after","222"); +// //jsdkNearestClcokInTime.put("before","222"); +// jsdkNearestClcokInTime.put("equal","222"); +// if (jsdkNearestClcokInTime.get("equal") != null){ +// System.out.println(111); +// }else if (jsdkNearestClcokInTime.get("after") != null){ +// System.out.println(222); +// }else if (jsdkNearestClcokInTime.get("before") != null){ +// System.out.println(333); +// } +// List lists = Lists.newArrayList(); +// List lists2 = Lists.newArrayList(); +// List lists3 = Lists.newArrayList(); +// lists.add(new HashMap()); +// lists.add(new HashMap()); +// lists.add(new HashMap()); +// lists2.add(lists.get(1)); +// lists3.add(lists.get(1)); +// if (lists2.get(0) == lists3.get(0)){ +// System.out.println(1111); +// } +// System.out.println("aa|aa|ss".split("\\|")[2]); + + + // long numDays = DateUtil.getBetWeenMinutes("2023-11-08 15:40","2023-11-08 16:30"); +// System.out.println(numDays/2); + // System.out.println(DateUtil.AfterMinutes("2023-11-08 15:40:05",numDays/2)); + + System.out.println(DateUtil.getTime("2023-10-30 23:00").compareTo(DateUtil.getTime("2023-10-30 22:01"))); //System.out.println(DateUtil.beforeDay("2023-10-31",1)); // List> personGroupOrganizationList = Lists.newArrayList(); // personGroupOrganizationList.add(new HashMap(){{put("dx","4-夜班人员");}}); // personGroupOrganizationList.add(new HashMap(){{put("dx","8-测试条件录入");}}); // Set personGroupIds = personGroupOrganizationList.stream().map(e -> Util.null2String(e.get("dx")).split("-")[0]).collect(Collectors.toSet()); // System.out.println(String.join(",",personGroupIds)); +// List list = Lists.newArrayList(); +// list.add("1"); +// list.add("2"); +// list.add("5"); +// System.out.println(list); +// list.add(1,"10"); + // Map map = new HashMap(){{ + //put("11","22"); +// put("33","44"); +// put("44","66"); +// }}; +// System.out.println(map); } public static int getDaysBetween(String date1, String date2) {