springboot框架调取百度api获取节假日期,并获取某年某月的工作日天数(除去国家法定节假日)

萨瓦迪卡4年前java技术2612

统计考勤的业务需求,写了一个接口,将一年的节假日保存入库,以便获取某月的工作日天数的时候,可以去掉节假日,加上是工作日的周六周天日。精准的获取某月的应到天数。该接口是将假期保存入库。状态为1的是放假日,状态为2的是工作日。

image.png

@RestController
public class HolidayController {
    @Autowired
    private IHolidayService iHolidayService;
    static String BAIDU_URL = "http://opendata.baidu.com/api.php?resource_id=6018&format=json&query=";
    @PostMapping("/saveHoliday")
    @ResponseBody
    public ResultData saveHoliday(@RequestParam(value = "month",required = false) String month) throws ParseException {
//        System.out.println("holidayExist==="+ WorkDayUtils.getWorkDay());
        int a = 0;
        SimpleDateFormat format = new SimpleDateFormat("yyyy-M-d");
        SimpleDateFormat format1 = new SimpleDateFormat("yyyy-MM-dd");
        List<String> list = new ArrayList<String>();
        //String month = "2020-10";
        Map<String,Object> map = new HashMap<String,Object>();
        String responseStr = "";
        try{
            responseStr = HttpUtil.post(BAIDU_URL+month,map);
        }catch (Exception e){
            e.printStackTrace();
           // throw new Exception("第三方接口异常");
        }
//        JSONObject objects = JSONObject.fromObject(responseStr);
        com.alibaba.fastjson.JSONObject jsonTokenStr = JSON.parseObject(responseStr);
//        System.out.println("responseStr"+JSON.toJSONString(jsonTokenStr));
        if(jsonTokenStr.getString("status").equalsIgnoreCase("0")){
            JSONArray data = jsonTokenStr.getJSONArray("data");
            System.out.println("data"+data);
            if(data.size()>0){
                JSONObject item = data.getJSONObject(0);
                JSONArray holiday = item.getJSONArray("holiday");
                System.out.println("holiday"+holiday);
                if(holiday.size()>0){
                    for(int i = 0 ; i < holiday.size(); i ++){
                        JSONObject h = holiday.getJSONObject(i);
                        JSONArray hh = h.getJSONArray("list");
                        if(hh.size()>0){
                            for(int j = 0; j < hh.size(); j++){
                                JSONObject hhh = hh.getJSONObject(j);
                                String dateStr = hhh.getString("date");
                                dateStr = format1.format(format.parse(dateStr));
//                                if(hhh.getString("status").equals("1")){
//                                    list.add(dateStr);
//                                }
                                Holiday holidays = new Holiday();
                                holidays.setDate(dateStr);
                                List<Holiday>  holidayExist = iHolidayService.selectHolidayList(holidays);
                                System.out.println("holidayExist==="+holidayExist);
                                if(holidayExist.size()==0){//已经有数据
                                    Holiday holiday1 = new Holiday();
                                    holiday1.setDate(dateStr);
                                    holiday1.setWorkstate(hhh.getString("status"));
                                    holiday1.setValid("Y");
                                   a= iHolidayService.insertHoliday(holiday1);
                                }

                            }
                        }
                    }

                }
            }
        }
        return ResultData.toresult(a);
    }
}
百度接口地址http://opendata.baidu.com/api.php?resource_id=6018&format=json&query=2020-12 返回的数据格式为:
:

 {
    "status": "0",
    "t": "",
    "set_cache_time": "",
    "data": [
        {
            "StdStg": 6018,
            "StdStl": 8,
            "_update_time": "1580102250",
            "cambrian_appid": "0",
            "almanac": [
                {
                    "avoid": "栽种.破土.置产.祭祀.嫁娶.动土.作灶.祈福.",
                    "date": "2020-12-1",
                    "suit": "开市.交易.立券.挂匾.纳财.开光.出行.入宅.移徙.安床.纳畜.入殓.移柩.安葬."
                },
                {
                    "avoid": "",
                    "date": "2020-12-2",
                    "suit": "嫁娶.祭祀.祈福.求嗣.开光.出行.解除.出火.出行.拆卸.进人口.入宅.移徙.安床.栽种.动土.修造.纳畜.入殓.安葬.立碑.除服.成服."
                },
                {
                    "avoid": "嫁娶.开市.出火.栽种.破土.动土.入宅.移徙.安香.分居.掘井.作灶.",
                    "date": "2020-12-3",
                    "suit": "开光.解除.拆卸.修造.动土.安床.纳畜.安葬.启攒.入殓."
                },
                {
                    "avoid": "诸事不宜.",
                    "date": "2020-12-4",
                    "suit": "破屋.坏垣.余事勿取."
                },
                {
                    "avoid": "探病.安葬.",
                    "date": "2020-12-5",
                    "suit": "嫁娶.祭祀.开光.出火.出行.拆卸.修造.动土.解除.开市.交易.立券.挂匾.纳财.入宅.移徙.安床.栽种.纳畜."
                },
                {
                    "avoid": "入宅.作灶.词讼.移徙.出行.赴任.",
                    "date": "2020-12-6",
                    "suit": "祭祀.祈福.求嗣.开光.解除.理发.会亲友.栽种.纳畜.牧养.安葬.修坟.立碑.启攒."
                },
                {
                    "avoid": "嫁娶.动土.安床.造桥.掘井.",
                    "date": "2020-12-7",
                    "suit": "纳采.订盟.移徙.入宅.出行.安机械.会亲友.祭祀.祈福.斋醮.开光.安香.出火.解除.求医.针灸.治病.造屋.起基.修造.安门.造船.纳畜.牧养.移柩.入殓.启攒.谢土.修坟.立碑."
                },
                {
                    "avoid": "开市.斋醮.破土.安葬.",
                    "date": "2020-12-8",
                    "suit": "祭祀.沐浴.作灶.纳财.捕捉.畋猎.安床.扫舍."
                },
                {
                    "avoid": "移徙.开市.入宅.安葬.",
                    "date": "2020-12-9",
                    "suit": "祈福.斋醮.纳采.订盟.解除.架马.开柱眼.修造.动土.起基.上梁.归岫.造屋.合脊.掘井.除服.成服.破土.栽种."
                },
                {
                    "avoid": "嫁娶.祈福.开光.掘井.安葬.行丧.",
                    "date": "2020-12-10",
                    "suit": "纳采.订盟.祭祀.沐浴.冠笄.合帐.裁衣.修造.动土.拆卸.移徙.入宅.安门.开仓.筑堤.作厕.栽种.纳畜.补垣.塞穴."
                },
                {
                    "avoid": "入宅.动土.破土.嫁娶.作灶.造船.",
                    "date": "2020-12-11",
                    "suit": "合帐.裁衣.教牛马.余事勿取."
                },
                {
                    "avoid": "斋醮.作梁.掘井.行丧.安葬.",
                    "date": "2020-12-12",
                    "suit": "纳采.订盟.嫁娶.祭祀.祈福.安香.出火.出行.会亲友.经络.求医.治病.解除.拆卸.起基.修造.动土.定磉.扫舍.栽种.牧养.造畜椆栖."
                },
                {
                    "avoid": "嫁娶.祈福.出火.移徙.入宅.",
                    "date": "2020-12-13",
                    "suit": "纳财.开市.交易.立券.会亲友.进人口.经络.祭祀.祈福.安香.出火.求医.治病.修造.动土.拆卸.扫舍.安床.栽种.牧养.开生坟.合寿木.入殓.安葬.启攒."
                },
                {
                    "avoid": "入宅.修造.动土.破土.安门.上梁.",
                    "date": "2020-12-14",
                    "suit": "祭祀.入殓.移柩.余事勿取."
                },
                {
                    "avoid": "掘井.伐木.斋醮.作灶.",
                    "date": "2020-12-15",
                    "suit": "塑绘.开光.订盟.纳采.裁衣.冠笄.拆卸.修造.安床.入宅.出火.安葬.谢土.赴任."
                },
                {
                    "avoid": "出行.安葬.修坟.开市.",
                    "date": "2020-12-16",
                    "suit": "祭祀.塑绘.开光.裁衣.冠笄.嫁娶.纳采.拆卸.修造.动土.竖柱.上梁.安床.移徙.入宅.安香.结网.捕捉.畋猎.伐木.进人口.放水."
                },
                {
                    "avoid": "诸事不宜.",
                    "date": "2020-12-17",
                    "suit": "祭祀.求医.破屋.坏垣.余事勿取."
                },
                {
                    "avoid": "开光.栽种.治病.安门.作灶.",
                    "date": "2020-12-18",
                    "suit": "祭祀.祈福.斋醮.出行.冠笄.安机械.移徙.入宅.安香.安床.除服.成服.移柩.启攒."
                },
                {
                    "avoid": "",
                    "date": "2020-12-19",
                    "suit": "塑绘.斋醮.出行.拆卸.解除.修造.移徙.造船.入殓.除服.成服.移柩.启攒.修坟.立碑.谢土."
                },
                {
                    "avoid": "开市.破土.",
                    "date": "2020-12-20",
                    "suit": "祭祀.沐浴.安床.纳财.畋猎.捕捉."
                },
                {
                    "avoid": "嫁娶.作灶.",
                    "date": "2020-12-21",
                    "suit": "订盟.纳采.祭祀.祈福.修造.动土.上梁.破土."
                },
                {
                    "avoid": "入宅.安葬.",
                    "date": "2020-12-22",
                    "suit": "出行.沐浴.理发.补垣.塞穴."
                },
                {
                    "avoid": "入宅.动土.破土.余事勿取.",
                    "date": "2020-12-23",
                    "suit": "教牛马.余事勿取."
                },
                {
                    "avoid": "开市.安葬.",
                    "date": "2020-12-24",
                    "suit": "嫁娶.出行.求医.治病.祭祀.祈福.上梁.纳畜."
                },
                {
                    "avoid": "嫁娶.祈福.",
                    "date": "2020-12-25",
                    "suit": "开市.立券.开光.解除.安机械.上梁.启攒.安葬."
                },
                {
                    "avoid": "诸事不宜.",
                    "date": "2020-12-26",
                    "suit": "平治道涂.余事勿取."
                },
                {
                    "avoid": "开市.嫁娶.",
                    "date": "2020-12-27",
                    "suit": "求嗣.斋醮.塑绘.订盟.纳采.出火.拆卸.修造.动土.造桥.安机械.栽种.纳畜.牧养.入殓.除服.成服.移柩.破土.安葬."
                },
                {
                    "avoid": "开市.安葬.",
                    "date": "2020-12-28",
                    "suit": "嫁娶.订盟.纳采.祭祀.祈福.修造.动土.移徙.入宅."
                },
                {
                    "avoid": "诸事不宜.",
                    "date": "2020-12-29",
                    "suit": "治病.破屋.坏垣.余事勿取."
                },
                {
                    "avoid": "造桥.安门.理发.造庙.栽种.作灶.",
                    "date": "2020-12-30",
                    "suit": "祭祀.祈福.求嗣.斋醮.开光.入学.订盟.冠笄.伐木.修造.动土.起基.放水.交易.开池."
                },
                {
                    "avoid": "诸事不宜.",
                    "date": "2020-12-31",
                    "suit": "解除.坏垣.余事勿取."
                }
            ],
            "holiday": [
                {
                    "desc": "1月1日放假一天",
                    "festival": "2020-1-1",
                    "list": [
                        {
                            "date": "2020-1-1",
                            "status": "1"
                        }
                    ],
                    "list#num#baidu": 1,
                    "name": "元旦",
                    "rest": "2019年12月30日和2019年12月31日请假两天,与周末连休可拼5天小长假。"
                },
                {
                    "desc": "1月24日放假一天",
                    "festival": "2020-1-24",
                    "list": [
                        {
                            "date": "2020-1-24",
                            "status": "1"
                        }
                    ],
                    "list#num#baidu": 1,
                    "name": "除夕",
                    "rest": "农历腊月最后一天为除夕,即大年初一前夜,又称为年三十。"
                },
                {
                    "desc": "1月24日(除夕)至1月30日放假7天,1月19日,2月1日上班",
                    "festival": "2020-1-25",
                    "list": [
                        {
                            "date": "2020-1-24",
                            "status": "1"
                        },
                        {
                            "date": "2020-1-25",
                            "status": "1"
                        },
                        {
                            "date": "2020-1-26",
                            "status": "1"
                        },
                        {
                            "date": "2020-1-27",
                            "status": "1"
                        },
                        {
                            "date": "2020-1-28",
                            "status": "1"
                        },
                        {
                            "date": "2020-1-29",
                            "status": "1"
                        },
                        {
                            "date": "2020-1-30",
                            "status": "1"
                        },
                        {
                            "date": "2020-1-19",
                            "status": "2"
                        },
                        {
                            "date": "2020-1-31",
                            "status": "1"
                        },
                        {
                            "date": "2020-2-1",
                            "status": "1"
                        },
                        {
                            "date": "2020-2-2",
                            "status": "1"
                        }
                    ],
                    "list#num#baidu": 11,
                    "name": "春节",
                    "rest": "2020年1月19日至2020年1月23日请假5天,与周末连休可拼13天长假。"
                },
                {
                    "desc": "4月4日至4月6日放假3天",
                    "festival": "2020-4-4",
                    "list": [
                        {
                            "date": "2020-4-4",
                            "status": "1"
                        },
                        {
                            "date": "2020-4-5",
                            "status": "1"
                        },
                        {
                            "date": "2020-4-6",
                            "status": "1"
                        }
                    ],
                    "list#num#baidu": 3,
                    "name": "清明节",
                    "rest": "2020年4月7日至2020年4月10日请假4天,与周末连休可拼9天长假。"
                },
                {
                    "desc": "5月1日至5月5日放假5天,4月26日,5月9日上班",
                    "festival": "2020-5-1",
                    "list": [
                        {
                            "date": "2020-5-1",
                            "status": "1"
                        },
                        {
                            "date": "2020-5-2",
                            "status": "1"
                        },
                        {
                            "date": "2020-5-3",
                            "status": "1"
                        },
                        {
                            "date": "2020-5-4",
                            "status": "1"
                        },
                        {
                            "date": "2020-5-5",
                            "status": "1"
                        },
                        {
                            "date": "2020-4-26",
                            "status": "2"
                        },
                        {
                            "date": "2020-5-9",
                            "status": "2"
                        }
                    ],
                    "list#num#baidu": 7,
                    "name": "劳动节",
                    "rest": "2020年4月26日至2020年4月30日请假5天,与周末连休可拼11天长假。"
                },
                {
                    "desc": "6月25日至6月27日放假3天,6月28日上班",
                    "festival": "2020-6-25",
                    "list": [
                        {
                            "date": "2020-6-25",
                            "status": "1"
                        },
                        {
                            "date": "2020-6-26",
                            "status": "1"
                        },
                        {
                            "date": "2020-6-27",
                            "status": "1"
                        },
                        {
                            "date": "2020-6-28",
                            "status": "2"
                        }
                    ],
                    "list#num#baidu": 4,
                    "name": "端午节",
                    "rest": "2020年6月22日至2020年6月24日请假3天,与周末连休可拼8天长假。"
                },
                {
                    "desc": "10月1日至10月8日放假8天,9月27日,10月10日上班",
                    "festival": "2020-10-1",
                    "list": [
                        {
                            "date": "2020-10-1",
                            "status": "1"
                        },
                        {
                            "date": "2020-10-2",
                            "status": "1"
                        },
                        {
                            "date": "2020-10-3",
                            "status": "1"
                        },
                        {
                            "date": "2020-10-4",
                            "status": "1"
                        },
                        {
                            "date": "2020-10-5",
                            "status": "1"
                        },
                        {
                            "date": "2020-10-6",
                            "status": "1"
                        },
                        {
                            "date": "2020-10-7",
                            "status": "1"
                        },
                        {
                            "date": "2020-10-8",
                            "status": "1"
                        },
                        {
                            "date": "2020-9-27",
                            "status": "2"
                        },
                        {
                            "date": "2020-10-10",
                            "status": "2"
                        }
                    ],
                    "list#num#baidu": 10,
                    "name": "中秋节",
                    "rest": "10月9日至10月10日请假2天,与周末连休可拼11天长假。"
                },
                {
                    "desc": "10月1日至10月8日放假8天,9月27日,10月10日上班",
                    "festival": "2020-10-1",
                    "list": [
                        {
                            "date": "2020-10-1",
                            "status": "1"
                        },
                        {
                            "date": "2020-10-2",
                            "status": "1"
                        },
                        {
                            "date": "2020-10-3",
                            "status": "1"
                        },
                        {
                            "date": "2020-10-4",
                            "status": "1"
                        },
                        {
                            "date": "2020-10-5",
                            "status": "1"
                        },
                        {
                            "date": "2020-10-6",
                            "status": "1"
                        },
                        {
                            "date": "2020-10-7",
                            "status": "1"
                        },
                        {
                            "date": "2020-10-8",
                            "status": "1"
                        },
                        {
                            "date": "2020-9-27",
                            "status": "2"
                        },
                        {
                            "date": "2020-10-10",
                            "status": "2"
                        }
                    ],
                    "list#num#baidu": 10,
                    "name": "国庆节",
                    "rest": "10月9日至10月10日请假2天,与周末连休可拼11天长假。"
                }
            ],
            "holidaylist": [
                {
                    "name": "元旦",
                    "startday": "2020-1-1"
                },
                {
                    "name": "除夕",
                    "startday": "2020-1-24"
                },
                {
                    "name": "春节",
                    "startday": "2020-1-25"
                },
                {
                    "name": "清明节",
                    "startday": "2020-4-4"
                },
                {
                    "name": "劳动节",
                    "startday": "2020-5-1"
                },
                {
                    "name": "端午节",
                    "startday": "2020-6-25"
                },
                {
                    "name": "中秋节",
                    "startday": "2020-10-1"
                },
                {
                    "name": "国庆节",
                    "startday": "2020-10-1"
                }
            ],
            "key": "2020年12月",
            "selectday": "2020-12-1",
            "url": "http://nourl.baidu.com/6018",
            "loc": "http://open.baidu.com/q?r=2002753&k=2020%E5%B9%B412%E6%9C%88",
            "SiteId": 2002753,
            "_version": 2767,
            "_select_time": 1580102077,
            "clicklimit": "1-3",
            "ExtendedLocation": "",
            "OriginQuery": "2020-12",
            "tplt": "calendar_new",
            "resourceid": "6018",
            "fetchkey": "6018_2020年12月",
            "role_id": 10,
            "disp_type": 0,
            "appinfo": ""
        }
    ]
}
  然后通过公共方法获取某月工作日的天数
  
      // 返回工作日集合,只排除周末
    public static List<Date> getWorkDays(int year, int month){
        // 用于储存每月工作日
        List<Date> dates = new ArrayList<Date>();

        Calendar cal = Calendar.getInstance();
        //设置月份
        cal.set(Calendar.YEAR, year);
        // 设置月份
        cal.set(Calendar.MONTH, month - 1);
        // 设置为当月第一天
        cal.set(Calendar.DATE, 1);


        while(cal.get(Calendar.YEAR) == year && cal.get(Calendar.MONTH) < month){
            // 判断当前天为本周的第几天
            int day = cal.get(Calendar.DAY_OF_WEEK);
            // 如果不为周六或者周天,将日期进行储存
            if(!(day == Calendar.SUNDAY || day == Calendar.SATURDAY)){
                dates.add((Date)cal.getTime().clone());
            }
            // 将当前日期增加一天
            cal.add(Calendar.DATE, 1);
        }
        // 返回当前月工作日集合
        return dates;


    }

    /**
     *
     * @param dateList
     * @return 返回日期字符串集合
     */
    public static List<String> getDateString(List<Date> dateList){
        // 储存日期字符串
        List<String> dateString = new ArrayList<>();
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");

        for (Date date : dateList){
            String date2 = simpleDateFormat.format(date);
            dateString.add(date2);

        }
        return dateString;
    }
    public  static int  getWorkDay(String month){
        List<Date> workDays = getWorkDays(Integer.parseInt(month.split("-")[0]), Integer.parseInt(month.split("-")[1]));
        // 获取工作日字符串集合
        List<String> dateString = getDateString(workDays);
        // 获取法定节假日集合
        List list =   staticMapper.selectHolidayByDate(month);
        System.out.println("list==="+list.size());
        List holidayList= new ArrayList();
        List workdayList= new ArrayList();
        for(int i =0;i<list.size();i++){
           Holiday holiday11 = (Holiday) list.get(i);
           if(holiday11.getWorkstate().equals("1")){
               holidayList.add(holiday11.getDate());
           }else if(holiday11.getWorkstate().equals("2")){
               workdayList.add(holiday11.getDate());
           }
        }
//             List<String> holidays = HolidayUtils.getList(month);
        // System.out.println("holidays==="+holidays);
        // 从工作日中除去法定节假日
        dateString.removeAll(holidayList);
        // 从工作日中增加周六日工作日
        dateString.addAll(workdayList);
        System.out.println(dateString.size());
        // 遍历纯工作日集合
        for (String date : dateString){
            System.out.println(date);
        }
        return dateString.size();
    }

