package com.engine.jucailinkq.attendance.attendanceanalysis.service.impl; import com.engine.jucailinkq.attendance.attendanceanalysis.cmd.GetEvectionCmd; import com.engine.jucailinkq.attendance.attendanceanalysis.service.EvectionService; import com.engine.jucailinkq.attendance.enums.AccountingUnitEnum; import com.engine.jucailinkq.attendance.enums.AttendanceItemTypeEnum; import com.engine.jucailinkq.attendance.enums.CheckBoxEnum; import com.engine.jucailinkq.attendance.enums.WorkForTimeEnum; import com.engine.jucailinkq.common.util.Utils; 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; import java.util.List; import java.util.Map; import java.util.stream.Collectors; public class EvectionServiceImpl extends Service implements EvectionService { @Override public Map evectionByTime(Map param) { //人员迟到、早退、漏卡等记录 List> abnormalClockInList = (List>)param.get("abnormalClockInList"); //请假开始时间 String kssj = Util.null2String(param.get("kssj")); //请假结束时间 String jssj = Util.null2String(param.get("jssj")); //作用时段 String zysd = Util.null2String(param.get("zysd")); //分析日期 String analysisDate = Util.null2String(param.get("analysisDate")); //排班 List> scheduleResult = (List>)param.get("scheduleResult"); List> offsetEvectionAnomaly = Lists.newArrayList(); for (int i=0;i leaveMap = Maps.newHashMap(); leaveMap.put("kssj",kssj); leaveMap.put("jssj",jssj); int betweenTime = Utils.removeRestTime(classStartTime,classEndTime,scheduleResult,analysisDate); int intersectionTime = Utils.getIntersectionTime(classStartTime,classEndTime,leaveMap,scheduleResult,analysisDate); if (betweenTime == intersectionTime){ offsetEvectionAnomaly.add(abnormalClockInList.get(i)); }else { String hsdw = Util.null2String(abnormalClockInList.get(i).get("hsdw")); double hsl = Double.valueOf(Util.null2String(abnormalClockInList.get(i).get("hsl"))); double itemduration = Utils.getItemduration(hsl,hsdw,betweenTime-intersectionTime, AccountingUnitEnum.MINUTES); abnormalClockInList.get(i).put("itemduration",itemduration); } } } abnormalClockInList.removeAll(offsetEvectionAnomaly); Map resultMap = Maps.newHashMap(); resultMap.put("abnormalClockInList",abnormalClockInList); resultMap.put("offsetEvectionAnomaly",offsetEvectionAnomaly); return resultMap; } @Override public Map evectionByDurationTime(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()); //请假时长,单位小时 int ccsc = param.get("ccsc") == null?0:Double.valueOf(Math.ceil(Double.valueOf(param.get("ccsc").toString())*60)).intValue(); //同一天可抵消多个异常 List> offsetEvectionAnomaly = Lists.newArrayList(); //作用时段 String zysd = Util.null2String(param.get("zysd")); 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()); String bdlx = Util.null2String(abnormalClockInList.get(i).get("bdlx")); if (ccsc > time && (zysd.contains(Utils.getWorkFor(bdlx)) || zysd.contains(WorkForTimeEnum.ALL_TIME.getKey()))){ ccsc = ccsc-time; offsetEvectionAnomaly.add(abnormalClockInList.get(i)); } } abnormalClockInList.removeAll(offsetEvectionAnomaly); }else{ for (int i=abnormalClockInList.size() -1;i>=0;i--){ int time = Integer.valueOf(abnormalClockInList.get(i).get("betweenMinutes").toString()); String bdlx = Util.null2String(abnormalClockInList.get(i).get("bdlx")); if (ccsc > time && (zysd.contains(Utils.getWorkFor(bdlx)) || zysd.contains(WorkForTimeEnum.ALL_TIME.getKey()))){ offsetEvectionAnomaly.add(abnormalClockInList.get(i)); abnormalClockInList.remove(i); break; } } } abnormalClockInList.addAll(forgetClockList); Map resultMap = Maps.newHashMap(); resultMap.put("abnormalClockInList",abnormalClockInList); resultMap.put("offsetEvectionAnomaly",offsetEvectionAnomaly); return resultMap; } @Override public List> evectionByHalfDay(Map param) { return null; } @Override public Map getEvection(Map param) { return commandExecutor.execute(new GetEvectionCmd(param)); } }