|
|
@ -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 + "的加班计划区间和已申请的加班计划(已审核/待审核)出现时间重叠,不允许申请加班!";
|
|
|
|