日历-区分节假日

 @Override
    public void initHoliday(HolidayDTO param) throws Exception {
        LocalDate startOfYear = param.getYear().atDay(1);
        LocalDate endOfYear = param.getYear().plusYears(1).atDay(1);
        LocalDate currentDate = startOfYear;
        List<HolidayDate> holidayDateList = new ArrayList<>();
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
        while (!currentDate.isAfter(endOfYear)) {
            HolidayDate holidayDate = new HolidayDate();
            holidayDate.setYear(currentDate.getYear());
            holidayDate.setMonth(currentDate.getMonthValue());
            holidayDate.setDay(currentDate.getDayOfMonth());
            holidayDate.setDate(currentDate.format(formatter));
            holidayDate.setStatus(0);
            holidayDateList.add(holidayDate);
            currentDate = currentDate.plusDays(1);
        }
        /**
         *  enum(0, 1, 2, 3), // 节假日类型,分别表示 工作日、周末、节日、调休。 参考https://timor.tech/api/holiday/
         */
        String url = "https://timor.tech/api/holiday/year/" + param.getYear() + "?type=Y&week=Y";
        Map<String, Object> paramMap = new HashMap<>();
        paramMap.put("type", "Y");
        paramMap.put("week", "Y");
        JSONObject jsonObject = HttpUtil.doGetJSON(url, paramMap);
        if (ObjectUtils.isEmpty(jsonObject)) {
            return;
        }
        HolidayDataDTO holidayDataDTO = jsonObject.toJavaObject(HolidayDataDTO.class);
        if (ObjectUtils.isEmpty(holidayDataDTO)) {
            return;
        }
        for (HolidayDate holidayDate : holidayDateList) {
            HolidayDataDTO.HolidayType holidayType = holidayDataDTO.getType().get(holidayDate.getDate());
            if (ObjectUtils.isEmpty(holidayType)) {
                continue;
            }
            /**
             * 0普通工作日1周末2需要补班的工作日3法定节假日4调休节假日
             */
            if (holidayType.getType().equals(0)) {
                continue;
            }
            if (holidayType.getType().equals(1)) {
                holidayDate.setStatus(HolidayDateEnum.WEEKEND.getCode());
            }
            if (holidayType.getType().equals(2)) {
                holidayDate.setStatus(HolidayDateEnum.LEGAL_HOLIDAY.getCode());
            }
            if (holidayType.getType().equals(3)) {
                holidayDate.setStatus(HolidayDateEnum.NEED_MAKE_UP_DAY.getCode());
            }
            /**
             * 一、元旦:1月1日
             * 二、春节:1月28、29、30日
             * 三、清明节:4月4日
             * 四、劳动节:5月1日
             * 五、端午节:5月31日
             * 六、国庆节、中秋节:10月1、2、3日
             */
            //调休节假日手动更改
        }
        deleteByYear(param);
        this.saveBatch(holidayDateList);
    }

    /**
     * 删除
     * @param param
     */
    private void deleteByYear(HolidayDTO param) {
        LambdaQueryWrapper<HolidayDate> wrapper = new LambdaQueryWrapper<HolidayDate>();
        wrapper.eq(HolidayDate::getYear, param.getYear());
        this.remove(wrapper);
    }
CREATE TABLE `holiday_date` (
  `date` varchar(20) NOT NULL COMMENT '日期yyyy-MM-dd',
  `year` int(4) NOT NULL,
  `month` int(2) NOT NULL,
  `day` int(2) NOT NULL,
  `status` int(2) DEFAULT '0' COMMENT '0普通工作日1周末2需要补班的工作日3法定节假日4调休节假日',
  PRIMARY KEY (`date`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=COMPACT COMMENT='日期类型';

 

posted @ 2025-01-08 15:37  八英里  阅读(31)  评论(0)    收藏  举报