diff --git a/src/com/engine/jucailinkq/attendance/workflow/service/AllowanceService.java b/src/com/engine/jucailinkq/attendance/workflow/service/AllowanceService.java index 08d2474..b8163f1 100644 --- a/src/com/engine/jucailinkq/attendance/workflow/service/AllowanceService.java +++ b/src/com/engine/jucailinkq/attendance/workflow/service/AllowanceService.java @@ -5,4 +5,6 @@ import java.util.Map; public interface AllowanceService { Map addAllowanceRecords(Map params); + + Map getAllowanceRecordList(Map params); } diff --git a/src/com/engine/jucailinkq/attendance/workflow/service/impl/AllowanceServiceImpl.java b/src/com/engine/jucailinkq/attendance/workflow/service/impl/AllowanceServiceImpl.java index 6b8292b..3c385cf 100644 --- a/src/com/engine/jucailinkq/attendance/workflow/service/impl/AllowanceServiceImpl.java +++ b/src/com/engine/jucailinkq/attendance/workflow/service/impl/AllowanceServiceImpl.java @@ -10,6 +10,7 @@ import com.engine.jucailinkq.common.util.DateUtil; import com.engine.jucailinkq.common.util.DbTools; import com.engine.jucailinkq.common.util.Utils; import com.engine.core.impl.Service; +import lombok.extern.slf4j.Slf4j; import weaver.conn.RecordSet; import weaver.general.BaseBean; import weaver.general.Util; @@ -26,6 +27,7 @@ import java.util.stream.Collectors; * @Description: 出勤津贴 * @Date: 2024/4/2 **/ +@Slf4j public class AllowanceServiceImpl extends Service implements AllowanceService { BaseBean bs = new BaseBean(); @Override @@ -736,4 +738,38 @@ public class AllowanceServiceImpl extends Service implements AllowanceService { return kqxmIdsWithCq; } + + @Override + public Map getAllowanceRecordList(Map params) { + Map resultMap = new HashMap(); + //获取主表id列表 + String targetUserId = Util.null2String(params.get("xjr")); + String queryDateRange = Util.null2String(params.get("cxqj")); + String startDate = ""; + String endDate = ""; + String targetMonth = ""; + if (queryDateRange.equals("0")) { + //上月 + targetMonth = DateUtil.beforeMonth(DateUtil.getCurrentDate()); + } else if (queryDateRange.equals("1")) { + targetMonth = DateUtil.getCurrentMonth(); + } + startDate = targetMonth + "-01"; + //结束日期只作为范围筛选,不用考虑是目标月份是否存在31号 + endDate = targetMonth + "-31"; + + log.info("targetUserId : {}, queryDateRange : {}, startDate : {}, endDate : {}", targetUserId, queryDateRange, startDate, endDate); + + String detailSql = "select rq, bc, jtlx, sc, zt , bz as sm from uf_jcl_kq_cqjt where yg = ? and rq >= ? and rq <= ? "; + List> detailList = DbTools.getSqlToList(detailSql,targetUserId,startDate,endDate); + if (detailList.size() > 0) { + resultMap.put("data", detailList); + } else { + resultMap.put("data", null); + } + log.info("detailList : [{}]", detailList); + + return resultMap; + } + } 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 3b81a51..9042164 100644 --- a/src/com/engine/jucailinkq/attendance/workflow/service/impl/AskForLeaveServiceImpl.java +++ b/src/com/engine/jucailinkq/attendance/workflow/service/impl/AskForLeaveServiceImpl.java @@ -161,6 +161,7 @@ public class AskForLeaveServiceImpl extends Service implements AskForLeaveServic String leaveMode = Util.null2String(mainTableData.get("cxjqj")); String leaveType = Util.null2String(mainTableData.get("jqlx")); String leaveDuration = Util.null2String(mainTableData.get("qjsc")); + String dailyRepeat = Util.null2String(mainTableData.get("mtcfsdjq")); //获取请假日期集合 List leaveDateList = DateUtil.getDatesBetween(startDate, endDate); //已编辑内容中的假期额度使用信息 @@ -219,8 +220,14 @@ public class AskForLeaveServiceImpl extends Service implements AskForLeaveServic Map>> scheduleInfoMap = (removeNonWorkDayRange || removeNonWorkTimeRange) ? getScheduleInfoWithEmpId(leaveEmpIdList, DateUtil.beforeDay(startDate,1), DateUtil.AfterDay(endDate,1)) : new HashMap<>(); //收集未关联假期余额的请假明细数据 - List> simpleLeaveDetailList = createSimpleLeaveDetailList(leaveEmpIdList, leaveDateList, removeNonWorkDayRange, scheduleInfoMap, - restDayInfo, leaveMode, startTime, endTime, leaveDuration, countBdlxList); + List> simpleLeaveDetailList; + if (leaveMode.equals(AskAndEvctionWayEnum.TIME_INTERVAL.getKey()) && !"1".equals(dailyRepeat)) { + simpleLeaveDetailList = createSimpleLeaveDetailListWithNoDaily(leaveEmpIdList, leaveDateList, removeNonWorkDayRange, scheduleInfoMap, + restDayInfo, startDate, endDate, startTime, endTime, countBdlxList); + } else { + simpleLeaveDetailList = createSimpleLeaveDetailList(leaveEmpIdList, leaveDateList, removeNonWorkDayRange, scheduleInfoMap, + restDayInfo, leaveMode, startTime, endTime, leaveDuration, countBdlxList); + } //收集已关联假期余额的请假明细数据 List> completeLeaveDetailList = new ArrayList<>(); //按照人员id分组处理请假明细信息,关联假期余额数据 @@ -337,16 +344,13 @@ public class AskForLeaveServiceImpl extends Service implements AskForLeaveServic String startTime, String endTime, String leaveDuration, List countBdlxList) { List> simpleLeaveDetailList = new ArrayList<>(); Map simpleLeaveDetailItem; - //实际需要请假的日期集合 - List realLeaveDateList; + for (String leaveEmpId : leaveEmpIdList) { //需要自动移除日期区间内的休息日时,去除请假日期区间中的休息日 - List> scheduleInfoList = scheduleInfoMap.get(leaveEmpId); - Map dateToBcxxMap = scheduleInfoList == null ? new HashMap<>() - : scheduleInfoList.stream().collect(Collectors.toMap(e->Util.null2String(e.get("bcrq")),e->Util.null2String(e.get("bcxx")))); - Map dateToHxbzMap = scheduleInfoList == null ? new HashMap<>() - : scheduleInfoList.stream().collect(Collectors.toMap(e->Util.null2String(e.get("bcrq")),e->Util.null2String(e.get("hxbz")))); + List> scheduleInfoList = scheduleInfoMap.getOrDefault(leaveEmpId, new ArrayList<>()); + Map dateToBcxxMap = scheduleInfoList.stream().collect(Collectors.toMap(e->Util.null2String(e.get("bcrq")),e->Util.null2String(e.get("bcxx")))); + List restDateList = new ArrayList<>(); if (removeNonWorkDayRange) { //排班结果中休息的日期 List restDateListFromSchedule = scheduleInfoList.stream() @@ -357,15 +361,12 @@ public class AskForLeaveServiceImpl extends Service implements AskForLeaveServic //排班结果中未出现的日期 List nonSetDateListFromSchedule = leaveDateList.stream().filter(f -> !allDateListFromSchedule.contains(f)).collect(Collectors.toList()); //企业日历中人员对应日期的休息日 - List restDateList = restDayInfo.get(leaveEmpId); + restDateList = restDayInfo.get(leaveEmpId); //筛选排班信息无法辨别的日期,依靠企业日历的日期信息 restDateList = restDateList.stream().filter(nonSetDateListFromSchedule::contains).collect(Collectors.toList()); - List finalRestDateList = restDateList; - realLeaveDateList = leaveDateList.stream().filter(f -> !finalRestDateList.contains(f) && !restDateListFromSchedule.contains(f)).collect(Collectors.toList()); - } else { - realLeaveDateList = leaveDateList; + restDateList.addAll(restDateListFromSchedule); } - for (String leaveDate : realLeaveDateList) { + for (String leaveDate : leaveDateList) { //请假方式为“指定时间区间”时 if (leaveMode.equals(AskAndEvctionWayEnum.TIME_INTERVAL.getKey())) { simpleLeaveDetailItem = new HashMap<>(); @@ -376,15 +377,13 @@ public class AskForLeaveServiceImpl extends Service implements AskForLeaveServic simpleLeaveDetailItem.put("kssj", startTime); simpleLeaveDetailItem.put("jssj", endTime); //获取当天班次id - String currentDayBcId = Util.null2String(dateToBcxxMap.get(leaveDate)).split("-")[0]; - boolean currentDayHxbz = !"".equals(Util.null2String(dateToHxbzMap.get(leaveDate))); + String currentDayBcId = restDateList.contains(leaveDate) ? "" : Util.null2String(dateToBcxxMap.get(leaveDate)).split("-")[0]; //获取前一天班次id String yesterday = DateUtil.beforeDay(leaveDate,1); - String yesterdayBcId = Util.null2String(dateToBcxxMap.get(DateUtil.beforeDay(leaveDate, 1))).split("-")[0]; + String yesterdayBcId = restDateList.contains(yesterday) ? "" : Util.null2String(dateToBcxxMap.get(yesterday)).split("-")[0]; //获取次日班次id String nextDay = DateUtil.AfterDay(leaveDate,1); - String nextDayBcId = Util.null2String(dateToBcxxMap.get(nextDay)).split("-")[0]; - boolean nextDayHxbz = !"".equals(Util.null2String(dateToHxbzMap.get(nextDay))); + String nextDayBcId = restDateList.contains(nextDay) ? "" : Util.null2String(dateToBcxxMap.get(nextDay)).split("-")[0]; String sql = ""; List> bcDetailData; @@ -395,64 +394,41 @@ public class AskForLeaveServiceImpl extends Service implements AskForLeaveServic endDate = nextDay; simpleLeaveDetailItem.put("jsrq", nextDay); } - String toDealStartTime = startTime; + if (!"".equals(yesterdayBcId)) { - sql = "select id, bdlx, gsrq, kssj as dtkssj, jssj as dtjssj from uf_jcl_kq_bcxx_dt1 where mainid = " + yesterdayBcId + " order by gsrq desc, kssj desc"; + sql = "select id, bdlx, gsrq, kssj as dtkssj, jssj as dtjssj from uf_jcl_kq_bcxx_dt1 where mainid = " + yesterdayBcId; bcDetailData = DbTools.getSqlToList(sql); bcDetailData = bcDetailData.stream().filter(e -> countBdlxList.contains(Util.null2String(e.get("bdlx")))).collect(Collectors.toList()); //获取需要累计的班段时长区间和请假区间存在交集的分钟数 scMinutes = Utils.removeTime(leaveDate + " " + startTime, endDate + " " + endTime, bcDetailData, yesterday); - //更新可匹配请假时长开始时间 - String gsrq = Util.null2String(bcDetailData.get(0).get("gsrq")); - toDealStartTime = "2".equals(gsrq) && startTime.compareTo(Util.null2String(bcDetailData.get(0).get("dtjssj"))) < 0 - ? Util.null2String(bcDetailData.get(0).get("dtjssj")) : startTime; } if (!"".equals(currentDayBcId)) { - sql = "select id, bdlx, gsrq, kssj as dtkssj, jssj as dtjssj from uf_jcl_kq_bcxx_dt1 where mainid = " + currentDayBcId + " order by gsrq desc, kssj desc"; + sql = "select id, bdlx, gsrq, kssj as dtkssj, jssj as dtjssj from uf_jcl_kq_bcxx_dt1 where mainid = " + currentDayBcId; bcDetailData = DbTools.getSqlToList(sql); bcDetailData = bcDetailData.stream().filter(e -> countBdlxList.contains(Util.null2String(e.get("bdlx")))).collect(Collectors.toList()); //获取需要累计的班段时长区间和请假区间存在交集的分钟数 - scMinutes = scMinutes + Utils.removeTime(leaveDate + " " + toDealStartTime, endDate + " " + endTime, bcDetailData, leaveDate); - //更新可匹配请假时长开始时间 - String gsrq = Util.null2String(bcDetailData.get(0).get("gsrq")); - - if ("2".equals(gsrq)) { - leaveDate = nextDay; - toDealStartTime = Util.null2String(bcDetailData.get(0).get("dtjssj")); - } else if ("1".equals(gsrq)) { - toDealStartTime = toDealStartTime.compareTo(Util.null2String(bcDetailData.get(0).get("dtjssj"))) < 0 - ? Util.null2String(bcDetailData.get(0).get("dtjssj")) : toDealStartTime; - } - } else if (currentDayHxbz) { - scMinutes = scMinutes + DateUtil.getBetWeenMinutes(leaveDate + " " + toDealStartTime, nextDay + " " + "00:00"); + scMinutes = scMinutes + Utils.removeTime(leaveDate + " " + startTime, endDate + " " + endTime, bcDetailData, leaveDate); } if (!"".equals(nextDayBcId)) { - sql = "select id, bdlx, gsrq, kssj as dtkssj, jssj as dtjssj from uf_jcl_kq_bcxx_dt1 where mainid = " + nextDayBcId + " order by gsrq desc, kssj desc"; + sql = "select id, bdlx, gsrq, kssj as dtkssj, jssj as dtjssj from uf_jcl_kq_bcxx_dt1 where mainid = " + nextDayBcId; bcDetailData = DbTools.getSqlToList(sql); bcDetailData = bcDetailData.stream().filter(e -> countBdlxList.contains(Util.null2String(e.get("bdlx")))).collect(Collectors.toList()); //获取需要累计的班段时长区间和请假区间存在交集的分钟数 - scMinutes = scMinutes + Utils.removeTime(leaveDate + " " + toDealStartTime, endDate + " " + endTime, bcDetailData, nextDay); - - } else if (nextDayHxbz) { - if ("".equals(currentDayBcId)) { - scMinutes = scMinutes + DateUtil.getBetWeenMinutes(nextDay + " " + "00:00", nextDay + " " + endTime); - } else { - int nextDayMinutes = leaveDate.compareTo(nextDay) >= 0 ? DateUtil.getBetWeenMinutes(leaveDate + " " + toDealStartTime, nextDay + " " + endTime) - : DateUtil.getBetWeenMinutes(nextDay + " " + "00:00", nextDay + " " + endTime); - scMinutes = scMinutes + Math.max(nextDayMinutes, 0); - } + scMinutes = scMinutes + Utils.removeTime(leaveDate + " " + startTime, endDate + " " + endTime, bcDetailData, nextDay); } //增加加班计划中的数据,加班计划明细中的数据作为“加班计划”班段类型数据的补充 if (countBdlxList.contains(ClassSegmentTypeEnum.OVERTIME_PLAN.getKey())) { sql = "select b.jbry,b.ksrq,b.kssj,b.jblx,b.jsrq,b.jssj,b.jbsc,b.gsrq from uf_jcl_kq_jbjh a left join uf_jcl_kq_jbjh_dt1 b on a.id=b.mainid where b.jbry =? and b.ksrq>=? and b.jsrq<=? and (b.jbcx=0 or b.jbcx is null) and a.jlzt=1"; - List> overtimePlanList = DbTools.getSqlToList(sql, leaveEmpId, leaveDate, leaveDate); + List> overtimePlanList = DbTools.getSqlToList(sql, leaveEmpId, DateUtil.beforeDay(leaveDate,1), DateUtil.AfterDay(endDate,1)); int scMinutesInOvertimePlan = Utils.removeTimeWithOvertimePlan(leaveDate + " " + startTime, endDate + " " + endTime, overtimePlanList); scMinutes = scMinutes + scMinutesInOvertimePlan; } //组装初步的请假时长 simpleLeaveDetailItem.put("qjsc", String.format("%.2f", scMinutes / 60.0)); - simpleLeaveDetailList.add(simpleLeaveDetailItem); - } else if (leaveMode.equals(AskAndEvctionWayEnum.HOUR.getKey())) { + if (scMinutes > 0) { + simpleLeaveDetailList.add(simpleLeaveDetailItem); + } + } else if (leaveMode.equals(AskAndEvctionWayEnum.HOUR.getKey()) && !restDateList.contains(leaveDate)) { simpleLeaveDetailItem = new HashMap<>(); //组装初步的请假明细数据 simpleLeaveDetailItem.put("qjr", leaveEmpId); @@ -460,7 +436,7 @@ public class AskForLeaveServiceImpl extends Service implements AskForLeaveServic simpleLeaveDetailItem.put("jsrq", leaveDate); simpleLeaveDetailItem.put("qjsc", leaveDuration); simpleLeaveDetailList.add(simpleLeaveDetailItem); - } else if (leaveMode.equals(AskAndEvctionWayEnum.ALLDAY.getKey())) { + } else if (leaveMode.equals(AskAndEvctionWayEnum.ALLDAY.getKey()) && !restDateList.contains(leaveDate)) { simpleLeaveDetailItem = new HashMap<>(); //组装初步的请假明细数据 simpleLeaveDetailItem.put("qjr", leaveEmpId); @@ -468,7 +444,7 @@ public class AskForLeaveServiceImpl extends Service implements AskForLeaveServic simpleLeaveDetailItem.put("jsrq", leaveDate); simpleLeaveDetailItem.put("qtj", "1"); simpleLeaveDetailList.add(simpleLeaveDetailItem); - } else if (leaveMode.equals(AskAndEvctionWayEnum.HALFDAY.getKey())) { + } else if (leaveMode.equals(AskAndEvctionWayEnum.HALFDAY.getKey()) && !restDateList.contains(leaveDate)) { simpleLeaveDetailItem = new HashMap<>(); //组装初步的请假明细数据 simpleLeaveDetailItem.put("qjr", leaveEmpId); @@ -482,6 +458,83 @@ public class AskForLeaveServiceImpl extends Service implements AskForLeaveServic return simpleLeaveDetailList; } + /** + * @param leaveEmpIdList 请假人员id集合 + * @param leaveDateList 请假日期集合 + * @param removeNonWorkDayRange 是否移除非工作日时长 + * @param scheduleInfoMap 排班信息 + * @param restDayInfo 休息日信息 + * @param startDate 开始日期 + * @param endDate 结束日期 + * @param startTime 开始时间 + * @param endTime 结束时间 + * @param countBdlxList 收集需要统计时长的班段类型 + * @return 组装初步的请假明细,这边只处理“每天重复时段请假”未勾选,且请假方式为“指定时间区间” + */ + private List> createSimpleLeaveDetailListWithNoDaily(List leaveEmpIdList, List leaveDateList, boolean removeNonWorkDayRange, + Map>> scheduleInfoMap, Map> restDayInfo, + String startDate, String endDate, String startTime, String endTime, List countBdlxList) { + List> simpleLeaveDetailList = new ArrayList<>(); + Map simpleLeaveDetailItem; + String sql = ""; + List> bcDetailData; + String targetDateBcId = ""; + int scMinutes = 0; + leaveDateList.add(0, DateUtil.beforeDay(startDate,1)); + leaveDateList.add(DateUtil.AfterDay(endDate,1)); + for (String leaveEmpId : leaveEmpIdList) { + //需要自动移除日期区间内的休息日时,去除请假日期区间中的休息日 + List> scheduleInfoList = scheduleInfoMap.getOrDefault(leaveEmpId, new ArrayList<>()); + Map dateToBcxxMap = scheduleInfoList.stream().collect(Collectors.toMap(e->Util.null2String(e.get("bcrq")),e->Util.null2String(e.get("bcxx")))); + + List restDateList = new ArrayList<>(); + if (removeNonWorkDayRange) { + //排班结果中休息的日期 + List restDateListFromSchedule = scheduleInfoList.stream() + .filter(f -> Util.null2String(f.get("sfxx")).equals(CheckBoxEnum.CHECKED.getKey())) + .map(e -> Util.null2String(e.get("bcrq"))) + .collect(Collectors.toList()); + List allDateListFromSchedule = scheduleInfoList.stream().map(e -> Util.null2String(e.get("bcrq"))).collect(Collectors.toList()); + //排班结果中未出现的日期 + List nonSetDateListFromSchedule = leaveDateList.stream().filter(f -> !allDateListFromSchedule.contains(f)).collect(Collectors.toList()); + //企业日历中人员对应日期的休息日 + restDateList = restDayInfo.get(leaveEmpId); + //筛选排班信息无法辨别的日期,依靠企业日历的日期信息 + restDateList = restDateList.stream().filter(nonSetDateListFromSchedule::contains).collect(Collectors.toList()); + restDateList.addAll(restDateListFromSchedule); + } + simpleLeaveDetailItem = new HashMap<>(); + //组装初步的请假明细数据 + simpleLeaveDetailItem.put("qjr", leaveEmpId); + simpleLeaveDetailItem.put("ksrq", startDate); + simpleLeaveDetailItem.put("jsrq", endDate); + simpleLeaveDetailItem.put("kssj", startTime); + simpleLeaveDetailItem.put("jssj", endTime); + for (String date : leaveDateList) { + targetDateBcId = restDateList.contains(date) ? "" : Util.null2String(dateToBcxxMap.get(date)).split("-")[0]; + if (!"".equals(targetDateBcId)) { + sql = "select id, bdlx, gsrq, kssj as dtkssj, jssj as dtjssj from uf_jcl_kq_bcxx_dt1 where mainid = " + targetDateBcId; + bcDetailData = DbTools.getSqlToList(sql); + bcDetailData = bcDetailData.stream().filter(e -> countBdlxList.contains(Util.null2String(e.get("bdlx")))).collect(Collectors.toList()); + //获取需要累计的班段时长区间和请假区间存在交集的分钟数 + scMinutes = scMinutes + Utils.removeTime(startDate + " " + startTime, endDate + " " + endTime, bcDetailData, date); + } + } + //增加加班计划中的数据,加班计划明细中的数据作为“加班计划”班段类型数据的补充 + if (countBdlxList.contains(ClassSegmentTypeEnum.OVERTIME_PLAN.getKey())) { + sql = "select b.jbry,b.ksrq,b.kssj,b.jblx,b.jsrq,b.jssj,b.jbsc,b.gsrq from uf_jcl_kq_jbjh a left join uf_jcl_kq_jbjh_dt1 b on a.id=b.mainid where b.jbry =? and b.ksrq>=? and b.jsrq<=? and (b.jbcx=0 or b.jbcx is null) and a.jlzt=1"; + List> overtimePlanList = DbTools.getSqlToList(sql, leaveEmpId, DateUtil.beforeDay(startDate,1), DateUtil.AfterDay(endDate,1)); + int scMinutesInOvertimePlan = Utils.removeTimeWithOvertimePlan(startDate + " " + startTime, endDate + " " + endTime, overtimePlanList); + scMinutes = scMinutes + scMinutesInOvertimePlan; + } + //组装初步的请假时长 + simpleLeaveDetailItem.put("qjsc", String.format("%.2f", scMinutes / 60.0)); + if (scMinutes > 0) { + simpleLeaveDetailList.add(simpleLeaveDetailItem); + } + } + return simpleLeaveDetailList; + } /** * @param qjry 请假人员id * @param detailTableData 请假明细 @@ -534,7 +587,7 @@ public class AskForLeaveServiceImpl extends Service implements AskForLeaveServic * @param canUseCheckJqyeInfo 勾选的假期类型可使用的假期余额信息 * @param canUseFirstJqyeInfo 优先使用的假期类型可使用的假期余额信息 * @param editedUseJqed 触发接口前已编辑的假期额度使用信息 - * @param editedUseJqlxWithEmp 触发接口前已编辑的假期类型id_人员id条件下已使用的时长 + * @param editedUseJqlxWithEmp 触发接口前,本次提交的日期集合中已编辑的假期类型id_人员id条件下已使用的时长 * @param leaveDetailList 请假明细集合 * @param checkItemId 勾选的假期类型id * @param firstItemId 优先使用的假期类型id @@ -566,12 +619,14 @@ public class AskForLeaveServiceImpl extends Service implements AskForLeaveServic totalLeaveDuration = totalLeaveDuration + leaveDuration; } //减去编辑已使用时长 - Double checkItemEditedUseSc = editedUseJqlxWithEmp.get(checkItemId + "_" + empId); - Double firstItemEditedUseSc = editedUseJqlxWithEmp.get(firstItemId + "_" + empId); - totalLeaveDuration = Utils.subtract(totalLeaveDuration, checkItemEditedUseSc == null ? 0 : checkItemEditedUseSc); - totalLeaveDuration = Utils.subtract(totalLeaveDuration, firstItemEditedUseSc == null ? 0 : firstItemEditedUseSc); - //如果总时长为0,则退出 - if (totalLeaveDuration <= 0) { + Double checkItemEditedUseSc = editedUseJqlxWithEmp.getOrDefault(checkItemId + "_" + empId, (double) 0); + Double firstItemEditedUseSc = editedUseJqlxWithEmp.getOrDefault(firstItemId + "_" + empId, (double) 0); +// totalLeaveDuration = Utils.subtract(totalLeaveDuration, checkItemEditedUseSc == null ? 0 : checkItemEditedUseSc); +// totalLeaveDuration = Utils.subtract(totalLeaveDuration, firstItemEditedUseSc == null ? 0 : firstItemEditedUseSc); +// //如果总时长为0,则退出 + if (Utils.add(checkItemEditedUseSc, firstItemEditedUseSc) > 0) { + String message = empName + "在该请假类型的本次请假日期范围内,已存在开始日期相同的请假明细,请重新选择日期范围!"; + errorMessage.add(message); return result; } Map leaveDurationMap = new HashMap<>(); diff --git a/src/com/engine/jucailinkq/attendance/workflow/web/AllowanceApi.java b/src/com/engine/jucailinkq/attendance/workflow/web/AllowanceApi.java index c0a8768..75fc736 100644 --- a/src/com/engine/jucailinkq/attendance/workflow/web/AllowanceApi.java +++ b/src/com/engine/jucailinkq/attendance/workflow/web/AllowanceApi.java @@ -5,11 +5,15 @@ import com.engine.jucailinkq.attendance.workflow.service.AllowanceService; import com.engine.jucailinkq.attendance.workflow.service.impl.AllowanceServiceImpl; import com.engine.common.util.ParamUtil; import com.engine.common.util.ServiceUtil; +import com.engine.jucailinkq.common.util.ApiReturnTools; +import com.engine.jucailinkq.common.util.ResponseResult; +import lombok.extern.slf4j.Slf4j; import weaver.hrm.HrmUserVarify; import weaver.hrm.User; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; +import javax.ws.rs.GET; import javax.ws.rs.POST; import javax.ws.rs.Path; import javax.ws.rs.Produces; @@ -23,6 +27,7 @@ import java.util.Map; * @Description: 出勤津贴 * @Date: 2024/4/9 **/ +@Slf4j public class AllowanceApi { private AllowanceService getAllowanceService(User user) { @@ -44,4 +49,24 @@ public class AllowanceApi { apidatas = getAllowanceService(user).addAllowanceRecords(ParamUtil.request2Map(request)); return JSONObject.toJSONString(apidatas); } + + /** + * 获得津贴记录列表数据用于出勤津贴确认流程 + * @param request + * @param response + * @return + */ + @GET + @Path("/getAllowanceRecordList") + @Produces(MediaType.APPLICATION_JSON) + public String getAllowanceRecordList(@Context HttpServletRequest request, @Context HttpServletResponse response) { + try { + User user = HrmUserVarify.getUser(request, response); + Map param = ParamUtil.request2Map(request); + return new ResponseResult, Map>(user).run(getAllowanceService(user) :: getAllowanceRecordList,param); + }catch (Exception e){ + log.error("execute fail,catch error: [{}]",e); + return ApiReturnTools.error("500","getAllowanceRecordList error"); + } + } } diff --git a/src/com/engine/jucailinkq/common/util/DateUtil.java b/src/com/engine/jucailinkq/common/util/DateUtil.java index bceda67..6929f47 100644 --- a/src/com/engine/jucailinkq/common/util/DateUtil.java +++ b/src/com/engine/jucailinkq/common/util/DateUtil.java @@ -36,7 +36,10 @@ public class DateUtil { return localDateTime.minusMonths(month).format(yyyyMMdd); } - + public static String beforeMonth(String time){ + LocalDateTime localDateTime = DateUtil.getTime(time); + return localDateTime.minusMonths(1).format(yyyyMM); + } public static String lastMonth(String time){ LocalDateTime localDateTime = DateUtil.getTime(time); @@ -94,6 +97,9 @@ public class DateUtil { return localDateTime.format(yyyyMM); } + public static String getCurrentMonth(){ + return LocalDateTime.now().format(yyyyMM); + } public static String getCurrentDate(){ return LocalDateTime.now().format(yyyyMMdd); }