工作日节假日分辨功能(自行维护)

因为公司最近对接的一个支付公司存在在途资金、结算资金和信息流等情况,结算时T+1结算,需要我们系统自行判断结算日期。

应为节假日是由国务院规定,所以没办法提前预计,只能每年维护,网上看到的节假日判断接口,也是自己维护的。所以决定自己开发。

使用到的工具JAR:hutool

数据库表设计:

CREATE TABLE `t_sys_holiday` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `work_day` date NOT NULL COMMENT '日期',
  `day_type` int(1) DEFAULT '0' COMMENT '日期类型(0.工作日,1.周末,2.节假日)',
  `create_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `update_time` datetime DEFAULT NULL COMMENT '修改时间',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='工作节假日表';

具体功能与方法:

// 根据年份初始化数据
public void initHolidayData(String year) {
        try {
                // 设置区间段,获取区间段的所有日期
                List<DateTime> dateList = getRangeDateList(year);
                List<SysHoliday> list = new ArrayList<>();
                dateList.forEach(item -> {
                    SysHoliday sysHoliday = new SysHoliday();
                    sysHoliday.setWorkday(item.toJdkDate());
                    sysHoliday.setDayType(SysHolidayConstant.DATE_TYPE_IS_WORKDAY);
                    sysHoliday.setCreateTime(new Date());
                    list.add(sysHoliday);
                });
                this.insertBatch(list);
        }catch (Exception e){
            e.printStackTrace();
        }
}

// 根据日期获取下一个工作日
public Date getNextWorkDay(Date date) {
    EntityWrapper<SysHoliday> entityWrapper = new EntityWrapper<>();
    entityWrapper.gt("work_day", date);
    entityWrapper.eq("day_type", SysHolidayConstant.DATE_TYPE_IS_WORKDAY);
    List<SysHoliday> sysHolidayList = this.selectList(entityWrapper);
    if (null != sysHolidayList && sysHolidayList.size() > 0) {
        return sysHolidayList.get(0).getWorkday();
    }else{
        return null;
    }
}

// 根据日期获取Holiday对象
public SysHoliday getHolidayByDate(String date) {
    EntityWrapper<SysHoliday> entityWrapper = new EntityWrapper<>();
    entityWrapper.eq("work_day", DateUtil.parseDate(date));
    return this.selectOne(entityWrapper);
}

2020年的节假日信息(未处理补班情况)

-- 周末
update t_sys_holiday set day_type = 1 where work_day in ('2020-01-04','2020-01-05','2020-01-11','2020-01-12','2020-01-18','2020-01-19','2020-01-25','2020-01-26','2020-02-01','2020-02-02','2020-02-08','2020-02-09','2020-02-15','2020-02-16','2020-02-22','2020-02-23','2020-02-29','2020-03-01','2020-03-07','2020-03-08','2020-03-14','2020-03-15','2020-03-21','2020-03-22','2020-03-28','2020-03-29','2020-04-04','2020-04-05','2020-04-11','2020-04-12','2020-04-18','2020-04-19','2020-04-25','2020-04-26','2020-05-02','2020-05-03','2020-05-09','2020-05-10','2020-05-16','2020-05-17','2020-05-23','2020-05-24','2020-05-30','2020-05-31','2020-06-06','2020-06-07','2020-06-13','2020-06-14','2020-06-20','2020-06-21','2020-06-27','2020-06-28','2020-07-04','2020-07-05','2020-07-11','2020-07-12','2020-07-18','2020-07-19','2020-07-25','2020-07-26','2020-08-01','2020-08-02','2020-08-08','2020-08-09','2020-08-15','2020-08-16','2020-08-22','2020-08-23','2020-08-29','2020-08-30','2020-09-05','2020-09-06','2020-09-12','2020-09-13','2020-09-19','2020-09-20','2020-09-26','2020-09-27','2020-10-03','2020-10-04','2020-10-10','2020-10-11','2020-10-17','2020-10-18','2020-10-24','2020-10-25','2020-10-31','2020-11-01','2020-11-07','2020-11-08','2020-11-14','2020-11-15','2020-11-21','2020-11-22','2020-11-28','2020-11-29','2020-12-05','2020-12-06','2020-12-12','2020-12-13','2020-12-19','2020-12-20','2020-12-26','2020-12-27');

-- 节假日
update t_sys_holiday set day_type = 2 where work_day in ('2020-01-01','2020-01-24','2020-01-25','2020-01-26','2020-01-27','2020-01-28','2020-01-29','2020-01-30','2020-01-31','2020-02-01','2020-02-02','2020-04-04','2020-04-05','2020-04-06','2020-05-01','2020-05-02','2020-05-03','2020-05-04','2020-05-05','2020-06-25','2020-06-26','2020-06-27','2020-10-01','2020-10-02','2020-10-03','2020-10-04','2020-10-05','2020-10-06','2020-10-07','2020-10-08');

结语:
功能方法都很简单,希望能对大家有帮助。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容