Browse Source

Merge branch 'dev' of https://git.yingcaibx.com/tl/api into dev

brealinxx 9 tháng trước cách đây
mục cha
commit
1ff83a8971

+ 66 - 0
src/main/java/com/xjrsoft/common/utils/HolidayUtil.java

@@ -0,0 +1,66 @@
+package com.xjrsoft.common.utils;
+
+import org.apache.http.HttpEntity;
+import org.apache.http.HttpStatus;
+import org.apache.http.client.methods.CloseableHttpResponse;
+import org.apache.http.client.methods.HttpGet;
+import org.apache.http.impl.client.CloseableHttpClient;
+import org.apache.http.impl.client.HttpClientBuilder;
+import org.apache.http.util.EntityUtils;
+
+import java.io.IOException;
+
+/**
+ * 获取法定节假日
+ */
+public class HolidayUtil {
+    public static String getMonth(String year, String month){
+        String result = "fail";
+        String query;
+        query = year+"年"+month+"月";
+        long timeMillis = System.currentTimeMillis();
+        String apiUrl = "https://sp1.baidu.com/8aQDcjqpAAV3otqbppnN2DJv/api.php?tn=wisetpl&format=json&query="+query+"&co=&resource_id=39043&t="+ timeMillis +"&cb=op_aladdin_callback"+timeMillis;
+        CloseableHttpClient httpclient = null;
+        CloseableHttpResponse hResponse = null;
+        try {
+            HttpGet method = new HttpGet(apiUrl);
+            httpclient = HttpClientBuilder.create().build();
+            method.setHeader("User-Agent","Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36");
+            hResponse = httpclient.execute(method);
+            HttpEntity repEntity = hResponse.getEntity();
+            int statusCode = hResponse.getStatusLine().getStatusCode();
+            if (statusCode != HttpStatus.SC_OK) {
+                method.abort();
+            }
+            String content = EntityUtils.toString(repEntity, "UTF-8");
+            result = reParseJson(content);
+            return  result;
+        } catch (Exception e) {
+            throw new Exception(e);
+        }finally {
+            if (hResponse != null) {
+                try {
+                    hResponse.close();
+                } catch (IOException e) {
+                    e.printStackTrace();
+                }
+            }
+            if (httpclient != null) {
+                try {
+                    httpclient.close();
+                } catch (IOException e) {
+                }
+            }
+            return result;
+        }
+    }
+
+    /**
+     * 解析json
+     */
+    public static String  reParseJson(String  old){
+        int start = old.indexOf("{");
+        int end = old.lastIndexOf("}");
+        return old.substring(start,end+1);
+    }
+}

+ 137 - 0
src/main/java/com/xjrsoft/module/holiday/controller/HolidayDateController.java

