youfool-holiday-sdk/README.md

7.1 KiB
Raw Permalink Blame History

YouFool Holiday SDK

Maven Central Spring Boot JDK License

一个强大的 Java 假期和工作日计算 SDK支持 Spring Boot 自动配置,提供在线和离线两种数据模式。

🌟 特性

  • 工作日计算 - 自动跳过节假日和周末
  • 工作日判断 - 判断指定日期是否为工作日
  • 工作时间判断 - 判断指定时间是否在工作时间内
  • 双重数据模式 - 支持在线API和离线文件两种数据源
  • Spring Boot 集成 - 自动配置,开箱即用
  • 多时间段支持 - 支持复杂的工作时间配置
  • 高性能缓存 - 内置缓存机制,提升性能

🚀 快速开始

1. 添加依赖

<dependency>
    <groupId>com.chinaweal.youfool</groupId>
    <artifactId>youfool-holiday-sdk</artifactId>
    <version>1.0.0</version>
</dependency>

2. 配置文件

application.yml 中添加配置:

youfool:
  holiday:
    enabled: true
    online: false
    work-time: "08:00-12:00;14:00-18:00"
    config-path: classpath:holiday
    auto-init: true

3. 直接使用

配置完成后,无需任何初始化代码,直接使用:

@RestController
public class HolidayController {

    @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 是否自动初始化

工作时间配置

支持灵活的工作时间配置:

# 标准工作时间上午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"

🌐 数据模式选择

离线模式(推荐)

youfool:
  holiday:
    online: false
    config-path: classpath:holiday

优势:

  • 性能更好,无网络依赖
  • 启动速度更快
  • 数据稳定可控

文件结构:

src/main/resources/
└── holiday/
    ├── 2024.json
    ├── 2025.json
    └── 2026.json

在线模式

youfool:
  holiday:
    online: true
    host: http://your-api-server.com/holiday-api
    flush-interval: 900  # 15分钟刷新一次

优势:

  • 数据实时更新
  • 集中管理
  • 适合分布式系统

🎯 API 使用方法

核心方法

// 计算工作日
LocalDate workDay = HolidayCalculator.calcWorkDate(startDate, plusDays);

// 判断工作日
boolean isWorkDay = HolidayCalculator.isWorkDay(date);

// 判断工作时间
boolean isWorkTime = HolidayCalculator.isWorkTime(dateTime);

使用示例

@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);
    }
}

🔄 传统 Java 项目配置

如果你不使用 Spring Boot可以这样配置

// 离线模式
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/                                  # 示例代码

🔧 构建

# 编译项目
mvn clean compile

# 打包项目
mvn clean package

# 安装到本地仓库
mvn clean install

📄 文档

🤝 贡献

欢迎提交 Issue 和 Pull Request

📄 许可证

MIT License

🔗 相关链接