|
|
@@ -0,0 +1,108 @@
|
|
|
+package com.punchsettle.server.service.manager.impl;
|
|
|
+
|
|
|
+import com.punchsettle.server.atomic.entity.SysCalendar;
|
|
|
+import com.punchsettle.server.atomic.service.ISysCalendarService;
|
|
|
+import com.punchsettle.server.common.constant.CommonYesNoEnum;
|
|
|
+import com.punchsettle.server.common.utils.Assert;
|
|
|
+import com.punchsettle.server.constant.CacheNameConstant;
|
|
|
+import com.punchsettle.server.constant.CalendarStatusEnum;
|
|
|
+import com.punchsettle.server.feign.OneApiFeign;
|
|
|
+import com.punchsettle.server.feign.dto.HolidayData;
|
|
|
+import com.punchsettle.server.feign.dto.HolidayQuery;
|
|
|
+import com.punchsettle.server.feign.dto.OneApiResponse;
|
|
|
+import com.punchsettle.server.service.manager.ICalendarManager;
|
|
|
+import com.punchsettle.server.utiis.SpringUtils;
|
|
|
+import lombok.extern.slf4j.Slf4j;
|
|
|
+import org.springframework.beans.BeanUtils;
|
|
|
+import org.springframework.beans.factory.annotation.Autowired;
|
|
|
+import org.springframework.cache.CacheManager;
|
|
|
+import org.springframework.cache.annotation.Cacheable;
|
|
|
+import org.springframework.stereotype.Component;
|
|
|
+import org.springframework.transaction.annotation.Transactional;
|
|
|
+import org.springframework.util.CollectionUtils;
|
|
|
+
|
|
|
+import javax.swing.*;
|
|
|
+import java.util.List;
|
|
|
+import java.util.Objects;
|
|
|
+import java.util.stream.Collectors;
|
|
|
+
|
|
|
+/**
|
|
|
+ * @author tyuio
|
|
|
+ * @version 1.0.0
|
|
|
+ * @date 2025/4/14 15:56
|
|
|
+ * @description 日历 服务类
|
|
|
+ */
|
|
|
+@Slf4j
|
|
|
+@Component
|
|
|
+public class CalendarManagerImpl implements ICalendarManager {
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private OneApiFeign oneApiFeign;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private ISysCalendarService sysCalendarService;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private CacheManager cacheManager;
|
|
|
+
|
|
|
+ @Override
|
|
|
+ @Transactional(rollbackFor = Exception.class)
|
|
|
+ public void refreshCalendar(String gregorianDate) {
|
|
|
+ Assert.isNullInBusiness(gregorianDate, "公历日期不能为空");
|
|
|
+ // 获取日历数据
|
|
|
+ HolidayQuery holidayQuery = new HolidayQuery();
|
|
|
+ holidayQuery.setQueryType(2);
|
|
|
+ holidayQuery.setDate(gregorianDate);
|
|
|
+ OneApiResponse<List<HolidayData>> oneApiResponse = oneApiFeign.queryHoliday(holidayQuery);
|
|
|
+ if (oneApiResponse.getCode() != 0) {
|
|
|
+ log.error("获取日历数据失败,查询日期:{},查询类型:{},错误信息:{}", holidayQuery.getQueryType(), holidayQuery.getDate(), oneApiResponse.getMsg());
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ List<HolidayData> holidayDataList = oneApiResponse.getData();
|
|
|
+ if (CollectionUtils.isEmpty(holidayDataList)) {
|
|
|
+ log.info("获取日历数据为空,查询日期:{},查询类型:{},错误信息:{}", holidayQuery.getQueryType(), holidayQuery.getDate());
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ List<SysCalendar> addCalendarList = holidayDataList.stream().map(holidayData -> {
|
|
|
+ SysCalendar sysCalendar = new SysCalendar();
|
|
|
+ BeanUtils.copyProperties(holidayData, sysCalendar);
|
|
|
+ sysCalendar.setGregorianDate(holidayData.getDate());
|
|
|
+ if (holidayData.getStatus() == 1) {
|
|
|
+ sysCalendar.setStatus(CalendarStatusEnum.WORKDAY);
|
|
|
+ }
|
|
|
+ if (holidayData.getStatus() == 2) {
|
|
|
+ sysCalendar.setStatus(CalendarStatusEnum.HOLIDAY);
|
|
|
+ }
|
|
|
+ sysCalendar.setBadDay(Objects.nonNull(holidayData.getBadDay()) && holidayData.getBadDay() == 1 ? CommonYesNoEnum.Y : CommonYesNoEnum.N);
|
|
|
+ sysCalendar.setStatutory(Objects.nonNull(holidayData.getStatutory()) && holidayData.getStatutory() == 1 ? CommonYesNoEnum.Y : CommonYesNoEnum.N);
|
|
|
+ return sysCalendar;
|
|
|
+ }).collect(Collectors.toList());
|
|
|
+
|
|
|
+ // 删除历史数据
|
|
|
+ sysCalendarService.deleteByGregorianDateLike(gregorianDate);
|
|
|
+
|
|
|
+ // 数据入库
|
|
|
+ sysCalendarService.batchInsert(addCalendarList);
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ @Cacheable(value = CacheNameConstant.CALENDAR, key = "#gregorianDate", unless = "#result == null")
|
|
|
+ public SysCalendar getCalendarByGregorianDate(String gregorianDate) {
|
|
|
+ Assert.isNullInBusiness(gregorianDate, "公历日期不能为空");
|
|
|
+ // 先尝试从数据库中获取,没有再拉取数据
|
|
|
+ SysCalendar sysCalendar = sysCalendarService.getByGregorianDate(gregorianDate);
|
|
|
+ if (Objects.isNull(sysCalendar)) {
|
|
|
+ SpringUtils.getBean(CalendarManagerImpl.class).refreshCalendar(gregorianDate);
|
|
|
+ }
|
|
|
+ return sysCalendarService.getByGregorianDate(gregorianDate);
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public boolean judgeHoliday(String gregorianDate) {
|
|
|
+ Assert.isNullInBusiness(gregorianDate, "公历日期不能为空");
|
|
|
+ SysCalendar sysCalendar = SpringUtils.getBean(CalendarManagerImpl.class).getCalendarByGregorianDate(gregorianDate);
|
|
|
+ return CalendarStatusEnum.HOLIDAY.equals(sysCalendar);
|
|
|
+ }
|
|
|
+}
|