@@ -0,0 +1,137 @@
+package com.xjrsoft.module.holiday.controller;
+
+import cn.hutool.core.bean.BeanUtil;
+import cn.hutool.core.util.ObjectUtil;
+import cn.hutool.core.util.StrUtil;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.xjrsoft.common.constant.GlobalConstant;
+import com.baomidou.mybatisplus.core.toolkit.StringPool;
+import com.xjrsoft.common.page.ConventPage;
+import com.xjrsoft.common.page.PageOutput;
+import com.xjrsoft.common.model.result.RT;
+import com.xjrsoft.common.utils.VoToColumnUtil;
+import com.xjrsoft.module.base.entity.BaseClass;
+import com.xjrsoft.module.holiday.dto.*;
+import cn.dev33.satoken.annotation.SaCheckPermission;
+import com.alibaba.excel.EasyExcel;
+import org.springframework.web.multipart.MultipartFile;
+
+import java.io.IOException;
+
+import com.alibaba.excel.support.ExcelTypeEnum;
+import org.springframework.http.ResponseEntity;
+
+import java.io.ByteArrayOutputStream;
+import java.text.ParseException;
+import java.util.ArrayList;
+
+import com.xjrsoft.module.holiday.entity.HolidayDate;
+import com.xjrsoft.module.holiday.service.IHolidayDateService;
+import com.xjrsoft.module.holiday.vo.HolidayDateListVo;
+import com.xjrsoft.module.holiday.vo.HolidayDatePageVo;
+
+import com.xjrsoft.module.holiday.vo.HolidayDateVo;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.AllArgsConstructor;
+import org.springframework.web.bind.annotation.*;
+
+import javax.validation.Valid;
+import javax.validation.constraints.NotNull;
+import java.util.List;
+
+/**
+ * @title:
+ * @Author fanxp
+ * @Date: 2024-03-26
+ * @Version 1.0
+ */
+@RestController
+@RequestMapping("/holiday" + "/holidayDate")
+@Api(value = "/holiday" + "/holidayDate", tags = "节假日代码")
+@AllArgsConstructor
+public class HolidayDateController {
+
+
+    private final IHolidayDateService holidayDateService;
+
+    @GetMapping(value = "/list")
+    @ApiOperation(value = "列表(不分页)")
+    @SaCheckPermission("holidaydate:detail")
+    public RT<List<HolidayDateListVo>> list(@Valid HolidayDateListDto dto) {
+
+        LambdaQueryWrapper<HolidayDate> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper
+                .eq(HolidayDate::getDeleteStatus,0)
+                .eq(ObjectUtil.isNotNull(dto.getYear()), HolidayDate::getYear, dto.getYear())
+                .eq(ObjectUtil.isNotNull(dto.getMonth()), HolidayDate::getYear, dto.getMonth())
+                .eq(ObjectUtil.isNotNull(dto.getDay()), HolidayDate::getYear, dto.getDay())
+                .orderByAsc(HolidayDate::getDate)
+                .select(HolidayDate.class, x -> VoToColumnUtil.fieldsToColumns(HolidayDateListVo.class).contains(x.getProperty()));
+
+        List<HolidayDate> list = holidayDateService.list(queryWrapper);
+        List<HolidayDateListVo> listVos = BeanUtil.copyToList(list, HolidayDateListVo.class);
+        return RT.ok(listVos);
+    }
+
+    @GetMapping(value = "/page")
+    @ApiOperation(value = "列表(分页)")
+    @SaCheckPermission("holidaydate:detail")
+    public RT<PageOutput<HolidayDatePageVo>> page(@Valid HolidayDatePageDto dto) {
+
+        LambdaQueryWrapper<HolidayDate> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper
+                .eq(HolidayDate::getDeleteStatus,0)
+                .orderByAsc(HolidayDate::getDate)
+                .select(HolidayDate.class, x -> VoToColumnUtil.fieldsToColumns(HolidayDatePageVo.class).contains(x.getProperty()));
+        IPage<HolidayDate> page = holidayDateService.page(ConventPage.getPage(dto), queryWrapper);
+        PageOutput<HolidayDatePageVo> pageOutput = ConventPage.getPageOutput(page, HolidayDatePageVo.class);
+        return RT.ok(pageOutput);
+    }
+
+    @GetMapping(value = "/info")
+    @ApiOperation(value = "根据id查询信息")
+    @SaCheckPermission("holidaydate:detail")
+    public RT<HolidayDateVo> info(@RequestParam Long id) {
+        HolidayDate holidayDate = holidayDateService.getById(id);
+        if (holidayDate == null) {
+            return RT.error("找不到此数据!");
+        }
+        return RT.ok(BeanUtil.toBean(holidayDate, HolidayDateVo.class));
+    }
+
+    @PostMapping(value = "init")
+    @ApiOperation(value = "初始化年节假日数据")
+    @SaCheckPermission("holidaydate:add")
+    public RT<Boolean> initYear(@Valid @RequestBody InitYearDto dto) {
+        boolean isSuccess = holidayDateService.initHoliday(dto.getYear());
+        return RT.ok(isSuccess);
+    }
+
+
+    @PostMapping
+    @ApiOperation(value = "新增")
+    @SaCheckPermission("holidaydate:add")
+    public RT<Boolean> add(@Valid @RequestBody AddHolidayDateDto dto) throws ParseException {
+        boolean isSuccess = holidayDateService.add(dto);
+        return RT.ok(isSuccess);
+    }
+
+    @PutMapping
+    @ApiOperation(value = "修改")
+    @SaCheckPermission("holidaydate:edit")
+    public RT<Boolean> update(@Valid @RequestBody UpdateHolidayDateDto dto) {
+        HolidayDate holidayDate = BeanUtil.toBean(dto, HolidayDate.class);
+        holidayDate.setWay(2);
+        return RT.ok(holidayDateService.updateById(holidayDate));
+    }
+
+    @DeleteMapping
+    @ApiOperation(value = "删除")
+    @SaCheckPermission("holidaydate:delete")
+    public RT<Boolean> delete(@Valid @RequestBody List<Long> ids) {
+        return RT.ok(holidayDateService.delete(ids));
+    }
+}

