diff --git a/.idea/dataSources/ade958e9-d72b-48ba-8be1-0441de7da9a5/entities/entities.dat b/.idea/dataSources/ade958e9-d72b-48ba-8be1-0441de7da9a5/entities/entities.dat index 16f31fd..798cfad 100644 Binary files a/.idea/dataSources/ade958e9-d72b-48ba-8be1-0441de7da9a5/entities/entities.dat and b/.idea/dataSources/ade958e9-d72b-48ba-8be1-0441de7da9a5/entities/entities.dat differ diff --git a/.idea/dataSources/ade958e9-d72b-48ba-8be1-0441de7da9a5/entities/entities.dat.values b/.idea/dataSources/ade958e9-d72b-48ba-8be1-0441de7da9a5/entities/entities.dat.values index 04ef7c5..4eb285f 100644 Binary files a/.idea/dataSources/ade958e9-d72b-48ba-8be1-0441de7da9a5/entities/entities.dat.values and b/.idea/dataSources/ade958e9-d72b-48ba-8be1-0441de7da9a5/entities/entities.dat.values differ diff --git a/.idea/dataSources/ade958e9-d72b-48ba-8be1-0441de7da9a5/entities/entities.dat.values.s b/.idea/dataSources/ade958e9-d72b-48ba-8be1-0441de7da9a5/entities/entities.dat.values.s index 61c4853..9b662de 100644 --- a/.idea/dataSources/ade958e9-d72b-48ba-8be1-0441de7da9a5/entities/entities.dat.values.s +++ b/.idea/dataSources/ade958e9-d72b-48ba-8be1-0441de7da9a5/entities/entities.dat.values.s @@ -1 +1 @@ -y~|~~|}ƀ~}~|~}}}}~~}~}|}}qhjkjhjijkihlkopxutvvwv{xyxvxvyxzwvxې֐ߏ͎ڐΎڏČϐאˏčّݐޑяܐёގÑ̎ϏݏȔĐԏڎݍӐ̐ܓҏҎؐ˒͏Ѝ֐Џ̍ɑ͎͌ďې֎ɎߏΑ̏wssvswtsyltosqlqprlssusmoqrljZ\^\ZVZX\Vhwxzy{z|{xx|z|w{vy|VZUYSYX\Xace_WW^TRTTZW[T][WRWVZZUYQXWY[Zg~~z~{zy{x~|{~|}~}فad]h]a^a`a^_]]]^^^]]`kgggghc]WkiqhoLLLMMMMMMNMMMMMMMMMKKKKKJJJKKKLKKKKKKKKJJJKKKKKKKKKLKKKJJJKKKKLKKKKKKKKJIKKKKKKKKKKLKKJIJKKKKKLKKKKKKKJJJKKKKK \ No newline at end of file +y~|~~|}ƀ~}~|~}}}}~~}~}|}}qhjkjhjijkihlkopxutvvwv{xyxvxvyxzwvxې֐ߏ͎ڐΎڏČϐאˏčّݐޑяܐёގÑ̎ϏݏȔĐԏڎݍӐ̐ܓҏҎؐ˒͏Ѝ֐Џ̍ɑ͎͌ďې֎ɎߏΑ̏wssvswtsyltosqlqprlssusmoqrljZ\^\ZVZX\Vhwxzy{z|{xx|z|w{vy|VZUYSYX\Xace_WW^TRTTZW[T][WRWVZZUYQXWY[Zg~~z~{zy{x~|{~|}~}فad]h]a^a`a^_]]]^^^]]`kgggghc]Wkiqh \ No newline at end of file diff --git a/.idea/workspace.xml b/.idea/workspace.xml index b2dd328..cbfb994 100644 --- a/.idea/workspace.xml +++ b/.idea/workspace.xml @@ -10,11 +10,20 @@ + + + - - - + + + + + + + + + - + diff --git a/out/artifacts/hrm_attendance/hrm-attendance.jar b/out/artifacts/hrm_attendance/hrm-attendance.jar index 369efba..6863e3e 100644 Binary files a/out/artifacts/hrm_attendance/hrm-attendance.jar and b/out/artifacts/hrm_attendance/hrm-attendance.jar differ diff --git a/src/com/engine/attendance/attendanceanalysis/web/AttendanceanalysisAction.java b/src/com/engine/attendance/attendanceanalysis/web/AttendanceanalysisAction.java index 6ae03a8..423737d 100644 --- a/src/com/engine/attendance/attendanceanalysis/web/AttendanceanalysisAction.java +++ b/src/com/engine/attendance/attendanceanalysis/web/AttendanceanalysisAction.java @@ -42,11 +42,11 @@ public class AttendanceanalysisAction { @Produces({"text/plain"}) public String getSchedulingData(@Context HttpServletRequest request, @Context HttpServletResponse response) { try { - //Map paramMap = ParamUtil.request2Map(request); - Map paramMap = Maps.newHashMap(); - paramMap.put("startDate","2024-06-13"); - paramMap.put("endDate","2024-06-13"); - paramMap.put("userIds","81"); + Map paramMap = ParamUtil.request2Map(request); +// Map paramMap = Maps.newHashMap(); +// paramMap.put("startDate","2024-06-13"); +// paramMap.put("endDate","2024-06-13"); +// paramMap.put("userIds","81"); String startDate = Util.null2String(paramMap.get("startDate")); String startBeforeDate = DateUtil.beforeDay(startDate,2); diff --git a/src/com/engine/attendance/attendanceanalysis/wrapper/UpdateAttendanceResultWrapper.java b/src/com/engine/attendance/attendanceanalysis/wrapper/UpdateAttendanceResultWrapper.java index e69b8be..3932eb7 100644 --- a/src/com/engine/attendance/attendanceanalysis/wrapper/UpdateAttendanceResultWrapper.java +++ b/src/com/engine/attendance/attendanceanalysis/wrapper/UpdateAttendanceResultWrapper.java @@ -15,6 +15,7 @@ import com.google.common.collect.Maps; import lombok.extern.slf4j.Slf4j; import weaver.general.Util; +import java.util.Comparator; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -198,8 +199,6 @@ public class UpdateAttendanceResultWrapper extends Service { for (int i=0;i resultMap = Maps.newHashMap(); - resultList.add(resultMap); - resultMap.put("item",askForLeaveList.get(i).get("jqlx")); String kssj = askForLeaveList.get(i).get("ksrq") + " "+askForLeaveList.get(i).get("kssj"); String jssj = askForLeaveList.get(i).get("jsrq")+ " "+askForLeaveList.get(i).get("jssj"); //半天请假 @@ -221,6 +220,11 @@ public class UpdateAttendanceResultWrapper extends Service { //是否分组呈现 String sffzcx = Util.null2String(askForLeaveItem.get("sffzcx")); + if (!sffzcx.equals(CheckBoxEnum.CHECKED.getKey())){ + resultMap.put("item",askForLeaveList.get(i).get("jqlx")); + resultList.add(resultMap); + } + Map param = Maps.newHashMap(); param.put("abnormalClockInList",abnormalClockInList); param.put("zysd",zysd); @@ -237,13 +241,57 @@ public class UpdateAttendanceResultWrapper extends Service { //时长请假 itemduration = Utils.getItemduration(hsl,hsdw,Double.valueOf(Double.valueOf(qjsc)*60).intValue(),AccountingUnitEnum.MINUTES); - resultMap.put("itemduration",itemduration); + if (!sffzcx.equals(CheckBoxEnum.CHECKED.getKey())){ + resultMap.put("itemduration",itemduration); + } + param.put("qjsc",qjsc); param.put("tybcndbjlhbjs",tybcndbjlhbjs); if (abnormalClockInList.size()>0){ Map map1 = askForLeaveService.askForLeaveByDurationTime(param); abnormalClockInList =(List>)map1.get("abnormalClockInList"); - offsetAskForLeaveAnomaly.addAll((List>)map1.get("offsetAskForLeaveAnomaly")); + List> offsetAskForLeaveAnomalyList = (List>)map1.get("offsetAskForLeaveAnomaly"); + offsetAskForLeaveAnomaly.addAll(offsetAskForLeaveAnomalyList); + + + //按时长请假,将标记请假作用的时段上的异常 按标准逻辑进行冲销,如果冲销后还有多余时长,如请假时长为1.5小时,但员工当天有两个时段上各有不到30分钟的异常,此时每个时段0.5小时需要冲销,多出来的0.5小时放哪里,放到异常多的那个时段上 + //有几个抵消异常计入几个请假考勤项目 + if (sffzcx.equals(CheckBoxEnum.CHECKED.getKey())){ + int total = offsetAskForLeaveAnomalyList.stream().mapToInt(e->Integer.valueOf(e.get("betweenMinutes").toString())).sum(); + int more = 0; + if (total < Integer.valueOf(qjsc)*60){ + more = Integer.valueOf(qjsc)*60-total; + } + List> sortOffsetAskForLeaveAnomalyList = offsetAskForLeaveAnomalyList.stream().sorted(Comparator.comparing(e->Integer.valueOf(e.get("betweenMinutes").toString()))).collect(Collectors.toList()); + for (int j=0;j item = CommonUtil.assembleAskForOrEvectionItem(askForLeaveItem,bdlx); + if (item != null){ + itemduration = Utils.getItemduration(Double.valueOf(Util.null2String(item.get("hsl"))),Util.null2String(item.get("hsdw")),time,AccountingUnitEnum.MINUTES); + Map itemMap = Maps.newHashMap(); + itemMap.put("itemduration",itemduration); + itemMap.put("item",itemMap.get("keyid")); + resultList.add(itemMap); + } + } + } + }else { + if (sffzcx.equals(CheckBoxEnum.CHECKED.getKey())){ + Map item = CommonUtil.assembleAskForOrEvectionItem(askForLeaveItem,ClassSegmentTypeEnum.WORK_TIME.getKey()); + if (item != null){ + Map itemMap = Maps.newHashMap(); + itemduration = Utils.getItemduration(Double.valueOf(Util.null2String(item.get("hsl"))),Util.null2String(item.get("hsdw")),Double.valueOf(Double.valueOf(qjsc)*60).intValue(),AccountingUnitEnum.MINUTES); + itemMap.put("itemduration",itemduration); + itemMap.put("item",itemMap.get("keyid")); + resultList.add(itemMap); + } + } } } }else { @@ -252,9 +300,11 @@ public class UpdateAttendanceResultWrapper extends Service { if (CheckBoxEnum.CHECKED.getKey().equals(zdycbcndfgzsd)){ timeMinutes = Utils.removeRestTime(kssj,jssj,scheduleResult,analysisDate); } + if (timeMinutes > Integer.valueOf(qjsc)*60){ + timeMinutes = Integer.valueOf(qjsc)*60; + } log.debug("recordAskForLeave timeMinutes :[{}] ,hsl:{},hsdw",timeMinutes,hsl,hsdw); itemduration = Utils.getItemduration(hsl,hsdw,timeMinutes,AccountingUnitEnum.MINUTES); - resultMap.put("itemduration",itemduration); param.put("kssj",kssj); param.put("jssj",jssj); if (abnormalClockInList.size()>0){ @@ -262,6 +312,23 @@ public class UpdateAttendanceResultWrapper extends Service { abnormalClockInList = (List>)map1.get("abnormalClockInList"); offsetAskForLeaveAnomaly.addAll((List>)map1.get("offsetAskForLeaveAnomaly")); } + if (sffzcx.equals(CheckBoxEnum.CHECKED.getKey())){ + //按时间区间请假时 将连接的同一类型时段设置一种假别 计算出分钟时长后按核算量算出核算时长及单位即可 + Map proportionMap = Utils.getAskLeaveAndEvctionProportion(kssj,jssj,scheduleResult,analysisDate); + for (Map.Entry entry: proportionMap.entrySet()){ + String bdlx = entry.getKey(); + int betweenTimes = Integer.valueOf(entry.getValue().toString()); + Map item = CommonUtil.assembleAskForOrEvectionItem(askForLeaveItem,bdlx); + if (item != null){ + Map itemMap = Maps.newHashMap(); + itemMap.put("itemduration",Utils.getItemduration(Double.valueOf(Util.null2String(item.get("hsl"))),Util.null2String(item.get("hsdw")),betweenTimes,AccountingUnitEnum.MINUTES)); + itemMap.put("item",itemMap.get("keyid")); + resultList.add(itemMap); + } + } + }else { + resultMap.put("itemduration",itemduration); + } } } map.put("resultList",resultList); @@ -524,4 +591,5 @@ public class UpdateAttendanceResultWrapper extends Service { utilService.recordItem(recordParam); } + } diff --git a/src/com/engine/common/util/CommonUtil.java b/src/com/engine/common/util/CommonUtil.java index 0abc8c6..74d8f98 100644 --- a/src/com/engine/common/util/CommonUtil.java +++ b/src/com/engine/common/util/CommonUtil.java @@ -775,4 +775,23 @@ public class CommonUtil { } + /** + * 根据班段类型获得对应的子项目 + * @param itemMap + * @param bdlx + * @return + */ + public static Map assembleAskForOrEvectionItem(Map itemMap,String bdlx){ + List> sonItems = (List>)itemMap.get("sonItems"); + String workfor = Utils.getWorkFor(bdlx); + for (Map sonItem:sonItems){ + String zysd = Util.null2String(sonItem.get("zysd")); + if (zysd.equals(workfor)){ + return sonItem; + } + } + return null; + } + + } diff --git a/src/com/engine/common/util/Utils.java b/src/com/engine/common/util/Utils.java index a1ecb2a..56a48be 100644 --- a/src/com/engine/common/util/Utils.java +++ b/src/com/engine/common/util/Utils.java @@ -421,6 +421,52 @@ public class Utils { return betweenMinutes; } + /** + * 开始时间和结束时间在班段类型中所占的时间 + * @param kssj + * @param jssj + * @param scheduleResult + * @param analysisDate + * @return + */ + public static Map getAskLeaveAndEvctionProportion(String kssj,String jssj,List> scheduleResult,String analysisDate){ + Map resultMap = Maps.newHashMap(); + for (Map restSchedule :scheduleResult){ + String dtkssj = Utils.getkssjTime(restSchedule,analysisDate); + String dtjssj = Utils.getjssjTime(restSchedule,analysisDate); + + int betweenMinutes = 0; + if (DateUtil.getTime(kssj).compareTo(DateUtil.getTime(dtkssj)) <=0 && DateUtil.getTime(jssj).compareTo(DateUtil.getTime(dtjssj)) >=0){ + //休息时间在请假时间中间 + betweenMinutes = DateUtil.getBetWeenMinutes(dtkssj,dtjssj); + log.debug("休息时间在请假时间中间"); + }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 = DateUtil.getBetWeenMinutes(dtkssj,jssj); + log.debug("休息时间在请假时间 右边"); + }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 = DateUtil.getBetWeenMinutes(kssj,dtjssj); + log.debug("休息时间在请假时间 左边"); + }else if (DateUtil.getTime(kssj).compareTo(DateUtil.getTime(dtkssj)) >=0 && DateUtil.getTime(jssj).compareTo(DateUtil.getTime(dtjssj)) <=0){ + //请假时间在休息时间中间 + betweenMinutes = 0; + log.debug("请假时间在休息时间中间"); + } + if (betweenMinutes > 0){ + if (resultMap.get(restSchedule.get("bdlx")) == null){ + resultMap.put(restSchedule.get("bdlx").toString(),betweenMinutes); + }else { + betweenMinutes = betweenMinutes + Integer.valueOf(resultMap.get(restSchedule.get("bdlx")).toString()); + resultMap.put(restSchedule.get("bdlx").toString(),betweenMinutes); + } + + } + } + + return resultMap; + } + /** * 扣除就餐时间 * @param kssj 开始时间 @@ -835,4 +881,6 @@ public class Utils { public static double convertDouble(Object num){ return Util.null2String(num).equals("")?0:Double.valueOf(Util.null2String(num)); } + + } diff --git a/target/classes/com/engine/attendance/attendanceanalysis/wrapper/UpdateAttendanceResultWrapper$1.class b/target/classes/com/engine/attendance/attendanceanalysis/wrapper/UpdateAttendanceResultWrapper$1.class index 248f0f4..d1f1edd 100644 Binary files a/target/classes/com/engine/attendance/attendanceanalysis/wrapper/UpdateAttendanceResultWrapper$1.class and b/target/classes/com/engine/attendance/attendanceanalysis/wrapper/UpdateAttendanceResultWrapper$1.class differ diff --git a/target/classes/com/engine/attendance/attendanceanalysis/wrapper/UpdateAttendanceResultWrapper.class b/target/classes/com/engine/attendance/attendanceanalysis/wrapper/UpdateAttendanceResultWrapper.class index 960dbce..55ed4d2 100644 Binary files a/target/classes/com/engine/attendance/attendanceanalysis/wrapper/UpdateAttendanceResultWrapper.class and b/target/classes/com/engine/attendance/attendanceanalysis/wrapper/UpdateAttendanceResultWrapper.class differ diff --git a/target/classes/com/engine/attendance/workflow/action/askforleave/AskForLeaveWorkFlowSubmitAction.class b/target/classes/com/engine/attendance/workflow/action/askforleave/AskForLeaveWorkFlowSubmitAction.class index e38c160..bb53b3a 100644 Binary files a/target/classes/com/engine/attendance/workflow/action/askforleave/AskForLeaveWorkFlowSubmitAction.class and b/target/classes/com/engine/attendance/workflow/action/askforleave/AskForLeaveWorkFlowSubmitAction.class differ diff --git a/target/classes/com/engine/common/util/CommonUtil.class b/target/classes/com/engine/common/util/CommonUtil.class index 318f1aa..90b1b0d 100644 Binary files a/target/classes/com/engine/common/util/CommonUtil.class and b/target/classes/com/engine/common/util/CommonUtil.class differ diff --git a/target/test-classes/TestObj.class b/target/test-classes/TestObj.class index 4ad4c4c..f8fbc94 100644 Binary files a/target/test-classes/TestObj.class and b/target/test-classes/TestObj.class differ diff --git a/test/TestObj.java b/test/TestObj.java index 429487c..c039980 100644 --- a/test/TestObj.java +++ b/test/TestObj.java @@ -28,12 +28,21 @@ import java.util.stream.Collectors; public class TestObj { public static void main(String[] args) throws Exception{ - List list = Lists.newArrayList(); - list.add("1"); - list.add("2"); - list.add("3"); - list= list.subList(0,2); - System.out.println(list); + List> list = Lists.newArrayList(); + Map map1 = Maps.newHashMap(); + Map map2 = Maps.newHashMap(); + Map map3 = Maps.newHashMap(); + map1.put("betweenMinutes","1"); + map2.put("betweenMinutes","10"); + map3.put("betweenMinutes","5"); + list.add(map1); + list.add(map2); + list.add(map3); + List> sortOffsetAskForLeaveAnomalyList = list.stream().sorted(Comparator.comparing(e->Integer.valueOf(e.get("betweenMinutes").toString()))).collect(Collectors.toList()); + System.out.println(sortOffsetAskForLeaveAnomalyList); + + int total = sortOffsetAskForLeaveAnomalyList.stream().mapToInt(e->Integer.valueOf(e.get("betweenMinutes").toString())).sum(); + System.out.println(total); }