修复"根据节假日类别查询相应的休假"接口的Bug

This commit is contained in:
liuzongkun999
2025-02-23 20:46:26 +08:00
parent de1e47ae06
commit 46d601745f

View File

@@ -138,23 +138,30 @@ public class SysOaHolidayServiceImpl implements ISysOaHolidayService {
// 1、准备容器集合 List用于存储最终结果、Map用于存储合并后的休假天数 // 1、准备容器集合 List用于存储最终结果、Map用于存储合并后的休假天数
List<SysOaHolidayVo> resultList = new ArrayList<>(); List<SysOaHolidayVo> resultList = new ArrayList<>();
Map<String, Integer> mergedMap = new HashMap<>(); Map<Long, Integer> mergedMap = new HashMap<>();
for (SysOaHolidayVo raw : rawList) { for (SysOaHolidayVo raw : rawList) {
if (resultList.isEmpty() || !raw.getName().equals(resultList.get(resultList.size() - 1).getName())) { if (resultList.isEmpty() || !raw.getName().equals(resultList.get(resultList.size() - 1).getName())) {
// 如果当前休假名称与结果列表中的最后一个休假名称不一致,则将当前休假添加到结果列表中 // 如果当前休假名称与结果列表中的最后一个休假名称不一致,则将当前休假添加到结果列表中
resultList.add(raw); resultList.add(raw);
// 存放休假天数 // 存放休假天数
mergedMap.put(raw.getName(),1); mergedMap.put(raw.getHolidayId(),1);
} else { } else {
// 如果当前休假名称与结果列表中的最后一个休假名称一致,则将当前休假的休假天数加一 // 如果当前休假名称与结果列表中的最后一个休假名称一致,则将当前休假的休假天数加一
// 修改map集合里面对应的休假天数 // 修改map集合里面对应的休假天数
mergedMap.compute(raw.getName(), (k, days) -> days + 1);
// 为前后天关系则
if(raw.getHolidayTime() .getTime() - resultList.get(resultList.size() - 1).getHolidayTime().getTime() == 86400000L * mergedMap.get(resultList.get(resultList.size() - 1).getHolidayId())) {
mergedMap.compute(resultList.get(resultList.size() - 1).getHolidayId(), (k, days) -> days + 1);
} else {
resultList.add(raw);
mergedMap.put(raw.getHolidayId(),1);
}
} }
} }
List<SysOaHolidayListVo> VoList = new ArrayList<>(); List<SysOaHolidayListVo> VoList = new ArrayList<>();
// 2、遍历结果列表将休假天数添加到结果列表中 // 2、遍历结果列表将休假天数添加到结果列表中
for (SysOaHolidayVo result : resultList) { for (SysOaHolidayVo result : resultList) {
Integer days = mergedMap.get(result.getName()); Integer days = mergedMap.get(result.getHolidayId());
// 计算休假结束时间 // 计算休假结束时间
Date endDate = DateUtils.addDays(result.getHolidayTime(), days - 1); Date endDate = DateUtils.addDays(result.getHolidayTime(), days - 1);
VoList.add(new SysOaHolidayListVo(result.getHolidayId(), result.getName(), result.getHolidayTime(), endDate, days, result.getType())); VoList.add(new SysOaHolidayListVo(result.getHolidayId(), result.getName(), result.getHolidayTime(), endDate, days, result.getType()));