+ 39 - 0
src/main/java/com/xjrsoft/module/holiday/dto/AddHolidayDateDto.java

@@ -0,0 +1,39 @@
+package com.xjrsoft.module.holiday.dto;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import java.io.Serializable;
+import com.fasterxml.jackson.annotation.JsonFormat;
+
+import java.time.LocalTime;
+import java.time.LocalDateTime;
+import java.math.BigDecimal;
+import java.util.List;
+import java.util.Date;
+
+
+
+/**
+* @title: 
+* @Author fanxp
+* @Date: 2024-03-26
+* @Version 1.0
+*/
+@Data
+public class AddHolidayDateDto implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+
+    @ApiModelProperty("开始时间(YYYY-MM-DD)")
+    private String startDate;
+
+    @ApiModelProperty("结束时间(YYYY-MM-DD)")
+    private String endDate;
+
+    /**
+    * 0=普通工作日 1=周末 2=需要补班的工作日 3=法定节假日
+    */
+    @ApiModelProperty("0=普通工作日 1=周末 2=需要补班的工作日 3=法定节假日")
+    private Integer status;
+}

+ 40 - 0
src/main/java/com/xjrsoft/module/holiday/dto/HolidayDateListDto.java

@@ -0,0 +1,40 @@
+package com.xjrsoft.module.holiday.dto;
+
+import com.xjrsoft.common.page.ListInput;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.time.LocalTime;
+import java.time.LocalDateTime;
+import java.math.BigDecimal;
+import java.util.Date;
+
+
+/**
+* @title: 列表查询入参
+* @Author fanxp
+* @Date: 2024-03-26
+* @Version 1.0
+*/
+@Data
+@EqualsAndHashCode(callSuper = false)
+public class HolidayDateListDto extends ListInput {
+
+    /**
+     *
+     */
+    @ApiModelProperty("年")
+    private Integer year;
+    /**
+     *
+     */
+    @ApiModelProperty("月")
+    private Integer month;
+    /**
+     *
+     */
+    @ApiModelProperty("日")
+    private Integer day;
+}

+ 26 - 0
src/main/java/com/xjrsoft/module/holiday/dto/HolidayDatePageDto.java

@@ -0,0 +1,26 @@
+package com.xjrsoft.module.holiday.dto;
+
+import com.xjrsoft.common.page.PageInput;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.time.LocalTime;
+import java.time.LocalDateTime;
+import java.math.BigDecimal;
+import java.util.Date;
+
+
+/**
+* @title: 列表查询入参
+* @Author fanxp
+* @Date: 2024-03-26
+* @Version 1.0
+*/
+@Data
+@EqualsAndHashCode(callSuper = false)
+public class HolidayDatePageDto extends PageInput {
+
+
+}

+ 13 - 0
src/main/java/com/xjrsoft/module/holiday/dto/InitYearDto.java

@@ -0,0 +1,13 @@
+package com.xjrsoft.module.holiday.dto;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+
+@Data
+public class InitYearDto implements Serializable {
+
+    @ApiModelProperty("年")
+    public Integer year;
+}

+ 32 - 0
src/main/java/com/xjrsoft/module/holiday/dto/UpdateHolidayDateDto.java

@@ -0,0 +1,32 @@
+package com.xjrsoft.module.holiday.dto;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import java.io.Serializable;
+
+import java.time.LocalTime;
+import java.time.LocalDateTime;
+import java.math.BigDecimal;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import java.util.List;
+import java.util.Date;
+
+
+
+/**
+* @title: 
+* @Author fanxp
+* @Date: 2024-03-26
+* @Version 1.0
+*/
+@Data
+public class UpdateHolidayDateDto extends AddHolidayDateDto {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+    * 主键编号
+    */
+    @ApiModelProperty("主键编号")
+    private Long id;
+}

