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 e789cef..a415cae 100644 Binary files a/target/classes/com/engine/attendance/attendancePlan/cmd/GetAttendanceItemsByPersonDataCmd.class and b/target/classes/com/engine/attendance/attendancePlan/cmd/GetAttendanceItemsByPersonDataCmd.class differ diff --git a/target/classes/com/engine/attendance/attendanceanalysis/cmd/BeLateCmd.class b/target/classes/com/engine/attendance/attendanceanalysis/cmd/BeLateCmd.class new file mode 100644 index 0000000..f6d563c Binary files /dev/null and b/target/classes/com/engine/attendance/attendanceanalysis/cmd/BeLateCmd.class differ diff --git a/target/classes/com/engine/attendance/attendanceanalysis/cmd/GetClockInTimeCmd.class b/target/classes/com/engine/attendance/attendanceanalysis/cmd/GetClockInTimeCmd.class index ea682d8..154cf22 100644 Binary files a/target/classes/com/engine/attendance/attendanceanalysis/cmd/GetClockInTimeCmd.class and b/target/classes/com/engine/attendance/attendanceanalysis/cmd/GetClockInTimeCmd.class differ 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 0000000..7470187 Binary files /dev/null and b/target/classes/com/engine/attendance/attendanceanalysis/cmd/LeaveEarlyCmd.class differ diff --git a/target/classes/com/engine/attendance/attendanceanalysis/service/BeLateService.class b/target/classes/com/engine/attendance/attendanceanalysis/service/BeLateService.class index 54e39a7..e08d52f 100644 Binary files a/target/classes/com/engine/attendance/attendanceanalysis/service/BeLateService.class and b/target/classes/com/engine/attendance/attendanceanalysis/service/BeLateService.class differ diff --git a/target/classes/com/engine/attendance/attendanceanalysis/service/impl/BeLateServiceImpl.class b/target/classes/com/engine/attendance/attendanceanalysis/service/impl/BeLateServiceImpl.class index 06e4221..44440bf 100644 Binary files a/target/classes/com/engine/attendance/attendanceanalysis/service/impl/BeLateServiceImpl.class and b/target/classes/com/engine/attendance/attendanceanalysis/service/impl/BeLateServiceImpl.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 9a5e1cc..2b46ea7 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/wrapper/AttendanceAnalysisWrapper$1.class b/target/classes/com/engine/attendance/attendanceanalysis/wrapper/AttendanceAnalysisWrapper$1.class new file mode 100644 index 0000000..f45bd05 Binary files /dev/null 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 new file mode 100644 index 0000000..7bf8530 Binary files /dev/null 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 105a8bf..e82b89d 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/attendance/enums/CheckBoxEnum.class b/target/classes/com/engine/attendance/enums/CheckBoxEnum.class new file mode 100644 index 0000000..0e3ac16 Binary files /dev/null and b/target/classes/com/engine/attendance/enums/CheckBoxEnum.class differ diff --git a/target/classes/com/engine/attendance/enums/ClassSegmentTypeEnum.class b/target/classes/com/engine/attendance/enums/ClassSegmentTypeEnum.class index 24f95e1..1136cef 100644 Binary files a/target/classes/com/engine/attendance/enums/ClassSegmentTypeEnum.class and b/target/classes/com/engine/attendance/enums/ClassSegmentTypeEnum.class differ diff --git a/target/classes/com/engine/attendance/enums/PeriodOfTime.class b/target/classes/com/engine/attendance/enums/PeriodOfTime.class new file mode 100644 index 0000000..dea2215 Binary files /dev/null and b/target/classes/com/engine/attendance/enums/PeriodOfTime.class differ diff --git a/target/classes/com/engine/common/cmd/GetDateCmd.class b/target/classes/com/engine/common/cmd/GetDateCmd.class new file mode 100644 index 0000000..6c6bcff Binary files /dev/null and b/target/classes/com/engine/common/cmd/GetDateCmd.class differ diff --git a/target/classes/com/engine/common/util/DateUtil.class b/target/classes/com/engine/common/util/DateUtil.class index 3aee837..1f105b2 100644 Binary files a/target/classes/com/engine/common/util/DateUtil.class and b/target/classes/com/engine/common/util/DateUtil.class differ diff --git a/target/classes/com/engine/common/util/Utils$1.class b/target/classes/com/engine/common/util/Utils$1.class index 42fa089..577d9aa 100644 Binary files a/target/classes/com/engine/common/util/Utils$1.class and b/target/classes/com/engine/common/util/Utils$1.class differ diff --git a/target/classes/com/engine/common/util/Utils$2.class b/target/classes/com/engine/common/util/Utils$2.class index 66351bb..c969315 100644 Binary files a/target/classes/com/engine/common/util/Utils$2.class and b/target/classes/com/engine/common/util/Utils$2.class differ diff --git a/target/classes/com/engine/common/util/Utils$3.class b/target/classes/com/engine/common/util/Utils$3.class index 6d6b504..bfca27b 100644 Binary files a/target/classes/com/engine/common/util/Utils$3.class and b/target/classes/com/engine/common/util/Utils$3.class differ diff --git a/target/classes/com/engine/common/util/Utils.class b/target/classes/com/engine/common/util/Utils.class index 94d7fa3..c931730 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.class b/target/test-classes/Test.class index 8c09ec5..38133fb 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 c519210..73ad339 100644 --- a/test/Test.java +++ b/test/Test.java @@ -62,17 +62,66 @@ public class Test { // System.out.println("aaaa"); //System.out.println(Util.getIntValue("")); - List> 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) {