出勤分析整体性能优化

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 analysisDate = Util.null2String(params.get("analysisDate"));
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>> askForLeaveList = DbTools.getSqlToList(sql,userId,DateUtil.AfterDay(analysisDate,1), DateUtil.beforeDay(analysisDate,1));
List<Map<String, Object>> attendanceItems = (List<Map<String, Object>>)params.get("attendanceItems");
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();
@ -53,7 +57,7 @@ public class GetAskForLeaveCmd extends AbstractCommonCommand<Map<String,Object>>
List<Map<String,Object>> haveAskForLeaveList = askForLeaveList.stream().filter(e->{
String kssj = e.get("ksrq")+" "+e.get("kssj");
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());
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 ){
@ -76,20 +80,7 @@ public class GetAskForLeaveCmd extends AbstractCommonCommand<Map<String,Object>>
return resultMap;
}
sql = "select * from uf_jcl_kq_kqxm where id in ("+String.join(",",jplxSet)+")";
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")));
}
}
}
List<Map<String,Object>> askForLeaveItemList = attendanceItems.stream().filter(e->jplxSet.contains(e.get("keyid").toString())).collect(Collectors.toList());
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");
params.put("modeId",modeId);
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> subcompanyids = userList.stream().map(e->e.get("subcompanyid1").toString()).collect(Collectors.toSet());
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.entity.BizLogContext;
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.Utils;
import com.engine.core.interceptor.CommandContext;
@ -125,16 +124,16 @@ public class GetClockInTimeListCmd extends AbstractCommonCommand<Map<String,Obje
//当最早打卡时间点在前一天时,获取前一天的出勤结果打卡数据
String earliestDate = DateUtil.beforeDay(needGetDate,1);
Map<String,Object> clockIntime = clockInTimeMap.get(earliestDate);
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<=?";
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()));
clockIntime = attendanceCollect.get(earliestDate) == null?null:attendanceCollect.get(earliestDate).get(0);
if (clockIntime == null || clockIntime.size()==0){
//取不到当天的就再往前取一天
clockIntime = attendanceCollect.get(DateUtil.beforeDay(earliestDate,1)) == null?null:attendanceCollect.get(DateUtil.beforeDay(earliestDate,1)).get(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<=?";
// 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()));
// clockIntime = attendanceCollect.get(earliestDate) == null?null:attendanceCollect.get(earliestDate).get(0);
// if (clockIntime == null || clockIntime.size()==0){
// //取不到当天的就再往前取一天
// clockIntime = attendanceCollect.get(DateUtil.beforeDay(earliestDate,1)) == null?null:attendanceCollect.get(DateUtil.beforeDay(earliestDate,1)).get(0);
// }
// }
if (clockIntime !=null && clockIntime.size()>0){
for (int i=8;i>0;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 earliestTime = date+" 00:00:00";
Map<String,Object> clockIntime = clockInTimeMap.get(date);
// 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<=?";
// 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()));
// 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){
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);
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);
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){
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 analysisDate = Util.null2String(params.get("analysisDate"));
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)";
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));
List<Map<String, Object>> attendanceItems = (List<Map<String, Object>>)params.get("attendanceItems");
List<Map<String, Object>> evectionList = (List<Map<String, Object>>)params.get("evectionList");
// 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();
@ -54,7 +59,7 @@ public class GetEvectionCmd extends AbstractCommonCommand<Map<String,Object>> {
List<Map<String,Object>> haveEvectionList = evectionList.stream().filter(e->{
String kssj = e.get("ksrq")+" "+e.get("kssj");
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());
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){
@ -74,20 +79,9 @@ public class GetEvectionCmd extends AbstractCommonCommand<Map<String,Object>> {
if (cclxSet.size() == 0){
return resultMap;
}
sql = "select * from uf_jcl_kq_kqxm where id in ("+String.join(",",cclxSet)+")";
List<Map<String,Object>> evectionItemList = DbTools.getSqlToList(sql);
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")));
}
}
// sql = "select * from uf_jcl_kq_kqxm where id in ("+String.join(",",cclxSet)+")";
List<Map<String,Object>> evectionItemList = attendanceItems.stream().filter(e->cclxSet.contains(e.get("keyid").toString())).collect(Collectors.toList());
}
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
public Map<String, Object> execute(CommandContext commandContext) {
/** 班次信息*/
//考勤项目
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");
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);
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 bcxxIds = "";
//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 (";
List<String> bcxxIdList = Lists.newArrayList();
for (Map.Entry<String,List<Map<String,Object>>> entry :schedulingMap.entrySet()){
if (!entry.getKey().equals("")){
bcxxIds +=entry.getKey() +",";
bcxxIdList.add(entry.getKey());
}
}
List<Map<String,Object>> dataList = Lists.newArrayList();
if (!"".equals(bcxxIds)){
bcxxIds = bcxxIds.substring(0,bcxxIds.length()-1);
sql = sql +bcxxIds+") order by b.gsrq,b.kssj";
dataList = DbTools.getSqlToList(sql);
if (bcxxIdList.size()>0){
dataList = allClassInfoList.stream().filter(e->bcxxIdList.contains(e.get("bcxx"))).collect(Collectors.toList());
Map<String,List<Map<String,Object>>> dataMap = dataList.stream().collect(Collectors.groupingBy(e->Util.null2String(e.get("bcxx"))));
List<Map<String, Object>> finalAttendanceItems = attendanceItems;
@ -109,7 +112,7 @@ public class GetScheduleResultListCmd extends AbstractCommonCommand<Map<String,O
*/
Map<String,Object> clockInTimeDataMap = Maps.newHashMap();
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");
for(Map<String,Object> data:bcData){
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 = DbTools.getSqlToList(sql,params.get("pbdx"),params.get("startDate"),params.get("endDate")).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(params.get("startDate").toString())) >=0 &&
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()){
@ -137,9 +140,7 @@ public class GetScheduleResultListCmd extends AbstractCommonCommand<Map<String,O
}else {
map.put("sfkt","0");
}
//查找对应的考勤项目
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"));
List<Map<String,Object>> overPlanattendanceItems = attendanceItems.stream().filter(f->f.get("keyid").equals(overtimePlan.get("jblx"))).collect(Collectors.toList());
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;
}
public List<Map<String,Object>> getDate(Map<String,Object> param){
String userId = params.get("pbdx").toString();
String nd = Util.null2String(param.get("nd"));
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=? ";
List<Map<String,Object>> dataList=null;
if ("".equals(glpb)){
sql = "select subcompanyid1 from hrmresource where id =?";
Map<String,Object> departMentMap = DbTools.getSqlToMap(sql,userId);
String subcompanyid1 = departMentMap.get("subcompanyid1").toString();
dataList = Utils.getDefaultDateList(subcompanyid1,nd);
}else {
dataList = DbTools.getSqlToList(sql,glpb,nd);
}
return dataList;
}
// public List<Map<String,Object>> getDate(Map<String,Object> param){
// String userId = params.get("pbdx").toString();
// String nd = Util.null2String(param.get("nd"));
// 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=? ";
// List<Map<String,Object>> dataList=null;
// if ("".equals(glpb)){
// sql = "select subcompanyid1 from hrmresource where id =?";
// Map<String,Object> departMentMap = DbTools.getSqlToMap(sql,userId);
// String subcompanyid1 = departMentMap.get("subcompanyid1").toString();
// dataList = Utils.getDefaultDateList(subcompanyid1,nd);
// }else {
// dataList = DbTools.getSqlToList(sql,glpb,nd);
// }
// return dataList;
// }
/**
* 1

@ -175,8 +175,9 @@ public class RecordDataCmd extends AbstractCommonCommand<Map<String,Object>> {
DbTools.update(sql,insertDatas.toArray());
}
updateWorkOverTimeDate(userId,analysisDate,overTimeHolidayList,overTimeResultList);
if (overTimeHolidayList.size() > 0 || overTimeResultList.size() >0){
updateWorkOverTimeDate(userId,analysisDate,overTimeHolidayList,overTimeResultList);
}
return null;
}
@ -194,23 +195,25 @@ public class RecordDataCmd extends AbstractCommonCommand<Map<String,Object>> {
String id = Util.null2String(dataList.get(0).get("id"));
//处理加班结果
sql = "select id,jblx,lyid from uf_jcl_kq_jbjg where lyid=? and jbjgly=4";
List<Map<String,Object>> oldOverTimeList = DbTools.getSqlToList(sql,id);
for (Map<String,Object> overTimeResult : overTimeResultList){
overTimeResult.put("lyid",id);
}
try {
updateOverTimeResult(oldOverTimeList,overTimeResultList);
if (overTimeResultList.size() > 0){
sql = "select id,jblx,lyid from uf_jcl_kq_jbjg where lyid=? and jbjgly=4";
List<Map<String,Object>> oldOverTimeList = DbTools.getSqlToList(sql,id);
for (Map<String,Object> overTimeResult : overTimeResultList){
overTimeResult.put("lyid",id);
}
updateOverTimeResult(oldOverTimeList,overTimeResultList);
}
//处理假期余额
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);
for (Map<String,Object> overTimeHoliday : overTimeHolidayList){
overTimeHoliday.put("lyid",id);
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";
List<Map<String,Object>> oldOverTimeHolidayList = DbTools.getSqlToList(sql,id);
for (Map<String,Object> overTimeHoliday : overTimeHolidayList){
overTimeHoliday.put("lyid",id);
}
updateOverTimeHoliday(oldOverTimeHolidayList,overTimeHolidayList);
}
updateOverTimeHoliday(oldOverTimeHolidayList,overTimeHolidayList);
}catch (Exception 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.impl.AllowanceServiceImpl;
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.google.common.collect.Lists;
import com.google.common.collect.Maps;
import com.google.common.collect.Sets;
import com.icbc.api.internal.apache.http.impl.cookie.S;
import lombok.extern.slf4j.Slf4j;
import weaver.general.Util;
import weaver.interfaces.schedule.BaseCronJob;
@ -33,6 +37,7 @@ public class AttendanceAnalysisJob extends BaseCronJob {
private AllowanceService allowanceService = ServiceUtil.getService(AllowanceServiceImpl.class);
private UtilService utilService = ServiceUtil.getService(UtilServiceImpl.class);
private CommonService commonService = ServiceUtil.getService(CommonServiceImpl.class);
private String executeDate;
@Override
@ -45,7 +50,7 @@ public class AttendanceAnalysisJob extends BaseCronJob {
// }
log.info("********AttendanceAnalysisJob executeDate :[{}]********",useDate);
log.info("********AttendanceAnalysisJob prepare start******");
//初始化扩展类
CommonUtil.initExtensionClassHolder();
//入职离职当天是否需要进行考勤分析。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'";
List<Map<String,Object>> userList = DbTools.getSqlToList(queryUserSql);
if ("0".equals(leaveAndEntry) || leaveAndEntry.equals("")){
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()));
@ -76,7 +82,7 @@ public class AttendanceAnalysisJob extends BaseCronJob {
for (Map.Entry<String, Object> entry : attendanceCycle.entrySet()){
Set<String> sets = (Set<String>)entry.getValue();
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(DateUtil.beforeDay(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().map(e->"'"+e+"'").collect(Collectors.toList());
log.info("all need excute date : [{}]",allDateList);
List<List<String>> needAnalysisDateList = Lists.partition(allDateList,200);
List<Map<String,Object>> dataList = Lists.newArrayList();
List<Map<String,Object>> attendaceResult = Lists.newArrayList();
@ -109,7 +115,7 @@ public class AttendanceAnalysisJob extends BaseCronJob {
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);
if (resultList.size() > 0){
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,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){
Map<String,Object> analysisParam = Maps.newHashMap();
String userId = Util.null2String(userMap.get("id"));
//入职日期
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());
//日期对应的打卡数据
Map<String,Map<String,Object>> clockInTimeMap = Maps.newHashMap();
/**获得人员考勤项目*/
Map<String,Object> paramMap = Maps.newHashMap();
paramMap.put("startDate",DateUtil.beforeDay(useDate,1));
paramMap.put("endDate",DateUtil.beforeDay(useDate,1));
paramMap.put("resourceId",userId);
Map<String,Object> dataMap = basicsetService.getAttendanceItemsByPerson(paramMap);
List<Map<String,Object>> attendanceItems = (List<Map<String,Object>>)dataMap.get("data");
/**
*
*/
Map<String,Object> workHourdataMap = basicsetService.getWorkHoursItemByPerson(paramMap);
List<Map<String,Object>> workHourItems = (List<Map<String,Object>>)workHourdataMap.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){
if (attendanceItemGroupByPlan.get(attendancePlan.get("dataid")) != null &&
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();
List<Map<String, Object>> attendaceResultByUser = attendaceGroupById.get(userId);
if (attendaceResultByUser != null && attendaceResultByUser.size() > 0) {
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){
log.error("AttendanceAnalysisJob userId:[{}],analysisDateList: [{}]",userId,analysisDateList);
log.error("AttendanceAnalysisJob error : [{}]",e);
@ -161,6 +253,8 @@ public class AttendanceAnalysisJob extends BaseCronJob {
Map<String,Object> param = Maps.newHashMap();
param.put("startDate",DateUtil.beforeDay(useDate,3));
param.put("endDate",useDate);
log.info("********AttendanceAnalysisJob analysis end********");
log.info("********AttendanceAnalysisJob allowance start********");
allowanceService.addAllowanceRecords(param);
log.info("********AttendanceAnalysisJob end********");
}

@ -7,10 +7,9 @@ public interface ShiftService {
/**
*
* @param empId
* @param params
* @param pbData
* @param clockInData
* @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, List<Map<String, Object>>> getScheduleInfoWithEmpId(List<String> empIdList, String startDate, String endDate);
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.UtilService;
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.ClassBelongToEnum;
import com.engine.jucailinkq.attendance.enums.ClassSegmentTypeEnum;
import com.engine.jucailinkq.attendance.enums.ClockPointEnum;
import com.engine.jucailinkq.common.util.DateUtil;
import com.engine.jucailinkq.common.util.DbTools;
import com.engine.common.util.ServiceUtil;
import com.engine.jucailinkq.common.util.ExtensionClassHolder;
import com.engine.jucailinkq.common.util.Utils;
@ -20,10 +17,6 @@ import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
import lombok.extern.slf4j.Slf4j;
import weaver.general.Util;
import java.math.BigDecimal;
import java.math.MathContext;
import java.math.RoundingMode;
import java.time.ZoneOffset;
import java.util.*;
import java.util.stream.Collectors;
@ -35,40 +28,48 @@ import java.util.stream.Collectors;
**/
@Slf4j
public class ShiftServiceImpl extends Service implements ShiftService {
private AttendancePlanService basicsetService = ServiceUtil.getService(AttendancePlanServiceImpl.class);
private UtilService utilService = ServiceUtil.getService(UtilServiceImpl.class);
private UpdateAttendanceResultWrapper updateAttendanceResultWrapper = ServiceUtil.getService(UpdateAttendanceResultWrapper.class);
/**
* id
* @param empId id
* @param pbData
* @param clockInData 23
* @param params
* @return
*/
@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;
// Map<String, Object> pbData = DbTools.getSqlToMap(pbSql);
String empId = params.get("pbdx").toString();
String shiftTeamId = Util.null2String(pbData.get("hxbz")).split("-")[0];
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> maxPriorityResult = null;
if (!shiftTeamId.equals("")) {
//候选班次
String bcSql = "select * from uf_jcl_kq_hxbz_dt1 where mainid = " + shiftTeamId;
List<Map<String, Object>> bcData = DbTools.getSqlToList(bcSql);
// String bcSql = "select * from uf_jcl_kq_hxbz_dt1 where mainid = " + shiftTeamId;
List<Map<String, Object>> bcData = hxbzList.stream().filter(e->shiftTeamId.equals(e.get("mainid"))).collect(Collectors.toList());
if (bcData.size() > 0) {
log.info("compute waitCompareResultList start");
List<Map<String, Object>> waitCompareResultList = new ArrayList<>();
//循环匹配,输出匹配结果
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")));
waitCompareResultList.add(waitCompareMap);
}
log.info("compute waitCompareResultList end");
//比较匹配结果
log.info("compareMap start");
for (Map<String, Object> compareMap : waitCompareResultList) {
//分析每组数据生成对应的ABCDE
compareMap = countMatchItem(compareMap);
@ -116,11 +117,13 @@ public class ShiftServiceImpl extends Service implements ShiftService {
result = resultE.compareTo(compareE) > 0 ? compareMap : result;
}
}
log.info("compareMap end");
//全天没有打卡时,看上一个工作日的班次为优先,如果前一个工作日也没有班次,按优先级
log.info("maxPriorityResult start");
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;";
Map<String, Object> lastWorkDayInfo = DbTools.getSqlToMap(lastWorkDayInfoSql);
// 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 = attendaceResultMap.get(DateUtil.beforeDay(punchDate,1)).get(0);
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());
if (!bcId.equals("") && bcInfo.size() > 0) {
@ -131,6 +134,7 @@ public class ShiftServiceImpl extends Service implements ShiftService {
result = maxPriorityResult;
}
}
log.info("maxPriorityResult end");
}
}
@ -225,30 +229,28 @@ public class ShiftServiceImpl extends Service implements ShiftService {
/**
*
* @param empId
* @param clockInData 23
* @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<>();
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 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-组装班次数据
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);
//2-拿到当天打卡数据
Map<String, List<Map<String,Object>>> collect = Maps.newHashMap();
if (clockInData != null && clockInData.size() >0){
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();
getClockTimeParam.put("date",punchDate);
@ -267,6 +269,8 @@ public class ShiftServiceImpl extends Service implements ShiftService {
workingHourparam.put("userId",empId);
workingHourparam.put("attendanceItems",attendanceItems);
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> askForLeaveDataMap = updateAttendanceResultWrapper.getAskForLeave(workingHourparam);
//4-调用考勤分析中的卡点数据处理方法
@ -299,7 +303,7 @@ public class ShiftServiceImpl extends Service implements ShiftService {
* @param empId
* @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 schedulingRule = Util.null2String(pbData.get("pbgl"));
@ -312,8 +316,8 @@ public class ShiftServiceImpl extends Service implements ShiftService {
/** 获取人员班次*/
Map<String,Object> classesParamMap = Maps.newHashMap();
classesParamMap.put("tableName","uf_pbjg");
classesParamMap.put("startDate",startBeforeDate);
classesParamMap.put("endDate",endAfterDate);
classesParamMap.put("startDate",punchDate);
classesParamMap.put("endDate",punchDate);
classesParamMap.put("pblx","0");
classesParamMap.put("pbdx",empId);
classesParamMap.put("current","1");
@ -325,25 +329,31 @@ public class ShiftServiceImpl extends Service implements ShiftService {
classesParamMap.put("dateType",dateType);
classesParamMap.put("restSign",restSign);
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;
}
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"));
String dateType = Util.null2String(params.get("dateType"));
String restSign = Util.null2String(params.get("restSign"));
String shiftId = Util.null2String(params.get("shiftId"));
//考勤项目
List<Map<String,Object>> haveattendanceItems = (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");
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;
List<Map<String,Object>> dataList = DbTools.getSqlToList(sql);
String punchDate = Util.null2String(classesParamMap.get("punchDate"));
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();
List<Map<String,Object>> classs = Lists.newArrayList();
for (Map<String,Object> map:dataList){
@ -358,11 +368,13 @@ public class ShiftServiceImpl extends Service implements ShiftService {
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";
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"))));
//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,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();
// 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");
}
//查找对应的考勤项目
String querySql = "select a.id keyid,a.* from uf_jcl_kq_kqxm a where id=?";
attendanceItems = DbTools.getSqlToList(querySql,overtimePlan.get("jblx"));
List<Map<String,Object>> attendanceItems = haveattendanceItems.stream().filter(f->f.get("keyid").equals(overtimePlan.get("jblx"))).collect(Collectors.toList());
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("bcsdxx", punchDate.compareTo(e.getKey()) != 0 ? "": bcsdxx);
if (resultList.size()>0){

@ -37,7 +37,7 @@ public class UtilServiceImpl extends Service implements UtilService {
@Override
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);
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.impl.AllowanceServiceImpl;
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.google.common.collect.Lists;
import com.google.common.collect.Maps;
@ -33,7 +35,7 @@ public class AttendanceanalysisAction {
private UtilService utilService = ServiceUtil.getService(UtilServiceImpl.class);
private AttendanceAnalysisWrapper attendanceAnalysisService = ServiceUtil.getService(AttendanceAnalysisWrapper.class);
private AllowanceService allowanceService = ServiceUtil.getService(AllowanceServiceImpl.class);
private CommonService commonService = ServiceUtil.getService(CommonServiceImpl.class);
/**
*
* @return
@ -46,9 +48,9 @@ public class AttendanceanalysisAction {
log.info("********AttendanceanalysisAction start********");
Map<String,Object> paramMap = ParamUtil.request2Map(request);
// Map<String,Object> paramMap = Maps.newHashMap();
// paramMap.put("startDate","2024-11-03");
// paramMap.put("endDate","2024-11-03");
// paramMap.put("userIds","82");
// paramMap.put("startDate","2024-06-20");
// paramMap.put("endDate","2024-06-20");
// paramMap.put("userIds","36");
String startDate = Util.null2String(paramMap.get("startDate"));
String startBeforeDate = DateUtil.beforeDay(startDate,2);
@ -56,17 +58,65 @@ public class AttendanceanalysisAction {
String endAfterDate = DateUtil.AfterDay(endDate,2);
String userIds = Util.null2String(paramMap.get("userIds"));
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();
//入职离职当天是否需要进行考勤分析。0入职离职当天均分析、1入职离职当天不分析
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)){
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'";
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";
@ -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());
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<=?";
List<Map<String,Object>> attendaceResult = DbTools.getSqlToList(sql,startDate,endDate);
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,startBeforeDate,endAfterDate);
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);
//出勤结果,进出时间
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();
if (attendaceGroupById.get(userId) != null && attendaceGroupById.get(userId).size() > 0) {
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++){
String date = DateUtil.AfterDay(startDate,i);
if (leaveAndEntry.equals("1")){
if (("".equals(companystartDate) || DateUtil.getTime(date).compareTo(DateUtil.getTime(companystartDate))>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 {
if (("".equals(companystartDate) || DateUtil.getTime(date).compareTo(DateUtil.getTime(companystartDate))>=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);
}
}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";
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"))));
sql = "select sjzt,sgsj,ygid,rq from uf_jcl_kq_cqjg where rq>=? and rq<=? and ygid in ("+userIds+")";
List<Map<String,Object>> attendaceResult = DbTools.getSqlToList(sql,startDate,endDate);
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,startBeforeDate,endAfterDate);
Map<String,List<Map<String,Object>>> attendaceGroupById = attendaceResult.stream().collect(Collectors.groupingBy(e->e.get("ygid").toString()));
for (String userId : userIds.split(",")){
/**获得人员考勤项目*/
Map<String,Object> param = Maps.newHashMap();
//入职日期
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();
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,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);
Map<String, List<Map<String, Object>>> attendaceResultMap = Maps.newHashMap();
if (attendaceGroupById.get(userId) != null && attendaceGroupById.get(userId).size() > 0) {
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++){
@ -221,15 +273,14 @@ public class AttendanceanalysisAction {
if (("".equals(companystartDate) || DateUtil.getTime(date).compareTo(DateUtil.getTime(companystartDate))>0)
&& ("".equals(terminationDate) || DateUtil.getTime(date).compareTo(DateUtil.getTime(terminationDate)) <0)){
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 {
if (("".equals(companystartDate) || DateUtil.getTime(date).compareTo(DateUtil.getTime(companystartDate))>=0)
&& ("".equals(terminationDate) || DateUtil.getTime(date).compareTo(DateUtil.getTime(terminationDate)) <=0)){
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 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("clockInTimeDate : [{}]", dataList);
@ -50,38 +49,99 @@ public class AttendanceAnalysisWrapper extends Service {
if (dataList != null && dataList.size() > 0) {
collect = dataList.stream().collect(Collectors.groupingBy(e -> Util.null2String(e.get("signdate"))));
}
/** 获取人员班次*/
Map<String, Object> classesParamMap = Maps.newHashMap();
classesParamMap.put("tableName", "uf_pbjg");
classesParamMap.put("startDate", beforeTwoDayDateDate);
classesParamMap.put("endDate", DateUtil.AfterDay(analysisDateList.get(analysisDateList.size()-1),1));
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("attendanceItems", attendanceItems);
classesParamMap.put("clockInData", dataList);
Map<String, Object> schedulMap = utilService.getSchedulingInFormation(classesParamMap);
Map<String, List<Map<String, Object>>> schedulingResultsMap = (Map<String, List<Map<String, Object>>>) schedulMap.get("schedulingResultsMap");
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){
Map<String, Object> getClockTimeParam = Maps.newHashMap();
getClockTimeParam.put("date", analysisDate);
getClockTimeParam.put("clockInTimeList", dataList);
getClockTimeParam.put("clockInTimeCollect", collect);
getClockTimeParam.put("schedulingResultCollect", schedulingResultsMap);
getClockTimeParam.put("clockInTimeMap", clockInTimeMap);
getClockTimeParam.put("userId", userId);
/**获得人员考勤项目*/
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();
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, Object> getClockTimeParam = Maps.newHashMap();
getClockTimeParam.put("date", analysisDate);
getClockTimeParam.put("clockInTimeList", dataList);
getClockTimeParam.put("clockInTimeCollect", collect);
getClockTimeParam.put("schedulingResultCollect", schedulingResultsMap);
getClockTimeParam.put("clockInTimeMap", clockInTimeMap);
getClockTimeParam.put("userId", userId);
//打卡数据
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);
}
}
@ -93,11 +153,11 @@ public class AttendanceAnalysisWrapper extends Service {
* @param userId id
* @param analysisDate
* @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("clockInTimeDate : [{}]", dataList);
List<Map<String, Object>> attendaceResult = attendaceResultMap.get(analysisDate);
log.debug("attendaceResult : [{}]",attendaceResult);
if (attendaceResult!=null && attendaceResult.size()>0 && (CheckBoxEnum.CHECKED.getKey().equals(attendaceResult.get(0).get("sgsj")) ||
"3".equals(attendaceResult.get(0).get("sjzt")))) {
@ -107,6 +167,67 @@ public class AttendanceAnalysisWrapper extends Service {
if (dataList != null && dataList.size() > 0) {
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, Object> getClockTimeParam = Maps.newHashMap();
@ -117,10 +238,12 @@ public class AttendanceAnalysisWrapper extends Service {
getClockTimeParam.put("clockInTimeCollect", collect);
getClockTimeParam.put("userId", userId);
getClockTimeParam.put("workHourItems",workHourItems);
//打卡数据
List<Map<String, Object>> clockInTimeList = utilService.getClockInTime(getClockTimeParam);
Map<String, Object> recordDataTime = analysis(userId, analysisDate, clockInTimeList, schedulingResultsMap.get(analysisDate), attendanceItems, workHourItems,(Map<String,Object>)schedulMap.get("clockInTimeDataMap"));
clockInTimeMap.put(analysisDate, recordDataTime);
List<Map<String, Object>> analysisDateClockInTimeList = utilService.getClockInTime(getClockTimeParam);
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);
}
/**
@ -133,7 +256,7 @@ public class AttendanceAnalysisWrapper extends Service {
* @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
,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, String> formModeIdMap = Utils.getFormmodeIdMap();
recordParam.put("userId", userId);
@ -150,6 +273,8 @@ public class AttendanceAnalysisWrapper extends Service {
workingHourparam.put("userId", userId);
workingHourparam.put("attendanceItems", attendanceItems);
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
*/
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;
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.service.AttendancePlanService;
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) {
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;
}
/**
* 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

@ -24,19 +24,23 @@ public interface SchedulingResultsService {
* @return
*/
Map<String,Object> saveScheduleResult(Map<String,Object> params);
/**
*
* @param params
* @return
*/
Map<String,Object> generateSchedule(Map<String,Object> params);
/**
*
* @param params
* @return
*/
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));
}
@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("zyzValue",getUserIds(vocation));
// vocation.put("zyzValue",getUserIds(vocation));
}
log.debug("VocationCmd params: [{}]",params);
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"));
if (edyj.equals("3") || edyj.equals("4")){
String zyz = Util.null2String(vocation.get("zyz"));
zyz = zyz.replace("","and");
zyz = zyz.replace("","or");
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());
}

@ -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.VocationCmd;
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.DateUtil;
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"));
Map<String,Object> param = Maps.newHashMap();
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 (";

@ -1,5 +1,6 @@
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.DateUtil;
import com.engine.jucailinkq.common.util.DbTools;
@ -37,13 +38,13 @@ public class BatchAskForLeaveWorkFlowBackAction implements Action {
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);
// 流程表单明细表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);
String detail1TableName = requestInfo.getDetailTableInfo().getDetailTable()[0].getTableDBName();
String detail1TableName = CommonUtil.getDetailTableInfoTableName(requestInfo.getDetailTableInfo().getDetailTable()[1].getTableDBName(),1,WorkFlowTypeEnum.ASKFORLEAVE);
log.info("detail1ableName : [{}]", detail1TableName);
//流程表单明细表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.vacation.cmd.VocationCmd;
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.DateUtil;
import com.engine.jucailinkq.common.util.DbTools;
@ -40,7 +41,7 @@ public class GenerateWorkflowVocationAction implements Action {
params.put("cover","1");
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=?";
//获取离职日期

@ -7,6 +7,8 @@ import com.engine.jucailinkq.attendance.component.persongroup.commonutil.Persong
import com.engine.jucailinkq.attendance.enums.ApplicableOrganizationEnum;
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 com.google.common.collect.Sets;
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";
//适用组织所有值集合
List<Map<String,Object>> organzationList = DbTools.getSqlToList(sql,modeId);
Map<String,Object> resultMap = Maps.newHashMap();
//人力资源id假别规则id
//人力资源id
Map<String,Object> personMap = Maps.newHashMap();
//人员分组id假别规则id
//人员分组id
Map<String,Object> personOrganzationMap = Maps.newHashMap();
//部门id假别规则id
//部门id
Map<String,Object> departMentMap = Maps.newHashMap();
//分部id假别规则id
//分部id
Map<String,Object> subCompanyMap = Maps.newHashMap();
//人员所在的所有数据id
Map<String,List<Map<String,String>>> personAllData = Maps.newHashMap();
for (Map<String,Object> organzation:organzationList){
@ -56,6 +61,17 @@ public class GetPersonBySuitOrganzationCmd extends AbstractCommonCommand<Map<Str
}
if (ApplicableOrganizationEnum.PERSONNEL.getKey().equals(dxlx)){
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)){
personOrganzationMap.put(dx,dataid);
}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=?";
for (Map.Entry<String,Object> entrySet: personOrganzationMap.entrySet()){
List<Map<String,Object>> personnelGrouping = DbTools.getSqlToList(sql,entrySet.getKey());
Set<String> userIds = PersongroupCommonUtil.getUserIdsByPersonnelGrouping(personnelGrouping, DateUtil.getCurrentDate());
for (String userId:userIds){
String dataid = entrySet.getValue().toString();
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){
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){
@ -97,6 +139,20 @@ public class GetPersonBySuitOrganzationCmd extends AbstractCommonCommand<Map<Str
if (personMap.get(userMap.get("id").toString()) == null){
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){
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.core.interceptor.CommandContext;
import com.engine.jucailinkq.common.util.Utils;
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
import com.google.common.collect.Sets;
import lombok.extern.slf4j.Slf4j;
@ -21,14 +22,14 @@ import java.util.stream.Collectors;
* modeid
*/
@Slf4j
public class GetPersonDateBySuitOrganzation extends AbstractCommonCommand<Map<String,Object>> {
public class GetPersonVocationBySuitOrganzation extends AbstractCommonCommand<Map<String,Object>> {
@Override
public BizLogContext getLogContext() {
return null;
}
public GetPersonDateBySuitOrganzation(Map<String,Object> params){
public GetPersonVocationBySuitOrganzation(Map<String,Object> params){
this.params=params;
}
@ -55,9 +56,9 @@ public class GetPersonDateBySuitOrganzation extends AbstractCommonCommand<Map<St
Map<String,String> vacationMap = Maps.newHashMap();
for (Map<String,Object> vocation:vacationList){
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()));
@ -283,4 +284,16 @@ public class GetPersonDateBySuitOrganzation extends AbstractCommonCommand<Map<St
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> insertCommon(Map<String,Object> param);
Map<String,Object> getPersonBySuitOrganzation(Map<String,Object> param);
}

@ -1,5 +1,6 @@
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.service.CommonService;
import com.engine.jucailinkq.common.util.CommonUtil;
@ -39,4 +40,9 @@ public class CommonServiceImpl extends Service implements CommonService {
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){
for (Map<String, String> detailData:detailDataList){
Map<String, String> resultMap = Maps.newHashMap();
resultMap.putAll(resultMap);
resultMap.putAll(detailData);
for (Map.Entry<String,Object> entry :mappingMap.entrySet()){
if (entry.getValue()!=null && !"".equals(entry.getValue())){
resultMap.put(entry.getKey(),detailData.get(entry.getValue()));

@ -124,6 +124,16 @@ public class DateUtil {
public static LocalDateTime getTime(String time){
int length = time.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:
return LocalDate.parse(time, yyyyMMdd).atStartOfDay();
case 19:

Loading…
Cancel
Save