+ 78 - 0
src/main/java/com/xjrsoft/module/holiday/entity/HolidayDate.java

@@ -0,0 +1,78 @@
+package com.xjrsoft.module.holiday.entity;
+
+import com.baomidou.mybatisplus.annotation.FieldFill;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableLogic;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.github.yulichang.annotation.EntityMapping;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Builder;
+import lombok.Data;
+import java.io.Serializable;
+import java.time.LocalTime;
+import java.time.LocalDateTime;
+import java.math.BigDecimal;
+import java.util.List;
+import java.util.Date;
+
+
+/**
+* @title: 
+* @Author fanxp
+* @Date: 2024-03-26
+* @Version 1.0
+*/
+@Data
+@Builder
+@TableName("holiday_date")
+@ApiModel(value = "holiday_date", description = "")
+public class HolidayDate implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+    * 主键编号
+    */
+    @ApiModelProperty("主键编号")
+    @TableId
+    private Long id;
+    /**
+    * 日期yyyy-MM-dd
+    */
+    @ApiModelProperty("日期yyyy-MM-dd")
+    private String date;
+    /**
+    * 
+    */
+    @ApiModelProperty("")
+    private Integer year;
+    /**
+    * 
+    */
+    @ApiModelProperty("")
+    private Integer month;
+    /**
+    * 
+    */
+    @ApiModelProperty("")
+    private Integer day;
+    /**
+    * 0=普通工作日 1=周末 2=需要补班的工作日 3=法定节假日
+    */
+    @ApiModelProperty("0=普通工作日 1=周末 2=需要补班的工作日 3=法定节假日")
+    private Integer status;
+    /**
+    * 方式 1=系统数据 2=用户数据
+    */
+    @ApiModelProperty("方式 1=系统数据 2=用户数据")
+    private Integer way;
+    /**
+    * 删除状态 0=正常 1=删除
+    */
+    @ApiModelProperty("删除状态 0=正常 1=删除")
+    private Integer deleteStatus;
+
+
+}

+ 17 - 0
src/main/java/com/xjrsoft/module/holiday/mapper/HolidayDateMapper.java

@@ -0,0 +1,17 @@
+package com.xjrsoft.module.holiday.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.github.yulichang.base.MPJBaseMapper;
+import com.xjrsoft.module.holiday.entity.HolidayDate;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+* @title: 
+* @Author fanxp
+* @Date: 2024-03-26
+* @Version 1.0
+*/
+@Mapper
+public interface HolidayDateMapper extends MPJBaseMapper<HolidayDate> {
+
+}

+ 28 - 0
src/main/java/com/xjrsoft/module/holiday/service/IHolidayDateService.java

@@ -0,0 +1,28 @@
+package com.xjrsoft.module.holiday.service;
+
+import com.github.yulichang.base.MPJBaseService;
+import com.xjrsoft.module.holiday.dto.AddHolidayDateDto;
+import com.xjrsoft.module.holiday.entity.HolidayDate;
+
+import java.text.ParseException;
+import java.util.List;
+
+/**
+* @title: 
+* @Author fanxp
+* @Date: 2024-03-26
+* @Version 1.0
+*/
+
+public interface IHolidayDateService extends MPJBaseService<HolidayDate> {
+    Boolean initHoliday(int year);
+
+    Boolean delete(List<Long> ids);
+
+    Boolean add(AddHolidayDateDto dto) throws ParseException;
+
+    /**
+     * 当前时间是否休息
+     */
+    Boolean currentIsRest();
+}

+ 179 - 0
src/main/java/com/xjrsoft/module/holiday/service/impl/HolidayDateServiceImpl.java

