package com.engine.attendance.attendanceanalysis.wrapper; import com.engine.attendance.attendanceanalysis.service.AbnormalAttendanceService; import com.engine.attendance.attendanceanalysis.service.ForgetClockInService; import com.engine.attendance.attendanceanalysis.service.impl.AbnormalAttendanceServiceImpl; import com.engine.attendance.attendanceanalysis.service.impl.ForgetClockInServiceImpl; import com.engine.attendance.enums.ClassSegmentTypeEnum; import com.engine.attendance.enums.ClockPointEnum; import com.engine.common.util.ServiceUtil; import com.engine.core.impl.Service; import com.google.common.collect.Maps; import weaver.general.Util; import java.util.List; import java.util.Map; import java.util.stream.Collectors; public class UpdateAttendanceResultWrapper extends Service { private AbnormalAttendanceService beLateService = ServiceUtil.getService(AbnormalAttendanceServiceImpl.class); private ForgetClockInService forgetClockInService = ServiceUtil.getService(ForgetClockInServiceImpl.class); /** * 记录异常打卡 * */ public boolean recordAbnormalClockIn(Map params){ //卡点 List>> clcokInTimeList = (List>>)params.get("clcokInTimeList"); //考勤项目 List> attendanceItems = (List>)params.get("attendanceItems"); //排班 List> scheduleResult = (List>)params.get("scheduleResult"); //分析日期 String analysisDate = Util.null2String(params.get("analysisDate")); //人员 String userId = Util.null2String(params.get("userId")); //以开始时间分割班次 Map>> startScheduleResult = scheduleResult.stream().collect(Collectors.groupingBy(e->e.get("dtkssj").toString())); //以结束时间分割班次 Map>> endScheduleResult = scheduleResult.stream().collect(Collectors.groupingBy(e->e.get("dtjssj").toString())); boolean iforgetClockIn = false; boolean ifBeLate = false; boolean ifLeaveEarly = false; for (Map> clcokInTimeMap :clcokInTimeList){ //卡点 String point = ""; //当天打卡数据 Map clcokInTimeData = null; for (Map.Entry> entry :clcokInTimeMap.entrySet()){ point = entry.getKey(); clcokInTimeData = entry.getValue(); } //需要计算的班次打卡时间点 String pointTime = point.split("\\|")[0]; //start:开始打卡时间点,end:结束打卡时间点 String pointType = point.split("\\|")[1]; //empty:漏卡,equal:打卡时间和班次时间相等,before:打卡时间在班次时间之前,after:打卡时间在班次时间之后 String timeType = point.split("\\|")[2]; //班次 Map classInfo = Maps.newHashMap(); if (ClockPointEnum.START.getKey().equals(pointType)){ classInfo = startScheduleResult.get(pointTime.split(" ")[1]).get(0); }else if (ClockPointEnum.END.getKey().equals(pointType)){ classInfo = endScheduleResult.get(pointTime.split(" ")[1]).get(0); } if (ClockPointEnum.EMPTY.getKey().equals(timeType) || clcokInTimeData == null){ //漏卡 Map beLateParams = Maps.newHashMap(); beLateParams.put("classInfo",classInfo); beLateParams.put("clcokInTimeData",clcokInTimeData); beLateParams.put("attendanceItems",attendanceItems); beLateParams.put("analysisDate",analysisDate); beLateParams.put("userId",userId); iforgetClockIn = forgetClockInService.forgetClockIn(beLateParams); }else if (ClockPointEnum.START.getKey().equals(pointType) && ClockPointEnum.AFTER.getKey().equals(timeType)){ //迟到 Map beLateParams = Maps.newHashMap(); beLateParams.put("classInfo",classInfo); beLateParams.put("clcokInTimeData",clcokInTimeData); beLateParams.put("attendanceItems",attendanceItems); beLateParams.put("analysisDate",analysisDate); beLateParams.put("userId",userId); ifBeLate = beLateService.beLate(beLateParams); }else if (ClockPointEnum.END.getKey().equals(pointType) && ClockPointEnum.BEFORE.getKey().equals(timeType)){ //早退 Map leaveEarlyParams = Maps.newHashMap(); leaveEarlyParams.put("classInfo",classInfo); leaveEarlyParams.put("clcokInTimeData",clcokInTimeData); leaveEarlyParams.put("attendanceItems",attendanceItems); leaveEarlyParams.put("analysisDate",analysisDate); leaveEarlyParams.put("userId",userId); ifLeaveEarly = beLateService.leaveEarly(leaveEarlyParams); } } if (iforgetClockIn || ifBeLate ||ifLeaveEarly){ return true; } return false; } public boolean recordWorkOverTime(Map params){ //卡点 List>> clcokInTimeList = (List>>)params.get("clcokInTimeList"); //考勤项目 List> attendanceItems = (List>)params.get("attendanceItems"); //排班 List> scheduleResult = (List>)params.get("scheduleResult"); //分析日期 String analysisDate = Util.null2String(params.get("analysisDate")); //人员 String userId = Util.null2String(params.get("userId")); scheduleResult = scheduleResult.stream().filter(e -> { String bdlx = Util.null2String(e.get("bdlx")); if (ClassSegmentTypeEnum.EXTENDED_OVERTIME.getKey().equals(bdlx) || ClassSegmentTypeEnum.EARLY_OVERTIME.getKey().equals(bdlx) || ClassSegmentTypeEnum.OVERTIME_PLAN.getKey().equals(bdlx)){ return true; }else { return false; } }).collect(Collectors.toList()); return false; } /** * 请假 * @param params * @return */ public boolean recordVaction(Map params){ //卡点 List>> clcokInTimeList = (List>>)params.get("clcokInTimeList"); //请假项目 Map> askForLeaveItems = (Map>)params.get("askForLeaveItems"); //排班 List> scheduleResult = (List>)params.get("scheduleResult"); //分析日期 String analysisDate = Util.null2String(params.get("analysisDate")); //人员 String userId = Util.null2String(params.get("userId")); //请假 List> askForLeaveList = (List>)params.get("askForLeaveList"); for (int i=0;i askForLeaveItem = askForLeaveItems.get(askForLeaveList.get(i).get("jqlx")); } return false; } /** * 外出 * @param params * @return */ public boolean recordAskForLeave(Map params){ //卡点 List>> clcokInTimeList = (List>>)params.get("clcokInTimeList"); //外出项目 Map> evectionItems = (Map>)params.get("evectionItems"); //排班 List> scheduleResult = (List>)params.get("scheduleResult"); //分析日期 String analysisDate = Util.null2String(params.get("analysisDate")); //人员 String userId = Util.null2String(params.get("userId")); return false; } }