From 4c91cd0ac8f1cfe6a92ff335f7113a15d4933ec8 Mon Sep 17 00:00:00 2001 From: sy Date: Mon, 12 Aug 2024 15:45:09 +0800 Subject: [PATCH] =?UTF-8?q?=E8=80=83=E5=8B=A4-=E5=8A=A0=E7=8F=AD=E8=AE=A1?= =?UTF-8?q?=E5=88=92=E6=B5=81=E7=A8=8B=EF=BC=8C=E5=8A=A0=E7=8F=AD=E8=AE=A1?= =?UTF-8?q?=E5=88=92=E5=8C=BA=E9=97=B4=E5=85=81=E8=AE=B8=E4=B8=8E=E4=BC=91?= =?UTF-8?q?=E6=81=AF=E7=8F=AD=E6=AC=A1=E5=8C=BA=E9=97=B4=E5=87=BA=E7=8E=B0?= =?UTF-8?q?=E9=87=8D=E5=8F=A0=EF=BC=9B=E4=BF=AE=E5=A4=8D=E8=AF=B7=E5=81=87?= =?UTF-8?q?=E3=80=81=E5=87=BA=E5=B7=AE=E6=98=8E=E7=BB=86=E7=94=9F=E6=88=90?= =?UTF-8?q?bug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/impl/AskForLeaveServiceImpl.java | 2 +- .../impl/BusinessTripsApplyServiceImpl.java | 2 +- .../service/impl/OvertimePlanServiceImpl.java | 40 +++++++++++++++++-- 3 files changed, 39 insertions(+), 5 deletions(-) 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 76fd809..95ba9fe 100644 --- a/src/com/engine/jucailinkq/attendance/workflow/service/impl/AskForLeaveServiceImpl.java +++ b/src/com/engine/jucailinkq/attendance/workflow/service/impl/AskForLeaveServiceImpl.java @@ -228,7 +228,7 @@ public class AskForLeaveServiceImpl extends Service implements AskForLeaveServic //请假人的请假区间内每一天的日期类型信息 Map> restDayInfo = removeNonWorkDayRange ? getRestDayWithEmpId(leaveEmpIdList, leaveType, startDate, endDate) : new HashMap<>(); //请假人的请假区间内的排班结果 - Map>> scheduleInfoMap = (removeNonWorkDayRange || removeNonWorkTimeRange) ? getScheduleInfoWithEmpId(leaveEmpIdList, DateUtil.beforeDay(startDate,1), DateUtil.AfterDay(endDate,1)) : new HashMap<>(); + Map>> scheduleInfoMap = getScheduleInfoWithEmpId(leaveEmpIdList, DateUtil.beforeDay(startDate,1), DateUtil.AfterDay(endDate,1)); //收集未关联假期余额的请假明细数据 List> simpleLeaveDetailList; 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 daa8d05..448d589 100644 --- a/src/com/engine/jucailinkq/attendance/workflow/service/impl/BusinessTripsApplyServiceImpl.java +++ b/src/com/engine/jucailinkq/attendance/workflow/service/impl/BusinessTripsApplyServiceImpl.java @@ -134,7 +134,7 @@ public class BusinessTripsApplyServiceImpl extends Service implements BusinessTr //出差人的出差区间内每一天的日期类型信息,来自于企业日历 Map> restDayInfo = removeNonWorkDayRange ? getRestDayWithEmpId(ccEmpIdList, startDate, endDate) : new HashMap<>(); //出差人的出差区间内的排班结果 - Map>> scheduleInfoMap = (removeNonWorkDayRange || removeNonWorkTimeRange) ? getScheduleInfoWithEmpId(ccEmpIdList, DateUtil.beforeDay(startDate,1), DateUtil.AfterDay(endDate,1)) : new HashMap<>(); + Map>> scheduleInfoMap = getScheduleInfoWithEmpId(ccEmpIdList, DateUtil.beforeDay(startDate,1), DateUtil.AfterDay(endDate,1)); //生成出差明细数据 List> simpleDetailList; diff --git a/src/com/engine/jucailinkq/attendance/workflow/service/impl/OvertimePlanServiceImpl.java b/src/com/engine/jucailinkq/attendance/workflow/service/impl/OvertimePlanServiceImpl.java index a76719b..0f4dc26 100644 --- a/src/com/engine/jucailinkq/attendance/workflow/service/impl/OvertimePlanServiceImpl.java +++ b/src/com/engine/jucailinkq/attendance/workflow/service/impl/OvertimePlanServiceImpl.java @@ -99,6 +99,8 @@ public class OvertimePlanServiceImpl extends Service implements OvertimePlanServ String currentDayStartToEnd = getBcStartAndEndTime(date, currentDayBcId, workBdlxList); String currentDayStartTime = !"".equals(currentDayStartToEnd) ? currentDayStartToEnd.split(",")[0] : ""; String currentDayEndTime = !"".equals(currentDayStartToEnd) ? currentDayStartToEnd.split(",")[1] : ""; + //判断当天班次是否为休息班次、且“休息班打卡自动加班”未勾选 + boolean currentDayRestBc = checkRestBc(currentDayBcId); //获取前1天班次id String beforeDayBcId = Util.null2String(dateToBcxxMap.get(DateUtil.beforeDay(date, 1))).split("-")[0]; @@ -106,6 +108,8 @@ public class OvertimePlanServiceImpl extends Service implements OvertimePlanServ String beforeDayStartToEnd = getBcStartAndEndTime(DateUtil.beforeDay(date, 1), beforeDayBcId, workBdlxList); String beforeDayStartTime = !"".equals(beforeDayStartToEnd) ? beforeDayStartToEnd.split(",")[0] : ""; String beforeDayEndTime = !"".equals(beforeDayStartToEnd) ? beforeDayStartToEnd.split(",")[1] : ""; + //判断前1天班次是否为休息班次、且“休息班打卡自动加班”未勾选 + boolean beforeDayRestBc = checkRestBc(beforeDayBcId); //获取次日班次id String nextDayBcId = Util.null2String(dateToBcxxMap.get(DateUtil.AfterDay(date, 1))).split("-")[0]; @@ -113,6 +117,9 @@ public class OvertimePlanServiceImpl extends Service implements OvertimePlanServ String nextDayStartToEnd = getBcStartAndEndTime(DateUtil.AfterDay(date, 1), nextDayBcId, workBdlxList); String nextDayStartTime = !"".equals(nextDayStartToEnd) ? nextDayStartToEnd.split(",")[0] : ""; String nextDayEndTime = !"".equals(nextDayStartToEnd) ? nextDayStartToEnd.split(",")[1] : ""; + //判断次日班次是否为休息班次、且“休息班打卡自动加班”未勾选 + boolean nextDayRestBc = checkRestBc(nextDayBcId); + //梳理加班时间段和班段时间段合理的情况 boolean beforeToCurrentDay = false; boolean currentToNextDay = false; @@ -146,9 +153,23 @@ public class OvertimePlanServiceImpl extends Service implements OvertimePlanServ belongDate = beforeDayDiffMinutes <= nextDayDiffMinutes ? DateUtil.beforeDay(date, 1) : DateUtil.AfterDay(date, 1); } } else { - //4-其他情况,属于不合理加班安排,返回报错 - errorMessage.add(Util.null2String(empIdToNameInfo.get(empId)) + "在日期" + date + "的加班计划区间和班次班段出现时间重叠,不允许申请加班!"); - continue; + //20240812需求变更,休息班次,允许加班计划区间和班次班段区间有重叠 + boolean currentDayOverLap = !"".equals(currentDayStartToEnd) && DateUtil.isOverlapping(date + " " + startTime, realEndDate + " " + endTime, currentDayStartTime, currentDayEndTime); + boolean beforeDayOverLap = !"".equals(beforeDayStartToEnd) && DateUtil.isOverlapping(date + " " + startTime, realEndDate + " " + endTime, beforeDayStartTime, beforeDayEndTime); + boolean nextDayOverLap = !"".equals(nextDayStartToEnd) && DateUtil.isOverlapping(date + " " + startTime, realEndDate + " " + endTime, nextDayStartTime, nextDayEndTime); + if ((!currentDayRestBc && currentDayOverLap) || (!beforeDayRestBc && beforeDayOverLap) || (!nextDayRestBc && nextDayOverLap)) { + //4-非休息班次,出现重叠时间,属于不合理加班安排,返回报错 + errorMessage.add(Util.null2String(empIdToNameInfo.get(empId)) + "在日期" + date + "的加班计划区间和非休息班次班段出现时间重叠,不允许申请加班!"); + continue; + //5-加班区间和休息班次出现重叠,首次重叠的日期,即为归属日期 + } else if (beforeDayRestBc && beforeDayOverLap) { + belongDate = DateUtil.beforeDay(date, 1); + } else if (currentDayRestBc && currentDayOverLap) { + belongDate = date; + } else if (nextDayRestBc && nextDayOverLap) { + belongDate = DateUtil.AfterDay(date, 1); + } + } //判断归属日的日期类型,首先从排班的信息来获取 String belongDateType = dateTypeInfoFromBc.getOrDefault(belongDate, ""); @@ -193,6 +214,19 @@ public class OvertimePlanServiceImpl extends Service implements OvertimePlanServ return resultMap; } + private boolean checkRestBc(String bcId) { + boolean restSign = false; + if (!"".equals(bcId)) { + //查询当天班次明细 + String sql = "select id, sfxx, xxbdkzdjb from uf_jcl_kq_bcxx where id = " + bcId; + Map data = DbTools.getSqlToMap(sql); + if ("1".equals(Util.null2String(data.get("sfxx"))) && !"1".equals(Util.null2String(data.get("xxbdkzdjb")))) { + restSign = true; + } + } + return restSign; + } + private boolean checkOverlapping(List> existOvertimePlanList, String startTimePoint, String endTimePoint) { boolean overlappingSign = false; if (existOvertimePlanList != null && existOvertimePlanList.size() > 0) {