2025-11-12 10:20:47 +08:00
|
|
|
|
# YouFool Holiday SDK
|
2025-03-31 09:26:54 +08:00
|
|
|
|
|
2025-11-12 10:20:47 +08:00
|
|
|
|
[](https://search.maven.org/artifact/com.chinaweal.youfool/youfool-holiday-sdk)
|
|
|
|
|
|
[](https://spring.io/projects/spring-boot)
|
|
|
|
|
|
[](LICENSE)
|
2025-03-31 14:44:16 +08:00
|
|
|
|
|
2025-11-12 10:20:47 +08:00
|
|
|
|
一个强大的 Java 假期和工作日计算 SDK,支持 Spring Boot 自动配置,提供在线和离线两种数据模式。
|
2025-03-31 14:44:16 +08:00
|
|
|
|
|
2025-11-12 10:20:47 +08:00
|
|
|
|
## 🌟 特性
|
|
|
|
|
|
|
|
|
|
|
|
- ✅ **工作日计算** - 自动跳过节假日和周末
|
|
|
|
|
|
- ✅ **工作日判断** - 判断指定日期是否为工作日
|
|
|
|
|
|
- ✅ **工作时间判断** - 判断指定时间是否在工作时间内
|
|
|
|
|
|
- ✅ **双重数据模式** - 支持在线API和离线文件两种数据源
|
|
|
|
|
|
- ✅ **Spring Boot 集成** - 自动配置,开箱即用
|
|
|
|
|
|
- ✅ **多时间段支持** - 支持复杂的工作时间配置
|
|
|
|
|
|
- ✅ **高性能缓存** - 内置缓存机制,提升性能
|
|
|
|
|
|
|
|
|
|
|
|
## 🚀 快速开始
|
|
|
|
|
|
|
|
|
|
|
|
### 1. 添加依赖
|
|
|
|
|
|
|
|
|
|
|
|
```xml
|
|
|
|
|
|
<dependency>
|
|
|
|
|
|
<groupId>com.chinaweal.youfool</groupId>
|
|
|
|
|
|
<artifactId>youfool-holiday-sdk</artifactId>
|
|
|
|
|
|
<version>1.0.0</version>
|
|
|
|
|
|
</dependency>
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
### 2. 配置文件
|
|
|
|
|
|
|
|
|
|
|
|
在 `application.yml` 中添加配置:
|
|
|
|
|
|
|
|
|
|
|
|
```yaml
|
|
|
|
|
|
youfool:
|
|
|
|
|
|
holiday:
|
|
|
|
|
|
enabled: true
|
|
|
|
|
|
online: false
|
|
|
|
|
|
work-time: "08:00-12:00;14:00-18:00"
|
|
|
|
|
|
config-path: classpath:holiday
|
|
|
|
|
|
auto-init: true
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
### 3. 直接使用
|
|
|
|
|
|
|
|
|
|
|
|
配置完成后,无需任何初始化代码,直接使用:
|
2025-03-31 14:44:16 +08:00
|
|
|
|
|
|
|
|
|
|
```java
|
2025-11-12 10:20:47 +08:00
|
|
|
|
@RestController
|
|
|
|
|
|
public class HolidayController {
|
2025-03-31 15:03:58 +08:00
|
|
|
|
|
2025-11-12 10:20:47 +08:00
|
|
|
|
@GetMapping("/workdate")
|
|
|
|
|
|
public LocalDate getWorkDate() {
|
|
|
|
|
|
// 计算5个工作日后的日期
|
|
|
|
|
|
return HolidayCalculator.calcWorkDate(LocalDate.now(), 5);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
@GetMapping("/isWorkDay")
|
|
|
|
|
|
public boolean isWorkDay(@RequestParam LocalDate date) {
|
|
|
|
|
|
// 判断指定日期是否为工作日
|
|
|
|
|
|
return HolidayCalculator.isWorkDay(date);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
@GetMapping("/isWorkTime")
|
|
|
|
|
|
public boolean isWorkTime() {
|
|
|
|
|
|
// 判断当前时间是否为工作时间
|
|
|
|
|
|
return HolidayCalculator.isWorkTime(LocalDateTime.now());
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
就这么简单!SDK 会自动初始化并开始工作。
|
|
|
|
|
|
|
|
|
|
|
|
## 📋 配置参数
|
|
|
|
|
|
|
|
|
|
|
|
| 参数名 | 类型 | 默认值 | 说明 |
|
|
|
|
|
|
|--------|------|--------|------|
|
|
|
|
|
|
| `youfool.holiday.enabled` | boolean | `true` | 是否启用假期计算器 |
|
|
|
|
|
|
| `youfool.holiday.online` | boolean | `false` | 数据模式:true=在线,false=离线 |
|
|
|
|
|
|
| `youfool.holiday.host` | String | `http://www.chinaweal.com.cn:8090/holiday-api` | 在线模式API地址 |
|
|
|
|
|
|
| `youfool.holiday.config-path` | String | `classpath:holiday` | 离线模式配置目录 |
|
|
|
|
|
|
| `youfool.holiday.work-time` | String | `"09:00-18:00"` | 工作时间配置 |
|
|
|
|
|
|
| `youfool.holiday.flush-interval` | long | `900` | 数据刷新间隔(秒) |
|
|
|
|
|
|
| `youfool.holiday.auto-init` | boolean | `true` | 是否自动初始化 |
|
|
|
|
|
|
|
|
|
|
|
|
## ⏰ 工作时间配置
|
|
|
|
|
|
|
|
|
|
|
|
支持灵活的工作时间配置:
|
|
|
|
|
|
|
|
|
|
|
|
```yaml
|
|
|
|
|
|
# 标准工作时间:上午9点到下午6点
|
|
|
|
|
|
work-time: "09:00-18:00"
|
|
|
|
|
|
|
|
|
|
|
|
# 分段工作时间:上午和午休分开
|
|
|
|
|
|
work-time: "08:00-12:00;14:00-17:30"
|
|
|
|
|
|
|
|
|
|
|
|
# 多个时间段
|
|
|
|
|
|
work-time: "06:00-09:00;10:00-12:00;14:00-18:00;20:00-22:00"
|
|
|
|
|
|
|
|
|
|
|
|
# 24小时工作时间
|
|
|
|
|
|
work-time: "00:00-23:59"
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
## 🌐 数据模式选择
|
|
|
|
|
|
|
|
|
|
|
|
### 离线模式(推荐)
|
|
|
|
|
|
|
|
|
|
|
|
```yaml
|
|
|
|
|
|
youfool:
|
|
|
|
|
|
holiday:
|
|
|
|
|
|
online: false
|
|
|
|
|
|
config-path: classpath:holiday
|
|
|
|
|
|
```
|
2025-03-31 15:03:58 +08:00
|
|
|
|
|
2025-11-12 10:20:47 +08:00
|
|
|
|
**优势:**
|
|
|
|
|
|
- 性能更好,无网络依赖
|
|
|
|
|
|
- 启动速度更快
|
|
|
|
|
|
- 数据稳定可控
|
2025-03-31 15:03:58 +08:00
|
|
|
|
|
2025-11-12 10:20:47 +08:00
|
|
|
|
**文件结构:**
|
|
|
|
|
|
```
|
|
|
|
|
|
src/main/resources/
|
|
|
|
|
|
└── holiday/
|
|
|
|
|
|
├── 2024.json
|
|
|
|
|
|
├── 2025.json
|
|
|
|
|
|
└── 2026.json
|
|
|
|
|
|
```
|
2025-03-31 15:03:58 +08:00
|
|
|
|
|
2025-11-12 10:20:47 +08:00
|
|
|
|
### 在线模式
|
2025-03-31 15:03:58 +08:00
|
|
|
|
|
2025-11-12 10:20:47 +08:00
|
|
|
|
```yaml
|
|
|
|
|
|
youfool:
|
|
|
|
|
|
holiday:
|
|
|
|
|
|
online: true
|
|
|
|
|
|
host: http://your-api-server.com/holiday-api
|
|
|
|
|
|
flush-interval: 900 # 15分钟刷新一次
|
2025-03-31 14:44:16 +08:00
|
|
|
|
```
|
|
|
|
|
|
|
2025-11-12 10:20:47 +08:00
|
|
|
|
**优势:**
|
|
|
|
|
|
- 数据实时更新
|
|
|
|
|
|
- 集中管理
|
|
|
|
|
|
- 适合分布式系统
|
2025-03-31 15:03:58 +08:00
|
|
|
|
|
2025-11-12 10:20:47 +08:00
|
|
|
|
## 🎯 API 使用方法
|
|
|
|
|
|
|
|
|
|
|
|
### 核心方法
|
2025-03-31 15:03:58 +08:00
|
|
|
|
|
|
|
|
|
|
```java
|
2025-11-12 10:20:47 +08:00
|
|
|
|
// 计算工作日
|
|
|
|
|
|
LocalDate workDay = HolidayCalculator.calcWorkDate(startDate, plusDays);
|
|
|
|
|
|
|
|
|
|
|
|
// 判断工作日
|
|
|
|
|
|
boolean isWorkDay = HolidayCalculator.isWorkDay(date);
|
|
|
|
|
|
|
|
|
|
|
|
// 判断工作时间
|
|
|
|
|
|
boolean isWorkTime = HolidayCalculator.isWorkTime(dateTime);
|
2025-03-31 15:03:58 +08:00
|
|
|
|
```
|
|
|
|
|
|
|
2025-11-12 10:20:47 +08:00
|
|
|
|
### 使用示例
|
2025-03-31 15:03:58 +08:00
|
|
|
|
|
|
|
|
|
|
```java
|
2025-11-12 10:20:47 +08:00
|
|
|
|
@Service
|
|
|
|
|
|
public class BusinessService {
|
|
|
|
|
|
|
|
|
|
|
|
public LocalDate getDeliveryDate(LocalDate orderDate, int processingDays) {
|
|
|
|
|
|
// 计算处理完成后的工作日(排除节假日和周末)
|
|
|
|
|
|
return HolidayCalculator.calcWorkDate(orderDate, processingDays);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
public boolean canProcessNow() {
|
|
|
|
|
|
// 判断当前是否为工作时间
|
|
|
|
|
|
return HolidayCalculator.isWorkTime(LocalDateTime.now());
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
public boolean isValidBusinessDay(LocalDate date) {
|
|
|
|
|
|
// 判断是否为有效工作日
|
|
|
|
|
|
return HolidayCalculator.isWorkDay(date);
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
2025-03-31 15:03:58 +08:00
|
|
|
|
```
|
|
|
|
|
|
|
2025-11-12 10:20:47 +08:00
|
|
|
|
## 🔄 传统 Java 项目配置
|
2025-03-31 15:03:58 +08:00
|
|
|
|
|
2025-11-12 10:20:47 +08:00
|
|
|
|
如果你不使用 Spring Boot,可以这样配置:
|
2025-03-31 14:44:16 +08:00
|
|
|
|
|
|
|
|
|
|
```java
|
2025-11-12 10:20:47 +08:00
|
|
|
|
// 离线模式
|
|
|
|
|
|
HolidayCalculatorConfig config = new HolidayCalculatorConfig();
|
|
|
|
|
|
config.setOnline(false);
|
|
|
|
|
|
config.setConfigPath("classpath:holiday");
|
|
|
|
|
|
config.setWorkTime("08:00-12:00;14:00-18:00");
|
|
|
|
|
|
HolidayCalculator.init(config);
|
|
|
|
|
|
|
|
|
|
|
|
// 在线模式
|
|
|
|
|
|
HolidayCalculatorConfig config = new HolidayCalculatorConfig();
|
|
|
|
|
|
config.setOnline(true);
|
|
|
|
|
|
config.setHost("http://api.example.com/holiday");
|
|
|
|
|
|
config.setWorkTime("08:00-12:00;14:00-18:00");
|
|
|
|
|
|
HolidayCalculator.init(config);
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
## 🏗️ 项目结构
|
|
|
|
|
|
|
|
|
|
|
|
```
|
|
|
|
|
|
youfool-holiday-sdk/
|
|
|
|
|
|
├── src/main/java/com/chinaweal/youfool/holiday/sdk/
|
|
|
|
|
|
│ ├── HolidayCalculator.java # 主API类
|
|
|
|
|
|
│ ├── config/
|
|
|
|
|
|
│ │ ├── HolidayCalculatorConfig.java # 传统配置类
|
|
|
|
|
|
│ │ ├── HolidayCalculatorProperties.java # Spring Boot配置类
|
|
|
|
|
|
│ │ ├── HolidayCalculatorAutoConfiguration.java # Spring Boot 2.x自动配置
|
|
|
|
|
|
│ │ └── HolidayCalculatorAutoConfigurationV3.java # Spring Boot 3.x自动配置
|
|
|
|
|
|
│ ├── data/
|
|
|
|
|
|
│ │ ├── entity/Holiday.java # 假期实体类
|
|
|
|
|
|
│ │ └── manager/ # 数据管理器
|
|
|
|
|
|
│ └── ... # 其他工具类
|
|
|
|
|
|
├── src/main/resources/
|
|
|
|
|
|
│ ├── META-INF/
|
|
|
|
|
|
│ │ ├── spring.factories # Spring Boot 2.x自动配置注册
|
|
|
|
|
|
│ │ └── spring/ # Spring Boot 3.x自动配置注册
|
|
|
|
|
|
│ └── META-INF/additional-spring-configuration-metadata.json # 配置元数据
|
|
|
|
|
|
└── example/ # 示例代码
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
## 🔧 构建
|
|
|
|
|
|
|
|
|
|
|
|
```bash
|
|
|
|
|
|
# 编译项目
|
|
|
|
|
|
mvn clean compile
|
|
|
|
|
|
|
|
|
|
|
|
# 打包项目
|
|
|
|
|
|
mvn clean package
|
|
|
|
|
|
|
|
|
|
|
|
# 安装到本地仓库
|
|
|
|
|
|
mvn clean install
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
## 📄 文档
|
|
|
|
|
|
|
|
|
|
|
|
- [详细配置说明](CLAUDE.md)
|
|
|
|
|
|
- [Spring Boot 集成指南](README-SPRING-BOOT.md)
|
|
|
|
|
|
- [Spring Boot 3 部署指南](SPRING-BOOT-3-GUIDE.md)
|
|
|
|
|
|
- [部署指南](DEPLOYMENT-GUIDE.md)
|
|
|
|
|
|
- [Bean 冲突修复说明](BEAN-CONFLICT-FIX.md)
|
|
|
|
|
|
|
|
|
|
|
|
## 🤝 贡献
|
|
|
|
|
|
|
|
|
|
|
|
欢迎提交 Issue 和 Pull Request!
|
|
|
|
|
|
|
|
|
|
|
|
## 📄 许可证
|
|
|
|
|
|
|
|
|
|
|
|
MIT License
|
2025-03-31 15:03:58 +08:00
|
|
|
|
|
2025-11-12 10:20:47 +08:00
|
|
|
|
## 🔗 相关链接
|
2025-03-31 15:03:58 +08:00
|
|
|
|
|
2025-11-12 10:20:47 +08:00
|
|
|
|
- [Spring Boot 官方文档](https://spring.io/projects/spring-boot)
|
|
|
|
|
|
- [Maven 中央仓库](https://search.maven.org/)
|