栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

节假日工具类

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

节假日工具类

节假日工具类

当前项目有个需求:合作伙伴下采购订单,我们把货品放入仓库,如果伙伴选择的提货方式是自提,经过5工作日后,如果合作伙伴没有自提,我们需要提醒合作伙伴来仓库提货,如果七个工作日后,合作伙伴还没有自提,就把伙伴下单的货品状态变更为报废。

原来项目中有判断节假日的方法,但节假日API已经过期,因此重新在网上找了个API。

但找到的API不稳定,有时会需要六七秒钟,所以把节假日存到数据库中,由自己维护,下次需要查询只要从数据库查就行。

添加节假日的定时任务一年执行一次即可。

判断是否是节假日及获取指定几个工作日后日期
public static Integer isHoliday(String date) throws Exception{
    String httpUrl = "http://timor.tech/api/holiday/info/"+date;

    HttpClientResult httpClientResult = null;
    httpClientResult = HttpsUtil.doGet1(httpUrl,null,10000);
    HolidaysDTO dateInfoDTO = JSON.parseObject(httpClientResult.getContent(), HolidaysDTO.class);
    HolidaysDTO.Type type = dateInfoDTO.getType();
    return type.getType();
}

public static Date pushBackDateDay(Date date,int day) throws Exception{

    SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
    int count = 0;
    Calendar calendar1 = Calendar.getInstance();
    calendar1.setTime(date);
    while( count < day){
        calendar1.add(Calendar.DAY_OF_YEAR, 1);
        String format1 = dateFormat.format(calendar1.getTime());
        Integer holiday1 = HolidayUtil.isHoliday(format1);
        if (holiday1 == 0){
            count ++;
        }
    }
    return calendar1.getTime();
}

请求API工具类:HttpsUtil

public class HttpsUtil {

    
    public static HttpClientResult doGet1(String url, Map params,int timeOut) throws Exception {
        return doGet1(url, null, params,timeOut);
    }

    public static HttpClientResult doGet1(String url, Map headers, Map params,int timeOut) throws Exception {
        // 创建httpClient对象
        CloseableHttpClient httpClient = HttpClients.createDefault();
        // 创建访问的地址
        URIBuilder uriBuilder = new URIBuilder(url);
        if (params != null) {
            Set> entrySet = params.entrySet();
            for (Entry entry : entrySet) {
                uriBuilder.addParameter(entry.getKey(), entry.getValue());
            }
        }
        HttpGet httpGet = new HttpGet(uriBuilder.build());
        
        RequestConfig requestConfig = RequestConfig.custom().setConnectTimeout(timeOut).setSocketTimeout(timeOut).build();
        httpGet.setConfig(requestConfig);
        // 设置请求头
        packageHeader(headers, httpGet);
        // 创建httpResponse对象
        CloseableHttpResponse httpResponse = null;
        try {
            // 执行请求并获得响应结果
            return getHttpClientResult(httpResponse, httpClient, httpGet);
        } finally {
            release(httpResponse, httpClient);// 释放资源
        }
    }
}
把当前年份的节假日存入数据库

建表SQL:

create table holiday_date
(
	id int,
	holiday varchar(50) null,
	gmt_create datetime null
)
comment '假节日表,只存节假日日期';

create unique index holiday_date_holiday_uindex
	on holiday_date (holiday);

create unique index holiday_date_id_uindex
	on holiday_date (id);

alter table holiday_date modify id int auto_increment;

HolidayDateDO

@Data
public class HolidayDateDO {
    private int id;
    private String holiday;
    private String gmtCreate;
}

HolidayDateDAO

public interface HolidayDateDAO {
    //查询记录数
    Integer queryHoliday(String holiday);

    Integer insert(HolidayDateDO holidayDateDO);
}

HolidayDateManager

@Component
public class HolidayDateManager {

    @Resource
    private HolidayDateDAO holidayDateDAO;

    public Integer queryHoliday(String holiday){
        Integer cnt = holidayDateDAO.queryHoliday(holiday);
        return cnt;
    }

    public Integer insert(HolidayDateDO holidayDateDO) {
        Integer cnt = holidayDateDAO.insert(holidayDateDO);
        return cnt;
    }

}

HolidayDateMapper.xml





    
        select count(1) from holiday_date where HOLIDAY = #{holiday}
    

    
           insert into holiday_date(HOLIDAY,GMT_CREATE) values (#{holiday},#{gmtCreate})
    

HolidayDateService

public interface HolidayDateService {

    //查询记录数
    Integer queryHoliday(String holiday);

    Integer insert() throws Exception;
}

HolidayDateServiceImpl

@Service
public class HolidayDateServiceImpl implements HolidayDateService {

    @Resource
    private HolidayDateManager holidayDateManager;

    @Autowired
    private HolidayDateServiceImpl holidayDateService;


    @Override
    public Integer queryHoliday(String holiday) {
        Integer cnt = holidayDateManager.queryHoliday(holiday);
        return cnt;
    }

    @Override
    public Integer insert() throws Exception {
        //当前年份执行
        Calendar cal = Calendar.getInstance();
        int year = cal.get(Calendar.YEAR);
        holidayDateService.OneYearHoliday(year);
        return -1;
    }
    
    public void OneYearHoliday(int year) throws Exception {
        SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd");
        Calendar calendar = Calendar.getInstance();
        //得到今年天数
        int days = 365;
        if (year % 400 == 0 || (year % 4 == 0 && year % 100 != 0)) {
            days = 366;
        }
        //循环今年天数,为节假日就添加到数据库
        for (int i = 1; i <= days; i++) {
            calendar.set(Calendar.DAY_OF_YEAR,i);
            Date date = calendar.getTime();
            String format = sdf1.format(date);
            if (HolidayUtil.isHoliday(format) != 0 ){
                HolidayDateDO holidayDateDO = new HolidayDateDO();
                holidayDateDO.setHoliday(format);
                holidayDateDO.setGmtCreate(sdf1.format(new Date()));
                holidayDateManager.insert(holidayDateDO);
            }
        }
    }
}

定时任务执行插入节假日

@JobHandler(value = "holidayDateJob")
@Component
@Slf4j
public class HolidayDateJob extends IJobHandler {

    @Autowired
    private HolidayDateService holidayDateService;

    @Override
    public ReturnT execute(String param) throws Exception {
        log.info("holidayDateJob start");
        holidayDateService.insert();
        log.info("holidayDateJob end");
        return ReturnT.SUCCESS;
    }
}

或者请求接口执行插入节假日:

@Autowired
private HolidayDateService holidayDateService;

@GetMapping("/query/{holiday}")
public SntResult queryHoliday(@PathVariable String holiday){
    Integer cnt = holidayDateService.queryHoliday(holiday);
    return  SntResult.ok(cnt);
}

@GetMapping("/insert")
public SntResult insert() throws Exception{
    Integer cnt = holidayDateService.insert();
    return  SntResult.ok(cnt);
}

执行部分效果:

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/770035.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号