API:(需要传年份月份)

/**
     * 百度节假日接口
     */
    String BAIDU_HOLIDAY_URL = "http://opendata.baidu.com/api.php?query=YEAR_MONTH&resource_id=6018&format=json";

    /**
     * 百度万年历接口
     */
    String BAIDU_CALENDAR_URL = "http://opendata.baidu.com/api.php?query=YEAR_MONTH&resource_id=39043&format=json&tn=wisetpl";

返回的json转对象

 	private static RestTemplate restTemplate = new RestTemplate();
    private static SimpleDateFormat format = new SimpleDateFormat("yyyy-M-d");
    private static SimpleDateFormat format1 = new SimpleDateFormat("yyyy-MM-dd");

    /**
     * 根据日历获取节假日信息
     *
     * @param yearMonth
     * @return
     */
    public static List<BaiduHolidayInfo> queryHolidaysByAlmanac(String yearMonth) {
        List<BaiduHolidayInfo> holidays = null;
        List<BaiduAlmanacInfo> almanacs = new ArrayList<>();
        Integer year = Integer.parseInt(yearMonth.substring(0, 4));

        if (yearMonth.contains("月")) {
            Integer month = Integer.parseInt(yearMonth.substring(5, yearMonth.indexOf("月")));
            almanacs = queryAlmanacs(year, month);
        } else {
            for (int i = 0; i < 12; i++) {
                almanacs.addAll(queryAlmanacs(year, i));
            }
        }

        holidays = convert(almanacs);

        return holidays;
    }

    /**
     * 获取对应的年月份周围的日历信息
     *
     * @param year
     * @param month
     * @return
     */
    public static List<BaiduAlmanacInfo> queryAlmanacs(Integer year, Integer month) {
        String yearMonth = year + "年" + month + "月";
        String url = HolidayUrlConstant.BAIDU_CALENDAR_URL.replace("YEAR_MONTH", yearMonth);
        JSONObject result = JSONObject.parseObject(restTemplate.getForObject(url, String.class));
        List<BaiduAlmanacInfo> almanacs = resolveAlmanac(result);
        List<BaiduAlmanacInfo> resultList = new ArrayList<>();
        almanacs.forEach(
                oldAlmanac -> {
                    if (year.equals(Integer.parseInt(oldAlmanac.getYear()))
                            && month.equals(Integer.parseInt(oldAlmanac.getMonth()))) {
                        resultList.add(oldAlmanac);
                    }
                });
        return resultList;
    }

