diff --git a/src/com/engine/jucailinkq/attendance/attendanceanalysis/cmd/GetAskForLeaveCmd.java b/src/com/engine/jucailinkq/attendance/attendanceanalysis/cmd/GetAskForLeaveCmd.java index 77e3cc6..5cf71b1 100644 --- a/src/com/engine/jucailinkq/attendance/attendanceanalysis/cmd/GetAskForLeaveCmd.java +++ b/src/com/engine/jucailinkq/attendance/attendanceanalysis/cmd/GetAskForLeaveCmd.java @@ -40,8 +40,12 @@ public class GetAskForLeaveCmd extends AbstractCommonCommand> String userId = Util.null2String(params.get("userId")); String analysisDate = Util.null2String(params.get("analysisDate")); List> scheduleResult = (List>)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> askForLeaveList = DbTools.getSqlToList(sql,userId,DateUtil.AfterDay(analysisDate,1), DateUtil.beforeDay(analysisDate,1)); + List> attendanceItems = (List>)params.get("attendanceItems"); + List> askforList = (List>)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> askForLeaveList = DbTools.getSqlToList(sql,userId,DateUtil.AfterDay(analysisDate,1), DateUtil.beforeDay(analysisDate,1)); + List> 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> askForLeaveItems = Maps.newHashMap(); @@ -53,7 +57,7 @@ public class GetAskForLeaveCmd extends AbstractCommonCommand> List> 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> return resultMap; } - sql = "select * from uf_jcl_kq_kqxm where id in ("+String.join(",",jplxSet)+")"; - List> askForLeaveItemList = DbTools.getSqlToList(sql); - List 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> sonItemList = DbTools.getSqlToList(sql); - Map>> sonGroupMap = sonItemList.stream().collect(Collectors.groupingBy(e->e.get("sjxm").toString())); - for (Map attendanceItem :askForLeaveItemList){ - if (CheckBoxEnum.CHECKED.getKey().equals(attendanceItem.get("sffzcx"))){ - attendanceItem.put("sonItems",sonGroupMap.get(attendanceItem.get("id"))); - } - } - - } + List> askForLeaveItemList = attendanceItems.stream().filter(e->jplxSet.contains(e.get("keyid").toString())).collect(Collectors.toList()); Map>> collect = askForLeaveItemList.stream().collect(Collectors.groupingBy(e->e.get("id").toString())); diff --git a/src/com/engine/jucailinkq/attendance/attendanceanalysis/cmd/GetAttendanceCycleCmd.java b/src/com/engine/jucailinkq/attendance/attendanceanalysis/cmd/GetAttendanceCycleCmd.java index 645e2b6..6a768a2 100644 --- a/src/com/engine/jucailinkq/attendance/attendanceanalysis/cmd/GetAttendanceCycleCmd.java +++ b/src/com/engine/jucailinkq/attendance/attendanceanalysis/cmd/GetAttendanceCycleCmd.java @@ -41,7 +41,8 @@ public class GetAttendanceCycleCmd extends AbstractCommonCommand userToDateMap = Maps.newHashMap(); - Map person = new GetPersonBySuitOrganzationCmd(params).execute(commandContext); + Map resultMap = new GetPersonBySuitOrganzationCmd(params).execute(commandContext); + Map person = (Map)resultMap.get("personMap"); Set attendanceCycleSet = Sets.newHashSet(); Set subcompanyids = userList.stream().map(e->e.get("subcompanyid1").toString()).collect(Collectors.toSet()); Map subcompanyToAttendanceCycleMap = Maps.newHashMap(); diff --git a/src/com/engine/jucailinkq/attendance/attendanceanalysis/cmd/GetClockInTimeListCmd.java b/src/com/engine/jucailinkq/attendance/attendanceanalysis/cmd/GetClockInTimeListCmd.java index 8521950..a3f662e 100644 --- a/src/com/engine/jucailinkq/attendance/attendanceanalysis/cmd/GetClockInTimeListCmd.java +++ b/src/com/engine/jucailinkq/attendance/attendanceanalysis/cmd/GetClockInTimeListCmd.java @@ -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 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> attendanceResult = DbTools.getSqlToList(sql,userId,DateUtil.beforeDay(earliestDate,1),earliestDate); - Map>> 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> attendanceResult = DbTools.getSqlToList(sql,userId,DateUtil.beforeDay(earliestDate,1),earliestDate); +// Map>> 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 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> attendanceResult = DbTools.getSqlToList(sql,userId,DateUtil.beforeDay(beforeOneDay,1),beforeOneDay); +// Map>> 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> attendanceResult = DbTools.getSqlToList(sql,userId,DateUtil.beforeDay(beforeOneDay,1),beforeOneDay); - Map>> 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--){ diff --git a/src/com/engine/jucailinkq/attendance/attendanceanalysis/cmd/GetEvectionCmd.java b/src/com/engine/jucailinkq/attendance/attendanceanalysis/cmd/GetEvectionCmd.java index 936d6d0..66d4f6b 100644 --- a/src/com/engine/jucailinkq/attendance/attendanceanalysis/cmd/GetEvectionCmd.java +++ b/src/com/engine/jucailinkq/attendance/attendanceanalysis/cmd/GetEvectionCmd.java @@ -40,9 +40,14 @@ public class GetEvectionCmd extends AbstractCommonCommand> { String userId = Util.null2String(params.get("userId")); String analysisDate = Util.null2String(params.get("analysisDate")); List> scheduleResult = (List>)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> evectionList = DbTools.getSqlToList(sql,userId, DateUtil.AfterDay(analysisDate,1), DateUtil.beforeDay(analysisDate,1)); + List> attendanceItems = (List>)params.get("attendanceItems"); + List> evectionList = (List>)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> 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> evectionItems = Maps.newHashMap(); @@ -54,7 +59,7 @@ public class GetEvectionCmd extends AbstractCommonCommand> { List> 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> { if (cclxSet.size() == 0){ return resultMap; } - sql = "select * from uf_jcl_kq_kqxm where id in ("+String.join(",",cclxSet)+")"; - List> evectionItemList = DbTools.getSqlToList(sql); - List 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> sonItemList = DbTools.getSqlToList(sql); - Map>> sonGroupMap = sonItemList.stream().collect(Collectors.groupingBy(e->e.get("sjxm").toString())); - for (Map 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> evectionItemList = attendanceItems.stream().filter(e->cclxSet.contains(e.get("keyid").toString())).collect(Collectors.toList()); - } Map>> collect = evectionItemList.stream().collect(Collectors.groupingBy(e->e.get("id").toString())); diff --git a/src/com/engine/jucailinkq/attendance/attendanceanalysis/cmd/GetScheduleResultListCmd.java b/src/com/engine/jucailinkq/attendance/attendanceanalysis/cmd/GetScheduleResultListCmd.java index a801710..e41c797 100644 --- a/src/com/engine/jucailinkq/attendance/attendanceanalysis/cmd/GetScheduleResultListCmd.java +++ b/src/com/engine/jucailinkq/attendance/attendanceanalysis/cmd/GetScheduleResultListCmd.java @@ -46,8 +46,12 @@ public class GetScheduleResultListCmd extends AbstractCommonCommand execute(CommandContext commandContext) { - /** 班次信息*/ + //考勤项目 List> attendanceItems = (List>)params.get("attendanceItems"); + //班次 + List> allClassInfoList = (List>)params.get("allClassInfoList"); + //加班计划 + List> allOverPlanList = (List>)params.get("allOverPlanList"); Map schedulingResultsMap = (Map)params.get("schedulingResultsMap"); List> schedulingResultsList = (List>)schedulingResultsMap.get("data"); @@ -67,18 +71,17 @@ public class GetScheduleResultListCmd extends AbstractCommonCommand>> 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 bcxxIdList = Lists.newArrayList(); for (Map.Entry>> entry :schedulingMap.entrySet()){ if (!entry.getKey().equals("")){ - bcxxIds +=entry.getKey() +","; + bcxxIdList.add(entry.getKey()); } } List> 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>> dataMap = dataList.stream().collect(Collectors.groupingBy(e->Util.null2String(e.get("bcxx")))); List> finalAttendanceItems = attendanceItems; @@ -109,7 +112,7 @@ public class GetScheduleResultListCmd extends AbstractCommonCommand clockInTimeDataMap = Maps.newHashMap(); for (Map candidateSchedulingResult:candidateSchedulingResultsList){ - Map shiftResult = basicsetService.punchMatchShift(params.get("pbdx").toString(),candidateSchedulingResult,(List>)params.get("clockInData"),(Map>)params.get("clockInTimeMap")); + Map shiftResult = basicsetService.punchMatchShift(params,candidateSchedulingResult); List> bcData = (List>)shiftResult.get("bcData"); for(Map data:bcData){ adjustWorkOverTimeClass(data, attendanceItems,commandContext); @@ -119,8 +122,8 @@ public class GetScheduleResultListCmd extends AbstractCommonCommand>> overtimePlanMap = DbTools.getSqlToList(sql,params.get("pbdx"),params.get("startDate"),params.get("endDate")).stream().collect(Collectors.groupingBy(e -> Util.null2String(e.get("gsrq")))); + Map>> 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>> e: overtimePlanMap.entrySet()){ @@ -137,9 +140,7 @@ public class GetScheduleResultListCmd extends AbstractCommonCommand> overPlanattendanceItems = DbTools.getSqlToList(querySql,overtimePlan.get("jblx")); + List> 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> getDate(Map 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> dataList=null; - if ("".equals(glpb)){ - sql = "select subcompanyid1 from hrmresource where id =?"; - Map 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> getDate(Map 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> dataList=null; +// if ("".equals(glpb)){ +// sql = "select subcompanyid1 from hrmresource where id =?"; +// Map 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、调整加班时段的推前和推后的打卡时间,以最大值为准 diff --git a/src/com/engine/jucailinkq/attendance/attendanceanalysis/cmd/RecordDataCmd.java b/src/com/engine/jucailinkq/attendance/attendanceanalysis/cmd/RecordDataCmd.java index 1419417..d83da85 100644 --- a/src/com/engine/jucailinkq/attendance/attendanceanalysis/cmd/RecordDataCmd.java +++ b/src/com/engine/jucailinkq/attendance/attendanceanalysis/cmd/RecordDataCmd.java @@ -175,8 +175,9 @@ public class RecordDataCmd extends AbstractCommonCommand> { 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> { 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> oldOverTimeList = DbTools.getSqlToList(sql,id); - for (Map 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> oldOverTimeList = DbTools.getSqlToList(sql,id); + for (Map 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> oldOverTimeHolidayList = DbTools.getSqlToList(sql,id); - for (Map 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> oldOverTimeHolidayList = DbTools.getSqlToList(sql,id); + for (Map overTimeHoliday : overTimeHolidayList){ + overTimeHoliday.put("lyid",id); + } + updateOverTimeHoliday(oldOverTimeHolidayList,overTimeHolidayList); } - updateOverTimeHoliday(oldOverTimeHolidayList,overTimeHolidayList); - }catch (Exception e){ log.error("updateWorkOverTimeDate error : [{}]",e); } diff --git a/src/com/engine/jucailinkq/attendance/attendanceanalysis/job/AttendanceAnalysisJob.java b/src/com/engine/jucailinkq/attendance/attendanceanalysis/job/AttendanceAnalysisJob.java index 561c946..68f94cd 100644 --- a/src/com/engine/jucailinkq/attendance/attendanceanalysis/job/AttendanceAnalysisJob.java +++ b/src/com/engine/jucailinkq/attendance/attendanceanalysis/job/AttendanceAnalysisJob.java @@ -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> 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 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 entry : attendanceCycle.entrySet()){ Set sets = (Set)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> needAnalysisDateList = Lists.partition(allDateList,200); List> dataList = Lists.newArrayList(); List> 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> resultList = DbTools.getSqlToList(sql); if (resultList.size() > 0){ attendaceResult.addAll(resultList); @@ -122,10 +128,68 @@ public class AttendanceAnalysisJob extends BaseCronJob { Map>> attendaceGroupById = attendaceResult.stream().collect(Collectors.groupingBy(e->e.get("ygid").toString())); - - + /**考勤项目*/ + Map params = Maps.newHashMap(); + String modeId = Utils.getFormmodeIdMap().get("uf_jcl_kq_kqfa"); + params.put("modeId",modeId); + Map resultMap = commonService.getPersonBySuitOrganzation(params); + Map attendacnePlanItems = basicsetService.getAttendanceItemsGroupByAttendancePlanDataCmd(); + //人员所拥有的所有考勤方案 + Map>> personAttendancePlan = (Map>>)resultMap.get("personAllData"); + //通用考勤项目 + List> generalAttendanceItems = (List>)attendacnePlanItems.get("generalAttendanceItems"); + //考勤方案对应所属的考勤项目 + Map>> attendanceItemGroupByPlan = (Map>>)attendacnePlanItems.get("attendanceItemGroupByPlan"); + + /**综合工时*/ + modeId = Utils.getFormmodeIdMap().get("uf_jcl_kq_zhgs"); + params.put("modeId",modeId); + Map workingHourResultMap = commonService.getPersonBySuitOrganzation(params); + //人员所拥有的所有综合工时 + Map>> personComprehensiveWorkingHours = (Map>>)workingHourResultMap.get("personAllData"); + String sql = "select * from uf_jcl_kq_zhgs"; + List> resultList = DbTools.getSqlToList(sql); + //所有综合工时 + Map>> workingHourGroupBy = resultList.stream().collect(Collectors.groupingBy(e->e.get("id").toString())); + + /**排班结果*/ + List> allScheduleList = Lists.newArrayList(); + /**加班计划*/ + List> allOverPlanList = Lists.newArrayList(); + for (List 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> 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> list2 = DbTools.getSqlToList(sql); + if (list2.size() > 0){ + allOverPlanList.addAll(list2); + } + } + Map>> 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> 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>> 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>> askforGroup = DbTools.getSqlToList(queryAskForsql).stream().collect(Collectors.groupingBy(e->e.get("qjry").toString())); + /**候选班组*/ + String queryHxbz = "select * from uf_jcl_kq_hxbz_dt1"; + List> hxbzList = DbTools.getSqlToList(queryHxbz); + + + log.info("********AttendanceAnalysisJob prepare end******"); for (Map userMap:userList){ + + Map 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> clockInTimeMap = Maps.newHashMap(); - /**获得人员考勤项目*/ + Map paramMap = Maps.newHashMap(); paramMap.put("startDate",DateUtil.beforeDay(useDate,1)); paramMap.put("endDate",DateUtil.beforeDay(useDate,1)); paramMap.put("resourceId",userId); - Map dataMap = basicsetService.getAttendanceItemsByPerson(paramMap); - List> attendanceItems = (List>)dataMap.get("data"); - /** - *获得人员综合工时 - */ - Map workHourdataMap = basicsetService.getWorkHoursItemByPerson(paramMap); - List> workHourItems = (List>)workHourdataMap.get("data"); + + List> attendancePlanList = personAttendancePlan.get(userId)==null?Lists.newArrayList():personAttendancePlan.get(userId); + + List> attendanceItems =Lists.newArrayList(); + for (Map 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> 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> 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>> attendaceResultMap = Maps.newHashMap(); List> attendaceResultByUser = attendaceGroupById.get(userId); if (attendaceResultByUser != null && attendaceResultByUser.size() > 0) { attendaceResultMap = attendaceResultByUser.stream().collect(Collectors.groupingBy(e -> e.get("rq").toString())); + for (Map 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 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********"); } diff --git a/src/com/engine/jucailinkq/attendance/attendanceanalysis/service/ShiftService.java b/src/com/engine/jucailinkq/attendance/attendanceanalysis/service/ShiftService.java index 06249df..0fd2630 100644 --- a/src/com/engine/jucailinkq/attendance/attendanceanalysis/service/ShiftService.java +++ b/src/com/engine/jucailinkq/attendance/attendanceanalysis/service/ShiftService.java @@ -7,10 +7,9 @@ public interface ShiftService { /** * 打卡匹配班次 - * @param empId + * @param params * @param pbData 排班结果 - * @param clockInData * @return */ - Map punchMatchShift(String empId, Map pbData, List> clockInData,Map> clockInTimeMap); + Map punchMatchShift(Map params, Map pbData); } diff --git a/src/com/engine/jucailinkq/attendance/attendanceanalysis/service/UtilService.java b/src/com/engine/jucailinkq/attendance/attendanceanalysis/service/UtilService.java index b06ce6f..770330e 100644 --- a/src/com/engine/jucailinkq/attendance/attendanceanalysis/service/UtilService.java +++ b/src/com/engine/jucailinkq/attendance/attendanceanalysis/service/UtilService.java @@ -16,6 +16,7 @@ public interface UtilService { */ Map getSchedulingInFormation(Map params); + Map>> getScheduleInfoWithEmpId(List empIdList, String startDate, String endDate); String getRqlxInScheduleInfo(String empId,String date); diff --git a/src/com/engine/jucailinkq/attendance/attendanceanalysis/service/impl/ShiftServiceImpl.java b/src/com/engine/jucailinkq/attendance/attendanceanalysis/service/impl/ShiftServiceImpl.java index ca409b4..cd0159c 100644 --- a/src/com/engine/jucailinkq/attendance/attendanceanalysis/service/impl/ShiftServiceImpl.java +++ b/src/com/engine/jucailinkq/attendance/attendanceanalysis/service/impl/ShiftServiceImpl.java @@ -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 需要包含分析日期以及分析日期前后2天的3天原始打卡数据 + * @param params * @return */ @Override - public Map punchMatchShift(String empId, Map pbData, List> clockInData,Map> clockInTimeMap) { + public Map punchMatchShift(Map params, Map pbData) { //查询排班结果 // String pbSql = "select * from uf_pbjg where id = " + schedulingResultId; // Map 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> hxbzList = (List>)params.get("hxbzList"); + Map>> attendaceResultMap = (Map>>)params.get("attendaceResultMap"); + Map result = null; Map maxPriorityResult = null; if (!shiftTeamId.equals("")) { //候选班次 - String bcSql = "select * from uf_jcl_kq_hxbz_dt1 where mainid = " + shiftTeamId; - List> bcData = DbTools.getSqlToList(bcSql); + // String bcSql = "select * from uf_jcl_kq_hxbz_dt1 where mainid = " + shiftTeamId; + List> bcData = hxbzList.stream().filter(e->shiftTeamId.equals(e.get("mainid"))).collect(Collectors.toList()); if (bcData.size() > 0) { + log.info("compute waitCompareResultList start"); List> waitCompareResultList = new ArrayList<>(); //循环匹配,输出匹配结果 for (Map bcMap : bcData) { //获取班次要求打卡数据和请假、出差、加班数据处理后的卡点数据 - Map waitCompareMap = dealClockInData(empId, pbData, clockInData, bcMap.get("bcxx").toString(), clockInTimeMap); + Map 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 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 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 lastWorkDayInfo = attendaceResultMap.get(DateUtil.beforeDay(punchDate,1)).get(0); String bcId = Util.null2String(lastWorkDayInfo.get("bc")); List> 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 需要包含分析日期以及分析日期前后2天的3天打卡数据 * @return */ - private Map dealClockInData(String empId, Map pbData, List> clockInData, String shiftId,Map> clockInTimeMap) { + private Map dealClockInData(String empId, Map pbData, String shiftId,Map params) { Map clockInDataMatchInfo = new HashMap<>(); + + List> clockInData = (List>)params.get("clockInData"); + Map> clockInTimeMap = (Map>)params.get("clockInTimeMap"); + List> attendanceItems = (List>)params.get("attendanceItems"); + + String punchDate = Util.null2String(pbData.get("bcrq")); - String startBeforeDate = DateUtil.beforeDay(punchDate,2); - String endAfterDate = DateUtil.AfterDay(punchDate,2); - //获取考勤项目 - Map param = Maps.newHashMap(); - param.put("startDate",startBeforeDate); - param.put("endDate",endAfterDate); - param.put("resourceId",empId); - Map dataMap = basicsetService.getAttendanceItemsByPerson(param); - List> attendanceItems = (List>)dataMap.get("data"); + + //1-组装班次数据 - Map>> schedulingResultsMap = getShiftData(empId, pbData, shiftId); + Map>> schedulingResultsMap = getShiftData(empId, pbData, shiftId,params); List> shiftData = schedulingResultsMap.get(punchDate); //2-拿到当天打卡数据 Map>> collect = Maps.newHashMap(); if (clockInData != null && clockInData.size() >0){ collect = clockInData.stream().collect(Collectors.groupingBy(e -> Util.null2String(e.get("signdate")))); } -// Map> clockInTimeMap = Maps.newHashMap(); // + Map 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 evectionDataMap = updateAttendanceResultWrapper.getEvection(workingHourparam); Map askForLeaveDataMap = updateAttendanceResultWrapper.getAskForLeave(workingHourparam); //4-调用考勤分析中的卡点数据处理方法 @@ -299,7 +303,7 @@ public class ShiftServiceImpl extends Service implements ShiftService { * @param empId * @return */ - private Map>> getShiftData(String empId, Map pbData, String shiftId) { + private Map>> getShiftData(String empId, Map pbData, String shiftId,Map 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 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>> schedulMap = getSchedulingInFormation(classesParamMap); + + Map>> schedulMap = getSchedulingInFormation(classesParamMap,params); return schedulMap; } - private Map>> getSchedulingInFormation(Map params) { + private Map>> getSchedulingInFormation(Map classesParamMap,Map 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> haveattendanceItems = (List>)params.get("attendanceItems"); + //班次 + List> allClassInfoList = (List>)params.get("allClassInfoList"); + //加班计划 + List> allOverPlanList = (List>)params.get("allOverPlanList"); - String bcSql = "select * from uf_jcl_kq_bcxx where id = " + shiftId; - Map 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> 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> dataList = allClassInfoList.stream().filter(e->shiftId.equals(e.get("bcxx"))).collect(Collectors.toList()); Map>> resultMap = Maps.newHashMap(); List> classs = Lists.newArrayList(); for (Map 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>> 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>> overtimePlanMap = DbTools.getSqlToList(sql,classesParamMap.get("pbdx"),punchDate,punchDate).stream().collect(Collectors.groupingBy(e -> Util.null2String(e.get("gsrq")))); + + Map>> overtimePlanMap = allOverPlanList.stream().filter(e->DateUtil.getTime("gsrq").compareTo(DateUtil.getTime(punchDate)) ==0).collect(Collectors.groupingBy(e -> Util.null2String(e.get("gsrq")))); //考勤项目 - List> attendanceItems = new ArrayList<>(); + //日期集合 // Map 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> 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){ diff --git a/src/com/engine/jucailinkq/attendance/attendanceanalysis/service/impl/UtilServiceImpl.java b/src/com/engine/jucailinkq/attendance/attendanceanalysis/service/impl/UtilServiceImpl.java index 138c140..de11b76 100644 --- a/src/com/engine/jucailinkq/attendance/attendanceanalysis/service/impl/UtilServiceImpl.java +++ b/src/com/engine/jucailinkq/attendance/attendanceanalysis/service/impl/UtilServiceImpl.java @@ -37,7 +37,7 @@ public class UtilServiceImpl extends Service implements UtilService { @Override public Map getSchedulingInFormation(Map params) { /** 班次信息*/ - Map schedulingResultsMap = schedulingResultsService.queryDataTableActualUse(params); + Map schedulingResultsMap = schedulingResultsService.getUseSchedule(params); params.put("schedulingResultsMap",schedulingResultsMap); return commandExecutor.execute(new GetScheduleResultListCmd(params)); } diff --git a/src/com/engine/jucailinkq/attendance/attendanceanalysis/web/AttendanceanalysisAction.java b/src/com/engine/jucailinkq/attendance/attendanceanalysis/web/AttendanceanalysisAction.java index 689399f..deb0f02 100644 --- a/src/com/engine/jucailinkq/attendance/attendanceanalysis/web/AttendanceanalysisAction.java +++ b/src/com/engine/jucailinkq/attendance/attendanceanalysis/web/AttendanceanalysisAction.java @@ -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 paramMap = ParamUtil.request2Map(request); // Map 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> departEmployeeList = DbTools.getSqlToList(queryDepartEmployeeSql); - Map departEmployeeMap = CommonUtil.getDepartEmployeeMap(departEmployeeList); //初始化扩展类 CommonUtil.initExtensionClassHolder(); //入职离职当天是否需要进行考勤分析。0:入职离职当天均分析、1:入职离职当天不分析 String leaveAndEntry = Util.null2String(ExtensionClassHolder.getGlobalSetMap().get("leaveAndEntry")); + + /**考勤项目*/ + Map params = Maps.newHashMap(); + String modeId = Utils.getFormmodeIdMap().get("uf_jcl_kq_kqfa"); + params.put("modeId",modeId); + Map resultMap = commonService.getPersonBySuitOrganzation(params); + Map attendacnePlanItems = basicsetService.getAttendanceItemsGroupByAttendancePlanDataCmd(); + //人员所拥有的所有考勤方案 + Map>> personAttendancePlan = (Map>>)resultMap.get("personAllData"); + //通用考勤项目 + List> generalAttendanceItems = (List>)attendacnePlanItems.get("generalAttendanceItems"); + //考勤方案对应所属的考勤项目 + Map>> attendanceItemGroupByPlan = (Map>>)attendacnePlanItems.get("attendanceItemGroupByPlan"); + + /**综合工时*/ + modeId = Utils.getFormmodeIdMap().get("uf_jcl_kq_zhgs"); + params.put("modeId",modeId); + Map workingHourResultMap = commonService.getPersonBySuitOrganzation(params); + //人员所拥有的所有综合工时 + Map>> personComprehensiveWorkingHours = (Map>>)workingHourResultMap.get("personAllData"); + String queysql = "select * from uf_jcl_kq_zhgs"; + List> resultList = DbTools.getSqlToList(queysql); + //所有综合工时 + Map>> 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> departEmployeeList = DbTools.getSqlToList(queryDepartEmployeeSql); + Map departEmployeeMap = CommonUtil.getDepartEmployeeMap(departEmployeeList); + + /**排班结果*/ + String querySchedulesql = "select a.id as keyid,a.* from uf_pbjg a where bcrq >=? and bcrq<=? order by bcrq"; + List> 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> allOverPlanList = DbTools.getSqlToList(queryOverplansql,startDate,endDate); + Map>> 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> 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>> 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>> 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> hxbzList = DbTools.getSqlToList(queryHxbz); + + String queryUserSql = "select id,companystartdate from hrmresource where status <> '5' and status <> '4' and status <> '7'"; List> 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>> collect = dataList.stream().collect(Collectors.groupingBy(e -> Util.null2String(e.get("userid")))); - sql = "select sjzt,sgsj,ygid,rq from uf_jcl_kq_cqjg where rq>=? and rq<=?"; - List> attendaceResult = DbTools.getSqlToList(sql,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> attendaceResult = DbTools.getSqlToList(sql,startBeforeDate,endAfterDate); Map>> 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> clockInTimeMap = Maps.newHashMap(); - /**获得人员考勤项目*/ - Map param = Maps.newHashMap(); - param.put("startDate",startBeforeDate); - param.put("endDate",endAfterDate); - param.put("resourceId",userId); - Map dataMap = basicsetService.getAttendanceItemsByPerson(param); - List> attendanceItems = (List>)dataMap.get("data"); - - /** - *获得人员综合工时 - */ - Map workHourdataMap = basicsetService.getWorkHoursItemByPerson(param); - List> workHourItems = (List>)workHourdataMap.get("data"); - - /** 获取人员班次*/ - Map 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 schedulMap = utilService.getSchedulingInFormation(classesParamMap); - Map>> 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 map: attendaceGroupById.get(userId)){ + clockInTimeMap.put(map.get("rq").toString(),map); + } } + Map 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> departEmployeeList = DbTools.getSqlToList(queryDepartEmployeeSql); + Map departEmployeeMap = CommonUtil.getDepartEmployeeMap(departEmployeeList); + + /**排班结果*/ + String querySchedulesql = "select a.id as keyid,a.* from uf_pbjg a where bcrq >=? and bcrq<=? order by bcrq"; + List> 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> allOverPlanList = DbTools.getSqlToList(queryOverplansql,startDate,endDate); + Map>> 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> 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>> 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>> 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> 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> dataList = DbTools.getSqlToList(sql,startBeforeDate,endAfterDate); @@ -166,14 +231,12 @@ public class AttendanceanalysisAction { Map>> collect = dataList.stream().collect(Collectors.groupingBy(e -> Util.null2String(e.get("userid")))); - sql = "select sjzt,sgsj,ygid,rq from uf_jcl_kq_cqjg where rq>=? and rq<=? and ygid in ("+userIds+")"; - List> 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> attendaceResult = DbTools.getSqlToList(sql,startBeforeDate,endAfterDate); Map>> attendaceGroupById = attendaceResult.stream().collect(Collectors.groupingBy(e->e.get("ygid").toString())); for (String userId : userIds.split(",")){ - /**获得人员考勤项目*/ - Map param = Maps.newHashMap(); //入职日期 String companystartDate = Util.null2String(userGroupMap.get(userId).get(0).get("companystartdate")); //离职日期 @@ -181,38 +244,27 @@ public class AttendanceanalysisAction { //出勤结果,进出时间 Map> clockInTimeMap = Maps.newHashMap(); - param.put("startDate",startBeforeDate); - param.put("endDate",endAfterDate); - param.put("resourceId",userId); - Map dataMap = basicsetService.getAttendanceItemsByPerson(param); - List> attendanceItems = (List>)dataMap.get("data"); - - /** - *获得人员综合工时 - */ - Map workHourdataMap = basicsetService.getWorkHoursItemByPerson(param); - List> workHourItems = (List>)workHourdataMap.get("data"); - - - /** 获取人员班次*/ - Map 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 schedulMap = utilService.getSchedulingInFormation(classesParamMap); + + Map 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>> 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 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); } } } diff --git a/src/com/engine/jucailinkq/attendance/attendanceanalysis/wrapper/AttendanceAnalysisWrapper.java b/src/com/engine/jucailinkq/attendance/attendanceanalysis/wrapper/AttendanceAnalysisWrapper.java index 96ef9f8..e48c4ca 100644 --- a/src/com/engine/jucailinkq/attendance/attendanceanalysis/wrapper/AttendanceAnalysisWrapper.java +++ b/src/com/engine/jucailinkq/attendance/attendanceanalysis/wrapper/AttendanceAnalysisWrapper.java @@ -38,9 +38,8 @@ public class AttendanceAnalysisWrapper extends Service { * * @param userId 人员id * @param dataList 打卡数据 - * @param attendanceItems 考勤项目 */ - public void attendanceAnalysis(String userId, List analysisDateList, List> dataList, List> attendanceItems, List> workHourItems, Map> clockInTimeMap, Map>> attendaceResultMap) { + public void attendanceAnalysis(String userId, List analysisDateList, List> dataList, Map analysisParam, Map> clockInTimeMap, Map>> 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 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 schedulMap = utilService.getSchedulingInFormation(classesParamMap); - Map>> schedulingResultsMap = (Map>>) schedulMap.get("schedulingResultsMap"); + List> generalAttendanceItems = (List>)analysisParam.get("generalAttendanceItems"); + List> attendancePlanList = (List>)analysisParam.get("attendancePlanList"); + Map>> attendanceItemGroupByPlan = (Map>>)analysisParam.get("attendanceItemGroupByPlan"); + + /**获得人员考勤项目*/ +// List> attendanceItems =Lists.newArrayList(); +// for (Map 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> comprehensiveWorkingHourList = (List>)analysisParam.get("comprehensiveWorkingHourList"); + Map>> workingHourGroupBy = (Map>>)analysisParam.get("workingHourGroupBy"); + for (String analysisDate :analysisDateList){ - Map 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> 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> analysisDateAttendanceItems =Lists.newArrayList(); + for (Map 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> workHourItems = Lists.newArrayList(); + List> 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> 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 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 schedulMap = utilService.getSchedulingInFormation(classesParamMap); + Map>> schedulingResultsMap = (Map>>) schedulMap.get("schedulingResultsMap"); + + Map 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> analysisDateClockInTimeList = utilService.getClockInTime(getClockTimeParam); //分析考勤 - Map recordDataTime1 = analysis(userId, analysisDate, analysisDateClockInTimeList, schedulingResultsMap.get(analysisDate), attendanceItems, workHourItems,(Map)schedulMap.get("clockInTimeDataMap")); + Map recordDataTime1 = analysis(userId, analysisDate, analysisDateClockInTimeList, schedulingResultsMap.get(analysisDate), analysisDateAttendanceItems, workHourItems,(Map)schedulMap.get("clockInTimeDataMap"), + (List>)analysisParam.get("evectionList"),(List>)analysisParam.get("askforList")); clockInTimeMap.put(analysisDate, recordDataTime1); } } @@ -93,11 +153,11 @@ public class AttendanceAnalysisWrapper extends Service { * @param userId 人员id * @param analysisDate 分析日期 * @param dataList 需要包含分析日期以及分析日期前后2天的3天打卡数据 - * @param attendanceItems 人员考勤项目 */ - public void attendanceAnalysisForApi(String userId, String analysisDate, List> dataList, List> attendanceItems, Map schedulMap, List> workHourItems, Map> clockInTimeMap,List> attendaceResult) { + public void attendanceAnalysisForApi(String userId, String analysisDate, List> dataList,Map analysisParam , Map> clockInTimeMap,Map>> attendaceResultMap) { log.debug("***********analysis userId:{},analysisDate:{} start***********", userId, analysisDate); log.debug("clockInTimeDate : [{}]", dataList); + List> 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> generalAttendanceItems = (List>)analysisParam.get("generalAttendanceItems"); + List> attendancePlanList = (List>)analysisParam.get("attendancePlanList"); + Map>> attendanceItemGroupByPlan = (Map>>)analysisParam.get("attendanceItemGroupByPlan"); + List> comprehensiveWorkingHourList = (List>)analysisParam.get("comprehensiveWorkingHourList"); + Map>> workingHourGroupBy = (Map>>)analysisParam.get("workingHourGroupBy"); + + /**获得人员考勤项目*/ + List> 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> analysisDateAttendanceItems =Lists.newArrayList(); + for (Map 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> workHourItems = Lists.newArrayList(); + List> 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 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 schedulMap = utilService.getSchedulingInFormation(classesParamMap); + Map>> schedulingResultsMap = (Map>>) schedulMap.get("schedulingResultsMap"); Map 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> clockInTimeList = utilService.getClockInTime(getClockTimeParam); - Map recordDataTime = analysis(userId, analysisDate, clockInTimeList, schedulingResultsMap.get(analysisDate), attendanceItems, workHourItems,(Map)schedulMap.get("clockInTimeDataMap")); - clockInTimeMap.put(analysisDate, recordDataTime); + List> analysisDateClockInTimeList = utilService.getClockInTime(getClockTimeParam); + Map recordDataTime1 = analysis(userId, analysisDate, analysisDateClockInTimeList, schedulingResultsMap.get(analysisDate), analysisDateAttendanceItems, workHourItems,(Map)schedulMap.get("clockInTimeDataMap"), + (List>)analysisParam.get("evectionList"),(List>)analysisParam.get("askforList")); + clockInTimeMap.put(analysisDate, recordDataTime1); } /** @@ -133,7 +256,7 @@ public class AttendanceAnalysisWrapper extends Service { * @param attendanceItems 考勤项目 */ public Map analysis(String userId, String analysisDate, List> clockInTimeList, List> scheduleResult, List> attendanceItems, List> workHourItems - ,Map clockInTimeDataMap) { + ,Map clockInTimeDataMap,List> evectionList,List> askforList) { Map recordParam = Maps.newHashMap(); Map 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); /** * 津贴 diff --git a/src/com/engine/jucailinkq/attendance/attendanceplan/cmd/GetAttendanceItemsGroupByAttendancePlanDataCmd.java b/src/com/engine/jucailinkq/attendance/attendanceplan/cmd/GetAttendanceItemsGroupByAttendancePlanDataCmd.java new file mode 100644 index 0000000..8dea67e --- /dev/null +++ b/src/com/engine/jucailinkq/attendance/attendanceplan/cmd/GetAttendanceItemsGroupByAttendancePlanDataCmd.java @@ -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> { + @Override + public BizLogContext getLogContext() { + return null; + } + + @Override + public Map execute(CommandContext commandContext) { + + Map 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> attendanceItems = DbTools.getSqlToList(sql); + List 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> sonItemList = DbTools.getSqlToList(sql); + Map>> sonGroupMap = sonItemList.stream().collect(Collectors.groupingBy(e->e.get("sjxm").toString())); + for (Map 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> generalAttendanceItems = DbTools.getSqlToList(sql); + Map>> attendanceItemGroupByPlan = attendanceItems.stream().collect(Collectors.groupingBy(e->e.get("planid").toString())); + resultMap.put("generalAttendanceItems",generalAttendanceItems); + resultMap.put("attendanceItemGroupByPlan",attendanceItemGroupByPlan); + + return resultMap; + } +} diff --git a/src/com/engine/jucailinkq/attendance/attendanceplan/service/AttendancePlanService.java b/src/com/engine/jucailinkq/attendance/attendanceplan/service/AttendancePlanService.java index 3b50284..da5cd26 100644 --- a/src/com/engine/jucailinkq/attendance/attendanceplan/service/AttendancePlanService.java +++ b/src/com/engine/jucailinkq/attendance/attendanceplan/service/AttendancePlanService.java @@ -16,4 +16,11 @@ public interface AttendancePlanService { * @return */ Map getWorkHoursItemByPerson(Map params); + + /** + * 获得根据考勤方案分组的考勤项目 + * @return + */ + Map getAttendanceItemsGroupByAttendancePlanDataCmd(); + } diff --git a/src/com/engine/jucailinkq/attendance/attendanceplan/service/impl/AttendancePlanServiceImpl.java b/src/com/engine/jucailinkq/attendance/attendanceplan/service/impl/AttendancePlanServiceImpl.java index a6dee3e..a4f72ad 100644 --- a/src/com/engine/jucailinkq/attendance/attendanceplan/service/impl/AttendancePlanServiceImpl.java +++ b/src/com/engine/jucailinkq/attendance/attendanceplan/service/impl/AttendancePlanServiceImpl.java @@ -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 getWorkHoursItemByPerson(Map params) { return commandExecutor.execute(new GetWorkHoursItemByPersonCmd(params)); } + + @Override + public Map getAttendanceItemsGroupByAttendancePlanDataCmd() { + return commandExecutor.execute(new GetAttendanceItemsGroupByAttendancePlanDataCmd()); + } } diff --git a/src/com/engine/jucailinkq/attendance/component/persongroup/cmd/GetScheduleFoAnalysisCmd.java b/src/com/engine/jucailinkq/attendance/component/persongroup/cmd/GetScheduleFoAnalysisCmd.java new file mode 100644 index 0000000..9d03408 --- /dev/null +++ b/src/com/engine/jucailinkq/attendance/component/persongroup/cmd/GetScheduleFoAnalysisCmd.java @@ -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> { + + @Override + public BizLogContext getLogContext() { + return null; + } + + public GetScheduleFoAnalysisCmd(Map params) { + this.params = params; + } + + @Override + public Map 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> allScheduleList = (List>)params.get("allScheduleList"); + + Map resultMap = Maps.newHashMap(); + List> dataTableList = Lists.newArrayList(); + + try { + //人员递归查人员、人员分组、部门、分部 + + List> 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> personGroupList = Lists.newArrayList(); + Map>> personBelongGroup = ExtensionClassHolder.getPersonBelongGroupThreadLocal(); + //查人员分组 + List> personnelGroups = personBelongGroup.get(pbdx) == null ? Lists.newArrayList() : personBelongGroup.get(pbdx); + Map>> personnelGroupsCollect = personnelGroups.stream().collect(Collectors.groupingBy(e -> e.get("mainid").toString())); + Set 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 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> departmentList = Lists.newArrayList(); + //查询部门数据 + Map> personInformationThreadLocal = ExtensionClassHolder.getPersonInformationThreadLocal(); + Map personInformationMap = personInformationThreadLocal.get(pbdx); + String pdeptids = Util.null2String(personInformationMap.get("pdeptids")); + String subcompanyid1 = Util.null2String(personInformationMap.get("subcompanyid1")); + List pdeptidList = Lists.newArrayList(pdeptids.split(",")); + List 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> 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>> dataCollect = dataList.stream().collect(Collectors.groupingBy(e -> e.get("pbtj").toString())); + for (SchedulingApproachEnum schedulingApproachEnum : SchedulingApproachEnum.values()) { + List> resulstList = dataCollect.get(schedulingApproachEnum.getKey()); + if (resulstList == null || resulstList.size() == 0) { + continue; + } + Map>> resulstCollect = resulstList.stream().collect(Collectors.groupingBy(e -> Util.null2String(e.get("bcrq")))); + for (Map.Entry>> entry : resulstCollect.entrySet()) { + String bcrq = entry.getKey(); + List> scheduleList = entry.getValue(); + if (scheduleList.size() > 1) { + //优先级。人员 》人员分组》部门》分部 + List> 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; + } + +} diff --git a/src/com/engine/jucailinkq/attendance/component/persongroup/commonutil/PersongroupCommonUtil.java b/src/com/engine/jucailinkq/attendance/component/persongroup/commonutil/PersongroupCommonUtil.java index 02fb562..54dbc58 100644 --- a/src/com/engine/jucailinkq/attendance/component/persongroup/commonutil/PersongroupCommonUtil.java +++ b/src/com/engine/jucailinkq/attendance/component/persongroup/commonutil/PersongroupCommonUtil.java @@ -470,6 +470,63 @@ public class PersongroupCommonUtil { return userIds; } + /** + * 获得人员分组所包含的所有用户id + * @param personnelGroupingList 人员分组集合 + * @return userIDs 人员集合 + */ + public static Map> getUserIdsByPersonnelGrouping(List> personnelGroupingList){ + log.debug("getUserIdsByPersonnelGrouping personnelGroupingList :[{}]",personnelGroupingList); + Map> userMap = Maps.newHashMap(); + for (Map data:personnelGroupingList){ + + //生效日期 + String bdate = Util.null2String(data.get("bdate")); + //失效日期 + String edate = Util.null2String(data.get("edate")); + + Map 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","and"); + filters = filters.replace("or","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> dataList = DbTools.getSqlToList(sql); + for (Map 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> dataList = DbTools.getSqlToList(sqltj); + for (Map dataMap :dataList){ + String hrmId = Util.null2String(dataMap.get("id")); + userMap.put(hrmId,map); + } + } + } + log.debug("userIds size :[{}]",userMap.size()); + return userMap; + } + + /** * 获得人员对应的人员分组 * @return diff --git a/src/com/engine/jucailinkq/attendance/component/persongroup/service/SchedulingResultsService.java b/src/com/engine/jucailinkq/attendance/component/persongroup/service/SchedulingResultsService.java index 6d9fdcd..9a168e3 100644 --- a/src/com/engine/jucailinkq/attendance/component/persongroup/service/SchedulingResultsService.java +++ b/src/com/engine/jucailinkq/attendance/component/persongroup/service/SchedulingResultsService.java @@ -24,19 +24,23 @@ public interface SchedulingResultsService { * @return */ Map saveScheduleResult(Map params); - - /** * 生成排班结果 * @param params * @return */ Map generateSchedule(Map params); - /** * 删除排班结果 * @param params * @return */ Map deleteBatchSchedule(Map params); + + /** + * 获得指定人员使用班次 + * @param params + * @return + */ + Map getUseSchedule(Map params); } diff --git a/src/com/engine/jucailinkq/attendance/component/persongroup/service/impl/SchedulingResultsServiceImpl.java b/src/com/engine/jucailinkq/attendance/component/persongroup/service/impl/SchedulingResultsServiceImpl.java index 534f478..28989da 100644 --- a/src/com/engine/jucailinkq/attendance/component/persongroup/service/impl/SchedulingResultsServiceImpl.java +++ b/src/com/engine/jucailinkq/attendance/component/persongroup/service/impl/SchedulingResultsServiceImpl.java @@ -117,4 +117,13 @@ public class SchedulingResultsServiceImpl extends Service implements SchedulingR return commandExecutor.execute(new DeleteBatchScheduleCmd(params)); } + + @Override + public Map getUseSchedule(Map params) { + Map result = commandExecutor.execute(new GetScheduleFoAnalysisCmd(params)); + Map resultMap = Maps.newHashMap(); + List> dataTableList = (List>)result.get("dataTableList"); + resultMap.put("data",Utils.getSchedulingList(dataTableList)); + return resultMap; + } } diff --git a/src/com/engine/jucailinkq/attendance/vacation/cmd/VocationCmd.java b/src/com/engine/jucailinkq/attendance/vacation/cmd/VocationCmd.java index 070bfa1..f0cc177 100644 --- a/src/com/engine/jucailinkq/attendance/vacation/cmd/VocationCmd.java +++ b/src/com/engine/jucailinkq/attendance/vacation/cmd/VocationCmd.java @@ -95,7 +95,7 @@ public class VocationCmd extends AbstractCommonCommand> { 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> { 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","and"); - zyz = zyz.replace("or","or"); + zyz = Utils.converSQL(zyz); List> dataList = DbTools.getSqlToList(zyz); userIds = dataList.stream().map(e->Util.null2String(e.get("id"))).collect(Collectors.toList()); } diff --git a/src/com/engine/jucailinkq/attendance/vacation/service/impl/VocationServiceImpl.java b/src/com/engine/jucailinkq/attendance/vacation/service/impl/VocationServiceImpl.java index f93108c..5dabd06 100644 --- a/src/com/engine/jucailinkq/attendance/vacation/service/impl/VocationServiceImpl.java +++ b/src/com/engine/jucailinkq/attendance/vacation/service/impl/VocationServiceImpl.java @@ -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 param = Maps.newHashMap(); param.put("modeId",modeId); - Map result = commandExecutor.execute(new GetPersonDateBySuitOrganzation(param)); + Map 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 ("; diff --git a/src/com/engine/jucailinkq/attendance/workflow/action/askforleave/BatchAskForLeaveWorkFlowBackAction.java b/src/com/engine/jucailinkq/attendance/workflow/action/askforleave/BatchAskForLeaveWorkFlowBackAction.java index c90d62c..3fd549e 100644 --- a/src/com/engine/jucailinkq/attendance/workflow/action/askforleave/BatchAskForLeaveWorkFlowBackAction.java +++ b/src/com/engine/jucailinkq/attendance/workflow/action/askforleave/BatchAskForLeaveWorkFlowBackAction.java @@ -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 mainTableData = CommonUtil.getMainTableInfo(requestInfo); + HashMap mainTableData = CommonUtil.getMainTableInfo(requestInfo, WorkFlowTypeEnum.ASKFORLEAVE); log.info("mainTableData : [{}]",mainTableData); // 流程表单明细表1数据 - List> detailTableData = CommonUtil.getDetailTableInfo(requestInfo,0); + List> 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数据 diff --git a/src/com/engine/jucailinkq/attendance/workflow/action/askforleave/GenerateWorkflowVocationAction.java b/src/com/engine/jucailinkq/attendance/workflow/action/askforleave/GenerateWorkflowVocationAction.java index a6cbabc..df13e7e 100644 --- a/src/com/engine/jucailinkq/attendance/workflow/action/askforleave/GenerateWorkflowVocationAction.java +++ b/src/com/engine/jucailinkq/attendance/workflow/action/askforleave/GenerateWorkflowVocationAction.java @@ -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 result = new GetPersonDateBySuitOrganzation(params).execute(null); + Map 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=?"; //获取离职日期 diff --git a/src/com/engine/jucailinkq/common/cmd/GetPersonBySuitOrganzationCmd.java b/src/com/engine/jucailinkq/common/cmd/GetPersonBySuitOrganzationCmd.java index 9525a24..21c11b4 100644 --- a/src/com/engine/jucailinkq/common/cmd/GetPersonBySuitOrganzationCmd.java +++ b/src/com/engine/jucailinkq/common/cmd/GetPersonBySuitOrganzationCmd.java @@ -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> organzationList = DbTools.getSqlToList(sql,modeId); + Map resultMap = Maps.newHashMap(); - //人力资源id,(假别,规则id) + //人力资源id, Map personMap = Maps.newHashMap(); - //人员分组id,(假别,规则id) + //人员分组id, Map personOrganzationMap = Maps.newHashMap(); - //部门id,(假别,规则id) + //部门id, Map departMentMap = Maps.newHashMap(); - //分部id,(假别,规则id) + //分部id Map subCompanyMap = Maps.newHashMap(); + //人员所在的所有数据id + Map>> personAllData = Maps.newHashMap(); for (Map organzation:organzationList){ @@ -56,6 +61,17 @@ public class GetPersonBySuitOrganzationCmd extends AbstractCommonCommand> 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 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 entrySet: personOrganzationMap.entrySet()){ List> personnelGrouping = DbTools.getSqlToList(sql,entrySet.getKey()); - Set userIds = PersongroupCommonUtil.getUserIdsByPersonnelGrouping(personnelGrouping, DateUtil.getCurrentDate()); - for (String userId:userIds){ + String dataid = entrySet.getValue().toString(); + Map> userIdMap = PersongroupCommonUtil.getUserIdsByPersonnelGrouping(personnelGrouping); + for (Map.Entry> entry :userIdMap.entrySet()){ + String userId = entry.getKey(); + Map map = entry.getValue(); if (personMap.get(userId) == null){ - personMap.put(userId,entrySet.getValue()); + personMap.put(userId,dataid); + } + List> 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 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 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> 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 dataMap = Maps.newHashMap(); + dataMap.put("dataid",dataid); + dataMap.put("priority","2"); + list.add(dataMap); + } + } } } @@ -121,10 +177,25 @@ public class GetPersonBySuitOrganzationCmd extends AbstractCommonCommand> 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 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; } } diff --git a/src/com/engine/jucailinkq/common/cmd/GetPersonDateBySuitOrganzation.java b/src/com/engine/jucailinkq/common/cmd/GetPersonVocationBySuitOrganzation.java similarity index 94% rename from src/com/engine/jucailinkq/common/cmd/GetPersonDateBySuitOrganzation.java rename to src/com/engine/jucailinkq/common/cmd/GetPersonVocationBySuitOrganzation.java index cff978c..08054e7 100644 --- a/src/com/engine/jucailinkq/common/cmd/GetPersonDateBySuitOrganzation.java +++ b/src/com/engine/jucailinkq/common/cmd/GetPersonVocationBySuitOrganzation.java @@ -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> { +public class GetPersonVocationBySuitOrganzation extends AbstractCommonCommand> { @Override public BizLogContext getLogContext() { return null; } - public GetPersonDateBySuitOrganzation(Map params){ + public GetPersonVocationBySuitOrganzation(Map params){ this.params=params; } @@ -55,9 +56,9 @@ public class GetPersonDateBySuitOrganzation extends AbstractCommonCommand vacationMap = Maps.newHashMap(); for (Map vocation:vacationList){ vacationMap.put(vocation.get("dataid").toString(),vocation.get("jb").toString()); + vocation.put("zyzValue",getUserIds(vocation)); } - Map>> vacationGroupByDataIdMap = vacationList.stream().collect(Collectors.groupingBy(e->e.get("dataid").toString())); @@ -283,4 +284,16 @@ public class GetPersonDateBySuitOrganzation extends AbstractCommonCommand getUserIds(Map vocation){ + List 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> dataList = DbTools.getSqlToList(zyz); + userIds = dataList.stream().map(e->Util.null2String(e.get("id"))).collect(Collectors.toList()); + } + return userIds; + } } diff --git a/src/com/engine/jucailinkq/common/service/CommonService.java b/src/com/engine/jucailinkq/common/service/CommonService.java index 2ab5748..6887e69 100644 --- a/src/com/engine/jucailinkq/common/service/CommonService.java +++ b/src/com/engine/jucailinkq/common/service/CommonService.java @@ -10,4 +10,6 @@ public interface CommonService { Map updateCommon(Map param); Map insertCommon(Map param); + + Map getPersonBySuitOrganzation(Map param); } diff --git a/src/com/engine/jucailinkq/common/service/impl/CommonServiceImpl.java b/src/com/engine/jucailinkq/common/service/impl/CommonServiceImpl.java index 895d7a4..5eb73e9 100644 --- a/src/com/engine/jucailinkq/common/service/impl/CommonServiceImpl.java +++ b/src/com/engine/jucailinkq/common/service/impl/CommonServiceImpl.java @@ -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 getPersonBySuitOrganzation(Map param) { + return commandExecutor.execute(new GetPersonBySuitOrganzationCmd(param)); + } } diff --git a/src/com/engine/jucailinkq/common/util/CommonUtil.java b/src/com/engine/jucailinkq/common/util/CommonUtil.java index 5a22a9e..3858ea7 100644 --- a/src/com/engine/jucailinkq/common/util/CommonUtil.java +++ b/src/com/engine/jucailinkq/common/util/CommonUtil.java @@ -438,7 +438,7 @@ public class CommonUtil { if (mappingMap.size() != 0){ for (Map detailData:detailDataList){ Map resultMap = Maps.newHashMap(); - resultMap.putAll(resultMap); + resultMap.putAll(detailData); for (Map.Entry entry :mappingMap.entrySet()){ if (entry.getValue()!=null && !"".equals(entry.getValue())){ resultMap.put(entry.getKey(),detailData.get(entry.getValue())); diff --git a/src/com/engine/jucailinkq/common/util/DateUtil.java b/src/com/engine/jucailinkq/common/util/DateUtil.java index 4b8c25a..9998338 100644 --- a/src/com/engine/jucailinkq/common/util/DateUtil.java +++ b/src/com/engine/jucailinkq/common/util/DateUtil.java @@ -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: