diff --git a/out/artifacts/hrm_attendance/hrm-attendance.jar b/out/artifacts/hrm_attendance/hrm-attendance.jar index 5ef2273..bbb0c35 100644 Binary files a/out/artifacts/hrm_attendance/hrm-attendance.jar and b/out/artifacts/hrm_attendance/hrm-attendance.jar differ diff --git a/src/com/engine/attendance/attendanceanalysis/cmd/ComputeAttendanceDurationCmd.java b/src/com/engine/attendance/attendanceanalysis/cmd/ComputeAttendanceDurationCmd.java new file mode 100644 index 0000000..4d04f3b --- /dev/null +++ b/src/com/engine/attendance/attendanceanalysis/cmd/ComputeAttendanceDurationCmd.java @@ -0,0 +1,189 @@ +package com.engine.attendance.attendanceanalysis.cmd; + +import com.engine.attendance.enums.*; +import com.engine.common.biz.AbstractCommonCommand; +import com.engine.common.entity.BizLogContext; +import com.engine.common.util.DateUtil; +import com.engine.common.util.Utils; +import com.engine.core.interceptor.CommandContext; +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 ComputeAttendanceDurationCmd extends AbstractCommonCommand> { + + public ComputeAttendanceDurationCmd(Map params){ + this.params=params; + } + @Override + public BizLogContext getLogContext() { + return null; + } + + @Override + public Map execute(CommandContext commandContext) { + Map resultMap = Maps.newHashMap(); + //排班 + List> scheduleResult = (List>)params.get("scheduleResult"); + //请假记录 + List> askForLeaveList = (List>)params.get("askForLeaveList"); + //请假项目 + Map> askForLeaveItems = (Map>)params.get("askForLeaveItems"); + //外出记录 + List> evectionList = (List>)params.get("evectionList"); + //外出项目 + Map> evectionItems = (Map>)params.get("evectionItems"); + //请假后消除的异常 + List> offsetAskForLeaveAnomaly = (List>)params.get("offsetAskForLeaveAnomaly"); + //出差外出后消除的异常 + List> offsetEvectionAnomaly = (List>)params.get("offsetEvectionAnomaly"); + //分析日期 + String analysisDate = Util.null2String(params.get("analysisDate")); + + //经过请假外出处理过的异常项目 + List> abnormalClockInList = (List>)params.get("abnormalClockInList"); + //单位小时 + double edsc = Double.valueOf(scheduleResult.get(0).get("edsc").toString()); + if (0 == edsc){ + resultMap.put("attendanceDuration",edsc); + return resultMap; + } + //单位分钟 + /** + * 当工作时间段存在异常项目时 + */ + abnormalClockInList = abnormalClockInList.stream().filter(e->e.get("bdlx").equals(ClassSegmentTypeEnum.WORK_TIME.getKey())).collect(Collectors.toList()); + double abnormalTime = 0; + for (Map abnormalClockInMap : abnormalClockInList){ + String hsdw = Util.null2String(abnormalClockInMap.get("hsdw")); + double itemduration = Double.valueOf(Util.null2String(abnormalClockInMap.get("itemduration"))); + AttendanceItemTypeEnum itemType = (AttendanceItemTypeEnum)abnormalClockInMap.get("itemType"); + String kczgsc = Util.null2String(abnormalClockInMap.get("kczgsc")); + if (itemType == AttendanceItemTypeEnum.MISSE_CARD){ + //早上漏卡 + abnormalTime = abnormalTime + edsc*60; + } + if (!CheckBoxEnum.CHECKED.getKey().equals(kczgsc)){ + continue; + } + if (AccountingUnitEnum.DAY.getKey().equals(hsdw)){ + abnormalTime = abnormalTime + edsc*Double.valueOf(itemduration)*60; + }else if (AccountingUnitEnum.HOUR.getKey().equals(hsdw)){ + abnormalTime = abnormalTime+Double.valueOf(itemduration)*60; + }else if (AccountingUnitEnum.MINUTES.getKey().equals(hsdw)){ + abnormalTime = abnormalTime+Double.valueOf(itemduration); + } + + } + /** + * 当存在请假时,考虑扣除请假时长 + */ + double askForLeaveTime = removeAskForLeave(analysisDate,scheduleResult,askForLeaveList,askForLeaveItems,offsetAskForLeaveAnomaly); + + /** + * 当存在外出时,考虑扣除外出时长 + */ + double evectionTimeTime = removeEvection(analysisDate,scheduleResult,evectionList,evectionItems,offsetEvectionAnomaly); + + edsc = edsc-abnormalTime-askForLeaveTime-evectionTimeTime; + if (edsc < 0){ + edsc=0; + } + + resultMap.put("attendanceDuration",String.format ("%.2f", edsc)); + return resultMap; + } + + public double removeAskForLeave(String analysisDate,List> scheduleResult,List> askForLeaveList, + Map> askForLeaveItems,List> offsetAskForLeaveAnomaly){ + double employTime = 0; + double edsc = Double.valueOf(scheduleResult.get(0).get("edsc").toString()); + for (int i=0;i askForLeaveItem = askForLeaveItems.get(askForLeaveList.get(i).get("jqlx")); + //半天请假 + String btj = Util.null2String(askForLeaveList.get(i).get("btj")); + //作用时段 + String zysd = Util.null2String(askForLeaveItem.get("zysd")); + if (!zysd.contains(WorkForTimeEnum.WORK_TIME.getKey()) && !WorkForTimeEnum.ALL_TIME.getKey().equals(zysd)){ + continue; + } + + if ("".equals(Util.null2String(askForLeaveList.get(i).get("kssj"))) || "".equals(Util.null2String(askForLeaveList.get(i).get("jssj")))){ + //弹性请假,半天出差 + if (CheckBoxEnum.CHECKED.getKey().equals(btj)){ + //半天出差 + employTime = employTime + edsc*30; + }else if (!"".equals(qjsc)){ + //时长请假 + if (offsetAskForLeaveAnomaly.size() > 0){ + List> list = offsetAskForLeaveAnomaly.stream().filter(e->ClassSegmentTypeEnum.WORK_TIME.getKey().equals(e.get("bdlx"))).collect(Collectors.toList()); + employTime += Math.round(list.size()/Double.valueOf(offsetAskForLeaveAnomaly.size()) *Double.valueOf(qjsc)*60); + } + } + }else { + //按照开始时间,结束时间请假 + for (Map scheduleMap:scheduleResult){ + String dtkssj = analysisDate+" "+scheduleMap.get("dtkssj"); + String dtjssj = analysisDate+" "+scheduleMap.get("dtjssj"); + if (DateUtil.getTime(dtkssj).compareTo(DateUtil.getTime(dtjssj)) > 0){ + dtjssj = DateUtil.AfterDay(analysisDate,1) +" "+scheduleMap.get("dtjssj"); + } + employTime +=Utils.getStartAndEndTime(dtkssj,dtjssj,askForLeaveList.get(i)); + } + + } + } + return employTime; + } + + public double removeEvection(String analysisDate,List> scheduleResult,List> evectionList, + Map> evectionItems,List> offsetEvectionAnomaly){ + double employTime = 0; + double edsc = Double.valueOf(scheduleResult.get(0).get("edsc").toString()); + for (int i=0;i askForLeaveItem = evectionItems.get(evectionList.get(i).get("cclx")); + //半天请假 + String btcc = Util.null2String(evectionList.get(i).get("btcc")); + //作用时段 + String zysd = Util.null2String(askForLeaveItem.get("zysd")); + if (!zysd.contains(WorkForTimeEnum.WORK_TIME.getKey()) && !WorkForTimeEnum.ALL_TIME.getKey().equals(zysd)){ + continue; + } + + if ("".equals(Util.null2String(evectionList.get(i).get("kssj"))) || "".equals(Util.null2String(evectionList.get(i).get("jssj")))){ + //弹性请假,半天出差 + if (CheckBoxEnum.CHECKED.getKey().equals(btcc)){ + //半天出差 + employTime = employTime + edsc*30; + }else if (!"".equals(ccsc)){ + //时长请假 + if (offsetEvectionAnomaly.size() > 0){ + List> list = offsetEvectionAnomaly.stream().filter(e->ClassSegmentTypeEnum.WORK_TIME.getKey().equals(e.get("bdlx"))).collect(Collectors.toList()); + employTime += Math.round(list.size()/Double.valueOf(offsetEvectionAnomaly.size()) *Double.valueOf(ccsc)*60); + } + } + }else { + //按照开始时间,结束时间请假 + for (Map scheduleMap:scheduleResult){ + String dtkssj = analysisDate+" "+scheduleMap.get("dtkssj"); + String dtjssj = analysisDate+" "+scheduleMap.get("dtjssj"); + if (DateUtil.getTime(dtkssj).compareTo(DateUtil.getTime(dtjssj)) > 0){ + dtjssj = DateUtil.AfterDay(analysisDate,1) +" "+scheduleMap.get("dtjssj"); + } + employTime +=Utils.getStartAndEndTime(dtkssj,dtjssj,evectionList.get(i)); + } + + } + } + return employTime; + } +} diff --git a/src/com/engine/attendance/attendanceanalysis/service/UtilService.java b/src/com/engine/attendance/attendanceanalysis/service/UtilService.java index e74add6..8407c9b 100644 --- a/src/com/engine/attendance/attendanceanalysis/service/UtilService.java +++ b/src/com/engine/attendance/attendanceanalysis/service/UtilService.java @@ -39,4 +39,8 @@ public interface UtilService { */ List>> getClockInPointCmd(Map params); + /** + * 计算出勤时长 + */ + double computeAttendanceDuration(Map params); } diff --git a/src/com/engine/attendance/attendanceanalysis/service/WorkOverTimeService.java b/src/com/engine/attendance/attendanceanalysis/service/WorkOverTimeService.java index 6ea585b..c1a4044 100644 --- a/src/com/engine/attendance/attendanceanalysis/service/WorkOverTimeService.java +++ b/src/com/engine/attendance/attendanceanalysis/service/WorkOverTimeService.java @@ -3,6 +3,14 @@ package com.engine.attendance.attendanceanalysis.service; import java.util.List; import java.util.Map; +/** + * 加班 + */ public interface WorkOverTimeService { + /** + * 记录加班 + * @param params + * @return + */ List> recordWorkOverTime(Map params); } diff --git a/src/com/engine/attendance/attendanceanalysis/service/impl/AbnormalAttendanceServiceImpl.java b/src/com/engine/attendance/attendanceanalysis/service/impl/AbnormalAttendanceServiceImpl.java index c2daa17..b6c8e71 100644 --- a/src/com/engine/attendance/attendanceanalysis/service/impl/AbnormalAttendanceServiceImpl.java +++ b/src/com/engine/attendance/attendanceanalysis/service/impl/AbnormalAttendanceServiceImpl.java @@ -2,10 +2,7 @@ package com.engine.attendance.attendanceanalysis.service.impl; import com.engine.attendance.attendanceanalysis.cmd.item.*; import com.engine.attendance.attendanceanalysis.service.AbnormalAttendanceService; -import com.engine.attendance.enums.AccountingUnitEnum; -import com.engine.attendance.enums.AttendanceItemTypeEnum; -import com.engine.attendance.enums.ClassSegmentTypeEnum; -import com.engine.attendance.enums.WorkForTimeEnum; +import com.engine.attendance.enums.*; import com.engine.common.util.DateUtil; import com.engine.common.util.Utils; import com.engine.core.impl.Service; @@ -71,21 +68,29 @@ public class AbnormalAttendanceServiceImpl extends Service implements AbnormalAt Map saveWorkTimeBeLateParam = Maps.newHashMap(); double hsl = Float.valueOf(Util.null2String(workTimeBeLateItems.get(0).get("hsl"))); String hsdw = Util.null2String(workTimeBeLateItems.get(0).get("hsdw")); + String kczgsc = Util.null2String(workTimeBeLateItems.get(0).get("kczgsc")); + if (CheckBoxEnum.CHECKED.getKey().equals(kczgsc)){ + //起步扣除分钟数 + int qbkcsc = Integer.valueOf(Util.null2String(workTimeBeLateItems.get(0).get("qbkcsc"))); + //超出后单次累加扣除分钟数 + int cckcbc = Integer.valueOf(Util.null2String(workTimeBeLateItems.get(0).get("cckcbc"))); + if (between <= qbkcsc){ + between = qbkcsc; + }else { + int deductionDuration = between-qbkcsc; + between = Double.valueOf(Utils.getItemduration(cckcbc,AccountingUnitEnum.MINUTES.getKey(),deductionDuration,AccountingUnitEnum.MINUTES)).intValue(); + + } + } double itemduration = Utils.getItemduration(hsl,hsdw,between,AccountingUnitEnum.MINUTES); -// saveWorkTimeBeLateParam.put("userId",userId); -// saveWorkTimeBeLateParam.put("date",analysisDate); saveWorkTimeBeLateParam.put("item",workTimeBeLateItems.get(0).get("key")); saveWorkTimeBeLateParam.put("itemduration",itemduration); saveWorkTimeBeLateParam.put("betweenMinutes",between); saveWorkTimeBeLateParam.put("itemType", AttendanceItemTypeEnum.LATE); saveWorkTimeBeLateParam.put("hsdw",hsdw); + saveWorkTimeBeLateParam.put("kczgsc",workTimeBeLateItems.get(0)); resultList.add(saveWorkTimeBeLateParam); -// List> classInfoList = Lists.newArrayList(); -// classInfoList.add(classInfo); -// saveWorkTimeBeLateParam.put("classInfo", classInfoList); -// saveWorkTimeBeLateParam.put("cqzt","1"); -// commandExecutor.execute(new UpdateAttendanceResultsCmd(saveWorkTimeBeLateParam)); -// ifBeLate=true; + } }else if (ClassSegmentTypeEnum.EXTENDED_OVERTIME.getKey().equals(bdlx) || ClassSegmentTypeEnum.EARLY_OVERTIME.getKey().equals(bdlx) @@ -106,21 +111,29 @@ public class AbnormalAttendanceServiceImpl extends Service implements AbnormalAt String jbwdhlfzs = Util.null2String(workTimeBeLateItems.get(0).get("jbwdhlfzs")); if (!"".equals(jbwdhlfzs) && between > Integer.valueOf(jbwdhlfzs)){ Map saveWorkTimeBeLateParam = Maps.newHashMap(); + String kczgsc = Util.null2String(workTimeBeLateItems.get(0).get("kczgsc")); + if (CheckBoxEnum.CHECKED.getKey().equals(kczgsc)){ + //起步扣除分钟数 + int qbkcsc = Integer.valueOf(Util.null2String(workTimeBeLateItems.get(0).get("qbkcsc"))); + //超出后单次累加扣除分钟数 + int cckcbc = Integer.valueOf(Util.null2String(workTimeBeLateItems.get(0).get("cckcbc"))); + if (between <= qbkcsc){ + between = qbkcsc; + }else { + int deductionDuration = between-qbkcsc; + between = Double.valueOf(Utils.getItemduration(cckcbc,AccountingUnitEnum.MINUTES.getKey(),deductionDuration,AccountingUnitEnum.MINUTES)).intValue(); + + } + } double itemduration = Utils.getItemduration(hsl,hsdw,between,AccountingUnitEnum.MINUTES); -// saveWorkTimeBeLateParam.put("userId",userId); -// saveWorkTimeBeLateParam.put("date",analysisDate); saveWorkTimeBeLateParam.put("item",getBeLateItems(lateParams).get(0).get("key")); saveWorkTimeBeLateParam.put("itemduration",itemduration); saveWorkTimeBeLateParam.put("betweenMinutes",between); saveWorkTimeBeLateParam.put("itemType", AttendanceItemTypeEnum.LATE); saveWorkTimeBeLateParam.put("hsdw",hsdw); + saveWorkTimeBeLateParam.put("kczgsc",workTimeBeLateItems.get(0)); resultList.add(saveWorkTimeBeLateParam); -// List> classInfoList = Lists.newArrayList(); -// classInfoList.add(classInfo); -// saveWorkTimeBeLateParam.put("classInfo", classInfoList); -// saveWorkTimeBeLateParam.put("cqzt","1"); -// commandExecutor.execute(new UpdateAttendanceResultsCmd(saveWorkTimeBeLateParam)); -// ifBeLate=true; + } } @@ -139,22 +152,30 @@ public class AbnormalAttendanceServiceImpl extends Service implements AbnormalAt String hsdw = Util.null2String(workTimeBeLateItems.get(0).get("hsdw")); String thfghlfzs = Util.null2String(workTimeBeLateItems.get(0).get("thfghlfzs")); if (!"".equals(thfghlfzs) && between> Integer.valueOf(thfghlfzs)){ + String kczgsc = Util.null2String(workTimeBeLateItems.get(0).get("kczgsc")); + if (CheckBoxEnum.CHECKED.getKey().equals(kczgsc)){ + //起步扣除分钟数 + int qbkcsc = Integer.valueOf(Util.null2String(workTimeBeLateItems.get(0).get("qbkcsc"))); + //超出后单次累加扣除分钟数 + int cckcbc = Integer.valueOf(Util.null2String(workTimeBeLateItems.get(0).get("cckcbc"))); + if (between <= qbkcsc){ + between = qbkcsc; + }else { + int deductionDuration = between-qbkcsc; + between = Double.valueOf(Utils.getItemduration(cckcbc,AccountingUnitEnum.MINUTES.getKey(),deductionDuration,AccountingUnitEnum.MINUTES)).intValue(); + + } + } double itemduration = Utils.getItemduration(hsl,hsdw,between,AccountingUnitEnum.MINUTES); Map saveWorkTimeBeLateParam = Maps.newHashMap(); -// saveWorkTimeBeLateParam.put("userId",userId); -// saveWorkTimeBeLateParam.put("date",analysisDate); saveWorkTimeBeLateParam.put("item",getBeLateItems(lateParams).get(0).get("key")); saveWorkTimeBeLateParam.put("itemduration",itemduration); saveWorkTimeBeLateParam.put("betweenMinutes",between); saveWorkTimeBeLateParam.put("itemType", AttendanceItemTypeEnum.LATE); saveWorkTimeBeLateParam.put("hsdw",hsdw); + saveWorkTimeBeLateParam.put("kczgsc",workTimeBeLateItems.get(0)); resultList.add(saveWorkTimeBeLateParam); -// List> classInfoList = Lists.newArrayList(); -// classInfoList.add(classInfo); -// saveWorkTimeBeLateParam.put("classInfo", classInfoList); -// saveWorkTimeBeLateParam.put("cqzt","1"); -// commandExecutor.execute(new UpdateAttendanceResultsCmd(saveWorkTimeBeLateParam)); -// ifBeLate=true; + } } @@ -208,6 +229,20 @@ public class AbnormalAttendanceServiceImpl extends Service implements AbnormalAt Map saveWorkTimeBeLateParam = Maps.newHashMap(); double hsl = Float.valueOf(Util.null2String(workTimeBeLateItems.get(0).get("hsl"))); String hsdw = Util.null2String(workTimeBeLateItems.get(0).get("hsdw")); + String kczgsc = Util.null2String(workTimeBeLateItems.get(0).get("kczgsc")); + if (CheckBoxEnum.CHECKED.getKey().equals(kczgsc)){ + //起步扣除分钟数 + int qbkcsc = Integer.valueOf(Util.null2String(workTimeBeLateItems.get(0).get("qbkcsc"))); + //超出后单次累加扣除分钟数 + int cckcbc = Integer.valueOf(Util.null2String(workTimeBeLateItems.get(0).get("cckcbc"))); + if (between <= qbkcsc){ + between = qbkcsc; + }else { + int deductionDuration = between-qbkcsc; + between = Double.valueOf(Utils.getItemduration(cckcbc,AccountingUnitEnum.MINUTES.getKey(),deductionDuration,AccountingUnitEnum.MINUTES)).intValue(); + + } + } double itemduration = Utils.getItemduration(hsl,hsdw,between,AccountingUnitEnum.MINUTES); // saveWorkTimeBeLateParam.put("userId",userId); // saveWorkTimeBeLateParam.put("date",analysisDate); @@ -215,13 +250,9 @@ public class AbnormalAttendanceServiceImpl extends Service implements AbnormalAt saveWorkTimeBeLateParam.put("itemduration",itemduration); saveWorkTimeBeLateParam.put("betweenMinutes",between); saveWorkTimeBeLateParam.put("hsdw",hsdw); + saveWorkTimeBeLateParam.put("kczgsc",workTimeBeLateItems.get(0)); resultList.add(saveWorkTimeBeLateParam); -// List> classInfoList = Lists.newArrayList(); -// classInfoList.add(classInfo); -// saveWorkTimeBeLateParam.put("classInfo", classInfoList); -// saveWorkTimeBeLateParam.put("cqzt","1"); -// commandExecutor.execute(new UpdateAttendanceResultsCmd(saveWorkTimeBeLateParam)); -// ifLeaveEarly=true; + } }else if (ClassSegmentTypeEnum.EXTENDED_OVERTIME.getKey().equals(bdlx) || ClassSegmentTypeEnum.EARLY_OVERTIME.getKey().equals(bdlx) @@ -242,22 +273,28 @@ public class AbnormalAttendanceServiceImpl extends Service implements AbnormalAt String jbzzhlfzs = Util.null2String(workTimeBeLateItems.get(0).get("jbzzhlfzs")); if (!"".equals(jbzzhlfzs) && between > Integer.valueOf(jbzzhlfzs)){ Map saveWorkTimeBeLateParam = Maps.newHashMap(); - double itemduration = Utils.getItemduration(hsl,hsdw,between,AccountingUnitEnum.MINUTES); + String kczgsc = Util.null2String(workTimeBeLateItems.get(0).get("kczgsc")); + if (CheckBoxEnum.CHECKED.getKey().equals(kczgsc)){ + //起步扣除分钟数 + int qbkcsc = Integer.valueOf(Util.null2String(workTimeBeLateItems.get(0).get("qbkcsc"))); + //超出后单次累加扣除分钟数 + int cckcbc = Integer.valueOf(Util.null2String(workTimeBeLateItems.get(0).get("cckcbc"))); + if (between <= qbkcsc){ + between = qbkcsc; + }else { + int deductionDuration = between-qbkcsc; + between = Double.valueOf(Utils.getItemduration(cckcbc,AccountingUnitEnum.MINUTES.getKey(),deductionDuration,AccountingUnitEnum.MINUTES)).intValue(); - -// saveWorkTimeBeLateParam.put("userId",userId); -// saveWorkTimeBeLateParam.put("date",analysisDate); + } + } + double itemduration = Utils.getItemduration(hsl,hsdw,between,AccountingUnitEnum.MINUTES); saveWorkTimeBeLateParam.put("item",getBeEarlyItems(earlyParams).get(0).get("key")); saveWorkTimeBeLateParam.put("itemduration",itemduration); saveWorkTimeBeLateParam.put("betweenMinutes",between); saveWorkTimeBeLateParam.put("hsdw",hsdw); + saveWorkTimeBeLateParam.put("kczgsc",workTimeBeLateItems.get(0)); resultList.add(saveWorkTimeBeLateParam); -// List> classInfoList = Lists.newArrayList(); -// classInfoList.add(classInfo); -// saveWorkTimeBeLateParam.put("classInfo", classInfoList); -// saveWorkTimeBeLateParam.put("cqzt","1"); -// commandExecutor.execute(new UpdateAttendanceResultsCmd(saveWorkTimeBeLateParam)); -// ifLeaveEarly=true; + } } @@ -276,21 +313,30 @@ public class AbnormalAttendanceServiceImpl extends Service implements AbnormalAt String hsdw = Util.null2String(workTimeBeLateItems.get(0).get("hsdw")); String tqlghlfzs = Util.null2String(workTimeBeLateItems.get(0).get("tqlghlfzs")); if (!"".equals(tqlghlfzs) && between> Integer.valueOf(tqlghlfzs)){ + String kczgsc = Util.null2String(workTimeBeLateItems.get(0).get("kczgsc")); + if (CheckBoxEnum.CHECKED.getKey().equals(kczgsc)){ + //起步扣除分钟数 + int qbkcsc = Integer.valueOf(Util.null2String(workTimeBeLateItems.get(0).get("qbkcsc"))); + //超出后单次累加扣除分钟数 + int cckcbc = Integer.valueOf(Util.null2String(workTimeBeLateItems.get(0).get("cckcbc"))); + if (between <= qbkcsc){ + between = qbkcsc; + }else { + int deductionDuration = between-qbkcsc; + between = Double.valueOf(Utils.getItemduration(cckcbc,AccountingUnitEnum.MINUTES.getKey(),deductionDuration,AccountingUnitEnum.MINUTES)).intValue(); + + } + } double itemduration = Utils.getItemduration(hsl,hsdw,between,AccountingUnitEnum.MINUTES); Map saveWorkTimeBeLateParam = Maps.newHashMap(); -// saveWorkTimeBeLateParam.put("userId",userId); -// saveWorkTimeBeLateParam.put("date",analysisDate); + saveWorkTimeBeLateParam.put("item",getBeEarlyItems(earlyParams).get(0).get("key")); saveWorkTimeBeLateParam.put("itemduration",itemduration); saveWorkTimeBeLateParam.put("betweenMinutes",between); saveWorkTimeBeLateParam.put("hsdw",hsdw); + saveWorkTimeBeLateParam.put("kczgsc",workTimeBeLateItems.get(0)); resultList.add(saveWorkTimeBeLateParam); -// List> classInfoList = Lists.newArrayList(); -// classInfoList.add(classInfo); -// saveWorkTimeBeLateParam.put("classInfo", classInfoList); -// saveWorkTimeBeLateParam.put("cqzt","1"); -// commandExecutor.execute(new UpdateAttendanceResultsCmd(saveWorkTimeBeLateParam)); -// ifLeaveEarly=true; + } } diff --git a/src/com/engine/attendance/attendanceanalysis/service/impl/UtilServiceImpl.java b/src/com/engine/attendance/attendanceanalysis/service/impl/UtilServiceImpl.java index d59f1e5..afe840a 100644 --- a/src/com/engine/attendance/attendanceanalysis/service/impl/UtilServiceImpl.java +++ b/src/com/engine/attendance/attendanceanalysis/service/impl/UtilServiceImpl.java @@ -1,5 +1,6 @@ package com.engine.attendance.attendanceanalysis.service.impl; +import com.engine.attendance.attendanceanalysis.cmd.ComputeAttendanceDurationCmd; import com.engine.attendance.attendanceanalysis.cmd.GetClockInPointCmd; import com.engine.attendance.attendanceanalysis.cmd.GetClockInTimeItemCmd; import com.engine.attendance.attendanceanalysis.cmd.recordDataCmd; @@ -56,10 +57,7 @@ public class UtilServiceImpl extends Service implements UtilService { sql = sql +bcxxIds+") order by b.kssj"; List> dataList = DbTools.getSqlToList(sql); Map>> dataMap = dataList.stream().collect(Collectors.groupingBy(e->Util.null2String(e.get("bcxx")))); - String edsc = "8"; - if (dataList.size()>0){ - edsc = Util.null2String(dataList.get(0).get("edsc")); - } + dataMap.entrySet().forEach(e -> { List> schedulingList = schedulingMap.get(e.getKey()); for (Map scheduling :schedulingList){ @@ -129,7 +127,11 @@ public class UtilServiceImpl extends Service implements UtilService { map.put("bcxx","0"); map.put("bcsdxx",""); - map.put("edsc",edsc); + if (dataList.size()>0){ + map.put("edsc",Util.null2String(dataList.get(0).get("edsc"))); + }else { + map.put("edsc","0"); + } map.put("bdlx", ClassSegmentTypeEnum.OVERTIME_PLAN.getKey()); map.put("dtkssj",overtimePlan.get("kssj")); map.put("dtjssj",overtimePlan.get("jssj")); @@ -243,4 +245,10 @@ public class UtilServiceImpl extends Service implements UtilService { return (List>>)resultMap.get("clcokInTimeData"); } + + @Override + public double computeAttendanceDuration(Map params) { + Map resultMap = commandExecutor.execute(new ComputeAttendanceDurationCmd(params)); + return Double.valueOf(resultMap.get("attendanceDuration").toString()); + } } diff --git a/src/com/engine/attendance/attendanceanalysis/service/impl/WorkOverTimeServiceImpl.java b/src/com/engine/attendance/attendanceanalysis/service/impl/WorkOverTimeServiceImpl.java index eca3889..4dea1cd 100644 --- a/src/com/engine/attendance/attendanceanalysis/service/impl/WorkOverTimeServiceImpl.java +++ b/src/com/engine/attendance/attendanceanalysis/service/impl/WorkOverTimeServiceImpl.java @@ -92,8 +92,6 @@ public class WorkOverTimeServiceImpl extends Service implements WorkOverTimeServ String realityStartTime = ""; //加班实际结束时间 String realityEndime = ""; - //申请时间 - int applicationTime = DateUtil.getBetWeenMinutes(kssj,jssj); resultLists.add(workOverTimeItems); @@ -178,7 +176,7 @@ public class WorkOverTimeServiceImpl extends Service implements WorkOverTimeServ } /** - * 当存在迟到项目时扣除异常时长,不存在时 + * 当存在迟到项目时扣除异常时长,不存在时扣除实际迟到时间 */ List> beLateAbnormal = abnormalClockInList.stream().filter(e->e.get("pointTime").toString().split(" ")[1].equals(dtkssj)).collect(Collectors.toList()); double beLateTime = 0; @@ -257,6 +255,8 @@ public class WorkOverTimeServiceImpl extends Service implements WorkOverTimeServ if (!"".equals(jbqsfzs)){ if (jbsc < Integer.valueOf(jbqsfzs)){ //小于最小加班分钟数不算加班 + workOverTimeItems.put("item",workTimeBeLateItems.get(0).get("key")); + workOverTimeItems.put("itemduration","0"); continue; }else if (jbsc >= Integer.valueOf(jbqsfzs) && !"".equals(ccqszhdhsfzs)){ jbsc = Double.valueOf(Utils.getItemdurationDown(Integer.valueOf(ccqszhdhsfzs),AccountingUnitEnum.MINUTES.getKey(),Double.valueOf(jbsc).intValue(),AccountingUnitEnum.MINUTES)).intValue(); @@ -499,11 +499,9 @@ public class WorkOverTimeServiceImpl extends Service implements WorkOverTimeServ Map> evectionItems,List> offsetEvectionAnomaly){ int askForLeaveTime=0; for (int i=0;i resultMap = Maps.newHashMap(); - resultMap.put("item",evectionList.get(i).get("cclx")); - //请假时长 + //出差时长 String qjsc = Util.null2String(evectionList.get(i).get("ccsc")); - //请假项目 + //出差项目 Map evectionItem = evectionItems.get(evectionList.get(i).get("cclx")); //作用时段 String zysd = Util.null2String(evectionItem.get("zysd")); diff --git a/src/com/engine/attendance/attendanceanalysis/wrapper/AttendanceAnalysisWrapper.java b/src/com/engine/attendance/attendanceanalysis/wrapper/AttendanceAnalysisWrapper.java index 4f2ed34..5dfcc52 100644 --- a/src/com/engine/attendance/attendanceanalysis/wrapper/AttendanceAnalysisWrapper.java +++ b/src/com/engine/attendance/attendanceanalysis/wrapper/AttendanceAnalysisWrapper.java @@ -305,6 +305,10 @@ public class AttendanceAnalysisWrapper extends Service { */ List> recordWorkOverTime= updateAttendanceResultWrapper.recordWorkOverTime(recordAbnormalParam); + /** + * 计算出勤时长 + */ + double attendanceDuration = utilService.computeAttendanceDuration(recordAbnormalParam); /** * 入库 @@ -313,6 +317,7 @@ public class AttendanceAnalysisWrapper extends Service { recordData.addAll(vactionList); recordData.addAll(evectionResultList); recordData.addAll(abnormalClockInListByEvction); + recordData.addAll(recordWorkOverTime); recordParam.put("recordData",recordData); recordParam.put("recordDataTime",utilService.getNeedRecordClockInTime(clcokInTimeData)); log.info("recordParam : {}",recordParam); diff --git a/target/classes/com/engine/attendance/attendanceanalysis/cmd/ComputeAttendanceDurationCmd.class b/target/classes/com/engine/attendance/attendanceanalysis/cmd/ComputeAttendanceDurationCmd.class new file mode 100644 index 0000000..458f6b5 Binary files /dev/null and b/target/classes/com/engine/attendance/attendanceanalysis/cmd/ComputeAttendanceDurationCmd.class differ diff --git a/target/classes/com/engine/attendance/attendanceanalysis/cmd/GetClockInPointCmd.class b/target/classes/com/engine/attendance/attendanceanalysis/cmd/GetClockInPointCmd.class index f9afee0..110e3b6 100644 Binary files a/target/classes/com/engine/attendance/attendanceanalysis/cmd/GetClockInPointCmd.class and b/target/classes/com/engine/attendance/attendanceanalysis/cmd/GetClockInPointCmd.class differ diff --git a/target/classes/com/engine/attendance/attendanceanalysis/cmd/GetClockInTimeItemCmd.class b/target/classes/com/engine/attendance/attendanceanalysis/cmd/GetClockInTimeItemCmd.class index 1e528c9..5768068 100644 Binary files a/target/classes/com/engine/attendance/attendanceanalysis/cmd/GetClockInTimeItemCmd.class and b/target/classes/com/engine/attendance/attendanceanalysis/cmd/GetClockInTimeItemCmd.class differ diff --git a/target/classes/com/engine/attendance/attendanceanalysis/job/AttendanceAnalysisJob.class b/target/classes/com/engine/attendance/attendanceanalysis/job/AttendanceAnalysisJob.class index 04fe8e8..d90f3b8 100644 Binary files a/target/classes/com/engine/attendance/attendanceanalysis/job/AttendanceAnalysisJob.class and b/target/classes/com/engine/attendance/attendanceanalysis/job/AttendanceAnalysisJob.class differ diff --git a/target/classes/com/engine/attendance/attendanceanalysis/service/UtilService.class b/target/classes/com/engine/attendance/attendanceanalysis/service/UtilService.class index 4f546ff..5d6bdd6 100644 Binary files a/target/classes/com/engine/attendance/attendanceanalysis/service/UtilService.class and b/target/classes/com/engine/attendance/attendanceanalysis/service/UtilService.class differ diff --git a/target/classes/com/engine/attendance/attendanceanalysis/service/impl/AbnormalAttendanceServiceImpl.class b/target/classes/com/engine/attendance/attendanceanalysis/service/impl/AbnormalAttendanceServiceImpl.class index 97de038..bd2b05d 100644 Binary files a/target/classes/com/engine/attendance/attendanceanalysis/service/impl/AbnormalAttendanceServiceImpl.class and b/target/classes/com/engine/attendance/attendanceanalysis/service/impl/AbnormalAttendanceServiceImpl.class differ diff --git a/target/classes/com/engine/attendance/attendanceanalysis/service/impl/AskForLeaveServiceImpl.class b/target/classes/com/engine/attendance/attendanceanalysis/service/impl/AskForLeaveServiceImpl.class index 56abbaf..011e865 100644 Binary files a/target/classes/com/engine/attendance/attendanceanalysis/service/impl/AskForLeaveServiceImpl.class and b/target/classes/com/engine/attendance/attendanceanalysis/service/impl/AskForLeaveServiceImpl.class differ diff --git a/target/classes/com/engine/attendance/attendanceanalysis/service/impl/EvectionServiceImpl.class b/target/classes/com/engine/attendance/attendanceanalysis/service/impl/EvectionServiceImpl.class index 6781c50..182ff74 100644 Binary files a/target/classes/com/engine/attendance/attendanceanalysis/service/impl/EvectionServiceImpl.class and b/target/classes/com/engine/attendance/attendanceanalysis/service/impl/EvectionServiceImpl.class differ diff --git a/target/classes/com/engine/attendance/attendanceanalysis/service/impl/UtilServiceImpl.class b/target/classes/com/engine/attendance/attendanceanalysis/service/impl/UtilServiceImpl.class index e182c9e..a2a3599 100644 Binary files a/target/classes/com/engine/attendance/attendanceanalysis/service/impl/UtilServiceImpl.class and b/target/classes/com/engine/attendance/attendanceanalysis/service/impl/UtilServiceImpl.class differ diff --git a/target/classes/com/engine/attendance/attendanceanalysis/service/impl/WorkOverTimeServiceImpl.class b/target/classes/com/engine/attendance/attendanceanalysis/service/impl/WorkOverTimeServiceImpl.class index 89fb538..50b4821 100644 Binary files a/target/classes/com/engine/attendance/attendanceanalysis/service/impl/WorkOverTimeServiceImpl.class and b/target/classes/com/engine/attendance/attendanceanalysis/service/impl/WorkOverTimeServiceImpl.class differ diff --git a/target/classes/com/engine/attendance/attendanceanalysis/web/AttendanceanalysisAction.class b/target/classes/com/engine/attendance/attendanceanalysis/web/AttendanceanalysisAction.class index 852835a..094128b 100644 Binary files a/target/classes/com/engine/attendance/attendanceanalysis/web/AttendanceanalysisAction.class and b/target/classes/com/engine/attendance/attendanceanalysis/web/AttendanceanalysisAction.class differ diff --git a/target/classes/com/engine/attendance/attendanceanalysis/wrapper/AttendanceAnalysisWrapper.class b/target/classes/com/engine/attendance/attendanceanalysis/wrapper/AttendanceAnalysisWrapper.class index 7777682..3028752 100644 Binary files a/target/classes/com/engine/attendance/attendanceanalysis/wrapper/AttendanceAnalysisWrapper.class and b/target/classes/com/engine/attendance/attendanceanalysis/wrapper/AttendanceAnalysisWrapper.class differ diff --git a/target/classes/com/engine/attendance/attendanceanalysis/wrapper/UpdateAttendanceResultWrapper.class b/target/classes/com/engine/attendance/attendanceanalysis/wrapper/UpdateAttendanceResultWrapper.class index 64a5edd..8c2c6b7 100644 Binary files a/target/classes/com/engine/attendance/attendanceanalysis/wrapper/UpdateAttendanceResultWrapper.class and b/target/classes/com/engine/attendance/attendanceanalysis/wrapper/UpdateAttendanceResultWrapper.class differ diff --git a/target/classes/com/engine/attendance/component/persongroup/commonutil/PersongroupCommonUtil.class b/target/classes/com/engine/attendance/component/persongroup/commonutil/PersongroupCommonUtil.class index c78856f..99bf2c5 100644 Binary files a/target/classes/com/engine/attendance/component/persongroup/commonutil/PersongroupCommonUtil.class and b/target/classes/com/engine/attendance/component/persongroup/commonutil/PersongroupCommonUtil.class differ diff --git a/target/classes/com/engine/attendance/component/persongroup/job/scheduling/tactics/DayRegularScheduling.class b/target/classes/com/engine/attendance/component/persongroup/job/scheduling/tactics/DayRegularScheduling.class index 89ca06a..69fb506 100644 Binary files a/target/classes/com/engine/attendance/component/persongroup/job/scheduling/tactics/DayRegularScheduling.class and b/target/classes/com/engine/attendance/component/persongroup/job/scheduling/tactics/DayRegularScheduling.class differ diff --git a/target/classes/com/engine/attendance/component/persongroup/job/scheduling/tactics/MonthRegularScheduling.class b/target/classes/com/engine/attendance/component/persongroup/job/scheduling/tactics/MonthRegularScheduling.class index d7a6ac4..9360b72 100644 Binary files a/target/classes/com/engine/attendance/component/persongroup/job/scheduling/tactics/MonthRegularScheduling.class and b/target/classes/com/engine/attendance/component/persongroup/job/scheduling/tactics/MonthRegularScheduling.class differ diff --git a/target/classes/com/engine/attendance/component/persongroup/job/scheduling/tactics/WeekRegularScheduling.class b/target/classes/com/engine/attendance/component/persongroup/job/scheduling/tactics/WeekRegularScheduling.class index 8648ba2..4d12e78 100644 Binary files a/target/classes/com/engine/attendance/component/persongroup/job/scheduling/tactics/WeekRegularScheduling.class and b/target/classes/com/engine/attendance/component/persongroup/job/scheduling/tactics/WeekRegularScheduling.class differ diff --git a/target/classes/com/engine/attendance/component/persongroup/job/scheduling/tactics/YearRegularScheduling.class b/target/classes/com/engine/attendance/component/persongroup/job/scheduling/tactics/YearRegularScheduling.class index 1b46757..ffb79df 100644 Binary files a/target/classes/com/engine/attendance/component/persongroup/job/scheduling/tactics/YearRegularScheduling.class and b/target/classes/com/engine/attendance/component/persongroup/job/scheduling/tactics/YearRegularScheduling.class differ diff --git a/target/classes/com/engine/common/util/DateUtil.class b/target/classes/com/engine/common/util/DateUtil.class index 4aa6c78..7ba3d45 100644 Binary files a/target/classes/com/engine/common/util/DateUtil.class and b/target/classes/com/engine/common/util/DateUtil.class differ diff --git a/target/classes/com/engine/common/util/Utils.class b/target/classes/com/engine/common/util/Utils.class index 570d9e2..ab60db5 100644 Binary files a/target/classes/com/engine/common/util/Utils.class and b/target/classes/com/engine/common/util/Utils.class differ diff --git a/target/test-classes/Test.class b/target/test-classes/Test.class index 44619e2..2f81ea1 100644 Binary files a/target/test-classes/Test.class and b/target/test-classes/Test.class differ diff --git a/test/Test.java b/test/Test.java index 8e43cb8..99ba69a 100644 --- a/test/Test.java +++ b/test/Test.java @@ -192,9 +192,9 @@ public class Test { // System.out.println(lists2.size()); BigDecimal s = new BigDecimal(110.0); - System.out.println(String.format ("%.2f", 1.8333)); - System.out.println(DateUtil.lastMonth("2023-11-23",DateUtil.yyyyMMdd)); + System.out.println(8.0*0.3); + //System.out.println(Utils.getItemdurationDown(15,AccountingUnitEnum.MINUTES.getKey(),59,AccountingUnitEnum.MINUTES)); // Calendar calendar = Calendar.getInstance(); // calendar.set(Integer.valueOf(analysisDate.split("-")[0]), Integer.valueOf(analysisDate.split("-")[1]) - 1, 1);