Pu Zhibing
2025-06-19 546be8a1bafdfc804575a8d07a5d9f2306c29c42
ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/utils/XiaoeUtils.java
@@ -1,5 +1,6 @@
package com.ruoyi.goods.utils;
import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.http.HttpUtil;
import com.alibaba.fastjson2.JSONArray;
import com.alibaba.fastjson2.JSONObject;
@@ -9,10 +10,7 @@
import com.ruoyi.goods.domain.dto.XiaoeCourseQueryDto;
import com.ruoyi.goods.domain.dto.XiaoeLiveDto;
import com.ruoyi.goods.domain.dto.XiaoeLiveQueryDto;
import com.ruoyi.goods.domain.vo.XiaoeCourseChapterVO;
import com.ruoyi.goods.domain.vo.XiaoeCourseGroupVO;
import com.ruoyi.goods.domain.vo.XiaoeCourseVO;
import com.ruoyi.goods.domain.vo.XiaoeLiveVo;
import com.ruoyi.goods.domain.vo.*;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
@@ -22,11 +20,8 @@
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.*;
import java.util.concurrent.TimeUnit;
/**
 * 小鹅通工具类
@@ -48,9 +43,11 @@
    //固定填写client_credential
    private  String grant_type = "client_credential";
    //获取直播列表
    private static final String LIVE_PAGE_LIST = "https://api.xiaoe-tech.com/xe.alive.list.get/2.0.0";
    private static final String LIVE_PAGE_LIST = "https://api.xiaoe-tech.com/xe.alive.list.get/1.0.0";
    private static final String LIVE_PAGE_LIST_V2 = "https://api.xiaoe-tech.com/xe.alive.list.get/2.0.0";
    //获取直播详情
    private static final String LIVE_DETAIL = "https://api.xiaoe-tech.com/xe.alive.detail.get/1.0.0";
    private static final String LIVE_DETAIL_V2 = "https://api.xiaoe-tech.com/xe.alive.detail.get/2.0.0";
    //创建直播
    private static final String LIVE_ADD = "https://api.xiaoe-tech.com/xe.alive.live.create/1.0.0";
    //编辑直播
@@ -63,6 +60,7 @@
    private static final String COURSE_CHAPTER = "https://api.xiaoe-tech.com/xe.course.course.chapter.get/1.0.0";
    //获取店铺商品分组列表
    private static final String COURSE_GROUP_LIST = "https://api.xiaoe-tech.com/xe.resource_tags.list/1.0.0";
    /**
     * 获取小鹅通access_token
@@ -97,8 +95,11 @@
                e.printStackTrace();
            }
            JSONObject jsonObject = JSONObject.parseObject(result);
            log.info("获取access_token返回结果:{}", result);
            Map data = (Map) jsonObject.get("data");
            accessToken = (String) data.get("access_token");
            accessToken = (String)data.get("access_token");
            Integer expiresIn = (int) data.get("expires_in");
            redisService.setCacheObject("xiaoe:access_token", accessToken,Long.parseLong(expiresIn.toString()), TimeUnit.SECONDS);
        }
        return accessToken;
    }
@@ -121,15 +122,17 @@
        String post = HttpUtil.post(LIVE_PAGE_LIST, JSONObject.toJSONString(postParams));
        Page<XiaoeLiveVo> xiaoeLiveVOPage = new Page<>();
        if (StringUtils.isNotBlank(post)) {
            log.info("获取直播列表返回结果:{}", post);
            JSONObject jsonObject = JSONObject.parseObject(post);
            if (jsonObject.get("code").equals(0)) {
            if (jsonObject.get("code").equals(0) ) {
                JSONObject data = jsonObject.getJSONObject("data");
                JSONArray list = data.getJSONArray("list");
                List<XiaoeLiveVo> xiaoeLiveVos = JSONArray.parseArray(list.toJSONString(), XiaoeLiveVo.class);
                xiaoeLiveVOPage.setRecords(xiaoeLiveVos);
                xiaoeLiveVOPage.setCurrent(data.getLong("page"));
                xiaoeLiveVOPage.setTotal(data.getLong("total"));
                xiaoeLiveVOPage.setPages(data.getLong("page_count"));
                if (CollectionUtil.isNotEmpty(list)) {
                    List<XiaoeLiveVo> xiaoeLiveVos = JSONArray.parseArray(list.toJSONString(), XiaoeLiveVo.class);
                    xiaoeLiveVOPage.setRecords(xiaoeLiveVos);
                    xiaoeLiveVOPage.setCurrent(dto.getPage());
                    xiaoeLiveVOPage.setPages(data.getLong("page_count"));
                }
            }
        }
        return xiaoeLiveVOPage;
@@ -157,6 +160,61 @@
    }
    /**
     * 获取直播列表2.0
     * @param dto
     * @return
     */
    public Page<XiaoeLiveVoV2> getLivePageListV2(XiaoeLiveQueryDto dto) {
        Map<String,Object> postParams = new HashMap<>();
        postParams.put("create_mode", dto.getCreateMode());
        postParams.put("state", 0);
        postParams.put("search_alive_type", -1);
        postParams.put("alive_play_state", dto.getAlivePlayState());
        postParams.put("page", dto.getPage());
        postParams.put("page_size", dto.getPageSize());
        postParams.put("access_token", getAccessToken());
        postParams.put("tag_ids", dto.getTags());
        log.info("获取直播详情2.0请求参数:{}", JSONObject.toJSONString(postParams));
        String post = HttpUtil.post(LIVE_PAGE_LIST_V2, JSONObject.toJSONString(postParams));
        Page<XiaoeLiveVoV2> xiaoeLiveVOPage = new Page<>();
        if (StringUtils.isNotBlank(post)) {
            log.info("获取直播详情2.0返回结果:{}", post);
            JSONObject jsonObject = JSONObject.parseObject(post);
            if (jsonObject.get("code").equals(0)) {
                JSONObject data = jsonObject.getJSONObject("data");
                JSONArray list = data.getJSONArray("live_list");
                if (!list.isEmpty()){
                    List<XiaoeLiveVoV2> xiaoeLiveVos = JSONArray.parseArray(list.toJSONString(), XiaoeLiveVoV2.class);
                    xiaoeLiveVOPage.setRecords(xiaoeLiveVos);
                    xiaoeLiveVOPage.setCurrent(dto.getPage());
                    xiaoeLiveVOPage.setTotal(data.getLong("total_count"));
                }
            }
        }
        return xiaoeLiveVOPage;
    }
    /**
     *获取直播详情
     * @param id 直播ID
     * @return
     */
    public XiaoeLiveDetailVOV2 getLiveDetailV2(String id) {
        Map<String, Object> postParams = new HashMap<>();
        postParams.put("id", id);
        postParams.put("access_token", getAccessToken());
        String post = HttpUtil.post(LIVE_DETAIL_V2, JSONObject.toJSONString(postParams));
        XiaoeLiveDetailVOV2 vo = null;
        if (StringUtils.isNotBlank(post)) {
            JSONObject jsonObject = JSONObject.parseObject(post);
            if (jsonObject.get("code").equals(0)) {
                JSONObject data = jsonObject.getJSONObject("data");
                vo = JSONObject.parseObject(data.toJSONString(), XiaoeLiveDetailVOV2.class);
            }
        }
        return vo;
    }
    /**
     * 创建直播
     * @param dto
     * @return
@@ -176,18 +234,22 @@
        moudleInfoMap.put("alive_mode", dto.getAliveMode());
        requestParams.put("module_info", moudleInfoMap);
        //讲师信息
        List<Map<String, Object>> roleList = new ArrayList<>();
        Map<String, Object> roleInfoMap = new HashMap<>();
        roleInfoMap.put("role_name", "讲师");
        roleInfoMap.put("user_id", dto.getUserId());
        requestParams.put("role_info", roleInfoMap);
        roleList.add(roleInfoMap);
        requestParams.put("role_info", roleList);
        //商品信息
        Map<String, Object> goodsInfoMap = new HashMap<>();
        goodsInfoMap.put("sale_type", 2);//售卖类型:1-单独售卖、2-关联售卖
        goodsInfoMap.put("sale_type", 1);//售卖类型:1-单独售卖、2-关联售卖
        goodsInfoMap.put("payment_type", dto.getPaymentType());
        if (dto.getPaymentType().equals(3)) {
            goodsInfoMap.put("resource_password", dto.getResourcePassword());
        }
        requestParams.put("goods_info", goodsInfoMap);
        requestParams.put("access_token", getAccessToken());
        log.info("创建直播参数:{}" ,JSONObject.toJSONString(requestParams));
        String post = HttpUtil.post(LIVE_ADD, JSONObject.toJSONString(requestParams));
        if (StringUtils.isNotBlank(post)) {
            JSONObject jsonObject = JSONObject.parseObject(post);
@@ -200,7 +262,7 @@
        return null;
    }
    /**
     * 创建直播
     * 编辑直播
     * @param dto
     * @return
     */
