|
|
|
@ -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<String, Object> 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<Map<String, Object>> existOvertimePlanList, String startTimePoint, String endTimePoint) {
|
|
|
|
|
boolean overlappingSign = false;
|
|
|
|
|
if (existOvertimePlanList != null && existOvertimePlanList.size() > 0) {
|
|
|
|
|