diff --git a/ruoyi-oa/src/main/java/com/ruoyi/oa/controller/SysOaHolidayController.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/controller/SysOaHolidayController.java index 90bdbb3..06b02ec 100644 --- a/ruoyi-oa/src/main/java/com/ruoyi/oa/controller/SysOaHolidayController.java +++ b/ruoyi-oa/src/main/java/com/ruoyi/oa/controller/SysOaHolidayController.java @@ -5,6 +5,10 @@ import java.util.List; import java.util.Arrays; import java.util.concurrent.TimeUnit; +import com.alibaba.excel.util.DateUtils; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.ruoyi.oa.domain.vo.SysOaHolidayListVo; import lombok.RequiredArgsConstructor; import javax.servlet.http.HttpServletResponse; import javax.validation.constraints.*; @@ -108,30 +112,33 @@ public class SysOaHolidayController extends BaseController { } /** - * 查询具体日期返回对象 + * 查询指定日期的休假信息 */ @GetMapping("/queryHolidayByDate") public R queryHolidayByDate(@NotBlank(message = "日期不能为空") Date date){ return R.ok(iSysOaHolidayService.queryHolidayByDate(date)); } /** - * 根据节假日类别查询 + * 根据节假日类别查询相应的休假 */ @GetMapping("/queryHolidayByType") - public R> queryHolidayByType(@NotNull(message = "类别不能为空") Integer type){ - SysOaHolidayBo bo = new SysOaHolidayBo(); - bo.setType(type); - return R.ok(iSysOaHolidayService.queryList(bo)); + public R> queryHolidayByType(@NotNull(message = "类别不能为空") Integer type){ + return R.ok(iSysOaHolidayService.queryHolidayByType(type)); } /** * 查询当前月的所有休假 */ - @GetMapping("/queryHolidayByMonth") - public R> queryHolidayByMonth(){ - SysOaHolidayBo bo = new SysOaHolidayBo(); - Date date = new Date(); - bo.setHolidayTime(date); - return R.ok(iSysOaHolidayService.queryList(bo)); + @GetMapping("/queryHolidayNowMonth") + public R> queryHolidayNowMonth(){ + return R.ok(iSysOaHolidayService.queryHolidayNowMonth()); + } + + /** + * 更新一段时间的休假状态 + */ + @PutMapping("/updateHolidayStatusByDate") + public R updateHolidayStatusByDate(Integer type, @NotNull(message = "起始日期不能为空") Date startDate, @NotNull(message = "结束日期不能为空")Date endDate){ + return toAjax(iSysOaHolidayService.updateHolidayStatusByDate(type, startDate, endDate)); } } diff --git a/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/bo/SysOaHolidayBo.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/bo/SysOaHolidayBo.java index 6d854e8..9bc6826 100644 --- a/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/bo/SysOaHolidayBo.java +++ b/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/bo/SysOaHolidayBo.java @@ -26,31 +26,26 @@ public class SysOaHolidayBo extends BaseEntity { /** * 主键id */ - @NotNull(message = "主键id不能为空", groups = { EditGroup.class }) private Long holidayId; /** * 0正常1周日2节假日3调休 */ - @NotNull(message = "0正常1周日2节假日3调休不能为空", groups = { AddGroup.class, EditGroup.class }) private Integer type; /** * 假期日期 */ - @NotNull(message = "假期日期不能为空", groups = { AddGroup.class, EditGroup.class }) private Date holidayTime; /** * 假期名称(如果是周日,值为休息日) */ - @NotBlank(message = "假期名称(如果是周日,值为休息日)不能为空", groups = { AddGroup.class, EditGroup.class }) private String name; /** * 备注 */ - @NotBlank(message = "备注不能为空", groups = { AddGroup.class, EditGroup.class }) private String remark; diff --git a/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/vo/SysOaHolidayListVo.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/vo/SysOaHolidayListVo.java new file mode 100644 index 0000000..10a2fed --- /dev/null +++ b/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/vo/SysOaHolidayListVo.java @@ -0,0 +1,24 @@ +package com.ruoyi.oa.domain.vo; + +import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; +import lombok.AllArgsConstructor; +import lombok.Data; + +import java.util.Date; + +@Data +@AllArgsConstructor +public class SysOaHolidayListVo { + // 休假id + private Long holidayId; + // 休假名称 + private String name; + // 休假开始时间 + private Date startDate; + // 休假结束时间 + private Date endDate; + // 休假天数 + private Integer days; + // 休假类别 + private Integer type; +} diff --git a/ruoyi-oa/src/main/java/com/ruoyi/oa/service/ISysOaHolidayService.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/service/ISysOaHolidayService.java index 5c3fd03..62e5671 100644 --- a/ruoyi-oa/src/main/java/com/ruoyi/oa/service/ISysOaHolidayService.java +++ b/ruoyi-oa/src/main/java/com/ruoyi/oa/service/ISysOaHolidayService.java @@ -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 queryHolidayByType(@NotNull(message = "类别不能为空") Integer type); + + /** + * 查询当前月的所有休假 + */ + List queryHolidayNowMonth(); + + /** + * 更新一段时间的休假状态 + */ + Boolean updateHolidayStatusByDate(Integer type, Date startDate, Date endDate); + + } diff --git a/ruoyi-oa/src/main/java/com/ruoyi/oa/service/impl/SysOaHolidayServiceImpl.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/service/impl/SysOaHolidayServiceImpl.java index c49a3e7..c4a49da 100644 --- a/ruoyi-oa/src/main/java/com/ruoyi/oa/service/impl/SysOaHolidayServiceImpl.java +++ b/ruoyi-oa/src/main/java/com/ruoyi/oa/service/impl/SysOaHolidayServiceImpl.java @@ -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 queryHolidayByType(Integer type) { + LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); + lqw.eq(SysOaHoliday::getType, type); + lqw.orderByAsc(SysOaHoliday::getHolidayTime); + //一、查询出所有该类型的休假 + List rawList = baseMapper.selectVoList(lqw); + //二、对字段name一样的休假进行合并,并计算休假天数 + + // 1、准备容器集合 List用于存储最终结果、Map用于存储合并后的休假天数 + List resultList = new ArrayList<>(); + Map 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 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 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 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 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; + } + + + + }