日历-区分节假日
@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='日期类型';
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
2021-01-08 siteserver 404
2021-01-08 JS判断数组中是否包含某个值