/**
     * 解析百度日历接口返回的json对象
     *
     * @param jsonObject
     * @return
     */
    private static List<BaiduAlmanacInfo> resolveAlmanac(JSONObject jsonObject) {
        List<BaiduAlmanacInfo> almanacs = new ArrayList<>();

        try {
            if ("0".equalsIgnoreCase(jsonObject.getString("status"))) {
                JSONArray data = jsonObject.getJSONArray("data");
                if (!CollectionUtils.isEmpty(data)) {
                    JSONObject item = data.getJSONObject(0);
                    if (item == null || item.get("almanac") == null) {
                        return almanacs;
                    }
                    JSONArray jsonArray = item.getJSONArray("almanac");
                    if (!CollectionUtils.isEmpty(jsonArray)) {
                        for (int i = 0; i < jsonArray.size(); i++) {
                            JSONObject h = jsonArray.getJSONObject(i);
                            String oDateStr = h.getString("oDate");
                            String animalStr = h.getString("animal");
                            String avoidStr = h.getString("avoid");
                            String yearStr = h.getString("year");
                            String monthStr = h.getString("month");
                            String dayStr = h.getString("day");
                            String suitStr = h.getString("suit");
                            String statusStr = h.getString("status");
                            String dateStr = yearStr + "-" + monthStr + "-" + dayStr;
                            oDateStr = format1.format(format.parse(dateStr));
                            // 生成对象
                            BaiduAlmanacInfo almanac = BaiduAlmanacInfo.builder().animal(animalStr).avoid(avoidStr)
                                .day(dayStr).month(monthStr).oDate(oDateStr).year(yearStr).suit(suitStr)
                                .status(Integer.parseInt(StringUtils.isBlank(statusStr) ? "0" : statusStr)).build();
                            almanacs.add(almanac);
                        }
                    }
                }
            }
        } catch (Exception e) {
            log.error("resolveAlmanac is error");
            throw new RuntimeException(e);
        }

        return almanacs;
    }

    /**
     * 解析百度接口返回的json对象
     *
     * @param jsonObject
     * @return
     */
    private static List<BaiduHolidayInfo> resolveHoliday(JSONObject jsonObject) {
        List<BaiduHolidayInfo> holidays = new ArrayList<>();
        try {
            if ("0".equalsIgnoreCase(jsonObject.getString("status"))) {
                JSONArray data = jsonObject.getJSONArray("data");
                if (!CollectionUtils.isEmpty(data)) {
                    JSONObject item = data.getJSONObject(0);
                    if (item == null || item.get("holiday") == null) {
                        return holidays;
                    }
                    JSONArray jsonArray = item.getJSONArray("holiday");
                    if (!CollectionUtils.isEmpty(jsonArray)) {
                        for (int i = 0; i < jsonArray.size(); i++) {
                            JSONObject h = jsonArray.getJSONObject(i);
                            JSONArray hh = h.getJSONArray("list");
                            String descStr = h.getString("desc");
                            String nameStr = h.getString("name");
                            String festivalStr = h.getString("festival");
                            String restStr = h.getString("rest");
                            String num = h.getString("list#num#baidu");
                            if (!CollectionUtils.isEmpty(hh)) {
                                for (int j = 0; j < hh.size(); j++) {
                                    JSONObject hhh = hh.getJSONObject(j);
                                    String dateStr = hhh.getString("date");
                                    String statusStr = hhh.getString("status");
                                    dateStr = format1.format(format.parse(dateStr));
                                    // 生成对象
                                    BaiduHolidayInfo holiday = BaiduHolidayInfo.builder().name(nameStr).desc(descStr)
                                        .date(dateStr).status(Integer.valueOf(statusStr)).festival(festivalStr)
                                        .rest(restStr).num(Integer.valueOf(num)).build();
                                    holidays.add(holiday);
                                }
                            }
                        }
                    }
                }
            }
        } catch (Exception e) {
            log.error("resolve is error");
            throw new RuntimeException(e);
        }
        return holidays;
    }

    /**
     * 转换
     *
     * @param almanacs
     * @return
     */
    private static List<BaiduHolidayInfo> convert(List<BaiduAlmanacInfo> almanacs) {
        List<BaiduHolidayInfo> baiduHolidays = new ArrayList<>();
        if (CollectionUtils.isEmpty(almanacs)) {
            return baiduHolidays;
        }
        almanacs.forEach(almanac -> {
            Integer status = almanac.getStatus();
            if (status != null) {
                String name = "";
                if(status.equals(0)){
                    return;
                }
                if (status.equals(1)) {
                    name = "法定假日";
                } else if (status.equals(2)) {
                    name = "补班";
                }
                baiduHolidays.add(BaiduHolidayInfo.builder().name(name).rest(almanac.getSuit()).date(almanac.getODate())
                    .status(status).build());
            }
        });
        return baiduHolidays;
    }

对应的BO

//万年历
public class BaiduAlmanacInfo {
    /**
     * 生肖
     */
    private String animal;

    /**
     * 忌讳
     */
    private String avoid;

    /**
     * 天
     */
    private String day;

    /**
     * 月份
     */
    private String month;

    /**
     * 日期
     */
    private String oDate;

    /**
     * 年份
     */
    private String year;

    /**
     * 适宜
     */
    private String suit;

    /**
     * 状态
     * 1:代表休息
     * 2:代表补休
     */
    private Integer status;

    /**
     * 影响天数,包含补班天数
     */
    private Integer num;
}
//节假日
public class BaiduHolidayInfo {
    /**
     * 名称
     */
    private String name;

    /**
     * 建议
     */
    private String rest;

    /**
     * 日期
     */
    private String date;

    /**
     * 状态
     * 1:代表休息
     * 2:代表补休
     */
    private int status;

    /**
     * 描述
     */
    private String desc;

    /**
     * 开始日期
     */
    private String festival;

    /**
     * 影响天数,包含补班天数
     */
    private int num;
}
Logo

为武汉地区的开发者提供学习、交流和合作的平台。社区聚集了众多技术爱好者和专业人士,涵盖了多个领域,包括人工智能、大数据、云计算、区块链等。社区定期举办技术分享、培训和活动,为开发者提供更多的学习和交流机会。

更多推荐