已构建接口添加业务逻辑:
1、查询当前月的所有休假 2、根据节假日类别查询 3、查询具体日期返回对象 加增完整接口: 更新一段时间的休假状态(批量修改状态)
This commit is contained in:
@@ -5,6 +5,10 @@ import java.util.List;
|
|||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
import java.util.concurrent.TimeUnit;
|
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 lombok.RequiredArgsConstructor;
|
||||||
import javax.servlet.http.HttpServletResponse;
|
import javax.servlet.http.HttpServletResponse;
|
||||||
import javax.validation.constraints.*;
|
import javax.validation.constraints.*;
|
||||||
@@ -108,30 +112,33 @@ public class SysOaHolidayController extends BaseController {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 查询具体日期返回对象
|
* 查询指定日期的休假信息
|
||||||
*/
|
*/
|
||||||
@GetMapping("/queryHolidayByDate")
|
@GetMapping("/queryHolidayByDate")
|
||||||
public R<SysOaHolidayVo> queryHolidayByDate(@NotBlank(message = "日期不能为空") Date date){
|
public R<SysOaHolidayVo> queryHolidayByDate(@NotBlank(message = "日期不能为空") Date date){
|
||||||
return R.ok(iSysOaHolidayService.queryHolidayByDate(date));
|
return R.ok(iSysOaHolidayService.queryHolidayByDate(date));
|
||||||
}
|
}
|
||||||
/**
|
/**
|
||||||
* 根据节假日类别查询
|
* 根据节假日类别查询相应的休假
|
||||||
*/
|
*/
|
||||||
@GetMapping("/queryHolidayByType")
|
@GetMapping("/queryHolidayByType")
|
||||||
public R<List<SysOaHolidayVo>> queryHolidayByType(@NotNull(message = "类别不能为空") Integer type){
|
public R<List<SysOaHolidayListVo>> queryHolidayByType(@NotNull(message = "类别不能为空") Integer type){
|
||||||
SysOaHolidayBo bo = new SysOaHolidayBo();
|
return R.ok(iSysOaHolidayService.queryHolidayByType(type));
|
||||||
bo.setType(type);
|
|
||||||
return R.ok(iSysOaHolidayService.queryList(bo));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 查询当前月的所有休假
|
* 查询当前月的所有休假
|
||||||
*/
|
*/
|
||||||
@GetMapping("/queryHolidayByMonth")
|
@GetMapping("/queryHolidayNowMonth")
|
||||||
public R<List<SysOaHolidayVo>> queryHolidayByMonth(){
|
public R<List<SysOaHolidayVo>> queryHolidayNowMonth(){
|
||||||
SysOaHolidayBo bo = new SysOaHolidayBo();
|
return R.ok(iSysOaHolidayService.queryHolidayNowMonth());
|
||||||
Date date = new Date();
|
}
|
||||||
bo.setHolidayTime(date);
|
|
||||||
return R.ok(iSysOaHolidayService.queryList(bo));
|
/**
|
||||||
|
* 更新一段时间的休假状态
|
||||||
|
*/
|
||||||
|
@PutMapping("/updateHolidayStatusByDate")
|
||||||
|
public R<Void> updateHolidayStatusByDate(Integer type, @NotNull(message = "起始日期不能为空") Date startDate, @NotNull(message = "结束日期不能为空")Date endDate){
|
||||||
|
return toAjax(iSysOaHolidayService.updateHolidayStatusByDate(type, startDate, endDate));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -26,31 +26,26 @@ public class SysOaHolidayBo extends BaseEntity {
|
|||||||
/**
|
/**
|
||||||
* 主键id
|
* 主键id
|
||||||
*/
|
*/
|
||||||
@NotNull(message = "主键id不能为空", groups = { EditGroup.class })
|
|
||||||
private Long holidayId;
|
private Long holidayId;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 0正常1周日2节假日3调休
|
* 0正常1周日2节假日3调休
|
||||||
*/
|
*/
|
||||||
@NotNull(message = "0正常1周日2节假日3调休不能为空", groups = { AddGroup.class, EditGroup.class })
|
|
||||||
private Integer type;
|
private Integer type;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 假期日期
|
* 假期日期
|
||||||
*/
|
*/
|
||||||
@NotNull(message = "假期日期不能为空", groups = { AddGroup.class, EditGroup.class })
|
|
||||||
private Date holidayTime;
|
private Date holidayTime;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 假期名称(如果是周日,值为休息日)
|
* 假期名称(如果是周日,值为休息日)
|
||||||
*/
|
*/
|
||||||
@NotBlank(message = "假期名称(如果是周日,值为休息日)不能为空", groups = { AddGroup.class, EditGroup.class })
|
|
||||||
private String name;
|
private String name;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 备注
|
* 备注
|
||||||
*/
|
*/
|
||||||
@NotBlank(message = "备注不能为空", groups = { AddGroup.class, EditGroup.class })
|
|
||||||
private String remark;
|
private String remark;
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -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;
|
||||||
|
}
|
||||||
@@ -1,12 +1,13 @@
|
|||||||
package com.ruoyi.oa.service;
|
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.vo.SysOaHolidayVo;
|
||||||
import com.ruoyi.oa.domain.bo.SysOaHolidayBo;
|
import com.ruoyi.oa.domain.bo.SysOaHolidayBo;
|
||||||
import com.ruoyi.common.core.page.TableDataInfo;
|
import com.ruoyi.common.core.page.TableDataInfo;
|
||||||
import com.ruoyi.common.core.domain.PageQuery;
|
import com.ruoyi.common.core.domain.PageQuery;
|
||||||
|
|
||||||
import javax.validation.constraints.NotBlank;
|
import javax.validation.constraints.NotBlank;
|
||||||
|
import javax.validation.constraints.NotNull;
|
||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
@@ -53,4 +54,21 @@ public interface ISysOaHolidayService {
|
|||||||
* 查询指定日期的休假信息
|
* 查询指定日期的休假信息
|
||||||
*/
|
*/
|
||||||
SysOaHolidayVo queryHolidayByDate(@NotBlank(message = "日期不能为空") Date date);
|
SysOaHolidayVo queryHolidayByDate(@NotBlank(message = "日期不能为空") Date date);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 根据节假日类别查询相应的休假
|
||||||
|
*/
|
||||||
|
List<SysOaHolidayListVo> queryHolidayByType(@NotNull(message = "类别不能为空") Integer type);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 查询当前月的所有休假
|
||||||
|
*/
|
||||||
|
List<SysOaHolidayVo> queryHolidayNowMonth();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 更新一段时间的休假状态
|
||||||
|
*/
|
||||||
|
Boolean updateHolidayStatusByDate(Integer type, Date startDate, Date endDate);
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,12 +1,14 @@
|
|||||||
package com.ruoyi.oa.service.impl;
|
package com.ruoyi.oa.service.impl;
|
||||||
|
|
||||||
import cn.hutool.core.bean.BeanUtil;
|
import cn.hutool.core.bean.BeanUtil;
|
||||||
|
import com.ruoyi.common.utils.DateUtils;
|
||||||
import com.ruoyi.common.utils.StringUtils;
|
import com.ruoyi.common.utils.StringUtils;
|
||||||
import com.ruoyi.common.core.page.TableDataInfo;
|
import com.ruoyi.common.core.page.TableDataInfo;
|
||||||
import com.ruoyi.common.core.domain.PageQuery;
|
import com.ruoyi.common.core.domain.PageQuery;
|
||||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||||
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
||||||
|
import com.ruoyi.oa.domain.vo.SysOaHolidayListVo;
|
||||||
import lombok.RequiredArgsConstructor;
|
import lombok.RequiredArgsConstructor;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
import com.ruoyi.oa.domain.bo.SysOaHolidayBo;
|
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.mapper.SysOaHolidayMapper;
|
||||||
import com.ruoyi.oa.service.ISysOaHolidayService;
|
import com.ruoyi.oa.service.ISysOaHolidayService;
|
||||||
|
|
||||||
import java.util.Date;
|
import java.time.LocalDate;
|
||||||
import java.util.List;
|
import java.time.YearMonth;
|
||||||
import java.util.Map;
|
import java.time.ZoneId;
|
||||||
import java.util.Collection;
|
import java.util.*;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 休假管理Service业务层处理
|
* 休假管理Service业务层处理
|
||||||
@@ -119,4 +121,82 @@ public class SysOaHolidayServiceImpl implements ISysOaHolidayService {
|
|||||||
lqw.eq(SysOaHoliday::getHolidayTime, date);
|
lqw.eq(SysOaHoliday::getHolidayTime, date);
|
||||||
return baseMapper.selectVoOne(lqw);
|
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;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user