Files
contract-manager/client/src/main/java/com/ecep/contract/service/HolidayService.java
songqq 0dcc9236a8 feat: 实现节假日服务功能并更新项目版本
refactor(CloudRkManagerWindowController): 简化任务初始化逻辑
feat(HolidayService): 添加节假日调整和检查功能
feat(HolidayTable): 实现Voable接口并添加toVo方法
feat(HolidayTableRepository): 添加节假日查询方法
docs: 添加服务器端Service类规则文档
build: 更新项目版本至0.0.101-SNAPSHOT
2025-10-10 10:21:51 +08:00

72 lines
1.9 KiB
Java

package com.ecep.contract.service;
import java.time.DayOfWeek;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.util.Map;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Lazy;
import org.springframework.stereotype.Service;
import com.ecep.contract.WebSocketClientService;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
/**
* 节假日服务类
*
* @author System
*/
@Lazy
@Service
@RequiredArgsConstructor
@Slf4j
public class HolidayService {
@Autowired
private WebSocketClientService webSocketClientService;
@Autowired
protected ObjectMapper objectMapper;
/**
* 调整日期到工作日
*
* @param date 要调整的日期
* @return 调整的日期
*/
public LocalDate adjustToWorkDay(LocalDate date) {
if (date == null) {
return null;
}
try {
JsonNode json = webSocketClientService.invoke("holidayService", "adjustToWorkDay", date).get();
if (json != null && !json.isEmpty()) {
return objectMapper.convertValue(json, LocalDate.class);
}
} catch (Exception e) {
log.error("调整日期到工作日失败: {}", e.getMessage(), e);
}
// 如果调用失败,使用客户端本地逻辑作为后备
return adjustToWorkDayLocally(date);
}
/**
* 客户端本地日期调整逻辑,作为服务器调用失败的后备方案
*
* @param date 要调整的日期
* @return 调整的日期
*/
private LocalDate adjustToWorkDayLocally(LocalDate date) {
while (date.getDayOfWeek() == DayOfWeek.SATURDAY || date.getDayOfWeek() == DayOfWeek.SUNDAY) {
date = date.plusDays(1);
}
return date;
}
}