因为公司最近对接的一个支付公司存在在途资金、结算资金和信息流等情况,结算时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');
结语:
功能方法都很简单,希望能对大家有帮助。