首页 > 其他分享 >万年历/节假日/日历API

万年历/节假日/日历API

时间:2023-05-16 22:00:53浏览次数:34  
标签:status name 万年历 日历 list API 2021 date holiday


前言

业务需求,需要判断节假日。
简单来说,我们有一个节假日日历即可解决,但是市面上 百度 小米 华为都有自己的日历但是就是没有API,我的需求是找一个稳定,高效,准确的日历
以下调用均为CURL调用,官方支持SDK调用,考虑到成本,使用CURL
我是为了加班费计算(节假日、补班)需要用到节假日的,有相同需求的可以看这篇

预期

万年历/节假日/日历API_json

开发

日历类总链接,有三个API
根据自己的需求用对应的API,我要知道节假日及其放假安排,所以调用第二个接口

参考链接

https://www.kancloud.cn/topthink-doc/think-api/1861639

调用须知

调用前要登陆 获取登陆密钥 AppCode

https://docs.topthink.com/think-api/1835086

1、查询当天详细信息

接口

GET https://api.topthink.com/calendar/day

调用

https://api.topthink.com/calendar/day?appCode=写自己的&date=2021-5-1

响应

{
    "code": 0,
    "message": "Success",
    "data": {
        "animalsYear": "牛",
        "weekday": "星期六",
        "lunarYear": "辛丑年",
        "lunar": "三月二十",
        "year-month": "2021-5",
        "date": "2021-5-1",
        "suit": "结婚.领证.订婚.求嗣.修坟.赴任.祈福.祭祀.纳畜.启钻.捕捉.嫁娶.纳采.盖屋.栽种.斋醮.招赘.纳婿.藏宝",
        "avoid": "搬家.装修.开业.入宅.开工.动土.出行.安葬.上梁.开张.旅游.破土.修造.开市.纳财.移徙.立券.竖柱.放水.分居.行丧.开仓.置产.筑堤.出货",
        "holiday": "劳动节",
        "desc": "5月1日至5日放假调休,共5天。4月25日(星期日)、5月8日(星期六)上班"
    }
}

2、根据传入的月份返回近期的假期列表

接口

POST https://api.topthink.com/calendar/month

调用

{
    "yearMonth":"2021-5"
}

响应

接口查询一个月会返回两个月数据
观察了下发现"status": "1"是放假 "status": "2"是工作日(补班)

