package com.engine.jucailinkq.attendance.attendanceanalysis.job; import com.engine.jucailinkq.attendance.attendanceanalysis.wrapper.AttendanceAnalysisWrapper; import com.engine.jucailinkq.attendance.attendanceplan.service.AttendancePlanService; import com.engine.jucailinkq.attendance.attendanceplan.service.impl.AttendancePlanServiceImpl; import com.engine.jucailinkq.attendance.workflow.service.AllowanceService; import com.engine.jucailinkq.attendance.workflow.service.impl.AllowanceServiceImpl; import com.engine.common.util.*; import com.engine.jucailinkq.common.util.CommonUtil; import com.engine.jucailinkq.common.util.DateUtil; import com.engine.jucailinkq.common.util.DbTools; import com.google.common.collect.Maps; import lombok.extern.slf4j.Slf4j; import weaver.general.Util; import weaver.interfaces.schedule.BaseCronJob; import java.time.ZoneOffset; import java.util.Comparator; import java.util.List; import java.util.Map; import java.util.stream.Collectors; @Slf4j public class AttendanceAnalysisJob extends BaseCronJob { private AttendancePlanService basicsetService = ServiceUtil.getService(AttendancePlanServiceImpl.class); private AttendanceAnalysisWrapper attendanceAnalysisService = ServiceUtil.getService(AttendanceAnalysisWrapper.class); private AllowanceService allowanceService = ServiceUtil.getService(AllowanceServiceImpl.class); private String executeDate; @Override public void execute() { log.debug("********AttendanceAnalysisJob start********"); String queryUserSql = "select id,departmentid,subcompanyid1 from hrmresource where status <> '5' and status <> '4' and status <> '7'"; List> userList = DbTools.getSqlToList(queryUserSql); String beforeFourDayDate = DateUtil.getCurrentDateMinusDay(4); String nowDate = DateUtil.getCurrentDate(); if (executeDate != null && !"".equals(executeDate)){ nowDate = executeDate; beforeFourDayDate = DateUtil.beforeDay(executeDate,4); } String sql = "select id,userid,signdate,signtime from hrmschedulesign where isincom=1 and signdate >= ? and signdate <= ? order by signdate,signtime"; List> dataList = DbTools.getSqlToList(sql,beforeFourDayDate,nowDate); //补打卡记录 sql = "select id,bdkry userid,dkrq signdate,dksj signtime from uf_jcl_kq_bdkjl where dkrq >= ? and dkrq <= ? and jlzt=1 order by dkrq,dksj"; List> makeUpList = DbTools.getSqlToList(sql,beforeFourDayDate,nowDate); if (makeUpList.size() > 0){ dataList.addAll(makeUpList); } dataList = dataList.stream().sorted(Comparator.comparing(e->DateUtil.getTime(e.get("signdate")+" "+e.get("signtime")).toInstant(ZoneOffset.of("+8")).toEpochMilli())).collect(Collectors.toList()); Map>> collect = dataList.stream().collect(Collectors.groupingBy(e -> Util.null2String(e.get("userid")))); sql = "select sjzt,sgsj,ygid,rq from uf_jcl_kq_cqjg where rq>=? and rq<=?"; List> attendaceResult = DbTools.getSqlToList(sql,DateUtil.beforeDay(nowDate,2),DateUtil.beforeDay(nowDate,1)); Map>> attendaceGroupById = attendaceResult.stream().collect(Collectors.groupingBy(e->e.get("ygid").toString())); //初始化扩展类 CommonUtil.initExtensionClassHolder(); for (Map userMap:userList){ String userId = Util.null2String(userMap.get("id")); //日期对应的打卡数据 Map> clockInTimeMap = Maps.newHashMap(); /**获得人员考勤项目*/ Map paramMap = Maps.newHashMap(); paramMap.put("startDate",beforeFourDayDate); paramMap.put("endDate",nowDate); paramMap.put("resourceId",userId); Map dataMap = basicsetService.getAttendanceItemsByPerson(paramMap); List> attendanceItems = (List>)dataMap.get("data"); /** *获得人员综合工时 */ Map workHourdataMap = basicsetService.getWorkHoursItemByPerson(paramMap); List> workHourItems = (List>)workHourdataMap.get("data"); attendanceAnalysisService.attendanceAnalysis(userId,nowDate,collect.get(userMap.get("id")),attendanceItems,workHourItems,clockInTimeMap,attendaceGroupById.get(userId)); } Map param = Maps.newHashMap(); param.put("startDate",DateUtil.beforeDay(nowDate,1)); param.put("endDate",nowDate); allowanceService.addAllowanceRecords(param); log.debug("********AttendanceAnalysisJob end********"); } }