|
|
|
@ -216,7 +216,7 @@ public class AskForLeaveServiceImpl extends Service implements AskForLeaveServic
|
|
|
|
|
//请假人的请假区间内每一天的日期类型信息
|
|
|
|
|
Map<String, List<String>> restDayInfo = removeNonWorkDayRange ? getRestDayWithEmpId(leaveEmpIdList, leaveType, startDate, endDate) : new HashMap<>();
|
|
|
|
|
//请假人的请假区间内的排班结果
|
|
|
|
|
Map<String, List<Map<String, Object>>> scheduleInfoMap = (removeNonWorkDayRange || removeNonWorkTimeRange) ? getScheduleInfoWithEmpId(leaveEmpIdList, startDate, DateUtil.AfterDay(endDate,1)) : new HashMap<>();
|
|
|
|
|
Map<String, List<Map<String, Object>>> scheduleInfoMap = (removeNonWorkDayRange || removeNonWorkTimeRange) ? getScheduleInfoWithEmpId(leaveEmpIdList, DateUtil.beforeDay(startDate,1), DateUtil.AfterDay(endDate,1)) : new HashMap<>();
|
|
|
|
|
|
|
|
|
|
//收集未关联假期余额的请假明细数据
|
|
|
|
|
List<Map<String, String>> simpleLeaveDetailList = createSimpleLeaveDetailList(leaveEmpIdList, leaveDateList, removeNonWorkDayRange, scheduleInfoMap,
|
|
|
|
@ -344,6 +344,8 @@ public class AskForLeaveServiceImpl extends Service implements AskForLeaveServic
|
|
|
|
|
List<Map<String, Object>> scheduleInfoList = scheduleInfoMap.get(leaveEmpId);
|
|
|
|
|
Map<String, String> dateToBcxxMap = scheduleInfoList == null ? new HashMap<>()
|
|
|
|
|
: scheduleInfoList.stream().collect(Collectors.toMap(e->Util.null2String(e.get("bcrq")),e->Util.null2String(e.get("bcxx"))));
|
|
|
|
|
Map<String, String> dateToHxbzMap = scheduleInfoList == null ? new HashMap<>()
|
|
|
|
|
: scheduleInfoList.stream().collect(Collectors.toMap(e->Util.null2String(e.get("bcrq")),e->Util.null2String(e.get("hxbz"))));
|
|
|
|
|
|
|
|
|
|
if (removeNonWorkDayRange) {
|
|
|
|
|
//排班结果中休息的日期
|
|
|
|
@ -375,54 +377,69 @@ public class AskForLeaveServiceImpl extends Service implements AskForLeaveServic
|
|
|
|
|
simpleLeaveDetailItem.put("jssj", endTime);
|
|
|
|
|
//获取当天班次id
|
|
|
|
|
String currentDayBcId = Util.null2String(dateToBcxxMap.get(leaveDate)).split("-")[0];
|
|
|
|
|
boolean currentDayHxbz = !"".equals(Util.null2String(dateToHxbzMap.get(leaveDate)));
|
|
|
|
|
//获取前一天班次id
|
|
|
|
|
String yesterday = DateUtil.beforeDay(leaveDate,1);
|
|
|
|
|
String yesterdayBcId = Util.null2String(dateToBcxxMap.get(DateUtil.beforeDay(leaveDate, 1))).split("-")[0];
|
|
|
|
|
//获取次日班次id
|
|
|
|
|
String nextDay = DateUtil.AfterDay(leaveDate,1);
|
|
|
|
|
String nextDayBcId = Util.null2String(dateToBcxxMap.get(nextDay)).split("-")[0];
|
|
|
|
|
boolean nextDayHxbz = !"".equals(Util.null2String(dateToHxbzMap.get(nextDay)));
|
|
|
|
|
|
|
|
|
|
String sql = "";
|
|
|
|
|
List<Map<String, Object>> bcDetailData;
|
|
|
|
|
String endDate = leaveDate;
|
|
|
|
|
int scMinutes = 0;
|
|
|
|
|
//开始时时和结束时间存在跨天情况时,即开始时间大于等于结束时间
|
|
|
|
|
if (startTime.compareTo(endTime) >= 0) {
|
|
|
|
|
String nextDay = DateUtil.AfterDay(leaveDate,1);
|
|
|
|
|
endDate = nextDay;
|
|
|
|
|
//获取次日班次id
|
|
|
|
|
String nextDayBcId = Util.null2String(dateToBcxxMap.get(nextDay)).split("-")[0];
|
|
|
|
|
simpleLeaveDetailItem.put("jsrq", nextDay);
|
|
|
|
|
int currentDayScMinutes = 0;
|
|
|
|
|
int nextDayScMinutes = 0;
|
|
|
|
|
//需要自动移除时间区间内的非工作时长,且请假方式为“指定时间区间”时,去除当前明细中开始时间、结束时间之间的非工作时长
|
|
|
|
|
if (!"".equals(currentDayBcId)) {
|
|
|
|
|
//查询当天班次明细
|
|
|
|
|
sql = "select id, bdlx, gsrq, kssj as dtkssj, jssj as dtjssj from uf_jcl_kq_bcxx_dt1 where mainid = " + currentDayBcId;
|
|
|
|
|
bcDetailData = DbTools.getSqlToList(sql);
|
|
|
|
|
bcDetailData = bcDetailData.stream().filter(e -> countBdlxList.contains(Util.null2String(e.get("bdlx")))).collect(Collectors.toList());
|
|
|
|
|
//获取需要累计的班段时长区间和请假区间存在交集的分钟数
|
|
|
|
|
currentDayScMinutes = Utils.removeTime(leaveDate + " " + startTime, nextDay + " " + "00:00", bcDetailData, leaveDate);
|
|
|
|
|
} else {
|
|
|
|
|
currentDayScMinutes = DateUtil.getBetWeenMinutes(leaveDate + " " + startTime, nextDay + " " + "00:00");
|
|
|
|
|
}
|
|
|
|
|
if (!"".equals(nextDayBcId)) {
|
|
|
|
|
//查询次日班次明细
|
|
|
|
|
sql = "select id, bdlx, gsrq, kssj as dtkssj, jssj as dtjssj from uf_jcl_kq_bcxx_dt1 where mainid = " + nextDayBcId;
|
|
|
|
|
bcDetailData = DbTools.getSqlToList(sql);
|
|
|
|
|
bcDetailData = bcDetailData.stream().filter(e -> countBdlxList.contains(Util.null2String(e.get("bdlx")))).collect(Collectors.toList());
|
|
|
|
|
//获取需要累计的班段时长区间和请假区间存在交集的分钟数
|
|
|
|
|
nextDayScMinutes = Utils.removeTime(nextDay + " " + "00:00", nextDay + " " + endTime, bcDetailData, nextDay);
|
|
|
|
|
} else {
|
|
|
|
|
nextDayScMinutes = DateUtil.getBetWeenMinutes(nextDay + " " + "00:00", nextDay + " " + endTime);
|
|
|
|
|
}
|
|
|
|
|
String toDealStartTime = startTime;
|
|
|
|
|
if (!"".equals(yesterdayBcId)) {
|
|
|
|
|
sql = "select id, bdlx, gsrq, kssj as dtkssj, jssj as dtjssj from uf_jcl_kq_bcxx_dt1 where mainid = " + yesterdayBcId + " order by gsrq desc, kssj desc";
|
|
|
|
|
bcDetailData = DbTools.getSqlToList(sql);
|
|
|
|
|
bcDetailData = bcDetailData.stream().filter(e -> countBdlxList.contains(Util.null2String(e.get("bdlx")))).collect(Collectors.toList());
|
|
|
|
|
//获取需要累计的班段时长区间和请假区间存在交集的分钟数
|
|
|
|
|
scMinutes = Utils.removeTime(leaveDate + " " + startTime, endDate + " " + endTime, bcDetailData, yesterday);
|
|
|
|
|
//更新可匹配请假时长开始时间
|
|
|
|
|
String gsrq = Util.null2String(bcDetailData.get(0).get("gsrq"));
|
|
|
|
|
toDealStartTime = "2".equals(gsrq) && startTime.compareTo(Util.null2String(bcDetailData.get(0).get("dtjssj"))) < 0
|
|
|
|
|
? Util.null2String(bcDetailData.get(0).get("dtjssj")) : startTime;
|
|
|
|
|
}
|
|
|
|
|
if (!"".equals(currentDayBcId)) {
|
|
|
|
|
sql = "select id, bdlx, gsrq, kssj as dtkssj, jssj as dtjssj from uf_jcl_kq_bcxx_dt1 where mainid = " + currentDayBcId + " order by gsrq desc, kssj desc";
|
|
|
|
|
bcDetailData = DbTools.getSqlToList(sql);
|
|
|
|
|
bcDetailData = bcDetailData.stream().filter(e -> countBdlxList.contains(Util.null2String(e.get("bdlx")))).collect(Collectors.toList());
|
|
|
|
|
//获取需要累计的班段时长区间和请假区间存在交集的分钟数
|
|
|
|
|
scMinutes = scMinutes + Utils.removeTime(leaveDate + " " + toDealStartTime, endDate + " " + endTime, bcDetailData, leaveDate);
|
|
|
|
|
//更新可匹配请假时长开始时间
|
|
|
|
|
String gsrq = Util.null2String(bcDetailData.get(0).get("gsrq"));
|
|
|
|
|
|
|
|
|
|
if ("2".equals(gsrq)) {
|
|
|
|
|
leaveDate = nextDay;
|
|
|
|
|
toDealStartTime = Util.null2String(bcDetailData.get(0).get("dtjssj"));
|
|
|
|
|
} else if ("1".equals(gsrq)) {
|
|
|
|
|
toDealStartTime = toDealStartTime.compareTo(Util.null2String(bcDetailData.get(0).get("dtjssj"))) < 0
|
|
|
|
|
? Util.null2String(bcDetailData.get(0).get("dtjssj")) : toDealStartTime;
|
|
|
|
|
}
|
|
|
|
|
//组装初步的请假时长
|
|
|
|
|
scMinutes = currentDayScMinutes + nextDayScMinutes;
|
|
|
|
|
} else {
|
|
|
|
|
//需要自动移除时间区间内的非工作时长,且请假方式为“指定时间区间”时,去除当前明细中开始时间、结束时间之间的非工作时长
|
|
|
|
|
} else if (currentDayHxbz) {
|
|
|
|
|
scMinutes = scMinutes + DateUtil.getBetWeenMinutes(leaveDate + " " + toDealStartTime, nextDay + " " + "00:00");
|
|
|
|
|
}
|
|
|
|
|
if (!"".equals(nextDayBcId)) {
|
|
|
|
|
sql = "select id, bdlx, gsrq, kssj as dtkssj, jssj as dtjssj from uf_jcl_kq_bcxx_dt1 where mainid = " + nextDayBcId + " order by gsrq desc, kssj desc";
|
|
|
|
|
bcDetailData = DbTools.getSqlToList(sql);
|
|
|
|
|
bcDetailData = bcDetailData.stream().filter(e -> countBdlxList.contains(Util.null2String(e.get("bdlx")))).collect(Collectors.toList());
|
|
|
|
|
//获取需要累计的班段时长区间和请假区间存在交集的分钟数
|
|
|
|
|
scMinutes = scMinutes + Utils.removeTime(leaveDate + " " + toDealStartTime, endDate + " " + endTime, bcDetailData, nextDay);
|
|
|
|
|
|
|
|
|
|
} else if (nextDayHxbz) {
|
|
|
|
|
if ("".equals(currentDayBcId)) {
|
|
|
|
|
//组装初步的请假时长
|
|
|
|
|
scMinutes = DateUtil.getBetWeenMinutes(leaveDate + " " + startTime, leaveDate + " " + endTime);
|
|
|
|
|
scMinutes = scMinutes + DateUtil.getBetWeenMinutes(nextDay + " " + "00:00", nextDay + " " + endTime);
|
|
|
|
|
} else {
|
|
|
|
|
//查询班次明细
|
|
|
|
|
sql = "select id, bdlx, gsrq, kssj as dtkssj, jssj as dtjssj from uf_jcl_kq_bcxx_dt1 where mainid = " + currentDayBcId;
|
|
|
|
|
bcDetailData = DbTools.getSqlToList(sql);
|
|
|
|
|
bcDetailData = bcDetailData.stream().filter(e -> countBdlxList.contains(Util.null2String(e.get("bdlx")))).collect(Collectors.toList());
|
|
|
|
|
//获取需要累计的班段时长区间和请假区间存在交集的分钟数
|
|
|
|
|
scMinutes = Utils.removeTime(leaveDate + " " + startTime, leaveDate + " " + endTime, bcDetailData, leaveDate);
|
|
|
|
|
int nextDayMinutes = leaveDate.compareTo(nextDay) >= 0 ? DateUtil.getBetWeenMinutes(leaveDate + " " + toDealStartTime, nextDay + " " + endTime)
|
|
|
|
|
: DateUtil.getBetWeenMinutes(nextDay + " " + "00:00", nextDay + " " + endTime);
|
|
|
|
|
scMinutes = scMinutes + Math.max(nextDayMinutes, 0);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
//增加加班计划中的数据,加班计划明细中的数据作为“加班计划”班段类型数据的补充
|
|
|
|
|