@@ -0,0 +1,179 @@
+package com.xjrsoft.module.holiday.service.impl;
+
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.github.yulichang.base.MPJBaseServiceImpl;
+import com.xjrsoft.common.exception.MyException;
+import com.xjrsoft.common.utils.DateUtils;
+import com.xjrsoft.common.utils.HolidayUtil;
+import com.xjrsoft.module.holiday.dto.AddHolidayDateDto;
+import com.xjrsoft.module.holiday.entity.HolidayDate;
+import com.xjrsoft.module.holiday.mapper.HolidayDateMapper;
+import com.xjrsoft.module.holiday.service.IHolidayDateService;
+import com.xjrsoft.module.holiday.vo.AlmanacVo;
+import lombok.AllArgsConstructor;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.time.LocalDateTime;
+import java.time.format.DateTimeFormatter;
+import java.util.*;
+import java.util.stream.Collectors;
+
+/**
+ * @title:
+ * @Author fanxp
+ * @Date: 2024-03-26
+ * @Version 1.0
+ */
+@Service
+@AllArgsConstructor
+public class HolidayDateServiceImpl extends MPJBaseServiceImpl<HolidayDateMapper, HolidayDate> implements IHolidayDateService {
+
+    private final HolidayDateMapper holidayDateMapper;
+
+    /**
+     * 当前时间是否休息
+     */
+    public Boolean currentIsRest() {
+        LocalDateTime now = LocalDateTime.now();
+        String day = now.format(DateTimeFormatter.ofPattern("yyyy-MM-dd"));
+        Long count = holidayDateMapper.selectCount(Wrappers.<HolidayDate>query().lambda()
+                .eq(HolidayDate::getDate, day)
+                .eq(HolidayDate::getStatus,3)
+        );
+        return count > 0;
+    }
+
+    /**
+     * 添加数据
+     *
+     * @param dto
+     * @return
+     */
+    @Transactional(rollbackFor = Exception.class)
+    public Boolean add(AddHolidayDateDto dto) throws ParseException {
+        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
+        Date start = sdf.parse(dto.getStartDate());
+        Date end = sdf.parse(dto.getEndDate());
+
+        if (start.compareTo(end) > 0) {
+            throw new MyException("开始时间不能大于结束时间!");
+        }
+
+        while (start.compareTo(end) <= 0) {
+            Calendar calendar = Calendar.getInstance();
+            calendar.setTime(start);
+
+            HolidayDate param = HolidayDate.builder()
+                    .date(sdf.format(start))
+                    .way(2)
+                    .year(calendar.get(Calendar.YEAR))
+                    .month(calendar.get(Calendar.MONTH) + 1)
+                    .day(calendar.get(Calendar.DATE))
+                    .status(dto.getStatus())
+                    .build();
+            holidayDateMapper.insert(param);
+            start = DateUtils.addDateDays(start, 1);
+        }
+        return true;
+    }
+
+    /**
+     * 删除数据
+     *
+     * @param ids
+     * @return
+     */
+    @Transactional(rollbackFor = Exception.class)
+    public Boolean delete(List<Long> ids) {
+        List<HolidayDate> holidayDates = holidayDateMapper.selectBatchIds(ids);
+        for (HolidayDate h : holidayDates) {
+            // 用户数据直接删除,系统数据添加标识
+            if (h.getWay() == 1) {
+                h.setDeleteStatus(1);
+                holidayDateMapper.updateById(h);
+            } else {
+                holidayDateMapper.deleteById(h.getId());
+            }
+        }
+        return true;
+    }
+
+    /**
+     * 初始化节假日
+     *
+     * @param year
+     * @return
+     */
+    @Transactional(rollbackFor = Exception.class)
+    public Boolean initHoliday(int year) {
+        List<HolidayDate> allList = new ArrayList<>();
+        for (int month = 1; month < 13; month++) {
+            List<HolidayDate> monthList = getYearMonthHoliday(year, month);
+            allList.addAll(monthList);
+        }
+//        List<HolidayDate> monthList = getYearMonthHoliday(year - 1, 12);
+//        allList.addAll(monthList);
+
+        Map<String, HolidayDate> mData = allList.stream().collect(Collectors.toMap(HolidayDate::getDate, item -> item));
+        // 获取用户数据
+        List<HolidayDate> userDates = holidayDateMapper.selectList(Wrappers.<HolidayDate>query().lambda().eq(HolidayDate::getYear, year).eq(HolidayDate::getWay, 2));
+        for (HolidayDate uh : userDates) {
+            mData.keySet().removeIf(key -> Objects.equals(key, uh.getDate()));
+        }
+        // 清除系统数据
+        holidayDateMapper.delete(Wrappers.<HolidayDate>query().lambda().eq(HolidayDate::getYear, year).eq(HolidayDate::getWay, 1));
+        // 保存系统数据
+        for (Map.Entry<String, HolidayDate> entry : mData.entrySet()) {
+            holidayDateMapper.insert(entry.getValue());
+        }
+        return true;
+    }
+
+    /**
+     * Init month list.
+     * 按月爬取节假日
+     *
+     * @param year  the year
+     * @param month the month
+     * @return the list
+     */
+    public static List<HolidayDate> getYearMonthHoliday(int year, int month) {
+        List<HolidayDate> holidayDateList = new ArrayList<>();
+        try {
+            String result = HolidayUtil.getMonth(year + "", month + "");
+            JSONObject json = JSON.parseObject(result);
+            System.out.println(result);
+            JSONArray data = json.getJSONArray("data");
+            JSONObject dataObj = JSON.parseObject(data.get(0).toString());
+            List<AlmanacVo> almanacs = JSONArray.parseArray(dataObj.getString("almanac"), AlmanacVo.class);
+            for (AlmanacVo almanac : almanacs) {
+                if (almanac.getMonth().equals(String.valueOf(month)) && almanac.getStatus() != null) {
+                    HolidayDate date = HolidayDate.builder()
+                            .year(year).month(month).day(Integer.parseInt(almanac.getDay()))
+                            .date(DateUtils.format(new Date(year - 1900, month - 1, Integer.parseInt(almanac.getDay())), "yyyy-MM-dd"))
+                            .build();
+                    String status = almanac.getStatus();
+                    if (status.equals("1")) {
+                        date.setStatus(3);
+                    } else if (status.equals("2")) {
+                        date.setStatus(2);
+                    }
+                    holidayDateList.add(date);
+                }
+            }
+        } catch (ClassCastException classCastException) {
+            throw new MyException("可能是当前月份(" + month + "月)没有节日");
+        } catch (Exception e) {
+            throw new MyException(e.getMessage());
+        }
+        return holidayDateList;
+    }
+
+
+}