{
    "code": 0,
    "message": "Success",
    "data": {
        "year": "2021",
        "year-month": "2021-5",
        "holiday": "[{\"desc\":\"4月3日至5日放假调休,共3天\",\"festival\":\"2021-4-4\",\"list\":[{\"date\":\"2021-4-3\",\"status\":\"1\"},{\"date\":\"2021-4-4\",\"status\":\"1\"},{\"date\":\"2021-4-5\",\"status\":\"1\"}],\"list#num#\":3,\"name\":\"清明节\",\"rest\":\"\"},{\"desc\":\"5月1日至5日放假调休,共5天。4月25日(星期日)、5月8日(星期六)上班\",\"festival\":\"2021-5-1\",\"list\":[{\"date\":\"2021-5-1\",\"status\":\"1\"},{\"date\":\"2021-5-2\",\"status\":\"1\"},{\"date\":\"2021-5-3\",\"status\":\"1\"},{\"date\":\"2021-5-4\",\"status\":\"1\"},{\"date\":\"2021-5-5\",\"status\":\"1\"},{\"date\":\"2021-4-25\",\"status\":\"2\"},{\"date\":\"2021-5-8\",\"status\":\"2\"}],\"list#num#\":7,\"name\":\"劳动节\",\"rest\":\"\"},{\"desc\":\"6月12日至14日放假,共3天\",\"festival\":\"2021-6-14\",\"list\":[{\"date\":\"2021-6-12\",\"status\":\"1\"},{\"date\":\"2021-6-13\",\"status\":\"1\"},{\"date\":\"2021-6-14\",\"status\":\"1\"}],\"list#num#\":3,\"name\":\"端午节\",\"rest\":\"\"}]",
        "holiday_array": [
            {
                "desc": "4月3日至5日放假调休,共3天",
                "festival": "2021-4-4",
                "list": [
                    {
                        "date": "2021-4-3",
                        "status": "1"
                    },
                    {
                        "date": "2021-4-4",
                        "status": "1"
                    },
                    {
                        "date": "2021-4-5",
                        "status": "1"
                    }
                ],
                "list#num#": 3,
                "name": "清明节",
                "rest": "",
                "list_num": 3
            },
            {
                "desc": "5月1日至5日放假调休,共5天。4月25日(星期日)、5月8日(星期六)上班",
                "festival": "2021-5-1",
                "list": [
                    {
                        "date": "2021-5-1",
                        "status": "1"
                    },
                    {
                        "date": "2021-5-2",
                        "status": "1"
                    },
                    {
                        "date": "2021-5-3",
                        "status": "1"
                    },
                    {
                        "date": "2021-5-4",
                        "status": "1"
                    },
                    {
                        "date": "2021-5-5",
                        "status": "1"
                    },
                    {
                        "date": "2021-4-25",
                        "status": "2"
                    },
                    {
                        "date": "2021-5-8",
                        "status": "2"
                    }
                ],
                "list#num#": 7,
                "name": "劳动节",
                "rest": "",
                "list_num": 7
            },
            {
                "desc": "6月12日至14日放假,共3天",
                "festival": "2021-6-14",
                "list": [
                    {
                        "date": "2021-6-12",
                        "status": "1"
                    },
                    {
                        "date": "2021-6-13",
                        "status": "1"
                    },
                    {
                        "date": "2021-6-14",
                        "status": "1"
                    }
                ],
                "list#num#": 3,
                "name": "端午节",
                "rest": "",
                "list_num": 3
            }
        ]
    }
}

3、根据传入年份返回当年假期列表

接口

此接口只能查询节假日具体那一天,不可以查看具体放几天,以及补班

POST https://api.topthink.com/calendar/year

调用

{
    "year":"2021"
}

响应

{
    "code": 0,
    "message": "Success",
    "data": {
        "year": "2021",
        "holidaylist": "[{\"name\":\"元旦\",\"startday\":\"2021-1-1\"},{\"name\":\"除夕\",\"startday\":\"2021-2-11\"},{\"name\":\"春节\",\"startday\":\"2021-2-12\"},{\"name\":\"清明节\",\"startday\":\"2021-4-4\"},{\"name\":\"劳动节\",\"startday\":\"2021-5-1\"},{\"name\":\"端午节\",\"startday\":\"2021-6-14\"},{\"name\":\"中秋节\",\"startday\":\"2021-9-21\"},{\"name\":\"国庆节\",\"startday\":\"2021-10-1\"}]",
        "holiday_list": [
            {
                "name": "元旦",
                "startday": "2021-1-1"
            },
            {
                "name": "除夕",
                "startday": "2021-2-11"
            },
            {
                "name": "春节",
                "startday": "2021-2-12"
            },
            {
                "name": "清明节",
                "startday": "2021-4-4"
            },
            {
                "name": "劳动节",
                "startday": "2021-5-1"
            },
            {
                "name": "端午节",
                "startday": "2021-6-14"
            },
            {
                "name": "中秋节",
                "startday": "2021-9-21"
            },
            {
                "name": "国庆节",
                "startday": "2021-10-1"
            }
        ]
    }
}

解析

拿到数据,我们把需要的节假日 工作日可以存储在数据库中

1、SQL

create table holiday_array
(
    holiday_date date          not null comment '节假日准确日期' primary key,
    `desc`       varchar(256)  null comment '节假日备注',
    status       int default 1 not null comment '是否为工作日(补班)'
)
    comment '节假日数组';

2、Bean

@Table(name = "holiday_array")
public class Holiday {
    @Id
    private Date holidayDate;
    private String desc;
    private Integer status;

    public Date getHolidayDate() {
        return holidayDate;
    }

    public void setHolidayDate(Date holidayDate) {
        this.holidayDate = holidayDate;
    }

