已构建接口添加业务逻辑:

1、查询当前月的所有休假
2、根据节假日类别查询
3、查询具体日期返回对象
加增完整接口:
更新一段时间的休假状态(批量修改状态)
This commit is contained in:
liuzongkun999
2025-02-21 21:10:54 +08:00
parent 6716d289cb
commit e41c27a06b
5 changed files with 146 additions and 22 deletions

View File

@@ -1,12 +1,13 @@
package com.ruoyi.oa.service;
import com.ruoyi.oa.domain.SysOaHoliday;
import com.ruoyi.oa.domain.vo.SysOaHolidayListVo;
import com.ruoyi.oa.domain.vo.SysOaHolidayVo;
import com.ruoyi.oa.domain.bo.SysOaHolidayBo;
import com.ruoyi.common.core.page.TableDataInfo;
import com.ruoyi.common.core.domain.PageQuery;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import java.util.Collection;
import java.util.Date;
import java.util.List;
@@ -53,4 +54,21 @@ public interface ISysOaHolidayService {
* 查询指定日期的休假信息
*/
SysOaHolidayVo queryHolidayByDate(@NotBlank(message = "日期不能为空") Date date);
/**
* 根据节假日类别查询相应的休假
*/
List<SysOaHolidayListVo> queryHolidayByType(@NotNull(message = "类别不能为空") Integer type);
/**
* 查询当前月的所有休假
*/
List<SysOaHolidayVo> queryHolidayNowMonth();
/**
* 更新一段时间的休假状态
*/
Boolean updateHolidayStatusByDate(Integer type, Date startDate, Date endDate);
}

View File

@@ -1,12 +1,14 @@
package com.ruoyi.oa.service.impl;
import cn.hutool.core.bean.BeanUtil;
import com.ruoyi.common.utils.DateUtils;
import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.common.core.page.TableDataInfo;
import com.ruoyi.common.core.domain.PageQuery;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.ruoyi.oa.domain.vo.SysOaHolidayListVo;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import com.ruoyi.oa.domain.bo.SysOaHolidayBo;
@@ -15,10 +17,10 @@ import com.ruoyi.oa.domain.SysOaHoliday;
import com.ruoyi.oa.mapper.SysOaHolidayMapper;
import com.ruoyi.oa.service.ISysOaHolidayService;
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.Collection;
import java.time.LocalDate;
import java.time.YearMonth;
import java.time.ZoneId;
import java.util.*;
/**
* 休假管理Service业务层处理
@@ -119,4 +121,82 @@ public class SysOaHolidayServiceImpl implements ISysOaHolidayService {
lqw.eq(SysOaHoliday::getHolidayTime, date);
return baseMapper.selectVoOne(lqw);
}
/**
* 根据节假日类别查询相应的休假
*/
@Override
public List<SysOaHolidayListVo> queryHolidayByType(Integer type) {
LambdaQueryWrapper<SysOaHoliday> lqw = Wrappers.lambdaQuery();
lqw.eq(SysOaHoliday::getType, type);
lqw.orderByAsc(SysOaHoliday::getHolidayTime);
//一、查询出所有该类型的休假
List<SysOaHolidayVo> rawList = baseMapper.selectVoList(lqw);
//二、对字段name一样的休假进行合并并计算休假天数
// 1、准备容器集合 List用于存储最终结果、Map用于存储合并后的休假天数
List<SysOaHolidayVo> resultList = new ArrayList<>();
Map<String, Integer> mergedMap = new HashMap<>();
for (SysOaHolidayVo raw : rawList) {
if (resultList.isEmpty() || !raw.getName().equals(resultList.get(resultList.size() - 1).getName())) {
// 如果当前休假名称与结果列表中的最后一个休假名称不一致,则将当前休假添加到结果列表中
resultList.add(raw);
// 存放休假天数
mergedMap.put(raw.getName(),1);
} else {
// 如果当前休假名称与结果列表中的最后一个休假名称一致,则将当前休假的休假天数加一
// 修改map集合里面对应的休假天数
mergedMap.compute(raw.getName(), (k, days) -> days + 1);
}
}
List<SysOaHolidayListVo> VoList = new ArrayList<>();
// 2、遍历结果列表将休假天数添加到结果列表中
for (SysOaHolidayVo result : resultList) {
Integer days = mergedMap.get(result.getName());
// 计算休假结束时间
Date endDate = DateUtils.addDays(result.getHolidayTime(), days - 1);
VoList.add(new SysOaHolidayListVo(result.getHolidayId(), result.getName(), result.getHolidayTime(), endDate, days, result.getType()));
}
return VoList;
}
/**
* 查询当前月的所有休假
*/
@Override
public List<SysOaHolidayVo> queryHolidayNowMonth() {
//一、获取当前日期
LocalDate now = LocalDate.now();
YearMonth yearMonth = YearMonth.of(now.getYear(), now.getMonthValue());
LocalDate firstDayOfMonth = yearMonth.atDay(1);
LocalDate lastDayOfMonth = yearMonth.atEndOfMonth();
//二、生成Date格式类型的首日与末日
Date firstDay = Date.from(firstDayOfMonth.atStartOfDay(ZoneId.systemDefault()).toInstant());
Date lastDay = Date.from(lastDayOfMonth.atStartOfDay(ZoneId.systemDefault()).toInstant());
//三、查询当月的所有休假信息
LambdaQueryWrapper<SysOaHoliday> queryWrapper = Wrappers.lambdaQuery();
queryWrapper.between(SysOaHoliday::getHolidayTime, firstDay, lastDay);
// 升序排序
queryWrapper.orderByAsc(SysOaHoliday::getHolidayTime);
return baseMapper.selectVoList(queryWrapper);
}
/**
* 更新一段时间的休假状态
*/
@Override
public Boolean updateHolidayStatusByDate(Integer type, Date startDate, Date endDate) {
LambdaQueryWrapper<SysOaHoliday> lqw = Wrappers.lambdaQuery();
lqw.between(SysOaHoliday::getHolidayTime, startDate, endDate);
//生成一个新实体去更新状态
SysOaHoliday entity = new SysOaHoliday();
entity.setType(type);
int update = baseMapper.update(entity, lqw);
return update > 0;
}
}