You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
105 lines
4.7 KiB
Java
105 lines
4.7 KiB
Java
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<Map<String,Object>> {
|
|
|
|
public GetAttendanceCycleCmd(Map<String,Object> params){
|
|
this.params=params;
|
|
}
|
|
|
|
@Override
|
|
public BizLogContext getLogContext() {
|
|
return null;
|
|
}
|
|
|
|
@Override
|
|
public Map<String, Object> execute(CommandContext commandContext) {
|
|
List<Map<String,Object>> userList = (List<Map<String,Object>>)params.get("userList");
|
|
String executeDate = Util.null2String(params.get("executeDate"));
|
|
|
|
String modeId = Utils.getFormmodeIdMap().get("uf_jcl_kq_kqzqmc");
|
|
params.put("modeId",modeId);
|
|
Map<String,Object> userToDateMap = Maps.newHashMap();
|
|
Map<String,Object> person = new GetPersonBySuitOrganzationCmd(params).execute(commandContext);
|
|
Set<String> attendanceCycleSet = Sets.newHashSet();
|
|
Set<String> subcompanyids = userList.stream().map(e->e.get("subcompanyid1").toString()).collect(Collectors.toSet());
|
|
Map<String,String> subcompanyToAttendanceCycleMap = Maps.newHashMap();
|
|
for (String subcompanyid :subcompanyids){
|
|
String attendanceCycle = Utils.getDefaultAttendanceCycle(subcompanyid);
|
|
subcompanyToAttendanceCycleMap.put(subcompanyid,attendanceCycle);
|
|
}
|
|
|
|
for (Map<String,Object> 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<Map<String,Object>> dataList = DbTools.getSqlToList(sql,executeDate,executeDate,executeDate);
|
|
List<String> ksrqTojsrqList = dataList.stream().map(e->e.get("ksrq")+"&"+e.get("jsrq")).collect(Collectors.toList());
|
|
Map<String,List<Map<String,Object>>> 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<String,List<Map<String,Object>>> dataCollect = dataList.stream().collect(Collectors.groupingBy(e->e.get("mc").toString()));
|
|
|
|
|
|
for (Map<String,Object> userMap : userList){
|
|
Set<String> 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<Map<String,Object>> cycleList = dataCollect.get(attendanceCycle);
|
|
if (cycleList ==null){
|
|
continue;
|
|
}
|
|
for (Map<String,Object> cycleMap :cycleList){
|
|
String key = cycleMap.get("ksrq")+"&"+cycleMap.get("jsrq");
|
|
List<String> 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;
|
|
}
|
|
}
|