考勤-加班计划流程提交节点action增加加班区间重叠校验

main
sy 5 months ago
parent 160ad5d0ab
commit a4ef470a28

@ -15,6 +15,7 @@ import weaver.general.Util;
import weaver.interfaces.workflow.action.Action; import weaver.interfaces.workflow.action.Action;
import weaver.soa.workflow.request.RequestInfo; import weaver.soa.workflow.request.RequestInfo;
import java.time.ZoneOffset;
import java.util.*; import java.util.*;
import java.util.stream.Collectors; import java.util.stream.Collectors;
@ -35,13 +36,25 @@ public class OvertimePlanCheckAction implements Action {
// 流程表单明细表数据 // 流程表单明细表数据
List<Map<String, String>> detailTableData = CommonUtil.getDetailTableInfo(requestInfo,0); List<Map<String, String>> detailTableData = CommonUtil.getDetailTableInfo(requestInfo,0);
log.info("OvertimePlanCheckAction_start, detailTableData_size : {}",detailTableData.size()); log.info("OvertimePlanCheckAction_start, detailTableData_size : {}",detailTableData.size());
log.info("detailTableData : [{}]", detailTableData);
//加班人员 //加班人员
String jbry = mainTableData.get("jbry"); // String jbry = mainTableData.get("jbry");
String mainStartDate = Util.null2String(mainTableData.get("ksrq")); String mainStartDate = Util.null2String(mainTableData.get("ksrq"));
String mainEndDate = Util.null2String(mainTableData.get("jsrq")); String mainEndDate = Util.null2String(mainTableData.get("jsrq"));
try { try {
List<String> startDateList = detailTableData.stream().map(map -> map.get("ksrq")).collect(Collectors.toList());
List<String> endDateList = detailTableData.stream().map(map -> map.get("jsrq")).collect(Collectors.toList());
if (startDateList.size() == 0 || endDateList.size() == 0) {
log.error("明细表数据缺少加班起始或者结束日期!");
requestInfo.getRequestManager().setMessageid("11111" + requestid + "22222");
requestInfo.getRequestManager().setMessagecontent("明细表数据缺少加班起始或者结束日期!");
return Action.FAILURE_AND_CONTINUE;
}
mainStartDate = startDateList.stream().min(Comparator.comparing(e->DateUtil.getTime(e).toInstant(ZoneOffset.of("+8")).toEpochMilli())).get();
mainEndDate = endDateList.stream().max(Comparator.comparing(e->DateUtil.getTime(e).toInstant(ZoneOffset.of("+8")).toEpochMilli())).get();
//获取人员id和姓名信息 //获取人员id和姓名信息
List<String> empIdList = Arrays.asList(jbry.split(",")); // List<String> empIdList = Arrays.asList(jbry.split(","));
List<String> empIdList = detailTableData.stream().map(map -> map.get("jbry")).collect(Collectors.toList());
Map<String, String> empIdToNameInfo = CommonUtil.empIdToNameInfo(empIdList); Map<String, String> empIdToNameInfo = CommonUtil.empIdToNameInfo(empIdList);
//获取作用时段包含计划加班的加班类型的考勤项目集合 //获取作用时段包含计划加班的加班类型的考勤项目集合
String sql = "select id,mc, bddrqlx, jbqsfzs, xzzjbsc, rzdjbxss, zzdjbxss, yzdjbxss, zysd, ccclfs from uf_jcl_kq_kqxm where xmlx = ?"; String sql = "select id,mc, bddrqlx, jbqsfzs, xzzjbsc, rzdjbxss, zzdjbxss, yzdjbxss, zysd, ccclfs from uf_jcl_kq_kqxm where xmlx = ?";
@ -121,6 +134,36 @@ public class OvertimePlanCheckAction implements Action {
if (overtimeDetailList == null || overtimeDetailList.size() == 0) { if (overtimeDetailList == null || overtimeDetailList.size() == 0) {
continue; continue;
} }
//校验该组加班明细之间是否有时间重叠情况
if (overtimeDetailList.size() > 1) {
boolean overlappingSign;
Map<String, String> targetOvertimeDetail;
Map<String, String> compareOvertimeDetail;
String targetStartTime;
String targetEndTime;
String compareStartTime;
String compareEndTime;
for (int i = 0; i < overtimeDetailList.size() - 1; i++) {
targetOvertimeDetail = overtimeDetailList.get(i);
targetStartTime = targetOvertimeDetail.get("ksrq") + " " + targetOvertimeDetail.get("kssj");
targetEndTime = targetOvertimeDetail.get("jsrq") + " " + targetOvertimeDetail.get("jssj");
for (int j = i + 1; j < overtimeDetailList.size(); j++) {
compareOvertimeDetail = overtimeDetailList.get(j);
compareStartTime = compareOvertimeDetail.get("ksrq") + " " + compareOvertimeDetail.get("kssj");
compareEndTime = compareOvertimeDetail.get("jsrq") + " " + compareOvertimeDetail.get("jssj");
//判断两组时段是否有重叠时段
overlappingSign = DateUtil.isOverlapping(targetStartTime, targetEndTime, compareStartTime, compareEndTime);
if (overlappingSign) {
String message = Util.null2String(empIdToNameInfo.get(empId)) + "在日期" + targetOvertimeDetail.get("ksrq") + "的加班计划和本次提交的其他加班计划存在时间重叠,不允许申请加班!";
log.error(message);
requestInfo.getRequestManager().setMessageid("11111" + requestid + "22222");
requestInfo.getRequestManager().setMessagecontent(message);
return Action.FAILURE_AND_CONTINUE;
}
}
}
}
Map<String, Double> weekOvertimeInfo = new HashMap<>(); Map<String, Double> weekOvertimeInfo = new HashMap<>();
Map<String, Double> monthOvertimeInfo = new HashMap<>(); Map<String, Double> monthOvertimeInfo = new HashMap<>();
for (Map<String, String> overtimeDetailItem : overtimeDetailList) { for (Map<String, String> overtimeDetailItem : overtimeDetailList) {
@ -132,14 +175,14 @@ public class OvertimePlanCheckAction implements Action {
//排班和日历都无法获取时,默认为工作日 //排班和日历都无法获取时,默认为工作日
belongDateType = "".equals(belongDateType) ? DateTypeEnum.WORK_DAY.getKey() : belongDateType; belongDateType = "".equals(belongDateType) ? DateTypeEnum.WORK_DAY.getKey() : belongDateType;
String startDate = overtimeDetailItem.get("ksrq"); String startDate = overtimeDetailItem.get("ksrq");
String startTime = overtimeDetailItem.get("ksrq"); String startTime = overtimeDetailItem.get("kssj");
String endDate = overtimeDetailItem.get("jsrq"); String endDate = overtimeDetailItem.get("jsrq");
String endTime = overtimeDetailItem.get("jssj"); String endTime = overtimeDetailItem.get("jssj");
String jbsc = overtimeDetailItem.get("jbsc"); String jbsc = overtimeDetailItem.get("jbsc");
double overtimeMinutes = Double.parseDouble(jbsc) * 60; double overtimeMinutes = Double.parseDouble(jbsc) * 60;
String jblxId = overtimeDetailItem.getOrDefault("jblx", ""); String jblxId = overtimeDetailItem.getOrDefault("jblx", "");
matchItemInfo = jblxInfo.getOrDefault(jblxId, new HashMap<>()); matchItemInfo = jblxInfo.getOrDefault(jblxId, new HashMap<>());
//判断组明细是否与已存在的加班计划有重叠 //判断组明细是否与已存在的加班计划有重叠
boolean overLappingSign = checkOverlapping(existOvertimePlanList, startDate + " " +startTime, endDate + " " + endTime); boolean overLappingSign = checkOverlapping(existOvertimePlanList, startDate + " " +startTime, endDate + " " + endTime);
if (overLappingSign) { if (overLappingSign) {
String message = Util.null2String(empIdToNameInfo.get(empId)) + "在日期" + startDate + "的加班计划区间和已申请的加班计划(已审核/待审核)出现时间重叠,不允许申请加班!"; String message = Util.null2String(empIdToNameInfo.get(empId)) + "在日期" + startDate + "的加班计划区间和已申请的加班计划(已审核/待审核)出现时间重叠,不允许申请加班!";

Loading…
Cancel
Save