相关文章

阿里云服务器 部署项目访问163邮箱服务 超时

阿里云服务器 部署项目访问163邮箱服务 超时

原来的配置如下(启动服务报错,超时):# 配置 SMTP 服务器地址 spring.mail.host=smtp.163.com # 发送邮件服务协议 s...

低分子肝素:90%以上保胎孕妈的护航神药,到底是什么鬼?

放眼望去,保胎门诊部、住院部,保胎微信群、QQ群,占比90%以上的保胎孕妈均使用了低分子肝素进行保胎,堪称“保胎神药”!   没用肝素,就不叫保胎!  可见保胎孕妈中凝血、易栓症状较为普遍。再好的胚胎...

postgresql错误:  操作符不存在: bigint = text(瀚高数据库)

postgresql错误: 操作符不存在: bigint = text(瀚高数据库)

字符串和数字判断是否相等时会报错解决方案:库里执行sql语句:create cast(text as bigint) with inout as implicit;...

mysql创建函数 Navicat 1227 - Access denied; you need (at least one of) the SUPER privilege(s) for

mysql创建函数 Navicat 1227 - Access denied; you need (at least one of) the SUPER privilege(s) for

mysql 创建函数出错信息如下:1227-访问被拒绝;您需要超级权限才能执行此操作你的权限不足,试着用root账户登录数据库操作权限-- 查看是否开启创建函数的功能show variables li...

freeMarker 截取字符串(操作字符串函数 )

<#if c.proSummary!?length gt 25>  <!-- 如果长度 >25 截取25个字-->    ...

com.highgo.jdbc.util.PSQLException: 错误: 操作符不是唯一的: integer = character varying(mybatis postgreSql)

com.highgo.jdbc.util.PSQLException: 错误: 操作符不是唯一的: integer = character varying(mybatis postgreSql)

postgresql抛出的异常,是因为数据库类型是int类型,而java传参String造成。有2种解决方案,建议第二种方案更方便简洁解决方案一:代码public int dele...

发表评论    

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。