@@ -221,18 +283,22 @@
        moudleInfoMap.put("alive_mode", dto.getAliveMode());
        requestParams.put("module_info", moudleInfoMap);
        //讲师信息
        List<Map<String, Object>> roleList = new ArrayList<>();
        Map<String, Object> roleInfoMap = new HashMap<>();
        roleInfoMap.put("role_name", "讲师");
        roleInfoMap.put("user_id", dto.getUserId());
        requestParams.put("role_info", roleInfoMap);
        roleList.add(roleInfoMap);
        requestParams.put("role_info", roleList);
        //商品信息
        Map<String, Object> goodsInfoMap = new HashMap<>();
        goodsInfoMap.put("sale_type", 2);//售卖类型:1-单独售卖、2-关联售卖
        goodsInfoMap.put("sale_type", 1);//售卖类型:1-单独售卖、2-关联售卖
        goodsInfoMap.put("payment_type", dto.getPaymentType());
        if (dto.getPaymentType().equals(3)) {
            goodsInfoMap.put("resource_password", dto.getResourcePassword());
        }
        requestParams.put("goods_info", goodsInfoMap);
        requestParams.put("access_token", getAccessToken());
        log.info("编辑直播参数:{}" ,JSONObject.toJSONString(requestParams));
        String post = HttpUtil.post(LIVE_EDIT, JSONObject.toJSONString(requestParams));
        if (StringUtils.isNotBlank(post)) {
            JSONObject jsonObject = JSONObject.parseObject(post);
@@ -294,15 +360,20 @@
     * @return
     */
    public Page<XiaoeCourseVO> getCoursePageList(XiaoeCourseQueryDto dto) {
        JSONObject requestParams = JSONObject.parseObject(JSONObject.toJSONString(dto));
        Map<String, Object> requestParams = new HashMap<>();
        requestParams.put("search_content", dto.getSearchContent());
        requestParams.put("page_index", dto.getPageNo());
        requestParams.put("page_size", dto.getPageSize());
        requestParams.put("created_source", dto.getCreatedSource());
        requestParams.put("tags", dto.getTags());
        if (dto.getSortBy().equals(1)) {
            requestParams.put("order_by", "modify");//根据创建时间排序
            requestParams.put("order_type", "降序");
            requestParams.put("order_type",1);
        }
        requestParams.put("sale_status", 1);
        requestParams.put("access_token", getAccessToken());
        String post = HttpUtil.post(COURSE_PAGE_LIST, requestParams.toJSONString());
        String post = HttpUtil.post(COURSE_PAGE_LIST, JSONObject.toJSONString(requestParams));
        Page<XiaoeCourseVO> page = new Page<>();
        if (StringUtils.isNotBlank(post)) {
            log.info("获取课程列表返回结果:{}" ,post);
@@ -331,16 +402,16 @@
        requestParams.put("course_id", id);
        requestParams.put("access_token", getAccessToken());
        String post = HttpUtil.post(COURSE_CHAPTER, JSONObject.toJSONString(requestParams));
        List<XiaoeCourseChapterVO> xiaoeCourseChapterVO = new ArrayList<>();
        List<XiaoeCourseChapterVO> courseChapterVOList = new ArrayList<>();
        if (StringUtils.isNotBlank(post)) {
            log.info("查询课程目录小节返回结果:{}" ,post);
            JSONObject jsonObject = JSONObject.parseObject(post);
            if (jsonObject.get("code").equals(0)) {
                String data = jsonObject.getString("data");
                xiaoeCourseChapterVO = JSONArray.parseArray(data, XiaoeCourseChapterVO.class);
                JSONObject data = jsonObject.getJSONObject("data");
                courseChapterVOList = JSONArray.parseArray(data.getString("list"), XiaoeCourseChapterVO.class);
            }
        }
        return xiaoeCourseChapterVO;
        return courseChapterVOList;
    }
    public static void main(String[] args) {
        String urlString = BASE_URL +