@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='日期类型';