From 54101fe06e01d3d4325b817485ee357c6a3730f9 Mon Sep 17 00:00:00 2001 From: liuliang <401809302@qq.com> Date: Thu, 23 Nov 2023 23:00:13 +0800 Subject: [PATCH] liuliang --- .../service/AskForLeaveService.java | 4 +- .../service/EvectionService.java | 4 +- .../impl/AbnormalAttendanceServiceImpl.java | 10 + .../service/impl/AskForLeaveServiceImpl.java | 31 +- .../service/impl/EvectionServiceImpl.java | 29 +- .../impl/ForgetClockInServiceImpl.java | 2 + .../service/impl/UtilServiceImpl.java | 10 +- .../service/impl/WorkOverTimeServiceImpl.java | 378 ++++++++++++++++-- .../wrapper/AttendanceAnalysisWrapper.java | 19 +- .../UpdateAttendanceResultWrapper.java | 28 +- .../enums/AttendanceItemTypeEnum.java | 3 +- src/com/engine/common/util/DateUtil.java | 18 +- src/com/engine/common/util/DbTools.java | 1 + src/com/engine/common/util/Utils.java | 37 +- .../service/AskForLeaveService.class | Bin 542 -> 523 bytes .../service/EvectionService.class | Bin 447 -> 593 bytes .../impl/AbnormalAttendanceServiceImpl.class | Bin 9354 -> 9643 bytes .../service/impl/AskForLeaveServiceImpl.class | Bin 5071 -> 5354 bytes .../service/impl/EvectionServiceImpl.class | Bin 4982 -> 5449 bytes .../impl/ForgetClockInServiceImpl.class | Bin 2192 -> 2356 bytes .../service/impl/UtilServiceImpl.class | Bin 14753 -> 14861 bytes .../impl/WorkOverTimeServiceImpl.class | Bin 10482 -> 19982 bytes .../wrapper/AttendanceAnalysisWrapper.class | Bin 14085 -> 14442 bytes .../UpdateAttendanceResultWrapper.class | Bin 16514 -> 15101 bytes .../enums/AttendanceItemTypeEnum.class | Bin 2180 -> 2265 bytes .../com/engine/common/util/DateUtil.class | Bin 5022 -> 5205 bytes .../com/engine/common/util/DbTools.class | Bin 4229 -> 4229 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 11495 -> 15188 bytes target/test-classes/Test$1.class | Bin 569 -> 569 bytes target/test-classes/Test$10.class | Bin 898 -> 898 bytes target/test-classes/Test$11.class | Bin 898 -> 898 bytes target/test-classes/Test$12.class | Bin 898 -> 898 bytes target/test-classes/Test$13.class | Bin 898 -> 898 bytes target/test-classes/Test$2.class | Bin 569 -> 569 bytes target/test-classes/Test$3.class | Bin 569 -> 569 bytes target/test-classes/Test$4.class | Bin 569 -> 569 bytes target/test-classes/Test$5.class | Bin 569 -> 569 bytes target/test-classes/Test$6.class | Bin 569 -> 569 bytes target/test-classes/Test$7.class | Bin 569 -> 569 bytes target/test-classes/Test$8.class | Bin 569 -> 569 bytes target/test-classes/Test$9.class | Bin 897 -> 897 bytes target/test-classes/Test.class | Bin 4652 -> 4932 bytes .../TestAskForLeaveByDurationTime.class | Bin 1792 -> 1791 bytes test/Test.java | 21 +- 47 files changed, 505 insertions(+), 90 deletions(-) diff --git a/src/com/engine/attendance/attendanceanalysis/service/AskForLeaveService.java b/src/com/engine/attendance/attendanceanalysis/service/AskForLeaveService.java index ae09281..73d3412 100644 --- a/src/com/engine/attendance/attendanceanalysis/service/AskForLeaveService.java +++ b/src/com/engine/attendance/attendanceanalysis/service/AskForLeaveService.java @@ -8,13 +8,13 @@ public interface AskForLeaveService { * 根据时间请假 * @return */ - List> askForLeaveByTime(Map param); + Map askForLeaveByTime(Map param); /** * 根据时长请假 * @return */ - List> askForLeaveByDurationTime(Map param); + Map askForLeaveByDurationTime(Map param); /** * 根据半天请假 diff --git a/src/com/engine/attendance/attendanceanalysis/service/EvectionService.java b/src/com/engine/attendance/attendanceanalysis/service/EvectionService.java index 3297fe1..be949d5 100644 --- a/src/com/engine/attendance/attendanceanalysis/service/EvectionService.java +++ b/src/com/engine/attendance/attendanceanalysis/service/EvectionService.java @@ -8,13 +8,13 @@ public interface EvectionService { * 根据时间出差 * @return */ - List> evectionByTime(Map param); + Map evectionByTime(Map param); /** * 根据时长出差 * @return */ - List> evectionByDurationTime(Map param); + Map evectionByDurationTime(Map param); /** * 根据半天出差 diff --git a/src/com/engine/attendance/attendanceanalysis/service/impl/AbnormalAttendanceServiceImpl.java b/src/com/engine/attendance/attendanceanalysis/service/impl/AbnormalAttendanceServiceImpl.java index 98fb4ae..c2daa17 100644 --- a/src/com/engine/attendance/attendanceanalysis/service/impl/AbnormalAttendanceServiceImpl.java +++ b/src/com/engine/attendance/attendanceanalysis/service/impl/AbnormalAttendanceServiceImpl.java @@ -3,6 +3,7 @@ package com.engine.attendance.attendanceanalysis.service.impl; import com.engine.attendance.attendanceanalysis.cmd.item.*; import com.engine.attendance.attendanceanalysis.service.AbnormalAttendanceService; import com.engine.attendance.enums.AccountingUnitEnum; +import com.engine.attendance.enums.AttendanceItemTypeEnum; import com.engine.attendance.enums.ClassSegmentTypeEnum; import com.engine.attendance.enums.WorkForTimeEnum; import com.engine.common.util.DateUtil; @@ -76,6 +77,8 @@ public class AbnormalAttendanceServiceImpl extends Service implements AbnormalAt saveWorkTimeBeLateParam.put("item",workTimeBeLateItems.get(0).get("key")); saveWorkTimeBeLateParam.put("itemduration",itemduration); saveWorkTimeBeLateParam.put("betweenMinutes",between); + saveWorkTimeBeLateParam.put("itemType", AttendanceItemTypeEnum.LATE); + saveWorkTimeBeLateParam.put("hsdw",hsdw); resultList.add(saveWorkTimeBeLateParam); // List> classInfoList = Lists.newArrayList(); // classInfoList.add(classInfo); @@ -109,6 +112,8 @@ public class AbnormalAttendanceServiceImpl extends Service implements AbnormalAt saveWorkTimeBeLateParam.put("item",getBeLateItems(lateParams).get(0).get("key")); saveWorkTimeBeLateParam.put("itemduration",itemduration); saveWorkTimeBeLateParam.put("betweenMinutes",between); + saveWorkTimeBeLateParam.put("itemType", AttendanceItemTypeEnum.LATE); + saveWorkTimeBeLateParam.put("hsdw",hsdw); resultList.add(saveWorkTimeBeLateParam); // List> classInfoList = Lists.newArrayList(); // classInfoList.add(classInfo); @@ -141,6 +146,8 @@ public class AbnormalAttendanceServiceImpl extends Service implements AbnormalAt saveWorkTimeBeLateParam.put("item",getBeLateItems(lateParams).get(0).get("key")); saveWorkTimeBeLateParam.put("itemduration",itemduration); saveWorkTimeBeLateParam.put("betweenMinutes",between); + saveWorkTimeBeLateParam.put("itemType", AttendanceItemTypeEnum.LATE); + saveWorkTimeBeLateParam.put("hsdw",hsdw); resultList.add(saveWorkTimeBeLateParam); // List> classInfoList = Lists.newArrayList(); // classInfoList.add(classInfo); @@ -207,6 +214,7 @@ public class AbnormalAttendanceServiceImpl extends Service implements AbnormalAt saveWorkTimeBeLateParam.put("item",getBeEarlyItems(earlyParams).get(0).get("key")); saveWorkTimeBeLateParam.put("itemduration",itemduration); saveWorkTimeBeLateParam.put("betweenMinutes",between); + saveWorkTimeBeLateParam.put("hsdw",hsdw); resultList.add(saveWorkTimeBeLateParam); // List> classInfoList = Lists.newArrayList(); // classInfoList.add(classInfo); @@ -242,6 +250,7 @@ public class AbnormalAttendanceServiceImpl extends Service implements AbnormalAt saveWorkTimeBeLateParam.put("item",getBeEarlyItems(earlyParams).get(0).get("key")); saveWorkTimeBeLateParam.put("itemduration",itemduration); saveWorkTimeBeLateParam.put("betweenMinutes",between); + saveWorkTimeBeLateParam.put("hsdw",hsdw); resultList.add(saveWorkTimeBeLateParam); // List> classInfoList = Lists.newArrayList(); // classInfoList.add(classInfo); @@ -274,6 +283,7 @@ public class AbnormalAttendanceServiceImpl extends Service implements AbnormalAt saveWorkTimeBeLateParam.put("item",getBeEarlyItems(earlyParams).get(0).get("key")); saveWorkTimeBeLateParam.put("itemduration",itemduration); saveWorkTimeBeLateParam.put("betweenMinutes",between); + saveWorkTimeBeLateParam.put("hsdw",hsdw); resultList.add(saveWorkTimeBeLateParam); // List> classInfoList = Lists.newArrayList(); // classInfoList.add(classInfo); diff --git a/src/com/engine/attendance/attendanceanalysis/service/impl/AskForLeaveServiceImpl.java b/src/com/engine/attendance/attendanceanalysis/service/impl/AskForLeaveServiceImpl.java index 2cfd064..b111b81 100644 --- a/src/com/engine/attendance/attendanceanalysis/service/impl/AskForLeaveServiceImpl.java +++ b/src/com/engine/attendance/attendanceanalysis/service/impl/AskForLeaveServiceImpl.java @@ -5,6 +5,7 @@ import com.engine.attendance.enums.CheckBoxEnum; import com.engine.common.util.DateUtil; import com.engine.core.impl.Service; import com.google.common.collect.Lists; +import com.google.common.collect.Maps; import weaver.general.Util; import java.util.Comparator; @@ -15,7 +16,7 @@ import java.util.stream.Collectors; public class AskForLeaveServiceImpl extends Service implements AskForLeaveService { @Override - public List> askForLeaveByTime(Map param) { + public Map askForLeaveByTime(Map param) { //人员迟到、早退、漏卡等记录 List> abnormalClockInList = (List>)param.get("abnormalClockInList"); //请假开始时间 @@ -23,16 +24,20 @@ public class AskForLeaveServiceImpl extends Service implements AskForLeaveServic //请假结束时间 String jssj = Util.null2String(param.get("jssj")); - List> needRemoveList = Lists.newArrayList(); + + List> offsetAskForLeaveAnomaly = Lists.newArrayList(); for (int i=0;i=0){ - needRemoveList.add(abnormalClockInList.get(i)); + offsetAskForLeaveAnomaly.add(abnormalClockInList.get(i)); } } - abnormalClockInList.removeAll(needRemoveList); - return abnormalClockInList; + abnormalClockInList.removeAll(offsetAskForLeaveAnomaly); + Map map = Maps.newHashMap(); + map.put("abnormalClockInList",abnormalClockInList); + map.put("offsetAskForLeaveAnomaly",offsetAskForLeaveAnomaly); + return map; } @Override @@ -41,39 +46,43 @@ public class AskForLeaveServiceImpl extends Service implements AskForLeaveServic } @Override - public List> askForLeaveByDurationTime(Map param) { + public Map askForLeaveByDurationTime(Map param) { //人员迟到、早退、漏卡等记录 List> abnormalClockInList = (List>)param.get("abnormalClockInList"); List> forgetClockList = abnormalClockInList.stream().filter(e -> e.get("betweenMinutes") == null).collect(Collectors.toList()); abnormalClockInList = abnormalClockInList.stream().filter(e -> e.get("betweenMinutes") != null).collect(Collectors.toList()); abnormalClockInList = abnormalClockInList.stream().sorted(Comparator.comparing(e->Integer.valueOf(e.get("betweenMinutes").toString()))).collect(Collectors.toList()); + List> offsetAskForLeaveAnomaly = Lists.newArrayList(); //请假时长,单位小时 int qjsc = param.get("qjsc") == null?0:Double.valueOf(Double.valueOf(param.get("qjsc").toString())*60).intValue(); //同一天可抵消多个异常 String tybcndbjlhbjs = Util.null2String(param.get("tybcndbjlhbjs")); - List> needRemoveList = Lists.newArrayList(); + if (CheckBoxEnum.CHECKED.getKey().equals(tybcndbjlhbjs)){ for (int i=abnormalClockInList.size() -1;i>=0;i--){ int time = Integer.valueOf(abnormalClockInList.get(i).get("betweenMinutes").toString()); if (qjsc >= time){ qjsc = qjsc-time; - needRemoveList.add(abnormalClockInList.get(i)); + offsetAskForLeaveAnomaly.add(abnormalClockInList.get(i)); } } - abnormalClockInList.removeAll(needRemoveList); + abnormalClockInList.removeAll(offsetAskForLeaveAnomaly); }else{ for (int i=abnormalClockInList.size() -1;i>=0;i--){ int time = Integer.valueOf(abnormalClockInList.get(i).get("betweenMinutes").toString()); if (qjsc >= time){ + offsetAskForLeaveAnomaly.add(abnormalClockInList.get(i)); abnormalClockInList.remove(i); break; } } } abnormalClockInList.addAll(forgetClockList); - - return abnormalClockInList; + Map map = Maps.newHashMap(); + map.put("abnormalClockInList",abnormalClockInList); + map.put("offsetAskForLeaveAnomaly",offsetAskForLeaveAnomaly); + return map; } } diff --git a/src/com/engine/attendance/attendanceanalysis/service/impl/EvectionServiceImpl.java b/src/com/engine/attendance/attendanceanalysis/service/impl/EvectionServiceImpl.java index 443bf9e..273da65 100644 --- a/src/com/engine/attendance/attendanceanalysis/service/impl/EvectionServiceImpl.java +++ b/src/com/engine/attendance/attendanceanalysis/service/impl/EvectionServiceImpl.java @@ -5,6 +5,7 @@ import com.engine.attendance.enums.CheckBoxEnum; import com.engine.common.util.DateUtil; import com.engine.core.impl.Service; import com.google.common.collect.Lists; +import com.google.common.collect.Maps; import weaver.general.Util; import java.util.Comparator; @@ -14,7 +15,7 @@ import java.util.stream.Collectors; public class EvectionServiceImpl extends Service implements EvectionService { @Override - public List> evectionByTime(Map param) { + public Map evectionByTime(Map param) { //人员迟到、早退、漏卡等记录 List> abnormalClockInList = (List>)param.get("abnormalClockInList"); //请假开始时间 @@ -22,20 +23,23 @@ public class EvectionServiceImpl extends Service implements EvectionService { //请假结束时间 String jssj = Util.null2String(param.get("jssj")); - List> needRemoveList = Lists.newArrayList(); + List> offsetEvectionAnomaly = Lists.newArrayList(); for (int i=0;i=0){ - needRemoveList.add(abnormalClockInList.get(i)); + offsetEvectionAnomaly.add(abnormalClockInList.get(i)); } } - abnormalClockInList.removeAll(needRemoveList); - return abnormalClockInList; + abnormalClockInList.removeAll(offsetEvectionAnomaly); + Map resultMap = Maps.newHashMap(); + resultMap.put("abnormalClockInList",abnormalClockInList); + resultMap.put("offsetEvectionAnomaly",offsetEvectionAnomaly); + return resultMap; } @Override - public List> evectionByDurationTime(Map param) { + public Map evectionByDurationTime(Map param) { //人员迟到、早退、漏卡等记录 List> abnormalClockInList = (List>)param.get("abnormalClockInList"); List> forgetClockList = abnormalClockInList.stream().filter(e -> e.get("betweenMinutes") == null).collect(Collectors.toList()); @@ -45,30 +49,33 @@ public class EvectionServiceImpl extends Service implements EvectionService { //请假时长,单位小时 int ccsc = param.get("ccsc") == null?0:Double.valueOf(Double.valueOf(param.get("ccsc").toString())*60).intValue(); //同一天可抵消多个异常 + List> offsetEvectionAnomaly = Lists.newArrayList(); - List> needRemoveList = Lists.newArrayList(); String tybcndbjlhbjs = Util.null2String(param.get("tybcndbjlhbjs")); if (CheckBoxEnum.CHECKED.getKey().equals(tybcndbjlhbjs)){ for (int i=abnormalClockInList.size() -1;i>=0;i--){ int time = Integer.valueOf(abnormalClockInList.get(i).get("betweenMinutes").toString()); if (ccsc > time){ ccsc = ccsc-time; - needRemoveList.add(abnormalClockInList.get(i)); + offsetEvectionAnomaly.add(abnormalClockInList.get(i)); } } - abnormalClockInList.removeAll(needRemoveList); + abnormalClockInList.removeAll(offsetEvectionAnomaly); }else{ for (int i=abnormalClockInList.size() -1;i>=0;i--){ int time = Integer.valueOf(abnormalClockInList.get(i).get("betweenMinutes").toString()); if (ccsc > time){ + offsetEvectionAnomaly.add(abnormalClockInList.get(i)); abnormalClockInList.remove(i); break; } } } abnormalClockInList.addAll(forgetClockList); - - return abnormalClockInList; + Map resultMap = Maps.newHashMap(); + resultMap.put("abnormalClockInList",abnormalClockInList); + resultMap.put("offsetEvectionAnomaly",offsetEvectionAnomaly); + return resultMap; } @Override diff --git a/src/com/engine/attendance/attendanceanalysis/service/impl/ForgetClockInServiceImpl.java b/src/com/engine/attendance/attendanceanalysis/service/impl/ForgetClockInServiceImpl.java index 5e97ab0..eedb396 100644 --- a/src/com/engine/attendance/attendanceanalysis/service/impl/ForgetClockInServiceImpl.java +++ b/src/com/engine/attendance/attendanceanalysis/service/impl/ForgetClockInServiceImpl.java @@ -1,6 +1,7 @@ package com.engine.attendance.attendanceanalysis.service.impl; import com.engine.attendance.attendanceanalysis.service.ForgetClockInService; +import com.engine.attendance.enums.AttendanceItemTypeEnum; import com.engine.attendance.enums.SystemItemEnum; import com.engine.core.impl.Service; import com.google.common.collect.Lists; @@ -34,6 +35,7 @@ public class ForgetClockInServiceImpl extends Service implements ForgetClockInSe Map forgetParam = Maps.newHashMap(); forgetParam.put("item", SystemItemEnum.MISSING_CLOCK_IN.getKey()); forgetParam.put("itemduration", 1); + forgetParam.put("itemType", AttendanceItemTypeEnum.MISSE_CARD); // List> classInfoList = Lists.newArrayList(); // classInfoList.add((Map)params.get("classInfo")); // forgetParam.put("classInfo",classInfoList); diff --git a/src/com/engine/attendance/attendanceanalysis/service/impl/UtilServiceImpl.java b/src/com/engine/attendance/attendanceanalysis/service/impl/UtilServiceImpl.java index 832720a..d59f1e5 100644 --- a/src/com/engine/attendance/attendanceanalysis/service/impl/UtilServiceImpl.java +++ b/src/com/engine/attendance/attendanceanalysis/service/impl/UtilServiceImpl.java @@ -17,6 +17,7 @@ import com.engine.core.impl.Service; import com.google.common.collect.Lists; import com.google.common.collect.Maps; import lombok.extern.slf4j.Slf4j; +import weaver.conn.RecordSet; import weaver.general.Util; import java.util.List; import java.util.Map; @@ -55,12 +56,16 @@ public class UtilServiceImpl extends Service implements UtilService { sql = sql +bcxxIds+") order by b.kssj"; List> dataList = DbTools.getSqlToList(sql); Map>> dataMap = dataList.stream().collect(Collectors.groupingBy(e->Util.null2String(e.get("bcxx")))); - + String edsc = "8"; + if (dataList.size()>0){ + edsc = Util.null2String(dataList.get(0).get("edsc")); + } dataMap.entrySet().forEach(e -> { List> schedulingList = schedulingMap.get(e.getKey()); for (Map scheduling :schedulingList){ String bcrq = Util.null2String(scheduling.get("bcrq")); String rqlx = Util.null2String(scheduling.get("rqlx")); + List> bcxxs = e.getValue(); for (Map map:bcxxs){ map.put("rqlx",rqlx); @@ -124,7 +129,7 @@ public class UtilServiceImpl extends Service implements UtilService { map.put("bcxx","0"); map.put("bcsdxx",""); - map.put("edsc","8"); + map.put("edsc",edsc); map.put("bdlx", ClassSegmentTypeEnum.OVERTIME_PLAN.getKey()); map.put("dtkssj",overtimePlan.get("kssj")); map.put("dtjssj",overtimePlan.get("jssj")); @@ -136,6 +141,7 @@ public class UtilServiceImpl extends Service implements UtilService { map.put("zddxfz","0"); map.put("dxhs","0"); map.put("rqlx",dateMap.get(e.getKey())); + map.put("jbsc",overtimePlan.get("jbsc")); if (attendanceItems.size() >0){ map.put("ksdk",attendanceItems.get(0).get("ksjbbxydk")); map.put("jsdk",attendanceItems.get(0).get("jsjbbxydk")); diff --git a/src/com/engine/attendance/attendanceanalysis/service/impl/WorkOverTimeServiceImpl.java b/src/com/engine/attendance/attendanceanalysis/service/impl/WorkOverTimeServiceImpl.java index 0697928..eca3889 100644 --- a/src/com/engine/attendance/attendanceanalysis/service/impl/WorkOverTimeServiceImpl.java +++ b/src/com/engine/attendance/attendanceanalysis/service/impl/WorkOverTimeServiceImpl.java @@ -2,24 +2,25 @@ package com.engine.attendance.attendanceanalysis.service.impl; import com.engine.attendance.attendanceanalysis.cmd.item.WorkOvertimeItemCmd; import com.engine.attendance.attendanceanalysis.service.WorkOverTimeService; -import com.engine.attendance.enums.CheckBoxEnum; -import com.engine.attendance.enums.ClassSegmentTypeEnum; -import com.engine.attendance.enums.DateTypeEnum; -import com.engine.attendance.enums.WorkForTimeEnum; +import com.engine.attendance.enums.*; +import com.engine.common.util.CommonUtil; import com.engine.common.util.DateUtil; import com.engine.common.util.DbTools; import com.engine.common.util.Utils; import com.engine.core.impl.Service; import com.google.common.collect.Lists; import com.google.common.collect.Maps; +import lombok.extern.slf4j.Slf4j; import weaver.general.TimeUtil; import weaver.general.Util; +import java.math.BigDecimal; import java.util.Calendar; import java.util.List; import java.util.Map; import java.util.stream.Collectors; +@Slf4j public class WorkOverTimeServiceImpl extends Service implements WorkOverTimeService { @Override public List> recordWorkOverTime(Map params) { @@ -31,10 +32,21 @@ public class WorkOverTimeServiceImpl extends Service implements WorkOverTimeServ String analysisDate = Util.null2String(params.get("analysisDate")); //请假记录 List> askForLeaveList = (List>)params.get("askForLeaveList"); + //请假项目 + Map> askForLeaveItems = (Map>)params.get("askForLeaveItems"); //外出记录 List> evectionList = (List>)params.get("evectionList"); + //外出项目 + Map> evectionItems = (Map>)params.get("evectionItems"); //打卡卡点 List>> clcokInTimeList = (List>>)params.get("clcokInTimeList"); + //请假后消除的异常 + List> offsetAskForLeaveAnomaly = (List>)params.get("offsetAskForLeaveAnomaly"); + //出差外出后消除的异常 + List> offsetEvectionAnomaly = (List>)params.get("offsetEvectionAnomaly"); + + //经过请假外出处理过的异常项目 + List> abnormalClockInList = (List>)params.get("abnormalClockInList"); Map> clcokInTimeMap = Maps.newHashMap(); @@ -60,9 +72,7 @@ public class WorkOverTimeServiceImpl extends Service implements WorkOverTimeServ //人员 String userId = Util.null2String(params.get("userId")); List> resultLists = Lists.newArrayList(); - int maxDayTime = 0; - int maxWeekTime = 0; - int maxMonthTime = 0; + for (Map scheduleMap :scheduleResult){ String bdlx = Util.null2String(scheduleMap.get("bdlx")); String rqlx = Util.null2String(scheduleMap.get("rqlx")); @@ -73,26 +83,27 @@ public class WorkOverTimeServiceImpl extends Service implements WorkOverTimeServ //加班结束时间 String dtjssj = Util.null2String(scheduleMap.get("dtjssj")); - String kssj = analysisDate +" "+Util.null2String(scheduleMap.get("dtkssj")); - String jssj = analysisDate +" "+Util.null2String(scheduleMap.get("dtjssj")); + String kssj = analysisDate +" "+dtkssj; + String jssj = analysisDate +" "+dtjssj; if (DateUtil.getTime(kssj).compareTo(DateUtil.getTime(jssj)) >0){ jssj = DateUtil.AfterDay(analysisDate,1)+" "+Util.null2String(scheduleMap.get("dtjssj")); } + //加班实际开始时间 + String realityStartTime = ""; + //加班实际结束时间 + String realityEndime = ""; //申请时间 int applicationTime = DateUtil.getBetWeenMinutes(kssj,jssj); - //扣除休息时间后的剩余 - int applicationRestTime = applicationTime; + resultLists.add(workOverTimeItems); getWorkOverTimeParam.put("attendanceItems",attendanceItems); getWorkOverTimeParam.put("rqlx",scheduleMap.get("rqlx")); - if (ClassSegmentTypeEnum.EXTENDED_OVERTIME.getKey().equals(bdlx)){ getWorkOverTimeParam.put("workfor", WorkForTimeEnum.DELAY_TO_WORK_OVERTIME.getKey()); }else if (ClassSegmentTypeEnum.EARLY_OVERTIME.getKey().equals(bdlx)){ getWorkOverTimeParam.put("workfor",WorkForTimeEnum.EARLY_TO_WORK_OVERTIME.getKey()); }else if (ClassSegmentTypeEnum.OVERTIME_PLAN.getKey().equals(bdlx)){ - applicationRestTime = Utils.removeRestTime(kssj,jssj,scheduleResult,analysisDate); getWorkOverTimeParam.put("workfor",WorkForTimeEnum.PLAN_WORK_OVERTIME.getKey()); } Map result = commandExecutor.execute(new WorkOvertimeItemCmd(getWorkOverTimeParam)); @@ -101,14 +112,20 @@ public class WorkOverTimeServiceImpl extends Service implements WorkOverTimeServ if (workTimeBeLateItems.size() == 0){ continue; } - workOverTimeItems.put("item",workTimeBeLateItems.get(0).get("key")); + double jbsc = Integer.valueOf(Util.null2String(scheduleMap.get("jbsc"))); + + + //开始加班必须打卡 + String ksjbbxydk = Util.null2String(workTimeBeLateItems.get(0).get("ksjbbxydk")); + //结束加班必须打卡 + String jsjbbxydk = Util.null2String(workTimeBeLateItems.get(0).get("jsjbbxydk")); //提前打卡开始的时长计入加班 String tqdkjrjb = Util.null2String(workTimeBeLateItems.get(0).get("tqdkjrjb")); //推后打卡结束的时长计入加班 String thdkjrjb = Util.null2String(workTimeBeLateItems.get(0).get("thdkjrjb")); //结算加班时长不得超过申请的时长 String jbscbdccsqsc = Util.null2String(workTimeBeLateItems.get(0).get("jbscbdccsqsc")); - //结算加班时长不得超过申请的时长 + //是否扣除时间区间内的就餐休息时长 String zdkcjcxxsc = Util.null2String(workTimeBeLateItems.get(0).get("zdkcjcxxsc")); //超出限制时长的处理方式 String ccclfs = Util.null2String(workTimeBeLateItems.get(0).get("ccclfs")); @@ -120,21 +137,139 @@ public class WorkOverTimeServiceImpl extends Service implements WorkOverTimeServ String zzdjbxss = Util.null2String(workTimeBeLateItems.get(0).get("zzdjbxss")); //加班时长自动转入假期余额 String jbzdzjqye= Util.null2String(workTimeBeLateItems.get(0).get("jbzdzjqye")); + //最小加班分钟数 + String jbqsfzs = Util.null2String(workTimeBeLateItems.get(0).get("jbqsfzs")); + //超出最小时长后的单次累加分钟数 + String ccqszhdhsfzs = Util.null2String(workTimeBeLateItems.get(0).get("ccqszhdhsfzs")); + //核算量 + double workOverTimeHsl = Double.valueOf(Util.null2String(workTimeBeLateItems.get(0).get("hsl"))); + //核算单位 + String workOverTimeHsdw = Util.null2String(workTimeBeLateItems.get(0).get("hsdw")); - if (CheckBoxEnum.CHECKED.getKey().equals(tqdkjrjb)){ + /** + * 获得实际加班时间 + */ + if (CheckBoxEnum.CHECKED.getKey().equals(ksjbbxydk)){ Map clcokInTimeData = clcokInTimeMap.get(dtkssj); String signTime = clcokInTimeData.get("signdate")+" "+clcokInTimeData.get("signtime"); - if (DateUtil.getTime(signTime).compareTo(DateUtil.getTime(dtkssj)) < 0){ - dtkssj = signTime; - } + realityStartTime = signTime; + }else { + realityStartTime = kssj; } - if (CheckBoxEnum.CHECKED.getKey().equals(thdkjrjb)){ + if (CheckBoxEnum.CHECKED.getKey().equals(jsjbbxydk)){ Map clcokInTimeData = clcokInTimeMap.get(dtjssj); String signTime = clcokInTimeData.get("signdate")+" "+clcokInTimeData.get("signtime"); - if (DateUtil.getTime(signTime).compareTo(DateUtil.getTime(dtjssj)) > 0){ - dtjssj = signTime; + realityEndime = signTime; + }else { + realityEndime= jssj; + } + jbsc = jbsc*60; + if (CheckBoxEnum.CHECKED.getKey().equals(tqdkjrjb)){ + //提前打卡开始的时长计入加班 + if (DateUtil.getTime(realityStartTime).compareTo(DateUtil.getTime(kssj)) <0){ + jbsc +=DateUtil.getBetWeenMinutes(realityStartTime,kssj); + } + } + if (CheckBoxEnum.CHECKED.getKey().equals(thdkjrjb)){ + // 推后打卡结束的时长计入加班 + if (DateUtil.getTime(realityEndime).compareTo(DateUtil.getTime(jssj)) >0){ + jbsc +=DateUtil.getBetWeenMinutes(jssj,realityEndime); } } + + /** + * 当存在迟到项目时扣除异常时长,不存在时 + */ + List> beLateAbnormal = abnormalClockInList.stream().filter(e->e.get("pointTime").toString().split(" ")[1].equals(dtkssj)).collect(Collectors.toList()); + double beLateTime = 0; + if (beLateAbnormal.size() >0){ + String hsdw = Util.null2String(beLateAbnormal.get(0).get("hsdw")); + String itemduration = Util.null2String(beLateAbnormal.get(0).get("itemduration")); + AttendanceItemTypeEnum itemType = (AttendanceItemTypeEnum)beLateAbnormal.get(0).get("itemType"); + if (itemType == AttendanceItemTypeEnum.MISSE_CARD){ + //早上漏卡 + beLateTime = jbsc; + }else { + if (AccountingUnitEnum.DAY.getKey().equals(hsdw)){ + beLateTime = Integer.valueOf(scheduleMap.get("edsc").toString()) * Double.valueOf(itemduration); + }else if (AccountingUnitEnum.HOUR.getKey().equals(hsdw)){ + beLateTime = Double.valueOf(itemduration)*60; + }else if (AccountingUnitEnum.MINUTES.getKey().equals(hsdw)){ + beLateTime = Double.valueOf(itemduration); + }else if (AccountingUnitEnum.ONCE.getKey().equals(hsdw)){ + beLateTime = jbsc; + } + } + }else { + if (DateUtil.getTime(realityStartTime).compareTo(DateUtil.getTime(kssj)) >0){ + beLateTime = DateUtil.getBetWeenMinutes(kssj,realityStartTime); + } + } + /** + * 当存在早退项目时扣除异常时长,不存在时扣除实际早退时间 + */ + List> leaveEarlyAbnormal = abnormalClockInList.stream().filter(e->e.get("pointTime").toString().split(" ")[1].equals(dtjssj)).collect(Collectors.toList()); + double leaveElaryTime=0; + if (leaveEarlyAbnormal.size() > 0){ + String hsdw = Util.null2String(beLateAbnormal.get(0).get("hsdw")); + String itemduration = Util.null2String(beLateAbnormal.get(0).get("itemduration")); + AttendanceItemTypeEnum itemType = (AttendanceItemTypeEnum)beLateAbnormal.get(0).get("itemType"); + if (itemType == AttendanceItemTypeEnum.MISSE_CARD){ + //下午漏卡 + leaveElaryTime = jbsc; + + }else { + if (AccountingUnitEnum.DAY.getKey().equals(hsdw)){ + leaveElaryTime = Integer.valueOf(scheduleMap.get("edsc").toString()) * Double.valueOf(itemduration); + }else if (AccountingUnitEnum.HOUR.getKey().equals(hsdw)){ + leaveElaryTime = Double.valueOf(itemduration)*60; + }else if (AccountingUnitEnum.MINUTES.getKey().equals(hsdw)){ + leaveElaryTime = Double.valueOf(itemduration); + }else if (AccountingUnitEnum.ONCE.getKey().equals(hsdw)){ + leaveElaryTime = jbsc; + } + + } + }else { + if (DateUtil.getTime(realityEndime).compareTo(DateUtil.getTime(jssj)) <0){ + leaveElaryTime = DateUtil.getBetWeenMinutes(realityEndime,jssj); + } + + } + + /** + * 当存在请假时,考虑扣除请假时长 + */ + int askForLeaveTime = removeAskForLeave(realityStartTime,realityEndime,Util.null2String(getWorkOverTimeParam.get("workfor")) + ,bdlx,evectionList,askForLeaveItems,offsetAskForLeaveAnomaly); + + /** + * 当存在外出时,考虑扣除外出时长 + */ + int evectionTime = removeEvection(realityStartTime,realityEndime,Util.null2String(getWorkOverTimeParam.get("workfor")) + ,bdlx,askForLeaveList,evectionItems,offsetEvectionAnomaly); + + log.info("加班时长: {}",jbsc); + log.info("beLateTime :[{}],leaveElaryTime :[{}],askForLeaveTime:[{}],evectionTime:[{}]",beLateTime,leaveElaryTime,askForLeaveTime,evectionTime); + BigDecimal jbscbig = new BigDecimal(jbsc); + jbsc = jbscbig.subtract(new BigDecimal(beLateTime)).subtract(new BigDecimal(leaveElaryTime)).subtract(new BigDecimal(askForLeaveTime)).subtract(new BigDecimal(evectionTime)).intValue(); + log.info("jbsc :[{}]",jbsc); + if (!"".equals(jbqsfzs)){ + if (jbsc < Integer.valueOf(jbqsfzs)){ + //小于最小加班分钟数不算加班 + continue; + }else if (jbsc >= Integer.valueOf(jbqsfzs) && !"".equals(ccqszhdhsfzs)){ + jbsc = Double.valueOf(Utils.getItemdurationDown(Integer.valueOf(ccqszhdhsfzs),AccountingUnitEnum.MINUTES.getKey(),Double.valueOf(jbsc).intValue(),AccountingUnitEnum.MINUTES)).intValue(); + } + } + if (jbsc < 0){ + //加班时长为0 + workOverTimeItems.put("item",workTimeBeLateItems.get(0).get("key")); + workOverTimeItems.put("itemduration","0"); + continue; + } + + //自动扣除 if ("2".equals(ccclfs) && workOverTimeResults == null){ String startDate = analysisDate.split("-")[0]+"-"+ analysisDate.split("-")[1]+"-01"; @@ -144,26 +279,122 @@ public class WorkOverTimeServiceImpl extends Service implements WorkOverTimeServ } if ("2".equals(ccclfs) && !"".equals(rzdjbxss) && DateTypeEnum.WORK_DAY.getKey().equals(rqlx)){ //工作日加班最大数 - maxDayTime = getWorkDayTime(workOverTimeResults,analysisDate); - - - }else if ("2".equals(ccclfs) && !"".equals(yzdjbxss)){ - //每月最大加班数 - maxWeekTime = getMonthTime(workOverTimeResults); - - - }else if ("2".equals(ccclfs) && !"".equals(zzdjbxss)){ + double dayTime = getWorkDayTime(workOverTimeResults,analysisDate) *60; + double maxDayTime = Double.valueOf(rzdjbxss) *60; + double time = jbsc+dayTime; + if (time > maxDayTime){ + jbsc = maxDayTime-dayTime; + } + } + if ("2".equals(ccclfs) && !"".equals(zzdjbxss)){ //每周最大加班小时数 - maxMonthTime = getWeekTime(workOverTimeResults,analysisDate); - - + double weekTime = getWeekTime(workOverTimeResults,analysisDate); + double maxWeekTime = Double.valueOf(zzdjbxss) *60; + double time = jbsc+weekTime; + if (time > maxWeekTime){ + jbsc = maxWeekTime-weekTime; + } } + if ("2".equals(ccclfs) && !"".equals(yzdjbxss)){ + //每月最大加班数 + double monthTime = getMonthTime(workOverTimeResults); + double maxMonthTime = Double.valueOf(yzdjbxss) *60; + double time = jbsc+monthTime; + if (time > maxMonthTime){ + jbsc = maxMonthTime-monthTime; + } + } + if (CheckBoxEnum.CHECKED.getKey().equals(jbscbdccsqsc)){ + if (jbsc > Integer.valueOf(Util.null2String(scheduleMap.get("jbsc")))*60){ + jbsc = Integer.valueOf(Util.null2String(scheduleMap.get("jbsc")))*60; + } + } + log.info("最终加班时长: {}",jbsc); + workOverTimeItems.put("item",workTimeBeLateItems.get(0).get("key")); + double itemduration = Utils.getItemdurationDown(workOverTimeHsl,workOverTimeHsdw,Long.valueOf(Math.round(jbsc)).intValue(),AccountingUnitEnum.MINUTES); + workOverTimeItems.put("itemduration",itemduration); + /** + * 入加班结果表 + */ + Map insertParam = Maps.newHashMap(); + insertParam.put("jbry",userId); + insertParam.put("sjksrq",realityStartTime.split(" ")[0]); + insertParam.put("sjkssj",realityStartTime.split(" ")[1]); + insertParam.put("sjjsrq",realityEndime.split(" ")[0]); + insertParam.put("sjjssj",realityEndime.split(" ")[1]); + insertParam.put("sjjbsc",String.format ("%.2f", jbsc/60)); + insertParam.put("jbjgly","4"); + insertParam.put("zt","1"); + DbTools.update(CommonUtil.makeInsertSql("uf_jcl_kq_jbjg",insertParam)); - + /** + * 入假期余额 + */ //加班时长自动转入假期余额 if (CheckBoxEnum.CHECKED.getKey().equals(jbzdzjqye)){ + Map insertHoliDayParam = Maps.newHashMap(); + insertHoliDayParam.put("ygid",userId); + insertHoliDayParam.put("jqid",workTimeBeLateItems.get(0).get("zrdjb")); + //转入的假期额度生效日期 + String yesxrq = Util.null2String(workTimeBeLateItems.get(0).get("yesxrq")); + if ("0".equals(yesxrq)){ + //一月后 + insertHoliDayParam.put("sxrq",DateUtil.lastMonth(analysisDate,DateUtil.yyyyMMdd)); + }else if ("1".equals(yesxrq)){ + //次月 + insertHoliDayParam.put("sxrq",DateUtil.lastMonth(analysisDate)+"-01"); + }else if ("2".equals(yesxrq)){ + //次日 + insertHoliDayParam.put("sxrq",DateUtil.AfterDay(analysisDate,1)); + } + //额度可用的周期 + String yekyzq = Util.null2String(workTimeBeLateItems.get(0).get("yekyzq")); + if ("0".equals(yekyzq)){ + //一个月 + insertHoliDayParam.put("jzrq",DateUtil.nextMonth(analysisDate,1,DateUtil.yyyyMMdd)); + }else if ("1".equals(yekyzq)){ + //两个月 + insertHoliDayParam.put("jzrq",DateUtil.nextMonth(analysisDate,2,DateUtil.yyyyMMdd)); + }else if ("2".equals(yekyzq)){ + //三个月 + insertHoliDayParam.put("jzrq",DateUtil.nextMonth(analysisDate,3,DateUtil.yyyyMMdd)); + }else if ("3".equals(yekyzq)){ + //六个月 + insertHoliDayParam.put("jzrq",DateUtil.nextMonth(analysisDate,6,DateUtil.yyyyMMdd)); + }else if ("4".equals(yekyzq)){ + //十二个月 + insertHoliDayParam.put("jzrq",DateUtil.nextMonth(analysisDate,12,DateUtil.yyyyMMdd)); + }else if ("5".equals(yekyzq)){ + //季度 + insertHoliDayParam.put("jzrq",DateUtil.nextMonth(analysisDate,3,DateUtil.yyyyMMdd)); + }else if ("6".equals(yekyzq)){ + //半年 + insertHoliDayParam.put("jzrq",DateUtil.nextMonth(analysisDate,6,DateUtil.yyyyMMdd)); + }else if ("7".equals(yekyzq)){ + //一年 + insertHoliDayParam.put("jzrq",DateUtil.nextMonth(analysisDate,12,DateUtil.yyyyMMdd)); + } + insertHoliDayParam.put("ktsc",String.format ("%.2f", jbsc/60)); + String zdyqsc = Util.null2String(workTimeBeLateItems.get(0).get("zdyqsc")); + if ("0".equals(zdyqsc)){ + //一个月 + insertHoliDayParam.put("yqsxrq",DateUtil.nextMonth(analysisDate,1,DateUtil.yyyyMMdd)); + }else if ("1".equals(zdyqsc)){ + //两个月 + insertHoliDayParam.put("yqsxrq",DateUtil.nextMonth(analysisDate,2,DateUtil.yyyyMMdd)); + }else if ("2".equals(zdyqsc)){ + //三个月 + insertHoliDayParam.put("yqsxrq",DateUtil.nextMonth(analysisDate,3,DateUtil.yyyyMMdd)); + }else if ("3".equals(zdyqsc)){ + //半年 + insertHoliDayParam.put("yqsxrq",DateUtil.nextMonth(analysisDate,6,DateUtil.yyyyMMdd)); + }else if ("4".equals(zdyqsc)){ + //一年 + insertHoliDayParam.put("yqsxrq",DateUtil.nextMonth(analysisDate,12,DateUtil.yyyyMMdd)); + } + DbTools.update(CommonUtil.makeInsertSql("uf_jcl_kq_kqxm",insertHoliDayParam)); } } @@ -219,4 +450,81 @@ public class WorkOverTimeServiceImpl extends Service implements WorkOverTimeServ return totalHour; } + /** + * 请假影响加班时长 + * @param kssj 加班开始时间 + * @param jssj 加班结束时间 + * @param workFor 作用时段 + * @param askForLeaveList 请假集合 + * @param askForLeaveItems 请假项目 + * @return 请假在加班中所占时间 + */ + public int removeAskForLeave(String kssj,String jssj,String workFor,String bdlx,List> askForLeaveList, + Map> askForLeaveItems,List> offsetAskForLeaveAnomaly ){ + int employTime = 0; + for (int i=0;i askForLeaveItem = askForLeaveItems.get(askForLeaveList.get(i).get("jqlx")); + //作用时段 + String zysd = Util.null2String(askForLeaveItem.get("zysd")); + if (!zysd.contains(workFor) && !WorkForTimeEnum.ALL_TIME.getKey().equals(zysd)){ + continue; + } + if ("".equals(Util.null2String(askForLeaveList.get(i).get("kssj"))) || "".equals(Util.null2String(askForLeaveList.get(i).get("jssj")))){ + if (!"".equals(qjsc)){ + //时长请假 + if (offsetAskForLeaveAnomaly.size() > 0){ + List> list = offsetAskForLeaveAnomaly.stream().filter(e->bdlx.equals(e.get("bdlx"))).collect(Collectors.toList()); + employTime += Math.round(list.size()/Double.valueOf(offsetAskForLeaveAnomaly.size()) *Double.valueOf(qjsc)*60); + } + } + }else { + //按照开始时间,结束时间请假 + employTime +=Utils.getStartAndEndTime(kssj,jssj,askForLeaveList.get(i)); + } + } + return employTime; + } + + /** + * 外出影响加班时长 + * @param kssj 加班开始时间 + * @param jssj 加班结束时间 + * @param evectionList 外出、请假集合 + * @return + */ + public int removeEvection(String kssj,String jssj,String workFor,String bdlx,List> evectionList,Map> evectionItems,List> offsetEvectionAnomaly){ + int askForLeaveTime=0; + for (int i=0;i resultMap = Maps.newHashMap(); + resultMap.put("item",evectionList.get(i).get("cclx")); + //请假时长 + String qjsc = Util.null2String(evectionList.get(i).get("ccsc")); + //请假项目 + Map evectionItem = evectionItems.get(evectionList.get(i).get("cclx")); + //作用时段 + String zysd = Util.null2String(evectionItem.get("zysd")); + if (!zysd.contains(workFor) && !WorkForTimeEnum.ALL_TIME.getKey().equals(zysd)){ + continue; + } + + if ("".equals(Util.null2String(evectionList.get(i).get("kssj"))) || "".equals(Util.null2String(evectionList.get(i).get("jssj")))){ + if (!"".equals(qjsc)){ + if (offsetEvectionAnomaly.size() > 0){ + List> list = offsetEvectionAnomaly.stream().filter(e->bdlx.equals(e.get("bdlx"))).collect(Collectors.toList()); + askForLeaveTime += Math.round(list.size()/Double.valueOf(offsetEvectionAnomaly.size()) *Double.valueOf(qjsc)*60); + } + } + }else { + //按照开始时间,结束时间请假 + askForLeaveTime +=Utils.getStartAndEndTime(kssj,jssj,evectionList.get(i)); + } + } + return askForLeaveTime; + } + + } diff --git a/src/com/engine/attendance/attendanceanalysis/wrapper/AttendanceAnalysisWrapper.java b/src/com/engine/attendance/attendanceanalysis/wrapper/AttendanceAnalysisWrapper.java index 3f030b0..4f2ed34 100644 --- a/src/com/engine/attendance/attendanceanalysis/wrapper/AttendanceAnalysisWrapper.java +++ b/src/com/engine/attendance/attendanceanalysis/wrapper/AttendanceAnalysisWrapper.java @@ -270,7 +270,8 @@ public class AttendanceAnalysisWrapper extends Service { /** * 计算是否考勤异常,是否有早退、迟到、漏卡的情况 - * */ + * + **/ List> abnormalClockInList = updateAttendanceResultWrapper.recordAbnormalClockIn(recordAbnormalParam); @@ -282,19 +283,23 @@ public class AttendanceAnalysisWrapper extends Service { recordAbnormalParam.put("askForLeaveItems",askForLeaveItems); recordAbnormalParam.put("abnormalClockInList",abnormalClockInList); Map vactionMap = updateAttendanceResultWrapper.recordAskForLeave(recordAbnormalParam); - abnormalClockInList = (List>)vactionMap.get("abnormalClockInList"); + List> abnormalClockInListByAskForLeave = (List>)vactionMap.get("abnormalClockInList"); List> vactionList = (List>)vactionMap.get("resultList"); + recordAbnormalParam.put("offsetAskForLeaveAnomaly",vactionMap.get("offsetAskForLeaveAnomaly")); + log.info("请假后消除的异常 : [{}]",vactionMap.get("offsetAskForLeaveAnomaly")); /** * 出差、外出 */ recordAbnormalParam.put("evectionList",evectionList); recordAbnormalParam.put("evectionItems",evectionItems); - recordAbnormalParam.put("abnormalClockInList",abnormalClockInList); + recordAbnormalParam.put("abnormalClockInList",abnormalClockInListByAskForLeave); Map recordEvection= updateAttendanceResultWrapper.recordEvection(recordAbnormalParam); - abnormalClockInList = (List>)recordEvection.get("abnormalClockInList"); + List> abnormalClockInListByEvction = (List>)recordEvection.get("abnormalClockInList"); List> evectionResultList = (List>)recordEvection.get("resultList"); - + recordAbnormalParam.put("abnormalClockInList",abnormalClockInListByEvction); + recordAbnormalParam.put("offsetEvectionAnomaly",recordEvection.get("offsetEvectionAnomaly")); + log.info("出差外出后消除的异常 : [{}]",recordEvection.get("offsetEvectionAnomaly")); /** * 加班 */ @@ -307,11 +312,11 @@ public class AttendanceAnalysisWrapper extends Service { List> recordData = Lists.newArrayList(); recordData.addAll(vactionList); recordData.addAll(evectionResultList); - recordData.addAll(abnormalClockInList); + recordData.addAll(abnormalClockInListByEvction); recordParam.put("recordData",recordData); recordParam.put("recordDataTime",utilService.getNeedRecordClockInTime(clcokInTimeData)); log.info("recordParam : {}",recordParam); - if (abnormalClockInList.size()>0){ + if (abnormalClockInListByEvction.size()>0){ recordParam.put("cqzt",CheckBoxEnum.CHECKED.getKey()); }else { recordParam.put("cqzt",CheckBoxEnum.UNCHECKED.getKey()); diff --git a/src/com/engine/attendance/attendanceanalysis/wrapper/UpdateAttendanceResultWrapper.java b/src/com/engine/attendance/attendanceanalysis/wrapper/UpdateAttendanceResultWrapper.java index f386c22..bb29d96 100644 --- a/src/com/engine/attendance/attendanceanalysis/wrapper/UpdateAttendanceResultWrapper.java +++ b/src/com/engine/attendance/attendanceanalysis/wrapper/UpdateAttendanceResultWrapper.java @@ -83,6 +83,7 @@ public class UpdateAttendanceResultWrapper extends Service { List> iforgetClockIn = forgetClockInService.forgetClockIn(missCardParams); if (iforgetClockIn.size() >0){ iforgetClockIn.get(0).put("pointTime",pointTime); + iforgetClockIn.get(0).put("bdlx",classInfo.get("bdlx")); resultList.add(iforgetClockIn.get(0)); } @@ -99,6 +100,7 @@ public class UpdateAttendanceResultWrapper extends Service { List> ifBeLate = beLateService.beLate(beLateParams); if (ifBeLate.size() > 0){ ifBeLate.get(0).put("pointTime",pointTime); + ifBeLate.get(0).put("bdlx",classInfo.get("bdlx")); resultList.add(ifBeLate.get(0)); } }else if (ClockPointEnum.END.getKey().equals(pointType) && ClockPointEnum.BEFORE.getKey().equals(timeType)){ @@ -114,6 +116,7 @@ public class UpdateAttendanceResultWrapper extends Service { List> ifLeaveEarly = beLateService.leaveEarly(leaveEarlyParams); if (ifLeaveEarly.size() > 0){ ifLeaveEarly.get(0).put("pointTime",pointTime); + ifLeaveEarly.get(0).put("bdlx",classInfo.get("bdlx")); resultList.add(ifLeaveEarly.get(0)); } } @@ -152,7 +155,8 @@ public class UpdateAttendanceResultWrapper extends Service { List> askForLeaveList = (List>)params.get("askForLeaveList"); //异常记录 List> abnormalClockInList = (List>)params.get("abnormalClockInList"); - + //请假抵消异常 + List> offsetAskForLeaveAnomaly = Lists.newArrayList(); Map map = Maps.newHashMap(); List> resultList = Lists.newArrayList(); @@ -180,7 +184,6 @@ public class UpdateAttendanceResultWrapper extends Service { Map param = Maps.newHashMap(); param.put("abnormalClockInList",abnormalClockInList); - double itemduration = 0; if ("".equals(Util.null2String(askForLeaveList.get(i).get("kssj"))) || "".equals(Util.null2String(askForLeaveList.get(i).get("jssj")))){ //弹性请假,半天请假 @@ -195,7 +198,9 @@ public class UpdateAttendanceResultWrapper extends Service { param.put("qjsc",qjsc); param.put("tybcndbjlhbjs",tybcndbjlhbjs); if (abnormalClockInList.size()>0){ - abnormalClockInList =askForLeaveService.askForLeaveByDurationTime(param); + Map map1 = askForLeaveService.askForLeaveByDurationTime(param); + abnormalClockInList =(List>)map1.get("abnormalClockInList"); + offsetAskForLeaveAnomaly.addAll((List>)map1.get("offsetAskForLeaveAnomaly")); } } }else { @@ -210,12 +215,15 @@ public class UpdateAttendanceResultWrapper extends Service { param.put("kssj",kssj); param.put("jssj",jssj); if (abnormalClockInList.size()>0){ - abnormalClockInList = askForLeaveService.askForLeaveByTime(param); + Map map1 = askForLeaveService.askForLeaveByTime(param); + abnormalClockInList = (List>)map1.get("abnormalClockInList"); + offsetAskForLeaveAnomaly.addAll((List>)map1.get("offsetAskForLeaveAnomaly")); } } } map.put("resultList",resultList); map.put("abnormalClockInList",abnormalClockInList); + map.put("offsetAskForLeaveAnomaly",offsetAskForLeaveAnomaly); return map; } @@ -236,7 +244,8 @@ public class UpdateAttendanceResultWrapper extends Service { List> evectionList = (List>)params.get("evectionList"); //异常记录 List> abnormalClockInList = (List>)params.get("abnormalClockInList"); - + //外出抵消异常 + List> offsetEvectionAnomaly = Lists.newArrayList(); Map map = Maps.newHashMap(); List> resultList = Lists.newArrayList(); @@ -279,7 +288,9 @@ public class UpdateAttendanceResultWrapper extends Service { param.put("ccsc",qjsc); param.put("tybcndbjlhbjs",tybcndbjlhbjs); if (abnormalClockInList.size()>0){ - abnormalClockInList =evectionService.evectionByDurationTime(param); + Map map1 =evectionService.evectionByDurationTime(param); + abnormalClockInList = (List>)map1.get("abnormalClockInList"); + offsetEvectionAnomaly.addAll((List>)map1.get("offsetEvectionAnomaly")); } } }else { @@ -294,12 +305,15 @@ public class UpdateAttendanceResultWrapper extends Service { param.put("kssj",kssj); param.put("jssj",jssj); if (abnormalClockInList.size()>0){ - abnormalClockInList = evectionService.evectionByTime(param); + Map map1 = evectionService.evectionByTime(param); + abnormalClockInList = (List>)map1.get("abnormalClockInList"); + offsetEvectionAnomaly.addAll((List>)map1.get("offsetEvectionAnomaly")); } } } map.put("resultList",resultList); map.put("abnormalClockInList",abnormalClockInList); + map.put("offsetEvectionAnomaly",offsetEvectionAnomaly); return map; } diff --git a/src/com/engine/attendance/enums/AttendanceItemTypeEnum.java b/src/com/engine/attendance/enums/AttendanceItemTypeEnum.java index 52cc4a7..7adf24c 100644 --- a/src/com/engine/attendance/enums/AttendanceItemTypeEnum.java +++ b/src/com/engine/attendance/enums/AttendanceItemTypeEnum.java @@ -11,7 +11,8 @@ public enum AttendanceItemTypeEnum implements BaseEnum { EVECTION("5","出差"), PUNCH_IN_AGAIN("6","补打卡"), ALLOWANCE("7","津贴"), - OTHER("8","其他"); + OTHER("8","其他"), + MISSE_CARD("9","漏打卡"); private String key; private String value; diff --git a/src/com/engine/common/util/DateUtil.java b/src/com/engine/common/util/DateUtil.java index cd6af75..ce53d87 100644 --- a/src/com/engine/common/util/DateUtil.java +++ b/src/com/engine/common/util/DateUtil.java @@ -14,14 +14,24 @@ public class DateUtil { public static DateTimeFormatter yyyyMM = DateTimeFormatter.ofPattern("yyyy-MM"); public static String beforeMonth(String time){ - LocalDateTime localDateTime = LocalDate.parse(time, yyyyMMdd).atStartOfDay(); + LocalDateTime localDateTime = DateUtil.getTime(time); return localDateTime.minusMonths(1).format(yyyyMM); } public static String lastMonth(String time){ - LocalDateTime localDateTime = LocalDate.parse(time, yyyyMMdd).atStartOfDay(); + LocalDateTime localDateTime = DateUtil.getTime(time); return localDateTime.plusMonths(1).format(yyyyMM); } + public static String lastMonth(String time,DateTimeFormatter dateTimeFormatter){ + LocalDateTime localDateTime = DateUtil.getTime(time); + + return localDateTime.plusMonths(1).format(dateTimeFormatter); + } + public static String nextMonth(String time,int month,DateTimeFormatter dateTimeFormatter){ + LocalDateTime localDateTime = DateUtil.getTime(time); + + return localDateTime.plusMonths(month).format(dateTimeFormatter); + } public static String beforeDay(String time,long day){ @@ -73,10 +83,8 @@ public class DateUtil { public static LocalDateTime getTime(String time){ int length = time.length(); switch (length){ - case 7: - return LocalDateTime.parse(time, yyyyMM); case 10: - return LocalDateTime.parse(time, yyyyMMdd); + return LocalDate.parse(time, yyyyMMdd).atStartOfDay(); case 19: return LocalDateTime.parse(time, yyyyMMddHHmmss); case 16: diff --git a/src/com/engine/common/util/DbTools.java b/src/com/engine/common/util/DbTools.java index 159a08d..cca46a6 100644 --- a/src/com/engine/common/util/DbTools.java +++ b/src/com/engine/common/util/DbTools.java @@ -15,6 +15,7 @@ public class DbTools { public static List> getSqlToList(String sql,Object...value){ RecordSet rs = thread.get(); + List> result = new ArrayList<>(); if (value == null || value.length <=0 || "".equals(value)){ rs.executeQuery(sql); diff --git a/src/com/engine/common/util/Utils.java b/src/com/engine/common/util/Utils.java index 20af2f1..b6a4634 100644 --- a/src/com/engine/common/util/Utils.java +++ b/src/com/engine/common/util/Utils.java @@ -1,6 +1,7 @@ package com.engine.common.util; import com.engine.attendance.enums.AccountingUnitEnum; +import com.engine.attendance.enums.CheckBoxEnum; import com.engine.attendance.enums.ClassSegmentTypeEnum; import com.engine.attendance.enums.ClockPointEnum; import com.google.common.collect.Maps; @@ -393,13 +394,13 @@ public class Utils { betweenMinutes = betweenMinutes - DateUtil.getBetWeenMinutes(dtkssj,dtjssj); log.info("休息时间在请假时间中间"); }else if (DateUtil.getTime(kssj).compareTo(DateUtil.getTime(dtkssj)) <=0 && DateUtil.getTime(jssj).compareTo(DateUtil.getTime(dtjssj)) <=0 && DateUtil.getTime(jssj).compareTo(DateUtil.getTime(dtkssj)) >=0){ - //休息时间在请假时间 左边 + //休息时间在请假时间 右边 betweenMinutes = betweenMinutes - DateUtil.getBetWeenMinutes(dtkssj,jssj); - log.info("休息时间在请假时间 左边"); + log.info("休息时间在请假时间 右边"); }else if (DateUtil.getTime(kssj).compareTo(DateUtil.getTime(dtkssj)) >=0 && DateUtil.getTime(jssj).compareTo(DateUtil.getTime(dtjssj)) >=0 && DateUtil.getTime(kssj).compareTo(DateUtil.getTime(dtjssj)) <=0){ - //休息时间在请假时间 右边 + //休息时间在请假时间 左边 betweenMinutes = betweenMinutes - DateUtil.getBetWeenMinutes(kssj,dtjssj); - log.info("休息时间在请假时间 右边"); + log.info("休息时间在请假时间 左边"); }else if (DateUtil.getTime(kssj).compareTo(DateUtil.getTime(dtkssj)) >=0 && DateUtil.getTime(jssj).compareTo(DateUtil.getTime(dtjssj)) <=0){ //请假时间在休息时间中间 betweenMinutes = 0; @@ -411,4 +412,32 @@ public class Utils { return betweenMinutes; } + /** + * 请假外出在加班中所占时间 + * @return + */ + public static int getStartAndEndTime(String kssj,String jssj,Map leaveMap){ + String leavekssj = leaveMap.get("ksrq") + " "+leaveMap.get("kssj"); + String leavejssj = leaveMap.get("jsrq")+ " "+leaveMap.get("jssj"); + int betweenMinutes=0; + if (DateUtil.getTime(kssj).compareTo(DateUtil.getTime(leavekssj)) <=0 && DateUtil.getTime(jssj).compareTo(DateUtil.getTime(leavejssj)) >=0){ + //请假外出时间在中间 + betweenMinutes = DateUtil.getBetWeenMinutes(leavekssj,leavejssj); + log.info("请假外出时间在中间"); + }else if (DateUtil.getTime(kssj).compareTo(DateUtil.getTime(leavekssj)) <=0 && DateUtil.getTime(jssj).compareTo(DateUtil.getTime(leavejssj)) <=0 && DateUtil.getTime(jssj).compareTo(DateUtil.getTime(leavekssj)) >=0){ + //请假外出时间 右边 + betweenMinutes = DateUtil.getBetWeenMinutes(leavekssj,jssj); + log.info("请假外出时间 右边"); + }else if (DateUtil.getTime(kssj).compareTo(DateUtil.getTime(leavekssj)) >=0 && DateUtil.getTime(jssj).compareTo(DateUtil.getTime(leavejssj)) >=0 && DateUtil.getTime(kssj).compareTo(DateUtil.getTime(leavejssj)) <=0){ + //休请假外出时间 左边 + betweenMinutes = DateUtil.getBetWeenMinutes(kssj,leavejssj); + log.info("请假外出时间 左边"); + }else if (DateUtil.getTime(kssj).compareTo(DateUtil.getTime(leavekssj)) >=0 && DateUtil.getTime(jssj).compareTo(DateUtil.getTime(leavejssj)) <=0){ + //请假外出时间中间 + betweenMinutes = 0; + log.info("加班实际在请假外出时间中间"); + } + return betweenMinutes; + } + } diff --git a/target/classes/com/engine/attendance/attendanceanalysis/service/AskForLeaveService.class b/target/classes/com/engine/attendance/attendanceanalysis/service/AskForLeaveService.class index 07d2aad3f919127c19449ac4baa620c983b712b7..0f8cac361a7d411dbc02f6ec071f6ccbd30fc28a 100644 GIT binary patch delta 70 zcmbQo(# MWF1DWjaNMx0UAISM*si- delta 77 zcmeBXna46g%}`OpCo8cmQNOe#Ge_SyvA|jriSLtHTw=}0z!{vGo|jlsT9nGjP&b*E V(R^YrH!DcaW-=e6>Ba-zi~z%$7<>Q# diff --git a/target/classes/com/engine/attendance/attendanceanalysis/service/EvectionService.class b/target/classes/com/engine/attendance/attendanceanalysis/service/EvectionService.class index d9b5bfd038c5956a5443ec50a7642b6307750192..c8f3d631b6a60544c44bf914963f5623323fd9ef 100644 GIT binary patch delta 133 zcmdnbe32#O)W2Q(7#J8#82H&4c-a~F7#a9d%Tkj|GV}ACDnl}JQyCc)G<>oW%M$fV zOEPoxeG?0;HPQHt44lE4>3NAIrA0vHIT{mZn@;TFnYc`A;wAlw$|@6s8z(a|t`y~D SU}Rtg+Qr1c1!Qr9Sv&xT`y>|t delta 85 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 Cix~R= diff --git a/target/classes/com/engine/attendance/attendanceanalysis/service/impl/AskForLeaveServiceImpl.class b/target/classes/com/engine/attendance/attendanceanalysis/service/impl/AskForLeaveServiceImpl.class index 7636846ffc91ec8b8be8e8f779dcbf67ff2e4f49..56abbaf1e00810470e918e053e2f36d83e3a7b23 100644 GIT binary patch delta 2355 zcmZ{ldwg6~5y!vh?&I9uoRaNA+HNUH-$~P^t27OgLTF1(Q<@Y?fj~vtZM#jnLB6B z%@@L3+T zt`8|DjJrzmn$H;qd02DE@Od6F9Oj7O3mnxvYWO0L8IJKK!{ZDoV#~AHd@jEu)!&iM zcNel-a+P7e9OH<5hGVQX6gjT>is7q#O>@HV1Wy{i&Nsy2n=$T{&$nV+XZSWxX`VKG zhwmDm;d`3z8-BnKHP0G;#E%Wn@e`~4)bKMN)coA=Jijpf()!$E_!UQH$-OtF^SjdN zOh->hTn4Z*huJ*v!Qx(wlCS0&35&slcM%zGxF)}O>fR8r3N`g zG?U)dmdbU@N>NoeuYJ5oW%CkgWdA^3@wU3sW^XFfmArh@HUaS_2F~`9+IX*oBi_Sq zt@}G(h_aC1AA8=7DR&_++SMP9{Ug%sRQ=KLCr%lzx8-_=71wf|*J2i{zj}FdO8w2d zVM2S=Lg9_#Ei$KCzS3xsi@YZ$Oj^_^wy>-q#$u7i*F!XMfvhAyE))_h5_O0GuGkKH z?pb#hhMCwLPK4vmf+Fz%ouZzd2#xBGieFF&3oTTNtPrcuv%f?Lhy)Uc81 zWSGGovF&BHaApp7Gnf0QOWKl5IZ>;%aET;rcz~rW zlccAxpXCw~5XgO8Dq2vEzLgcS8|HpxdaJex85O)9An;)uYQHs)wl=V){AE z*gnjxA!av)=EvvwzQcr@!;dj{h}uMWh&u0Jta`>gf6I@nA7Xx!TNSEu4>Hw$wlswj zLGOjwq(ZPr%%O9TYbEoDBDkeVSLp++T2Q5nMD3+2;%@>~lL(G_6{!>yf3?7ei|o}S zgCoNW8j3WC!H&01=<)H^GTw4_!Jl}Vq@?1#45fv)yU)N*X z4(ALiHThL4(WR30QfdT8UdJ*{t9V!|5 z@9vv{3M2k6XygBaz7A7r_f9c5+`wPt8x{1Ic$q)T+nIxz@>~YU%ijPy*;Ur|l(hoy H;l2L_KBldD delta 2102 zcmaJ?`(IQ=6#vfdWoP&9$S&xTpps%H@(3kG#Z*#6GC_h&qq0CY!v`vYrX^dcJv1}B z*~?dEiuuR~g{&pn!$(@#yUfb!H~SBI(s%9!-Os0N**$aS%sJmV=gfD8Uk9BX7&-m- zk#+z>@w166+~LJ&Km52;;w~@7nwWvRy(lno532kyP_4yGi5f44n+W4x6SHuiHr8q} zTZ=h~#9Qb`Jr?cCqiIhB3yXDj|Z__+nT&6H!BdqLna=^BU-HR6qGWUA3a;C z#VRiM|~jSaPPbMz(>&nY~Q7bIR(cnKR7 zHes`N-6GKKvTI4z0*S2(FJqg;D+=53s=^NJRA|O7h1am#s)|dB>k|7F4&b1~A%zyaq3|YJ>2NrR4IJ8nn5q!P5s9}H-o{adcDy5TOyOO;C-J_*2RN>9 z0w=Y0O5sCnmN>0&1|KPWtbHtnPq349Rfik;E(wS0N^0vG8^Vhu&gz&?6+Xijh0n1| zV6r7tk~Lc7wN!g5UDkNtK<^j$(nKb{YN_`Hg*Ovl>)AIgtId2@=v#$z_(5U1u4bAR zw_>VwP7Mq?@d4s%+lHKzuhn$uow z(WyD`rPQW$wb`|Y<@ng{%FIMp6mA!e!6?a!B0=B?_)tXA-G#OYdPEVj7fZVqle!i! zuU!hf3TQ*mD3Tc)vz(cjV()Ph(%p>Iu4yZJwV`(_`t(5RoHq1rMZY{FGcnEfZG$I2 zF4zWdzUL77x8j=QxK?s+X+mn`THC>n9@vWXJa5PddAA`&4>fs4vL`DfqcB}8BH+Tb zm9nF`<7ig0CyF4a%_wFmJ^`a9Pln`1jO=nh27lreumiTwAUizbvk^~aWk-=gOAJS6 zfF0mXP~=-W>0HQDn@NhVW8XKCf!j!<{p4Re8F-$j^9xybk&OF|whj~sKgNj^j2FXE zD8^udn1~`ViMBFK64OZzeRUQ@_xK=E0ZMRy?3&`>3KT>H zLHR&l36w1VPtctI0~PGw?RGhp_@1Ll^zZN^4>}ohIoFTPJpSr1KM4yu)g_(U{aA`+ F{{W3(U*G@$ diff --git a/target/classes/com/engine/attendance/attendanceanalysis/service/impl/EvectionServiceImpl.class b/target/classes/com/engine/attendance/attendanceanalysis/service/impl/EvectionServiceImpl.class index 6d6502b9ed4b31ce0b1b79af4fc8384fd78dde3c..6781c50b4753092245e93738ccc14ea34a047714 100644 GIT binary patch delta 2386 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 E0>wmNB>(^b diff --git a/target/classes/com/engine/attendance/attendanceanalysis/service/impl/ForgetClockInServiceImpl.class b/target/classes/com/engine/attendance/attendanceanalysis/service/impl/ForgetClockInServiceImpl.class index 6f1d3398ab9997a12b162fe46b896c5ed4989d5e..71ab9b0dd49744aebf939dda09b215b234bfdf93 100644 GIT binary patch delta 736 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 delta 6459 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 QpT03pjg36WyabW74e1L;CjTFO=?nMt!uGU?2u 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 delta 3742 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 diff --git a/target/classes/com/engine/attendance/attendanceanalysis/wrapper/UpdateAttendanceResultWrapper.class b/target/classes/com/engine/attendance/attendanceanalysis/wrapper/UpdateAttendanceResultWrapper.class index efecf3fcdfd1105a6239eee7ce4671136f921436..64a5edd66bb26dc24298877a6060722f68115e3e 100644 GIT binary patch literal 15101 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 Ya!6+#{ZO8VgLVWT$H!Z((R}=W08+{xD*ylh literal 16514 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 B0R8{~ diff --git a/target/classes/com/engine/attendance/enums/AttendanceItemTypeEnum.class b/target/classes/com/engine/attendance/enums/AttendanceItemTypeEnum.class index 1a2ac112dc48b7ee0f39862264cadf3c708603a2..fe8ae262bcb567a7fa28bd28badc10793832640e 100644 GIT binary patch delta 1015 zcmZuvNl#N@6g}_J_T4@{wY;E2!$RGdV8T!eWfo)*P#h?t2nx>gJmOSP5H&HzyhJx7 z$f71LBnS;PV3f5hw{Be7iod`e@!qevkoXqgdFOoh-08ictZ!M-FN?FE0EF1R}7Z$ZJ zU}5k@;!URA))I*{_SV<6H%xaM!{*AZGDf|^13WYkbiW$Gs6sP_6n0=(VGC*%>QHOI zC^X<(_&k<;JSlf=iq}!XauLg^S8sm}3@DUpC8(7|G7(b|x z_fnx+E9GoVeSH4cSc4MxyC)V6!ay-r)UK7*0Y+|EBe$uMo72cGY2-dMa%qiRP$QSo z$eH=SFl9{|c~d}O9eAtEeek0Jja;>f*~Tcp$YW2zn1MNuj7eq&w(;rHcV0F$qh-ku z;>6;x9Z%i|c<14fc=Mn5R#sFx3fq^O;E%&mQnCjb@G?4in{yLz`+ZJSiaGpG0NGr0 zH8QaVS;&DTTF>EfyHigkZ!%X}lgT{T#rGz5bHP1m=TnLlFiM-=yg01o9p>u9=?=Y| zxKs9JAo5=~Eq8BN<`y%d1AEh@jWCZO&u_QS8qJ=Ar_0F?_?-f$Fab48=?+?TAAdkA}j%mzi;M~D*k6AlPFNQe;*5e^GGLWmQN5{?Nw zPDl_=5Kam^MMx4(rwM0-o+YFR=LqM8T_AAbBH@y-%Y;_K6~a|v*IW#_xIX&%)%1|L z=c`;QVLL5u;HE)z^lLO@(TiIat8m+*4eb^kXg4qs1E=(9yzp>JYJC7L7$ayg5%Drq_S;Qfye&n#Ne;#K;ynI;%C!*(x{lmH`VQ{+U7 zoI{bPEAmK1o}$RT6}cn-U!QD3k(U94YQcMB?jV3Jbn~IR&(8lHQawK*2#S4&5V-M-o@doSEEUnt=9QAcPR<{fJW(x;Jk^^zK@{G76!bt5*h?!)Fk D-`0AQ diff --git a/target/classes/com/engine/common/util/DateUtil.class b/target/classes/com/engine/common/util/DateUtil.class index 3dad251ed0e1052f1952a9d5d05a88681732796c..4aa6c787590044d514ec7b2c0683cf88d4749a99 100644 GIT binary patch delta 2104 zcma)7+gDU&6#t#MaApo?n42&xNK}+?acLn6iin~HB`|;r7-lLZr4>*_L3SB$X?79w z>#k{blSB)K9B1|5Q}xh$&-E|#+-3FK=Nx1TTsCWc`+VO%d;iXF-@dt6`pe41&wqb^ z3&0wr4J^k21I6e!@Hn3Eb9Yd7heSLn$EOTDjR6sZq8k$NjEHCD?Xc{g6EPyk=MB7o zQ3GRmQFMn5yo8rUyduX}4J2^Hz0hqrXR zt>et}^-fJ|QAf3?y5%WRgZiRK_(0!Cf7hXb{^p_KfxeNE{^6NFv@PyLE8297n>dSi zOsqtSiE~gU-j(ADl<0WR#QXTb#E1CE#K)pOFXDoTQnCL;b{FOCy<&gK#HYBd<1-U+ zd@jyk==jpaSGZzg0$-cBib);UM04F-j&E$EZ*@$Wm_}0cGdjLAaRVt6H<47odPlXG zI^&C}pngR4WL=&a*K6EbzWUK6qPPiP#U%YyojKZ z=RD_JjnzDPVY03@(BMZcR`FR*?R?m*1z{7&B|_}3xN9BU?WF4_eo*MfD@Zr1d;zir z1ii-sU22=dCQC=GLkYpW42!fkF&01Su-?J%rMZXrv9cueG<+%e+bfr(VDPxWcb2LB zW?^SNHqbrWNran#4R;01UKp^1Fs16R>{#x6(2ZEHemA25m&M3TB0xqe9H_|MWD%IH zgb--7ZQE?y9NYH4C9Pr>R%K)^YoTRjsFIZ0YK{jgD>A;e{E!gVh zwAktw_E8$axu`X(x3XvhCd-fe?_eKt(w=GGAoj|ivv}RSHf>}~n={%efF`F+eQ35S z@5cjpQ0>i$Rn4n`&8FFMH!WsC)U%ht@3mM?1&M#Rf$h<P6%S!2 zc4q|M?G#fi%0LL6~0x;6m1Pw-<@5li6lH3oWx~<2lJHa_T$!q15{5;4y7)M8&N5l&un5Y+Swjsliz7Rm#w?GN^PLfl9VP;@)6A_q})(y1=K&nMd&G7B)*d${vZV`FwpT5@hS#MzAj3B-4CA1MrNhXIr$bR3#u1Cnn-<=}Q5n7+!8;Kg zi{N+!Crq3)@$T4YZ(w4p(Gkqvfm#!%6yC#Wh4*pB#0Lr*A1W+Ht-?n*t1u$NkEQuU zng`IS@Tv3`$&$~c_c_ie)Cubgg>(4Q#8(PwoEPu~6BiY}#wCTz_(tJdd}rc&v0PCL zan)TkYT}y056Fpq%*43D1b$Tb2|3*n-miPi^MRE9Gm_HR!-ppRGMj@O))jYVdk}=d z$fxSZVH6O|qo}LF$|E$6a2{rkQwAE@TF$Zrijl+;j?3L`SdP0mDu!b6nh`)0E3u5< z23lu>N2cI=Zlafwlez`{Zmja?n<>4BUVPHKmsIBwA==0V85p_QC~o@qfd<^HiN!8gjf+0+8S;F5?*Mf*XAe=c|jJ% z?LG%7HxB=Kh`S#2&RApD^sV6d8?cdI zDXSL7N4%93P%`gm9@BE;idpLbmAjOi?&Fpy?#IR*vv8&rj?39FBZt@6!(8*C*jJxN zvbFLG-JnzdQc_v5jy;?I)r@br06XW#+17uTEJ%0q%xN?s!%X&|1DhzVAH5jx#i7ru zfe=@vd4K@Ah_ev7fu?}T9}kp4w;n28-o6cSZ1?T8NtLS^r=MQZC5Ch12%ZFp119$5? z<-rNSLsS|-Nz(IUQ0gH1^?^jo`h&D(S@?%hh9l1Qdgs>9^R|a*e;Av&UGb<}*fVGe z;SpXLxhR7e& zOb;j92G7zqf*4=+3cl$=Y^MdNnmSySM--csvcdTZDsHB_7~{Q#y&_s%cF18nio?a3 z20j_O-mb}9pv;Sua)}}?{}18KbmIyaH-6z6Y}F(7$~$w+#<)Y8EgNn!Hjxy;kiKEh googhk3rI|$G+E<(W69f{Z&)v#Q)6!9u?=kh7o1lIg#Z8m diff --git a/target/classes/com/engine/common/util/DbTools.class b/target/classes/com/engine/common/util/DbTools.class index 65602b21f2f7eb54bf9fc78b06aaf731b324b88b..9900897b6f80b09f5b2337123fdd90d04b1e43f7 100644 GIT binary patch delta 209 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 delta 4223 zcmZ`+30RfI8h&3m@SpSZgDftHA}F|`g8RPZlDMF0R;a0zxP_pAws+J@v)%p{%`*2E zQ&CDZGRrm1w8i$aG)v3ucI$SpmB@YP9K^hJ4?N$@eDlpWGw=7#H}fBveKOmB;QTAE z0cg)NHfH0j53}%_5x?8G0e@IHXBrh2&fADVr37J<46!kbp%y(h9Gs0n7{ekMPRj_d zMV~RW<&hDl<`{!Wi&1jM8a9d;Z8L_kHvMs|X)}(sY}RI-2*$In5eXLS*+^o2FAfal&y_b zx@vxASZrgX6V6Jotr6{vXm8ft!D2^?oh){?(TiP-=xRi|#cnqGvb$;Y@Uo{V1xYXV zveARRZT8`1X3u?%=;vks2v{6o{9f+mKrb_G4&q>&L;M`-V-|;er zw2{qGMqK6N)x5@*7;b9WMvOLMjL}7e_s&uf^|Lva*O~$2ERMG^DL8t9(c~C$oyF@- zWY1chXk$7uwC(B4wK&Pf41>W8)0nIf8Ivg%rxH$PetvFY-@KfnqTHg=ogwu+(dzJt z8y2Toyg_j-JriEexI9J8;&cTeh#S$>jfzhy{nYEF)!D-PM3$Qz)wndup1}~DFP#&y zpLMPz;wI-7XBOv9pE#>9r+8{Xe!qen^WEh&Mhx>~j)R+Uvx8f3tHXR25K+@|X6K~O zDxR8`K4fZ9v4h)iD-n57J2Yp8!x^0Eu#iO-iyhA5YzOPG(Crf)-|9OIqT_RK#~lvm@lNgA;a$Aj;(Uh-c#p${ zyw~D=4)5m!7V{iFXq-P}oI3&M`MJgEqecvI_^_73MVw89jk|<2M6)C z!^ilz>%=q|^#m6SNe3@+2~qpv-lpXgrVq*~?4Ms;c(cPNxzyoPeA?kMKI3pXSD5BX zBE0qWCR`3z8U1Rrm^EDM`eW+HKFjAEKFjAFzF?NJjxW0FV+MKsT<>rLXS$U!DSkgU zIxOKPf~_5HHg=_$WAP=2FLR5-GOl&FmD>n!(bUQL6LX4lP5Tw&xLkvht2&COP8XYA zb-10cS={09b-rP7r^8*`?QoCryO;YMzG<5KxtpkIw(9#ba&NE zES*rRvCkdfuyF?>CN(v+Fn2~lVR6>1ygW5B9DczAHdgbfdM{!=FsEpWIA!rGH#w!X zm&d)F;>9}ms+0jfe#?_4p`3Epq@?)yz0K3?f`(YFWD0oTGwfB(X9yf9#nwP6E~$(F zA(BhZRjZFmstjvU25wR%6!Rp*1Il{1Q*|e3fV*(FTJtZ_L@rR%hkLLPA(-oqO^x@j z9gMD7Eg#1M+{tYf$r`G!Lmi1P{ykB0Qp+S?p+e zHU6SEBc#Pjjwj57ZuiDRxW--BxQqXJ z;krtGJ0q+Ttq^WuwS_en9E&j))>;e)&Y_)jzagYjgF~w=Knu@X0Z@CQhJ18VcV}&@ zn{KxrsDqxUk6uVcZ}i1w7=nHnh5pFFKulC?G6rFaAA?bVVSx<|geAiUSd1l#QVd4o zNnsf(M?42G4Q8Tq=8bM87fM;YE62QDY!m7M2m$#sg74i`rX@YBN z4VPhg_0W|X8Vt@0+J#b_CYtLWYtoau-Q=cYxYxa{>05q&S%Oe{*o4io50lwZ9DNgU z9KcMKK{QvPMkSIE768$qDHsn_pofLsYE>Z7Vq@tlkZxhGH0RKizDl7HdC8cddC)d! z=r`UB^!t8;uPP?i-;6OPZ(cC)Tr>#k2P(pW$UP|v1LNSu1lYI^ahRlqPeF4`LkHxc zJMu9=x7i33iljxD?AH-2*0H-4x9imS#o;-M*gTQwEb14daxLm*cr}d~yG61Xdr*e0 zqEiP(VH;i%S-K0ba*YVr^g+8YfY$~{2#p?vSIvR;>sc^TQ@$p$#BmUIXh^8uPA%}d zCh-Kgmn=O83cstx+L`o?ckWCK_gN{~Fp3g|@`!*iIZqRk)3Y;?8?v_XiKtl;@>|9Iq-v)Wn(vr^@7Wrs#r_{evNN2Dqb$Hr)j2Vf z$$oqyU_8iTJ$x#rhsn`?d}i1xzD~vG(kUr&rlvO6kEtCsY=wu@wG3BC%$GWFNd@}8 zs_r|cz94E}3$+tkR^a{&^~iUGJe`Q@5*AsGpR*IoFuJRyntOTMChnN@Mj@&$YFpb% zH@)$C3S=~P_qMI&ewbe0bdAku=GM>X8LSRB#fFT8Fqzi!x#KdL$TY5QeAq@UD>QHg zr6S@y+US1yS^sWQo4S5O!+A)SJSUq9@#wrVc_rG2BAvwSetP&0V<@f`<*%a`GihTk zBa~Spv60c(E><68EIwx(&axIGnV`RV`najj_Dp0yHsAy%>q(oUw`nTpt7nlC`${%t zDVzCum@O3U*40$L8rLXzC*k9Kh4hqA7lC;K-$|#RYTpZg-P5X_u8PSC`~Y*DLwO88 z$}UW~>m#MapOk&-=qdJ3)x7fa%LU{^4pku^QzGd97x{rf)ZRd#e-L>EzT53-%vX>C=EyVi>@ympG zUm1{t*&;2QWE>&|q^Z$hS;3~w&>mXe~yrdfOl4`_Dsu3@#MtprW;;X6= zUs8p*7yqh$D~>cV)6Xv|-;iB~yi$aeW4dbjTToDn&~nUBW9AkVmLj|yMQRk6qKo8qd*`aYfF*4f|$8Sb%<#**g qJ$if@JO8jlHs(OwD4C$LZ=mhf4Qzg1ePssA;EDYe|5h^u|M@TOJz{wP diff --git a/target/test-classes/Test$1.class b/target/test-classes/Test$1.class index c4a554657a6ccb13733e1f6f543728c94c3f70f3..5dc12d4348e541b5e691485c83f8e764ffd383b8 100644 GIT binary patch delta 33 ocmdnVvXf=QJ4R7)1{OvM23|%<1~En{26;wl1`S4;$;?b<0B{}!2><{9 delta 33 ocmdnVvXf=QJ4R6s1{Ow623|%k1~Eo%26;vv1`S5u$;?b<0BYC-uK)l5 diff --git a/target/test-classes/Test$10.class b/target/test-classes/Test$10.class index 6a5714f206f59ed08c480d8a1589f2cc3c7b538e..9423d161897045c9e463e48155cee97f43db1b25 100644 GIT binary patch delta 77 zcmV~$sS-e70EN-}4KspKRaI34&8Vto-?yNue-*umM|6&HjPtoxTFR!9M=hU50j)wh eMf6G-lrbu2Qo*d6MGLDgHr?zp9C|q4+=_n$AP!al delta 77 zcmZo-Z(`rT&FtvQz{2Rqz{}{*AjTNLAkP@cpurf#V8|HEV8s~1;LI4x;KLZk5XuP64tAXwT|Bzq+=_oKN}-KXJCzPJ05JiT06GDd07C(n089ax j0965*0A2x_0A~T40B`}E0C@qO0D=LY0E+>ilS~6Pfo~DH delta 77 zcmV~$tqwq70EW@$9h+dPs;Y{hnX0O)s%m`x|7~u>B|67A#`#<;ZL!ti$>6Ie&_Jk> eNE3->GA-mKlSUUtH@luUx8fgMln}ZA diff --git a/target/test-classes/Test$2.class b/target/test-classes/Test$2.class index be7af60cb646cc386c5484b4417353b145f1bc99..b407a7f2098508c185fa19f8b92872710d947161 100644 GIT binary patch delta 33 ocmdnVvXf=QJ4R7C1{Own23|%51~EoO26;v$1`S5#$;?b<0CJQCGXMYp delta 33 ocmdnVvXf=QJ4R7{1{OvE23|%%1~En<26;wd1`S4$$;?b<0BueL*#H0l diff --git a/target/test-classes/Test$3.class b/target/test-classes/Test$3.class index 29558ac56148df76dbaf0c2dd49e3c658c954d0b..9c1726407011775df2685e54c2a96247e0a4ccfc 100644 GIT binary patch delta 33 ocmdnVvXf=QJ4R6z1{OwD23|%r1~Eo;26;ve1`S5d$;?b<0CcbgR{#J2 delta 33 ocmdnVvXf=QJ4R7a1{Ov!23|&S1~Enn26;wF1`S53$;?b<0B>pp{Qv*} diff --git a/target/test-classes/Test$4.class b/target/test-classes/Test$4.class index afff1a57e45b061d5dac259923571bd19b1112a1..fa0454c8bc4072105029fd34e2e2718f49e87bac 100644 GIT binary patch delta 33 ocmdnVvXf=QJ4R701{Owb23|%T1~Eom26;w31`S62$;?b<0Cvm;djJ3c delta 33 ocmdnVvXf=QJ4R7y1{Ovc23|&41~EoC26;w#1`S4q$;?b<0C9!|ApigX diff --git a/target/test-classes/Test$5.class b/target/test-classes/Test$5.class index 48dc9d1ec0abeb6b5b0b00f6d84046150de70408..46d0d3f6035ad69d352bd0cbcb8c66880a7e9604 100644 GIT binary patch delta 33 ocmdnVvXf=QJ4R6h1{Ov`23|%Z1~Eos26;vk1`S5j$;?b<0C?yHp8x;= delta 33 ocmdnVvXf=QJ4R7O1{Ovo23|&G1~Enz26;wR1`S5F$;?b<0CS=RMF0Q* diff --git a/target/test-classes/Test$6.class b/target/test-classes/Test$6.class index a8999abcf60a76b5e2141ceb022cc64a3e902e18..a3ef53573203d48c21772a2b4178069a7a8f14b4 100644 GIT binary patch delta 33 ocmdnVvXf=QJ4R761{Owh23|%B1~EoU26;v+1`S5*$;?b<0DA-l!vFvP delta 33 ocmdnVvXf=QJ4R7;1{OvQ23|%@1~Eo026;wp1`S4?$;?b<0Cm0vX#fBK diff --git a/target/test-classes/Test$7.class b/target/test-classes/Test$7.class index 6da92bc3a88ba84531d7a55ea63ead53030001a3..02e837b6a926617e6f43b3db482ab49582ab8b34 100644 GIT binary patch delta 33 ocmdnVvXf=QJ4R6(1{OwJ23|%x1~Eo^26;vY1`S5X$;?b<0DT|@=Kufz delta 33 ocmdnVvXf=QJ4R7m1{Ov=23|&e1~Enh26;w91`S4|$;?b<0C(C2jQ{`u diff --git a/target/test-classes/Test$8.class b/target/test-classes/Test$8.class index b77bc7733fb70ebfce65113bca2c0cd1dc8f87ee..30c53acf1465be09ad7d719f1177e4f77c5fd20c 100644 GIT binary patch delta 33 ocmdnVvXf=QJ4R6_1{OwV23|%N1~Eog26;v|1`S5{$;?b<0Dn9N3jhEB delta 33 ocmdnVvXf=QJ4R7s1{OvW23|%}1~Eo626;wv1`S4w$;?b<0D1NWu>b%7 diff --git a/target/test-classes/Test$9.class b/target/test-classes/Test$9.class index 4809cff3c737214c8be54030e880c8b1df1cbf68..ebf168441a314b2d2d5b37716f57d5b308276ff6 100644 GIT binary patch delta 77 zcmV~$s}4W_0EW@;ADhjls;a68nu+fB+or0jNEN+^M|93*UDjtCaf+!7M>(zvJeByW f2vifPAyG@Fj$S>R26l}cnm9FcYvIxQrbhS!*=Y?i delta 77 zcmV~$tqwq70EW@$9h=Rjs;a68=Ku3gRaI3LsiGTkiO#v4%lTZZO0kvUDaThqppsA( ek!lhdj2afTtm@d*vuohc$f=22Gmn;cw&EYOjtnvY diff --git a/target/test-classes/Test.class b/target/test-classes/Test.class index a035e3a71aabd4de7098acd2fdfb66be0731978f..44619e21b1c3399403dc631b31b406b994c71ce5 100644 GIT binary patch delta 2159 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 diff --git a/target/test-classes/TestAskForLeaveByDurationTime.class b/target/test-classes/TestAskForLeaveByDurationTime.class index 6cea6bdfeaca2a033948251e5f776aeda30e9452..77beed599a53004e2576ebf43ecb1f9669a30617 100644 GIT binary patch delta 53 vcmZqR`_H?r_Sn({B)0 delta 54 zcmey*+rYQMm{nC#!zU}TEK$F-Br`|fH?hE46N&GWSzKbx$RIqKkyUte7VA_-0O?y0 A)&Kwi diff --git a/test/Test.java b/test/Test.java index d2fd076..8e43cb8 100644 --- a/test/Test.java +++ b/test/Test.java @@ -18,6 +18,8 @@ import java.math.BigDecimal; import java.math.MathContext; import java.math.RoundingMode; import java.time.LocalDate; +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; import java.time.temporal.ChronoUnit; import java.util.*; import java.util.stream.Collectors; @@ -180,11 +182,24 @@ public class Test { // System.out.println(lists2); // // System.out.println(Double.valueOf("1.00").intValue()*60); - String analysisDate = "2023-11-22"; +// String analysisDate = "2023-11-22"; +// List lists = Lists.newArrayList(); +// lists.add("aa"); +// lists.add("aa"); +// lists.add("bb"); +// List lists2 = lists.stream().filter(e->e.equals("aa")).collect(Collectors.toList()); +// System.out.println(lists.size()); +// System.out.println(lists2.size()); + BigDecimal s = new BigDecimal(110.0); + + System.out.println(String.format ("%.2f", 1.8333)); + + System.out.println(DateUtil.lastMonth("2023-11-23",DateUtil.yyyyMMdd)); + //System.out.println(Utils.getItemdurationDown(15,AccountingUnitEnum.MINUTES.getKey(),59,AccountingUnitEnum.MINUTES)); // Calendar calendar = Calendar.getInstance(); // calendar.set(Integer.valueOf(analysisDate.split("-")[0]), Integer.valueOf(analysisDate.split("-")[1]) - 1, 1); - int day = TimeUtil.getDayOfWeek(analysisDate); - System.out.println(DateUtil.AfterDay(analysisDate,0)); +// int day = TimeUtil.getDayOfWeek(analysisDate); +// System.out.println(DateUtil.AfterDay(analysisDate,0)); // System.out.println(calendar.getActualMaximum(Calendar.DAY_OF_WEEK)); // List> lists = Lists.newArrayList();