日历-区分节假日

复制代码
 @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 @   八英里  阅读(11)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
历史上的今天:
2021-01-08 siteserver 404
2021-01-08 JS判断数组中是否包含某个值
点击右上角即可分享
微信分享提示