package com.engine.jucailinkq.attendance.attendanceanalysis.cmd; import com.engine.common.biz.AbstractCommonCommand; import com.engine.common.entity.BizLogContext; import com.engine.core.interceptor.CommandContext; import com.engine.jucailinkq.common.cmd.GetPersonBySuitOrganzationCmd; import com.engine.jucailinkq.common.util.DateUtil; import com.engine.jucailinkq.common.util.DbTools; import com.engine.jucailinkq.common.util.Utils; import com.google.common.collect.Lists; import com.google.common.collect.Maps; import com.google.common.collect.Sets; import lombok.extern.slf4j.Slf4j; import weaver.general.Util; import java.util.List; import java.util.Map; import java.util.Set; import java.util.stream.Collectors; /** * 获得当前执行日期的考勤周期内需要分析的日期 */ @Slf4j public class GetAttendanceCycleCmd extends AbstractCommonCommand> { public GetAttendanceCycleCmd(Map params){ this.params=params; } @Override public BizLogContext getLogContext() { return null; } @Override public Map execute(CommandContext commandContext) { List> userList = (List>)params.get("userList"); String executeDate = Util.null2String(params.get("executeDate")); String modeId = Utils.getFormmodeIdMap().get("uf_jcl_kq_kqzqmc"); params.put("modeId",modeId); Map userToDateMap = Maps.newHashMap(); Map person = new GetPersonBySuitOrganzationCmd(params).execute(commandContext); Set attendanceCycleSet = Sets.newHashSet(); Set subcompanyids = userList.stream().map(e->e.get("subcompanyid1").toString()).collect(Collectors.toSet()); Map subcompanyToAttendanceCycleMap = Maps.newHashMap(); for (String subcompanyid :subcompanyids){ String attendanceCycle = Utils.getDefaultAttendanceCycle(subcompanyid); subcompanyToAttendanceCycleMap.put(subcompanyid,attendanceCycle); } for (Map userMap : userList){ String id = Util.null2String(userMap.get("id")); String subcompanyid1 =Util.null2String(userMap.get("subcompanyid1")); String attendanceCycle = person.get(id)==null?subcompanyToAttendanceCycleMap.get(subcompanyid1):person.get(id).toString(); if ("".equals(attendanceCycle)){ continue; } userMap.put("attendanceCycle",attendanceCycle); attendanceCycleSet.add(attendanceCycle); } String sql = "select id,mc,ksrq,jsrq from uf_jcl_kq_kqzq where mc in ("+String.join(",",attendanceCycleSet)+") and (gzrq<=? or (ksrq<=? and gzrq>=?)) and zt <> '2'"; List> dataList = DbTools.getSqlToList(sql,executeDate,executeDate,executeDate); List ksrqTojsrqList = dataList.stream().map(e->e.get("ksrq")+"&"+e.get("jsrq")).collect(Collectors.toList()); Map>> ksrqTojsrqMap = Maps.newHashMap(); sql = "select rq,ygid from uf_jcl_kq_cqjg where (cqzt=1 or sjzt=0) and rq>=? and rq<=?"; for (String key:ksrqTojsrqList){ String ksrq = key.split("&")[0]; String jsrq = key.split("&")[1]; ksrqTojsrqMap.put(key,DbTools.getSqlToList(sql,ksrq,jsrq)); } Map>> dataCollect = dataList.stream().collect(Collectors.groupingBy(e->e.get("mc").toString())); for (Map userMap : userList){ Set dateList = Sets.newHashSet(); dateList.add(DateUtil.beforeDay(executeDate,1)); dateList.add(DateUtil.beforeDay(executeDate,2)); String userId = Util.null2String(userMap.get("id")); userToDateMap.put(userId,dateList); String attendanceCycle = Util.null2String(userMap.get("attendanceCycle")); if (attendanceCycle.equals("")){ continue; } List> cycleList = dataCollect.get(attendanceCycle); if (cycleList ==null){ continue; } for (Map cycleMap :cycleList){ String key = cycleMap.get("ksrq")+"&"+cycleMap.get("jsrq"); List attendanceResultList = ksrqTojsrqMap.get(key).stream().filter(e->e.get("ygid").equals(userId)) .map(e->e.get("rq").toString()).collect(Collectors.toList()); dateList.addAll(attendanceResultList); } } log.info("GetAttendanceCycleCmd executeDate : [{}]",executeDate); log.debug("GetAttendanceCycleCmd userToDateMap : [{}]",userToDateMap); return userToDateMap; } }