From 9b526d31a7ea1a518be940312ea6e0f2954dc5bc Mon Sep 17 00:00:00 2001 From: sy Date: Thu, 4 Jul 2024 15:13:41 +0800 Subject: [PATCH] =?UTF-8?q?=E8=80=83=E5=8B=A4-=E6=89=B9=E9=87=8F=E8=AF=B7?= =?UTF-8?q?=E5=81=87=EF=BC=8C=E6=98=8E=E7=BB=86=E8=A1=A81=E6=95=B0?= =?UTF-8?q?=E6=8D=AE=E7=94=9F=E6=88=90=E6=8C=89=E9=92=AE=E6=8E=A5=E5=8F=A3?= =?UTF-8?q?=E9=80=BB=E8=BE=91=E4=BC=98=E5=8C=96,=E5=A2=9E=E5=8A=A0?= =?UTF-8?q?=E5=A7=93=E5=90=8D=E5=92=8C=E5=81=87=E6=9C=9F=E5=90=8D=E7=A7=B0?= =?UTF-8?q?=E8=BF=94=E5=9B=9E?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/impl/AskForLeaveServiceImpl.java | 28 +++++++++++++++---- 1 file changed, 22 insertions(+), 6 deletions(-) diff --git a/src/com/engine/attendance/workflow/service/impl/AskForLeaveServiceImpl.java b/src/com/engine/attendance/workflow/service/impl/AskForLeaveServiceImpl.java index bfa2746..b0516e3 100644 --- a/src/com/engine/attendance/workflow/service/impl/AskForLeaveServiceImpl.java +++ b/src/com/engine/attendance/workflow/service/impl/AskForLeaveServiceImpl.java @@ -182,6 +182,8 @@ public class AskForLeaveServiceImpl extends Service implements AskForLeaveServic //获取填写的请假类型关联的考勤项目 String sql = "select id,mc,hsdw,hsl,jcbyxsyqjb,yxsydjb,qzsyyxjb,zdycbcndfgzsd,zdycrqqjndxxb from uf_jcl_kq_kqxm where id=?"; Map holidayItem = DbTools.getSqlToMap(sql,leaveType); + //勾选假期类型名称 + String checkItemName = Util.null2String(holidayItem.get("mc")); //判断是否需要自动移除时间区间内的非工作时长、自动移除日期区间内的休息日 boolean removeNonWorkTimeRange = "1".equals(Util.null2String(holidayItem.get("zdycbcndfgzsd"))); boolean removeNonWorkDayRange = "1".equals(Util.null2String(holidayItem.get("zdycrqqjndxxb"))); @@ -213,11 +215,15 @@ public class AskForLeaveServiceImpl extends Service implements AskForLeaveServic List> detailListItem; //判断考勤项目是否需要强制使用“优先使用项目” if (useFirstItemSign) { + //勾选假期类型名称 + String firstItemName = Util.null2String(holidayPriorityItem.get("mc")); //2-收集优先使用的项目关联的可使用的余额,才能够生成请假明细,可使用的条件为,a-满足最小使用时长,b-满足使用次数上限,c-存在未休时长 List> canUseFirstJqyeInfo = collectUsableHolidayBalance(unableUseJqyeIdList, editedUseJqed, holidayPriorityItem.get("id").toString(), startDate, entry.getKey()); - detailListItem = matchHolidayBalance(editedLeaveInfo, checkAmountJqIdList, errorMessage, entry.getKey(), empIdToName.get(entry.getKey()), canUseCheckJqyeInfo, canUseFirstJqyeInfo, editedUseJqed, editedUseJqlxWithEmp, entry.getValue(), leaveType, holidayPriorityItem.get("id").toString()); + detailListItem = matchHolidayBalance(editedLeaveInfo, checkAmountJqIdList, errorMessage, entry.getKey(), empIdToName.get(entry.getKey()), canUseCheckJqyeInfo, canUseFirstJqyeInfo, editedUseJqed, + editedUseJqlxWithEmp, entry.getValue(), leaveType, holidayPriorityItem.get("id").toString(), checkItemName, firstItemName); } else { - detailListItem = matchHolidayBalance(editedLeaveInfo, checkAmountJqIdList, errorMessage, entry.getKey(), empIdToName.get(entry.getKey()), canUseCheckJqyeInfo, null, editedUseJqed, editedUseJqlxWithEmp, entry.getValue(), leaveType, null); + detailListItem = matchHolidayBalance(editedLeaveInfo, checkAmountJqIdList, errorMessage, entry.getKey(), empIdToName.get(entry.getKey()), canUseCheckJqyeInfo, null, editedUseJqed, + editedUseJqlxWithEmp, entry.getValue(), leaveType, null, checkItemName, null); } if (detailListItem.size() > 0) { completeLeaveDetailList.addAll(detailListItem); @@ -453,7 +459,8 @@ public class AskForLeaveServiceImpl extends Service implements AskForLeaveServic */ private List> matchHolidayBalance(Map editedLeaveInfo, List checkAmountJqIdList, List errorMessage, String empId, String empName, List> canUseCheckJqyeInfo, List> canUseFirstJqyeInfo, Map editedUseJqed, - Map editedUseJqlxWithEmp,List> leaveDetailList, String checkItemId, String firstItemId) { + Map editedUseJqlxWithEmp,List> leaveDetailList, String checkItemId, String firstItemId, + String checkItemName, String firstItemName) { List> result = new ArrayList<>(); //记录分配假期余额的结果 boolean matchResultSign = true; @@ -497,6 +504,7 @@ public class AskForLeaveServiceImpl extends Service implements AskForLeaveServic String ksrq = Util.null2String(detailData.get("ksrq")); String qtj = Util.null2String(detailData.get("qtj")); String btj = Util.null2String(detailData.get("btj")); + detailData.put("qjrName", empName); //请假时间 double leaveDuration; if (qtj.equals(CheckBoxEnum.CHECKED.getKey())) { @@ -524,6 +532,7 @@ public class AskForLeaveServiceImpl extends Service implements AskForLeaveServic //存在优先使用假期类型时,且该假期类型不需要进行额度校验 if (firstItemNonCheck && !firstItemEditedDetail) { detailData.put("qjlx", firstItemId); + detailData.put("qjlxName", firstItemName); detailData.put("qjsc", String.valueOf(leaveDuration)); result.add(detailData); continue; @@ -531,6 +540,7 @@ public class AskForLeaveServiceImpl extends Service implements AskForLeaveServic //不存在优先使用假期类型时,勾选的假期类型不需要进行额度校验 if (firstItemId == null && checkItemNonCheck && !checkItemEditedDetail) { detailData.put("qjlx", checkItemId); + detailData.put("qjlxName", checkItemName); detailData.put("qjsc", String.valueOf(leaveDuration)); result.add(detailData); continue; @@ -539,7 +549,7 @@ public class AskForLeaveServiceImpl extends Service implements AskForLeaveServic leaveDurationMap.put("leaveDuration", leaveDuration); //存在优先使用假期类型时,但是需要进行额度校验 if (canUseFirstJqyeInfo != null && canUseFirstJqyeInfo.size() > 0 && firstItemHaveDuration && !firstItemEditedDetail) { - dealLeaveDetailWithJqyeInfo(detailData, canUseFirstJqyeInfo, editedUseJqed, leaveDurationMap, ksrq, firstItemId, result); + dealLeaveDetailWithJqyeInfo(detailData, canUseFirstJqyeInfo, editedUseJqed, leaveDurationMap, ksrq, firstItemId, firstItemName, result); if (leaveDurationMap.get("leaveDuration") == 0) { //如果同假期类型出现多假期余额拼接配置一条请假明细时,请假明细的时长需要重新设置下 //请假明细初始要求时长已配置完成则赋值为初始请假时长,否则为初始时长-剩余未配置时长 @@ -557,6 +567,7 @@ public class AskForLeaveServiceImpl extends Service implements AskForLeaveServic if (!"".equals(Util.null2String(detailData.get("qjlx")))) { result.add(new HashMap<>(detailData)); detailData.remove("qjlx"); + detailData.remove("qjlxName"); detailData.remove("qjsc"); detailData.remove("jqye"); } @@ -564,6 +575,7 @@ public class AskForLeaveServiceImpl extends Service implements AskForLeaveServic //勾选的假期类型不需要进行额度校验 if (checkItemNonCheck && !checkItemEditedDetail) { detailData.put("qjlx", checkItemId); + detailData.put("qjlxName", checkItemName); detailData.put("qjsc", String.valueOf(leaveDurationMap.get("leaveDuration"))); leaveDurationMap.put("totalLeaveDuration", Utils.subtract(leaveDurationMap.get("totalLeaveDuration"), leaveDurationMap.get("leaveDuration"))); result.add(detailData); @@ -571,7 +583,7 @@ public class AskForLeaveServiceImpl extends Service implements AskForLeaveServic } //勾选的假期类型需要进行额度校验 if (!checkItemEditedDetail) { - dealLeaveDetailWithJqyeInfo(detailData, canUseCheckJqyeInfo, editedUseJqed, leaveDurationMap, ksrq, checkItemId, result); + dealLeaveDetailWithJqyeInfo(detailData, canUseCheckJqyeInfo, editedUseJqed, leaveDurationMap, ksrq, checkItemId, checkItemName, result); } if (leaveDurationMap.get("leaveDuration") > 0) { String message = empName; @@ -591,7 +603,7 @@ public class AskForLeaveServiceImpl extends Service implements AskForLeaveServic private void dealLeaveDetailWithJqyeInfo(Map detailData, List> canUseJqyeInfo, Map editedUseJqed, Map leaveDurationMap, - String ksrq, String itemId, List> result) { + String ksrq, String itemId, String itemName, List> result) { double totalLeaveDuration = leaveDurationMap.get("totalLeaveDuration"); double leaveDuration = leaveDurationMap.get("leaveDuration"); //假期类型相关的假期余额记录 @@ -601,6 +613,9 @@ public class AskForLeaveServiceImpl extends Service implements AskForLeaveServic holidayBalancefilterList.add(map); } } + if (holidayBalancefilterList.size() == 0) { + return; + } //使用的假期类型的额度单位 String eddw = Util.null2String(holidayBalancefilterList.get(0).get("eddw")); int multipleNum = eddw.equals(AccountingUnitEnum.DAY.getKey()) ? 8 : 1; @@ -621,6 +636,7 @@ public class AskForLeaveServiceImpl extends Service implements AskForLeaveServic wxsc = multipleNum * wxsc; if (leaveDuration > 0 && wxsc > 0) { detailData.put("qjlx", itemId); + detailData.put("qjlxName", itemName); String jqyeId = Util.null2String(detailData.get("jqye")); if (leaveDuration > wxsc) { detailData.put("qjsc", String.valueOf(wxsc));