diff --git a/src/com/engine/jucailinkq/attendance/attendanceanalysis/cmd/GetAskForLeaveCmd.java b/src/com/engine/jucailinkq/attendance/attendanceanalysis/cmd/GetAskForLeaveCmd.java index bff5bd3..c2f3dad 100644 --- a/src/com/engine/jucailinkq/attendance/attendanceanalysis/cmd/GetAskForLeaveCmd.java +++ b/src/com/engine/jucailinkq/attendance/attendanceanalysis/cmd/GetAskForLeaveCmd.java @@ -6,10 +6,7 @@ import com.engine.jucailinkq.attendance.enums.ClassBelongToEnum; 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.CommonUtil; -import com.engine.jucailinkq.common.util.DateUtil; -import com.engine.jucailinkq.common.util.DbTools; -import com.engine.jucailinkq.common.util.Utils; +import com.engine.jucailinkq.common.util.*; import com.engine.core.interceptor.CommandContext; import com.google.common.collect.Lists; import com.google.common.collect.Maps; @@ -174,10 +171,11 @@ public class GetAskForLeaveCmd extends AbstractCommonCommand> put("dtjssj",askForLeaveData.get("jsrq")+" "+askForLeaveData.get("jssj")); put("ksdk",askForLeaveItem.get("lgsbxydk")); put("jsdk",askForLeaveItem.get("fgsbxydk")); - put("tqdkfzs","60"); - put("thdkfzs","60"); + put("tqdkfzs", ExtensionClassHolder.getGlobalSetMap().get("defaultClockRange") == null?"60":ExtensionClassHolder.getGlobalSetMap().get("defaultClockRange")); + put("thdkfzs", ExtensionClassHolder.getGlobalSetMap().get("defaultClockRange") == null?"60":ExtensionClassHolder.getGlobalSetMap().get("defaultClockRange")); put("tqlghlfzs",askForLeaveItem.get("tqlghlfzs")); put("thfghlfzs",askForLeaveItem.get("thfghlfzs")); + put("zysd",askForLeaveItem.get("zysd")); }}; askForLeaveSchedule.add(askForLeaveMap); } diff --git a/src/com/engine/jucailinkq/attendance/attendanceanalysis/cmd/GetClockInTimeListCmd.java b/src/com/engine/jucailinkq/attendance/attendanceanalysis/cmd/GetClockInTimeListCmd.java index 4aa841a..8521950 100644 --- a/src/com/engine/jucailinkq/attendance/attendanceanalysis/cmd/GetClockInTimeListCmd.java +++ b/src/com/engine/jucailinkq/attendance/attendanceanalysis/cmd/GetClockInTimeListCmd.java @@ -33,7 +33,7 @@ public class GetClockInTimeListCmd extends AbstractCommonCommand execute(CommandContext commandContext) { - //打卡日期 + //分析日期 String needGetDate = Util.null2String(params.get("date")); //打卡数据 List> clockInTimeList = (List>)params.get("clockInTimeList"); @@ -121,9 +121,9 @@ 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<=?"; @@ -154,7 +154,7 @@ public class GetClockInTimeListCmd extends AbstractCommonCommand> { put("dtjssj",evectionData.get("jsrq")+" "+evectionData.get("jssj")); put("ksdk",evectionItem.get("lgsbxydk")); put("jsdk",evectionItem.get("fgsbxydk")); - put("tqdkfzs","60"); - put("thdkfzs","60"); + put("tqdkfzs", ExtensionClassHolder.getGlobalSetMap().get("defaultClockRange") == null?"60":ExtensionClassHolder.getGlobalSetMap().get("defaultClockRange")); + put("thdkfzs", ExtensionClassHolder.getGlobalSetMap().get("defaultClockRange")== null?"60":ExtensionClassHolder.getGlobalSetMap().get("defaultClockRange")); put("tqlghlfzs",evectionItem.get("tqlghlfzs")); put("thfghlfzs",evectionItem.get("thfghlfzs")); + put("zysd",evectionItem.get("zysd")); }}; evectionSchedule.add(evectioneMap); } diff --git a/src/com/engine/jucailinkq/attendance/attendanceanalysis/cmd/GetScheduleResultListCmd.java b/src/com/engine/jucailinkq/attendance/attendanceanalysis/cmd/GetScheduleResultListCmd.java index 8cbb4e4..2770722 100644 --- a/src/com/engine/jucailinkq/attendance/attendanceanalysis/cmd/GetScheduleResultListCmd.java +++ b/src/com/engine/jucailinkq/attendance/attendanceanalysis/cmd/GetScheduleResultListCmd.java @@ -11,6 +11,7 @@ import com.engine.common.entity.BizLogContext; 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; import com.engine.core.interceptor.CommandContext; import com.google.common.collect.Lists; @@ -93,7 +94,9 @@ public class GetScheduleResultListCmd extends AbstractCommonCommand newMap = Maps.newHashMap(); newMap.putAll(map); newMap.put("rqlx",rqlx); - newMap.put("sfxx",sfxx); + if (!newMap.get("sfxx").equals(CheckBoxEnum.CHECKED.getKey())){ + newMap.put("sfxx",sfxx); + } adjustWorkOverTimeClass(newMap, finalAttendanceItems,commandContext); classs.add(newMap); } @@ -116,7 +119,7 @@ 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")))); //考勤项目 @@ -143,8 +146,12 @@ public class GetScheduleResultListCmd extends AbstractCommonCommand0){ map.putAll(resultList.get(0)); + map.put("sfxx",Util.null2String(resultList.get(0).get("sfxx"))); }else { map.put("edsc","0"); + if (schedulingdateMap != null && schedulingdateMap.size()>0){ + map.put("sfxx",Util.null2String(schedulingdateMap.get(0).get("sfxx"))); + } } map.put("edts","0"); map.put("bdlx", ClassSegmentTypeEnum.OVERTIME_PLAN.getKey()); @@ -152,11 +159,9 @@ public class GetScheduleResultListCmd extends AbstractCommonCommand0){ - map.put("sfxx",Util.null2String(schedulingdateMap.get(0).get("sfxx"))); - } - map.put("tqdkfzs","60"); - map.put("thdkfzs","60"); + map.put("overtimePlanId",overtimePlan.get("id")); + map.put("tqdkfzs", ExtensionClassHolder.getGlobalSetMap().get("defaultClockRange") == null?"60":ExtensionClassHolder.getGlobalSetMap().get("defaultClockRange")); + map.put("thdkfzs",ExtensionClassHolder.getGlobalSetMap().get("defaultClockRange") == null?"60":ExtensionClassHolder.getGlobalSetMap().get("defaultClockRange")); map.put("rqlx",dateMap.get(e.getKey())); map.put("edxss",overtimePlan.get("jbsc")); map.put("edfzs",Double.valueOf(overtimePlan.get("jbsc").toString())*60); diff --git a/src/com/engine/jucailinkq/attendance/attendanceanalysis/cmd/getclockInpoint/GetClockInPointCmd.java b/src/com/engine/jucailinkq/attendance/attendanceanalysis/cmd/getclockInpoint/GetClockInPointCmd.java index a046516..a928f12 100644 --- a/src/com/engine/jucailinkq/attendance/attendanceanalysis/cmd/getclockInpoint/GetClockInPointCmd.java +++ b/src/com/engine/jucailinkq/attendance/attendanceanalysis/cmd/getclockInpoint/GetClockInPointCmd.java @@ -123,20 +123,22 @@ public class GetClockInPointCmd extends AbstractCommonCommand lists = Lists.newArrayList(); for (int i=0;i=0 - && !ClassSegmentTypeEnum.REST_AND_DINE.getKey().equals(bdlx) && !ClassSegmentTypeEnum.REST_PERIOD.getKey().equals(bdlx) && !ClassSegmentTypeEnum.DINING_PERIOD.getKey().equals(bdlx)){ - lists.add(dtkssj+"&"+ClockPointEnum.START.getKey()+"&"+Util.null2String(scheduleResult.get(i).get("ksdk"))); - } - if (DateUtil.getTime(evctiondtkssj).compareTo(DateUtil.getTime(dtjssj)) <= 0 && DateUtil.getTime(evctiondtjssj).compareTo(DateUtil.getTime(dtjssj)) >=0 - && !ClassSegmentTypeEnum.REST_AND_DINE.getKey().equals(bdlx) && !ClassSegmentTypeEnum.REST_PERIOD.getKey().equals(bdlx) && !ClassSegmentTypeEnum.DINING_PERIOD.getKey().equals(bdlx)){ - lists.add(dtjssj+"&"+ClockPointEnum.END.getKey()+"&"+Util.null2String(scheduleResult.get(i).get("jsdk"))); + if (zysd.contains(Utils.getWorkFor(bdlx))){ + if (DateUtil.getTime(evctiondtkssj).compareTo(DateUtil.getTime(dtkssj)) <= 0 && DateUtil.getTime(evctiondtjssj).compareTo(DateUtil.getTime(dtkssj)) >=0 + && !ClassSegmentTypeEnum.REST_AND_DINE.getKey().equals(bdlx) && !ClassSegmentTypeEnum.REST_PERIOD.getKey().equals(bdlx) && !ClassSegmentTypeEnum.DINING_PERIOD.getKey().equals(bdlx)){ + lists.add(dtkssj+"&"+ClockPointEnum.START.getKey()+"&"+Util.null2String(scheduleResult.get(i).get("ksdk"))); + } + if (DateUtil.getTime(evctiondtkssj).compareTo(DateUtil.getTime(dtjssj)) <= 0 && DateUtil.getTime(evctiondtjssj).compareTo(DateUtil.getTime(dtjssj)) >=0 + && !ClassSegmentTypeEnum.REST_AND_DINE.getKey().equals(bdlx) && !ClassSegmentTypeEnum.REST_PERIOD.getKey().equals(bdlx) && !ClassSegmentTypeEnum.DINING_PERIOD.getKey().equals(bdlx)){ + lists.add(dtjssj+"&"+ClockPointEnum.END.getKey()+"&"+Util.null2String(scheduleResult.get(i).get("jsdk"))); + } } } //新打卡 @@ -561,46 +563,71 @@ public class GetClockInPointCmd extends AbstractCommonCommand> adjustWorkOverTimeClock(List> scheduleResult,String analysisDate){ - scheduleResult = scheduleResult.stream().sorted(Comparator.comparing(e->DateUtil.getTime(Utils.getkssjTime(e,analysisDate)).toInstant(ZoneOffset.of("+8")).toEpochMilli())).collect(Collectors.toList()); - for (int i=0;i scheduleMap = scheduleResult.get(i); + List> workscheduleList = scheduleResult.stream().filter(e->!Utils.ifRestClassSegment(e.get("bdlx").toString())).collect(Collectors.toList()); + List> restscheduleList = scheduleResult.stream().filter(e->Utils.ifRestClassSegment(e.get("bdlx").toString())).collect(Collectors.toList()); + + workscheduleList = workscheduleList.stream().sorted(Comparator.comparing(e->DateUtil.getTime(Utils.getkssjTime(e,analysisDate)).toInstant(ZoneOffset.of("+8")).toEpochMilli())).collect(Collectors.toList()); + for (int i=0;i scheduleMap = workscheduleList.get(i); if (scheduleMap.get("bdlx").equals(ClassSegmentTypeEnum.OVERTIME_PLAN.getKey())){ String kssj = Utils.getkssjTime(scheduleMap,analysisDate); String jssj = Utils.getjssjTime(scheduleMap,analysisDate); - Map beforeScheduleMap = i-1 >=0?scheduleResult.get(i-1):null; - Map afterScheduleMap = i+1 <=scheduleResult.size()-1?scheduleResult.get(i+1):null; - if (beforeScheduleMap != null){ + Map beforeScheduleMap = i-1 >=0?workscheduleList.get(i-1):null; + Map afterScheduleMap = i+1 <=workscheduleList.size()-1?workscheduleList.get(i+1):null; + if (beforeScheduleMap != null && afterScheduleMap != null && ifWorkClassSegment(beforeScheduleMap.get("bdlx").toString()) && + ifWorkClassSegment(afterScheduleMap.get("bdlx").toString())){ + //加班计划处在工作中间,休息时段加班 String beforejssj = Utils.getjssjTime(beforeScheduleMap,analysisDate); - if (DateUtil.getTime(kssj).compareTo(DateUtil.getTime(beforejssj)) == 0 && ifWorkClassSegment(beforeScheduleMap.get("bdlx").toString()) && - scheduleMap.get("jsdk").equals(CheckBoxEnum.CHECKED.getKey())){ - scheduleMap.put("ksdk",CheckBoxEnum.UNCHECKED.getKey()); + String afterkssj = Utils.getkssjTime(afterScheduleMap,analysisDate); + if (DateUtil.getTime(kssj).compareTo(DateUtil.getTime(beforejssj)) == 0){ beforeScheduleMap.put("jsdk",CheckBoxEnum.UNCHECKED.getKey()); - } - if (DateUtil.getTime(kssj).compareTo(DateUtil.getTime(beforejssj)) == 0 && ifWorkClassSegment(beforeScheduleMap.get("bdlx").toString()) && - scheduleMap.get("jsdk").equals(CheckBoxEnum.UNCHECKED.getKey()) && scheduleMap.get("ksdk").equals(CheckBoxEnum.CHECKED.getKey()) && - beforeScheduleMap.get("jsdk").equals(CheckBoxEnum.CHECKED.getKey())){ scheduleMap.put("ksdk",CheckBoxEnum.UNCHECKED.getKey()); + beforeScheduleMap.put("jsdk",CheckBoxEnum.UNCHECKED.getKey()); } - - } - if (afterScheduleMap != null){ - String afterkssj = Utils.getkssjTime(afterScheduleMap,analysisDate); - if (DateUtil.getTime(jssj).compareTo(DateUtil.getTime(afterkssj)) == 0 && ifWorkClassSegment(afterScheduleMap.get("bdlx").toString()) && - scheduleMap.get("ksdk").equals(CheckBoxEnum.CHECKED.getKey())){ + if (DateUtil.getTime(jssj).compareTo(DateUtil.getTime(afterkssj)) == 0){ scheduleMap.put("jsdk",CheckBoxEnum.UNCHECKED.getKey()); afterScheduleMap.put("ksdk",CheckBoxEnum.UNCHECKED.getKey()); } - if (DateUtil.getTime(jssj).compareTo(DateUtil.getTime(afterkssj)) == 0 && ifWorkClassSegment(afterScheduleMap.get("bdlx").toString()) && - scheduleMap.get("ksdk").equals(CheckBoxEnum.UNCHECKED.getKey()) &&scheduleMap.get("jsdk").equals(CheckBoxEnum.CHECKED.getKey()) && - afterScheduleMap.get("ksdk").equals(CheckBoxEnum.CHECKED.getKey())){ - scheduleMap.put("jsdk",CheckBoxEnum.UNCHECKED.getKey()); + }else { + if (beforeScheduleMap != null){ + String beforejssj = Utils.getjssjTime(beforeScheduleMap,analysisDate); + if (DateUtil.getTime(kssj).compareTo(DateUtil.getTime(beforejssj)) == 0 && ifWorkClassSegment(beforeScheduleMap.get("bdlx").toString()) && + scheduleMap.get("jsdk").equals(CheckBoxEnum.CHECKED.getKey())){ + scheduleMap.put("ksdk",CheckBoxEnum.UNCHECKED.getKey()); + beforeScheduleMap.put("jsdk",CheckBoxEnum.UNCHECKED.getKey()); + } + if (DateUtil.getTime(kssj).compareTo(DateUtil.getTime(beforejssj)) == 0 && ifWorkClassSegment(beforeScheduleMap.get("bdlx").toString()) && + scheduleMap.get("jsdk").equals(CheckBoxEnum.UNCHECKED.getKey()) && scheduleMap.get("ksdk").equals(CheckBoxEnum.CHECKED.getKey()) && + beforeScheduleMap.get("jsdk").equals(CheckBoxEnum.CHECKED.getKey())){ + scheduleMap.put("ksdk",CheckBoxEnum.UNCHECKED.getKey()); + } + + } + if (afterScheduleMap != null){ + String afterkssj = Utils.getkssjTime(afterScheduleMap,analysisDate); + if (DateUtil.getTime(jssj).compareTo(DateUtil.getTime(afterkssj)) == 0 && ifWorkClassSegment(afterScheduleMap.get("bdlx").toString()) && + scheduleMap.get("ksdk").equals(CheckBoxEnum.CHECKED.getKey())){ + scheduleMap.put("jsdk",CheckBoxEnum.UNCHECKED.getKey()); + afterScheduleMap.put("ksdk",CheckBoxEnum.UNCHECKED.getKey()); + } + + if (DateUtil.getTime(jssj).compareTo(DateUtil.getTime(afterkssj)) == 0 && ifWorkClassSegment(afterScheduleMap.get("bdlx").toString()) && + scheduleMap.get("ksdk").equals(CheckBoxEnum.UNCHECKED.getKey()) &&scheduleMap.get("jsdk").equals(CheckBoxEnum.CHECKED.getKey()) && + afterScheduleMap.get("ksdk").equals(CheckBoxEnum.CHECKED.getKey())){ + scheduleMap.put("jsdk",CheckBoxEnum.UNCHECKED.getKey()); + } } } } } + List> newList = Lists.newArrayList(); + newList.addAll(workscheduleList); + newList.addAll(restscheduleList); + newList = newList.stream().sorted(Comparator.comparing(e->DateUtil.getTime(Utils.getkssjTime(e,analysisDate)).toInstant(ZoneOffset.of("+8")).toEpochMilli())).collect(Collectors.toList()); + - return scheduleResult; + return newList; } /** * 早晚上下班弹性 @@ -791,7 +818,7 @@ public class GetClockInPointCmd extends AbstractCommonCommand> toRestNearestClcokInTime = Utils.getNearestClcokInTimeCmd(DateUtil.beforeMinutes(dtkssj,dtzddxfz), clockInTimeList); diff --git a/src/com/engine/jucailinkq/attendance/attendanceanalysis/cmd/workovertime/GetOvertimeDurationCmd.java b/src/com/engine/jucailinkq/attendance/attendanceanalysis/cmd/workovertime/GetOvertimeDurationCmd.java index fd2b662..497e97b 100644 --- a/src/com/engine/jucailinkq/attendance/attendanceanalysis/cmd/workovertime/GetOvertimeDurationCmd.java +++ b/src/com/engine/jucailinkq/attendance/attendanceanalysis/cmd/workovertime/GetOvertimeDurationCmd.java @@ -81,12 +81,12 @@ public class GetOvertimeDurationCmd extends AbstractCommonCommand getWorkOverTimeParam = Maps.newHashMap(); //加班开始时间 String kssj = Utils.getkssjTime(scheduleMap, analysisDate); - ClockPointDTO startClockPointDTO = clcokInTimeDataList.stream().filter(e->e.getPointType() == ClockPointEnum.START && - DateUtil.getTime(kssj).compareTo(DateUtil.getTime(e.getClassTime())) == 0).collect(Collectors.toList()).get(0); + List startClockPointDTO = clcokInTimeDataList.stream().filter(e->e.getPointType() == ClockPointEnum.START && + DateUtil.getTime(kssj).compareTo(DateUtil.getTime(e.getClassTime())) == 0).collect(Collectors.toList()); //加班结束时间 String jssj = Utils.getjssjTime(scheduleMap, analysisDate); - ClockPointDTO endClockPointDTO = clcokInTimeDataList.stream().filter(e->e.getPointType() == ClockPointEnum.END && - DateUtil.getTime(jssj).compareTo(DateUtil.getTime(e.getClassTime())) == 0).collect(Collectors.toList()).get(0); + List endClockPointDTO = clcokInTimeDataList.stream().filter(e->e.getPointType() == ClockPointEnum.END && + DateUtil.getTime(jssj).compareTo(DateUtil.getTime(e.getClassTime())) == 0).collect(Collectors.toList()); //加班实际开始时间 String realityStartTime = ""; //加班实际结束时间 @@ -191,8 +191,8 @@ public class GetOvertimeDurationCmd extends AbstractCommonCommand0 && startClockPointDTO.get(0).getElasticTime() != null && !startClockPointDTO.get(0).getElasticTime().equals("")){ + kssjTime = startClockPointDTO.get(0).getElasticTime(); } if (DateUtil.getTime(realityStartTime).compareTo(DateUtil.getTime(kssjTime)) > 0) { beLateTime = DateUtil.getBetWeenMinutes(kssjTime, realityStartTime); @@ -234,8 +234,9 @@ public class GetOvertimeDurationCmd extends AbstractCommonCommand0 && endClockPointDTO.get(0).getElasticTime() != null && !endClockPointDTO.get(0).getElasticTime().equals("")){ + jssjTime = endClockPointDTO.get(0).getElasticTime(); } if (DateUtil.getTime(realityEndime).compareTo(DateUtil.getTime(jssjTime)) < 0) { leaveElaryTime = DateUtil.getBetWeenMinutes(realityEndime, jssjTime); diff --git a/src/com/engine/jucailinkq/attendance/attendanceanalysis/cmd/workovertime/SaveWorkOverTimeCmd.java b/src/com/engine/jucailinkq/attendance/attendanceanalysis/cmd/workovertime/SaveWorkOverTimeCmd.java index 61a7c97..844337c 100644 --- a/src/com/engine/jucailinkq/attendance/attendanceanalysis/cmd/workovertime/SaveWorkOverTimeCmd.java +++ b/src/com/engine/jucailinkq/attendance/attendanceanalysis/cmd/workovertime/SaveWorkOverTimeCmd.java @@ -173,6 +173,9 @@ public class SaveWorkOverTimeCmd extends AbstractCommonCommand departEmployeeList = Lists.newArrayList(DbTools.getSqlToList(queryDepartEmployeeSql).stream().map(e->e.get("resourceid").toString()).collect(Collectors.toSet())); + List> departEmployeePartition = Lists.partition(departEmployeeList,200); + + String queryUserSql = "select id,departmentid,subcompanyid1,companystartdate from hrmresource where status <> '5' and status <> '4' and status <> '7'"; List> userList = DbTools.getSqlToList(queryUserSql); + for (List userIdPartition :departEmployeePartition){ + String sql = "select id,departmentid,subcompanyid1,companystartdate from hrmresource where id ("+String.join(",",userIdPartition)+")"; + userList.addAll(DbTools.getSqlToList(sql)); + } Map getAttendanceparam = Maps.newHashMap(); getAttendanceparam.put("userList",userList); - getAttendanceparam.put("executeDate",executeDate); + getAttendanceparam.put("executeDate",useDate); Map attendanceCycle = utilService.getAttendanceCycle(getAttendanceparam); Set allDates = Sets.newHashSet(); for (Map.Entry entry : attendanceCycle.entrySet()){ - allDates.addAll((Set)entry.getValue()); + Set sets = (Set)entry.getValue(); + for (String date :sets){ + if (DateUtil.getTime(date).compareTo(DateUtil.getTime(DateUtil.beforeDay(useDate,1))) != 0){ + allDates.add(date); + allDates.add(DateUtil.beforeDay(date,1)); + allDates.add(DateUtil.AfterDay(date,1)); + } + } } + + + List allDateList = Lists.newArrayList(allDates); 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()); + + + List> needAnalysisDateList = Lists.partition(allDateList,200); + List> dataList = Lists.newArrayList(); + List> attendaceResult = Lists.newArrayList(); + for (List list:needAnalysisDateList){ + String dateStrs = String.join(",",list); + String sql = "select id,userid,signdate,signtime from hrmschedulesign where isincom=1 and signdate in ("+dateStrs+") order by signdate,signtime"; + List> hrmschedulesignList = DbTools.getSqlToList(sql); + if (hrmschedulesignList.size() > 0){ + dataList.addAll(hrmschedulesignList); + } + //补打卡记录 + sql = "select id,bdkry userid,dkrq signdate,dksj signtime from uf_jcl_kq_bdkjl where dkrq in ("+dateStrs+") and jlzt=1 order by dkrq,dksj"; + List> makeUpList = DbTools.getSqlToList(sql); + if (makeUpList.size() > 0){ + dataList.addAll(makeUpList); + } - String sql = "select id,userid,signdate,signtime from hrmschedulesign where isincom=1 and signdate >= ? and signdate <= ? order by signdate,signtime"; - List> dataList = DbTools.getSqlToList(sql,DateUtil.beforeDay(allDateList.get(0),2),executeDate); - //补打卡记录 - sql = "select id,bdkry userid,dkrq signdate,dksj signtime from uf_jcl_kq_bdkjl where dkrq >= ? and dkrq <= ? and jlzt=1 order by dkrq,dksj"; - List> makeUpList = DbTools.getSqlToList(sql,DateUtil.beforeDay(allDateList.get(0),2),executeDate); - if (makeUpList.size() > 0){ - dataList.addAll(makeUpList); + sql = "select sjzt,sgsj,ygid,rq from uf_jcl_kq_cqjg where rq in ("+dateStrs+")"; + List> resultList = DbTools.getSqlToList(sql); + if (resultList.size() > 0){ + attendaceResult.addAll(resultList); + } } + + 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 in ("+String.join(",",allDateList)+")"; - List> attendaceResult = DbTools.getSqlToList(sql); - Map>> attendaceGroupById = attendaceResult.stream().collect(Collectors.groupingBy(e->e.get("ygid").toString())); + Map>> attendaceGroupById = attendaceResult.stream().collect(Collectors.groupingBy(e->e.get("ygid").toString())); //初始化扩展类 CommonUtil.initExtensionClassHolder(); for (Map userMap:userList){ String userId = Util.null2String(userMap.get("id")); + //入职日期 + String companystartDate = Util.null2String(userMap.get("companystartdate")); + List analysisDateList = Lists.newArrayList((Set)attendanceCycle.get(userId)); - analysisDateList = analysisDateList.stream().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",executeDate); - paramMap.put("endDate",executeDate); - 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"); - - 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())); + try { + 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"); + + 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())); + } + attendanceAnalysisService.attendanceAnalysis(userId,analysisDateList,collect.get(userMap.get("id")),attendanceItems,workHourItems,clockInTimeMap,attendaceResultMap); + }catch (Exception e){ + log.error("AttendanceAnalysisJob userId:[{}],analysisDateList: [{}]",userId,analysisDateList); + log.error("AttendanceAnalysisJob error : [{}]",e); } - - attendanceAnalysisService.attendanceAnalysis(userId,analysisDateList,collect.get(userMap.get("id")),attendanceItems,workHourItems,clockInTimeMap,attendaceResultMap); } Map param = Maps.newHashMap(); - param.put("startDate",DateUtil.beforeDay(allDateList.get(0),2)); - param.put("endDate",executeDate); + param.put("startDate",DateUtil.beforeDay(useDate,3)); + param.put("endDate",useDate); allowanceService.addAllowanceRecords(param); log.info("********AttendanceAnalysisJob end********"); } + } 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 d8088ad..52c0bf1 100644 --- a/src/com/engine/jucailinkq/attendance/attendanceanalysis/service/impl/ShiftServiceImpl.java +++ b/src/com/engine/jucailinkq/attendance/attendanceanalysis/service/impl/ShiftServiceImpl.java @@ -13,6 +13,7 @@ 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; import com.engine.core.impl.Service; import com.google.common.collect.Lists; @@ -354,7 +355,7 @@ public class ShiftServiceImpl extends Service implements ShiftService { resultMap.put(punchDate,classs); /** 加班计划*/ - sql = "select b.jbry,b.ksrq,b.kssj,b.jblx,b.jsrq,b.jssj,b.jbsc,b.gsrq from uf_jcl_kq_jbjh a left join uf_jcl_kq_jbjh_dt1 b on a.id=b.mainid where b.jbry =? and b.gsrq>=? and b.gsrq<=? and (b.jbcx=0 or b.jbcx is null) and a.jlzt=1"; + sql = "select a.id,b.jbry,b.ksrq,b.kssj,b.jblx,b.jsrq,b.jssj,b.jbsc,b.gsrq from uf_jcl_kq_jbjh a left join uf_jcl_kq_jbjh_dt1 b on a.id=b.mainid where b.jbry =? and b.gsrq>=? and b.gsrq<=? and (b.jbcx=0 or b.jbcx is null) and a.jlzt=1"; Map>> overtimePlanMap = DbTools.getSqlToList(sql,params.get("pbdx"),punchDate,punchDate).stream().collect(Collectors.groupingBy(e -> Util.null2String(e.get("gsrq")))); //考勤项目 @@ -407,11 +408,12 @@ public class ShiftServiceImpl extends Service implements ShiftService { map.put("dtjssj",overtimePlan.get("jssj")); map.put("ksdk","0"); map.put("jsdk","0"); + map.put("overtimePlanId",overtimePlan.get("id")); if (punchDate.compareTo(e.getKey()) == 0){ map.put("sfxx", restSign); } - map.put("tqdkfzs","60"); - map.put("thdkfzs","60"); + map.put("tqdkfzs", ExtensionClassHolder.getGlobalSetMap().get("defaultClockRange") == null?"60":ExtensionClassHolder.getGlobalSetMap().get("defaultClockRange")); + map.put("thdkfzs",ExtensionClassHolder.getGlobalSetMap().get("defaultClockRange") == null?"60":ExtensionClassHolder.getGlobalSetMap().get("defaultClockRange")); map.put("rqlx",dateType); map.put("edxss",overtimePlan.get("jbsc")); map.put("edfzs",Double.valueOf(overtimePlan.get("jbsc").toString())*60); diff --git a/src/com/engine/jucailinkq/attendance/attendanceanalysis/service/impl/WorkOverTimeServiceImpl.java b/src/com/engine/jucailinkq/attendance/attendanceanalysis/service/impl/WorkOverTimeServiceImpl.java index 0f1fe47..92ff412 100644 --- a/src/com/engine/jucailinkq/attendance/attendanceanalysis/service/impl/WorkOverTimeServiceImpl.java +++ b/src/com/engine/jucailinkq/attendance/attendanceanalysis/service/impl/WorkOverTimeServiceImpl.java @@ -87,6 +87,8 @@ public class WorkOverTimeServiceImpl extends Service implements WorkOverTimeServ } //获得加班时长以及加班开始时间和结束时间 params.putAll(overTimeDuraionMap); + //加班结果归属日期 + params.put("jbgzrq",analysisDate); //获得加班项目 Map fatherSaveWorkOverTimeMap = commandExecutor.execute(new SaveWorkOverTimeCmd(params)); @@ -130,6 +132,7 @@ public class WorkOverTimeServiceImpl extends Service implements WorkOverTimeServ if (beforeschedule.get("gsrq").equals(ClassBelongToEnum.NOWDAY.getKey())){ beforeschedule.put("overTimeItem",getWorkOvertimeItems(beforeschedule,attendanceItems,false)); }else { + //归属日期不属于当日,重新查找对应的考勤项目 beforeschedule.put("overTimeItem",getWorkOvertimeItems(beforeschedule,attendanceItems,true)); } @@ -150,6 +153,7 @@ public class WorkOverTimeServiceImpl extends Service implements WorkOverTimeServ if (afterschedule.get("gsrq").equals(ClassBelongToEnum.NOWDAY.getKey())){ afterschedule.put("overTimeItem",getWorkOvertimeItems(afterschedule,attendanceItems,false)); }else { + //归属日期不属于当日,重新查找对应的考勤项目 afterschedule.put("overTimeItem",getWorkOvertimeItems(afterschedule,attendanceItems,true)); } scheduleMapList.add(afterschedule); @@ -165,7 +169,11 @@ public class WorkOverTimeServiceImpl extends Service implements WorkOverTimeServ if (CheckBoxEnum.CHECKED.getKey().equals(tqdkjrjb) && CheckBoxEnum.CHECKED.getKey().equals(scheduleMapList.get(0).get("ksdk"))) { jbsc = DateUtil.getBetWeenMinutes(realityStartTime,scheduleMapList.get(0).get("dtjssj").toString()); }else { - jbsc = DateUtil.getBetWeenMinutes(Utils.getkssjTime(scheduleMapList.get(0),analysisDate),Utils.getjssjTime(scheduleMapList.get(0),analysisDate)); + if (scheduleMapList.get(0).get("dtkssj").equals(scheduleMapList.get(0).get("dtjssj"))){ + jbsc=0; + }else { + jbsc = DateUtil.getBetWeenMinutes(Utils.getkssjTime(scheduleMapList.get(0),analysisDate),Utils.getjssjTime(scheduleMapList.get(0),analysisDate)); + } } if (fatherSaveWorkOverTimeMap.get("workOverTimeItems") != null){ @@ -189,13 +197,24 @@ public class WorkOverTimeServiceImpl extends Service implements WorkOverTimeServ beforeParam.put("realityEndime",Utils.getjssjTime(scheduleMapList.get(0),analysisDate)); beforeParam.put("beSplit",true); beforeParam.put("jbsc",jbsc); + beforeParam.put("jbgzrq",realityStartTime.split(" ")[0]); + if (DateUtil.getTime(realityStartTime.split(" ")[0]).compareTo(DateUtil.getTime(analysisDate)) == 0 && + DateUtil.getTime(realityEndime.split(" ")[0]).compareTo(DateUtil.getTime(analysisDate)) == 0){ + //加班开始和结束都在当天 + if (DateUtil.getTime(beforeParam.get("realityEndime").toString()).compareTo(DateUtil.getTime(analysisDate+" 12:00:00")) <0){ + //拆分时间在分析日期12点之前,归属于上一天 + beforeParam.put("jbgzrq",DateUtil.beforeDay(analysisDate,1)); + } - Map beforeSaveWorkOverTimeMap = commandExecutor.execute(new SaveWorkOverTimeCmd(beforeParam)); - if (beforeSaveWorkOverTimeMap.get("overTimeHoliday") != null){ - overTimeHolidayList.add((Map)beforeSaveWorkOverTimeMap.get("overTimeHoliday")); } - if (beforeSaveWorkOverTimeMap.get("overTimeResult") != null){ - overTimeResultList.add((Map)beforeSaveWorkOverTimeMap.get("overTimeResult")); + if (jbsc != 0){ + Map beforeSaveWorkOverTimeMap = commandExecutor.execute(new SaveWorkOverTimeCmd(beforeParam)); + if (beforeSaveWorkOverTimeMap.get("overTimeHoliday") != null){ + overTimeHolidayList.add((Map)beforeSaveWorkOverTimeMap.get("overTimeHoliday")); + } + if (beforeSaveWorkOverTimeMap.get("overTimeResult") != null){ + overTimeResultList.add((Map)beforeSaveWorkOverTimeMap.get("overTimeResult")); + } } Map afterParam = Maps.newHashMap(); @@ -206,14 +225,25 @@ public class WorkOverTimeServiceImpl extends Service implements WorkOverTimeServ afterParam.put("beSplit",true); afterParam.put("realityStartTime",Utils.getkssjTime(scheduleMapList.get(1),analysisDate)); afterParam.put("realityEndime",realityEndime); - Map afterSaveWorkOverTimeMap = commandExecutor.execute(new SaveWorkOverTimeCmd(afterParam)); - if (afterSaveWorkOverTimeMap.get("overTimeHoliday") != null){ - overTimeHolidayList.add((Map)afterSaveWorkOverTimeMap.get("overTimeHoliday")); + afterParam.put("jbgzrq",realityEndime.split(" ")[0]); + if (DateUtil.getTime(realityStartTime.split(" ")[0]).compareTo(DateUtil.getTime(analysisDate)) == 0 && + DateUtil.getTime(realityEndime.split(" ")[0]).compareTo(DateUtil.getTime(analysisDate)) == 0){ + //加班开始和结束都在当天 + if (DateUtil.getTime(afterParam.get("realityStartTime").toString()).compareTo(DateUtil.getTime(analysisDate+" 12:00:00")) >=0){ + //拆分时间在分析日期12点之后,归属于后一天 + afterParam.put("jbgzrq",DateUtil.AfterDay(analysisDate,1)); + } + } - if (afterSaveWorkOverTimeMap.get("overTimeResult") != null){ - overTimeResultList.add((Map)afterSaveWorkOverTimeMap.get("overTimeResult")); + if (afterjbsc != 0){ + Map afterSaveWorkOverTimeMap = commandExecutor.execute(new SaveWorkOverTimeCmd(afterParam)); + if (afterSaveWorkOverTimeMap.get("overTimeHoliday") != null){ + overTimeHolidayList.add((Map)afterSaveWorkOverTimeMap.get("overTimeHoliday")); + } + if (afterSaveWorkOverTimeMap.get("overTimeResult") != null){ + overTimeResultList.add((Map)afterSaveWorkOverTimeMap.get("overTimeResult")); + } } - } @@ -278,6 +308,8 @@ public class WorkOverTimeServiceImpl extends Service implements WorkOverTimeServ String realityEndime = restOverTimeDuraion.stream().max(Comparator.comparing(e->DateUtil.getTime(e.get("realityEndime").toString()).toInstant(ZoneOffset.of("+8")).toEpochMilli())).get().get("realityEndime").toString(); params.put("realityStartTime",realityStartTime); params.put("realityEndime",realityEndime); + //加班结果归属日期 + params.put("jbgzrq",analysisDate); Map saveWorkOverTimeMap = commandExecutor.execute(new SaveWorkOverTimeCmd(params)); if (saveWorkOverTimeMap.get("workOverTimeItems") != null){ workOverTimeItemList.add((Map)saveWorkOverTimeMap.get("workOverTimeItems")); diff --git a/src/com/engine/jucailinkq/attendance/attendanceanalysis/web/AttendanceanalysisAction.java b/src/com/engine/jucailinkq/attendance/attendanceanalysis/web/AttendanceanalysisAction.java index 568eec9..2489900 100644 --- a/src/com/engine/jucailinkq/attendance/attendanceanalysis/web/AttendanceanalysisAction.java +++ b/src/com/engine/jucailinkq/attendance/attendanceanalysis/web/AttendanceanalysisAction.java @@ -49,8 +49,8 @@ public class AttendanceanalysisAction { log.info("********AttendanceAnalysisJob start********"); Map paramMap = ParamUtil.request2Map(request); // Map paramMap = Maps.newHashMap(); -// paramMap.put("startDate","2024-08-21"); -// paramMap.put("endDate","2024-08-21"); +// paramMap.put("startDate","2024-08-16"); +// paramMap.put("endDate","2024-08-16"); // paramMap.put("userIds","81"); String startDate = Util.null2String(paramMap.get("startDate")); @@ -59,10 +59,15 @@ 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 id,changedate name from HRMSTATUSHISTORY where type_n = 5"; + //获取离职日期 + Map departEmployeeMap = DbTools.getSqlToMapList(queryDepartEmployeeSql); + + //初始化扩展类 CommonUtil.initExtensionClassHolder(); if ("".equals(userIds)){ - String queryUserSql = "select id from hrmresource where status <> '5' and status <> '4' and status <> '7'"; + String queryUserSql = "select id,companystartdate from hrmresource where status <> '5' and status <> '4' and status <> '7'"; List> userList = DbTools.getSqlToList(queryUserSql); String sql = "select id,userid,signdate,signtime from hrmschedulesign where isincom=1 and signdate >= ? and signdate <= ? order by signdate,signtime"; List> dataList = DbTools.getSqlToList(sql,startBeforeDate,endAfterDate); @@ -83,6 +88,11 @@ public class AttendanceanalysisAction { for (Map userMap :userList){ String userId = userMap.get("id").toString(); + //入职日期 + String companystartDate = Util.null2String(userMap.get("companystartdate")); + //离职日期 + String terminationDate = Util.null2String(departEmployeeMap.get(userId)); + log.info("***********analysis userId:{} start***********", userId); //出勤结果,进出时间 Map> clockInTimeMap = Maps.newHashMap(); @@ -123,13 +133,21 @@ public class AttendanceanalysisAction { for (int i=0; i<=betweenDays;i++){ String date = DateUtil.AfterDay(startDate,i); - attendanceAnalysisService.attendanceAnalysisForApi(userId,date,collect.get(userId),attendanceItems,schedulMap,workHourItems,clockInTimeMap,attendaceResultMap.get(date)); + 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)); + } } allowanceService.addAllowanceRecords(paramMap); } }else { 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); + + String queryUserSql = "select id,companystartdate from hrmresource where id in ("+userIds+")"; + List> userList = DbTools.getSqlToList(queryUserSql); + Map>> userGroupMap = userList.stream().collect(Collectors.groupingBy(e->e.get("id").toString())); + //补打卡记录 sql = "select id,bdkry userid,dkrq signdate,dksj signtime from uf_jcl_kq_bdkjl where bdkry in ("+userIds+") and dkrq >= ? and dkrq <= ? and jlzt=1 order by dkrq,dksj"; List> makeUpList = DbTools.getSqlToList(sql,startBeforeDate,endAfterDate); @@ -149,6 +167,11 @@ public class AttendanceanalysisAction { for (String userId : userIds.split(",")){ /**获得人员考勤项目*/ Map param = Maps.newHashMap(); + //入职日期 + String companystartDate = Util.null2String(userGroupMap.get(userId).get(0).get("companystartdate")); + //离职日期 + String terminationDate = Util.null2String(departEmployeeMap.get(userId)); + //出勤结果,进出时间 Map> clockInTimeMap = Maps.newHashMap(); param.put("startDate",startBeforeDate); @@ -186,7 +209,11 @@ public class AttendanceanalysisAction { } for (int i=0; i<=betweenDays;i++){ String date = DateUtil.AfterDay(startDate,i); - attendanceAnalysisService.attendanceAnalysisForApi(userId,date,collect.get(userId),attendanceItems,schedulMap,workHourItems,clockInTimeMap,attendaceResultMap.get(date)); + 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)); + + } } } paramMap.put("empIds",paramMap.get("userIds")); diff --git a/src/com/engine/jucailinkq/attendance/attendanceanalysis/wrapper/AttendanceAnalysisWrapper.java b/src/com/engine/jucailinkq/attendance/attendanceanalysis/wrapper/AttendanceAnalysisWrapper.java index 23d1cc7..96ef9f8 100644 --- a/src/com/engine/jucailinkq/attendance/attendanceanalysis/wrapper/AttendanceAnalysisWrapper.java +++ b/src/com/engine/jucailinkq/attendance/attendanceanalysis/wrapper/AttendanceAnalysisWrapper.java @@ -229,6 +229,7 @@ public class AttendanceAnalysisWrapper extends Service { clcokInTimeDataParam.put("scheduleResult", scheduleResult); clcokInTimeDataParam.put("clockInTimeList", clockInTimeList); clcokInTimeDataParam.put("askForLeaveAndEvctionSchedule", askForLeaveAndEvctionSchedule); + //打卡卡点以及匹配的打卡时间 List clcokInTimeData = null; if (clockInTimeDataMap.get(analysisDate) != null){ diff --git a/src/com/engine/jucailinkq/attendance/attendanceanalysis/wrapper/UpdateAttendanceResultWrapper.java b/src/com/engine/jucailinkq/attendance/attendanceanalysis/wrapper/UpdateAttendanceResultWrapper.java index 55f13e3..a7353a1 100644 --- a/src/com/engine/jucailinkq/attendance/attendanceanalysis/wrapper/UpdateAttendanceResultWrapper.java +++ b/src/com/engine/jucailinkq/attendance/attendanceanalysis/wrapper/UpdateAttendanceResultWrapper.java @@ -108,7 +108,7 @@ public class UpdateAttendanceResultWrapper extends Service { iforgetClockIn.get(0).put("pointType",clcokInTimedto.getPointType()); iforgetClockIn.get(0).put("bdlx",classInfo.get("bdlx")); iforgetClockIn.get(0).put("clcokInTimeData",clcokInTimeData); - String workfor = Util.null2String(classInfo.get("bdlx")); + String workfor = Utils.getWorkFor(Util.null2String(classInfo.get("bdlx"))); String zysd = Util.null2String(iforgetClockIn.get(0).get("zysd")); if (zysd.contains(workfor) || zysd.contains(WorkForTimeEnum.ALL_TIME.getKey())){ iforgetClockIn.get(0).put("record",clcokInTimedto.isRecord()); @@ -676,7 +676,7 @@ public class UpdateAttendanceResultWrapper extends Service { } public int getTimeByWorkFor(String zysd,String zdycbcndfgzsd,List> scheduleResult,String kssj,String jssj,String analysisDate){ - List> reusltList = scheduleResult.stream().filter(e->(zysd.contains(Utils.getWorkFor(e.get("bdlx").toString())) && !Utils.ifRestClassSegment(e.get("bdlx").toString())) || + List> reusltList = scheduleResult.stream().filter(e->(zysd.contains(Utils.getWorkFor(e.get("bdlx").toString())) && !Utils.ifRestClassSegment(e.get("bdlx").toString()) && !Utils.ifAskforOrEvctionClassSegment(e.get("bdlx").toString())) || (!CheckBoxEnum.CHECKED.getKey().equals(zdycbcndfgzsd) && Utils.ifRestClassSegment(e.get("bdlx").toString()))).collect(Collectors.toList()); return Utils.removeTime(kssj,jssj,reusltList,analysisDate); diff --git a/src/com/engine/jucailinkq/attendance/component/persongroup/job/scheduling/SchedulingJob.java b/src/com/engine/jucailinkq/attendance/component/persongroup/job/scheduling/SchedulingJob.java index 0e2fd57..91a2d3a 100644 --- a/src/com/engine/jucailinkq/attendance/component/persongroup/job/scheduling/SchedulingJob.java +++ b/src/com/engine/jucailinkq/attendance/component/persongroup/job/scheduling/SchedulingJob.java @@ -1,11 +1,11 @@ package com.engine.jucailinkq.attendance.component.persongroup.job.scheduling; import com.engine.jucailinkq.attendance.component.persongroup.job.scheduling.tactics.RegularScheduling; +import com.engine.jucailinkq.common.util.DateUtil; import com.engine.jucailinkq.common.util.DbTools; import com.engine.jucailinkq.common.util.Utils; import lombok.extern.slf4j.Slf4j; -import weaver.common.DateUtil; import weaver.general.Util; import weaver.interfaces.schedule.BaseCronJob; @@ -15,10 +15,6 @@ import java.util.Map; @Slf4j public class SchedulingJob extends BaseCronJob { - /** - * 执行日期 - */ - String executeDate; /** * 生成天数 */ @@ -30,11 +26,9 @@ public class SchedulingJob extends BaseCronJob { } @Override public void execute() { - if (executeDate == null || "".equals(executeDate)){ - executeDate = DateUtil.getCurrentDate(); - } + String useDate = com.time.util.DateUtil.getCurrentTime("yyyy-MM-dd"); String sql = "select * from uf_jcl_kq_glpb where edate > ? and bdate<=?"; - List> dataList = DbTools.getSqlToList(sql,executeDate,executeDate); + List> dataList = DbTools.getSqlToList(sql,useDate,useDate); Map formmodeIdMap = Utils.getFormmodeIdMap(); //规律排班模块id String modeId = formmodeIdMap.get("uf_jcl_kq_glpb"); @@ -46,7 +40,7 @@ public class SchedulingJob extends BaseCronJob { e.put("modeId",modeId); e.put("day",day); e.put("formmodeid",formmodeid); - e.put("executeDate",executeDate); + e.put("executeDate", DateUtil.getCurrentDate()); String zzqlx = Util.null2String(e.get("zzqlx")); for (RegularScheduling workOverTimeComputeRuler :rulers){ if (workOverTimeComputeRuler.support(Integer.valueOf(zzqlx))){ diff --git a/src/com/engine/jucailinkq/attendance/component/persongroup/job/scheduling/tactics/DayRegularScheduling.java b/src/com/engine/jucailinkq/attendance/component/persongroup/job/scheduling/tactics/DayRegularScheduling.java index bf5f6d0..fb0020b 100644 --- a/src/com/engine/jucailinkq/attendance/component/persongroup/job/scheduling/tactics/DayRegularScheduling.java +++ b/src/com/engine/jucailinkq/attendance/component/persongroup/job/scheduling/tactics/DayRegularScheduling.java @@ -56,6 +56,8 @@ public class DayRegularScheduling implements RegularScheduling{ String gbbc = Util.null2String(data.get("gbbc")); //改班班次是否休息 String gbbcIfRest = CommonUtil.ifrestByClass(gbbc); + //改班候选班组 + String gbhxbz = Util.null2String(data.get("gbhxbz")); //执行日期 String executeDate = Util.null2String(data.get("executeDate")); @@ -139,13 +141,23 @@ public class DayRegularScheduling implements RegularScheduling{ //当为节假日时 if ("0".equals(jjrcl)){ //改班 - if ("".equals(gbbc)){ + if (("".equals(gbbc) && "0".equals(pbfs)) || ("".equals(gbhxbz) && "1".equals(pbfs))){ //休息 dataMap.put("sfxx","1"); dataMap.put("bcxx",null); + dataMap.put("hxbz",null); }else { - dataMap.put("bcxx",gbbc); - dataMap.put("sfxx",gbbcIfRest); + if ("0".equals(pbfs)){ + //固定班次 + dataMap.put("bcxx",gbbc); + dataMap.put("hxbz",null); + dataMap.put("sfxx",gbbcIfRest); + }else { + //打卡匹配 + dataMap.put("hxbz",gbhxbz); + dataMap.put("bcxx",null); + dataMap.put("sfxx",gbbcIfRest); + } } insertDataList.add(dataMap); }else if ("1".equals(jjrcl)){ @@ -160,13 +172,23 @@ public class DayRegularScheduling implements RegularScheduling{ }else if ("2".equals(rqlx) || "3".equals(rqlx)){ if ("0".equals(gxrcl)){ //改班 - if ("".equals(gbbc)){ + if (("".equals(gbbc) && "0".equals(pbfs)) || ("".equals(gbhxbz) && "1".equals(pbfs))){ //休息 dataMap.put("sfxx","1"); dataMap.put("bcxx",null); + dataMap.put("hxbz",null); }else { - dataMap.put("bcxx",gbbc); - dataMap.put("sfxx",gbbcIfRest); + if ("0".equals(pbfs)){ + //固定班次 + dataMap.put("bcxx",gbbc); + dataMap.put("hxbz",null); + dataMap.put("sfxx",gbbcIfRest); + }else { + //打卡匹配 + dataMap.put("hxbz",gbhxbz); + dataMap.put("bcxx",null); + dataMap.put("sfxx",gbbcIfRest); + } } insertDataList.add(dataMap); }else if ("1".equals(gxrcl)){ diff --git a/src/com/engine/jucailinkq/attendance/component/persongroup/job/scheduling/tactics/MonthRegularScheduling.java b/src/com/engine/jucailinkq/attendance/component/persongroup/job/scheduling/tactics/MonthRegularScheduling.java index 53f57cc..b08ef3c 100644 --- a/src/com/engine/jucailinkq/attendance/component/persongroup/job/scheduling/tactics/MonthRegularScheduling.java +++ b/src/com/engine/jucailinkq/attendance/component/persongroup/job/scheduling/tactics/MonthRegularScheduling.java @@ -58,6 +58,8 @@ public class MonthRegularScheduling implements RegularScheduling{ String gbbcIfRest = CommonUtil.ifrestByClass(gbbc); //执行日期 String executeDate = Util.null2String(data.get("executeDate")); + //改班候选班组 + String gbhxbz = Util.null2String(data.get("gbhxbz")); //规律排班明细表数据 @@ -130,13 +132,23 @@ public class MonthRegularScheduling implements RegularScheduling{ //当为节假日时 if ("0".equals(jjrcl)){ //改班 - if ("".equals(gbbc)){ + if (("".equals(gbbc) && "0".equals(pbfs)) || ("".equals(gbhxbz) && "1".equals(pbfs))){ //休息 dataMap.put("sfxx","1"); dataMap.put("bcxx",null); + dataMap.put("hxbz",null); }else { - dataMap.put("bcxx",gbbc); - dataMap.put("sfxx",gbbcIfRest); + if ("0".equals(pbfs)){ + //固定班次 + dataMap.put("bcxx",gbbc); + dataMap.put("hxbz",null); + dataMap.put("sfxx",gbbcIfRest); + }else { + //打卡匹配 + dataMap.put("hxbz",gbhxbz); + dataMap.put("bcxx",null); + dataMap.put("sfxx",gbbcIfRest); + } } insertDataList.add(dataMap); }else if ("1".equals(jjrcl)){ @@ -151,13 +163,23 @@ public class MonthRegularScheduling implements RegularScheduling{ }else if ("2".equals(rqlx) || "3".equals(rqlx)){ if ("0".equals(gxrcl)){ //改班 - if ("".equals(gbbc)){ + if (("".equals(gbbc) && "0".equals(pbfs)) || ("".equals(gbhxbz) && "1".equals(pbfs))){ //休息 dataMap.put("sfxx","1"); dataMap.put("bcxx",null); + dataMap.put("hxbz",null); }else { - dataMap.put("bcxx",gbbc); - dataMap.put("sfxx",gbbcIfRest); + if ("0".equals(pbfs)){ + //固定班次 + dataMap.put("bcxx",gbbc); + dataMap.put("hxbz",null); + dataMap.put("sfxx",gbbcIfRest); + }else { + //打卡匹配 + dataMap.put("hxbz",gbhxbz); + dataMap.put("bcxx",null); + dataMap.put("sfxx",gbbcIfRest); + } } insertDataList.add(dataMap); }else if ("1".equals(gxrcl)){ diff --git a/src/com/engine/jucailinkq/attendance/component/persongroup/job/scheduling/tactics/WeekRegularScheduling.java b/src/com/engine/jucailinkq/attendance/component/persongroup/job/scheduling/tactics/WeekRegularScheduling.java index 705eeae..9079f9c 100644 --- a/src/com/engine/jucailinkq/attendance/component/persongroup/job/scheduling/tactics/WeekRegularScheduling.java +++ b/src/com/engine/jucailinkq/attendance/component/persongroup/job/scheduling/tactics/WeekRegularScheduling.java @@ -59,6 +59,8 @@ public class WeekRegularScheduling implements RegularScheduling{ String edate = Util.null2String(data.get("edate")); //执行日期 String executeDate = Util.null2String(data.get("executeDate")); + //改班候选班组 + String gbhxbz = Util.null2String(data.get("gbhxbz")); //规律排班明细表数据 @@ -135,13 +137,23 @@ public class WeekRegularScheduling implements RegularScheduling{ //当为节假日时 if ("0".equals(jjrcl)){ //改班 - if ("".equals(gbbc)){ + if (("".equals(gbbc) && "0".equals(pbfs)) || ("".equals(gbhxbz) && "1".equals(pbfs))){ //休息 dataMap.put("sfxx","1"); dataMap.put("bcxx",null); + dataMap.put("hxbz",null); }else { - dataMap.put("bcxx",gbbc); - dataMap.put("sfxx",gbbcIfRest); + if ("0".equals(pbfs)){ + //固定班次 + dataMap.put("bcxx",gbbc); + dataMap.put("hxbz",null); + dataMap.put("sfxx",gbbcIfRest); + }else { + //打卡匹配 + dataMap.put("hxbz",gbhxbz); + dataMap.put("bcxx",null); + dataMap.put("sfxx",gbbcIfRest); + } } insertDataList.add(dataMap); }else if ("1".equals(jjrcl)){ @@ -156,13 +168,23 @@ public class WeekRegularScheduling implements RegularScheduling{ }else if ("2".equals(rqlx) || "3".equals(rqlx)){ if ("0".equals(gxrcl)){ //改班 - if ("".equals(gbbc)){ + if (("".equals(gbbc) && "0".equals(pbfs)) || ("".equals(gbhxbz) && "1".equals(pbfs))){ //休息 dataMap.put("sfxx","1"); dataMap.put("bcxx",null); + dataMap.put("hxbz",null); }else { - dataMap.put("bcxx",gbbc); - dataMap.put("sfxx",gbbcIfRest); + if ("0".equals(pbfs)){ + //固定班次 + dataMap.put("bcxx",gbbc); + dataMap.put("hxbz",null); + dataMap.put("sfxx",gbbcIfRest); + }else { + //打卡匹配 + dataMap.put("hxbz",gbhxbz); + dataMap.put("bcxx",null); + dataMap.put("sfxx",gbbcIfRest); + } } insertDataList.add(dataMap); }else if ("1".equals(gxrcl)){ diff --git a/src/com/engine/jucailinkq/attendance/component/persongroup/job/scheduling/tactics/YearRegularScheduling.java b/src/com/engine/jucailinkq/attendance/component/persongroup/job/scheduling/tactics/YearRegularScheduling.java index cae456f..caa127b 100644 --- a/src/com/engine/jucailinkq/attendance/component/persongroup/job/scheduling/tactics/YearRegularScheduling.java +++ b/src/com/engine/jucailinkq/attendance/component/persongroup/job/scheduling/tactics/YearRegularScheduling.java @@ -59,6 +59,8 @@ public class YearRegularScheduling implements RegularScheduling{ String edate = Util.null2String(data.get("edate")); //执行日期 String executeDate = Util.null2String(data.get("executeDate")); + //改班候选班组 + String gbhxbz = Util.null2String(data.get("gbhxbz")); //规律排班明细表数据 @@ -139,13 +141,23 @@ public class YearRegularScheduling implements RegularScheduling{ //当为节假日时 if ("0".equals(jjrcl)){ //改班 - if ("".equals(gbbc)){ + if (("".equals(gbbc) && "0".equals(pbfs)) || ("".equals(gbhxbz) && "1".equals(pbfs))){ //休息 dataMap.put("sfxx","1"); dataMap.put("bcxx",null); + dataMap.put("hxbz",null); }else { - dataMap.put("bcxx",gbbc); - dataMap.put("sfxx",gbbcIfRest); + if ("0".equals(pbfs)){ + //固定班次 + dataMap.put("bcxx",gbbc); + dataMap.put("hxbz",null); + dataMap.put("sfxx",gbbcIfRest); + }else { + //打卡匹配 + dataMap.put("hxbz",gbhxbz); + dataMap.put("bcxx",null); + dataMap.put("sfxx",gbbcIfRest); + } } insertDataList.add(dataMap); }else if ("1".equals(jjrcl)){ @@ -160,13 +172,23 @@ public class YearRegularScheduling implements RegularScheduling{ }else if ("2".equals(rqlx) || "3".equals(rqlx)){ if ("0".equals(gxrcl)){ //改班 - if ("".equals(gbbc)){ + if (("".equals(gbbc) && "0".equals(pbfs)) || ("".equals(gbhxbz) && "1".equals(pbfs))){ //休息 dataMap.put("sfxx","1"); dataMap.put("bcxx",null); + dataMap.put("hxbz",null); }else { - dataMap.put("bcxx",gbbc); - dataMap.put("sfxx",gbbcIfRest); + if ("0".equals(pbfs)){ + //固定班次 + dataMap.put("bcxx",gbbc); + dataMap.put("hxbz",null); + dataMap.put("sfxx",gbbcIfRest); + }else { + //打卡匹配 + dataMap.put("hxbz",gbhxbz); + dataMap.put("bcxx",null); + dataMap.put("sfxx",gbbcIfRest); + } } insertDataList.add(dataMap); }else if ("1".equals(gxrcl)){ diff --git a/src/com/engine/jucailinkq/attendance/vacation/cmd/VocationCmd.java b/src/com/engine/jucailinkq/attendance/vacation/cmd/VocationCmd.java index e281806..d58d4b3 100644 --- a/src/com/engine/jucailinkq/attendance/vacation/cmd/VocationCmd.java +++ b/src/com/engine/jucailinkq/attendance/vacation/cmd/VocationCmd.java @@ -76,7 +76,7 @@ public class VocationCmd extends AbstractCommonCommand> { vocation.put("ljcrglyfslwzValue",ljcrglyfslwzValue); vocation.put("zyzValue",getUserIds(vocation)); } - log.info("VocationCmd params: [{}]",params); + log.debug("VocationCmd params: [{}]",params); String edfffs = Util.null2String(vocationList.get(0).get("edfffs")); for (HolidayGenerationWay holidayGenerationWay :rulers){ if (holidayGenerationWay.support(Integer.valueOf(edfffs))){ diff --git a/src/com/engine/jucailinkq/attendance/vacation/job/holidaygeneration/HolidayGenerationJob.java b/src/com/engine/jucailinkq/attendance/vacation/job/holidaygeneration/HolidayGenerationJob.java index acd7eeb..d09b048 100644 --- a/src/com/engine/jucailinkq/attendance/vacation/job/holidaygeneration/HolidayGenerationJob.java +++ b/src/com/engine/jucailinkq/attendance/vacation/job/holidaygeneration/HolidayGenerationJob.java @@ -5,10 +5,12 @@ import com.engine.jucailinkq.attendance.vacation.service.impl.VocationServiceImp import com.engine.common.util.ServiceUtil; import com.engine.jucailinkq.common.util.Utils; import com.google.common.collect.Maps; +import lombok.extern.slf4j.Slf4j; import weaver.interfaces.schedule.BaseCronJob; import java.util.Map; +@Slf4j public class HolidayGenerationJob extends BaseCronJob { private VocationService basicsetService = ServiceUtil.getService(VocationServiceImpl.class); @@ -24,6 +26,8 @@ public class HolidayGenerationJob extends BaseCronJob { private String executeDate; @Override public void execute() { + log.info("**********HolidayGenerationJob start ************"); + log.info("**********HolidayGenerationJob executeDate :[{}]********",executeDate); Map formmodeIdMap = Utils.getFormmodeIdMap(); //假期额度模块id String modeId = formmodeIdMap.get("uf_jcl_kq_jqed"); diff --git a/src/com/engine/jucailinkq/common/util/Utils.java b/src/com/engine/jucailinkq/common/util/Utils.java index 22c1620..748d35d 100644 --- a/src/com/engine/jucailinkq/common/util/Utils.java +++ b/src/com/engine/jucailinkq/common/util/Utils.java @@ -547,7 +547,7 @@ public class Utils { * @return */ public static int dinnerTime(String kssj,String jssj,List> scheduleResult,String analysisDate){ - scheduleResult = scheduleResult.stream().filter(e ->ClassSegmentTypeEnum.DINING_PERIOD.getKey().equals(e.get("bdlx"))).collect(Collectors.toList()); + scheduleResult = scheduleResult.stream().filter(e ->Utils.ifRestClassSegment(e.get("bdlx").toString())).collect(Collectors.toList()); int dinnerTime = removeTime(kssj,jssj,scheduleResult,analysisDate); return dinnerTime; } diff --git a/test/TestAttendanceAllowance/TestScheduleJob.java b/test/TestAttendanceAllowance/TestScheduleJob.java new file mode 100644 index 0000000..bfbbf3f --- /dev/null +++ b/test/TestAttendanceAllowance/TestScheduleJob.java @@ -0,0 +1,2 @@ +package TestAttendanceAllowance;public class TestScheduleJob { +}