    public String getDesc() {
        return desc;
    }

    public void setDesc(String desc) {
        this.desc = desc;
    }

    public Integer getStatus() {
        return status;
    }

    public void setStatus(Integer status) {
        this.status = status;
    }
}

3、mapper

@Repository
public interface HolidayArrayMapper extends Mapper<Holiday> {

    //区间查询
    @Select("select count(1) form holiday_array where holiday_date between #{start}  and #{end} ")
    int findHolidayByDate(@Param("start") String start,@Param("end") String end);
    //单日查询
    @Select("select count(1) from holiday_array where holiday_date =#{date} ")
    int findHolidayByDate2(@Param("date") String date);
    //单日查询 当天是否为节假日
    @Select("select status from holiday_array where holiday_date =#{date}")
    Integer findHolidayByDate3(@Param("date") String date);
    //批量插入
    @Insert({
            "<script>",
            "insert into holiday_array(holiday_date,`desc`,status) values ",
            "<foreach collection='recordList' item='item' index='index' separator=','>",
            "(#{item.holidayDate}, #{item.desc}, #{item.status})"+ "</foreach>",
            "</script>"
    })
    int insertHoliday(@Param("recordList") List<Holiday> recordList );

}

4、响应体解析

//存储库
    @Autowired
    private HolidayArrayMapper holidayArrayMapper;
    //使用spring自带模板发送 需要代理的可以看https://blog.csdn.net/HezhezhiyuLe/article/details/112177771
    @Autowired
    private RestTemplate restTemplate;
    /**
     * 每月更新节假日 每月一号执行
     */
    @Scheduled(cron = "0 0 2 1 * ? *")
    public void holiday(){
        String ny = DateUtil.getNY();
        Map<String, String> map = new HashMap<>();
        map.put("yearMonth",ny);
        List<Holiday> holidays = new ArrayList<>();
        try {
            HttpHeaders headers = new HttpHeaders();
            headers.set("Authorization", appCode);
            HttpEntity<Map> requestEntity = new HttpEntity<>(map, headers);
            String post =restTemplate.postForEntity(holidayUrl,requestEntity,String.class).getBody();
            if(!IFNull.strNotNull(post)||!post.contains("\"code\":0")){
                return;
            }
            map.clear();
            JSONObject holidayJson = JSON.parseObject(post);
            JSONObject data = holidayJson.getJSONObject("data");
            List<JSONObject> holiday_array = JSON.parseArray(data.getString("holiday_array"), JSONObject.class);
            for (JSONObject holiday : holiday_array) {
                List<JSONObject> list = JSON.parseArray(holiday.getString("list"), JSONObject.class);
                for (JSONObject jsonObject : list) {
                    String date = jsonObject.getString("date");
                    String status = jsonObject.getString("status");
                    Holiday holiday1 = new Holiday();
                    if("1".equals(status)){
                        //节假日日期:名称
                        holiday1.setHolidayDate(DateUtil.parseDate(date));
                        holiday1.setDesc(holiday.getString("name"));
                        holiday1.setStatus(1);
                    }else {
                        //调休工作日时间:备注
                        holiday1.setHolidayDate(DateUtil.parseDate(date));
                        holiday1.setDesc(holiday.getString("desc"));
                        holiday1.setStatus(2);

                    }
                    int holidayByDate = holidayArrayMapper.findHolidayByDate2(date);
                    if(holidayByDate==0){
                        holidays.add(holiday1);
                    }else {
                        System.out.println("重复节假日"+holiday1);
                    }
                }
            }
         } catch (Exception e) {
            e.printStackTrace();
            return;
        }
        //存储
        if(holidays.size()>0){
            int i = holidayArrayMapper.insertHoliday(holidays);
            System.out.println(i);
        }

    }

效果图

万年历/节假日/日历API_日历_02

番外

感谢ThinkAPI维护者答疑
有任何接口问题的可以留言,或者加官方答疑QQ群:375558052


标签:status,name,万年历,日历,list,API,2021,date,holiday
From: https://blog.51cto.com/u_15939406/6287467