+ 27 - 0
src/main/java/com/xjrsoft/module/holiday/vo/AlmanacVo.java

@@ -0,0 +1,27 @@
+package com.xjrsoft.module.holiday.vo;
+
+import lombok.Data;
+
+@Data
+public class AlmanacVo {
+    String animal;
+    String avoid;
+    String cnDay;
+    String day;
+    String gzDate;
+    String gzMonth;
+    String gzYear;
+    String isBigMonth;
+    String lDate;
+    String lMonth;
+    String lunarDate;
+    String lunarMonth;
+    String lunarYear;
+    String month;
+    String oDate;
+    String status;
+    String suit;
+    String term;
+    String type;
+    String year;
+}

+ 83 - 0
src/main/java/com/xjrsoft/module/holiday/vo/HolidayDateListVo.java

@@ -0,0 +1,83 @@
+package com.xjrsoft.module.holiday.vo;
+
+import com.alibaba.excel.annotation.ExcelProperty;
+import com.alibaba.excel.annotation.ExcelIgnore;
+import com.alibaba.excel.annotation.write.style.ContentStyle;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import com.xjrsoft.common.annotation.Trans;
+import com.xjrsoft.common.enums.TransType;
+import java.time.LocalTime;
+import java.time.LocalDateTime;
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+* @title: 分页列表出参
+* @Author fanxp
+* @Date: 2024-03-26
+* @Version 1.0
+*/
+@Data
+public class HolidayDateListVo {
+
+    /**
+    * 主键编号
+    */
+    @ContentStyle(dataFormat = 49)
+    @ExcelProperty("主键编号")
+    @ApiModelProperty("主键编号")
+    private String id;
+    /**
+    * 日期yyyy-MM-dd
+    */
+    @ContentStyle(dataFormat = 49)
+    @ExcelProperty("日期yyyy-MM-dd")
+    @ApiModelProperty("日期yyyy-MM-dd")
+    private String date;
+    /**
+    * 
+    */
+    @ContentStyle(dataFormat = 49)
+    @ExcelProperty("")
+    @ApiModelProperty("")
+    private Integer year;
+    /**
+    * 
+    */
+    @ContentStyle(dataFormat = 49)
+    @ExcelProperty("")
+    @ApiModelProperty("")
+    private Integer month;
+    /**
+    * 
+    */
+    @ContentStyle(dataFormat = 49)
+    @ExcelProperty("")
+    @ApiModelProperty("")
+    private Integer day;
+    /**
+    * 0=普通工作日 1=周末 2=需要补班的工作日 3=法定节假日
+    */
+    @ContentStyle(dataFormat = 49)
+    @ExcelProperty("0=普通工作日 1=周末 2=需要补班的工作日 3=法定节假日")
+    @ApiModelProperty("0=普通工作日 1=周末 2=需要补班的工作日 3=法定节假日")
+    private Integer status;
+    /**
+    * 方式 1=系统数据 2=用户数据
+    */
+    @ContentStyle(dataFormat = 49)
+    @ExcelProperty("方式 1=系统数据 2=用户数据")
+    @ApiModelProperty("方式 1=系统数据 2=用户数据")
+    private Integer way;
+    /**
+    * 删除状态 0=正常 1=删除
+    */
+    @ContentStyle(dataFormat = 49)
+    @ExcelProperty("删除状态 0=正常 1=删除")
+    @ApiModelProperty("删除状态 0=正常 1=删除")
+    private Integer deleteStatus;
+
+}

