diff --git a/src/com/engine/jucailinkq/attendance/workflow/action/askforleave/BatchAskForLeaveWorkFlowSubmitAction.java b/src/com/engine/jucailinkq/attendance/workflow/action/askforleave/BatchAskForLeaveWorkFlowSubmitAction.java index abf4ead..6d93a24 100644 --- a/src/com/engine/jucailinkq/attendance/workflow/action/askforleave/BatchAskForLeaveWorkFlowSubmitAction.java +++ b/src/com/engine/jucailinkq/attendance/workflow/action/askforleave/BatchAskForLeaveWorkFlowSubmitAction.java @@ -1,8 +1,11 @@ package com.engine.jucailinkq.attendance.workflow.action.askforleave; +import com.engine.common.util.ServiceUtil; import com.engine.jucailinkq.attendance.enums.AccountingUnitEnum; import com.engine.jucailinkq.attendance.enums.AttendanceItemTypeEnum; import com.engine.jucailinkq.attendance.workflow.enums.WorkFlowTypeEnum; +import com.engine.jucailinkq.attendance.workflow.service.AskForLeaveService; +import com.engine.jucailinkq.attendance.workflow.service.impl.AskForLeaveServiceImpl; import com.engine.jucailinkq.common.util.CommonUtil; import com.engine.jucailinkq.common.util.DateUtil; import com.engine.jucailinkq.common.util.DbTools; @@ -11,6 +14,7 @@ import com.google.common.collect.Lists; import com.google.common.collect.Maps; import lombok.extern.slf4j.Slf4j; import weaver.general.Util; +import weaver.hrm.User; import weaver.interfaces.workflow.action.Action; import weaver.soa.workflow.request.RequestInfo; @@ -28,11 +32,16 @@ import java.util.stream.Collectors; **/ @Slf4j public class BatchAskForLeaveWorkFlowSubmitAction implements Action { + private AskForLeaveService getAskForLeaveService(User user) { + return ServiceUtil.getService(AskForLeaveServiceImpl.class,user); + } @Override public String execute(RequestInfo requestInfo) { String requestid = requestInfo.getRequestid(); int billid = requestInfo.getRequestManager().getBillid(); log.info("billid : [{}]",billid); + User user = new User(Integer.parseInt("1")); + try { // 流程表单主表数据 HashMap mainTableData = CommonUtil.getMainTableInfo(requestInfo, WorkFlowTypeEnum.ASKFORLEAVE); @@ -40,11 +49,86 @@ public class BatchAskForLeaveWorkFlowSubmitAction implements Action { // 流程表单明细表1数据 List> detailTableData = CommonUtil.getDetailTableInfo(requestInfo, 0,WorkFlowTypeEnum.ASKFORLEAVE); log.info("detailTableData : [{}]", detailTableData); - + String detail1TableName = CommonUtil.getDetailTableInfoTableName(requestInfo.getDetailTableInfo().getDetailTable()[0].getTableDBName(),0,WorkFlowTypeEnum.ASKFORLEAVE); + log.info("detail1TableName : [{}]", detail1TableName); String detail2TableName = CommonUtil.getDetailTableInfoTableName(requestInfo.getDetailTableInfo().getDetailTable()[1].getTableDBName(),1,WorkFlowTypeEnum.ASKFORLEAVE); log.info("detail2TableName : [{}]", detail2TableName); + //流程表单明细表3数据 + List> detailTable3Data = CommonUtil.getDetailTableInfo(requestInfo,2, WorkFlowTypeEnum.ASKFORLEAVE); + log.info("detailTable3Data : [{}]", detailTable3Data); + //20241127需求变更,明细表1存在数据时,直接走原有校验逻辑;明细表1没有数据时,就根据明细表3重新生成明细表1数据,然后继续原有校验逻辑 + Map params = new HashMap<>(); + List> reCreateDetailList = new ArrayList<>(); + if (detailTableData.size() == 0 && detailTable3Data.size() > 0) { + List> insertDetail1List = new ArrayList<>(); + Map itemResult = new HashMap<>(); + List> itemDetailList = new ArrayList<>(); + for (Map detailTable3Item : detailTable3Data) { + detailTable3Item.put("jqlx", detailTable3Item.get("qjlx")); + detailTable3Item.put("cxjqj", detailTable3Item.get("qjfs")); + + params.put("mainTableData", detailTable3Item); + params.put("detailTableData", reCreateDetailList); + itemResult = getAskForLeaveService(user).generateLeaveInfoList(params); + log.info("itemResult : [{}]", itemResult); + if ("false".equals(Util.null2String(itemResult.get("status"))) || itemResult.get("errorInfo") != null) { + String message = "生成请假明细失败:" + Util.null2String(itemResult.get("errorInfo")); + log.error(message); + requestInfo.getRequestManager().setMessageid("11111" + requestid + "22222"); + requestInfo.getRequestManager().setMessagecontent(message); + return Action.FAILURE_AND_CONTINUE; + } else if (itemResult.get("data") != null) { + itemDetailList = (List>) itemResult.get("data"); + if (itemDetailList.size() > 0) { + Map insertItem; + for (Map item : itemDetailList) { + insertItem = new HashMap<>(); + insertItem.put("mainid", mainTableData.get("id")); + insertItem.put("ksrq", item.getOrDefault("ksrq", "")); + insertItem.put("kssj", item.getOrDefault("kssj", "")); + insertItem.put("jsrq", item.getOrDefault("jsrq", "")); + insertItem.put("jssj", item.getOrDefault("jssj", "")); + insertItem.put("qjsc", item.getOrDefault("qjsc", "")); + insertItem.put("qtj", item.getOrDefault("qtj", "0")); + insertItem.put("btj", item.getOrDefault("btj", "0")); + insertItem.put("cxqj", "0"); + insertItem.put("qjr", item.getOrDefault("qjr", "")); + insertItem.put("qjlx", item.getOrDefault("qjlx", "")); + insertItem.put("jqye", item.getOrDefault("jqye", "")); + insertDetail1List.add(insertItem); + } + + } + } + } + log.info("insertDetail1List : [{}]", insertDetail1List); + if (insertDetail1List.size() > 0 && !CommonUtil.insertBatch(insertDetail1List, detail1TableName)) { + //更新流程明细表2失败 + String message = "新增流程明细表1失败"; + log.error(message); + requestInfo.getRequestManager().setMessageid("11111" + requestid + "22222"); + requestInfo.getRequestManager().setMessagecontent(message); + return Action.FAILURE_AND_CONTINUE; + } + String sql = "select * from " + detail1TableName + " where mainid = " + mainTableData.get("id"); + List> data = DbTools.getSqlToList(sql); + if (data.size() > 0) { + detailTableData = data.stream() + .map(map -> map.entrySet() + .stream() + .collect(Collectors.toMap(Map.Entry::getKey, e -> Util.null2String(e.getValue())))) + .collect(Collectors.toList());; + } + log.info("detailTableData : [{}]", detailTableData); + } + if (detailTableData.size() == 0) { + String message = "请假流程明细表1为空!"; + log.error(message); + requestInfo.getRequestManager().setMessageid("11111" + requestid + "22222"); + requestInfo.getRequestManager().setMessagecontent(message); + return Action.FAILURE_AND_CONTINUE; + } //第一笔开始时间 - String firstStartDate = detailTableData.get(0).get("ksrq"); List startDateList = detailTableData.stream().map(map -> map.get("ksrq")).collect(Collectors.toList()); String minStartDate = startDateList.stream().min(Comparator.comparing(e-> DateUtil.getTime(e).toInstant(ZoneOffset.of("+8")).toEpochMilli())).get(); //请假人员列表 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 fb7e675..92cbab1 100644 --- a/src/com/engine/jucailinkq/attendance/workflow/service/impl/AskForLeaveServiceImpl.java +++ b/src/com/engine/jucailinkq/attendance/workflow/service/impl/AskForLeaveServiceImpl.java @@ -1574,10 +1574,14 @@ public class AskForLeaveServiceImpl extends Service implements AskForLeaveServic if (otherCcList.size() > 0) { existCcSc = otherCcList.stream().mapToDouble(e-> { + String itemCcsc = "".equals(Util.null2String(e.get("ccsc"))) ? "0" : e.get("ccsc").toString(); if (jbIdToHsdw.get(e.get("cclx").toString()).equals(AccountingUnitEnum.DAY.getKey())) { - return Double.parseDouble(e.getOrDefault("ccsc", "0").toString()) * dateToRatedHours.getOrDefault(ksrq, 8.0); + return Double.parseDouble(itemCcsc) * dateToRatedHours.getOrDefault(ksrq, 8.0); } - return Double.parseDouble(e.getOrDefault("ccsc", "0").toString()); + if ("".equals(Util.null2String(e.get("ccsc"))) && "1".equals(Util.null2String(e.get("btcc"))) ) { + return 0.5 * dateToRatedHours.getOrDefault(ksrq, 8.0); + } + return Double.parseDouble(itemCcsc); }).sum(); if (existLeaveSc + existCcSc + leaveHours > dateToRatedHours.getOrDefault(ksrq, 8.0)) { message = message + "_" + ksrq + "已存在共计" + existCcSc 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 fac280e..7cbec9d 100644 --- a/src/com/engine/jucailinkq/attendance/workflow/service/impl/BusinessTripsApplyServiceImpl.java +++ b/src/com/engine/jucailinkq/attendance/workflow/service/impl/BusinessTripsApplyServiceImpl.java @@ -296,10 +296,14 @@ public class BusinessTripsApplyServiceImpl extends Service implements BusinessTr if (otherCcList.size() > 0) { existCcSc = otherCcList.stream().mapToDouble(e-> { + String itemCcsc = "".equals(Util.null2String(e.get("ccsc"))) ? "0" : e.get("ccsc").toString(); if (cclxIdToHsdw.get(e.get("cclx").toString()).equals(AccountingUnitEnum.DAY.getKey())) { - return Double.parseDouble(e.getOrDefault("ccsc", "0").toString()) * dateToRatedHours.getOrDefault(ksrq, 8.0); + return Double.parseDouble(itemCcsc) * dateToRatedHours.getOrDefault(ksrq, 8.0); } - return Double.parseDouble(e.getOrDefault("ccsc", "0").toString()); + if ("".equals(Util.null2String(e.get("ccsc"))) && "1".equals(Util.null2String(e.get("btcc"))) ) { + return 0.5 * dateToRatedHours.getOrDefault(ksrq, 8.0); + } + return Double.parseDouble(itemCcsc); }).sum(); if (existCcSc + ccscHours > dateToRatedHours.getOrDefault(ksrq, 8.0)) { message = message + "_" + ksrq + "已存在共计" + existCcSc +