diff --git a/src/com/engine/jucailinkq/attendance/attendanceanalysis/cmd/ComputeAttendanceDurationCmd.java b/src/com/engine/jucailinkq/attendance/attendanceanalysis/cmd/ComputeAttendanceDurationCmd.java index ade5058..cb3d015 100644 --- a/src/com/engine/jucailinkq/attendance/attendanceanalysis/cmd/ComputeAttendanceDurationCmd.java +++ b/src/com/engine/jucailinkq/attendance/attendanceanalysis/cmd/ComputeAttendanceDurationCmd.java @@ -172,11 +172,43 @@ public class ComputeAttendanceDurationCmd extends AbstractCommonCommand 0){ - Set> schedules = Utils.getScheduleByAbnormalList(scheduleResult,offsetAbnomaly,analysisDate); - if (schedules.size() > 0){ - employTime += schedules.stream().mapToDouble(e->Double.valueOf(e.get("edfzs").toString())).sum(); - }else { - employTime +=edsc*30; + if (btgz.equals(HalfDayRuleREnum.BY_CLASS_SET.getKey())){ + Set> schedules = Utils.getScheduleByAbnormalList(scheduleResult,offsetAbnomaly,analysisDate); + schedules = schedules.stream().filter(e->ClassSegmentTypeEnum.WORK_TIME.getKey().equals(e.get("bdlx"))).collect(Collectors.toSet()); + if (schedules.size() > 0){ + employTime += schedules.stream().mapToDouble(e->Double.valueOf(e.get("edfzs").toString())).sum(); + }else { + employTime +=edsc*30; + } + }else if (btgz.equals(HalfDayRuleREnum.FIXED_DURATION.getKey())){ + String fgsjd = Util.null2String(scheduleResult.get(0).get("fgsjd")); + fgsjd = analysisDate +" "+fgsjd; + String finalFgsjd = fgsjd; + + if (DateUtil.getTime(offsetAbnomaly.get(0).get("pointTime").toString()).compareTo(DateUtil.getTime(fgsjd))<=0){ + //取前面的班段 + List> schedules = scheduleResult.stream().filter(e-> DateUtil.getTime(Utils.getkssjTime(e,analysisDate)).compareTo(DateUtil.getTime(finalFgsjd))<=0 && ClassSegmentTypeEnum.WORK_TIME.getKey().equals(e.get("bdlx"))).collect(Collectors.toList()); + for (int j=0;j0){ + employTime+=DateUtil.getBetWeenMinutes(Utils.getkssjTime(schedules.get(j),analysisDate),fgsjd); + }else { + employTime+=Double.valueOf(schedules.get(j).get("edfzs").toString()); + } + } + + }else { + //取后面的班段 + List> schedules = scheduleResult.stream().filter(e-> DateUtil.getTime(Utils.getjssjTime(e,analysisDate)).compareTo(DateUtil.getTime(finalFgsjd))>0 && ClassSegmentTypeEnum.WORK_TIME.getKey().equals(e.get("bdlx"))).collect(Collectors.toList()); + for (int j=0;j 0){ - Set> schedules = Utils.getScheduleByAbnormalList(scheduleResult,offsetAbnomaly,analysisDate); - if (schedules.size() > 0){ - employTime += schedules.stream().mapToDouble(e->Double.valueOf(e.get("edfzs").toString())).sum(); - }else { - employTime +=edsc*30; + if (btgz.equals(HalfDayRuleREnum.BY_CLASS_SET.getKey())){ + Set> schedules = Utils.getScheduleByAbnormalList(scheduleResult,offsetAbnomaly,analysisDate); + schedules = schedules.stream().filter(e->ClassSegmentTypeEnum.WORK_TIME.getKey().equals(e.get("bdlx"))).collect(Collectors.toSet()); + if (schedules.size() > 0){ + employTime += schedules.stream().mapToDouble(e->Double.valueOf(e.get("edfzs").toString())).sum(); + }else { + employTime +=edsc*30; + } + }else if (btgz.equals(HalfDayRuleREnum.FIXED_DURATION.getKey())){ + String fgsjd = Util.null2String(scheduleResult.get(0).get("fgsjd")); + fgsjd = analysisDate +" "+fgsjd; + String finalFgsjd = fgsjd; + + if (DateUtil.getTime(offsetAbnomaly.get(0).get("pointTime").toString()).compareTo(DateUtil.getTime(fgsjd))<=0){ + //取前面的班段 + List> schedules = scheduleResult.stream().filter(e-> DateUtil.getTime(Utils.getkssjTime(e,analysisDate)).compareTo(DateUtil.getTime(finalFgsjd))<=0 && ClassSegmentTypeEnum.WORK_TIME.getKey().equals(e.get("bdlx"))).collect(Collectors.toList()); + for (int j=0;j0){ + employTime+=DateUtil.getBetWeenMinutes(Utils.getkssjTime(schedules.get(j),analysisDate),fgsjd); + }else { + employTime+=Double.valueOf(schedules.get(j).get("edfzs").toString()); + } + } + + }else { + //取后面的班段 + List> schedules = scheduleResult.stream().filter(e-> DateUtil.getTime(Utils.getjssjTime(e,analysisDate)).compareTo(DateUtil.getTime(finalFgsjd))>0 && ClassSegmentTypeEnum.WORK_TIME.getKey().equals(e.get("bdlx"))).collect(Collectors.toList()); + for (int j=0;j> //全天请假 if (CheckBoxEnum.CHECKED.getKey().equals(askForLeaveData.get("qtj"))){ if (sffzcx.equals(CheckBoxEnum.CHECKED.getKey())){ - Map proportionMap = Utils.getClassSegmentTimeProportion(scheduleResult,analysisDate); - for (Map.Entry entry: proportionMap.entrySet()){ + Map>> proportionMap = Utils.getClassSegmentTimeProportion(scheduleResult,analysisDate); + for (Map.Entry>> entry: proportionMap.entrySet()){ String bdlx = entry.getKey(); - int betweenTimes = Integer.valueOf(entry.getValue().toString()); Map item = CommonUtil.assembleAskForOrEvectionItem(askForLeaveItem,bdlx); if (item != null){ + String sonhsdw = item.get("hsdw").toString(); + List> schedules = entry.getValue(); Map itemMap = Maps.newHashMap(); - itemMap.put("itemduration",Utils.getItemduration(Double.valueOf(Util.null2String(item.get("hsl"))),Util.null2String(item.get("hsdw")),betweenTimes, AccountingUnitEnum.MINUTES,Double.valueOf(scheduleResult.get(0).get("edsc").toString()))); + itemMap.put("itemduration",Utils.getItemduration(schedules,sonhsdw,item.get("hsl").toString())); itemMap.put("item",item.get("keyid")); resultList.add(itemMap); } diff --git a/src/com/engine/jucailinkq/attendance/attendanceanalysis/cmd/GetEvectionCmd.java b/src/com/engine/jucailinkq/attendance/attendanceanalysis/cmd/GetEvectionCmd.java index 82838ca..936d6d0 100644 --- a/src/com/engine/jucailinkq/attendance/attendanceanalysis/cmd/GetEvectionCmd.java +++ b/src/com/engine/jucailinkq/attendance/attendanceanalysis/cmd/GetEvectionCmd.java @@ -103,14 +103,15 @@ public class GetEvectionCmd extends AbstractCommonCommand> { //全天出差 if (CheckBoxEnum.CHECKED.getKey().equals(evectionData.get("qtcc"))){ if (sffzcx.equals(CheckBoxEnum.CHECKED.getKey())){ - Map proportionMap = Utils.getClassSegmentTimeProportion(scheduleResult,analysisDate); - for (Map.Entry entry: proportionMap.entrySet()){ + Map>> proportionMap = Utils.getClassSegmentTimeProportion(scheduleResult,analysisDate); + for (Map.Entry>> entry: proportionMap.entrySet()){ String bdlx = entry.getKey(); - int betweenTimes = Integer.valueOf(entry.getValue().toString()); Map item = CommonUtil.assembleAskForOrEvectionItem(evectionItem,bdlx); if (item != null){ + String sonhsdw = item.get("hsdw").toString(); + List> schedules = entry.getValue(); Map itemMap = Maps.newHashMap(); - itemMap.put("itemduration",Utils.getItemduration(Double.valueOf(Util.null2String(item.get("hsl"))),Util.null2String(item.get("hsdw")),betweenTimes, AccountingUnitEnum.MINUTES,Double.valueOf(scheduleResult.get(0).get("edsc").toString()))); + itemMap.put("itemduration",Utils.getItemduration(schedules,sonhsdw,item.get("hsl").toString())); itemMap.put("item",item.get("keyid")); resultList.add(itemMap); } diff --git a/src/com/engine/jucailinkq/attendance/attendanceanalysis/cmd/GetScheduleResultListCmd.java b/src/com/engine/jucailinkq/attendance/attendanceanalysis/cmd/GetScheduleResultListCmd.java index 2770722..5bf10b8 100644 --- a/src/com/engine/jucailinkq/attendance/attendanceanalysis/cmd/GetScheduleResultListCmd.java +++ b/src/com/engine/jucailinkq/attendance/attendanceanalysis/cmd/GetScheduleResultListCmd.java @@ -115,7 +115,7 @@ public class GetScheduleResultListCmd extends AbstractCommonCommand> { + public GetAskforleaveSonItemsWhenHalfDay(Map params) { + this.params = params; + } + @Override + public BizLogContext getLogContext() { + return null; + } + + @Override + public Map execute(CommandContext commandContext) { + + Map askForLeaveItem = (Map)params.get("askForLeaveItem"); + List> halfoffsetAskForLeaveAnomaly = (List>)params.get("halfoffsetAskForLeaveAnomaly"); + List> scheduleResult = (List>)params.get("scheduleResult"); + String analysisDate = Util.null2String(params.get("analysisDate")); + //半天规则 + String btgz = Util.null2String(scheduleResult.get(0).get("btgz")); + //作用时段 + String zysd = Util.null2String(askForLeaveItem.get("zysd")); + List classSegmens = Lists.newArrayList(); + for (String str:zysd.split(",")){ + classSegmens.add(Utils.getClassSegmenByWorkFor(str)); + } + List> itemList = Lists.newArrayList(); + if (btgz.equals(HalfDayRuleREnum.BY_CLASS_SET.getKey())){ + //按班次设置 + List> schedules = Lists.newArrayList(); + for (Map scheduleMap:scheduleResult){ + if (Utils.getAbnormalListBySchedule(scheduleMap,halfoffsetAskForLeaveAnomaly,analysisDate).size() >0){ + schedules.add(scheduleMap); + } + } + + Map>> proportionMap = Utils.getClassSegmentTimeProportion(schedules,analysisDate); + for (Map.Entry>> entry: proportionMap.entrySet()){ + String bdlx = entry.getKey(); + Map item = CommonUtil.assembleAskForOrEvectionItem(askForLeaveItem,bdlx); + if (item != null){ + Map itemMap = Maps.newHashMap(); + itemMap.put("itemduration",Utils.getItemduration(entry.getValue(),item.get("hsdw").toString(),item.get("hsl").toString())); + itemMap.put("item",item.get("keyid")); + itemList.add(itemMap); + } + } + + }else if (btgz.equals(HalfDayRuleREnum.FIXED_DURATION.getKey())){ + //取固定时间 + String fgsjd = Util.null2String(scheduleResult.get(0).get("fgsjd")); + fgsjd = analysisDate +" "+fgsjd; + String finalFgsjd = fgsjd; + List> schedules = null; + if (DateUtil.getTime(halfoffsetAskForLeaveAnomaly.get(0).get("pointTime").toString()).compareTo(DateUtil.getTime(fgsjd))<=0){ + //取前面的班段 + schedules = scheduleResult.stream().filter(e-> DateUtil.getTime(Utils.getkssjTime(e,analysisDate)).compareTo(DateUtil.getTime(finalFgsjd))<=0 && classSegmens.contains(e.get("bdlx"))).collect(Collectors.toList()); + if (DateUtil.getTime(Utils.getjssjTime(schedules.get(schedules.size()-1),analysisDate)).compareTo(DateUtil.getTime(finalFgsjd)) >0){ + int betweenMinutes = DateUtil.getBetWeenMinutes(Utils.getkssjTime(schedules.get(schedules.size()-1),analysisDate),fgsjd); + schedules.get(schedules.size()-1).put("edfzs",betweenMinutes); + double oldedxss = Double.valueOf(schedules.get(schedules.size()-1).get("edxss").toString()); + double newedxss = Utils.divide(betweenMinutes,60); + schedules.get(schedules.size()-1).put("edxss",newedxss); + double oldedts = Double.valueOf(schedules.get(schedules.size()-1).get("edts").toString()); + double newedts = Utils.divide(newedxss*oldedts,oldedxss); + schedules.get(schedules.size()-1).put("edts",newedts); + } + + }else { + //取后面的班段 + schedules = scheduleResult.stream().filter(e-> DateUtil.getTime(Utils.getjssjTime(e,analysisDate)).compareTo(DateUtil.getTime(finalFgsjd))>=0 && classSegmens.contains(e.get("bdlx"))).collect(Collectors.toList()); + + if (DateUtil.getTime(Utils.getkssjTime(schedules.get(0),analysisDate)).compareTo(DateUtil.getTime(finalFgsjd)) <0){ + int betweenMinutes = DateUtil.getBetWeenMinutes(fgsjd,Utils.getjssjTime(schedules.get(0),analysisDate)); + schedules.get(0).put("edfzs",betweenMinutes); + double oldedxss = Double.valueOf(schedules.get(0).get("edxss").toString()); + double newedxss = Utils.divide(betweenMinutes,60); + schedules.get(0).put("edxss",newedxss); + double oldedts = Double.valueOf(schedules.get(0).get("edts").toString()); + double newedts = Utils.divide(newedxss*oldedts,oldedxss); + schedules.get(0).put("edts",newedts); + } + } + + Map>> proportionMap = Utils.getClassSegmentTimeProportion(schedules,analysisDate); + for (Map.Entry>> entry: proportionMap.entrySet()){ + String bdlx = entry.getKey(); + Map item = CommonUtil.assembleAskForOrEvectionItem(askForLeaveItem,bdlx); + if (item != null){ + Map itemMap = Maps.newHashMap(); + itemMap.put("itemduration",Utils.getItemduration(entry.getValue(),item.get("hsdw").toString(),item.get("hsl").toString())); + itemMap.put("item",item.get("keyid")); + itemList.add(itemMap); + } + } + + } + Map resultMap = Maps.newHashMap(); + resultMap.put("itemList",itemList); + return resultMap; + } +} diff --git a/src/com/engine/jucailinkq/attendance/attendanceanalysis/cmd/evection/GetEvectionSonItemsWhenHalfDay.java b/src/com/engine/jucailinkq/attendance/attendanceanalysis/cmd/evection/GetEvectionSonItemsWhenHalfDay.java new file mode 100644 index 0000000..ae87b6a --- /dev/null +++ b/src/com/engine/jucailinkq/attendance/attendanceanalysis/cmd/evection/GetEvectionSonItemsWhenHalfDay.java @@ -0,0 +1,117 @@ +package com.engine.jucailinkq.attendance.attendanceanalysis.cmd.evection; + +import com.engine.common.biz.AbstractCommonCommand; +import com.engine.common.entity.BizLogContext; +import com.engine.core.interceptor.CommandContext; +import com.engine.jucailinkq.attendance.enums.HalfDayRuleREnum; +import com.engine.jucailinkq.common.util.CommonUtil; +import com.engine.jucailinkq.common.util.DateUtil; +import com.engine.jucailinkq.common.util.Utils; +import com.google.common.collect.Lists; +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 GetEvectionSonItemsWhenHalfDay extends AbstractCommonCommand> { + public GetEvectionSonItemsWhenHalfDay(Map params) { + this.params = params; + } + @Override + public BizLogContext getLogContext() { + return null; + } + + @Override + public Map execute(CommandContext commandContext) { + + Map evectionItem = (Map)params.get("evectionItem"); + List> halfoffsetEvectionAnomaly = (List>)params.get("halfoffsetEvectionAnomaly"); + List> scheduleResult = (List>)params.get("scheduleResult"); + String analysisDate = Util.null2String(params.get("analysisDate")); + //半天规则 + String btgz = Util.null2String(scheduleResult.get(0).get("btgz")); + //作用时段 + String zysd = Util.null2String(evectionItem.get("zysd")); + List classSegmens = Lists.newArrayList(); + for (String str:zysd.split(",")){ + classSegmens.add(Utils.getClassSegmenByWorkFor(str)); + } + List> itemList = Lists.newArrayList(); + if (btgz.equals(HalfDayRuleREnum.BY_CLASS_SET.getKey())){ + //按班次设置 + List> schedules = Lists.newArrayList(); + for (Map scheduleMap:scheduleResult){ + if (Utils.getAbnormalListBySchedule(scheduleMap,halfoffsetEvectionAnomaly,analysisDate).size() >0){ + schedules.add(scheduleMap); + } + } + + Map>> proportionMap = Utils.getClassSegmentTimeProportion(schedules,analysisDate); + for (Map.Entry>> entry: proportionMap.entrySet()){ + String bdlx = entry.getKey(); + Map item = CommonUtil.assembleAskForOrEvectionItem(evectionItem,bdlx); + if (item != null){ + Map itemMap = Maps.newHashMap(); + itemMap.put("itemduration",Utils.getItemduration(entry.getValue(),item.get("hsdw").toString(),item.get("hsl").toString())); + itemMap.put("item",item.get("keyid")); + itemList.add(itemMap); + } + } + + }else if (btgz.equals(HalfDayRuleREnum.FIXED_DURATION.getKey())){ + //取固定时间 + String fgsjd = Util.null2String(scheduleResult.get(0).get("fgsjd")); + fgsjd = analysisDate +" "+fgsjd; + String finalFgsjd = fgsjd; + List> schedules = null; + if (DateUtil.getTime(halfoffsetEvectionAnomaly.get(0).get("pointTime").toString()).compareTo(DateUtil.getTime(fgsjd))<=0){ + //取前面的班段 + schedules = scheduleResult.stream().filter(e-> DateUtil.getTime(Utils.getkssjTime(e,analysisDate)).compareTo(DateUtil.getTime(finalFgsjd))<=0 && classSegmens.contains(e.get("bdlx"))).collect(Collectors.toList()); + if (DateUtil.getTime(Utils.getjssjTime(schedules.get(schedules.size()-1),analysisDate)).compareTo(DateUtil.getTime(finalFgsjd)) >0){ + int betweenMinutes = DateUtil.getBetWeenMinutes(Utils.getkssjTime(schedules.get(schedules.size()-1),analysisDate),fgsjd); + schedules.get(schedules.size()-1).put("edfzs",betweenMinutes); + double oldedxss = Double.valueOf(schedules.get(schedules.size()-1).get("edxss").toString()); + double newedxss = Utils.divide(betweenMinutes,60); + schedules.get(schedules.size()-1).put("edxss",newedxss); + double oldedts = Double.valueOf(schedules.get(schedules.size()-1).get("edts").toString()); + double newedts = Utils.divide(newedxss*oldedts,oldedxss); + schedules.get(schedules.size()-1).put("edts",newedts); + } + + }else { + //取后面的班段 + schedules = scheduleResult.stream().filter(e-> DateUtil.getTime(Utils.getjssjTime(e,analysisDate)).compareTo(DateUtil.getTime(finalFgsjd))>=0 && classSegmens.contains(e.get("bdlx"))).collect(Collectors.toList()); + + if (DateUtil.getTime(Utils.getkssjTime(schedules.get(0),analysisDate)).compareTo(DateUtil.getTime(finalFgsjd)) <0){ + int betweenMinutes = DateUtil.getBetWeenMinutes(fgsjd,Utils.getjssjTime(schedules.get(0),analysisDate)); + schedules.get(0).put("edfzs",betweenMinutes); + double oldedxss = Double.valueOf(schedules.get(0).get("edxss").toString()); + double newedxss = Utils.divide(betweenMinutes,60); + schedules.get(0).put("edxss",newedxss); + double oldedts = Double.valueOf(schedules.get(0).get("edts").toString()); + double newedts = Utils.divide(newedxss*oldedts,oldedxss); + schedules.get(0).put("edts",newedts); + } + } + + Map>> proportionMap = Utils.getClassSegmentTimeProportion(schedules,analysisDate); + for (Map.Entry>> entry: proportionMap.entrySet()){ + String bdlx = entry.getKey(); + Map item = CommonUtil.assembleAskForOrEvectionItem(evectionItem,bdlx); + if (item != null){ + Map itemMap = Maps.newHashMap(); + itemMap.put("itemduration",Utils.getItemduration(entry.getValue(),item.get("hsdw").toString(),item.get("hsl").toString())); + itemMap.put("item",item.get("keyid")); + itemList.add(itemMap); + } + } + + } + Map resultMap = Maps.newHashMap(); + resultMap.put("itemList",itemList); + return resultMap; + } +} 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 8657c12..2216916 100644 --- a/src/com/engine/jucailinkq/attendance/attendanceanalysis/cmd/workovertime/SaveWorkOverTimeCmd.java +++ b/src/com/engine/jucailinkq/attendance/attendanceanalysis/cmd/workovertime/SaveWorkOverTimeCmd.java @@ -155,8 +155,8 @@ public class SaveWorkOverTimeCmd extends AbstractCommonCommand holidayItem = getHolidayItem(workTimeBeLateItems.get(0).get("zrdjb").toString(),attendanceItems); //20240914逻辑修改,加班转调休中,加班时长、转入假期时长不进行核算量相关逻辑处理 // double ktsc = Utils.getItemdurationDown(Double.valueOf(holidayItem.get("hsl").toString()),holidayItem.get("hsdw").toString(),Double.valueOf(jbsc).intValue(),AccountingUnitEnum.MINUTES); - double ktsc = Utils.getItemdurationDownWithoutHsl(holidayItem.get("hsdw").toString(),Double.valueOf(jbsc).intValue(),AccountingUnitEnum.MINUTES); - + // double ktsc = Utils.getItemdurationDownWithoutHsl(holidayItem.get("hsdw").toString(),Double.valueOf(jbsc).intValue(),AccountingUnitEnum.MINUTES); + double ktsc = itemduration; insertHoliDayParam.put("ktsc",ktsc); insertHoliDayParam.put("yxsc",0); insertHoliDayParam.put("wxsc",ktsc); diff --git a/src/com/engine/jucailinkq/attendance/attendanceanalysis/service/AskForLeaveService.java b/src/com/engine/jucailinkq/attendance/attendanceanalysis/service/AskForLeaveService.java index 5760b9c..4ea30e9 100644 --- a/src/com/engine/jucailinkq/attendance/attendanceanalysis/service/AskForLeaveService.java +++ b/src/com/engine/jucailinkq/attendance/attendanceanalysis/service/AskForLeaveService.java @@ -1,5 +1,6 @@ package com.engine.jucailinkq.attendance.attendanceanalysis.service; +import java.util.List; import java.util.Map; public interface AskForLeaveService { @@ -28,4 +29,11 @@ public interface AskForLeaveService { * @return */ Map getAskForLeave(Map param); + + /** + * 半天假拆分 + * @param param + * @return + */ + List> getSonItemsWhenHalfDay(Map param); } diff --git a/src/com/engine/jucailinkq/attendance/attendanceanalysis/service/impl/AskForLeaveServiceImpl.java b/src/com/engine/jucailinkq/attendance/attendanceanalysis/service/impl/AskForLeaveServiceImpl.java index 0272fe2..4e6b13e 100644 --- a/src/com/engine/jucailinkq/attendance/attendanceanalysis/service/impl/AskForLeaveServiceImpl.java +++ b/src/com/engine/jucailinkq/attendance/attendanceanalysis/service/impl/AskForLeaveServiceImpl.java @@ -1,15 +1,15 @@ package com.engine.jucailinkq.attendance.attendanceanalysis.service.impl; import com.engine.jucailinkq.attendance.attendanceanalysis.cmd.GetAskForLeaveCmd; +import com.engine.jucailinkq.attendance.attendanceanalysis.cmd.askforleave.GetAskforleaveSonItemsWhenHalfDay; +import com.engine.jucailinkq.attendance.attendanceanalysis.cmd.evection.GetEvectionSonItemsWhenHalfDay; import com.engine.jucailinkq.attendance.attendanceanalysis.service.AskForLeaveService; import com.engine.jucailinkq.attendance.enums.*; -import com.engine.jucailinkq.common.util.CommonUtil; import com.engine.jucailinkq.common.util.DateUtil; import com.engine.jucailinkq.common.util.Utils; import com.engine.core.impl.Service; import com.google.common.collect.Lists; import com.google.common.collect.Maps; -import com.sun.corba.se.spi.ior.IdentifiableFactory; import weaver.general.Util; import java.time.ZoneOffset; @@ -184,7 +184,7 @@ public class AskForLeaveServiceImpl extends Service implements AskForLeaveServic if (ifBefore){ List> beforeScheduleList = scheduleResult.stream().filter(e-> DateUtil.getTime(Utils.getkssjTime(e,analysisDate)).compareTo(DateUtil.getTime(finalFgsjd))<=0 && classSegmens.contains(e.get("bdlx"))).collect(Collectors.toList()); for (int i=0;i0){ if (keyName.equals("edfzs")){ itemduration+=DateUtil.getBetWeenMinutes(Utils.getkssjTime(beforeScheduleList.get(i),analysisDate),fgsjd); }else if (keyName.equals("edxss")){ @@ -195,9 +195,9 @@ public class AskForLeaveServiceImpl extends Service implements AskForLeaveServic } } }else { - List> afterScheduleList = scheduleResult.stream().filter(e-> DateUtil.getTime(Utils.getjssjTime(e,analysisDate)).compareTo(DateUtil.getTime(finalFgsjd))>=0 && classSegmens.contains(e.get("bdlx"))).collect(Collectors.toList()); + List> afterScheduleList = scheduleResult.stream().filter(e-> DateUtil.getTime(Utils.getjssjTime(e,analysisDate)).compareTo(DateUtil.getTime(finalFgsjd))>0 && classSegmens.contains(e.get("bdlx"))).collect(Collectors.toList()); for (int i=0;i> getSonItemsWhenHalfDay(Map param) { + if (param.get("askForLeaveItem") != null){ + return (List>)commandExecutor.execute(new GetAskforleaveSonItemsWhenHalfDay(param)).get("itemList"); + }else if (param.get("evectionItem") != null){ + return (List>)commandExecutor.execute(new GetEvectionSonItemsWhenHalfDay(param)).get("itemList"); + } + return Lists.newArrayList(); + } } 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 2ae7e62..ca409b4 100644 --- a/src/com/engine/jucailinkq/attendance/attendanceanalysis/service/impl/ShiftServiceImpl.java +++ b/src/com/engine/jucailinkq/attendance/attendanceanalysis/service/impl/ShiftServiceImpl.java @@ -283,6 +283,7 @@ public class ShiftServiceImpl extends Service implements ShiftService { clockInTimeDataParam.put("askForLeaveAndEvctionSchedule",askForLeaveAndEvctionSchedule); List clockInTimeData = utilService.getClockInPointCmd(clockInTimeDataParam); + clockInDataMatchInfo.put("oldclockInTimeData",clockInTimeData); if(clockInTimeData != null && clockInTimeData.size() > 0) { clockInTimeData = clockInTimeData.stream().filter(ClockPointDTO::isRecord).collect(Collectors.toList()); } diff --git a/src/com/engine/jucailinkq/attendance/attendanceanalysis/web/AttendanceanalysisAction.java b/src/com/engine/jucailinkq/attendance/attendanceanalysis/web/AttendanceanalysisAction.java index 9f3f1ab..c3e27c2 100644 --- a/src/com/engine/jucailinkq/attendance/attendanceanalysis/web/AttendanceanalysisAction.java +++ b/src/com/engine/jucailinkq/attendance/attendanceanalysis/web/AttendanceanalysisAction.java @@ -44,11 +44,11 @@ public class AttendanceanalysisAction { public String getSchedulingData(@Context HttpServletRequest request, @Context HttpServletResponse response) { try { log.info("********AttendanceanalysisAction start********"); - Map paramMap = ParamUtil.request2Map(request); - //Map paramMap = Maps.newHashMap(); -// paramMap.put("startDate","2024-09-20"); -// paramMap.put("endDate","2024-09-20"); -// paramMap.put("userIds","25"); + // Map paramMap = ParamUtil.request2Map(request); + Map paramMap = Maps.newHashMap(); + paramMap.put("startDate","2024-07-22"); + paramMap.put("endDate","2024-07-22"); + paramMap.put("userIds","31"); String startDate = Util.null2String(paramMap.get("startDate")); String startBeforeDate = DateUtil.beforeDay(startDate,2); diff --git a/src/com/engine/jucailinkq/attendance/attendanceanalysis/wrapper/UpdateAttendanceResultWrapper.java b/src/com/engine/jucailinkq/attendance/attendanceanalysis/wrapper/UpdateAttendanceResultWrapper.java index 1731a32..78c0b79 100644 --- a/src/com/engine/jucailinkq/attendance/attendanceanalysis/wrapper/UpdateAttendanceResultWrapper.java +++ b/src/com/engine/jucailinkq/attendance/attendanceanalysis/wrapper/UpdateAttendanceResultWrapper.java @@ -263,10 +263,23 @@ public class UpdateAttendanceResultWrapper extends Service { Map handleMap = askForLeaveService.askForLeaveByHalfDay(param); itemduration = Double.valueOf(handleMap.get("itemduration").toString()); abnormalClockInList = (List>)handleMap.get("abnormalClockInList"); - offsetAskForLeaveAnomaly.addAll((List>)handleMap.get("offsetAskForLeaveAnomaly")); + List> halfoffsetAskForLeaveAnomaly = (List>)handleMap.get("offsetAskForLeaveAnomaly"); + offsetAskForLeaveAnomaly.addAll(halfoffsetAskForLeaveAnomaly); resultMap.put("itemduration",itemduration); - askForLeaveToOffsetAbnomaly.put(askForLeaveList.get(i),(List>)handleMap.get("offsetAskForLeaveAnomaly")); + askForLeaveToOffsetAbnomaly.put(askForLeaveList.get(i),halfoffsetAskForLeaveAnomaly); resultMap.put("item",askForLeaveList.get(i).get("jqlx")); + if (sffzcx.equals(CheckBoxEnum.CHECKED.getKey())){ + //拆分半天假 + if (halfoffsetAskForLeaveAnomaly.size() > 0){ + param.put("halfoffsetAskForLeaveAnomaly",halfoffsetAskForLeaveAnomaly); + List> itemList = askForLeaveService.getSonItemsWhenHalfDay(param); + if (itemList.size() > 0){ + resultList.addAll(itemList); + } + }else { + resultList.add(resultMap); + } + } }else if (!"".equals(qjsc) || (CheckBoxEnum.CHECKED.getKey().equals(btj) && (btgz.equals(HalfDayRuleREnum.HALF_TOTAL_DURATION.getKey()) || btgz.equals(HalfDayRuleREnum.HALF_RATED_DURATION.getKey())))){ if (CheckBoxEnum.CHECKED.getKey().equals(btj)){ if (btgz.equals(HalfDayRuleREnum.HALF_TOTAL_DURATION.getKey())){ @@ -446,10 +459,23 @@ public class UpdateAttendanceResultWrapper extends Service { Map handleMap = evectionService.evectionByHalfDay(param); itemduration = Double.valueOf(handleMap.get("itemduration").toString()); abnormalClockInList = (List>)handleMap.get("abnormalClockInList"); - offsetEvectionAnomaly.addAll((List>)handleMap.get("offsetEvectionAnomaly")); + List> halfoffsetEvectionAnomaly = (List>)handleMap.get("offsetEvectionAnomaly"); + offsetEvectionAnomaly.addAll(halfoffsetEvectionAnomaly); resultMap.put("itemduration",itemduration); - evectionToOffsetAbnomaly.put(evectionList.get(i),(List>)handleMap.get("offsetEvectionAnomaly")); + evectionToOffsetAbnomaly.put(evectionList.get(i),halfoffsetEvectionAnomaly); resultMap.put("item",evectionList.get(i).get("cclx")); + if (sffzcx.equals(CheckBoxEnum.CHECKED.getKey())){ + //拆分出差 + if (halfoffsetEvectionAnomaly.size() > 0){ + param.put("halfoffsetEvectionAnomaly",halfoffsetEvectionAnomaly); + List> itemList = askForLeaveService.getSonItemsWhenHalfDay(param); + if (itemList.size() > 0){ + resultList.addAll(itemList); + } + }else { + resultList.add(resultMap); + } + } }else if (!"".equals(ccsc) || (CheckBoxEnum.CHECKED.getKey().equals(btj) && (btgz.equals(HalfDayRuleREnum.HALF_TOTAL_DURATION.getKey()) || btgz.equals(HalfDayRuleREnum.HALF_RATED_DURATION.getKey())))){ //时长出差 itemduration = Utils.getItemduration(hsl,hsdw,ccscMinute,AccountingUnitEnum.MINUTES,Double.valueOf(scheduleResult.get(0).get("edsc").toString())); diff --git a/src/com/engine/jucailinkq/attendance/attendanceplan/cmd/GetAttendanceItemsByPersonDataCmd.java b/src/com/engine/jucailinkq/attendance/attendanceplan/cmd/GetAttendanceItemsByPersonDataCmd.java index d5a2838..f64e767 100644 --- a/src/com/engine/jucailinkq/attendance/attendanceplan/cmd/GetAttendanceItemsByPersonDataCmd.java +++ b/src/com/engine/jucailinkq/attendance/attendanceplan/cmd/GetAttendanceItemsByPersonDataCmd.java @@ -4,9 +4,12 @@ import com.engine.jucailinkq.attendance.component.persongroup.commonutil.Persong import com.engine.jucailinkq.attendance.enums.CheckBoxEnum; 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; +import com.google.common.collect.Lists; import com.google.common.collect.Maps; import com.google.common.collect.Sets; import lombok.extern.slf4j.Slf4j; @@ -65,8 +68,14 @@ public class GetAttendanceItemsByPersonDataCmd extends AbstractCommonCommand petDepart = ExtensionClassHolder.getPetDepartMentThreadLocal(); + if (petDepart != null){ + pdeptids = petDepart.get(deptid); + } + if (pdeptids == null || pdeptids.equals("")){ + pdeptids = new DepartmentComInfo().getAllParentDepartId(Util.null2String(departMentMap.get("departmentid")), pdeptids); + pdeptids = deptid + pdeptids; + } for (Map departmentOrganization :departmentOrganizationList){ String dx = Util.null2String(departmentOrganization.get("dx")); @@ -92,12 +101,20 @@ public class GetAttendanceItemsByPersonDataCmd extends AbstractCommonCommand personGroupIds = personGroupOrganizationList.stream().map(e -> Util.null2String(e.get("dx")).split("-")[0]).collect(Collectors.toSet()); - sql = "select mainid,empid,filters,sqltj,bdate,edate from uf_ryqz_dt1 where mainid in ("+String.join(",",personGroupIds)+")"; - - List> personGroupData = DbTools.getSqlToList(sql); - Set personnelGroupIds = PersongroupCommonUtil.getPersonnelGroupingByPerson(personGroupData,resourceId,startDate); - + Map>> personBelongGroup = ExtensionClassHolder.getPersonBelongGroupThreadLocal(); + Set personnelGroupIds = null; + if (personBelongGroup == null){ + Set personGroupIds = personGroupOrganizationList.stream().map(e -> Util.null2String(e.get("dx")).split("-")[0]).collect(Collectors.toSet()); + sql = "select mainid,empid,filters,sqltj,bdate,edate from uf_ryqz_dt1 where mainid in ("+String.join(",",personGroupIds)+")"; + List> personGroupData = DbTools.getSqlToList(sql); + personnelGroupIds = PersongroupCommonUtil.getPersonnelGroupingByPerson(personGroupData,resourceId,startDate); + }else { + List> personnelGroups = personBelongGroup.get(resourceId) == null? Lists.newArrayList():personBelongGroup.get(resourceId); + personnelGroups = personnelGroups.stream().filter(e->(Util.null2String(e.get("bdate")).equals("") || DateUtil.getTime(e.get("bdate").toString()).compareTo(DateUtil.getTime(startDate))<=0) && + (Util.null2String(e.get("edate")).equals("") || DateUtil.getTime(e.get("edate").toString()).compareTo(DateUtil.getTime(startDate))>=0)).collect(Collectors.toList()); + + personnelGroupIds = personnelGroups.stream().map(e->e.get("mainid").toString()).collect(Collectors.toSet()); + } for (Map personGroupOrganization :personGroupOrganizationList){ String personnelGroupId = Util.null2String(personGroupOrganization.get("dx")).split("-")[0]; if (personnelGroupIds.contains(personnelGroupId)){ @@ -124,7 +141,6 @@ public class GetAttendanceItemsByPersonDataCmd extends AbstractCommonCommand petDepart = ExtensionClassHolder.getPetDepartMentThreadLocal(); + if (petDepart != null){ + pdeptids = petDepart.get(deptid); + } + if (pdeptids == null || pdeptids.equals("")){ + pdeptids = new DepartmentComInfo().getAllParentDepartId(Util.null2String(departMentMap.get("departmentid")), pdeptids); + pdeptids = deptid + pdeptids; + } log.debug("pdeptids : [{}]",pdeptids); for (Map departmentOrganization :departmentOrganizationList){ String dx = Util.null2String(departmentOrganization.get("dx")); @@ -90,11 +98,21 @@ public class GetWorkHoursItemByPersonCmd extends AbstractCommonCommand personGroupIds = personGroupOrganizationList.stream().map(e -> Util.null2String(e.get("dx")).split("-")[0]).collect(Collectors.toSet()); - sql = "select mainid,empid,filters,bdate,edate,sqltj from uf_ryqz_dt1 where mainid in ("+String.join(",",personGroupIds)+")"; - log.debug("query personGroupData : {}",sql); - List> personGroupData = DbTools.getSqlToList(sql); - Set personnelGroupIds = PersongroupCommonUtil.getPersonnelGroupingByPerson(personGroupData,resourceId,startDate); + Map>> personBelongGroup = ExtensionClassHolder.getPersonBelongGroupThreadLocal(); + Set personnelGroupIds = null; + if (personBelongGroup == null){ + Set personGroupIds = personGroupOrganizationList.stream().map(e -> Util.null2String(e.get("dx")).split("-")[0]).collect(Collectors.toSet()); + sql = "select mainid,empid,filters,bdate,edate,sqltj from uf_ryqz_dt1 where mainid in ("+String.join(",",personGroupIds)+")"; + log.debug("query personGroupData : {}",sql); + List> personGroupData = DbTools.getSqlToList(sql); + personnelGroupIds = PersongroupCommonUtil.getPersonnelGroupingByPerson(personGroupData,resourceId,startDate); + }else { + List> personnelGroups = personBelongGroup.get(resourceId) == null? Lists.newArrayList():personBelongGroup.get(resourceId); + personnelGroups = personnelGroups.stream().filter(e->(Util.null2String(e.get("bdate")).equals("") || DateUtil.getTime(e.get("bdate").toString()).compareTo(DateUtil.getTime(startDate))<=0) && + (Util.null2String(e.get("edate")).equals("") || DateUtil.getTime(e.get("edate").toString()).compareTo(DateUtil.getTime(startDate))>=0)).collect(Collectors.toList()); + + personnelGroupIds = personnelGroups.stream().map(e->e.get("mainid").toString()).collect(Collectors.toSet()); + } log.debug("personnelGroupIds : {}",personnelGroupIds); for (Map personGroupOrganization :personGroupOrganizationList){ String personnelGroupId = Util.null2String(personGroupOrganization.get("dx")).split("-")[0]; diff --git a/src/com/engine/jucailinkq/attendance/component/calendarscheduling/service/impl/WorkRulesServiceImpl.java b/src/com/engine/jucailinkq/attendance/component/calendarscheduling/service/impl/WorkRulesServiceImpl.java index 05ac388..d11d71a 100644 --- a/src/com/engine/jucailinkq/attendance/component/calendarscheduling/service/impl/WorkRulesServiceImpl.java +++ b/src/com/engine/jucailinkq/attendance/component/calendarscheduling/service/impl/WorkRulesServiceImpl.java @@ -12,10 +12,7 @@ import com.engine.jucailinkq.attendance.enums.CheckBoxEnum; import com.engine.jucailinkq.attendance.enums.PersonGroupListTypeEnum; import com.engine.jucailinkq.attendance.enums.RegularScheduleTypeEnum; import com.engine.jucailinkq.common.exception.AttendanceRunTimeException; -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.impl.Service; import com.google.common.collect.Lists; import com.google.common.collect.Maps; @@ -48,6 +45,8 @@ public class WorkRulesServiceImpl extends Service implements WorkRulesService { log.debug("getWorkRulesList : [{}]",resourceIds); String modeId = Utils.getFormmodeIdMap().get("uf_jcl_kq_bcxx"); Set bcids = Sets.newHashSet(); + ExtensionClassHolder.setPersonBelongGroupThreadLocal(PersongroupCommonUtil.getAllpersonBelongGroup()); + CommonUtil.initPersonInfromation(); for (String resourceId :resourceIds.split(",")){ bcids.addAll(CommonUtil.getAllDataIds(resourceId,modeId,DateUtil.getCurrentDate())); } @@ -259,6 +258,9 @@ public class WorkRulesServiceImpl extends Service implements WorkRulesService { param.put("pageSize","31"); param.put("recurrence","1"); + //初始化人员分组数据 + ExtensionClassHolder.setPersonBelongGroupThreadLocal(PersongroupCommonUtil.getAllpersonBelongGroup()); + CommonUtil.initPersonInfromation(); List> datas = Lists.newArrayList(); for (Map map:dataTable){ String id = map.get("id").toString(); @@ -422,6 +424,8 @@ public class WorkRulesServiceImpl extends Service implements WorkRulesService { @Override public Map saveCalendarWork(Map params) { + ExtensionClassHolder.setPersonBelongGroupThreadLocal(PersongroupCommonUtil.getAllpersonBelongGroup()); + CommonUtil.initPersonInfromation(); String bcxxId = Util.null2String(params.get("bcxx")); String resourceIds = Util.null2String(params.get("resourceIds")); String dateArrs = Util.null2String(params.get("date")); diff --git a/src/com/engine/jucailinkq/attendance/component/persongroup/cmd/GetDatatableRecurrenceCmd.java b/src/com/engine/jucailinkq/attendance/component/persongroup/cmd/GetDatatableRecurrenceCmd.java index 07137c0..47726a9 100644 --- a/src/com/engine/jucailinkq/attendance/component/persongroup/cmd/GetDatatableRecurrenceCmd.java +++ b/src/com/engine/jucailinkq/attendance/component/persongroup/cmd/GetDatatableRecurrenceCmd.java @@ -9,6 +9,7 @@ import com.engine.common.entity.BizLogContext; import com.engine.jucailinkq.common.util.DateUtil; import com.engine.jucailinkq.common.util.DbTools; import com.engine.core.interceptor.CommandContext; +import com.engine.jucailinkq.common.util.ExtensionClassHolder; import com.engine.jucailinkq.common.util.Utils; import com.google.common.collect.Lists; @@ -76,11 +77,22 @@ public class GetDatatableRecurrenceCmd extends AbstractCommonCommand> personGroupList = Lists.newArrayList(); + Map>> personBelongGroup = ExtensionClassHolder.getPersonBelongGroupThreadLocal(); + + //查人员分组 String currentTime = DateUtil.getCurrentDate(); - String queryryfz = "select a.mainid,a.empid,a.filters,a.bdate,a.edate,a.sqltj from uf_ryqz_dt1 a,(select pbdxryfz from uf_pbjg where dxlx=1 group by pbdxryfz) b where a.mainid =b.pbdxryfz and a.bdate <= '"+currentTime+"'"; - List> personGroupData = DbTools.getSqlToList(queryryfz); - List> personnelGroups = PersongroupCommonUtil.getPersonnelGroupByPerson(personGroupData,pbdx,null); + List> personnelGroups = null; + if (personBelongGroup == null){ + String queryryfz = "select a.mainid,a.empid,a.filters,a.bdate,a.edate,a.sqltj from uf_ryqz_dt1 a,(select pbdxryfz from uf_pbjg where dxlx=1 group by pbdxryfz) b where a.mainid =b.pbdxryfz and a.bdate <= '"+currentTime+"'"; + List> personGroupData = DbTools.getSqlToList(queryryfz); + personnelGroups = PersongroupCommonUtil.getPersonnelGroupByPerson(personGroupData,pbdx,null); + }else { + personnelGroups = personBelongGroup.get(pbdx) == null?Lists.newArrayList():personBelongGroup.get(pbdx); + personnelGroups = personnelGroups.stream().filter(e->(Util.null2String(e.get("bdate")).equals("") || DateUtil.getTime(e.get("bdate").toString()).compareTo(DateUtil.getTime(currentTime))<=0) && + (Util.null2String(e.get("edate")).equals("") || DateUtil.getTime(e.get("edate").toString()).compareTo(DateUtil.getTime(currentTime))>=0)).collect(Collectors.toList()); + } + 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()); querySqlbyPbdx = sql +conditions + " and pbdxryfz in ("; @@ -111,11 +123,21 @@ public class GetDatatableRecurrenceCmd extends AbstractCommonCommand> departmentList = Lists.newArrayList(); //查询部门数据 - String queryDepartmentidAndSubcompanyid = "select id,departmentid,subcompanyid1 from hrmresource where id =?"; - Map dataMap = DbTools.getSqlToMap(queryDepartmentidAndSubcompanyid,pbdx); + Map> personInformationThreadLocal = ExtensionClassHolder.getPersonInformationThreadLocal(); String pdeptids = ""; - pdeptids = new DepartmentComInfo().getAllParentDepartId(Util.null2String(dataMap.get("departmentid")), pdeptids); - pdeptids = Util.null2String(dataMap.get("departmentid")) + pdeptids; + String subcompanyid1=""; + if (personInformationThreadLocal == null){ + String queryDepartmentidAndSubcompanyid = "select id,departmentid,subcompanyid1 from hrmresource where id =?"; + Map dataMap = DbTools.getSqlToMap(queryDepartmentidAndSubcompanyid,pbdx); + pdeptids = ""; + pdeptids = new DepartmentComInfo().getAllParentDepartId(Util.null2String(dataMap.get("departmentid")), pdeptids); + pdeptids = Util.null2String(dataMap.get("departmentid")) + pdeptids; + subcompanyid1 = dataMap.get("subcompanyid1").toString(); + }else { + Map personInformationMap = personInformationThreadLocal.get(pbdx); + pdeptids = Util.null2String(personInformationMap.get("pdeptids")); + subcompanyid1 = Util.null2String(personInformationMap.get("subcompanyid1")); + } log.debug("pdeptids : [{}]",pdeptids); querySqlbyPbdx = sql + conditions + " and pbdxbm in ("; log.debug("递归查询人员-部门节点,sql:{},pdeptids:{}",querySqlbyPbdx,pdeptids); @@ -128,10 +150,10 @@ public class GetDatatableRecurrenceCmd extends AbstractCommonCommand> subCompanyList = Lists.newArrayList(); //查询人员分部 querySqlbyPbdx = sql + conditions + " and pbdxfb = ? order by bcrq"; - log.debug("递归查询人员-分部节点,sql:{},pdeptids:{}",querySqlbyPbdx,dataMap.get("subcompanyid1")); + log.debug("递归查询人员-分部节点,sql:{},pdeptids:{}",querySqlbyPbdx,subcompanyid1); param.clear(); param.addAll(Dateparam); - param.add(dataMap.get("subcompanyid1")); + param.add(subcompanyid1); subCompanyList = DbTools.getSqlToList(querySqlbyPbdx,param.toArray()); //Map>> subCompanyCollect = subCompanyList.stream().collect(Collectors.groupingBy(e->e.get("pbtj").toString())); 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 ac36b54..26f003c 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,72 @@ public class PersongroupCommonUtil { return userIds; } + /** + * 获得人员对应的人员分组 + * @return + */ + public static Map>> getAllpersonBelongGroup(){ + String sql = "select a.list_type,a.userfor,b.mainid,b.empid,b.filters,b.bdate,b.edate,b.sqltj from uf_ryqz a left join uf_ryqz_dt1 b on a.id=b.mainid"; + Map>> resultMap = Maps.newHashMap(); + List> personGroupList = DbTools.getSqlToList(sql); + + for (Map personGroup:personGroupList){ + + String empid = Util.null2String(personGroup.get("empid")); + String filters = Util.null2String(personGroup.get("filters")); + String list_type = Util.null2String(personGroup.get("list_type")); + String sqltj = Util.null2String(personGroup.get("sqltj")); + + if (PersonGroupListTypeEnum.PERSON.getKey().equals(list_type) && !"".equals(empid)){ + //人员清单 + addpersonBelongGroup(resultMap,empid,personGroup,null); + + }else if (PersonGroupListTypeEnum.CONDITION.getKey().equals(list_type) && !"".equals(filters)){ + filters = filters.replace("and","and"); + filters = filters.replace("or","or"); + //条件清单 + 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")); + String seclevel = Util.null2String(dataMap.get("seclevel")); + addpersonBelongGroup(resultMap,hrmId,personGroup,seclevel); + + } + }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")); + addpersonBelongGroup(resultMap,hrmId,personGroup,null); + } + } + + } + return resultMap; + } + public static void addpersonBelongGroup(Map>> resultMap,String empid,Map personGroup,String seclevel){ + List> personGroups = resultMap.get(empid); + if (personGroups == null){ + personGroups = Lists.newArrayList(); + resultMap.put(empid,personGroups); + } + Map map = Maps.newHashMap(); + map.put("userfor",personGroup.get("userfor")); + map.put("mainid",personGroup.get("mainid")); + map.put("bdate",personGroup.get("bdate")); + map.put("edate",personGroup.get("edate")); + map.put("seclevel",seclevel); + personGroups.add(map); + } + /** * 获得人员分组集合 * @return 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 55da3e4..65c8b6b 100644 --- a/src/com/engine/jucailinkq/attendance/vacation/job/holidaygeneration/HolidayGenerationJob.java +++ b/src/com/engine/jucailinkq/attendance/vacation/job/holidaygeneration/HolidayGenerationJob.java @@ -3,6 +3,7 @@ package com.engine.jucailinkq.attendance.vacation.job.holidaygeneration; import com.engine.jucailinkq.attendance.vacation.service.VocationService; import com.engine.jucailinkq.attendance.vacation.service.impl.VocationServiceImpl; import com.engine.common.util.ServiceUtil; +import com.engine.jucailinkq.common.util.CommonUtil; import com.engine.jucailinkq.common.util.Utils; import com.google.common.collect.Maps; import lombok.extern.slf4j.Slf4j; @@ -35,6 +36,8 @@ public class HolidayGenerationJob extends BaseCronJob { params.put("modeId",modeId); params.put("releaseDate",executeDate); params.put("cover",cover); + CommonUtil.initExtensionClassHolder(); + basicsetService.generateVocation(params); basicsetService.handleOverdueVocation(params); log.info("**********HolidayGenerationJob end ************"); diff --git a/src/com/engine/jucailinkq/attendance/workflow/action/OvertimePlanCheckAction.java b/src/com/engine/jucailinkq/attendance/workflow/action/OvertimePlanCheckAction.java index 8cc484a..744dac8 100644 --- a/src/com/engine/jucailinkq/attendance/workflow/action/OvertimePlanCheckAction.java +++ b/src/com/engine/jucailinkq/attendance/workflow/action/OvertimePlanCheckAction.java @@ -2,14 +2,12 @@ package com.engine.jucailinkq.attendance.workflow.action; import com.engine.jucailinkq.attendance.attendanceanalysis.service.UtilService; import com.engine.jucailinkq.attendance.attendanceanalysis.service.impl.UtilServiceImpl; +import com.engine.jucailinkq.attendance.component.persongroup.commonutil.PersongroupCommonUtil; import com.engine.jucailinkq.attendance.enums.*; import com.engine.jucailinkq.attendance.workflow.service.MakeUpClockInService; import com.engine.jucailinkq.attendance.workflow.service.impl.MakeUpClockInServiceImpl; -import com.engine.jucailinkq.common.util.CommonUtil; -import com.engine.jucailinkq.common.util.DateUtil; +import com.engine.jucailinkq.common.util.*; import com.engine.common.util.ServiceUtil; -import com.engine.jucailinkq.common.util.DbTools; -import com.engine.jucailinkq.common.util.Utils; import com.google.common.collect.Maps; import lombok.extern.slf4j.Slf4j; import weaver.general.TimeUtil; @@ -62,6 +60,7 @@ public class OvertimePlanCheckAction implements Action { //明细数据按照人员分组 Map>> detailGroupMap = detailTableData.stream().collect(Collectors.groupingBy(e->Util.null2String(e.get("jbry")))); List errorMessage = new ArrayList<>(); + ExtensionClassHolder.setPersonBelongGroupThreadLocal(PersongroupCommonUtil.getAllpersonBelongGroup()); for (Map.Entry>> tableEntry :detailGroupMap.entrySet()){ List> detailGroupByUserList = tableEntry.getValue(); Map params = Maps.newHashMap(); diff --git a/src/com/engine/jucailinkq/attendance/workflow/service/impl/AskForLeaveServiceImpl.java b/src/com/engine/jucailinkq/attendance/workflow/service/impl/AskForLeaveServiceImpl.java index b775b5d..5ea7a1e 100644 --- a/src/com/engine/jucailinkq/attendance/workflow/service/impl/AskForLeaveServiceImpl.java +++ b/src/com/engine/jucailinkq/attendance/workflow/service/impl/AskForLeaveServiceImpl.java @@ -1,5 +1,6 @@ package com.engine.jucailinkq.attendance.workflow.service.impl; +import com.engine.jucailinkq.attendance.component.persongroup.commonutil.PersongroupCommonUtil; import com.engine.jucailinkq.attendance.component.persongroup.service.SchedulingResultsService; import com.engine.jucailinkq.attendance.component.persongroup.service.impl.SchedulingResultsServiceImpl; import com.engine.jucailinkq.attendance.enums.AccountingUnitEnum; @@ -14,10 +15,7 @@ import com.engine.jucailinkq.attendance.workflow.service.MakeUpClockInService; import com.engine.jucailinkq.common.exception.AttendanceRunTimeException; import com.engine.common.util.*; import com.engine.core.impl.Service; -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.google.common.collect.Lists; import com.google.common.collect.Maps; import lombok.extern.slf4j.Slf4j; @@ -947,6 +945,7 @@ public class AskForLeaveServiceImpl extends Service implements AskForLeaveServic params.put("current", "1"); params.put("pageSize", "999"); params.put("recurrence", "1"); + ExtensionClassHolder.setPersonBelongGroupThreadLocal(PersongroupCommonUtil.getAllpersonBelongGroup()); for (String empId : leaveEmpIdList) { params.put("pbdx", empId); Map schedulingResultsMap = schedulingResultsService.queryDataTableActualUse(params); diff --git a/src/com/engine/jucailinkq/attendance/workflow/service/impl/BusinessTripsApplyServiceImpl.java b/src/com/engine/jucailinkq/attendance/workflow/service/impl/BusinessTripsApplyServiceImpl.java index 2498ef3..1913831 100644 --- a/src/com/engine/jucailinkq/attendance/workflow/service/impl/BusinessTripsApplyServiceImpl.java +++ b/src/com/engine/jucailinkq/attendance/workflow/service/impl/BusinessTripsApplyServiceImpl.java @@ -1,6 +1,7 @@ package com.engine.jucailinkq.attendance.workflow.service.impl; import com.engine.common.util.ServiceUtil; +import com.engine.jucailinkq.attendance.component.persongroup.commonutil.PersongroupCommonUtil; import com.engine.jucailinkq.attendance.component.persongroup.service.SchedulingResultsService; import com.engine.jucailinkq.attendance.component.persongroup.service.impl.SchedulingResultsServiceImpl; import com.engine.jucailinkq.attendance.enums.AccountingUnitEnum; @@ -11,11 +12,8 @@ import com.engine.jucailinkq.attendance.workflow.cmd.GetRestDayIntervalCmd; import com.engine.jucailinkq.attendance.workflow.enums.AskAndEvctionWayEnum; import com.engine.jucailinkq.attendance.workflow.service.BusinessTripsApplyService; import com.engine.jucailinkq.attendance.workflow.service.MakeUpClockInService; -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.*; import com.engine.core.impl.Service; -import com.engine.jucailinkq.common.util.Utils; import lombok.extern.slf4j.Slf4j; import weaver.general.Util; @@ -234,6 +232,8 @@ public class BusinessTripsApplyServiceImpl extends Service implements BusinessTr params.put("current", "1"); params.put("pageSize", "999"); params.put("recurrence", "1"); + ExtensionClassHolder.setPersonBelongGroupThreadLocal(PersongroupCommonUtil.getAllpersonBelongGroup()); + for (String empId : empIdList) { params.put("pbdx", empId); Map schedulingResultsMap = schedulingResultsService.queryDataTableActualUse(params); diff --git a/src/com/engine/jucailinkq/common/util/CommonUtil.java b/src/com/engine/jucailinkq/common/util/CommonUtil.java index c5564af..0dc9a31 100644 --- a/src/com/engine/jucailinkq/common/util/CommonUtil.java +++ b/src/com/engine/jucailinkq/common/util/CommonUtil.java @@ -141,11 +141,22 @@ public class CommonUtil { } } if (personGroupOrganizationList != null && dataIds.size() ==0){ - Set personGroupIds = personGroupOrganizationList.stream().map(e -> Util.null2String(e.get("dx")).split("-")[0]).collect(Collectors.toSet()); - sql = "select mainid,empid,filters,bdate,edate,sqltj from uf_ryqz_dt1 where mainid in ("+String.join(",",personGroupIds)+")"; - log.debug("query personGroupData : {}",sql); - List> personGroupData = DbTools.getSqlToList(sql); - Set personnelGroupIds = PersongroupCommonUtil.getPersonnelGroupingByPerson(personGroupData,resourceId,date); + Map>> personBelongGroup = ExtensionClassHolder.getPersonBelongGroupThreadLocal(); + Set personnelGroupIds = null; + if (personBelongGroup == null){ + Set personGroupIds = personGroupOrganizationList.stream().map(e -> Util.null2String(e.get("dx")).split("-")[0]).collect(Collectors.toSet()); + sql = "select mainid,empid,filters,bdate,edate,sqltj from uf_ryqz_dt1 where mainid in ("+String.join(",",personGroupIds)+")"; + log.debug("query personGroupData : {}",sql); + List> personGroupData = DbTools.getSqlToList(sql); + personnelGroupIds = PersongroupCommonUtil.getPersonnelGroupingByPerson(personGroupData,resourceId,date); + }else { + List> personnelGroups = personBelongGroup.get(resourceId) == null? Lists.newArrayList():personBelongGroup.get(resourceId); + personnelGroups = personnelGroups.stream().filter(e->(Util.null2String(e.get("bdate")).equals("") || DateUtil.getTime(e.get("bdate").toString()).compareTo(DateUtil.getTime(date))<=0) && + (Util.null2String(e.get("edate")).equals("") || DateUtil.getTime(e.get("edate").toString()).compareTo(DateUtil.getTime(date))>=0)).collect(Collectors.toList()); + + personnelGroupIds = personnelGroups.stream().map(e->e.get("mainid").toString()).collect(Collectors.toSet()); + } + log.debug("personnelGroupIds : {}",personnelGroupIds); for (Map personGroupOrganization :personGroupOrganizationList){ String personnelGroupId = Util.null2String(personGroupOrganization.get("dx")).split("-")[0]; @@ -158,8 +169,14 @@ public class CommonUtil { if (departmentOrganizationList != null && dataIds.size() ==0){ String deptid = Util.null2String(departMentMap.get("departmentid")); String pdeptids = ""; - pdeptids = new DepartmentComInfo().getAllParentDepartId(Util.null2String(departMentMap.get("departmentid")), pdeptids); - pdeptids = deptid + pdeptids; + Map petDepart = ExtensionClassHolder.getPetDepartMentThreadLocal(); + if (petDepart != null){ + pdeptids = petDepart.get(deptid); + } + if (pdeptids == null || pdeptids.equals("")){ + pdeptids = new DepartmentComInfo().getAllParentDepartId(Util.null2String(departMentMap.get("departmentid")), pdeptids); + pdeptids = deptid + pdeptids; + } log.debug("pdeptids : [{}]",pdeptids); for (Map departmentOrganization :departmentOrganizationList){ String dx = Util.null2String(departmentOrganization.get("dx")); @@ -225,11 +242,22 @@ public class CommonUtil { } } if (personGroupOrganizationList != null){ - Set personGroupIds = personGroupOrganizationList.stream().map(e -> Util.null2String(e.get("dx")).split("-")[0]).collect(Collectors.toSet()); - sql = "select mainid,empid,filters,bdate,edate,sqltj from uf_ryqz_dt1 where mainid in ("+String.join(",",personGroupIds)+")"; - log.debug("query personGroupData : {}",sql); - List> personGroupData = DbTools.getSqlToList(sql); - Set personnelGroupIds = PersongroupCommonUtil.getPersonnelGroupingByPerson(personGroupData,resourceId,date); + Map>> personBelongGroup = ExtensionClassHolder.getPersonBelongGroupThreadLocal(); + Set personnelGroupIds = null; + if (personBelongGroup == null){ + Set personGroupIds = personGroupOrganizationList.stream().map(e -> Util.null2String(e.get("dx")).split("-")[0]).collect(Collectors.toSet()); + sql = "select mainid,empid,filters,bdate,edate,sqltj from uf_ryqz_dt1 where mainid in ("+String.join(",",personGroupIds)+")"; + log.debug("query personGroupData : {}",sql); + List> personGroupData = DbTools.getSqlToList(sql); + personnelGroupIds = PersongroupCommonUtil.getPersonnelGroupingByPerson(personGroupData,resourceId,date); + }else { + List> personnelGroups = personBelongGroup.get(resourceId) == null? Lists.newArrayList():personBelongGroup.get(resourceId); + personnelGroups = personnelGroups.stream().filter(e->(Util.null2String(e.get("bdate")).equals("") || DateUtil.getTime(e.get("bdate").toString()).compareTo(DateUtil.getTime(date))<=0) && + (Util.null2String(e.get("edate")).equals("") || DateUtil.getTime(e.get("edate").toString()).compareTo(DateUtil.getTime(date))>=0)).collect(Collectors.toList()); + + personnelGroupIds = personnelGroups.stream().map(e->e.get("mainid").toString()).collect(Collectors.toSet()); + } + log.debug("personnelGroupIds : {}",personnelGroupIds); for (Map personGroupOrganization :personGroupOrganizationList){ String personnelGroupId = Util.null2String(personGroupOrganization.get("dx")).split("-")[0]; @@ -242,8 +270,15 @@ public class CommonUtil { if (departmentOrganizationList != null){ String deptid = Util.null2String(departMentMap.get("departmentid")); String pdeptids = ""; - pdeptids = new DepartmentComInfo().getAllParentDepartId(Util.null2String(departMentMap.get("departmentid")), pdeptids); - pdeptids = deptid + pdeptids; + Map petDepart = ExtensionClassHolder.getPetDepartMentThreadLocal(); + if (petDepart != null){ + pdeptids = petDepart.get(deptid); + } + if (pdeptids == null || pdeptids.equals("")){ + pdeptids = new DepartmentComInfo().getAllParentDepartId(Util.null2String(departMentMap.get("departmentid")), pdeptids); + pdeptids = deptid + pdeptids; + } + log.debug("pdeptids : [{}]",pdeptids); for (Map departmentOrganization :departmentOrganizationList){ String dx = Util.null2String(departmentOrganization.get("dx")); @@ -807,6 +842,7 @@ public class CommonUtil { adjustClockPointAction.add(action); } ExtensionClassHolder.setAdjustClockPointAction(adjustClockPointAction); + /** * 全局变量设置 */ @@ -814,6 +850,16 @@ public class CommonUtil { Map globalMap = DbTools.getSqlToMapList(sql); ExtensionClassHolder.setGlobalSetMap(globalMap); + /** + * 人员的人员分组集合 + */ + ExtensionClassHolder.setPersonBelongGroupThreadLocal(PersongroupCommonUtil.getAllpersonBelongGroup()); + + /** + * 人员对应人员信息 + */ + initPersonInfromation(); + }catch (Exception e){ log.error("initExtensionClassHolder fail"); throw new AttendanceRunTimeException("初始化扩展类失败"); @@ -821,6 +867,40 @@ public class CommonUtil { } + /** + * 初始化对应人员信息 + */ + public static void initPersonInfromation(){ + /** + * 人员对应人员信息 + */ + try { + String sql = "select id,departmentid,subcompanyid1 from hrmresource"; + List> hrmresourceList = DbTools.getSqlToList(sql); + Map> hrmresourceInformationMap = Maps.newHashMap(); + DepartmentComInfo departmentComInfo = new DepartmentComInfo(); + Map departInfo = Maps.newHashMap(); + for (Map map :hrmresourceList){ + String pdeptids = departInfo.get(Util.null2String(map.get("departmentid"))); + if (pdeptids == null || pdeptids.equals("")){ + pdeptids=""; + pdeptids = departmentComInfo.getAllParentDepartId(Util.null2String(map.get("departmentid")), pdeptids); + pdeptids = Util.null2String(map.get("departmentid")) + pdeptids; + departInfo.put(Util.null2String(map.get("departmentid")),pdeptids); + } + map.put("pdeptids",pdeptids); + hrmresourceInformationMap.put(map.get("id").toString(),map); + } + ExtensionClassHolder.setPersonInformationThreadLocal(hrmresourceInformationMap); + ExtensionClassHolder.setPetDepartMentThreadLocal(departInfo); + + }catch (Exception e){ + log.error("initPersonInfromation fail"); + throw new AttendanceRunTimeException("初始化人员信息失败"); + } + } + + /** * 根据班段类型获得对应的子项目 * @param itemMap diff --git a/src/com/engine/jucailinkq/common/util/ExtensionClassHolder.java b/src/com/engine/jucailinkq/common/util/ExtensionClassHolder.java index 7d8fb61..ccb4a8a 100644 --- a/src/com/engine/jucailinkq/common/util/ExtensionClassHolder.java +++ b/src/com/engine/jucailinkq/common/util/ExtensionClassHolder.java @@ -19,6 +19,22 @@ public class ExtensionClassHolder { */ private static ThreadLocal> globalSetMapThreadLocal = new ThreadLocal<>(); + /** + * 人员对应人员分组 + */ + private static ThreadLocal>>> personBelongGroupThreadLocal = new ThreadLocal<>(); + + /** + * 人员对应人员信息 + */ + private static ThreadLocal>> personInformationThreadLocal = new ThreadLocal<>(); + + /** + * 部门对应上级部门 + */ + private static ThreadLocal> petDepartThreadLocal= new ThreadLocal<>(); + + public static void setAdjustClockPointAction(List adjustClockPointActionList) { adjustClockPointActionThreadLocal.set(adjustClockPointActionList); @@ -35,4 +51,28 @@ public class ExtensionClassHolder { public static Map getGlobalSetMap() { return globalSetMapThreadLocal.get(); } + + public static Map>> getPersonBelongGroupThreadLocal() { + return personBelongGroupThreadLocal.get(); + } + + public static void setPersonBelongGroupThreadLocal(Map>> personBelongGroupMap) { + personBelongGroupThreadLocal.set(personBelongGroupMap); + } + + public static Map> getPersonInformationThreadLocal() { + return personInformationThreadLocal.get(); + } + + public static void setPersonInformationThreadLocal(Map> personInformationThreadLocal) { + ExtensionClassHolder.personInformationThreadLocal.set(personInformationThreadLocal); + } + + public static Map getPetDepartMentThreadLocal() { + return petDepartThreadLocal.get(); + } + + public static void setPetDepartMentThreadLocal(Map petDepartMent) { + ExtensionClassHolder.petDepartThreadLocal.set(petDepartMent); + } } diff --git a/src/com/engine/jucailinkq/common/util/Utils.java b/src/com/engine/jucailinkq/common/util/Utils.java index bb10844..6f09ead 100644 --- a/src/com/engine/jucailinkq/common/util/Utils.java +++ b/src/com/engine/jucailinkq/common/util/Utils.java @@ -746,27 +746,42 @@ public class Utils { * 统计各种类型班段所占时间,除请假和出差外 * @return */ - public static Map getClassSegmentTimeProportion(List> scheduleResult,String analysisDate){ - Map resultMap = Maps.newHashMap(); + public static Map>> getClassSegmentTimeProportion(List> scheduleResult,String analysisDate){ + Map>> resultMap = Maps.newHashMap(); for (Map schedule: scheduleResult){ String bdlx = Util.null2String(schedule.get("bdlx")); - int edfzs = Util.null2String(schedule.get("edfzs")).equals("")?0:Integer.valueOf(Util.null2String(schedule.get("edfzs"))); if (!bdlx.equals(ClassSegmentTypeEnum.ASK_FOR_LEAVE.getKey()) && !bdlx.equals(ClassSegmentTypeEnum.EVECTION.getKey())){ - if (bdlx.equals(ClassSegmentTypeEnum.OVERTIME_PLAN.getKey())){ - String kssj = getkssjTime(schedule,analysisDate); - String jssj = getjssjTime(schedule,analysisDate); - edfzs = DateUtil.getBetWeenMinutes(kssj,jssj); - } if (resultMap.get(bdlx) != null){ - edfzs = edfzs + Integer.valueOf(resultMap.get(bdlx).toString()); + resultMap.get(bdlx).add(schedule); + }else { + List> schedules = Lists.newArrayList(); + schedules.add(schedule); + resultMap.put(bdlx,schedules); } - resultMap.put(bdlx,edfzs); } } return resultMap; } + public static double getItemduration(List> schedules,String sonhsdw,String sonhsl){ + double itemduration = 0; + for (Map schedule:schedules){ + if (sonhsdw.equals(AccountingUnitEnum.MINUTES.getKey())){ + itemduration += Double.valueOf(Util.null2String(schedule.get("edfzs"))); + }else if (sonhsdw.equals(AccountingUnitEnum.DAY.getKey())){ + itemduration += Double.valueOf(Util.null2String(schedule.get("edts"))); + if (schedule.get("bdlx").equals(ClassSegmentTypeEnum.OVERTIME_PLAN.getKey())){ + itemduration+=Utils.getItemduration(Double.valueOf(sonhsl),sonhsdw,Double.valueOf(schedule.get("edxss").toString()), AccountingUnitEnum.HOUR,Double.valueOf(schedule.get("edsc").toString())); + } + }else if (sonhsdw.equals(AccountingUnitEnum.HOUR.getKey())){ + itemduration += Double.valueOf(Util.null2String(schedule.get("edxss"))); + }else if (sonhsdw.equals(AccountingUnitEnum.ONCE.getKey())){ + itemduration=1; + } + } + return itemduration; + } /** * 扣除就餐时间 diff --git a/workflow/request/hrmattendance/HrmjucailCheckAgain_e9.jsp b/workflow/request/hrmattendance/HrmjucailCheckAgain_e9.jsp index 6cde916..24edbe8 100644 --- a/workflow/request/hrmattendance/HrmjucailCheckAgain_e9.jsp +++ b/workflow/request/hrmattendance/HrmjucailCheckAgain_e9.jsp @@ -34,11 +34,11 @@ //新行默认上一行补打卡日期 WfForm.changeSingleField(WfForm.convertFieldNameToId("bdkrq","detail_1")+"_"+index, {value: bdkrq}); //取第一行对应的补打卡类型 - bdklx = mobx.toJS(wfform.getFieldValueObj(WfForm.convertFieldNameToId("bdklx","detail_1")+"_"+(index-1)).specialobj); - if (bdklx !== null){ - //新行默认上一行的补打卡类型 - WfForm.changeSingleField(WfForm.convertFieldNameToId("bdklx","detail_1")+"_"+index, {value:bdklx[0].id,specialobj:[{id:bdklx[0].id,name:bdklx[0].mc}]}); - } + // bdklx = mobx.toJS(wfform.getFieldValueObj(WfForm.convertFieldNameToId("bdklx","detail_1")+"_"+(index-1)).specialobj); + // if (bdklx !== null){ + // //新行默认上一行的补打卡类型 + // WfForm.changeSingleField(WfForm.convertFieldNameToId("bdklx","detail_1")+"_"+index, {value:bdklx[0].id,specialobj:[{id:bdklx[0].id,name:bdklx[0].mc}]}); + // } } WfForm.changeSingleField(WfForm.convertFieldNameToId("bdkr","detail_1")+"_"+index, {value:bdkr[0].id,specialobj:[{id:bdkr[0].id,name:bdkr[0].name}]}); }); diff --git a/workflow/request/hrmattendance/HrmjucailEvection_e9.jsp b/workflow/request/hrmattendance/HrmjucailEvection_e9.jsp index 46495b1..a411b37 100644 --- a/workflow/request/hrmattendance/HrmjucailEvection_e9.jsp +++ b/workflow/request/hrmattendance/HrmjucailEvection_e9.jsp @@ -17,6 +17,7 @@ //出差时间长度不可编辑 WfForm.changeFieldAttr(WfForm.convertFieldNameToId("ccsc"), 1); WfForm.changeFieldAttr(WfForm.convertFieldNameToId("mttsdcc"), 2); + WfForm.changeFieldValue(WfForm.convertFieldNameToId("mttsdcc"),{ value: '0' }); break; case '3'://按时间区间出差 WfForm.changeFieldValue(WfForm.convertFieldNameToId("scdw"),{ value: '1' });//出差时长单位为小时 @@ -53,7 +54,7 @@ */ function adddetail() { //首先进行必填校验,不通过直接退出 - if(!WfForm.verifyFormRequired(false, true)){ return; } + // if(!WfForm.verifyFormRequired(false, true)){ return; } //获取出差时段类型:0:全天;1:指定时间区间;2:半天;3:指定时长长度 let ccsd = WfForm.getFieldValue(WfForm.convertFieldNameToId("ccsd")); //每天同时段出差,1:是,0:否