+ 83 - 0
src/main/java/com/xjrsoft/module/holiday/vo/HolidayDatePageVo.java

@@ -0,0 +1,83 @@
+package com.xjrsoft.module.holiday.vo;
+
+import com.alibaba.excel.annotation.ExcelProperty;
+import com.alibaba.excel.annotation.ExcelIgnore;
+import com.alibaba.excel.annotation.write.style.ContentStyle;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import com.xjrsoft.common.annotation.Trans;
+import com.xjrsoft.common.enums.TransType;
+import java.time.LocalTime;
+import java.time.LocalDateTime;
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+* @title: 分页列表出参
+* @Author fanxp
+* @Date: 2024-03-26
+* @Version 1.0
+*/
+@Data
+public class HolidayDatePageVo {
+
+    /**
+    * 主键编号
+    */
+    @ContentStyle(dataFormat = 49)
+    @ExcelProperty("主键编号")
+    @ApiModelProperty("主键编号")
+    private String id;
+    /**
+    * 日期yyyy-MM-dd
+    */
+    @ContentStyle(dataFormat = 49)
+    @ExcelProperty("日期yyyy-MM-dd")
+    @ApiModelProperty("日期yyyy-MM-dd")
+    private String date;
+    /**
+    * 
+    */
+    @ContentStyle(dataFormat = 49)
+    @ExcelProperty("")
+    @ApiModelProperty("")
+    private Integer year;
+    /**
+    * 
+    */
+    @ContentStyle(dataFormat = 49)
+    @ExcelProperty("")
+    @ApiModelProperty("")
+    private Integer month;
+    /**
+    * 
+    */
+    @ContentStyle(dataFormat = 49)
+    @ExcelProperty("")
+    @ApiModelProperty("")
+    private Integer day;
+    /**
+    * 0=普通工作日 1=周末 2=需要补班的工作日 3=法定节假日
+    */
+    @ContentStyle(dataFormat = 49)
+    @ExcelProperty("0=普通工作日 1=周末 2=需要补班的工作日 3=法定节假日")
+    @ApiModelProperty("0=普通工作日 1=周末 2=需要补班的工作日 3=法定节假日")
+    private Integer status;
+    /**
+    * 方式 1=系统数据 2=用户数据
+    */
+    @ContentStyle(dataFormat = 49)
+    @ExcelProperty("方式 1=系统数据 2=用户数据")
+    @ApiModelProperty("方式 1=系统数据 2=用户数据")
+    private Integer way;
+    /**
+    * 删除状态 0=正常 1=删除
+    */
+    @ContentStyle(dataFormat = 49)
+    @ExcelProperty("删除状态 0=正常 1=删除")
+    @ApiModelProperty("删除状态 0=正常 1=删除")
+    private Integer deleteStatus;
+
+}

+ 64 - 0
src/main/java/com/xjrsoft/module/holiday/vo/HolidayDateVo.java

