From c9608722481dcb63d7e30dc5f18ba682ba2c7938 Mon Sep 17 00:00:00 2001 From: sy Date: Fri, 12 Jul 2024 09:22:12 +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=E5=A2=9E=E5=8A=A0=E5=81=87=E6=9C=9F=E9=A2=84?= =?UTF-8?q?=E6=94=AF=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/impl/AskForLeaveServiceImpl.java | 23 ++++++++++++++----- 1 file changed, 17 insertions(+), 6 deletions(-) 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 79eaf69..618e958 100644 --- a/src/com/engine/jucailinkq/attendance/workflow/service/impl/AskForLeaveServiceImpl.java +++ b/src/com/engine/jucailinkq/attendance/workflow/service/impl/AskForLeaveServiceImpl.java @@ -185,7 +185,7 @@ public class AskForLeaveServiceImpl extends Service implements AskForLeaveServic empIdToName = data.stream().collect(Collectors.toMap(e->Util.null2String(e.get("id")),e->Util.null2String(e.get("lastname")))); } //获取填写的请假类型关联的考勤项目 - String sql = "select id,mc,hsdw,hsl,jcbyxsyqjb,yxsydjb,qzsyyxjb,zdycbcndfgzsd,zdycrqqjndxxb from uf_jcl_kq_kqxm where id=?"; + String sql = "select id,mc,hsdw,hsl,jcbyxsyqjb,yxsydjb,qzsyyxjb,zdycbcndfgzsd,zdycrqqjndxxb,yxyz,zdyzsl from uf_jcl_kq_kqxm where id=?"; Map holidayItem = DbTools.getSqlToMap(sql,leaveType); //勾选假期类型名称 String checkItemName = Util.null2String(holidayItem.get("mc")); @@ -216,14 +216,14 @@ public class AskForLeaveServiceImpl extends Service implements AskForLeaveServic continue; } //1-收集使用勾选的关联的可使用的余额,才能够生成请假明细,可使用的条件为,a-满足最小使用时长,b-满足使用次数上限,c-存在未休时长 - List> canUseCheckJqyeInfo = collectUsableHolidayBalance(unableUseJqyeIdList, editedUseJqed, leaveType, startDate, entry.getKey()); + List> canUseCheckJqyeInfo = collectUsableHolidayBalance(unableUseJqyeIdList, editedUseJqed, holidayItem, startDate, entry.getKey()); 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()); + List> canUseFirstJqyeInfo = collectUsableHolidayBalance(unableUseJqyeIdList, editedUseJqed, holidayPriorityItem, 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(), checkItemName, firstItemName); } else { @@ -684,13 +684,17 @@ public class AskForLeaveServiceImpl extends Service implements AskForLeaveServic * 收集假期类型关联的可使用的假期余额 * @param unableUseJqyeIdList 不可使用的假期余额id集合 * @param editedUseJqed 已编辑过的假期余额id和具体使用的时长映射 - * @param itemId 假期类型对应的考勤项目id + * @param holidayItem 假期类型对应的考勤项目信息 * @param startDate 开始日期 * @param leaveEmpId 请假人id */ - private List> collectUsableHolidayBalance(List unableUseJqyeIdList, Map editedUseJqed, String itemId, String startDate, String leaveEmpId) { - String sql = "select id,jqid,sxrq,ktsc,yxsc,wxsc,yqsxrq,ztsc from uf_jcl_kq_jqye where ygid=? and jqid=? and sxrq<=? and yqsxrq>=? order by sxrq"; + private List> collectUsableHolidayBalance(List unableUseJqyeIdList, Map editedUseJqed, Map holidayItem, String startDate, String leaveEmpId) { + + String itemId = Util.null2String(holidayItem.get("id")); + String sql = "select id,jqid,sxrq,ktsc,yxsc,wxsc,yqsxrq,ztsc from uf_jcl_kq_jqye where ygid=? and jqid=? and sxrq<=? and yqsxrq>=? order by sxrq, modedatacreatedate, modedatacreatetime"; List> holidayBalanceList = DbTools.getSqlToList(sql, leaveEmpId, itemId, startDate, startDate); + //获取失效日期最晚的一条 + Map maxSxrqMap = holidayBalanceList.stream().reduce((m1, m2) -> m2).orElse(null); //获取假期额度规则中额度可修次数、单次最小休时长、额度单位 String jqedSql = "select eddw, dczskxsc, edbxdcxw from uf_jcl_kq_jqed where jb = ?"; Map jqedInfo = DbTools.getSqlToMap(jqedSql, itemId); @@ -736,12 +740,19 @@ public class AskForLeaveServiceImpl extends Service implements AskForLeaveServic return Integer.parseInt(allowLeaveNumStr) > beforeUseNum; }).collect(Collectors.toList()); } + //判断是否可预支 + String allowAdvance = Util.null2String(holidayItem.get("yxyz")); + String advanceSc = Util.null2String(holidayItem.get("zdyzsl")); //遍历可使用的假期余额,去除已编辑请假明细记录中使用的时长 List> canUseHolidayBalanceList = new ArrayList<>(); for (Map holidayBalance : holidayBalanceList) { String jqyeId = Util.null2String(holidayBalance.get("id")); if (!unableUseJqyeIdList.contains(jqyeId)) { double wxsc = Utils.convertDouble(holidayBalance.get("wxsc")) * multiple; + //如果该条假期余额可以预支,则在原有未休时长基础上增加预支时长 + if ("1".equals(allowAdvance) && maxSxrqMap != null && Util.null2String(maxSxrqMap.get("id")).equals(jqyeId)) { + wxsc = wxsc + Utils.convertDouble(advanceSc) * multiple; + } double editedUseSc = Utils.convertDouble(editedUseJqed.get(jqyeId)); double realWxsc = wxsc - editedUseSc; if ((minLeaveDuration == null || wxsc >= minLeaveDuration) && realWxsc > 0) {