相关文章

  • GXT自己封装的Calendar日历类
    因为项目需要自己扩展了一下gxt的日期类,做成一个日历,可往日历当中添加连接必须要有GXT包,因为本个只是把GXT包中的类代码全复制出来然后改成自己所用的日历下面是代码/**ExtGWT2.2.3-ExtforGWT*Copyright(c)2007-2010,ExtJS,LLC.*licens......
  • Restful规范,序列化和反序列化,drf介绍,drf之APIView源码分析
    Restful规范:-RESTful是一种定义API接口的设计风格,AIP接口的编写规范,,尤其适用于前后端分离的应用模式中-这种风格的理念认为后端开发任务就是提供数据的,对外提供的是数据资源的访问接口,所以在定义接口时,客户端访问的URL路径就表示这种要操作的数据资源-我们可以使用......
  • Spartacus 产品明细页面的 API 设计
    当我们使用如下url访问Spartacus产品明细页面时:https://spartacus-demo.eastus.cloudapp.azure.com/electronics-spa/en/USD/product/300938/PhotosmartE317DigitalCamera能观察到下面的OCCAPIcall:https://spartacus-demo.eastus.cloudapp.azure.com:8443/occ/v2/el......
  • Restful规范,drf安装和介绍和使用,APIView源码分析
    1Restful规范#RESTful是一种定义API接口的设计风格,AIP接口的编写规范,,尤其适用于前后端分离的应用模式中这种风格的理念认为后端开发任务就是提供数据的,对外提供的是数据资源的访问接口,所以在定义接口时,客户端访问的URL路径就表示这种要操作的数据资源我们可以使用任何一个......
  • 一篇文章让你入门API测试
     什么是APIAPI是ApplicationProgrammingInterface的简写。实现了两个或多个独立系统或模块间的通信和数据交换能力。什么是API测试API测试是不同于UI级自动化测试,其主要关注在系统架构的业务逻辑层,所以其主要关注不在于UI操作或用户感观上,更重调用逻辑关系。与UI级自动化测试通......
  • OData WebAPI实践-与ABP vNext集成
    本文属于OData系列文章ABP是一个流行的ASP.NET开发框架,旧版的的ABP已经能够非常好的支持了OData,并提供了对应的OData包。ABPvNext是一个重新设计的,面向微服务的框架,提供了一些非常有用的特性,包括分页查询等但是它并不能原生支持OData,我们需要自行实现。本文......
  • Dynamic Process Creation Using API [JBPM 5.1]
    [url]http://atulkotwale.blogspot.com/2012/01/dynamic-process-creation-using-api-jbpm.html[/url]HiFriends,Asyouguysallknowjbpmhascameupwithnewversion.Ithassomebeautifulfeatures.InthispostIwillshowyouhowcanwe......
  • 3.OS-Virtualization|进程API
    我的总结fork,父子进程的fork返回子进程的id,而子进程的fork不会再创建进行,返回0,弱出错返回-1wait,等待子进行结束,保证结果的正确性exec,与fork类型,但没有重新调用,而是直接覆盖当前的程序,初始化所有堆和栈空间执行API设计哲学:做正确的事,分离抽象。重定向其他:学会使用手册man......
  • 报错问题:谷粒商城Access to XMLHttpRequest at 'http://localhost:88/api/sys/login'
    大概在P46P47,跟着配置后出现问题AccesstoXMLHttpRequestat'http://localhost:88/api/sys/login'fromorigin'http://localhost:8001'hasbeenblockedbyCORSpolicy: 上网查了一下,说是跨域的问题,检查了一会,有人说是nacos的命名空间的问题,也有人说是版本上的问题,大多......
  • Tomcat10依赖问题 jakarta.servlet-api 6.0.0 spring6.x.x
    org.springframework.web.servlet.DispatcherServlet’isnotassignabletojavax.servlet.Servlet1、pom.xml配置<dependency><groupId>jakarta.servlet</groupId><artifactId>jakarta.servlet-api</artifact......