@@ -0,0 +1,64 @@
+package com.xjrsoft.module.holiday.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.time.LocalTime;
+import java.time.LocalDateTime;
+import java.math.BigDecimal;
+import java.util.List;
+import java.util.Date;
+
+/**
+* @title: 表单出参
+* @Author fanxp
+* @Date: 2024-03-26
+* @Version 1.0
+*/
+@Data
+public class HolidayDateVo {
+
+    /**
+    * 主键编号
+    */
+    @ApiModelProperty("主键编号")
+    private Long id;
+    /**
+    * 日期yyyy-MM-dd
+    */
+    @ApiModelProperty("日期yyyy-MM-dd")
+    private String date;
+    /**
+    * 
+    */
+    @ApiModelProperty("")
+    private Integer year;
+    /**
+    * 
+    */
+    @ApiModelProperty("")
+    private Integer month;
+    /**
+    * 
+    */
+    @ApiModelProperty("")
+    private Integer day;
+    /**
+    * 0=普通工作日 1=周末 2=需要补班的工作日 3=法定节假日
+    */
+    @ApiModelProperty("0=普通工作日 1=周末 2=需要补班的工作日 3=法定节假日")
+    private Integer status;
+    /**
+    * 方式 1=系统数据 2=用户数据
+    */
+    @ApiModelProperty("方式 1=系统数据 2=用户数据")
+    private Integer way;
+    /**
+    * 删除状态 0=正常 1=删除
+    */
+    @ApiModelProperty("删除状态 0=正常 1=删除")
+    private Integer deleteStatus;
+
+
+
+}

+ 32 - 0
src/main/java/com/xjrsoft/module/job/HolidayTask.java

@@ -0,0 +1,32 @@
+package com.xjrsoft.module.job;
+
+import com.xjrsoft.common.utils.DateUtils;
+import com.xjrsoft.module.holiday.service.IHolidayDateService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.scheduling.annotation.Scheduled;
+import org.springframework.stereotype.Component;
+
+import java.util.Calendar;
+import java.util.Date;
+
+@Component
+@Slf4j
+public class HolidayTask {
+
+    @Autowired
+    private IHolidayDateService holidayDateService;
+
+    /**
+     * 定时拉取节假日数据
+     */
+    @Scheduled(cron = "0 0 1 * * ?")
+    public void RefreshHoliday() {
+        System.out.printf("定时拉取节假日数据:%s", DateUtils.format(new Date(), DateUtils.DATE_TIME_PATTERN));
+        Date date = new Date();
+        Calendar calendar = Calendar.getInstance();
+        calendar.setTime(date);
+
+        holidayDateService.initHoliday(calendar.get(Calendar.YEAR));
+    }
+}

+ 3 - 0
src/main/resources/mapper/base/BaseClass.xml

@@ -95,5 +95,8 @@
         <if test="dto.classId != null">
             and t1.id = #{dto.classId}
         </if>
+        <if test="dto.gradeId != null">
+            and t1.grade_id = #{dto.gradeId}
+        </if>
     </select>
 </mapper>

+ 37 - 0
src/test/java/com/xjrsoft/module/job/HolidayTaskTest.java

@@ -0,0 +1,37 @@
+package com.xjrsoft.module.job;
+
+import com.xjrsoft.XjrSoftApplication;
+import com.xjrsoft.common.utils.DateUtils;
+import com.xjrsoft.module.holiday.service.IHolidayDateService;
+import org.junit.jupiter.api.Test;
+import org.junit.runner.RunWith;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.scheduling.annotation.Scheduled;
+import org.springframework.test.context.junit4.SpringRunner;
+
+import java.util.Calendar;
+import java.util.Date;
+
+import static org.junit.jupiter.api.Assertions.*;
+
+/**
+ * @author dzx
+ * @date 2024/5/31
+ */
+@RunWith(SpringRunner.class)
+@SpringBootTest(classes = XjrSoftApplication.class)
+class HolidayTaskTest {
+
+    @Autowired
+    private IHolidayDateService holidayDateService;
+    @Test
+    public void RefreshHoliday() {
+        System.out.printf("定时拉取节假日数据:%s", DateUtils.format(new Date(), DateUtils.DATE_TIME_PATTERN));
+        Date date = new Date();
+        Calendar calendar = Calendar.getInstance();
+        calendar.setTime(date);
+
+        holidayDateService.initHoliday(calendar.get(Calendar.YEAR));
+    }
+}