出勤分析整体性能优化

main
liuliang 5 months ago
parent de6f550356
commit ec483e255d

@ -40,8 +40,12 @@ public class GetAskForLeaveCmd extends AbstractCommonCommand<Map<String,Object>>
String userId = Util.null2String(params.get("userId")); String userId = Util.null2String(params.get("userId"));
String analysisDate = Util.null2String(params.get("analysisDate")); String analysisDate = Util.null2String(params.get("analysisDate"));
List<Map<String, Object>> scheduleResult = (List<Map<String, Object>>)params.get("scheduleResult"); List<Map<String, Object>> scheduleResult = (List<Map<String, Object>>)params.get("scheduleResult");
String sql = "select b.qjry,b.jqlx,b.ksrq,b.kssj,b.jsrq,b.jssj,b.qjsc,b.qtj,b.btj from uf_jcl_kq_qjjl a left join uf_jcl_kq_qjjl_dt1 b on a.id = b.mainid where b.qjry=? and b.ksrq<=? and b.jsrq>=? and (b.cxqj=0 or b.cxqj is null) and a.jlzt=1"; List<Map<String, Object>> attendanceItems = (List<Map<String, Object>>)params.get("attendanceItems");
List<Map<String,Object>> askForLeaveList = DbTools.getSqlToList(sql,userId,DateUtil.AfterDay(analysisDate,1), DateUtil.beforeDay(analysisDate,1)); List<Map<String, Object>> askforList = (List<Map<String, Object>>)params.get("askforList");
//String sql = "select b.qjry,b.jqlx,b.ksrq,b.kssj,b.jsrq,b.jssj,b.qjsc,b.qtj,b.btj from uf_jcl_kq_qjjl a left join uf_jcl_kq_qjjl_dt1 b on a.id = b.mainid where b.qjry=? and b.ksrq<=? and b.jsrq>=? and (b.cxqj=0 or b.cxqj is null) and a.jlzt=1";
// List<Map<String,Object>> askForLeaveList = DbTools.getSqlToList(sql,userId,DateUtil.AfterDay(analysisDate,1), DateUtil.beforeDay(analysisDate,1));
List<Map<String,Object>> askForLeaveList = askforList.stream().filter(e->DateUtil.getTime(e.get("ksrq").toString()).compareTo(DateUtil.getTime(DateUtil.AfterDay(analysisDate,1))) <=0 &&
DateUtil.getTime(e.get("jsrq").toString()).compareTo(DateUtil.getTime(DateUtil.beforeDay(analysisDate,1))) >=0).collect(Collectors.toList());
Map<String,Map<String,Object>> askForLeaveItems = Maps.newHashMap(); Map<String,Map<String,Object>> askForLeaveItems = Maps.newHashMap();
@ -53,7 +57,7 @@ public class GetAskForLeaveCmd extends AbstractCommonCommand<Map<String,Object>>
List<Map<String,Object>> haveAskForLeaveList = askForLeaveList.stream().filter(e->{ List<Map<String,Object>> haveAskForLeaveList = askForLeaveList.stream().filter(e->{
String kssj = e.get("ksrq")+" "+e.get("kssj"); String kssj = e.get("ksrq")+" "+e.get("kssj");
String jssj = e.get("jsrq")+" "+e.get("jssj"); String jssj = e.get("jsrq")+" "+e.get("jssj");
if (e.get("ksrq").equals(analysisDate) && "".equals(Util.null2String(e.get("kssj")))){ if ((DateUtil.getTime(Util.null2String(e.get("ksrq"))).compareTo(DateUtil.getTime(analysisDate)) <= 0) && (DateUtil.getTime(Util.null2String(e.get("jsrq"))).compareTo(DateUtil.getTime(analysisDate)) >= 0) && "".equals(Util.null2String(e.get("kssj")))){
jplxSet.add(e.get("jqlx").toString()); jplxSet.add(e.get("jqlx").toString());
return true; return true;
}else if (!"".equals(Util.null2String(e.get("kssj"))) && DateUtil.getTime(kssj).compareTo(DateUtil.getTime(lastjssj)) <0 && DateUtil.getTime(jssj).compareTo(DateUtil.getTime(firstKssj)) >0 ){ }else if (!"".equals(Util.null2String(e.get("kssj"))) && DateUtil.getTime(kssj).compareTo(DateUtil.getTime(lastjssj)) <0 && DateUtil.getTime(jssj).compareTo(DateUtil.getTime(firstKssj)) >0 ){
@ -76,20 +80,7 @@ public class GetAskForLeaveCmd extends AbstractCommonCommand<Map<String,Object>>
return resultMap; return resultMap;
} }
sql = "select * from uf_jcl_kq_kqxm where id in ("+String.join(",",jplxSet)+")"; List<Map<String,Object>> askForLeaveItemList = attendanceItems.stream().filter(e->jplxSet.contains(e.get("keyid").toString())).collect(Collectors.toList());
List<Map<String,Object>> askForLeaveItemList = DbTools.getSqlToList(sql);
List<String> fatherItems = askForLeaveItemList.stream().filter(e->Util.null2String(e.get("sffzcx")).equals(CheckBoxEnum.CHECKED.getKey())).map(e->e.get("id").toString()).collect(Collectors.toList());
if (fatherItems.size() > 0){
sql = "select id keyid,mc kqxm,a.* from uf_jcl_kq_kqxm a where (xmzt is null or xmzt <> '0') and a.sjxm in ("+String.join(",",fatherItems)+")";
List<Map<String,Object>> sonItemList = DbTools.getSqlToList(sql);
Map<String,List<Map<String,Object>>> sonGroupMap = sonItemList.stream().collect(Collectors.groupingBy(e->e.get("sjxm").toString()));
for (Map<String,Object> attendanceItem :askForLeaveItemList){
if (CheckBoxEnum.CHECKED.getKey().equals(attendanceItem.get("sffzcx"))){
attendanceItem.put("sonItems",sonGroupMap.get(attendanceItem.get("id")));
}
}
}
Map<String,List<Map<String,Object>>> collect = askForLeaveItemList.stream().collect(Collectors.groupingBy(e->e.get("id").toString())); Map<String,List<Map<String,Object>>> collect = askForLeaveItemList.stream().collect(Collectors.groupingBy(e->e.get("id").toString()));

@ -41,7 +41,8 @@ public class GetAttendanceCycleCmd extends AbstractCommonCommand<Map<String,Obje
String modeId = Utils.getFormmodeIdMap().get("uf_jcl_kq_kqzqmc"); String modeId = Utils.getFormmodeIdMap().get("uf_jcl_kq_kqzqmc");
params.put("modeId",modeId); params.put("modeId",modeId);
Map<String,Object> userToDateMap = Maps.newHashMap(); Map<String,Object> userToDateMap = Maps.newHashMap();
Map<String,Object> person = new GetPersonBySuitOrganzationCmd(params).execute(commandContext); Map<String,Object> resultMap = new GetPersonBySuitOrganzationCmd(params).execute(commandContext);
Map<String,Object> person = (Map<String,Object>)resultMap.get("personMap");
Set<String> attendanceCycleSet = Sets.newHashSet(); Set<String> attendanceCycleSet = Sets.newHashSet();
Set<String> subcompanyids = userList.stream().map(e->e.get("subcompanyid1").toString()).collect(Collectors.toSet()); Set<String> subcompanyids = userList.stream().map(e->e.get("subcompanyid1").toString()).collect(Collectors.toSet());
Map<String,String> subcompanyToAttendanceCycleMap = Maps.newHashMap(); Map<String,String> subcompanyToAttendanceCycleMap = Maps.newHashMap();

@ -5,7 +5,6 @@ import com.engine.jucailinkq.attendance.enums.ClassSegmentTypeEnum;
import com.engine.common.biz.AbstractCommonCommand; import com.engine.common.biz.AbstractCommonCommand;
import com.engine.common.entity.BizLogContext; import com.engine.common.entity.BizLogContext;
import com.engine.jucailinkq.common.util.DateUtil; import com.engine.jucailinkq.common.util.DateUtil;
import com.engine.jucailinkq.common.util.DbTools;
import com.engine.jucailinkq.common.util.ExtensionClassHolder; import com.engine.jucailinkq.common.util.ExtensionClassHolder;
import com.engine.jucailinkq.common.util.Utils; import com.engine.jucailinkq.common.util.Utils;
import com.engine.core.interceptor.CommandContext; import com.engine.core.interceptor.CommandContext;
@ -125,16 +124,16 @@ public class GetClockInTimeListCmd extends AbstractCommonCommand<Map<String,Obje
//当最早打卡时间点在前一天时,获取前一天的出勤结果打卡数据 //当最早打卡时间点在前一天时,获取前一天的出勤结果打卡数据
String earliestDate = DateUtil.beforeDay(needGetDate,1); String earliestDate = DateUtil.beforeDay(needGetDate,1);
Map<String,Object> clockIntime = clockInTimeMap.get(earliestDate); Map<String,Object> clockIntime = clockInTimeMap.get(earliestDate);
if (clockIntime == null || clockIntime.size()==0){ // if (clockIntime == null || clockIntime.size()==0){
String sql = "select rq,j1,c1,j2,c2,j3,c3,j4,c4,j5,c5,j6,c6,j7,c7,j8,c8 from uf_jcl_kq_cqjg where ygid=? and rq>=? and rq<=?"; // String sql = "select rq,j1,c1,j2,c2,j3,c3,j4,c4,j5,c5,j6,c6,j7,c7,j8,c8 from uf_jcl_kq_cqjg where ygid=? and rq>=? and rq<=?";
List<Map<String,Object>> attendanceResult = DbTools.getSqlToList(sql,userId,DateUtil.beforeDay(earliestDate,1),earliestDate); // List<Map<String,Object>> attendanceResult = DbTools.getSqlToList(sql,userId,DateUtil.beforeDay(earliestDate,1),earliestDate);
Map<String, List<Map<String,Object>>> attendanceCollect = attendanceResult.stream().collect(Collectors.groupingBy(e->e.get("rq").toString())); // Map<String, List<Map<String,Object>>> attendanceCollect = attendanceResult.stream().collect(Collectors.groupingBy(e->e.get("rq").toString()));
clockIntime = attendanceCollect.get(earliestDate) == null?null:attendanceCollect.get(earliestDate).get(0); // clockIntime = attendanceCollect.get(earliestDate) == null?null:attendanceCollect.get(earliestDate).get(0);
if (clockIntime == null || clockIntime.size()==0){ // if (clockIntime == null || clockIntime.size()==0){
//取不到当天的就再往前取一天 // //取不到当天的就再往前取一天
clockIntime = attendanceCollect.get(DateUtil.beforeDay(earliestDate,1)) == null?null:attendanceCollect.get(DateUtil.beforeDay(earliestDate,1)).get(0); // clockIntime = attendanceCollect.get(DateUtil.beforeDay(earliestDate,1)) == null?null:attendanceCollect.get(DateUtil.beforeDay(earliestDate,1)).get(0);
} // }
} // }
if (clockIntime !=null && clockIntime.size()>0){ if (clockIntime !=null && clockIntime.size()>0){
for (int i=8;i>0;i--){ for (int i=8;i>0;i--){
String in = Util.null2String(clockIntime.get("j"+i)); String in = Util.null2String(clockIntime.get("j"+i));
@ -201,15 +200,19 @@ public class GetClockInTimeListCmd extends AbstractCommonCommand<Map<String,Obje
String userId = Util.null2String(params.get("userId")); String userId = Util.null2String(params.get("userId"));
String earliestTime = date+" 00:00:00"; String earliestTime = date+" 00:00:00";
Map<String,Object> clockIntime = clockInTimeMap.get(date); Map<String,Object> clockIntime = clockInTimeMap.get(date);
if (clockIntime == null || clockIntime.size() == 0){ // if (clockIntime == null || clockIntime.size() == 0){
String sql = "select rq,j1,c1,j2,c2,j3,c3,j4,c4,j5,c5,j6,c6,j7,c7,j8,c8 from uf_jcl_kq_cqjg where ygid=? and rq>=? and rq<=?"; // String sql = "select rq,j1,c1,j2,c2,j3,c3,j4,c4,j5,c5,j6,c6,j7,c7,j8,c8 from uf_jcl_kq_cqjg where ygid=? and rq>=? and rq<=?";
List<Map<String,Object>> attendanceResult = DbTools.getSqlToList(sql,userId,DateUtil.beforeDay(beforeOneDay,1),beforeOneDay); // List<Map<String,Object>> attendanceResult = DbTools.getSqlToList(sql,userId,DateUtil.beforeDay(beforeOneDay,1),beforeOneDay);
Map<String, List<Map<String,Object>>> attendanceCollect = attendanceResult.stream().collect(Collectors.groupingBy(e->e.get("rq").toString())); // Map<String, List<Map<String,Object>>> attendanceCollect = attendanceResult.stream().collect(Collectors.groupingBy(e->e.get("rq").toString()));
clockIntime = attendanceCollect.get(beforeOneDay) == null?null:attendanceCollect.get(beforeOneDay).get(0); // clockIntime = attendanceCollect.get(beforeOneDay) == null?null:attendanceCollect.get(beforeOneDay).get(0);
// if (clockIntime == null || clockIntime.size() == 0){
// //取不到当天的就再往前取一天
// clockIntime = attendanceCollect.get(DateUtil.beforeDay(beforeOneDay,1)) == null?null:attendanceCollect.get(DateUtil.beforeDay(beforeOneDay,1)).get(0);
// }
// }
if (clockIntime == null || clockIntime.size() == 0){ if (clockIntime == null || clockIntime.size() == 0){
//取不到当天的就再往前取一天 //取不到当天的就再往前取一天
clockIntime = attendanceCollect.get(DateUtil.beforeDay(beforeOneDay,1)) == null?null:attendanceCollect.get(DateUtil.beforeDay(beforeOneDay,1)).get(0); clockIntime = clockInTimeMap.get(DateUtil.beforeDay(beforeOneDay,1));
}
} }
if (clockIntime !=null && clockIntime.size()>0){ if (clockIntime !=null && clockIntime.size()>0){
for (int i=8;i>0;i--){ for (int i=8;i>0;i--){

@ -40,9 +40,14 @@ public class GetEvectionCmd extends AbstractCommonCommand<Map<String,Object>> {
String userId = Util.null2String(params.get("userId")); String userId = Util.null2String(params.get("userId"));
String analysisDate = Util.null2String(params.get("analysisDate")); String analysisDate = Util.null2String(params.get("analysisDate"));
List<Map<String, Object>> scheduleResult = (List<Map<String, Object>>)params.get("scheduleResult"); List<Map<String, Object>> scheduleResult = (List<Map<String, Object>>)params.get("scheduleResult");
//String sql = "select b.ccr,a.cclx,a.ccsd,b.ksrq,b.jsrq,b.kssj,b.jssj,b.ccsc,b.qtcc,b.btcc,b.cxcc from uf_jcl_kq_ccjl a left join uf_jcl_kq_ccjl_dt1 b on a.id = b.mainid where b.ccr=? and b.ksrq>=? and b.ksrq<=? and (b.cxcc=0 or b.cxcc is null)"; List<Map<String, Object>> attendanceItems = (List<Map<String, Object>>)params.get("attendanceItems");
String sql = "select b.ccr,b.cclx,b.ksrq,b.jsrq,b.kssj,b.jssj,b.ccsc,b.qtcc,b.btcc,b.cxcc from uf_jcl_kq_ccjl a left join uf_jcl_kq_ccjl_dt1 b on a.id = b.mainid where b.ccr=? and b.ksrq<=? and b.jsrq>=? and (b.cxcc=0 or b.cxcc is null) and a.jlzt=1"; List<Map<String, Object>> evectionList = (List<Map<String, Object>>)params.get("evectionList");
List<Map<String,Object>> evectionList = DbTools.getSqlToList(sql,userId, DateUtil.AfterDay(analysisDate,1), DateUtil.beforeDay(analysisDate,1));
// String sql = "select b.ccr,b.cclx,b.ksrq,b.jsrq,b.kssj,b.jssj,b.ccsc,b.qtcc,b.btcc,b.cxcc from uf_jcl_kq_ccjl a left join uf_jcl_kq_ccjl_dt1 b on a.id = b.mainid where b.ccr=? and b.ksrq<=? and b.jsrq>=? and (b.cxcc=0 or b.cxcc is null) and a.jlzt=1";
//List<Map<String,Object>> evectionList = DbTools.getSqlToList(sql,userId, DateUtil.AfterDay(analysisDate,1), DateUtil.beforeDay(analysisDate,1));
evectionList = evectionList.stream().filter(e->DateUtil.getTime(e.get("ksrq").toString()).compareTo(DateUtil.getTime(DateUtil.AfterDay(analysisDate,1))) <=0 &&
DateUtil.getTime(e.get("jsrq").toString()).compareTo(DateUtil.getTime(DateUtil.beforeDay(analysisDate,1))) >=0).collect(Collectors.toList());
Map<String,Map<String,Object>> evectionItems = Maps.newHashMap(); Map<String,Map<String,Object>> evectionItems = Maps.newHashMap();
@ -54,7 +59,7 @@ public class GetEvectionCmd extends AbstractCommonCommand<Map<String,Object>> {
List<Map<String,Object>> haveEvectionList = evectionList.stream().filter(e->{ List<Map<String,Object>> haveEvectionList = evectionList.stream().filter(e->{
String kssj = e.get("ksrq")+" "+e.get("kssj"); String kssj = e.get("ksrq")+" "+e.get("kssj");
String jssj = e.get("jsrq")+" "+e.get("jssj"); String jssj = e.get("jsrq")+" "+e.get("jssj");
if (e.get("ksrq").equals(analysisDate) && "".equals(Util.null2String(e.get("kssj")))){ if ((DateUtil.getTime(Util.null2String(e.get("ksrq"))).compareTo(DateUtil.getTime(analysisDate)) <= 0) && (DateUtil.getTime(Util.null2String(e.get("jsrq"))).compareTo(DateUtil.getTime(analysisDate)) >= 0) && "".equals(Util.null2String(e.get("kssj")))){
cclxSet.add(e.get("cclx").toString()); cclxSet.add(e.get("cclx").toString());
return true; return true;
}else if (!"".equals(Util.null2String(e.get("kssj"))) && DateUtil.getTime(kssj).compareTo(DateUtil.getTime(lastjssj)) <0 && DateUtil.getTime(jssj).compareTo(DateUtil.getTime(firstKssj)) >0){ }else if (!"".equals(Util.null2String(e.get("kssj"))) && DateUtil.getTime(kssj).compareTo(DateUtil.getTime(lastjssj)) <0 && DateUtil.getTime(jssj).compareTo(DateUtil.getTime(firstKssj)) >0){
@ -74,20 +79,9 @@ public class GetEvectionCmd extends AbstractCommonCommand<Map<String,Object>> {
if (cclxSet.size() == 0){ if (cclxSet.size() == 0){
return resultMap; return resultMap;
} }
sql = "select * from uf_jcl_kq_kqxm where id in ("+String.join(",",cclxSet)+")"; // sql = "select * from uf_jcl_kq_kqxm where id in ("+String.join(",",cclxSet)+")";
List<Map<String,Object>> evectionItemList = DbTools.getSqlToList(sql); List<Map<String,Object>> evectionItemList = attendanceItems.stream().filter(e->cclxSet.contains(e.get("keyid").toString())).collect(Collectors.toList());
List<String> fatherItems = evectionItemList.stream().filter(e->Util.null2String(e.get("sffzcx")).equals(CheckBoxEnum.CHECKED.getKey())).map(e->e.get("id").toString()).collect(Collectors.toList());
if (fatherItems.size() > 0){
sql = "select id keyid,mc kqxm,a.* from uf_jcl_kq_kqxm a where (xmzt is null or xmzt <> '0') and a.sjxm in ("+String.join(",",fatherItems)+")";
List<Map<String,Object>> sonItemList = DbTools.getSqlToList(sql);
Map<String,List<Map<String,Object>>> sonGroupMap = sonItemList.stream().collect(Collectors.groupingBy(e->e.get("sjxm").toString()));
for (Map<String,Object> evectionItem :evectionItemList){
if (CheckBoxEnum.CHECKED.getKey().equals(evectionItem.get("sffzcx"))){
evectionItem.put("sonItems",sonGroupMap.get(evectionItem.get("id")));
}
}
}
Map<String,List<Map<String,Object>>> collect = evectionItemList.stream().collect(Collectors.groupingBy(e->e.get("id").toString())); Map<String,List<Map<String,Object>>> collect = evectionItemList.stream().collect(Collectors.groupingBy(e->e.get("id").toString()));

@ -46,8 +46,12 @@ public class GetScheduleResultListCmd extends AbstractCommonCommand<Map<String,O
@Override @Override
public Map<String, Object> execute(CommandContext commandContext) { public Map<String, Object> execute(CommandContext commandContext) {
/** 班次信息*/ //考勤项目
List<Map<String,Object>> attendanceItems = (List<Map<String,Object>>)params.get("attendanceItems"); List<Map<String,Object>> attendanceItems = (List<Map<String,Object>>)params.get("attendanceItems");
//班次
List<Map<String,Object>> allClassInfoList = (List<Map<String,Object>>)params.get("allClassInfoList");
//加班计划
List<Map<String,Object>> allOverPlanList = (List<Map<String,Object>>)params.get("allOverPlanList");
Map<String,Object> schedulingResultsMap = (Map<String,Object>)params.get("schedulingResultsMap"); Map<String,Object> schedulingResultsMap = (Map<String,Object>)params.get("schedulingResultsMap");
List<Map<String,Object>> schedulingResultsList = (List<Map<String,Object>>)schedulingResultsMap.get("data"); List<Map<String,Object>> schedulingResultsList = (List<Map<String,Object>>)schedulingResultsMap.get("data");
@ -67,18 +71,17 @@ public class GetScheduleResultListCmd extends AbstractCommonCommand<Map<String,O
schedulMap.put("schedulingMapBydate",schedulingMapBydate); schedulMap.put("schedulingMapBydate",schedulingMapBydate);
Map<String,List<Map<String,Object>>> resultMap = Maps.newHashMap(); Map<String,List<Map<String,Object>>> resultMap = Maps.newHashMap();
String sql = "select a.xxbdkzdjb,a.sfxx,a.id bcxx,a.edsc,a.zgzsc,a.bcsdxx,a.sfdx,a.sfkt,b.bdlx,a.btgz,a.fgsjd,a.zddxfz,a.dxhs,b.kssj dtkssj,b.jssj dtjssj,b.ksdk,b.jsdk,b.tqdkfzs,b.thdkfzs,b.edxss,b.edfzs,b.edts,b.sfdx dtsfdx,b.zddxfz dtzddxfz,b.dxhs dtdxhs,b.gsrq from uf_jcl_kq_bcxx a left join uf_jcl_kq_bcxx_dt1 b on a.id=b.mainid where a.id in ("; //String sql = "select a.xxbdkzdjb,a.sfxx,a.id bcxx,a.edsc,a.zgzsc,a.bcsdxx,a.sfdx,a.sfkt,b.bdlx,a.btgz,a.fgsjd,a.zddxfz,a.dxhs,b.kssj dtkssj,b.jssj dtjssj,b.ksdk,b.jsdk,b.tqdkfzs,b.thdkfzs,b.edxss,b.edfzs,b.edts,b.sfdx dtsfdx,b.zddxfz dtzddxfz,b.dxhs dtdxhs,b.gsrq from uf_jcl_kq_bcxx a left join uf_jcl_kq_bcxx_dt1 b on a.id=b.mainid where a.id in (";
String bcxxIds = ""; List<String> bcxxIdList = Lists.newArrayList();
for (Map.Entry<String,List<Map<String,Object>>> entry :schedulingMap.entrySet()){ for (Map.Entry<String,List<Map<String,Object>>> entry :schedulingMap.entrySet()){
if (!entry.getKey().equals("")){ if (!entry.getKey().equals("")){
bcxxIds +=entry.getKey() +","; bcxxIdList.add(entry.getKey());
} }
} }
List<Map<String,Object>> dataList = Lists.newArrayList(); List<Map<String,Object>> dataList = Lists.newArrayList();
if (!"".equals(bcxxIds)){ if (bcxxIdList.size()>0){
bcxxIds = bcxxIds.substring(0,bcxxIds.length()-1);
sql = sql +bcxxIds+") order by b.gsrq,b.kssj"; dataList = allClassInfoList.stream().filter(e->bcxxIdList.contains(e.get("bcxx"))).collect(Collectors.toList());
dataList = DbTools.getSqlToList(sql);
Map<String,List<Map<String,Object>>> dataMap = dataList.stream().collect(Collectors.groupingBy(e->Util.null2String(e.get("bcxx")))); Map<String,List<Map<String,Object>>> dataMap = dataList.stream().collect(Collectors.groupingBy(e->Util.null2String(e.get("bcxx"))));
List<Map<String, Object>> finalAttendanceItems = attendanceItems; List<Map<String, Object>> finalAttendanceItems = attendanceItems;
@ -109,7 +112,7 @@ public class GetScheduleResultListCmd extends AbstractCommonCommand<Map<String,O
*/ */
Map<String,Object> clockInTimeDataMap = Maps.newHashMap(); Map<String,Object> clockInTimeDataMap = Maps.newHashMap();
for (Map<String,Object> candidateSchedulingResult:candidateSchedulingResultsList){ for (Map<String,Object> candidateSchedulingResult:candidateSchedulingResultsList){
Map<String, Object> shiftResult = basicsetService.punchMatchShift(params.get("pbdx").toString(),candidateSchedulingResult,(List<Map<String,Object>>)params.get("clockInData"),(Map<String,Map<String,Object>>)params.get("clockInTimeMap")); Map<String, Object> shiftResult = basicsetService.punchMatchShift(params,candidateSchedulingResult);
List<Map<String,Object>> bcData = (List<Map<String,Object>>)shiftResult.get("bcData"); List<Map<String,Object>> bcData = (List<Map<String,Object>>)shiftResult.get("bcData");
for(Map<String,Object> data:bcData){ for(Map<String,Object> data:bcData){
adjustWorkOverTimeClass(data, attendanceItems,commandContext); adjustWorkOverTimeClass(data, attendanceItems,commandContext);
@ -119,8 +122,8 @@ public class GetScheduleResultListCmd extends AbstractCommonCommand<Map<String,O
} }
/** 加班计划*/ /** 加班计划*/
sql = "select a.id,b.jbry,b.ksrq,b.kssj,b.jblx,b.jsrq,b.jssj,b.jbsc,b.gsrq,b.d_jxgz,b.jxsc from uf_jcl_kq_jbjh a left join uf_jcl_kq_jbjh_dt1 b on a.id=b.mainid where b.jbry =? and b.gsrq>=? and b.gsrq<=? and (b.jbcx=0 or b.jbcx is null) and a.jlzt=1"; Map<String,List<Map<String,Object>>> overtimePlanMap = allOverPlanList.stream().filter(e->DateUtil.getTime("gsrq").compareTo(DateUtil.getTime(params.get("startDate").toString())) >=0 &&
Map<String,List<Map<String,Object>>> overtimePlanMap = DbTools.getSqlToList(sql,params.get("pbdx"),params.get("startDate"),params.get("endDate")).stream().collect(Collectors.groupingBy(e -> Util.null2String(e.get("gsrq")))); DateUtil.getTime("gsrq").compareTo(DateUtil.getTime(params.get("endDate").toString())) <=0).collect(Collectors.groupingBy(e -> Util.null2String(e.get("gsrq"))));
//考勤项目 //考勤项目
for (Map.Entry<String,List<Map<String,Object>>> e: overtimePlanMap.entrySet()){ for (Map.Entry<String,List<Map<String,Object>>> e: overtimePlanMap.entrySet()){
@ -137,9 +140,7 @@ public class GetScheduleResultListCmd extends AbstractCommonCommand<Map<String,O
}else { }else {
map.put("sfkt","0"); map.put("sfkt","0");
} }
//查找对应的考勤项目 List<Map<String,Object>> overPlanattendanceItems = attendanceItems.stream().filter(f->f.get("keyid").equals(overtimePlan.get("jblx"))).collect(Collectors.toList());
String querySql = "select a.id keyid,a.* from uf_jcl_kq_kqxm a where id=?";
List<Map<String,Object>> overPlanattendanceItems = DbTools.getSqlToList(querySql,overtimePlan.get("jblx"));
map.put("bcxx",resultList == null || resultList.size()==0 || resultList.get(0) ==null ? "" :resultList.get(0).get("bcxx")); map.put("bcxx",resultList == null || resultList.size()==0 || resultList.get(0) ==null ? "" :resultList.get(0).get("bcxx"));
@ -220,22 +221,22 @@ public class GetScheduleResultListCmd extends AbstractCommonCommand<Map<String,O
return schedulMap; return schedulMap;
} }
public List<Map<String,Object>> getDate(Map<String,Object> param){ // public List<Map<String,Object>> getDate(Map<String,Object> param){
String userId = params.get("pbdx").toString(); // String userId = params.get("pbdx").toString();
String nd = Util.null2String(param.get("nd")); // String nd = Util.null2String(param.get("nd"));
String glpb = Util.null2String(param.get("glpb")); // String glpb = Util.null2String(param.get("glpb"));
String sql = "select nd,rq,nlrq,rqlx,xq,rlmc from uf_jcl_kq_rlxx a left join uf_jcl_kq_glpb b on a.rlmc=b.qyrl where b.id=? and a.nd=? "; // String sql = "select nd,rq,nlrq,rqlx,xq,rlmc from uf_jcl_kq_rlxx a left join uf_jcl_kq_glpb b on a.rlmc=b.qyrl where b.id=? and a.nd=? ";
List<Map<String,Object>> dataList=null; // List<Map<String,Object>> dataList=null;
if ("".equals(glpb)){ // if ("".equals(glpb)){
sql = "select subcompanyid1 from hrmresource where id =?"; // sql = "select subcompanyid1 from hrmresource where id =?";
Map<String,Object> departMentMap = DbTools.getSqlToMap(sql,userId); // Map<String,Object> departMentMap = DbTools.getSqlToMap(sql,userId);
String subcompanyid1 = departMentMap.get("subcompanyid1").toString(); // String subcompanyid1 = departMentMap.get("subcompanyid1").toString();
dataList = Utils.getDefaultDateList(subcompanyid1,nd); // dataList = Utils.getDefaultDateList(subcompanyid1,nd);
}else { // }else {
dataList = DbTools.getSqlToList(sql,glpb,nd); // dataList = DbTools.getSqlToList(sql,glpb,nd);
} // }
return dataList; // return dataList;
} // }
/** /**
* 1 * 1

@ -175,8 +175,9 @@ public class RecordDataCmd extends AbstractCommonCommand<Map<String,Object>> {
DbTools.update(sql,insertDatas.toArray()); DbTools.update(sql,insertDatas.toArray());
} }
if (overTimeHolidayList.size() > 0 || overTimeResultList.size() >0){
updateWorkOverTimeDate(userId,analysisDate,overTimeHolidayList,overTimeResultList); updateWorkOverTimeDate(userId,analysisDate,overTimeHolidayList,overTimeResultList);
}
return null; return null;
} }
@ -194,23 +195,25 @@ public class RecordDataCmd extends AbstractCommonCommand<Map<String,Object>> {
String id = Util.null2String(dataList.get(0).get("id")); String id = Util.null2String(dataList.get(0).get("id"));
//处理加班结果 //处理加班结果
try {
if (overTimeResultList.size() > 0){
sql = "select id,jblx,lyid from uf_jcl_kq_jbjg where lyid=? and jbjgly=4"; sql = "select id,jblx,lyid from uf_jcl_kq_jbjg where lyid=? and jbjgly=4";
List<Map<String,Object>> oldOverTimeList = DbTools.getSqlToList(sql,id); List<Map<String,Object>> oldOverTimeList = DbTools.getSqlToList(sql,id);
for (Map<String,Object> overTimeResult : overTimeResultList){ for (Map<String,Object> overTimeResult : overTimeResultList){
overTimeResult.put("lyid",id); overTimeResult.put("lyid",id);
} }
try {
updateOverTimeResult(oldOverTimeList,overTimeResultList); updateOverTimeResult(oldOverTimeList,overTimeResultList);
}
//处理假期余额 //处理假期余额
if (overTimeHolidayList.size() > 0){
sql = "select id,jqid,ktsc,yxsc,wxsc,ztsc,zfsc,jxsc,dzkxsc,lyid,lyjblx from uf_jcl_kq_jqye where lyid=? and lylx=4"; sql = "select id,jqid,ktsc,yxsc,wxsc,ztsc,zfsc,jxsc,dzkxsc,lyid,lyjblx from uf_jcl_kq_jqye where lyid=? and lylx=4";
List<Map<String,Object>> oldOverTimeHolidayList = DbTools.getSqlToList(sql,id); List<Map<String,Object>> oldOverTimeHolidayList = DbTools.getSqlToList(sql,id);
for (Map<String,Object> overTimeHoliday : overTimeHolidayList){ for (Map<String,Object> overTimeHoliday : overTimeHolidayList){
overTimeHoliday.put("lyid",id); overTimeHoliday.put("lyid",id);
} }
updateOverTimeHoliday(oldOverTimeHolidayList,overTimeHolidayList); updateOverTimeHoliday(oldOverTimeHolidayList,overTimeHolidayList);
}
}catch (Exception e){ }catch (Exception e){
log.error("updateWorkOverTimeDate error : [{}]",e); log.error("updateWorkOverTimeDate error : [{}]",e);
} }

@ -9,10 +9,14 @@ import com.engine.jucailinkq.attendance.attendanceplan.service.impl.AttendancePl
import com.engine.jucailinkq.attendance.workflow.service.AllowanceService; import com.engine.jucailinkq.attendance.workflow.service.AllowanceService;
import com.engine.jucailinkq.attendance.workflow.service.impl.AllowanceServiceImpl; import com.engine.jucailinkq.attendance.workflow.service.impl.AllowanceServiceImpl;
import com.engine.common.util.*; import com.engine.common.util.*;
import com.engine.jucailinkq.common.cmd.GetPersonBySuitOrganzationCmd;
import com.engine.jucailinkq.common.service.CommonService;
import com.engine.jucailinkq.common.service.impl.CommonServiceImpl;
import com.engine.jucailinkq.common.util.*; import com.engine.jucailinkq.common.util.*;
import com.google.common.collect.Lists; import com.google.common.collect.Lists;
import com.google.common.collect.Maps; import com.google.common.collect.Maps;
import com.google.common.collect.Sets; import com.google.common.collect.Sets;
import com.icbc.api.internal.apache.http.impl.cookie.S;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import weaver.general.Util; import weaver.general.Util;
import weaver.interfaces.schedule.BaseCronJob; import weaver.interfaces.schedule.BaseCronJob;
@ -33,6 +37,7 @@ public class AttendanceAnalysisJob extends BaseCronJob {
private AllowanceService allowanceService = ServiceUtil.getService(AllowanceServiceImpl.class); private AllowanceService allowanceService = ServiceUtil.getService(AllowanceServiceImpl.class);
private UtilService utilService = ServiceUtil.getService(UtilServiceImpl.class); private UtilService utilService = ServiceUtil.getService(UtilServiceImpl.class);
private CommonService commonService = ServiceUtil.getService(CommonServiceImpl.class);
private String executeDate; private String executeDate;
@Override @Override
@ -45,7 +50,7 @@ public class AttendanceAnalysisJob extends BaseCronJob {
// } // }
log.info("********AttendanceAnalysisJob executeDate :[{}]********",useDate); log.info("********AttendanceAnalysisJob executeDate :[{}]********",useDate);
log.info("********AttendanceAnalysisJob prepare start******");
//初始化扩展类 //初始化扩展类
CommonUtil.initExtensionClassHolder(); CommonUtil.initExtensionClassHolder();
//入职离职当天是否需要进行考勤分析。0入职离职当天均分析、1入职离职当天不分析 //入职离职当天是否需要进行考勤分析。0入职离职当天均分析、1入职离职当天不分析
@ -56,6 +61,7 @@ public class AttendanceAnalysisJob extends BaseCronJob {
String queryUserSql = "select id,departmentid,subcompanyid1,companystartdate from hrmresource where status <> '5' and status <> '4' and status <> '7'"; String queryUserSql = "select id,departmentid,subcompanyid1,companystartdate from hrmresource where status <> '5' and status <> '4' and status <> '7'";
List<Map<String,Object>> userList = DbTools.getSqlToList(queryUserSql); List<Map<String,Object>> userList = DbTools.getSqlToList(queryUserSql);
if ("0".equals(leaveAndEntry) || leaveAndEntry.equals("")){ if ("0".equals(leaveAndEntry) || leaveAndEntry.equals("")){
String queryDepartEmployeeSql = "select resourceid ,changedate from HRMSTATUSHISTORY where type_n = 5 and changedate='"+DateUtil.beforeDay(useDate,1)+"'"; String queryDepartEmployeeSql = "select resourceid ,changedate from HRMSTATUSHISTORY where type_n = 5 and changedate='"+DateUtil.beforeDay(useDate,1)+"'";
List<String> departEmployeeList = Lists.newArrayList(DbTools.getSqlToList(queryDepartEmployeeSql).stream().map(e->e.get("resourceid").toString()).collect(Collectors.toSet())); List<String> departEmployeeList = Lists.newArrayList(DbTools.getSqlToList(queryDepartEmployeeSql).stream().map(e->e.get("resourceid").toString()).collect(Collectors.toSet()));
@ -76,7 +82,7 @@ public class AttendanceAnalysisJob extends BaseCronJob {
for (Map.Entry<String, Object> entry : attendanceCycle.entrySet()){ for (Map.Entry<String, Object> entry : attendanceCycle.entrySet()){
Set<String> sets = (Set<String>)entry.getValue(); Set<String> sets = (Set<String>)entry.getValue();
for (String date :sets){ for (String date :sets){
if (DateUtil.getTime(date).compareTo(DateUtil.getTime(DateUtil.beforeDay(useDate,1))) != 0){ if (DateUtil.getTime(date).compareTo(DateUtil.getTime(useDate)) < 0){
allDates.add(date); allDates.add(date);
allDates.add(DateUtil.beforeDay(date,1)); allDates.add(DateUtil.beforeDay(date,1));
allDates.add(DateUtil.AfterDay(date,1)); allDates.add(DateUtil.AfterDay(date,1));
@ -90,7 +96,7 @@ public class AttendanceAnalysisJob extends BaseCronJob {
allDateList = allDateList.stream().sorted(Comparator.comparing(e -> DateUtil.getTime(e).toInstant(ZoneOffset.of("+8")).toEpochMilli())).collect(Collectors.toList()); allDateList = allDateList.stream().sorted(Comparator.comparing(e -> DateUtil.getTime(e).toInstant(ZoneOffset.of("+8")).toEpochMilli())).collect(Collectors.toList());
allDateList = allDateList.stream().map(e->"'"+e+"'").collect(Collectors.toList()); allDateList = allDateList.stream().map(e->"'"+e+"'").collect(Collectors.toList());
log.info("all need excute date : [{}]",allDateList);
List<List<String>> needAnalysisDateList = Lists.partition(allDateList,200); List<List<String>> needAnalysisDateList = Lists.partition(allDateList,200);
List<Map<String,Object>> dataList = Lists.newArrayList(); List<Map<String,Object>> dataList = Lists.newArrayList();
List<Map<String,Object>> attendaceResult = Lists.newArrayList(); List<Map<String,Object>> attendaceResult = Lists.newArrayList();
@ -109,7 +115,7 @@ public class AttendanceAnalysisJob extends BaseCronJob {
dataList.addAll(makeUpList); dataList.addAll(makeUpList);
} }
sql = "select sjzt,sgsj,ygid,rq from uf_jcl_kq_cqjg where rq in ("+dateStrs+")"; sql = "select sjzt,sgsj,ygid,rq,j1,c1,j2,c2,j3,c3,j4,c4,j5,c5,j6,c6,j7,c7,j8,c8 from uf_jcl_kq_cqjg where rq in ("+dateStrs+")";
List<Map<String,Object>> resultList = DbTools.getSqlToList(sql); List<Map<String,Object>> resultList = DbTools.getSqlToList(sql);
if (resultList.size() > 0){ if (resultList.size() > 0){
attendaceResult.addAll(resultList); attendaceResult.addAll(resultList);
@ -122,10 +128,68 @@ public class AttendanceAnalysisJob extends BaseCronJob {
Map<String,List<Map<String,Object>>> attendaceGroupById = attendaceResult.stream().collect(Collectors.groupingBy(e->e.get("ygid").toString())); Map<String,List<Map<String,Object>>> attendaceGroupById = attendaceResult.stream().collect(Collectors.groupingBy(e->e.get("ygid").toString()));
/**考勤项目*/
Map<String,Object> params = Maps.newHashMap();
String modeId = Utils.getFormmodeIdMap().get("uf_jcl_kq_kqfa");
params.put("modeId",modeId);
Map<String,Object> resultMap = commonService.getPersonBySuitOrganzation(params);
Map<String,Object> attendacnePlanItems = basicsetService.getAttendanceItemsGroupByAttendancePlanDataCmd();
//人员所拥有的所有考勤方案
Map<String,List<Map<String,String>>> personAttendancePlan = (Map<String,List<Map<String,String>>>)resultMap.get("personAllData");
//通用考勤项目
List<Map<String,Object>> generalAttendanceItems = (List<Map<String,Object>>)attendacnePlanItems.get("generalAttendanceItems");
//考勤方案对应所属的考勤项目
Map<String,List<Map<String,Object>>> attendanceItemGroupByPlan = (Map<String,List<Map<String,Object>>>)attendacnePlanItems.get("attendanceItemGroupByPlan");
/**综合工时*/
modeId = Utils.getFormmodeIdMap().get("uf_jcl_kq_zhgs");
params.put("modeId",modeId);
Map<String,Object> workingHourResultMap = commonService.getPersonBySuitOrganzation(params);
//人员所拥有的所有综合工时
Map<String,List<Map<String,String>>> personComprehensiveWorkingHours = (Map<String,List<Map<String,String>>>)workingHourResultMap.get("personAllData");
String sql = "select * from uf_jcl_kq_zhgs";
List<Map<String,Object>> resultList = DbTools.getSqlToList(sql);
//所有综合工时
Map<String,List<Map<String,Object>>> workingHourGroupBy = resultList.stream().collect(Collectors.groupingBy(e->e.get("id").toString()));
/**排班结果*/
List<Map<String,Object>> allScheduleList = Lists.newArrayList();
/**加班计划*/
List<Map<String,Object>> allOverPlanList = Lists.newArrayList();
for (List<String> list:needAnalysisDateList) {
String dateStrs = String.join(",", list);
sql = "select a.id as keyid,a.* from uf_pbjg a where bcrq in ("+dateStrs+") order by bcrq";
List<Map<String,Object>> list1 = DbTools.getSqlToList(sql);
if (list1.size() > 0){
allScheduleList.addAll(list1);
}
sql = "select a.id,b.jbry,b.ksrq,b.kssj,b.jblx,b.jsrq,b.jssj,b.jbsc,b.gsrq,b.d_jxgz,b.jxsc from uf_jcl_kq_jbjh a left join uf_jcl_kq_jbjh_dt1 b on a.id=b.mainid where b.gsrq in ("+dateStrs+") and (b.jbcx=0 or b.jbcx is null) and a.jlzt=1";
List<Map<String,Object>> list2 = DbTools.getSqlToList(sql);
if (list2.size() > 0){
allOverPlanList.addAll(list2);
}
}
Map<String,List<Map<String,Object>>> allOverPlanGroup = allOverPlanList.stream().collect(Collectors.groupingBy(e->e.get("jbry").toString()));
/**班次信息*/
sql = "select a.xxbdkzdjb,a.sfxx,a.id bcxx,a.edsc,a.zgzsc,a.bcsdxx,a.sfdx,a.sfkt,b.bdlx,a.btgz,a.fgsjd,a.zddxfz,a.dxhs,b.kssj dtkssj,b.jssj dtjssj,b.ksdk,b.jsdk,b.tqdkfzs,b.thdkfzs,b.edxss,b.edfzs,b.edts,b.sfdx dtsfdx,b.zddxfz dtzddxfz,b.dxhs dtdxhs,b.gsrq from uf_jcl_kq_bcxx a left join uf_jcl_kq_bcxx_dt1 b on a.id=b.mainid";
List<Map<String,Object>> allClassInfoList = DbTools.getSqlToList(sql);
/**出差信息*/
String querEvectionsql = "select b.ccr,b.cclx,b.ksrq,b.jsrq,b.kssj,b.jssj,b.ccsc,b.qtcc,b.btcc,b.cxcc from uf_jcl_kq_ccjl a left join uf_jcl_kq_ccjl_dt1 b on a.id = b.mainid where b.ksrq<="+allDateList.get(allDateList.size()-1)+" and b.jsrq>="+allDateList.get(0)+" and (b.cxcc=0 or b.cxcc is null) and a.jlzt=1";
Map<String,List<Map<String,Object>>> evectionGroup = DbTools.getSqlToList(querEvectionsql).stream().collect(Collectors.groupingBy(e->e.get("ccr").toString()));
/**请假信息*/
String queryAskForsql = "select b.qjry,b.jqlx,b.ksrq,b.kssj,b.jsrq,b.jssj,b.qjsc,b.qtj,b.btj from uf_jcl_kq_qjjl a left join uf_jcl_kq_qjjl_dt1 b on a.id = b.mainid where b.ksrq<="+allDateList.get(allDateList.size()-1)+" and b.jsrq>="+allDateList.get(0)+" and (b.cxqj=0 or b.cxqj is null) and a.jlzt=1";
Map<String,List<Map<String,Object>>> askforGroup = DbTools.getSqlToList(queryAskForsql).stream().collect(Collectors.groupingBy(e->e.get("qjry").toString()));
/**候选班组*/
String queryHxbz = "select * from uf_jcl_kq_hxbz_dt1";
List<Map<String,Object>> hxbzList = DbTools.getSqlToList(queryHxbz);
log.info("********AttendanceAnalysisJob prepare end******");
for (Map<String,Object> userMap:userList){ for (Map<String,Object> userMap:userList){
Map<String,Object> analysisParam = Maps.newHashMap();
String userId = Util.null2String(userMap.get("id")); String userId = Util.null2String(userMap.get("id"));
//入职日期 //入职日期
String companystartDate = Util.null2String(userMap.get("companystartdate")); String companystartDate = Util.null2String(userMap.get("companystartdate"));
@ -134,25 +198,53 @@ public class AttendanceAnalysisJob extends BaseCronJob {
analysisDateList = analysisDateList.stream().filter(e->"".equals(companystartDate) || DateUtil.getTime(e).compareTo(DateUtil.getTime(companystartDate)) >=0).sorted(Comparator.comparing(e -> DateUtil.getTime(e).toInstant(ZoneOffset.of("+8")).toEpochMilli())).collect(Collectors.toList()); analysisDateList = analysisDateList.stream().filter(e->"".equals(companystartDate) || DateUtil.getTime(e).compareTo(DateUtil.getTime(companystartDate)) >=0).sorted(Comparator.comparing(e -> DateUtil.getTime(e).toInstant(ZoneOffset.of("+8")).toEpochMilli())).collect(Collectors.toList());
//日期对应的打卡数据 //日期对应的打卡数据
Map<String,Map<String,Object>> clockInTimeMap = Maps.newHashMap(); Map<String,Map<String,Object>> clockInTimeMap = Maps.newHashMap();
/**获得人员考勤项目*/
Map<String,Object> paramMap = Maps.newHashMap(); Map<String,Object> paramMap = Maps.newHashMap();
paramMap.put("startDate",DateUtil.beforeDay(useDate,1)); paramMap.put("startDate",DateUtil.beforeDay(useDate,1));
paramMap.put("endDate",DateUtil.beforeDay(useDate,1)); paramMap.put("endDate",DateUtil.beforeDay(useDate,1));
paramMap.put("resourceId",userId); paramMap.put("resourceId",userId);
Map<String,Object> dataMap = basicsetService.getAttendanceItemsByPerson(paramMap);
List<Map<String,Object>> attendanceItems = (List<Map<String,Object>>)dataMap.get("data"); List<Map<String,String>> attendancePlanList = personAttendancePlan.get(userId)==null?Lists.newArrayList():personAttendancePlan.get(userId);
/**
* List<Map<String, Object>> attendanceItems =Lists.newArrayList();
*/ for (Map<String,String> attendancePlan :attendancePlanList){
Map<String,Object> workHourdataMap = basicsetService.getWorkHoursItemByPerson(paramMap); if (attendanceItemGroupByPlan.get(attendancePlan.get("dataid")) != null &&
List<Map<String,Object>> workHourItems = (List<Map<String,Object>>)workHourdataMap.get("data"); attendanceItemGroupByPlan.get(attendancePlan.get("dataid")).size()>0){
attendanceItems.addAll(attendanceItemGroupByPlan.get(attendancePlan.get("dataid")));
}
}
attendanceItems.addAll(generalAttendanceItems);
analysisParam.put("generalAttendanceItems",generalAttendanceItems);
analysisParam.put("attendancePlanList",attendancePlanList);
analysisParam.put("attendanceItemGroupByPlan",attendanceItemGroupByPlan);
analysisParam.put("comprehensiveWorkingHourList",personComprehensiveWorkingHours.get(userId)==null?Lists.newArrayList():personComprehensiveWorkingHours.get(userId));
analysisParam.put("workingHourGroupBy",workingHourGroupBy);
analysisParam.put("allScheduleList",allScheduleList);
analysisParam.put("allClassInfoList",allClassInfoList);
analysisParam.put("allOverPlanList",allOverPlanGroup.get(userId)==null?Lists.newArrayList():allOverPlanGroup.get(userId));
List<Map<String,Object>> evectionList = evectionGroup.get(userId) == null?Lists.newArrayList():evectionGroup.get(userId);
String minAnalysisDate = analysisDateList.get(0);
String maxAnalysisDate = analysisDateList.get(analysisDateList.size()-1);
evectionList = evectionList.stream().filter(e->DateUtil.getTime(e.get("ksrq").toString()).compareTo(DateUtil.getTime(maxAnalysisDate)) <=0 &&
DateUtil.getTime(e.get("jsrq").toString()).compareTo(DateUtil.getTime(minAnalysisDate)) >=0).collect(Collectors.toList());
List<Map<String,Object>> askforList = askforGroup.get(userId) == null?Lists.newArrayList():askforGroup.get(userId);
askforList = askforList.stream().filter(e->DateUtil.getTime(e.get("ksrq").toString()).compareTo(DateUtil.getTime(maxAnalysisDate)) <=0 &&
DateUtil.getTime(e.get("jsrq").toString()).compareTo(DateUtil.getTime(minAnalysisDate)) >=0).collect(Collectors.toList());
analysisParam.put("evectionList",evectionList);
analysisParam.put("askforList",askforList);
analysisParam.put("hxbzList",hxbzList);
Map<String, List<Map<String, Object>>> attendaceResultMap = Maps.newHashMap(); Map<String, List<Map<String, Object>>> attendaceResultMap = Maps.newHashMap();
List<Map<String, Object>> attendaceResultByUser = attendaceGroupById.get(userId); List<Map<String, Object>> attendaceResultByUser = attendaceGroupById.get(userId);
if (attendaceResultByUser != null && attendaceResultByUser.size() > 0) { if (attendaceResultByUser != null && attendaceResultByUser.size() > 0) {
attendaceResultMap = attendaceResultByUser.stream().collect(Collectors.groupingBy(e -> e.get("rq").toString())); attendaceResultMap = attendaceResultByUser.stream().collect(Collectors.groupingBy(e -> e.get("rq").toString()));
for (Map<String, Object> map: attendaceResultByUser){
clockInTimeMap.put(map.get("rq").toString(),map);
} }
attendanceAnalysisService.attendanceAnalysis(userId,analysisDateList,collect.get(userMap.get("id")),attendanceItems,workHourItems,clockInTimeMap,attendaceResultMap); }
attendanceAnalysisService.attendanceAnalysis(userId,analysisDateList,collect.get(userMap.get("id")),analysisParam,clockInTimeMap,attendaceResultMap);
}catch (Exception e){ }catch (Exception e){
log.error("AttendanceAnalysisJob userId:[{}],analysisDateList: [{}]",userId,analysisDateList); log.error("AttendanceAnalysisJob userId:[{}],analysisDateList: [{}]",userId,analysisDateList);
log.error("AttendanceAnalysisJob error : [{}]",e); log.error("AttendanceAnalysisJob error : [{}]",e);
@ -161,6 +253,8 @@ public class AttendanceAnalysisJob extends BaseCronJob {
Map<String,Object> param = Maps.newHashMap(); Map<String,Object> param = Maps.newHashMap();
param.put("startDate",DateUtil.beforeDay(useDate,3)); param.put("startDate",DateUtil.beforeDay(useDate,3));
param.put("endDate",useDate); param.put("endDate",useDate);
log.info("********AttendanceAnalysisJob analysis end********");
log.info("********AttendanceAnalysisJob allowance start********");
allowanceService.addAllowanceRecords(param); allowanceService.addAllowanceRecords(param);
log.info("********AttendanceAnalysisJob end********"); log.info("********AttendanceAnalysisJob end********");
} }

@ -7,10 +7,9 @@ public interface ShiftService {
/** /**
* *
* @param empId * @param params
* @param pbData * @param pbData
* @param clockInData
* @return * @return
*/ */
Map<String, Object> punchMatchShift(String empId, Map<String,Object> pbData, List<Map<String, Object>> clockInData,Map<String,Map<String,Object>> clockInTimeMap); Map<String, Object> punchMatchShift(Map<String,Object> params, Map<String,Object> pbData);
} }

@ -16,6 +16,7 @@ public interface UtilService {
*/ */
Map<String, Object> getSchedulingInFormation(Map<String,Object> params); Map<String, Object> getSchedulingInFormation(Map<String,Object> params);
Map<String, List<Map<String, Object>>> getScheduleInfoWithEmpId(List<String> empIdList, String startDate, String endDate); Map<String, List<Map<String, Object>>> getScheduleInfoWithEmpId(List<String> empIdList, String startDate, String endDate);
String getRqlxInScheduleInfo(String empId,String date); String getRqlxInScheduleInfo(String empId,String date);

@ -4,14 +4,11 @@ import com.engine.jucailinkq.attendance.attendanceanalysis.dto.clockpoint.ClockP
import com.engine.jucailinkq.attendance.attendanceanalysis.service.ShiftService; import com.engine.jucailinkq.attendance.attendanceanalysis.service.ShiftService;
import com.engine.jucailinkq.attendance.attendanceanalysis.service.UtilService; import com.engine.jucailinkq.attendance.attendanceanalysis.service.UtilService;
import com.engine.jucailinkq.attendance.attendanceanalysis.wrapper.UpdateAttendanceResultWrapper; import com.engine.jucailinkq.attendance.attendanceanalysis.wrapper.UpdateAttendanceResultWrapper;
import com.engine.jucailinkq.attendance.attendanceplan.service.AttendancePlanService;
import com.engine.jucailinkq.attendance.attendanceplan.service.impl.AttendancePlanServiceImpl;
import com.engine.jucailinkq.attendance.enums.CheckBoxEnum; import com.engine.jucailinkq.attendance.enums.CheckBoxEnum;
import com.engine.jucailinkq.attendance.enums.ClassBelongToEnum; import com.engine.jucailinkq.attendance.enums.ClassBelongToEnum;
import com.engine.jucailinkq.attendance.enums.ClassSegmentTypeEnum; import com.engine.jucailinkq.attendance.enums.ClassSegmentTypeEnum;
import com.engine.jucailinkq.attendance.enums.ClockPointEnum; import com.engine.jucailinkq.attendance.enums.ClockPointEnum;
import com.engine.jucailinkq.common.util.DateUtil; import com.engine.jucailinkq.common.util.DateUtil;
import com.engine.jucailinkq.common.util.DbTools;
import com.engine.common.util.ServiceUtil; import com.engine.common.util.ServiceUtil;
import com.engine.jucailinkq.common.util.ExtensionClassHolder; import com.engine.jucailinkq.common.util.ExtensionClassHolder;
import com.engine.jucailinkq.common.util.Utils; import com.engine.jucailinkq.common.util.Utils;
@ -20,10 +17,6 @@ import com.google.common.collect.Lists;
import com.google.common.collect.Maps; import com.google.common.collect.Maps;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import weaver.general.Util; import weaver.general.Util;
import java.math.BigDecimal;
import java.math.MathContext;
import java.math.RoundingMode;
import java.time.ZoneOffset; import java.time.ZoneOffset;
import java.util.*; import java.util.*;
import java.util.stream.Collectors; import java.util.stream.Collectors;
@ -35,40 +28,48 @@ import java.util.stream.Collectors;
**/ **/
@Slf4j @Slf4j
public class ShiftServiceImpl extends Service implements ShiftService { public class ShiftServiceImpl extends Service implements ShiftService {
private AttendancePlanService basicsetService = ServiceUtil.getService(AttendancePlanServiceImpl.class);
private UtilService utilService = ServiceUtil.getService(UtilServiceImpl.class); private UtilService utilService = ServiceUtil.getService(UtilServiceImpl.class);
private UpdateAttendanceResultWrapper updateAttendanceResultWrapper = ServiceUtil.getService(UpdateAttendanceResultWrapper.class); private UpdateAttendanceResultWrapper updateAttendanceResultWrapper = ServiceUtil.getService(UpdateAttendanceResultWrapper.class);
/** /**
* id * id
* @param empId id
* @param pbData * @param pbData
* @param clockInData 23 * @param params
* @return * @return
*/ */
@Override @Override
public Map<String, Object> punchMatchShift(String empId, Map<String,Object> pbData, List<Map<String, Object>> clockInData,Map<String,Map<String,Object>> clockInTimeMap) { public Map<String, Object> punchMatchShift(Map<String,Object> params, Map<String,Object> pbData) {
//查询排班结果 //查询排班结果
// String pbSql = "select * from uf_pbjg where id = " + schedulingResultId; // String pbSql = "select * from uf_pbjg where id = " + schedulingResultId;
// Map<String, Object> pbData = DbTools.getSqlToMap(pbSql); // Map<String, Object> pbData = DbTools.getSqlToMap(pbSql);
String empId = params.get("pbdx").toString();
String shiftTeamId = Util.null2String(pbData.get("hxbz")).split("-")[0]; String shiftTeamId = Util.null2String(pbData.get("hxbz")).split("-")[0];
String punchDate = Util.null2String(pbData.get("bcrq")); String punchDate = Util.null2String(pbData.get("bcrq"));
List<Map<String,Object>> hxbzList = (List<Map<String,Object>>)params.get("hxbzList");
Map<String, List<Map<String, Object>>> attendaceResultMap = (Map<String, List<Map<String, Object>>>)params.get("attendaceResultMap");
Map<String, Object> result = null; Map<String, Object> result = null;
Map<String, Object> maxPriorityResult = null; Map<String, Object> maxPriorityResult = null;
if (!shiftTeamId.equals("")) { if (!shiftTeamId.equals("")) {
//候选班次 //候选班次
String bcSql = "select * from uf_jcl_kq_hxbz_dt1 where mainid = " + shiftTeamId; // String bcSql = "select * from uf_jcl_kq_hxbz_dt1 where mainid = " + shiftTeamId;
List<Map<String, Object>> bcData = DbTools.getSqlToList(bcSql); List<Map<String, Object>> bcData = hxbzList.stream().filter(e->shiftTeamId.equals(e.get("mainid"))).collect(Collectors.toList());
if (bcData.size() > 0) { if (bcData.size() > 0) {
log.info("compute waitCompareResultList start");
List<Map<String, Object>> waitCompareResultList = new ArrayList<>(); List<Map<String, Object>> waitCompareResultList = new ArrayList<>();
//循环匹配,输出匹配结果 //循环匹配,输出匹配结果
for (Map<String, Object> bcMap : bcData) { for (Map<String, Object> bcMap : bcData) {
//获取班次要求打卡数据和请假、出差、加班数据处理后的卡点数据 //获取班次要求打卡数据和请假、出差、加班数据处理后的卡点数据
Map<String, Object> waitCompareMap = dealClockInData(empId, pbData, clockInData, bcMap.get("bcxx").toString(), clockInTimeMap); Map<String, Object> waitCompareMap = dealClockInData(empId, pbData,bcMap.get("bcxx").toString(),params);
waitCompareMap.put("priorityValue", Util.null2String(bcMap.get("yxj"))); waitCompareMap.put("priorityValue", Util.null2String(bcMap.get("yxj")));
waitCompareResultList.add(waitCompareMap); waitCompareResultList.add(waitCompareMap);
} }
log.info("compute waitCompareResultList end");
//比较匹配结果 //比较匹配结果
log.info("compareMap start");
for (Map<String, Object> compareMap : waitCompareResultList) { for (Map<String, Object> compareMap : waitCompareResultList) {
//分析每组数据生成对应的ABCDE //分析每组数据生成对应的ABCDE
compareMap = countMatchItem(compareMap); compareMap = countMatchItem(compareMap);
@ -116,11 +117,13 @@ public class ShiftServiceImpl extends Service implements ShiftService {
result = resultE.compareTo(compareE) > 0 ? compareMap : result; result = resultE.compareTo(compareE) > 0 ? compareMap : result;
} }
} }
log.info("compareMap end");
//全天没有打卡时,看上一个工作日的班次为优先,如果前一个工作日也没有班次,按优先级 //全天没有打卡时,看上一个工作日的班次为优先,如果前一个工作日也没有班次,按优先级
log.info("maxPriorityResult start");
if (result == null) { if (result == null) {
//获取上一个工作日的班次 //获取上一个工作日的班次
String lastWorkDayInfoSql = "select * from uf_jcl_kq_cqjg where rqlx = 0 and ygid = " + empId + " and rq < '" + punchDate + "' order by rq desc limit 1;"; // String lastWorkDayInfoSql = "select * from uf_jcl_kq_cqjg where rqlx = 0 and ygid = " + empId + " and rq < '" + punchDate + "' order by rq desc limit 1;";
Map<String, Object> lastWorkDayInfo = DbTools.getSqlToMap(lastWorkDayInfoSql); Map<String, Object> lastWorkDayInfo = attendaceResultMap.get(DateUtil.beforeDay(punchDate,1)).get(0);
String bcId = Util.null2String(lastWorkDayInfo.get("bc")); String bcId = Util.null2String(lastWorkDayInfo.get("bc"));
List<Map<String, Object>> bcInfo = waitCompareResultList.stream().filter(f ->f.get("bcId").toString().equals(bcId)).collect(Collectors.toList()); List<Map<String, Object>> bcInfo = waitCompareResultList.stream().filter(f ->f.get("bcId").toString().equals(bcId)).collect(Collectors.toList());
if (!bcId.equals("") && bcInfo.size() > 0) { if (!bcId.equals("") && bcInfo.size() > 0) {
@ -131,6 +134,7 @@ public class ShiftServiceImpl extends Service implements ShiftService {
result = maxPriorityResult; result = maxPriorityResult;
} }
} }
log.info("maxPriorityResult end");
} }
} }
@ -225,30 +229,28 @@ public class ShiftServiceImpl extends Service implements ShiftService {
/** /**
* *
* @param empId * @param empId
* @param clockInData 23
* @return * @return
*/ */
private Map<String, Object> dealClockInData(String empId, Map<String, Object> pbData, List<Map<String, Object>> clockInData, String shiftId,Map<String,Map<String,Object>> clockInTimeMap) { private Map<String, Object> dealClockInData(String empId, Map<String, Object> pbData, String shiftId,Map<String, Object> params) {
Map<String, Object> clockInDataMatchInfo = new HashMap<>(); Map<String, Object> clockInDataMatchInfo = new HashMap<>();
List<Map<String, Object>> clockInData = (List<Map<String,Object>>)params.get("clockInData");
Map<String,Map<String,Object>> clockInTimeMap = (Map<String,Map<String,Object>>)params.get("clockInTimeMap");
List<Map<String,Object>> attendanceItems = (List<Map<String,Object>>)params.get("attendanceItems");
String punchDate = Util.null2String(pbData.get("bcrq")); String punchDate = Util.null2String(pbData.get("bcrq"));
String startBeforeDate = DateUtil.beforeDay(punchDate,2);
String endAfterDate = DateUtil.AfterDay(punchDate,2);
//获取考勤项目
Map<String,Object> param = Maps.newHashMap();
param.put("startDate",startBeforeDate);
param.put("endDate",endAfterDate);
param.put("resourceId",empId);
Map<String,Object> dataMap = basicsetService.getAttendanceItemsByPerson(param);
List<Map<String,Object>> attendanceItems = (List<Map<String,Object>>)dataMap.get("data");
//1-组装班次数据 //1-组装班次数据
Map<String,List<Map<String,Object>>> schedulingResultsMap = getShiftData(empId, pbData, shiftId); Map<String,List<Map<String,Object>>> schedulingResultsMap = getShiftData(empId, pbData, shiftId,params);
List<Map<String,Object>> shiftData = schedulingResultsMap.get(punchDate); List<Map<String,Object>> shiftData = schedulingResultsMap.get(punchDate);
//2-拿到当天打卡数据 //2-拿到当天打卡数据
Map<String, List<Map<String,Object>>> collect = Maps.newHashMap(); Map<String, List<Map<String,Object>>> collect = Maps.newHashMap();
if (clockInData != null && clockInData.size() >0){ if (clockInData != null && clockInData.size() >0){
collect = clockInData.stream().collect(Collectors.groupingBy(e -> Util.null2String(e.get("signdate")))); collect = clockInData.stream().collect(Collectors.groupingBy(e -> Util.null2String(e.get("signdate"))));
} }
// Map<String,Map<String,Object>> clockInTimeMap = Maps.newHashMap(); //
Map<String,Object> getClockTimeParam = Maps.newHashMap(); Map<String,Object> getClockTimeParam = Maps.newHashMap();
getClockTimeParam.put("date",punchDate); getClockTimeParam.put("date",punchDate);
@ -267,6 +269,8 @@ public class ShiftServiceImpl extends Service implements ShiftService {
workingHourparam.put("userId",empId); workingHourparam.put("userId",empId);
workingHourparam.put("attendanceItems",attendanceItems); workingHourparam.put("attendanceItems",attendanceItems);
workingHourparam.put("scheduleResult",shiftData); workingHourparam.put("scheduleResult",shiftData);
workingHourparam.put("evectionList",params.get("evectionList"));
workingHourparam.put("askforList",params.get("askforList"));
Map<String,Object> evectionDataMap = updateAttendanceResultWrapper.getEvection(workingHourparam); Map<String,Object> evectionDataMap = updateAttendanceResultWrapper.getEvection(workingHourparam);
Map<String,Object> askForLeaveDataMap = updateAttendanceResultWrapper.getAskForLeave(workingHourparam); Map<String,Object> askForLeaveDataMap = updateAttendanceResultWrapper.getAskForLeave(workingHourparam);
//4-调用考勤分析中的卡点数据处理方法 //4-调用考勤分析中的卡点数据处理方法
@ -299,7 +303,7 @@ public class ShiftServiceImpl extends Service implements ShiftService {
* @param empId * @param empId
* @return * @return
*/ */
private Map<String,List<Map<String,Object>>> getShiftData(String empId, Map<String, Object> pbData, String shiftId) { private Map<String,List<Map<String,Object>>> getShiftData(String empId, Map<String, Object> pbData, String shiftId,Map<String, Object> params) {
String punchDate = Util.null2String(pbData.get("bcrq")); String punchDate = Util.null2String(pbData.get("bcrq"));
String schedulingRule = Util.null2String(pbData.get("pbgl")); String schedulingRule = Util.null2String(pbData.get("pbgl"));
@ -312,8 +316,8 @@ public class ShiftServiceImpl extends Service implements ShiftService {
/** 获取人员班次*/ /** 获取人员班次*/
Map<String,Object> classesParamMap = Maps.newHashMap(); Map<String,Object> classesParamMap = Maps.newHashMap();
classesParamMap.put("tableName","uf_pbjg"); classesParamMap.put("tableName","uf_pbjg");
classesParamMap.put("startDate",startBeforeDate); classesParamMap.put("startDate",punchDate);
classesParamMap.put("endDate",endAfterDate); classesParamMap.put("endDate",punchDate);
classesParamMap.put("pblx","0"); classesParamMap.put("pblx","0");
classesParamMap.put("pbdx",empId); classesParamMap.put("pbdx",empId);
classesParamMap.put("current","1"); classesParamMap.put("current","1");
@ -325,25 +329,31 @@ public class ShiftServiceImpl extends Service implements ShiftService {
classesParamMap.put("dateType",dateType); classesParamMap.put("dateType",dateType);
classesParamMap.put("restSign",restSign); classesParamMap.put("restSign",restSign);
classesParamMap.put("shiftId",shiftId); classesParamMap.put("shiftId",shiftId);
Map<String,List<Map<String,Object>>> schedulMap = getSchedulingInFormation(classesParamMap);
Map<String,List<Map<String,Object>>> schedulMap = getSchedulingInFormation(classesParamMap,params);
return schedulMap; return schedulMap;
} }
private Map<String,List<Map<String,Object>>> getSchedulingInFormation(Map<String,Object> params) { private Map<String,List<Map<String,Object>>> getSchedulingInFormation(Map<String,Object> classesParamMap,Map<String,Object> params) {
String punchDate = Util.null2String(params.get("punchDate")); //考勤项目
String schedulingRule = Util.null2String(params.get("schedulingRule")); List<Map<String,Object>> haveattendanceItems = (List<Map<String,Object>>)params.get("attendanceItems");
String dateType = Util.null2String(params.get("dateType")); //班次
String restSign = Util.null2String(params.get("restSign")); List<Map<String,Object>> allClassInfoList = (List<Map<String,Object>>)params.get("allClassInfoList");
String shiftId = Util.null2String(params.get("shiftId")); //加班计划
List<Map<String,Object>> allOverPlanList = (List<Map<String,Object>>)params.get("allOverPlanList");
String bcSql = "select * from uf_jcl_kq_bcxx where id = " + shiftId;
Map<String, Object> bcData = DbTools.getSqlToMap(bcSql);
String bcsdxx = Util.null2String(bcData.get("bcsdxx"));
String sql = "select a.xxbdkzdjb,a.sfxx,a.id bcxx,a.edsc,a.zgzsc,a.bcsdxx,a.sfdx,a.sfkt,b.bdlx,a.btgz,a.fgsjd,a.zddxfz,a.dxhs,b.kssj dtkssj,b.jssj dtjssj,b.ksdk,b.jsdk,b.tqdkfzs,b.thdkfzs,b.edxss,b.edfzs,b.edts,b.sfdx dtsfdx,b.zddxfz dtzddxfz,b.dxhs dtdxhs,b.gsrq from uf_jcl_kq_bcxx a left join uf_jcl_kq_bcxx_dt1 b on a.id=b.mainid where a.id =" + shiftId; String punchDate = Util.null2String(classesParamMap.get("punchDate"));
List<Map<String,Object>> dataList = DbTools.getSqlToList(sql); String schedulingRule = Util.null2String(classesParamMap.get("schedulingRule"));
String dateType = Util.null2String(classesParamMap.get("dateType"));
String restSign = Util.null2String(classesParamMap.get("restSign"));
String shiftId = Util.null2String(classesParamMap.get("shiftId"));
//String sql = "select a.xxbdkzdjb,a.sfxx,a.id bcxx,a.edsc,a.zgzsc,a.bcsdxx,a.sfdx,a.sfkt,b.bdlx,a.btgz,a.fgsjd,a.zddxfz,a.dxhs,b.kssj dtkssj,b.jssj dtjssj,b.ksdk,b.jsdk,b.tqdkfzs,b.thdkfzs,b.edxss,b.edfzs,b.edts,b.sfdx dtsfdx,b.zddxfz dtzddxfz,b.dxhs dtdxhs,b.gsrq from uf_jcl_kq_bcxx a left join uf_jcl_kq_bcxx_dt1 b on a.id=b.mainid where a.id =" + shiftId;
List<Map<String,Object>> dataList = allClassInfoList.stream().filter(e->shiftId.equals(e.get("bcxx"))).collect(Collectors.toList());
Map<String,List<Map<String,Object>>> resultMap = Maps.newHashMap(); Map<String,List<Map<String,Object>>> resultMap = Maps.newHashMap();
List<Map<String,Object>> classs = Lists.newArrayList(); List<Map<String,Object>> classs = Lists.newArrayList();
for (Map<String,Object> map:dataList){ for (Map<String,Object> map:dataList){
@ -358,11 +368,13 @@ public class ShiftServiceImpl extends Service implements ShiftService {
resultMap.put(punchDate,classs); resultMap.put(punchDate,classs);
/** 加班计划*/ /** 加班计划*/
sql = "select a.id,b.jbry,b.ksrq,b.kssj,b.jblx,b.jsrq,b.jssj,b.jbsc,b.gsrq from uf_jcl_kq_jbjh a left join uf_jcl_kq_jbjh_dt1 b on a.id=b.mainid where b.jbry =? and b.gsrq>=? and b.gsrq<=? and (b.jbcx=0 or b.jbcx is null) and a.jlzt=1"; //sql = "select a.id,b.jbry,b.ksrq,b.kssj,b.jblx,b.jsrq,b.jssj,b.jbsc,b.gsrq from uf_jcl_kq_jbjh a left join uf_jcl_kq_jbjh_dt1 b on a.id=b.mainid where b.jbry =? and b.gsrq>=? and b.gsrq<=? and (b.jbcx=0 or b.jbcx is null) and a.jlzt=1";
Map<String,List<Map<String,Object>>> overtimePlanMap = DbTools.getSqlToList(sql,params.get("pbdx"),punchDate,punchDate).stream().collect(Collectors.groupingBy(e -> Util.null2String(e.get("gsrq")))); // Map<String,List<Map<String,Object>>> overtimePlanMap = DbTools.getSqlToList(sql,classesParamMap.get("pbdx"),punchDate,punchDate).stream().collect(Collectors.groupingBy(e -> Util.null2String(e.get("gsrq"))));
Map<String,List<Map<String,Object>>> overtimePlanMap = allOverPlanList.stream().filter(e->DateUtil.getTime("gsrq").compareTo(DateUtil.getTime(punchDate)) ==0).collect(Collectors.groupingBy(e -> Util.null2String(e.get("gsrq"))));
//考勤项目 //考勤项目
List<Map<String,Object>> attendanceItems = new ArrayList<>();
//日期集合 //日期集合
// Map<String,Object> dateParam = Maps.newHashMap(); // Map<String,Object> dateParam = Maps.newHashMap();
// dateParam.put("nd",Util.null2String(params.get("startDate")).split("-")[0]); // dateParam.put("nd",Util.null2String(params.get("startDate")).split("-")[0]);
@ -387,10 +399,10 @@ public class ShiftServiceImpl extends Service implements ShiftService {
map.put("sfkt","0"); map.put("sfkt","0");
} }
//查找对应的考勤项目 //查找对应的考勤项目
String querySql = "select a.id keyid,a.* from uf_jcl_kq_kqxm a where id=?"; List<Map<String,Object>> attendanceItems = haveattendanceItems.stream().filter(f->f.get("keyid").equals(overtimePlan.get("jblx"))).collect(Collectors.toList());
attendanceItems = DbTools.getSqlToList(querySql,overtimePlan.get("jblx"));
String bcsdxx = resultList == null || resultList.size()==0 || resultList.get(0) ==null ? "":Util.null2String(resultList.get(0).get(""));
map.put("bcxx", punchDate.compareTo(e.getKey()) != 0 ? "0" : shiftId); map.put("bcxx", punchDate.compareTo(e.getKey()) != 0 ? "0" : shiftId);
map.put("bcsdxx", punchDate.compareTo(e.getKey()) != 0 ? "": bcsdxx); map.put("bcsdxx", punchDate.compareTo(e.getKey()) != 0 ? "": bcsdxx);
if (resultList.size()>0){ if (resultList.size()>0){

@ -37,7 +37,7 @@ public class UtilServiceImpl extends Service implements UtilService {
@Override @Override
public Map<String, Object> getSchedulingInFormation(Map<String, Object> params) { public Map<String, Object> getSchedulingInFormation(Map<String, Object> params) {
/** 班次信息*/ /** 班次信息*/
Map<String,Object> schedulingResultsMap = schedulingResultsService.queryDataTableActualUse(params); Map<String,Object> schedulingResultsMap = schedulingResultsService.getUseSchedule(params);
params.put("schedulingResultsMap",schedulingResultsMap); params.put("schedulingResultsMap",schedulingResultsMap);
return commandExecutor.execute(new GetScheduleResultListCmd(params)); return commandExecutor.execute(new GetScheduleResultListCmd(params));
} }

@ -8,6 +8,8 @@ import com.engine.jucailinkq.attendance.attendanceplan.service.impl.AttendancePl
import com.engine.jucailinkq.attendance.workflow.service.AllowanceService; import com.engine.jucailinkq.attendance.workflow.service.AllowanceService;
import com.engine.jucailinkq.attendance.workflow.service.impl.AllowanceServiceImpl; import com.engine.jucailinkq.attendance.workflow.service.impl.AllowanceServiceImpl;
import com.engine.common.util.*; import com.engine.common.util.*;
import com.engine.jucailinkq.common.service.CommonService;
import com.engine.jucailinkq.common.service.impl.CommonServiceImpl;
import com.engine.jucailinkq.common.util.*; import com.engine.jucailinkq.common.util.*;
import com.google.common.collect.Lists; import com.google.common.collect.Lists;
import com.google.common.collect.Maps; import com.google.common.collect.Maps;
@ -33,7 +35,7 @@ public class AttendanceanalysisAction {
private UtilService utilService = ServiceUtil.getService(UtilServiceImpl.class); private UtilService utilService = ServiceUtil.getService(UtilServiceImpl.class);
private AttendanceAnalysisWrapper attendanceAnalysisService = ServiceUtil.getService(AttendanceAnalysisWrapper.class); private AttendanceAnalysisWrapper attendanceAnalysisService = ServiceUtil.getService(AttendanceAnalysisWrapper.class);
private AllowanceService allowanceService = ServiceUtil.getService(AllowanceServiceImpl.class); private AllowanceService allowanceService = ServiceUtil.getService(AllowanceServiceImpl.class);
private CommonService commonService = ServiceUtil.getService(CommonServiceImpl.class);
/** /**
* *
* @return * @return
@ -46,9 +48,9 @@ public class AttendanceanalysisAction {
log.info("********AttendanceanalysisAction start********"); log.info("********AttendanceanalysisAction start********");
Map<String,Object> paramMap = ParamUtil.request2Map(request); Map<String,Object> paramMap = ParamUtil.request2Map(request);
// Map<String,Object> paramMap = Maps.newHashMap(); // Map<String,Object> paramMap = Maps.newHashMap();
// paramMap.put("startDate","2024-11-03"); // paramMap.put("startDate","2024-06-20");
// paramMap.put("endDate","2024-11-03"); // paramMap.put("endDate","2024-06-20");
// paramMap.put("userIds","82"); // paramMap.put("userIds","36");
String startDate = Util.null2String(paramMap.get("startDate")); String startDate = Util.null2String(paramMap.get("startDate"));
String startBeforeDate = DateUtil.beforeDay(startDate,2); String startBeforeDate = DateUtil.beforeDay(startDate,2);
@ -56,17 +58,65 @@ public class AttendanceanalysisAction {
String endAfterDate = DateUtil.AfterDay(endDate,2); String endAfterDate = DateUtil.AfterDay(endDate,2);
String userIds = Util.null2String(paramMap.get("userIds")); String userIds = Util.null2String(paramMap.get("userIds"));
int betweenDays = DateUtil.getBetWeenDays(startDate,endDate); int betweenDays = DateUtil.getBetWeenDays(startDate,endDate);
String queryDepartEmployeeSql = "select resourceid ,changedate,type_n from HRMSTATUSHISTORY where type_n = 5 or type_n = 7";
//获取离职日期
List<Map<String,Object>> departEmployeeList = DbTools.getSqlToList(queryDepartEmployeeSql);
Map<String,Object> departEmployeeMap = CommonUtil.getDepartEmployeeMap(departEmployeeList);
//初始化扩展类 //初始化扩展类
CommonUtil.initExtensionClassHolder(); CommonUtil.initExtensionClassHolder();
//入职离职当天是否需要进行考勤分析。0入职离职当天均分析、1入职离职当天不分析 //入职离职当天是否需要进行考勤分析。0入职离职当天均分析、1入职离职当天不分析
String leaveAndEntry = Util.null2String(ExtensionClassHolder.getGlobalSetMap().get("leaveAndEntry")); String leaveAndEntry = Util.null2String(ExtensionClassHolder.getGlobalSetMap().get("leaveAndEntry"));
/**考勤项目*/
Map<String,Object> params = Maps.newHashMap();
String modeId = Utils.getFormmodeIdMap().get("uf_jcl_kq_kqfa");
params.put("modeId",modeId);
Map<String,Object> resultMap = commonService.getPersonBySuitOrganzation(params);
Map<String,Object> attendacnePlanItems = basicsetService.getAttendanceItemsGroupByAttendancePlanDataCmd();
//人员所拥有的所有考勤方案
Map<String,List<Map<String,String>>> personAttendancePlan = (Map<String,List<Map<String,String>>>)resultMap.get("personAllData");
//通用考勤项目
List<Map<String,Object>> generalAttendanceItems = (List<Map<String,Object>>)attendacnePlanItems.get("generalAttendanceItems");
//考勤方案对应所属的考勤项目
Map<String,List<Map<String,Object>>> attendanceItemGroupByPlan = (Map<String,List<Map<String,Object>>>)attendacnePlanItems.get("attendanceItemGroupByPlan");
/**综合工时*/
modeId = Utils.getFormmodeIdMap().get("uf_jcl_kq_zhgs");
params.put("modeId",modeId);
Map<String,Object> workingHourResultMap = commonService.getPersonBySuitOrganzation(params);
//人员所拥有的所有综合工时
Map<String,List<Map<String,String>>> personComprehensiveWorkingHours = (Map<String,List<Map<String,String>>>)workingHourResultMap.get("personAllData");
String queysql = "select * from uf_jcl_kq_zhgs";
List<Map<String,Object>> resultList = DbTools.getSqlToList(queysql);
//所有综合工时
Map<String,List<Map<String,Object>>> workingHourGroupBy = resultList.stream().collect(Collectors.groupingBy(e->e.get("id").toString()));
if ("".equals(userIds)){ if ("".equals(userIds)){
String queryDepartEmployeeSql = "select resourceid ,changedate,type_n from HRMSTATUSHISTORY where (type_n = 5 or type_n = 7) and changedate <> '' and changedate is not null";
//获取离职日期
List<Map<String,Object>> departEmployeeList = DbTools.getSqlToList(queryDepartEmployeeSql);
Map<String,Object> departEmployeeMap = CommonUtil.getDepartEmployeeMap(departEmployeeList);
/**排班结果*/
String querySchedulesql = "select a.id as keyid,a.* from uf_pbjg a where bcrq >=? and bcrq<=? order by bcrq";
List<Map<String,Object>> allScheduleList = DbTools.getSqlToList(querySchedulesql,startBeforeDate,endAfterDate);
/**加班计划*/
String queryOverplansql = "select a.id,b.jbry,b.ksrq,b.kssj,b.jblx,b.jsrq,b.jssj,b.jbsc,b.gsrq,b.d_jxgz,b.jxsc from uf_jcl_kq_jbjh a left join uf_jcl_kq_jbjh_dt1 b on a.id=b.mainid where b.gsrq >=? and b.gsrq<=? and (b.jbcx=0 or b.jbcx is null) and a.jlzt=1";
List<Map<String,Object>> allOverPlanList = DbTools.getSqlToList(queryOverplansql,startDate,endDate);
Map<String,List<Map<String,Object>>> allOverPlanGroup = allOverPlanList.stream().collect(Collectors.groupingBy(e->e.get("jbry").toString()));
/**班次信息*/
String querClasssql = "select a.xxbdkzdjb,a.sfxx,a.id bcxx,a.edsc,a.zgzsc,a.bcsdxx,a.sfdx,a.sfkt,b.bdlx,a.btgz,a.fgsjd,a.zddxfz,a.dxhs,b.kssj dtkssj,b.jssj dtjssj,b.ksdk,b.jsdk,b.tqdkfzs,b.thdkfzs,b.edxss,b.edfzs,b.edts,b.sfdx dtsfdx,b.zddxfz dtzddxfz,b.dxhs dtdxhs,b.gsrq from uf_jcl_kq_bcxx a left join uf_jcl_kq_bcxx_dt1 b on a.id=b.mainid";
List<Map<String,Object>> allClassInfoList = DbTools.getSqlToList(querClasssql);
/**出差信息*/
String querEvectionsql = "select b.ccr,b.cclx,b.ksrq,b.jsrq,b.kssj,b.jssj,b.ccsc,b.qtcc,b.btcc,b.cxcc from uf_jcl_kq_ccjl a left join uf_jcl_kq_ccjl_dt1 b on a.id = b.mainid where b.ksrq<=? and b.jsrq>=? and (b.cxcc=0 or b.cxcc is null) and a.jlzt=1";
Map<String,List<Map<String,Object>>> evectionGroup = DbTools.getSqlToList(querEvectionsql,endDate,startDate).stream().collect(Collectors.groupingBy(e->e.get("ccr").toString()));
/**请假信息*/
String queryAskForsql = "select b.qjry,b.jqlx,b.ksrq,b.kssj,b.jsrq,b.jssj,b.qjsc,b.qtj,b.btj from uf_jcl_kq_qjjl a left join uf_jcl_kq_qjjl_dt1 b on a.id = b.mainid where b.ksrq<=? and b.jsrq>=? and (b.cxqj=0 or b.cxqj is null) and a.jlzt=1";
Map<String,List<Map<String,Object>>> askforGroup = DbTools.getSqlToList(queryAskForsql,endDate,startDate).stream().collect(Collectors.groupingBy(e->e.get("qjry").toString()));
/**候选班组*/
String queryHxbz = "select * from uf_jcl_kq_hxbz_dt1";
List<Map<String,Object>> hxbzList = DbTools.getSqlToList(queryHxbz);
String queryUserSql = "select id,companystartdate from hrmresource where status <> '5' and status <> '4' and status <> '7'"; String queryUserSql = "select id,companystartdate from hrmresource where status <> '5' and status <> '4' and status <> '7'";
List<Map<String,Object>> userList = DbTools.getSqlToList(queryUserSql); List<Map<String,Object>> userList = DbTools.getSqlToList(queryUserSql);
String sql = "select id,userid,signdate,signtime from hrmschedulesign where isincom=1 and signdate >= ? and signdate <= ? order by signdate,signtime"; String sql = "select id,userid,signdate,signtime from hrmschedulesign where isincom=1 and signdate >= ? and signdate <= ? order by signdate,signtime";
@ -80,8 +130,8 @@ public class AttendanceanalysisAction {
dataList = dataList.stream().sorted(Comparator.comparing(e->DateUtil.getTime(e.get("signdate")+" "+e.get("signtime")).toInstant(ZoneOffset.of("+8")).toEpochMilli())).collect(Collectors.toList()); dataList = dataList.stream().sorted(Comparator.comparing(e->DateUtil.getTime(e.get("signdate")+" "+e.get("signtime")).toInstant(ZoneOffset.of("+8")).toEpochMilli())).collect(Collectors.toList());
Map<String, List<Map<String,Object>>> collect = dataList.stream().collect(Collectors.groupingBy(e -> Util.null2String(e.get("userid")))); Map<String, List<Map<String,Object>>> 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<=?"; sql = "select sjzt,sgsj,ygid,rq,j1,c1,j2,c2,j3,c3,j4,c4,j5,c5,j6,c6,j7,c7,j8,c8 from uf_jcl_kq_cqjg where rq>=? and rq<=?";
List<Map<String,Object>> attendaceResult = DbTools.getSqlToList(sql,startDate,endDate); List<Map<String,Object>> attendaceResult = DbTools.getSqlToList(sql,startBeforeDate,endAfterDate);
Map<String,List<Map<String,Object>>> attendaceGroupById = attendaceResult.stream().collect(Collectors.groupingBy(e->e.get("ygid").toString())); Map<String,List<Map<String,Object>>> attendaceGroupById = attendaceResult.stream().collect(Collectors.groupingBy(e->e.get("ygid").toString()));
@ -96,58 +146,73 @@ public class AttendanceanalysisAction {
log.info("***********analysis userId:{} start***********", userId); log.info("***********analysis userId:{} start***********", userId);
//出勤结果,进出时间 //出勤结果,进出时间
Map<String,Map<String,Object>> clockInTimeMap = Maps.newHashMap(); Map<String,Map<String,Object>> clockInTimeMap = Maps.newHashMap();
/**获得人员考勤项目*/
Map<String,Object> param = Maps.newHashMap();
param.put("startDate",startBeforeDate);
param.put("endDate",endAfterDate);
param.put("resourceId",userId);
Map<String,Object> dataMap = basicsetService.getAttendanceItemsByPerson(param);
List<Map<String,Object>> attendanceItems = (List<Map<String,Object>>)dataMap.get("data");
/**
*
*/
Map<String,Object> workHourdataMap = basicsetService.getWorkHoursItemByPerson(param);
List<Map<String,Object>> workHourItems = (List<Map<String,Object>>)workHourdataMap.get("data");
/** 获取人员班次*/
Map<String,Object> classesParamMap = Maps.newHashMap();
classesParamMap.put("tableName","uf_pbjg");
classesParamMap.put("startDate",startBeforeDate);
classesParamMap.put("endDate",endAfterDate);
classesParamMap.put("pblx","0");
classesParamMap.put("pbdx",userId);
classesParamMap.put("current","1");
classesParamMap.put("pageSize",9999);
classesParamMap.put("recurrence",1);
classesParamMap.put("clockInTimeMap",clockInTimeMap);
classesParamMap.put("clockInData",collect.get(userId));
classesParamMap.put("attendanceItems",attendanceItems);
Map<String,Object> schedulMap = utilService.getSchedulingInFormation(classesParamMap);
Map<String, List<Map<String, Object>>> attendaceResultMap = Maps.newHashMap(); Map<String, List<Map<String, Object>>> attendaceResultMap = Maps.newHashMap();
if (attendaceGroupById.get(userId) != null && attendaceGroupById.get(userId).size() > 0) { if (attendaceGroupById.get(userId) != null && attendaceGroupById.get(userId).size() > 0) {
attendaceResultMap = attendaceGroupById.get(userId).stream().collect(Collectors.groupingBy(e -> e.get("rq").toString())); attendaceResultMap = attendaceGroupById.get(userId).stream().collect(Collectors.groupingBy(e -> e.get("rq").toString()));
for (Map<String, Object> map: attendaceGroupById.get(userId)){
clockInTimeMap.put(map.get("rq").toString(),map);
}
} }
Map<String,Object> analysisParam = Maps.newHashMap();
analysisParam.put("generalAttendanceItems",generalAttendanceItems);
analysisParam.put("attendancePlanList",personAttendancePlan.get(userId)==null?Lists.newArrayList():personAttendancePlan.get(userId));
analysisParam.put("attendanceItemGroupByPlan",attendanceItemGroupByPlan);
analysisParam.put("comprehensiveWorkingHourList",personComprehensiveWorkingHours.get(userId)==null?Lists.newArrayList():personComprehensiveWorkingHours.get(userId));
analysisParam.put("workingHourGroupBy",workingHourGroupBy);
analysisParam.put("allScheduleList",allScheduleList);
analysisParam.put("allClassInfoList",allClassInfoList);
analysisParam.put("allOverPlanList",allOverPlanGroup.get(userId)==null?Lists.newArrayList():allOverPlanGroup.get(userId));
analysisParam.put("evectionList",evectionGroup.get(userId)==null?Lists.newArrayList():evectionGroup.get(userId));
analysisParam.put("askforList",askforGroup.get(userId)==null?Lists.newArrayList():askforGroup.get(userId));
analysisParam.put("hxbzList",hxbzList);
for (int i=0; i<=betweenDays;i++){ for (int i=0; i<=betweenDays;i++){
String date = DateUtil.AfterDay(startDate,i); String date = DateUtil.AfterDay(startDate,i);
if (leaveAndEntry.equals("1")){ if (leaveAndEntry.equals("1")){
if (("".equals(companystartDate) || DateUtil.getTime(date).compareTo(DateUtil.getTime(companystartDate))>0) if (("".equals(companystartDate) || DateUtil.getTime(date).compareTo(DateUtil.getTime(companystartDate))>0)
&& ("".equals(terminationDate) || DateUtil.getTime(date).compareTo(DateUtil.getTime(terminationDate)) <0)){ && ("".equals(terminationDate) || DateUtil.getTime(date).compareTo(DateUtil.getTime(terminationDate)) <0)){
attendanceAnalysisService.attendanceAnalysisForApi(userId,date,collect.get(userId),attendanceItems,schedulMap,workHourItems,clockInTimeMap,attendaceResultMap.get(date));
attendanceAnalysisService.attendanceAnalysisForApi(userId,date,collect.get(userId),analysisParam,clockInTimeMap,attendaceResultMap);
} }
}else { }else {
if (("".equals(companystartDate) || DateUtil.getTime(date).compareTo(DateUtil.getTime(companystartDate))>=0) if (("".equals(companystartDate) || DateUtil.getTime(date).compareTo(DateUtil.getTime(companystartDate))>=0)
&& ("".equals(terminationDate) || DateUtil.getTime(date).compareTo(DateUtil.getTime(terminationDate)) <=0)){ && ("".equals(terminationDate) || DateUtil.getTime(date).compareTo(DateUtil.getTime(terminationDate)) <=0)){
attendanceAnalysisService.attendanceAnalysisForApi(userId,date,collect.get(userId),attendanceItems,schedulMap,workHourItems,clockInTimeMap,attendaceResultMap.get(date)); attendanceAnalysisService.attendanceAnalysisForApi(userId,date,collect.get(userId),analysisParam,clockInTimeMap,attendaceResultMap);
} }
} }
} }
allowanceService.addAllowanceRecords(paramMap); allowanceService.addAllowanceRecords(paramMap);
} }
}else { }else {
String queryDepartEmployeeSql = "select resourceid ,changedate,type_n from HRMSTATUSHISTORY where (type_n = 5 or type_n = 7) and changedate <> '' and changedate is not null and resourceid in ("+userIds+")";
//获取离职日期
List<Map<String,Object>> departEmployeeList = DbTools.getSqlToList(queryDepartEmployeeSql);
Map<String,Object> departEmployeeMap = CommonUtil.getDepartEmployeeMap(departEmployeeList);
/**排班结果*/
String querySchedulesql = "select a.id as keyid,a.* from uf_pbjg a where bcrq >=? and bcrq<=? order by bcrq";
List<Map<String,Object>> allScheduleList = DbTools.getSqlToList(querySchedulesql,startBeforeDate,endAfterDate);
/**加班计划*/
String queryOverplansql = "select a.id,b.jbry,b.ksrq,b.kssj,b.jblx,b.jsrq,b.jssj,b.jbsc,b.gsrq,b.d_jxgz,b.jxsc from uf_jcl_kq_jbjh a left join uf_jcl_kq_jbjh_dt1 b on a.id=b.mainid where b.jbry in ("+userIds+") and b.gsrq >=? and b.gsrq<=? and (b.jbcx=0 or b.jbcx is null) and a.jlzt=1";
List<Map<String,Object>> allOverPlanList = DbTools.getSqlToList(queryOverplansql,startDate,endDate);
Map<String,List<Map<String,Object>>> allOverPlanGroup = allOverPlanList.stream().collect(Collectors.groupingBy(e->e.get("jbry").toString()));
/**班次信息*/
String querClasssql = "select a.xxbdkzdjb,a.sfxx,a.id bcxx,a.edsc,a.zgzsc,a.bcsdxx,a.sfdx,a.sfkt,b.bdlx,a.btgz,a.fgsjd,a.zddxfz,a.dxhs,b.kssj dtkssj,b.jssj dtjssj,b.ksdk,b.jsdk,b.tqdkfzs,b.thdkfzs,b.edxss,b.edfzs,b.edts,b.sfdx dtsfdx,b.zddxfz dtzddxfz,b.dxhs dtdxhs,b.gsrq from uf_jcl_kq_bcxx a left join uf_jcl_kq_bcxx_dt1 b on a.id=b.mainid";
List<Map<String,Object>> allClassInfoList = DbTools.getSqlToList(querClasssql);
/**出差信息*/
String querEvectionsql = "select b.ccr,b.cclx,b.ksrq,b.jsrq,b.kssj,b.jssj,b.ccsc,b.qtcc,b.btcc,b.cxcc from uf_jcl_kq_ccjl a left join uf_jcl_kq_ccjl_dt1 b on a.id = b.mainid where b.ccr in ("+userIds+") and b.ksrq<=? and b.jsrq>=? and (b.cxcc=0 or b.cxcc is null) and a.jlzt=1";
Map<String,List<Map<String,Object>>> evectionGroup = DbTools.getSqlToList(querEvectionsql,endDate,startDate).stream().collect(Collectors.groupingBy(e->e.get("ccr").toString()));
/**请假信息*/
String queryAskForsql = "select b.qjry,b.jqlx,b.ksrq,b.kssj,b.jsrq,b.jssj,b.qjsc,b.qtj,b.btj from uf_jcl_kq_qjjl a left join uf_jcl_kq_qjjl_dt1 b on a.id = b.mainid where b.qjry in ("+userIds+") and b.ksrq<=? and b.jsrq>=? and (b.cxqj=0 or b.cxqj is null) and a.jlzt=1";
Map<String,List<Map<String,Object>>> askforGroup = DbTools.getSqlToList(queryAskForsql,endDate,startDate).stream().collect(Collectors.groupingBy(e->e.get("qjry").toString()));
/**候选班组*/
String queryHxbz = "select * from uf_jcl_kq_hxbz_dt1";
List<Map<String,Object>> hxbzList = DbTools.getSqlToList(queryHxbz);
String sql = "select id,userid,signdate,signtime from hrmschedulesign where isincom=1 and userid in ("+userIds+") and signdate >= ? and signdate <= ? order by signdate,signtime"; String sql = "select id,userid,signdate,signtime from hrmschedulesign where isincom=1 and userid in ("+userIds+") and signdate >= ? and signdate <= ? order by signdate,signtime";
List<Map<String,Object>> dataList = DbTools.getSqlToList(sql,startBeforeDate,endAfterDate); List<Map<String,Object>> dataList = DbTools.getSqlToList(sql,startBeforeDate,endAfterDate);
@ -166,14 +231,12 @@ public class AttendanceanalysisAction {
Map<String, List<Map<String,Object>>> collect = dataList.stream().collect(Collectors.groupingBy(e -> Util.null2String(e.get("userid")))); Map<String, List<Map<String,Object>>> 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<=? and ygid in ("+userIds+")"; sql = "select sjzt,sgsj,ygid,rq,j1,c1,j2,c2,j3,c3,j4,c4,j5,c5,j6,c6,j7,c7,j8,c8 from uf_jcl_kq_cqjg where rq>=? and rq<=? and ygid in ("+userIds+")";
List<Map<String,Object>> attendaceResult = DbTools.getSqlToList(sql,startDate,endDate); List<Map<String,Object>> attendaceResult = DbTools.getSqlToList(sql,startBeforeDate,endAfterDate);
Map<String,List<Map<String,Object>>> attendaceGroupById = attendaceResult.stream().collect(Collectors.groupingBy(e->e.get("ygid").toString())); Map<String,List<Map<String,Object>>> attendaceGroupById = attendaceResult.stream().collect(Collectors.groupingBy(e->e.get("ygid").toString()));
for (String userId : userIds.split(",")){ for (String userId : userIds.split(",")){
/**获得人员考勤项目*/
Map<String,Object> param = Maps.newHashMap();
//入职日期 //入职日期
String companystartDate = Util.null2String(userGroupMap.get(userId).get(0).get("companystartdate")); String companystartDate = Util.null2String(userGroupMap.get(userId).get(0).get("companystartdate"));
//离职日期 //离职日期
@ -181,38 +244,27 @@ public class AttendanceanalysisAction {
//出勤结果,进出时间 //出勤结果,进出时间
Map<String,Map<String,Object>> clockInTimeMap = Maps.newHashMap(); Map<String,Map<String,Object>> clockInTimeMap = Maps.newHashMap();
param.put("startDate",startBeforeDate);
param.put("endDate",endAfterDate);
param.put("resourceId",userId);
Map<String,Object> dataMap = basicsetService.getAttendanceItemsByPerson(param);
List<Map<String,Object>> attendanceItems = (List<Map<String,Object>>)dataMap.get("data");
/** Map<String,Object> analysisParam = Maps.newHashMap();
* analysisParam.put("generalAttendanceItems",generalAttendanceItems);
*/ analysisParam.put("attendancePlanList",personAttendancePlan.get(userId)==null?Lists.newArrayList():personAttendancePlan.get(userId));
Map<String,Object> workHourdataMap = basicsetService.getWorkHoursItemByPerson(param); analysisParam.put("attendanceItemGroupByPlan",attendanceItemGroupByPlan);
List<Map<String,Object>> workHourItems = (List<Map<String,Object>>)workHourdataMap.get("data"); analysisParam.put("comprehensiveWorkingHourList",personComprehensiveWorkingHours.get(userId)==null?Lists.newArrayList():personComprehensiveWorkingHours.get(userId));
analysisParam.put("workingHourGroupBy",workingHourGroupBy);
analysisParam.put("allScheduleList",allScheduleList);
/** 获取人员班次*/ analysisParam.put("allClassInfoList",allClassInfoList);
Map<String,Object> classesParamMap = Maps.newHashMap(); analysisParam.put("allOverPlanList",allOverPlanGroup.get(userId)==null?Lists.newArrayList():allOverPlanGroup.get(userId));
classesParamMap.put("tableName","uf_pbjg"); analysisParam.put("evectionList",evectionGroup.get(userId)==null?Lists.newArrayList():evectionGroup.get(userId));
classesParamMap.put("startDate",startBeforeDate); analysisParam.put("askforList",askforGroup.get(userId)==null?Lists.newArrayList():askforGroup.get(userId));
classesParamMap.put("endDate",endAfterDate); analysisParam.put("hxbzList",hxbzList);
classesParamMap.put("pblx","0");
classesParamMap.put("pbdx",userId);
classesParamMap.put("current","1");
classesParamMap.put("pageSize",9999);
classesParamMap.put("recurrence",1);
classesParamMap.put("clockInTimeMap",clockInTimeMap);
classesParamMap.put("clockInData",collect.get(userId));
classesParamMap.put("attendanceItems",attendanceItems);
Map<String,Object> schedulMap = utilService.getSchedulingInFormation(classesParamMap);
Map<String, List<Map<String, Object>>> attendaceResultMap = Maps.newHashMap(); Map<String, List<Map<String, Object>>> attendaceResultMap = Maps.newHashMap();
if (attendaceGroupById.get(userId) != null && attendaceGroupById.get(userId).size() > 0) { if (attendaceGroupById.get(userId) != null && attendaceGroupById.get(userId).size() > 0) {
attendaceResultMap = attendaceGroupById.get(userId).stream().collect(Collectors.groupingBy(e -> e.get("rq").toString())); attendaceResultMap = attendaceGroupById.get(userId).stream().collect(Collectors.groupingBy(e -> e.get("rq").toString()));
for (Map<String, Object> map: attendaceGroupById.get(userId)){
clockInTimeMap.put(map.get("rq").toString(),map);
}
} }
for (int i=0; i<=betweenDays;i++){ for (int i=0; i<=betweenDays;i++){
@ -221,15 +273,14 @@ public class AttendanceanalysisAction {
if (("".equals(companystartDate) || DateUtil.getTime(date).compareTo(DateUtil.getTime(companystartDate))>0) if (("".equals(companystartDate) || DateUtil.getTime(date).compareTo(DateUtil.getTime(companystartDate))>0)
&& ("".equals(terminationDate) || DateUtil.getTime(date).compareTo(DateUtil.getTime(terminationDate)) <0)){ && ("".equals(terminationDate) || DateUtil.getTime(date).compareTo(DateUtil.getTime(terminationDate)) <0)){
log.info("***********analysis userId:{},analysisDate:{} start***********", userId, date); log.info("***********analysis userId:{},analysisDate:{} start***********", userId, date);
attendanceAnalysisService.attendanceAnalysisForApi(userId,date,collect.get(userId),attendanceItems,schedulMap,workHourItems,clockInTimeMap,attendaceResultMap.get(date)); attendanceAnalysisService.attendanceAnalysisForApi(userId,date,collect.get(userId),analysisParam,clockInTimeMap,attendaceResultMap);
} }
}else { }else {
if (("".equals(companystartDate) || DateUtil.getTime(date).compareTo(DateUtil.getTime(companystartDate))>=0) if (("".equals(companystartDate) || DateUtil.getTime(date).compareTo(DateUtil.getTime(companystartDate))>=0)
&& ("".equals(terminationDate) || DateUtil.getTime(date).compareTo(DateUtil.getTime(terminationDate)) <=0)){ && ("".equals(terminationDate) || DateUtil.getTime(date).compareTo(DateUtil.getTime(terminationDate)) <=0)){
log.info("***********analysis userId:{},analysisDate:{} start***********", userId, date); log.info("***********analysis userId:{},analysisDate:{} start***********", userId, date);
attendanceAnalysisService.attendanceAnalysisForApi(userId,date,collect.get(userId),attendanceItems,schedulMap,workHourItems,clockInTimeMap,attendaceResultMap.get(date)); attendanceAnalysisService.attendanceAnalysisForApi(userId,date,collect.get(userId),analysisParam,clockInTimeMap,attendaceResultMap);
} }
} }
} }

@ -38,9 +38,8 @@ public class AttendanceAnalysisWrapper extends Service {
* *
* @param userId id * @param userId id
* @param dataList * @param dataList
* @param attendanceItems
*/ */
public void attendanceAnalysis(String userId, List<String> analysisDateList, List<Map<String, Object>> dataList, List<Map<String, Object>> attendanceItems, List<Map<String, Object>> workHourItems, Map<String, Map<String, Object>> clockInTimeMap, Map<String, List<Map<String, Object>>> attendaceResultMap) { public void attendanceAnalysis(String userId, List<String> analysisDateList, List<Map<String, Object>> dataList, Map<String,Object> analysisParam, Map<String, Map<String, Object>> clockInTimeMap, Map<String, List<Map<String, Object>>> attendaceResultMap) {
log.debug("***********analysis userId:{} analysisDate:{} start***********", userId,analysisDateList); log.debug("***********analysis userId:{} analysisDate:{} start***********", userId,analysisDateList);
log.debug("clockInTimeDate : [{}]", dataList); log.debug("clockInTimeDate : [{}]", dataList);
@ -50,22 +49,86 @@ public class AttendanceAnalysisWrapper extends Service {
if (dataList != null && dataList.size() > 0) { if (dataList != null && dataList.size() > 0) {
collect = dataList.stream().collect(Collectors.groupingBy(e -> Util.null2String(e.get("signdate")))); collect = dataList.stream().collect(Collectors.groupingBy(e -> Util.null2String(e.get("signdate"))));
} }
List<Map<String,Object>> generalAttendanceItems = (List<Map<String,Object>>)analysisParam.get("generalAttendanceItems");
List<Map<String,String>> attendancePlanList = (List<Map<String,String>>)analysisParam.get("attendancePlanList");
Map<String,List<Map<String,Object>>> attendanceItemGroupByPlan = (Map<String,List<Map<String,Object>>>)analysisParam.get("attendanceItemGroupByPlan");
/**获得人员考勤项目*/
// List<Map<String, Object>> attendanceItems =Lists.newArrayList();
// for (Map<String,String> attendancePlan :attendancePlanList){
// if (attendanceItemGroupByPlan.get(attendancePlan.get("dataid")) != null &&
// attendanceItemGroupByPlan.get(attendancePlan.get("dataid")).size()>0){
// attendanceItems.addAll(attendanceItemGroupByPlan.get(attendancePlan.get("dataid")));
// }
// }
// attendanceItems.addAll(generalAttendanceItems);
/**获得综合工时*/
List<Map<String,String>> comprehensiveWorkingHourList = (List<Map<String,String>>)analysisParam.get("comprehensiveWorkingHourList");
Map<String,List<Map<String,Object>>> workingHourGroupBy = (Map<String,List<Map<String,Object>>>)analysisParam.get("workingHourGroupBy");
for (String analysisDate :analysisDateList){
/**获得人员考勤项目*/
List<Map<String,String>> analysisDateAttendancePlanList = attendancePlanList.stream().filter(e->{
if ((!"".equals(Util.null2String(e.get("bdate"))) && DateUtil.getTime(analysisDate).compareTo(DateUtil.getTime(e.get("bdate"))) <0) ||
(!"".equals(Util.null2String(e.get("edate"))) && DateUtil.getTime(analysisDate).compareTo(DateUtil.getTime(e.get("edate"))) > 0)){
return false;
}else {
return true;
}
}).collect(Collectors.toList());
List<Map<String, Object>> analysisDateAttendanceItems =Lists.newArrayList();
for (Map<String,String> attendancePlan :analysisDateAttendancePlanList){
if (attendanceItemGroupByPlan.get(attendancePlan.get("dataid")) != null &&
attendanceItemGroupByPlan.get(attendancePlan.get("dataid")).size()>0){
analysisDateAttendanceItems.addAll(attendanceItemGroupByPlan.get(attendancePlan.get("dataid")));
}
}
analysisDateAttendanceItems.addAll(generalAttendanceItems);
/**
*
*/
List<Map<String, Object>> workHourItems = Lists.newArrayList();
List<Map<String,String>> analysisDateWorkingHourList = comprehensiveWorkingHourList.stream().filter(e->{
if ((!"".equals(Util.null2String(e.get("bdate"))) && DateUtil.getTime(analysisDate).compareTo(DateUtil.getTime(e.get("bdate"))) <0) ||
(!"".equals(Util.null2String(e.get("edate"))) && DateUtil.getTime(analysisDate).compareTo(DateUtil.getTime(e.get("edate"))) > 0)){
return false;
}else {
return true;
}
}).collect(Collectors.toList());
if (analysisDateWorkingHourList.size() > 0){
analysisDateWorkingHourList = analysisDateWorkingHourList.stream().sorted(Comparator.comparing(e->Integer.valueOf(e.get("priority")))).collect(Collectors.toList());
if (workingHourGroupBy.get(analysisDateWorkingHourList.get(0).get("dataid")) != null &&
workingHourGroupBy.get(analysisDateWorkingHourList.get(0).get("dataid")).size()>0){
workHourItems.addAll(workingHourGroupBy.get(analysisDateWorkingHourList.get(0).get("dataid")));
}
}
List<Map<String, Object>> analysisDateAttendaceResult = attendaceResultMap.get(analysisDate);
if (analysisDateAttendaceResult == null || analysisDateAttendaceResult.size() == 0 || (!CheckBoxEnum.CHECKED.getKey().equals(analysisDateAttendaceResult.get(0).get("sgsj")) &&
!"3".equals(analysisDateAttendaceResult.get(0).get("sjzt")))) {
/** 获取人员班次*/ /** 获取人员班次*/
Map<String, Object> classesParamMap = Maps.newHashMap(); Map<String, Object> classesParamMap = Maps.newHashMap();
classesParamMap.put("tableName", "uf_pbjg"); classesParamMap.put("startDate", analysisDate);
classesParamMap.put("startDate", beforeTwoDayDateDate); classesParamMap.put("endDate", analysisDate);
classesParamMap.put("endDate", DateUtil.AfterDay(analysisDateList.get(analysisDateList.size()-1),1));
classesParamMap.put("pblx", "0");
classesParamMap.put("pbdx", userId); classesParamMap.put("pbdx", userId);
classesParamMap.put("current", "1");
classesParamMap.put("pageSize", 9999);
classesParamMap.put("recurrence", 1);
classesParamMap.put("clockInTimeMap", clockInTimeMap); classesParamMap.put("clockInTimeMap", clockInTimeMap);
classesParamMap.put("attendanceItems", attendanceItems); classesParamMap.put("attendanceItems", analysisDateAttendanceItems);
classesParamMap.put("clockInData", dataList); classesParamMap.put("clockInData", dataList);
classesParamMap.put("allScheduleList",analysisParam.get("allScheduleList"));
classesParamMap.put("allClassInfoList",analysisParam.get("allClassInfoList"));
classesParamMap.put("allOverPlanList",analysisParam.get("allOverPlanList"));
classesParamMap.put("attendaceResultMap",attendaceResultMap);
classesParamMap.put("evectionList",analysisParam.get("evectionList"));
classesParamMap.put("askforList",analysisParam.get("askforList"));
classesParamMap.put("hxbzList",analysisParam.get("hxbzList"));
Map<String, Object> schedulMap = utilService.getSchedulingInFormation(classesParamMap); Map<String, Object> schedulMap = utilService.getSchedulingInFormation(classesParamMap);
Map<String, List<Map<String, Object>>> schedulingResultsMap = (Map<String, List<Map<String, Object>>>) schedulMap.get("schedulingResultsMap"); Map<String, List<Map<String, Object>>> schedulingResultsMap = (Map<String, List<Map<String, Object>>>) schedulMap.get("schedulingResultsMap");
for (String analysisDate :analysisDateList){
Map<String, Object> getClockTimeParam = Maps.newHashMap(); Map<String, Object> getClockTimeParam = Maps.newHashMap();
getClockTimeParam.put("date", analysisDate); getClockTimeParam.put("date", analysisDate);
getClockTimeParam.put("clockInTimeList", dataList); getClockTimeParam.put("clockInTimeList", dataList);
@ -74,14 +137,11 @@ public class AttendanceAnalysisWrapper extends Service {
getClockTimeParam.put("clockInTimeMap", clockInTimeMap); getClockTimeParam.put("clockInTimeMap", clockInTimeMap);
getClockTimeParam.put("userId", userId); getClockTimeParam.put("userId", userId);
List<Map<String, Object>> analysisDateAttendaceResult = attendaceResultMap.get(analysisDate);
if (analysisDateAttendaceResult == null || analysisDateAttendaceResult.size() == 0 || (!CheckBoxEnum.CHECKED.getKey().equals(analysisDateAttendaceResult.get(0).get("sgsj")) &&
!"3".equals(analysisDateAttendaceResult.get(0).get("sjzt")))) {
//打卡数据 //打卡数据
List<Map<String, Object>> analysisDateClockInTimeList = utilService.getClockInTime(getClockTimeParam); List<Map<String, Object>> analysisDateClockInTimeList = utilService.getClockInTime(getClockTimeParam);
//分析考勤 //分析考勤
Map<String, Object> recordDataTime1 = analysis(userId, analysisDate, analysisDateClockInTimeList, schedulingResultsMap.get(analysisDate), attendanceItems, workHourItems,(Map<String,Object>)schedulMap.get("clockInTimeDataMap")); Map<String, Object> recordDataTime1 = analysis(userId, analysisDate, analysisDateClockInTimeList, schedulingResultsMap.get(analysisDate), analysisDateAttendanceItems, workHourItems,(Map<String,Object>)schedulMap.get("clockInTimeDataMap"),
(List<Map<String,Object>>)analysisParam.get("evectionList"),(List<Map<String,Object>>)analysisParam.get("askforList"));
clockInTimeMap.put(analysisDate, recordDataTime1); clockInTimeMap.put(analysisDate, recordDataTime1);
} }
} }
@ -93,11 +153,11 @@ public class AttendanceAnalysisWrapper extends Service {
* @param userId id * @param userId id
* @param analysisDate * @param analysisDate
* @param dataList 23 * @param dataList 23
* @param attendanceItems
*/ */
public void attendanceAnalysisForApi(String userId, String analysisDate, List<Map<String, Object>> dataList, List<Map<String, Object>> attendanceItems, Map<String, Object> schedulMap, List<Map<String, Object>> workHourItems, Map<String, Map<String, Object>> clockInTimeMap,List<Map<String,Object>> attendaceResult) { public void attendanceAnalysisForApi(String userId, String analysisDate, List<Map<String, Object>> dataList,Map<String,Object> analysisParam , Map<String, Map<String, Object>> clockInTimeMap,Map<String, List<Map<String, Object>>> attendaceResultMap) {
log.debug("***********analysis userId:{},analysisDate:{} start***********", userId, analysisDate); log.debug("***********analysis userId:{},analysisDate:{} start***********", userId, analysisDate);
log.debug("clockInTimeDate : [{}]", dataList); log.debug("clockInTimeDate : [{}]", dataList);
List<Map<String, Object>> attendaceResult = attendaceResultMap.get(analysisDate);
log.debug("attendaceResult : [{}]",attendaceResult); log.debug("attendaceResult : [{}]",attendaceResult);
if (attendaceResult!=null && attendaceResult.size()>0 && (CheckBoxEnum.CHECKED.getKey().equals(attendaceResult.get(0).get("sgsj")) || if (attendaceResult!=null && attendaceResult.size()>0 && (CheckBoxEnum.CHECKED.getKey().equals(attendaceResult.get(0).get("sgsj")) ||
"3".equals(attendaceResult.get(0).get("sjzt")))) { "3".equals(attendaceResult.get(0).get("sjzt")))) {
@ -107,6 +167,67 @@ public class AttendanceAnalysisWrapper extends Service {
if (dataList != null && dataList.size() > 0) { if (dataList != null && dataList.size() > 0) {
collect = dataList.stream().collect(Collectors.groupingBy(e -> Util.null2String(e.get("signdate")))); collect = dataList.stream().collect(Collectors.groupingBy(e -> Util.null2String(e.get("signdate"))));
} }
List<Map<String,Object>> generalAttendanceItems = (List<Map<String,Object>>)analysisParam.get("generalAttendanceItems");
List<Map<String,String>> attendancePlanList = (List<Map<String,String>>)analysisParam.get("attendancePlanList");
Map<String,List<Map<String,Object>>> attendanceItemGroupByPlan = (Map<String,List<Map<String,Object>>>)analysisParam.get("attendanceItemGroupByPlan");
List<Map<String,String>> comprehensiveWorkingHourList = (List<Map<String,String>>)analysisParam.get("comprehensiveWorkingHourList");
Map<String,List<Map<String,Object>>> workingHourGroupBy = (Map<String,List<Map<String,Object>>>)analysisParam.get("workingHourGroupBy");
/**获得人员考勤项目*/
List<Map<String,String>> analysisDateAttendancePlanList = attendancePlanList.stream().filter(e->{
if ((!"".equals(Util.null2String(e.get("bdate"))) && DateUtil.getTime(analysisDate).compareTo(DateUtil.getTime(e.get("bdate"))) <0) ||
(!"".equals(Util.null2String(e.get("edate"))) && DateUtil.getTime(analysisDate).compareTo(DateUtil.getTime(e.get("edate"))) > 0)){
return false;
}else {
return true;
}
}).collect(Collectors.toList());
List<Map<String, Object>> analysisDateAttendanceItems =Lists.newArrayList();
for (Map<String,String> attendancePlan :analysisDateAttendancePlanList){
if (attendanceItemGroupByPlan.get(attendancePlan.get("dataid")) != null &&
attendanceItemGroupByPlan.get(attendancePlan.get("dataid")).size()>0){
analysisDateAttendanceItems.addAll(attendanceItemGroupByPlan.get(attendancePlan.get("dataid")));
}
}
analysisDateAttendanceItems.addAll(generalAttendanceItems);
/**
*
*/
List<Map<String, Object>> workHourItems = Lists.newArrayList();
List<Map<String,String>> analysisDateWorkingHourList = comprehensiveWorkingHourList.stream().filter(e->{
if ((!"".equals(Util.null2String(e.get("bdate"))) && DateUtil.getTime(analysisDate).compareTo(DateUtil.getTime(e.get("bdate"))) <0) ||
(!"".equals(Util.null2String(e.get("edate"))) && DateUtil.getTime(analysisDate).compareTo(DateUtil.getTime(e.get("edate"))) > 0)){
return false;
}else {
return true;
}
}).collect(Collectors.toList());
if (analysisDateWorkingHourList.size() > 0){
analysisDateWorkingHourList = analysisDateWorkingHourList.stream().sorted(Comparator.comparing(e->Integer.valueOf(e.get("priority")))).collect(Collectors.toList());
if (workingHourGroupBy.get(analysisDateWorkingHourList.get(0).get("dataid")) != null &&
workingHourGroupBy.get(analysisDateWorkingHourList.get(0).get("dataid")).size()>0){
workHourItems.addAll(workingHourGroupBy.get(analysisDateWorkingHourList.get(0).get("dataid")));
}
}
/** 获取人员班次*/
Map<String, Object> classesParamMap = Maps.newHashMap();
classesParamMap.put("startDate", analysisDate);
classesParamMap.put("endDate", analysisDate);
classesParamMap.put("pbdx", userId);
classesParamMap.put("clockInTimeMap", clockInTimeMap);
classesParamMap.put("attendanceItems", analysisDateAttendanceItems);
classesParamMap.put("clockInData", dataList);
classesParamMap.put("allScheduleList",analysisParam.get("allScheduleList"));
classesParamMap.put("allClassInfoList",analysisParam.get("allClassInfoList"));
classesParamMap.put("allOverPlanList",analysisParam.get("allOverPlanList"));
classesParamMap.put("attendaceResultMap",attendaceResultMap);
classesParamMap.put("evectionList",analysisParam.get("evectionList"));
classesParamMap.put("askforList",analysisParam.get("askforList"));
classesParamMap.put("hxbzList",analysisParam.get("hxbzList"));
Map<String, Object> schedulMap = utilService.getSchedulingInFormation(classesParamMap);
Map<String, List<Map<String, Object>>> schedulingResultsMap = (Map<String, List<Map<String, Object>>>) schedulMap.get("schedulingResultsMap"); Map<String, List<Map<String, Object>>> schedulingResultsMap = (Map<String, List<Map<String, Object>>>) schedulMap.get("schedulingResultsMap");
Map<String, Object> getClockTimeParam = Maps.newHashMap(); Map<String, Object> getClockTimeParam = Maps.newHashMap();
@ -117,10 +238,12 @@ public class AttendanceAnalysisWrapper extends Service {
getClockTimeParam.put("clockInTimeCollect", collect); getClockTimeParam.put("clockInTimeCollect", collect);
getClockTimeParam.put("userId", userId); getClockTimeParam.put("userId", userId);
getClockTimeParam.put("workHourItems",workHourItems); getClockTimeParam.put("workHourItems",workHourItems);
//打卡数据 //打卡数据
List<Map<String, Object>> clockInTimeList = utilService.getClockInTime(getClockTimeParam); List<Map<String, Object>> analysisDateClockInTimeList = utilService.getClockInTime(getClockTimeParam);
Map<String, Object> recordDataTime = analysis(userId, analysisDate, clockInTimeList, schedulingResultsMap.get(analysisDate), attendanceItems, workHourItems,(Map<String,Object>)schedulMap.get("clockInTimeDataMap")); Map<String, Object> recordDataTime1 = analysis(userId, analysisDate, analysisDateClockInTimeList, schedulingResultsMap.get(analysisDate), analysisDateAttendanceItems, workHourItems,(Map<String,Object>)schedulMap.get("clockInTimeDataMap"),
clockInTimeMap.put(analysisDate, recordDataTime); (List<Map<String,Object>>)analysisParam.get("evectionList"),(List<Map<String,Object>>)analysisParam.get("askforList"));
clockInTimeMap.put(analysisDate, recordDataTime1);
} }
/** /**
@ -133,7 +256,7 @@ public class AttendanceAnalysisWrapper extends Service {
* @param attendanceItems * @param attendanceItems
*/ */
public Map<String, Object> analysis(String userId, String analysisDate, List<Map<String, Object>> clockInTimeList, List<Map<String, Object>> scheduleResult, List<Map<String, Object>> attendanceItems, List<Map<String, Object>> workHourItems public Map<String, Object> analysis(String userId, String analysisDate, List<Map<String, Object>> clockInTimeList, List<Map<String, Object>> scheduleResult, List<Map<String, Object>> attendanceItems, List<Map<String, Object>> workHourItems
,Map<String,Object> clockInTimeDataMap) { ,Map<String,Object> clockInTimeDataMap,List<Map<String, Object>> evectionList,List<Map<String, Object>> askforList) {
Map<String, Object> recordParam = Maps.newHashMap(); Map<String, Object> recordParam = Maps.newHashMap();
Map<String, String> formModeIdMap = Utils.getFormmodeIdMap(); Map<String, String> formModeIdMap = Utils.getFormmodeIdMap();
recordParam.put("userId", userId); recordParam.put("userId", userId);
@ -150,6 +273,8 @@ public class AttendanceAnalysisWrapper extends Service {
workingHourparam.put("userId", userId); workingHourparam.put("userId", userId);
workingHourparam.put("attendanceItems", attendanceItems); workingHourparam.put("attendanceItems", attendanceItems);
workingHourparam.put("scheduleResult", scheduleResult); workingHourparam.put("scheduleResult", scheduleResult);
workingHourparam.put("evectionList",evectionList);
workingHourparam.put("askforList",askforList);
/** /**
* *

@ -0,0 +1,47 @@
package com.engine.jucailinkq.attendance.attendanceplan.cmd;
import com.engine.common.biz.AbstractCommonCommand;
import com.engine.common.entity.BizLogContext;
import com.engine.core.interceptor.CommandContext;
import com.engine.jucailinkq.attendance.enums.CheckBoxEnum;
import com.engine.jucailinkq.common.util.DbTools;
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 GetAttendanceItemsGroupByAttendancePlanDataCmd extends AbstractCommonCommand<Map<String,Object>> {
@Override
public BizLogContext getLogContext() {
return null;
}
@Override
public Map<String, Object> execute(CommandContext commandContext) {
Map<String,Object> resultMap = Maps.newHashMap();
String sql = "select c.id planid,b.id keyid,b.mc kqxm,c.mc famc,b.* from uf_jcl_kq_kqfa_dt1 a left join uf_jcl_kq_kqxm b on a.kqxm=b.id left join uf_jcl_kq_kqfa c on a.mainid=c.id";
List<Map<String,Object>> attendanceItems = DbTools.getSqlToList(sql);
List<String> fatherItems = attendanceItems.stream().filter(e-> Util.null2String(e.get("sffzcx")).equals(CheckBoxEnum.CHECKED.getKey())).map(e->e.get("keyid").toString()).collect(Collectors.toList());
if (fatherItems.size() > 0){
sql = "select id keyid,mc kqxm,a.* from uf_jcl_kq_kqxm a where (xmzt is null or xmzt <> '0') and a.sjxm in ("+String.join(",",fatherItems)+")";
List<Map<String,Object>> sonItemList = DbTools.getSqlToList(sql);
Map<String,List<Map<String,Object>>> sonGroupMap = sonItemList.stream().collect(Collectors.groupingBy(e->e.get("sjxm").toString()));
for (Map<String,Object> attendanceItem :attendanceItems){
if (CheckBoxEnum.CHECKED.getKey().equals(attendanceItem.get("sffzcx"))){
attendanceItem.put("sonItems",sonGroupMap.get(attendanceItem.get("keyid")));
}
}
}
sql = "select id keyid,mc kqxm,a.* from uf_jcl_kq_kqxm a where tyxm=1 and (xmzt is null or xmzt <> '0')";
List<Map<String,Object>> generalAttendanceItems = DbTools.getSqlToList(sql);
Map<String,List<Map<String,Object>>> attendanceItemGroupByPlan = attendanceItems.stream().collect(Collectors.groupingBy(e->e.get("planid").toString()));
resultMap.put("generalAttendanceItems",generalAttendanceItems);
resultMap.put("attendanceItemGroupByPlan",attendanceItemGroupByPlan);
return resultMap;
}
}

@ -16,4 +16,11 @@ public interface AttendancePlanService {
* @return * @return
*/ */
Map<String,Object> getWorkHoursItemByPerson(Map<String,Object> params); Map<String,Object> getWorkHoursItemByPerson(Map<String,Object> params);
/**
*
* @return
*/
Map<String,Object> getAttendanceItemsGroupByAttendancePlanDataCmd();
} }

@ -1,6 +1,7 @@
package com.engine.jucailinkq.attendance.attendanceplan.service.impl; package com.engine.jucailinkq.attendance.attendanceplan.service.impl;
import com.engine.jucailinkq.attendance.attendanceplan.cmd.GetAttendanceItemsByPersonDataCmd; import com.engine.jucailinkq.attendance.attendanceplan.cmd.GetAttendanceItemsByPersonDataCmd;
import com.engine.jucailinkq.attendance.attendanceplan.cmd.GetAttendanceItemsGroupByAttendancePlanDataCmd;
import com.engine.jucailinkq.attendance.attendanceplan.cmd.GetWorkHoursItemByPersonCmd; import com.engine.jucailinkq.attendance.attendanceplan.cmd.GetWorkHoursItemByPersonCmd;
import com.engine.jucailinkq.attendance.attendanceplan.service.AttendancePlanService; import com.engine.jucailinkq.attendance.attendanceplan.service.AttendancePlanService;
import com.engine.core.impl.Service; import com.engine.core.impl.Service;
@ -18,4 +19,9 @@ public class AttendancePlanServiceImpl extends Service implements AttendancePlan
public Map<String, Object> getWorkHoursItemByPerson(Map<String, Object> params) { public Map<String, Object> getWorkHoursItemByPerson(Map<String, Object> params) {
return commandExecutor.execute(new GetWorkHoursItemByPersonCmd(params)); return commandExecutor.execute(new GetWorkHoursItemByPersonCmd(params));
} }
@Override
public Map<String, Object> getAttendanceItemsGroupByAttendancePlanDataCmd() {
return commandExecutor.execute(new GetAttendanceItemsGroupByAttendancePlanDataCmd());
}
} }

@ -0,0 +1,165 @@
package com.engine.jucailinkq.attendance.component.persongroup.cmd;
import com.engine.common.biz.AbstractCommonCommand;
import com.engine.common.entity.BizLogContext;
import com.engine.core.interceptor.CommandContext;
import com.engine.jucailinkq.attendance.component.persongroup.commonutil.PersongroupCommonUtil;
import com.engine.jucailinkq.attendance.enums.CheckBoxEnum;
import com.engine.jucailinkq.attendance.enums.SchedulingApproachEnum;
import com.engine.jucailinkq.common.util.DateUtil;
import com.engine.jucailinkq.common.util.DbTools;
import com.engine.jucailinkq.common.util.ExtensionClassHolder;
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
import lombok.extern.slf4j.Slf4j;
import weaver.general.Util;
import weaver.hrm.company.DepartmentComInfo;
import java.time.ZoneOffset;
import java.util.Comparator;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.stream.Collectors;
/**
*
*/
@Slf4j
public class GetScheduleFoAnalysisCmd extends AbstractCommonCommand<Map<String, Object>> {
@Override
public BizLogContext getLogContext() {
return null;
}
public GetScheduleFoAnalysisCmd(Map<String, Object> params) {
this.params = params;
}
@Override
public Map<String, Object> execute(CommandContext commandContext) {
String startDate = Util.null2String(params.get("startDate"));
String endDate = Util.null2String(params.get("endDate"));
String pbdx = Util.null2String(params.get("pbdx"));
List<Map<String,Object>> allScheduleList = (List<Map<String,Object>>)params.get("allScheduleList");
Map<String, Object> resultMap = Maps.newHashMap();
List<Map<String, Object>> dataTableList = Lists.newArrayList();
try {
//人员递归查人员、人员分组、部门、分部
List<Map<String, Object>> dataList = allScheduleList.stream().filter(e->pbdx.equals(e.get("pbdxry")) &&
DateUtil.getTime(e.get("bcrq").toString()).compareTo(DateUtil.getTime(startDate))>=0 &&
DateUtil.getTime(e.get("bcrq").toString()).compareTo(DateUtil.getTime(endDate))<=0).collect(Collectors.toList());
//人员数据
//人员分组数据
List<Map<String, Object>> personGroupList = Lists.newArrayList();
Map<String, List<Map<String, Object>>> personBelongGroup = ExtensionClassHolder.getPersonBelongGroupThreadLocal();
//查人员分组
List<Map<String, Object>> personnelGroups = personBelongGroup.get(pbdx) == null ? Lists.newArrayList() : personBelongGroup.get(pbdx);
Map<String, List<Map<String, Object>>> personnelGroupsCollect = personnelGroups.stream().collect(Collectors.groupingBy(e -> e.get("mainid").toString()));
Set<String> personnelGroupIds = personnelGroups.stream().map(e -> e.get("mainid").toString()).collect(Collectors.toSet());
if (personnelGroupIds.size() > 0) {
personGroupList = allScheduleList.stream().filter(e->personnelGroupIds.contains(e.get("pbdxryfz")) &&
DateUtil.getTime(e.get("bcrq").toString()).compareTo(DateUtil.getTime(startDate))>=0 &&
DateUtil.getTime(e.get("bcrq").toString()).compareTo(DateUtil.getTime(endDate))<=0).collect(Collectors.toList());
}
personGroupList = personGroupList.stream().filter(e -> {
String bcrq = e.get("bcrq").toString();
String pbdxryfz = e.get("pbdxryfz").toString();
Map<String, Object> personnelGroup = personnelGroupsCollect.get(pbdxryfz).get(personnelGroupsCollect.get(pbdxryfz).size() - 1);
String edate = Util.null2String(personnelGroup.get("edate"));
String bdate = Util.null2String(personnelGroup.get("bdate"));
e.put("bdate", bdate);
if ((!"".equals(bdate) && DateUtil.getTime(bcrq).compareTo(DateUtil.getTime(bdate)) < 0) ||
(!"".equals(edate) && DateUtil.getTime(bcrq).compareTo(DateUtil.getTime(edate)) > 0)) {
return false;
} else {
return true;
}
}).collect(Collectors.toList());
//部门数据
List<Map<String, Object>> departmentList = Lists.newArrayList();
//查询部门数据
Map<String, Map<String, Object>> personInformationThreadLocal = ExtensionClassHolder.getPersonInformationThreadLocal();
Map<String, Object> personInformationMap = personInformationThreadLocal.get(pbdx);
String pdeptids = Util.null2String(personInformationMap.get("pdeptids"));
String subcompanyid1 = Util.null2String(personInformationMap.get("subcompanyid1"));
List<String> pdeptidList = Lists.newArrayList(pdeptids.split(","));
List<String> subcompanyList = Lists.newArrayList(subcompanyid1.split(","));
departmentList = allScheduleList.stream().filter(e->pdeptidList.contains(e.get("pbdxbm")) &&
DateUtil.getTime(e.get("bcrq").toString()).compareTo(DateUtil.getTime(startDate))>=0 &&
DateUtil.getTime(e.get("bcrq").toString()).compareTo(DateUtil.getTime(endDate))<=0).collect(Collectors.toList());
//分部数据
List<Map<String, Object>> subCompanyList = Lists.newArrayList();
//查询人员分部
subCompanyList = allScheduleList.stream().filter(e->subcompanyList.contains(e.get("pbdxfb")) &&
DateUtil.getTime(e.get("bcrq").toString()).compareTo(DateUtil.getTime(startDate))>=0 &&
DateUtil.getTime(e.get("bcrq").toString()).compareTo(DateUtil.getTime(endDate))<=0).collect(Collectors.toList());
//排班途径枚举集合
dataList.addAll(personGroupList);
dataList.addAll(departmentList);
dataList.addAll(subCompanyList);
Map<String, List<Map<String, Object>>> dataCollect = dataList.stream().collect(Collectors.groupingBy(e -> e.get("pbtj").toString()));
for (SchedulingApproachEnum schedulingApproachEnum : SchedulingApproachEnum.values()) {
List<Map<String, Object>> resulstList = dataCollect.get(schedulingApproachEnum.getKey());
if (resulstList == null || resulstList.size() == 0) {
continue;
}
Map<String, List<Map<String, Object>>> resulstCollect = resulstList.stream().collect(Collectors.groupingBy(e -> Util.null2String(e.get("bcrq"))));
for (Map.Entry<String, List<Map<String, Object>>> entry : resulstCollect.entrySet()) {
String bcrq = entry.getKey();
List<Map<String, Object>> scheduleList = entry.getValue();
if (scheduleList.size() > 1) {
//优先级。人员 》人员分组》部门》分部
List<Map<String, Object>> psersonList = scheduleList.stream().filter(e -> !Util.null2String(e.get("pbdxry")).equals("")).collect(Collectors.toList());
if (psersonList.size() == 0) {
psersonList = scheduleList.stream().filter(e -> !Util.null2String(e.get("pbdxryfz")).equals("")).collect(Collectors.toList());
if (psersonList.size() > 1) {
psersonList = psersonList.stream().sorted(Comparator.comparing(e -> DateUtil.getTime(e.get("bdate").toString()).toInstant(ZoneOffset.of("+8")).toEpochMilli())).collect(Collectors.toList());
psersonList = Lists.newArrayList(psersonList.get(psersonList.size() - 1));
}
}
if (psersonList.size() == 0) {
psersonList = scheduleList.stream().filter(e -> !Util.null2String(e.get("pbdxbm")).equals("")).collect(Collectors.toList());
}
if (psersonList.size() == 0) {
psersonList = scheduleList.stream().filter(e -> !Util.null2String(e.get("pbdxfb")).equals("")).collect(Collectors.toList());
}
if (psersonList.size() > 0) {
if (schedulingApproachEnum == SchedulingApproachEnum.RULE) {
psersonList = psersonList.stream().sorted(Comparator.comparing(e -> Long.valueOf(e.get("pbgl").toString()))).collect(Collectors.toList());
} else {
psersonList = psersonList.stream().sorted(Comparator.comparing(e -> Long.valueOf(e.get("keyid").toString()))).collect(Collectors.toList());
}
dataTableList.add(psersonList.get(psersonList.size() - 1));
}
} else {
dataTableList.add(scheduleList.get(0));
}
}
}
} catch (Exception e) {
log.error("catch error : {}", e);
}
resultMap.put("dataTableList", dataTableList);
log.debug("dataTableList total size : {}", dataTableList.size());
return resultMap;
}
}

@ -470,6 +470,63 @@ public class PersongroupCommonUtil {
return userIds; return userIds;
} }
/**
* id
* @param personnelGroupingList
* @return userIDs
*/
public static Map<String,Map<String,String>> getUserIdsByPersonnelGrouping(List<Map<String,Object>> personnelGroupingList){
log.debug("getUserIdsByPersonnelGrouping personnelGroupingList :[{}]",personnelGroupingList);
Map<String,Map<String,String>> userMap = Maps.newHashMap();
for (Map<String,Object> data:personnelGroupingList){
//生效日期
String bdate = Util.null2String(data.get("bdate"));
//失效日期
String edate = Util.null2String(data.get("edate"));
Map<String,String> map = Maps.newHashMap();
map.put("bdate",bdate);
map.put("edate",edate);
String empid = Util.null2String(data.get("empid"));
String filters = Util.null2String(data.get("filters"));
String list_type = Util.null2String(data.get("list_type"));
String sqltj = Util.null2String(data.get("sqltj"));
if (PersonGroupListTypeEnum.PERSON.getKey().equals(list_type) && !"".equals(empid)){
//人员清单
userMap.put(empid,map);
}else if (PersonGroupListTypeEnum.CONDITION.getKey().equals(list_type) && !"".equals(filters)){
filters = filters.replace("","and");
filters = filters.replace("","or");
//条件清单
String sql = "select id,seclevel from hrmresource where 1=1 ";
if (filters.contains("field")){
sql = "select a.id,a.seclevel from hrmresource a left join cus_fielddata b on a.id=b.id where scope='HrmCustomFieldByInfoType' and "+filters;
}else {
sql = sql+ " and "+filters;
}
log.debug("getPersonnelGroupingByPerson filter sql : {}",sql);
List<Map<String,Object>> dataList = DbTools.getSqlToList(sql);
for (Map<String,Object> dataMap :dataList){
String hrmId = Util.null2String(dataMap.get("id"));
userMap.put(hrmId,map);
}
}else if (PersonGroupListTypeEnum.SQLCONDITION.getKey().equals(list_type) && !"".equals(sqltj)){
sqltj = Utils.converSQL(sqltj);
log.info("getPersonnelGroupingByPerson sqltj : [{}]",sqltj);
List<Map<String,Object>> dataList = DbTools.getSqlToList(sqltj);
for (Map<String,Object> dataMap :dataList){
String hrmId = Util.null2String(dataMap.get("id"));
userMap.put(hrmId,map);
}
}
}
log.debug("userIds size :[{}]",userMap.size());
return userMap;
}
/** /**
* *
* @return * @return

@ -24,19 +24,23 @@ public interface SchedulingResultsService {
* @return * @return
*/ */
Map<String,Object> saveScheduleResult(Map<String,Object> params); Map<String,Object> saveScheduleResult(Map<String,Object> params);
/** /**
* *
* @param params * @param params
* @return * @return
*/ */
Map<String,Object> generateSchedule(Map<String,Object> params); Map<String,Object> generateSchedule(Map<String,Object> params);
/** /**
* *
* @param params * @param params
* @return * @return
*/ */
Map<String,Object> deleteBatchSchedule(Map<String,Object> params); Map<String,Object> deleteBatchSchedule(Map<String,Object> params);
/**
* 使
* @param params
* @return
*/
Map<String,Object> getUseSchedule(Map<String,Object> params);
} }

@ -117,4 +117,13 @@ public class SchedulingResultsServiceImpl extends Service implements SchedulingR
return commandExecutor.execute(new DeleteBatchScheduleCmd(params)); return commandExecutor.execute(new DeleteBatchScheduleCmd(params));
} }
@Override
public Map<String, Object> getUseSchedule(Map<String, Object> params) {
Map<String, Object> result = commandExecutor.execute(new GetScheduleFoAnalysisCmd(params));
Map<String, Object> resultMap = Maps.newHashMap();
List<Map<String, Object>> dataTableList = (List<Map<String, Object>>)result.get("dataTableList");
resultMap.put("data",Utils.getSchedulingList(dataTableList));
return resultMap;
}
} }

@ -95,7 +95,7 @@ public class VocationCmd extends AbstractCommonCommand<Map<String,Object>> {
vocation.put("ljcrglyfslwzValue","0"); vocation.put("ljcrglyfslwzValue","0");
} }
vocation.put("zyzValue",getUserIds(vocation)); // vocation.put("zyzValue",getUserIds(vocation));
} }
log.debug("VocationCmd params: [{}]",params); log.debug("VocationCmd params: [{}]",params);
String edfffs = Util.null2String(vocationList.get(0).get("edfffs")); String edfffs = Util.null2String(vocationList.get(0).get("edfffs"));
@ -113,8 +113,7 @@ public class VocationCmd extends AbstractCommonCommand<Map<String,Object>> {
String edyj = Util.null2String(vocation.get("edyj")); String edyj = Util.null2String(vocation.get("edyj"));
if (edyj.equals("3") || edyj.equals("4")){ if (edyj.equals("3") || edyj.equals("4")){
String zyz = Util.null2String(vocation.get("zyz")); String zyz = Util.null2String(vocation.get("zyz"));
zyz = zyz.replace("","and"); zyz = Utils.converSQL(zyz);
zyz = zyz.replace("","or");
List<Map<String,Object>> dataList = DbTools.getSqlToList(zyz); List<Map<String,Object>> dataList = DbTools.getSqlToList(zyz);
userIds = dataList.stream().map(e->Util.null2String(e.get("id"))).collect(Collectors.toList()); userIds = dataList.stream().map(e->Util.null2String(e.get("id"))).collect(Collectors.toList());
} }

@ -5,7 +5,8 @@ import com.engine.jucailinkq.attendance.attendanceplan.service.impl.AttendancePl
import com.engine.jucailinkq.attendance.vacation.cmd.HandleOverdueVocationCmd; import com.engine.jucailinkq.attendance.vacation.cmd.HandleOverdueVocationCmd;
import com.engine.jucailinkq.attendance.vacation.cmd.VocationCmd; import com.engine.jucailinkq.attendance.vacation.cmd.VocationCmd;
import com.engine.jucailinkq.attendance.vacation.service.VocationService; import com.engine.jucailinkq.attendance.vacation.service.VocationService;
import com.engine.jucailinkq.common.cmd.GetPersonDateBySuitOrganzation;
import com.engine.jucailinkq.common.cmd.GetPersonVocationBySuitOrganzation;
import com.engine.jucailinkq.common.util.CommonUtil; import com.engine.jucailinkq.common.util.CommonUtil;
import com.engine.jucailinkq.common.util.DateUtil; import com.engine.jucailinkq.common.util.DateUtil;
import com.engine.jucailinkq.common.util.DbTools; import com.engine.jucailinkq.common.util.DbTools;
@ -31,7 +32,7 @@ public class VocationServiceImpl extends Service implements VocationService {
String modeId = Util.null2String(params.get("modeId")); String modeId = Util.null2String(params.get("modeId"));
Map<String,Object> param = Maps.newHashMap(); Map<String,Object> param = Maps.newHashMap();
param.put("modeId",modeId); param.put("modeId",modeId);
Map<String,Object> result = commandExecutor.execute(new GetPersonDateBySuitOrganzation(param)); Map<String,Object> result = commandExecutor.execute(new GetPersonVocationBySuitOrganzation(param));
String sql = "select a.id userid,a.*,b.* from hrmresource a left join cus_fielddata b on a.id=b.id where a.id in ("; String sql = "select a.id userid,a.*,b.* from hrmresource a left join cus_fielddata b on a.id=b.id where a.id in (";

@ -1,5 +1,6 @@
package com.engine.jucailinkq.attendance.workflow.action.askforleave; package com.engine.jucailinkq.attendance.workflow.action.askforleave;
import com.engine.jucailinkq.attendance.workflow.enums.WorkFlowTypeEnum;
import com.engine.jucailinkq.common.util.CommonUtil; import com.engine.jucailinkq.common.util.CommonUtil;
import com.engine.jucailinkq.common.util.DateUtil; import com.engine.jucailinkq.common.util.DateUtil;
import com.engine.jucailinkq.common.util.DbTools; import com.engine.jucailinkq.common.util.DbTools;
@ -37,13 +38,13 @@ public class BatchAskForLeaveWorkFlowBackAction implements Action {
String jlzt = Util.null2String(qjllData.get("jlzt")); String jlzt = Util.null2String(qjllData.get("jlzt"));
// 流程表单主表数据 // 流程表单主表数据
HashMap<String,String> mainTableData = CommonUtil.getMainTableInfo(requestInfo); HashMap<String,String> mainTableData = CommonUtil.getMainTableInfo(requestInfo, WorkFlowTypeEnum.ASKFORLEAVE);
log.info("mainTableData : [{}]",mainTableData); log.info("mainTableData : [{}]",mainTableData);
// 流程表单明细表1数据 // 流程表单明细表1数据
List<Map<String, String>> detailTableData = CommonUtil.getDetailTableInfo(requestInfo,0); List<Map<String, String>> detailTableData = CommonUtil.getDetailTableInfo(requestInfo,0,WorkFlowTypeEnum.ASKFORLEAVE);
log.info("detailTableData : [{}]",detailTableData); log.info("detailTableData : [{}]",detailTableData);
String detail1TableName = requestInfo.getDetailTableInfo().getDetailTable()[0].getTableDBName(); String detail1TableName = CommonUtil.getDetailTableInfoTableName(requestInfo.getDetailTableInfo().getDetailTable()[1].getTableDBName(),1,WorkFlowTypeEnum.ASKFORLEAVE);
log.info("detail1ableName : [{}]", detail1TableName); log.info("detail1ableName : [{}]", detail1TableName);
//流程表单明细表2数据 //流程表单明细表2数据

@ -5,7 +5,8 @@ import com.engine.jucailinkq.attendance.attendanceplan.service.AttendancePlanSer
import com.engine.jucailinkq.attendance.attendanceplan.service.impl.AttendancePlanServiceImpl; import com.engine.jucailinkq.attendance.attendanceplan.service.impl.AttendancePlanServiceImpl;
import com.engine.jucailinkq.attendance.vacation.cmd.VocationCmd; import com.engine.jucailinkq.attendance.vacation.cmd.VocationCmd;
import com.engine.jucailinkq.attendance.workflow.enums.WorkFlowTypeEnum; import com.engine.jucailinkq.attendance.workflow.enums.WorkFlowTypeEnum;
import com.engine.jucailinkq.common.cmd.GetPersonDateBySuitOrganzation;
import com.engine.jucailinkq.common.cmd.GetPersonVocationBySuitOrganzation;
import com.engine.jucailinkq.common.util.CommonUtil; import com.engine.jucailinkq.common.util.CommonUtil;
import com.engine.jucailinkq.common.util.DateUtil; import com.engine.jucailinkq.common.util.DateUtil;
import com.engine.jucailinkq.common.util.DbTools; import com.engine.jucailinkq.common.util.DbTools;
@ -40,7 +41,7 @@ public class GenerateWorkflowVocationAction implements Action {
params.put("cover","1"); params.put("cover","1");
CommonUtil.initExtensionClassHolder(); CommonUtil.initExtensionClassHolder();
Map<String,Object> result = new GetPersonDateBySuitOrganzation(params).execute(null); Map<String,Object> result = new GetPersonVocationBySuitOrganzation(params).execute(null);
String queryDepartEmployeeSql = "select resourceid ,changedate,type_n from HRMSTATUSHISTORY where type_n = 5 or type_n = 7 and resourceid=?"; String queryDepartEmployeeSql = "select resourceid ,changedate,type_n from HRMSTATUSHISTORY where type_n = 5 or type_n = 7 and resourceid=?";
//获取离职日期 //获取离职日期

@ -7,6 +7,8 @@ import com.engine.jucailinkq.attendance.component.persongroup.commonutil.Persong
import com.engine.jucailinkq.attendance.enums.ApplicableOrganizationEnum; import com.engine.jucailinkq.attendance.enums.ApplicableOrganizationEnum;
import com.engine.jucailinkq.common.util.DateUtil; import com.engine.jucailinkq.common.util.DateUtil;
import com.engine.jucailinkq.common.util.DbTools; import com.engine.jucailinkq.common.util.DbTools;
import com.engine.jucailinkq.common.util.ExtensionClassHolder;
import com.google.common.collect.Lists;
import com.google.common.collect.Maps; import com.google.common.collect.Maps;
import com.google.common.collect.Sets; import com.google.common.collect.Sets;
import weaver.general.Util; import weaver.general.Util;
@ -35,15 +37,18 @@ public class GetPersonBySuitOrganzationCmd extends AbstractCommonCommand<Map<Str
String sql = "select dxlx,aqjb,dataid,dx from uf_jcl_syzz where modeid=? order by id desc"; String sql = "select dxlx,aqjb,dataid,dx from uf_jcl_syzz where modeid=? order by id desc";
//适用组织所有值集合 //适用组织所有值集合
List<Map<String,Object>> organzationList = DbTools.getSqlToList(sql,modeId); List<Map<String,Object>> organzationList = DbTools.getSqlToList(sql,modeId);
Map<String,Object> resultMap = Maps.newHashMap();
//人力资源id假别规则id //人力资源id
Map<String,Object> personMap = Maps.newHashMap(); Map<String,Object> personMap = Maps.newHashMap();
//人员分组id假别规则id //人员分组id
Map<String,Object> personOrganzationMap = Maps.newHashMap(); Map<String,Object> personOrganzationMap = Maps.newHashMap();
//部门id假别规则id //部门id
Map<String,Object> departMentMap = Maps.newHashMap(); Map<String,Object> departMentMap = Maps.newHashMap();
//分部id假别规则id //分部id
Map<String,Object> subCompanyMap = Maps.newHashMap(); Map<String,Object> subCompanyMap = Maps.newHashMap();
//人员所在的所有数据id
Map<String,List<Map<String,String>>> personAllData = Maps.newHashMap();
for (Map<String,Object> organzation:organzationList){ for (Map<String,Object> organzation:organzationList){
@ -56,6 +61,17 @@ public class GetPersonBySuitOrganzationCmd extends AbstractCommonCommand<Map<Str
} }
if (ApplicableOrganizationEnum.PERSONNEL.getKey().equals(dxlx)){ if (ApplicableOrganizationEnum.PERSONNEL.getKey().equals(dxlx)){
personMap.put(dx,dataid); personMap.put(dx,dataid);
List<Map<String,String>> dataList = personAllData.get(dx);
if (dataList==null){
dataList = Lists.newArrayList();
personAllData.put(dx,dataList);
}
if (dataList.stream().filter(e->e.get("dataid").equals(dataid)).collect(Collectors.toList()).size() == 0){
Map<String,String> dataMap = Maps.newHashMap();
dataMap.put("dataid",dataid);
dataMap.put("priority","0");
dataList.add(dataMap);
}
}else if (ApplicableOrganizationEnum.PERSONNEL_GROUP.getKey().equals(dxlx)){ }else if (ApplicableOrganizationEnum.PERSONNEL_GROUP.getKey().equals(dxlx)){
personOrganzationMap.put(dx,dataid); personOrganzationMap.put(dx,dataid);
}else if (ApplicableOrganizationEnum.DEPARTMENT.getKey().equals(dxlx)){ }else if (ApplicableOrganizationEnum.DEPARTMENT.getKey().equals(dxlx)){
@ -68,12 +84,38 @@ public class GetPersonBySuitOrganzationCmd extends AbstractCommonCommand<Map<Str
sql = "select a.list_type,b.mainid,b.empid,b.filters,b.bdate,b.edate,b.sqltj from uf_ryqz a left join uf_ryqz_dt1 b on a.id=b.mainid where a.id=?"; sql = "select a.list_type,b.mainid,b.empid,b.filters,b.bdate,b.edate,b.sqltj from uf_ryqz a left join uf_ryqz_dt1 b on a.id=b.mainid where a.id=?";
for (Map.Entry<String,Object> entrySet: personOrganzationMap.entrySet()){ for (Map.Entry<String,Object> entrySet: personOrganzationMap.entrySet()){
List<Map<String,Object>> personnelGrouping = DbTools.getSqlToList(sql,entrySet.getKey()); List<Map<String,Object>> personnelGrouping = DbTools.getSqlToList(sql,entrySet.getKey());
Set<String> userIds = PersongroupCommonUtil.getUserIdsByPersonnelGrouping(personnelGrouping, DateUtil.getCurrentDate()); String dataid = entrySet.getValue().toString();
for (String userId:userIds){ Map<String,Map<String,String>> userIdMap = PersongroupCommonUtil.getUserIdsByPersonnelGrouping(personnelGrouping);
for (Map.Entry<String,Map<String,String>> entry :userIdMap.entrySet()){
String userId = entry.getKey();
Map<String,String> map = entry.getValue();
if (personMap.get(userId) == null){ if (personMap.get(userId) == null){
personMap.put(userId,entrySet.getValue()); personMap.put(userId,dataid);
}
List<Map<String,String>> dataList = personAllData.get(userId);
if (dataList==null){
dataList = Lists.newArrayList();
personAllData.put(userId,dataList);
}
if (dataList.stream().filter(e->e.get("dataid").equals(dataid)).collect(Collectors.toList()).size() == 0){
Map<String,String> dataMap = Maps.newHashMap();
dataMap.put("dataid",dataid);
dataMap.put("bdate",map.get("bdate"));
dataMap.put("edate",map.get("edate"));
dataMap.put("priority","1");
dataList.add(dataMap);
}else {
for (Map<String,String> dataMap:dataList){
if (dataMap.get("dataid").equals(dataid) && dataMap.get("bdate") != null){
dataMap.put("bdate",map.get("bdate"));
dataMap.put("edate",map.get("edate"));
dataMap.put("priority","1");
}
}
} }
} }
} }
} }
if (departMentMap.size() > 0){ if (departMentMap.size() > 0){
@ -97,6 +139,20 @@ public class GetPersonBySuitOrganzationCmd extends AbstractCommonCommand<Map<Str
if (personMap.get(userMap.get("id").toString()) == null){ if (personMap.get(userMap.get("id").toString()) == null){
personMap.put(userMap.get("id").toString(),entrySet.getValue()); personMap.put(userMap.get("id").toString(),entrySet.getValue());
} }
String userId = userMap.get("id").toString();
String dataid = entrySet.getValue().toString();
List<Map<String,String>> list = personAllData.get(userId);
if (list==null){
list = Lists.newArrayList();
personAllData.put(userId,list);
}
if (list.stream().filter(e->e.get("dataid").equals(dataid)).collect(Collectors.toList()).size() == 0){
Map<String,String> dataMap = Maps.newHashMap();
dataMap.put("dataid",dataid);
dataMap.put("priority","2");
list.add(dataMap);
}
} }
} }
} }
@ -121,10 +177,25 @@ public class GetPersonBySuitOrganzationCmd extends AbstractCommonCommand<Map<Str
if (personMap.get(userMap.get("id").toString()) == null){ if (personMap.get(userMap.get("id").toString()) == null){
personMap.put(userMap.get("id").toString(),entrySet.getValue()); personMap.put(userMap.get("id").toString(),entrySet.getValue());
} }
String userId = userMap.get("id").toString();
String dataid = entrySet.getValue().toString();
List<Map<String,String>> list = personAllData.get(userId);
if (list==null){
list = Lists.newArrayList();
personAllData.put(userId,list);
}
if (list.stream().filter(e->e.get("dataid").equals(dataid)).collect(Collectors.toList()).size() == 0){
Map<String,String> dataMap = Maps.newHashMap();
dataMap.put("dataid",dataid);
dataMap.put("priority","3");
list.add(dataMap);
}
} }
} }
} }
resultMap.put("personMap",personMap);
resultMap.put("personAllData",personAllData);
return personMap; return resultMap;
} }
} }

@ -6,6 +6,7 @@ import com.engine.common.entity.BizLogContext;
import com.engine.jucailinkq.common.util.DbTools; import com.engine.jucailinkq.common.util.DbTools;
import com.engine.core.interceptor.CommandContext; import com.engine.core.interceptor.CommandContext;
import com.engine.jucailinkq.common.util.Utils; import com.engine.jucailinkq.common.util.Utils;
import com.google.common.collect.Lists;
import com.google.common.collect.Maps; import com.google.common.collect.Maps;
import com.google.common.collect.Sets; import com.google.common.collect.Sets;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
@ -21,14 +22,14 @@ import java.util.stream.Collectors;
* modeid * modeid
*/ */
@Slf4j @Slf4j
public class GetPersonDateBySuitOrganzation extends AbstractCommonCommand<Map<String,Object>> { public class GetPersonVocationBySuitOrganzation extends AbstractCommonCommand<Map<String,Object>> {
@Override @Override
public BizLogContext getLogContext() { public BizLogContext getLogContext() {
return null; return null;
} }
public GetPersonDateBySuitOrganzation(Map<String,Object> params){ public GetPersonVocationBySuitOrganzation(Map<String,Object> params){
this.params=params; this.params=params;
} }
@ -55,9 +56,9 @@ public class GetPersonDateBySuitOrganzation extends AbstractCommonCommand<Map<St
Map<String,String> vacationMap = Maps.newHashMap(); Map<String,String> vacationMap = Maps.newHashMap();
for (Map<String,Object> vocation:vacationList){ for (Map<String,Object> vocation:vacationList){
vacationMap.put(vocation.get("dataid").toString(),vocation.get("jb").toString()); vacationMap.put(vocation.get("dataid").toString(),vocation.get("jb").toString());
vocation.put("zyzValue",getUserIds(vocation));
} }
Map<String,List<Map<String,Object>>> vacationGroupByDataIdMap = vacationList.stream().collect(Collectors.groupingBy(e->e.get("dataid").toString())); Map<String,List<Map<String,Object>>> vacationGroupByDataIdMap = vacationList.stream().collect(Collectors.groupingBy(e->e.get("dataid").toString()));
@ -283,4 +284,16 @@ public class GetPersonDateBySuitOrganzation extends AbstractCommonCommand<Map<St
return personGroupUserIds; return personGroupUserIds;
} }
public List<String> getUserIds(Map<String,Object> vocation){
List<String> userIds = Lists.newArrayList();
String edyj = Util.null2String(vocation.get("edyj"));
if (edyj.equals("3") || edyj.equals("4")){
String zyz = Util.null2String(vocation.get("zyz"));
zyz = Utils.converSQL(zyz);
List<Map<String,Object>> dataList = DbTools.getSqlToList(zyz);
userIds = dataList.stream().map(e->Util.null2String(e.get("id"))).collect(Collectors.toList());
}
return userIds;
}
} }

@ -10,4 +10,6 @@ public interface CommonService {
Map<String,Object> updateCommon(Map<String,Object> param); Map<String,Object> updateCommon(Map<String,Object> param);
Map<String,Object> insertCommon(Map<String,Object> param); Map<String,Object> insertCommon(Map<String,Object> param);
Map<String,Object> getPersonBySuitOrganzation(Map<String,Object> param);
} }

@ -1,5 +1,6 @@
package com.engine.jucailinkq.common.service.impl; package com.engine.jucailinkq.common.service.impl;
import com.engine.jucailinkq.common.cmd.GetPersonBySuitOrganzationCmd;
import com.engine.jucailinkq.common.cmd.QueryCommonCmd; import com.engine.jucailinkq.common.cmd.QueryCommonCmd;
import com.engine.jucailinkq.common.service.CommonService; import com.engine.jucailinkq.common.service.CommonService;
import com.engine.jucailinkq.common.util.CommonUtil; import com.engine.jucailinkq.common.util.CommonUtil;
@ -39,4 +40,9 @@ public class CommonServiceImpl extends Service implements CommonService {
return result; return result;
} }
@Override
public Map<String, Object> getPersonBySuitOrganzation(Map<String, Object> param) {
return commandExecutor.execute(new GetPersonBySuitOrganzationCmd(param));
}
} }

@ -438,7 +438,7 @@ public class CommonUtil {
if (mappingMap.size() != 0){ if (mappingMap.size() != 0){
for (Map<String, String> detailData:detailDataList){ for (Map<String, String> detailData:detailDataList){
Map<String, String> resultMap = Maps.newHashMap(); Map<String, String> resultMap = Maps.newHashMap();
resultMap.putAll(resultMap); resultMap.putAll(detailData);
for (Map.Entry<String,Object> entry :mappingMap.entrySet()){ for (Map.Entry<String,Object> entry :mappingMap.entrySet()){
if (entry.getValue()!=null && !"".equals(entry.getValue())){ if (entry.getValue()!=null && !"".equals(entry.getValue())){
resultMap.put(entry.getKey(),detailData.get(entry.getValue())); resultMap.put(entry.getKey(),detailData.get(entry.getValue()));

@ -124,6 +124,16 @@ public class DateUtil {
public static LocalDateTime getTime(String time){ public static LocalDateTime getTime(String time){
int length = time.length(); int length = time.length();
switch (length){ switch (length){
case 9:
String[] times = time.split("-");
if (times[1].length()==1){
times[1] = "0"+times[1];
}else if (times[2].length()==1){
times[2] = "0"+times[2];
}
time = times[0]+"-"+times[1]+"-"+times[2];
return LocalDate.parse(time, yyyyMMdd).atStartOfDay();
case 10: case 10:
return LocalDate.parse(time, yyyyMMdd).atStartOfDay(); return LocalDate.parse(time, yyyyMMdd).atStartOfDay();
case 19: case 19:

Loading…
Cancel
Save