From c9608722481dcb63d7e30dc5f18ba682ba2c7938 Mon Sep 17 00:00:00 2001 From: sy Date: Fri, 12 Jul 2024 09:22:12 +0800 Subject: [PATCH 1/2] =?UTF-8?q?=E8=80=83=E5=8B=A4-=E6=89=B9=E9=87=8F?= =?UTF-8?q?=E8=AF=B7=E5=81=87=EF=BC=8C=E5=A2=9E=E5=8A=A0=E5=81=87=E6=9C=9F?= =?UTF-8?q?=E9=A2=84=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) { From 562ccad27f1fcf9e05803c3dfabaa8685c0ceb8a Mon Sep 17 00:00:00 2001 From: sy Date: Fri, 12 Jul 2024 10:57:55 +0800 Subject: [PATCH 2/2] =?UTF-8?q?=E8=80=83=E5=8B=A4-=E6=89=B9=E9=87=8F?= =?UTF-8?q?=E8=AF=B7=E5=81=87=EF=BC=8C=E5=81=87=E6=9C=9F=E9=A2=84=E6=94=AF?= =?UTF-8?q?=E9=80=BB=E8=BE=91=E4=B8=AD=E5=8F=AF=E9=A2=84=E6=94=AF=E5=81=87?= =?UTF-8?q?=E6=9C=9F=E8=AE=B0=E5=BD=95=E7=AD=9B=E9=80=89=E9=80=BB=E8=BE=91?= =?UTF-8?q?=E5=8F=98=E6=9B=B4=E4=B8=BA=E5=BB=B6=E6=9C=9F=E5=A4=B1=E6=95=88?= =?UTF-8?q?=E6=97=A5=E6=9C=9F=E6=9C=80=E6=99=9A=E7=9A=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../workflow/service/impl/AskForLeaveServiceImpl.java | 8 ++++---- 1 file changed, 4 insertions(+), 4 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 618e958..91f8aa1 100644 --- a/src/com/engine/jucailinkq/attendance/workflow/service/impl/AskForLeaveServiceImpl.java +++ b/src/com/engine/jucailinkq/attendance/workflow/service/impl/AskForLeaveServiceImpl.java @@ -691,10 +691,10 @@ public class AskForLeaveServiceImpl extends Service implements AskForLeaveServic 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"; + 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 yqsxrq, modedatacreatedate, modedatacreatetime"; List> holidayBalanceList = DbTools.getSqlToList(sql, leaveEmpId, itemId, startDate, startDate); - //获取失效日期最晚的一条 - Map maxSxrqMap = holidayBalanceList.stream().reduce((m1, m2) -> m2).orElse(null); + //获取延期失效日期最晚的一条 + Map maxYqsxrqMap = 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); @@ -750,7 +750,7 @@ public class AskForLeaveServiceImpl extends Service implements AskForLeaveServic 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)) { + if ("1".equals(allowAdvance) && maxYqsxrqMap != null && Util.null2String(maxYqsxrqMap.get("id")).equals(jqyeId)) { wxsc = wxsc + Utils.convertDouble(advanceSc) * multiple; } double editedUseSc = Utils.convertDouble(editedUseJqed.get(jqyeId));