admin
2022-09-30 643032515e52a8c760713e32304550101b662d74
抖音商品及API完善
1个文件已删除
6个文件已修改
14个文件已添加
3195 ■■■■■ 已修改文件
facade-goods/src/main/java/com/yeshi/goods/facade/utils/taobao/DaTaoKeApiUtil.java 60 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/controller/client/v2/SearchControllerV2.java 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/service/impl/order/tb/TaoBaoOrderServiceImpl.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/service/manger/ClipboardAnalysisManager.java 26 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/util/goods/CSJCPSApiUtil.java 110 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/util/goods/douyin/CSJCPSApiUtil.java 411 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/util/goods/douyin/vo/DYAggregateH5Filter.java 198 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/util/goods/douyin/vo/DYAggregateH5Result.java 124 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/util/goods/douyin/vo/DYConvertResult.java 38 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/util/goods/douyin/vo/DYGoods.java 236 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/util/goods/douyin/vo/DYGoodsCategory.java 45 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/util/goods/douyin/vo/DYGoodsDetail.java 481 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/util/goods/douyin/vo/DYGoodsSearchFilter.java 220 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/util/goods/douyin/vo/DYLiveInfo.java 707 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/util/goods/douyin/vo/DYLiveSearchFilter.java 72 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/util/goods/douyin/vo/DYOrder.java 254 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/util/goods/douyin/vo/DYOrderFilter.java 100 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/util/goods/douyin/vo/DYOrderResult.java 31 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/util/goods/douyin/vo/ListResult.java 35 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/util/taobao/TaoKeApiUtil.java 20 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/util/taobao/TaoKeOrderApiUtil.java 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
facade-goods/src/main/java/com/yeshi/goods/facade/utils/taobao/DaTaoKeApiUtil.java
@@ -928,32 +928,6 @@
    }
    /**
     * 解析淘口令
     *
     * @param content
     * @return
     */
    public static String parseTaoBaoToken(String content) {
        TaoKeAppInfo app = getRandomApp();
        Map<String, String> params = new TreeMap<>();
        params.put("version", "v1.0.0");
        params.put("appKey", app.getAppKey());
        params.put("content", content);
        params.put("bizSceneId", "1");
        params.put("sign", getSign(params, app.getAppSecret()));
        String result = baseGet("https://openapi.dataoke.com/api/tb-service/parse-content", params);
        System.out.println(result);
        JSONObject resultObj = JSONObject.fromObject(result);
        if (resultObj.optInt("code") == 0 && resultObj.optJSONObject("data") != null) {
            String goodsId = resultObj.optJSONObject("data").optString("goodsId");
            if (!StringUtil.isNullOrEmpty(goodsId)) {
                return goodsId;
            }
        }
        return null;
    }
    /**
@@ -1005,8 +979,38 @@
    }
    /**
     * @author hxh
     * @description 解析口令中的商品ID
     * @date 10:01 2022/9/26
     * @param: content
     * @return java.lang.String
     **/
    public static String parseGoodsIdFromToken(String content) {
        try {
            TaoKeAppInfo app = getRandomApp();
            Map<String, String> params = new TreeMap<>();
            params.put("version", "v1.2.3");
            params.put("appKey", app.getAppKey());
            params.put("content", content);
            params.put("sign", getSign(params, app.getAppSecret()));
            String result = baseGet("https://openapi.dataoke.com/api/tb-service/parse-taokouling", params);
            System.out.println(result);
            JSONObject resultObj = JSONObject.fromObject(result);
            if(resultObj.optInt("code")!=0){
                return null;
            }
            if(resultObj.optJSONObject("data")==null){
                return null;
            }
            return resultObj.optJSONObject("data").optString("goodsId");
        } catch (Exception e) {
        }
        return null;
    }
    public static void main(String[] args) {
        DaTaoKeResult result = DaTaoKeApiUtil.listTipOff(null, null, 50);
        System.out.println(result);
    }
}
fanli/src/main/java/com/yeshi/fanli/controller/client/v2/SearchControllerV2.java
@@ -735,6 +735,12 @@
        if (page == 1) {
            List<String> linkList = HttpUtil.getUrlListFromText(key);
            if ((linkList != null && linkList.size() > 0) || TaoBaoUtil.isHaveNewVersionTaoBaoToken(key)) {
                String id = DaTaoKeApiUtil.parseGoodsIdFromToken(key);
                if (id != null) {
                    goodsId = id;
                }
                if (goodsId == null) {
                try {
                    TaoKeApiUtil.TokenConvertResult result = TaoKeApiUtil.tokenConvert(key);
                    if (result != null) {
@@ -743,11 +749,8 @@
                } catch (TaoBaoTokenParseException e) {
                    e.printStackTrace();
                }
                if (goodsId == null) {
                    String id = DaTaoKeApiUtil.parseTaoBaoToken(key);
                    if (id != null) {
                        goodsId = id;
                    }
                }
                if (goodsId == null) {
                    //解析链接
fanli/src/main/java/com/yeshi/fanli/service/impl/order/tb/TaoBaoOrderServiceImpl.java
@@ -102,6 +102,11 @@
    // 添加淘宝订单
    private void insertTaoBaoOrder(TaoBaoOrder taoBaoOrder) {
        //如果商品ID为空,就以交易ID作为商品ID
        if(StringUtil.isNullOrEmpty(taoBaoOrder.getAuctionId())){
            taoBaoOrder.setAuctionId(taoBaoOrder.getTradeId());
        }
        taoBaoOrderMapper.insertSelective(taoBaoOrder);
        addTaoBaoOrderTradeMap(taoBaoOrder);
        addTaoBaoOrderGoods(taoBaoOrder.getGoods());
fanli/src/main/java/com/yeshi/fanli/service/manger/ClipboardAnalysisManager.java
@@ -165,19 +165,19 @@
        //新版口令
        String goodsId = null;
        if (text.contains("https://m.tb.cn/")) {
            try {
                TaoKeApiUtil.TokenConvertResult result = TaoKeApiUtil.tokenConvert(text);
                if (result != null) {
                    goodsId = result.getNum_iid();
                }
            } catch (TaoBaoTokenParseException e) {
                e.printStackTrace();
            }
            if (goodsId == null) {
                String auctionId = DaTaoKeApiUtil.parseTaoBaoToken(text);
                if (auctionId != null) {
                    typeSet.add(ClipboardContentType.taoBaoToken);
                    goodsId = auctionId;
            String tempGoodsId = DaTaoKeApiUtil.parseGoodsIdFromToken(text);
            if (tempGoodsId != null) {
                goodsId = tempGoodsId;
                typeSet.add(ClipboardContentType.taoBaoToken);
            } else {
                try {
                    TaoKeApiUtil.TokenConvertResult result = TaoKeApiUtil.tokenConvert(text);
                    if (result != null) {
                        goodsId = result.getNum_iid();
                        typeSet.add(ClipboardContentType.taoBaoToken);
                    }
                } catch (TaoBaoTokenParseException e) {
                    e.printStackTrace();
                }
            }
        }
fanli/src/main/java/com/yeshi/fanli/util/goods/CSJCPSApiUtil.java
File was deleted
fanli/src/main/java/com/yeshi/fanli/util/goods/douyin/CSJCPSApiUtil.java
New file
@@ -0,0 +1,411 @@
package com.yeshi.fanli.util.goods.douyin;
import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;
import com.yeshi.fanli.util.goods.douyin.vo.*;
import net.sf.json.JSONObject;
import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.HttpException;
import org.apache.commons.httpclient.methods.PostMethod;
import org.yeshi.utils.JsonUtil;
import org.yeshi.utils.StringUtil;
import java.io.IOException;
import java.lang.reflect.Type;
import java.util.*;
/**
 * @author hxh
 * @title: CSJCPSApiUtil
 * @description: 穿山甲商品联盟
 * 文档:https://lf3-plat.pglstatp-toutiao.com/obj/union-platform/ef1828077907ddfacd07b35665ddd6c3.pdf
 * @date 2022/8/8 15:45
 */
public class CSJCPSApiUtil {
    private static String post(String url, String entity) {
        HttpClient client = new HttpClient();
        client.getHostConfiguration().setProxy("192.168.3.122", 8888);
        PostMethod method = new PostMethod(url);
        method.addRequestHeader("Content-Type", "application/json;charset=UTF-8");
        method.setRequestHeader("Content-Type", "application/json;charset=UTF-8");
        method.setRequestBody(entity);
        try {
            client.executeMethod(method);
            return method.getResponseBodyAsString();
        } catch (HttpException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return "";
    }
    private static String baseRequest(String path, JSONObject data, CSJAppInfo appInfo) {
        String url = "http://ecom.pangolin-sdk-toutiao.com" + path;
        com.alibaba.fastjson.JSONObject params = new com.alibaba.fastjson.JSONObject();
        params.put("app_id", appInfo.getAppId());
        params.put("timestamp", System.currentTimeMillis() / 1000);
        params.put("req_id", UUID.randomUUID().toString());
        params.put("data", data.toString());
        List<String> list = new ArrayList<>();
        for (Iterator<String> its = params.keySet().iterator(); its.hasNext(); ) {
            String key = its.next();
            list.add(key + "=" + params.get(key));
        }
        Collections.sort(list);
        String signStr = StringUtil.concat(list, "&") + appInfo.getSecureKey();
        String sign = StringUtil.Md5(signStr);
        params.put("sign", sign);
        return post(url, params.toString());
    }
    private static String baseRequest(String path, JSONObject data) {
        String appId = "5171164";
        String secureKey = "8a3061d15290ba953f4278a2251b03f4";
        return baseRequest(path, data, new CSJAppInfo(appId, secureKey));
    }
    /**
     * @return void
     * @author hxh
     * @description 获取直播列表
     * @date 15:09 2022/9/26
     * @param: page
     * @param: pageSize
     * @param: sortBy 排序字段: 1-综合;2-销量;3-佣⾦率;4-粉丝数。
     * @param: status
     **/
    public static ListResult listLive(DYLiveSearchFilter filter) {
        JSONObject data = new JSONObject();
        data.put("page", filter.getPage());
        data.put("page_size", filter.getPageSize());
        if (filter.getSortBy() != null) {
            data.put("sort_by", filter.getSortBy());
        }
        if (filter.getSortType() != null) {
            data.put("sort_type", filter.getSortType());
        }
        if (filter.getStatus() != null) {
            data.put("status", filter.getStatus());
        }
        String result = baseRequest("/live/search", data);
        JSONObject resultJson = JSONObject.fromObject(result);
        if (resultJson.optInt("code") != 0) {
            return null;
        }
        JSONObject dataJson = resultJson.optJSONObject("data");
        int count = dataJson.optInt("total");
        Type type = new TypeToken<List<DYLiveInfo>>() {
        }.getType();
        return new ListResult(count, new Gson().fromJson(dataJson.optJSONArray("live_infos").toString(), type));
    }
    /**
     * @return void
     * @author hxh
     * @description 直播转链
     * @date 16:51 2022/9/26
     * @param: authorOpenId  直播间列表接⼝返回的author_openid
     * @param: extra_info ⾃定义字段,只允许 数字、字⺟和_,限制⻓度为20
     * @param: live_ext 直播间列表接⼝下发的live_info.ext
     **/
    public static DYConvertResult liveConvert(String authorOpenId, String extra_info, String live_ext) {
        JSONObject data = new JSONObject();
        data.put("author_openid", authorOpenId);
        data.put("external_info", extra_info);
        data.put("live_ext", live_ext);
        //转链类型:1、抖⾳ deep link;2、抖
        //⾳⼆维码;3、抖⾳⼝令。
        //默认返回抖⾳deeplink
        data.put("share_type", "[1,2,3]");
        String result = baseRequest("/live/link", data);
        System.out.println(result);
        JSONObject resultJson = JSONObject.fromObject(result);
        if (resultJson.optInt("code") != 0) {
            return null;
        }
        JSONObject dataJson = resultJson.optJSONObject("data");
        DYConvertResult bean = new DYConvertResult();
        bean.setDeeplink(dataJson.optString("dy_deeplink"));
        bean.setPassword(dataJson.optString("dy_password"));
        if (dataJson.optJSONObject("dy_qr_code") != null) {
            bean.setQrCode(dataJson.optJSONObject("dy_qr_code").optString("url"));
        }
        return bean;
    }
    /**
     * @return void
     * @author hxh
     * @description 获取商品分类
     * @date 14:04 2022/9/27
     * @param: parentId  本接⼝是通过上级类⽬,查询下级类⽬。如
     * 果要查询⼀级类⽬,则该字段填写 0 即可。
     * 查询⼆级类⽬,输⼊相应的⼀级类⽬即可。
     * 若未传,则默认为0
     **/
    public static ListResult goodsCategory(Integer parentId) {
        JSONObject data = new JSONObject();
        if (parentId != null) {
            data.put("parent_id", parentId);
        }
        String result = baseRequest("/product/category", data);
        System.out.println(result);
        JSONObject resultJson = JSONObject.fromObject(result);
        if (resultJson.optInt("code") != 0) {
            return null;
        }
        JSONObject dataJson = resultJson.optJSONObject("data");
        Type type = new TypeToken<List<DYGoodsCategory>>() {
        }.getType();
        return new ListResult(dataJson.optInt("total"), new Gson().fromJson(dataJson.optJSONArray("category_list").toString(), type));
    }
    /**
     * @return com.yeshi.fanli.util.goods.douyin.vo.ListResult
     * @author hxh
     * @description 商品搜索
     * @date 10:20 2022/9/28
     * @param: filter
     **/
    public static ListResult searchGoods(DYGoodsSearchFilter filter) {
        JSONObject data = new JSONObject();
        data.put("page", filter.getPage());
        data.put("page_size", filter.getPageSize());
        if (filter.getTitle() != null) {
            data.put("title", filter.getTitle());
        }
        if (filter.getFirst_cids() != null) {
            data.put("first_cids", JSONObject.fromObject(filter.getFirst_cids()));
        }
        if (filter.getSecond_cids() != null) {
            data.put("second_cids", JSONObject.fromObject(filter.getSecond_cids()));
        }
        if (filter.getThird_cids() != null) {
            data.put("third_cids", JSONObject.fromObject(filter.getThird_cids()));
        }
        if (filter.getPrice_min() != null) {
            data.put("price_min", filter.getPrice_min());
        }
        if (filter.getPrice_max() != null) {
            data.put("price_max", filter.getPrice_max());
        }
        if (filter.getSell_num_min() != null) {
            data.put("sell_num_min", filter.getSell_num_min());
        }
        if (filter.getSell_num_max() != null) {
            data.put("sell_num_max", filter.getSell_num_max());
        }
        if (filter.getSearch_type() != null) {
            data.put("search_type", filter.getSearch_type());
        }
        if (filter.getOrder_type() != null) {
            data.put("order_type", filter.getOrder_type());
        }
        if (filter.getCos_fee_min() != null) {
            data.put("cos_fee_min", filter.getCos_fee_min());
        }
        if (filter.getCos_fee_max() != null) {
            data.put("cos_fee_max", filter.getCos_fee_max());
        }
        if (filter.getCos_ratio_min() != null) {
            data.put("cos_ratio_min", filter.getCos_ratio_min());
        }
        if (filter.getCos_ratio_max() != null) {
            data.put("cos_ratio_max", filter.getCos_fee_max());
        }
        String result = baseRequest("/product/search", data);
        System.out.println(result);
        JSONObject resultJson = JSONObject.fromObject(result);
        if (resultJson.optInt("code") != 0) {
            return null;
        }
        JSONObject dataJson = resultJson.optJSONObject("data");
        Type type = new TypeToken<List<DYGoods>>() {
        }.getType();
        return new ListResult(dataJson.optInt("total"), new Gson().fromJson(dataJson.optJSONArray("products").toString(), type));
    }
    /**
     * @return com.yeshi.fanli.util.goods.douyin.vo.DYConvertResult
     * @author hxh
     * @description
     * @date 10:22 2022/9/28
     * @param: product_url 商品url。与商品接⼝ detail_url⼀致
     * @param: extra_info 媒体传递扩展参数的字段, 字符只允许字⺟⼤⼩写、数字、 下划线,⻓度不超过20
     * @param: product_ext 商品搜索接⼝返回的 product.ext 字段, 尽量填写
     **/
    public static DYConvertResult goodsConvert(String product_url, String extra_info, String product_ext) {
        JSONObject data = new JSONObject();
        data.put("product_url", product_url);
        data.put("external_info", extra_info);
        data.put("product_ext", product_ext);
        //转链类型:1、抖⾳ deep link;2、抖
        //⾳⼆维码;3、抖⾳⼝令。
        //默认返回抖⾳deeplink
        data.put("share_type", "[1,2,3]");
        String result = baseRequest("/product/link", data);
        System.out.println(result);
        JSONObject resultJson = JSONObject.fromObject(result);
        if (resultJson.optInt("code") != 0) {
            return null;
        }
        JSONObject dataJson = resultJson.optJSONObject("data");
        DYConvertResult bean = new DYConvertResult();
        bean.setDeeplink(dataJson.optString("dy_deeplink"));
        bean.setPassword(dataJson.optString("dy_password"));
        if (dataJson.optJSONObject("dy_qr_code") != null) {
            bean.setQrCode(dataJson.optJSONObject("dy_qr_code").optString("url"));
        }
        return bean;
    }
    /**
     * @return java.util.List<com.yeshi.fanli.util.goods.douyin.vo.DYGoodsDetail>
     * @author hxh
     * @description 商品详情
     * @date 14:09 2022/9/28
     * @param: goodsIds
     **/
    public static List<DYGoodsDetail> goodsDetails(List<Long> goodsIds) {
        JSONObject data = new JSONObject();
        data.put("product_ids", new Gson().toJson(goodsIds));
        String result = baseRequest("/product/detail", data);
        System.out.println(result);
        JSONObject resultJson = JSONObject.fromObject(result);
        if (resultJson.optInt("code") != 0) {
            return null;
        }
        JSONObject dataJson = resultJson.optJSONObject("data");
        Type type = new TypeToken<List<DYGoodsDetail>>() {
        }.getType();
        return new Gson().fromJson(dataJson.optJSONArray("products").toString(), type);
    }
    public static DYOrderResult orderList(DYOrderFilter filter) {
        JSONObject data = JSONObject.fromObject(new Gson().toJson( filter));
        String result = baseRequest("/order/search", data);
        System.out.println(result);
        JSONObject resultJson = JSONObject.fromObject(result);
        if (resultJson.optInt("code") != 0) {
            return null;
        }
        JSONObject dataJson = resultJson.optJSONObject("data");
        return new Gson().fromJson(dataJson.toString(),DYOrderResult.class);
    }
    public static DYOrder getOrderDetail(String orderId,int orderType){
        DYOrderFilter filter=new DYOrderFilter();
        filter.setOrder_type(orderType);
        filter.setOrder_ids(Arrays.asList(new String[]{orderId}));
        DYOrderResult result= orderList(filter);
        if(result==null){
            return null;
        }
        if(result.getOrders()==null||result.getOrders().size()<=0){
            return null;
        }
        return result.getOrders().get(0);
    }
    /**
     * @author hxh
     * @description 聚合页H5
     * @date 15:48 2022/9/30
     * @param: filter
     * @return com.yeshi.fanli.util.goods.douyin.vo.DYAggregateH5Result
     **/
    public static DYAggregateH5Result aggregateH5(DYAggregateH5Filter filter) {
        JSONObject data = new JSONObject();
        if (filter.getDevice() != null) {
            data.put("device", new Gson().toJson(filter.getDevice()));
        }
        if(filter.getExternal_info()!=null){
            data.put("external_info", filter.getExternal_info());
        }
        if(filter.getMaterial_id()!=null){
            data.put("material_id", filter.getMaterial_id());
        }
        if(filter.getProduct_url()!=null){
            data.put("product_url", filter.getProduct_url());
        }
        String result = baseRequest("/aggregate/h5", data);
        System.out.println(result);
        JSONObject resultJson = JSONObject.fromObject(result);
        if (resultJson.optInt("code") != 0) {
            return null;
        }
        JSONObject dataJson = resultJson.optJSONObject("data");
        return new Gson().fromJson(dataJson.toString(),DYAggregateH5Result.class);
    }
    public static void main(String[] args) {
       goodsDetails(Arrays.asList(new Long[]{3549871967593209780L}));
       getOrderDetail("4984002890650177191",1);
    }
}
class CSJAppInfo {
    private String appId;
    private String secureKey;
    public CSJAppInfo() {
    }
    public CSJAppInfo(String appId, String secureKey) {
        this.appId = appId;
        this.secureKey = secureKey;
    }
    public String getAppId() {
        return appId;
    }
    public void setAppId(String appId) {
        this.appId = appId;
    }
    public String getSecureKey() {
        return secureKey;
    }
    public void setSecureKey(String secureKey) {
        this.secureKey = secureKey;
    }
}
fanli/src/main/java/com/yeshi/fanli/util/goods/douyin/vo/DYAggregateH5Filter.java
New file
@@ -0,0 +1,198 @@
package com.yeshi.fanli.util.goods.douyin.vo;
/**
 * @author hxh
 * @title: DYAggregateH5Filter
 * @description: 聚合页条件
 * @date 2022/9/28 14:13
 */
public class DYAggregateH5Filter {
    /**
     * device : {"idfa":"","idfa_md5":"","idfv":"","imei":"","imei_md5":"","oaid":"","oaid_md5":"","android_id":"","android_id_md5":"","os":"android"}
     * external_info : _123123
     * material_id : 10000
     */
    /**
     * 设备信息字段, 如需个性化聚合⻚聚合
     * ⻚,请填写
     **/
    private DeviceBean device;
    /**
     * ⾃定义字段,只允许 数字、字⺟和
     * _,限制⻓度为20
     **/
    private String external_info;
    /**
     * 聚合⻚类型枚举值
     * 10000 抖⾳⽀付1分购
     * 40004 个护新⼈专区
     * 20000 百亿补贴
     * 60000 秒杀频道
     * 50012 ⼤家电
     * 50013 包
     * 50004 个护
     * 50015 睡⾐
     * 50016 家居
     * 50017 帽⼦
     * 50018 奢侈品
     * 50019 腕表
     * 50020 鞋-运动品牌
     * 50021 ⼥鞋
     * 50022 单鞋
     * 50023 ⽪鞋
     * 50024 服饰-运动品牌
     * 50025 美妆
     * 50000 综合
     * 50026 饰品
     * 50002 美容护肤
     * 50003 零⻝
     * 50005 咖啡
     * 50006 童装
     * 50008 内⾐
     * 50009 粮⽶油⾯
     **/
    private String material_id;
    private String product_url;
    public DeviceBean getDevice() {
        return device;
    }
    public void setDevice(DeviceBean device) {
        this.device = device;
    }
    public String getExternal_info() {
        return external_info;
    }
    public void setExternal_info(String external_info) {
        this.external_info = external_info;
    }
    public String getMaterial_id() {
        return material_id;
    }
    public void setMaterial_id(String material_id) {
        this.material_id = material_id;
    }
    public String getProduct_url() {
        return product_url;
    }
    public void setProduct_url(String product_url) {
        this.product_url = product_url;
    }
    public static class DeviceBean {
        /**
         * idfa :
         * idfa_md5 :
         * idfv :
         * imei :
         * imei_md5 :
         * oaid :
         * oaid_md5 :
         * android_id :
         * android_id_md5 :
         * os : android
         */
        private String idfa;
        private String idfa_md5;
        private String idfv;
        private String imei;
        private String imei_md5;
        private String oaid;
        private String oaid_md5;
        private String android_id;
        private String android_id_md5;
        private String os;
        public String getIdfa() {
            return idfa;
        }
        public void setIdfa(String idfa) {
            this.idfa = idfa;
        }
        public String getIdfa_md5() {
            return idfa_md5;
        }
        public void setIdfa_md5(String idfa_md5) {
            this.idfa_md5 = idfa_md5;
        }
        public String getIdfv() {
            return idfv;
        }
        public void setIdfv(String idfv) {
            this.idfv = idfv;
        }
        public String getImei() {
            return imei;
        }
        public void setImei(String imei) {
            this.imei = imei;
        }
        public String getImei_md5() {
            return imei_md5;
        }
        public void setImei_md5(String imei_md5) {
            this.imei_md5 = imei_md5;
        }
        public String getOaid() {
            return oaid;
        }
        public void setOaid(String oaid) {
            this.oaid = oaid;
        }
        public String getOaid_md5() {
            return oaid_md5;
        }
        public void setOaid_md5(String oaid_md5) {
            this.oaid_md5 = oaid_md5;
        }
        public String getAndroid_id() {
            return android_id;
        }
        public void setAndroid_id(String android_id) {
            this.android_id = android_id;
        }
        public String getAndroid_id_md5() {
            return android_id_md5;
        }
        public void setAndroid_id_md5(String android_id_md5) {
            this.android_id_md5 = android_id_md5;
        }
        public String getOs() {
            return os;
        }
        public void setOs(String os) {
            this.os = os;
        }
    }
}
fanli/src/main/java/com/yeshi/fanli/util/goods/douyin/vo/DYAggregateH5Result.java
New file
@@ -0,0 +1,124 @@
package com.yeshi.fanli.util.goods.douyin.vo;
/**
 * @author hxh
 * @title: DYAggregateH5Result
 * @description: H5聚合页结果
 * @date 2022/9/30 15:39
 */
public class DYAggregateH5Result {
    /**
     * full_screen : {"short_url":"https://v.douyin.com/6WYmLRQ/","qrcode":{"url":"https://p6.douyinpic.com/img/aweme-qrcode/AtwRaG7149074129067460352~c5_360x360.webp?from=1723184758","width":360,"height":360},"share_command":"8:/ 复制此链接,打开抖音,有惊喜等待你。##GVdxmiNANP6w8##","deeplink":"snssdk1128://webview?url=https%3A%2F%2Falliance.jinritemai.com%2Fpages%2Fdistribution-landing%3Fhide_nav_bar%3D1%26hide_status_bar%3D1%26token%3D6WYaymL"}
     * seven_split_screen : {"short_url":"https://v.douyin.com/6WYbNh8/","qrcode":{"url":"https://p3.douyinpic.com/img/aweme-qrcode/HiSGHV7149074142988404521~c5_360x360.webp?from=1723184758","width":360,"height":360},"share_command":"8复制此链接,打开抖音,有惊:/ 喜等待你。##iRwUU6NP6w8##","deeplink":"snssdk1128://webview?url=https%3A%2F%2Falliance.jinritemai.com%2Fpages%2Fdistribution-landing%3Fhide_nav_bar%3D1%26hide_status_bar%3D1%26token%3D6WYUmKU"}
     */
    /**
     * 跳转抖⾳全屏商品聚合⻚的转链信息
     **/
    private ScreenBean full_screen;
    /**
     * 跳转抖⾳七分屏商品聚合⻚的转链信息
     **/
    private ScreenBean seven_split_screen;
    public ScreenBean getFull_screen() {
        return full_screen;
    }
    public void setFull_screen(ScreenBean full_screen) {
        this.full_screen = full_screen;
    }
    public ScreenBean getSeven_split_screen() {
        return seven_split_screen;
    }
    public void setSeven_split_screen(ScreenBean seven_split_screen) {
        this.seven_split_screen = seven_split_screen;
    }
    public static class ScreenBean {
        /**
         * short_url : https://v.douyin.com/6WYmLRQ/
         * qrcode : {"url":"https://p6.douyinpic.com/img/aweme-qrcode/AtwRaG7149074129067460352~c5_360x360.webp?from=1723184758","width":360,"height":360}
         * share_command : 8:/ 复制此链接,打开抖音,有惊喜等待你。##GVdxmiNANP6w8##
         * deeplink : snssdk1128://webview?url=https%3A%2F%2Falliance.jinritemai.com%2Fpages%2Fdistribution-landing%3Fhide_nav_bar%3D1%26hide_status_bar%3D1%26token%3D6WYaymL
         */
        private String short_url;
        private QrcodeBean qrcode;
        private String share_command;
        private String deeplink;
        public String getShort_url() {
            return short_url;
        }
        public void setShort_url(String short_url) {
            this.short_url = short_url;
        }
        public QrcodeBean getQrcode() {
            return qrcode;
        }
        public void setQrcode(QrcodeBean qrcode) {
            this.qrcode = qrcode;
        }
        public String getShare_command() {
            return share_command;
        }
        public void setShare_command(String share_command) {
            this.share_command = share_command;
        }
        public String getDeeplink() {
            return deeplink;
        }
        public void setDeeplink(String deeplink) {
            this.deeplink = deeplink;
        }
        public static class QrcodeBean {
            /**
             * url : https://p6.douyinpic.com/img/aweme-qrcode/AtwRaG7149074129067460352~c5_360x360.webp?from=1723184758
             * width : 360
             * height : 360
             */
            private String url;
            private int width;
            private int height;
            public String getUrl() {
                return url;
            }
            public void setUrl(String url) {
                this.url = url;
            }
            public int getWidth() {
                return width;
            }
            public void setWidth(int width) {
                this.width = width;
            }
            public int getHeight() {
                return height;
            }
            public void setHeight(int height) {
                this.height = height;
            }
        }
    }
}
fanli/src/main/java/com/yeshi/fanli/util/goods/douyin/vo/DYConvertResult.java
New file
@@ -0,0 +1,38 @@
package com.yeshi.fanli.util.goods.douyin.vo;
/**
 * @author hxh
 * @title: DYLiveConvertResult
 * @description: 抖音直播转链结果
 * @date 2022/9/26 16:56
 */
public class DYConvertResult {
    private String password;
    private String qrCode;
    private String deeplink;
    public String getPassword() {
        return password;
    }
    public void setPassword(String password) {
        this.password = password;
    }
    public String getQrCode() {
        return qrCode;
    }
    public void setQrCode(String qrCode) {
        this.qrCode = qrCode;
    }
    public String getDeeplink() {
        return deeplink;
    }
    public void setDeeplink(String deeplink) {
        this.deeplink = deeplink;
    }
}
fanli/src/main/java/com/yeshi/fanli/util/goods/douyin/vo/DYGoods.java
New file
@@ -0,0 +1,236 @@
package com.yeshi.fanli.util.goods.douyin.vo;
/**
 * @author hxh
 * @title: DYGoods
 * @description: 抖音商品信息
 * @date 2022/9/28 10:14
 */
public class DYGoods {
    /**
     * product_id : 3566898027765626183
     * title : 千可净小白鞋专用去污膏不伤手带海绵擦去污渍膏
     * is_kol_product : false
     * price : 990
     * first_cid : 20073
     * second_cid : 21125
     * third_cid : 26764
     * in_stock : true
     * sales : 439168
     * cover : https://p3-aio.ecombdimg.com/obj/ecom-shop-material/RFZoBkS_m_b56b6e4ac369731c1cea6c5d6cd01d28_sx_278669_www800-800
     * detail_url : https://haohuo.jinritemai.com/views/product/item2?id=3566898027765626183
     * shop_id : 6985389
     * shop_name : 蜜斯
     * coupon_price : 0
     * cos_ratio : 3600
     * cos_fee : 356
     * ext : req_id=cefc005b-e4c7-4d23-8605-95427fe3534a&product_id=3566898027765626183
     */
   /**
    * 商品id
    **/
    private long product_id;
    /**
     * 商品名称
     **/
    private String title;
    /**
     * 在穿⼭甲上是否有达⼈特殊佣⾦
     **/
    private boolean is_kol_product;
    /**
     * 商品价格,单位分
     **/
    private long price;
    /**
     * 商品⼀级类⽬
     **/
    private long first_cid;
    /**
     * 商品⼆级类⽬
     **/
    private long second_cid;
    /**
     * 商品三级类⽬
     **/
    private long third_cid;
    /**
     * 有⽆库存
     **/
    private boolean in_stock;
    /**
     * 商品历史销量
     **/
    private int sales;
    /**
     * 商品主图
     **/
    private String cover;
    /**
     * 商品链接
     **/
    private String detail_url;
    /**
     * 商铺id
     **/
    private long shop_id;
    /**
     * 商铺名称
     **/
    private String shop_name;
    /**
     * 券后价格,单位分(0或者没传则为
     * 原价)
     **/
    private long coupon_price;
    /**
     * 分佣⽐例,百分⽐乘以 100,⽐如
     * 1% 返回 1*100 = 100
     **/
    private int cos_ratio;
    /**
     * 佣⾦⾦额,单位分
     **/
    private int cos_fee;
    /**
     * ⼀个加密字段,需要在转链接⼝当
     * 中回传
     **/
    private String ext;
    public long getProduct_id() {
        return product_id;
    }
    public void setProduct_id(long product_id) {
        this.product_id = product_id;
    }
    public String getTitle() {
        return title;
    }
    public void setTitle(String title) {
        this.title = title;
    }
    public boolean isIs_kol_product() {
        return is_kol_product;
    }
    public void setIs_kol_product(boolean is_kol_product) {
        this.is_kol_product = is_kol_product;
    }
    public long getPrice() {
        return price;
    }
    public void setPrice(long price) {
        this.price = price;
    }
    public long getFirst_cid() {
        return first_cid;
    }
    public void setFirst_cid(long first_cid) {
        this.first_cid = first_cid;
    }
    public long getSecond_cid() {
        return second_cid;
    }
    public void setSecond_cid(long second_cid) {
        this.second_cid = second_cid;
    }
    public long getThird_cid() {
        return third_cid;
    }
    public void setThird_cid(long third_cid) {
        this.third_cid = third_cid;
    }
    public boolean isIn_stock() {
        return in_stock;
    }
    public void setIn_stock(boolean in_stock) {
        this.in_stock = in_stock;
    }
    public int getSales() {
        return sales;
    }
    public void setSales(int sales) {
        this.sales = sales;
    }
    public String getCover() {
        return cover;
    }
    public void setCover(String cover) {
        this.cover = cover;
    }
    public String getDetail_url() {
        return detail_url;
    }
    public void setDetail_url(String detail_url) {
        this.detail_url = detail_url;
    }
    public long getShop_id() {
        return shop_id;
    }
    public void setShop_id(long shop_id) {
        this.shop_id = shop_id;
    }
    public String getShop_name() {
        return shop_name;
    }
    public void setShop_name(String shop_name) {
        this.shop_name = shop_name;
    }
    public long getCoupon_price() {
        return coupon_price;
    }
    public void setCoupon_price(long coupon_price) {
        this.coupon_price = coupon_price;
    }
    public int getCos_ratio() {
        return cos_ratio;
    }
    public void setCos_ratio(int cos_ratio) {
        this.cos_ratio = cos_ratio;
    }
    public int getCos_fee() {
        return cos_fee;
    }
    public void setCos_fee(int cos_fee) {
        this.cos_fee = cos_fee;
    }
    public String getExt() {
        return ext;
    }
    public void setExt(String ext) {
        this.ext = ext;
    }
}
fanli/src/main/java/com/yeshi/fanli/util/goods/douyin/vo/DYGoodsCategory.java
New file
@@ -0,0 +1,45 @@
package com.yeshi.fanli.util.goods.douyin.vo;
/**
 * @author hxh
 * @title: DYGoodsCategory
 * @description: 抖音商品分类
 * @date 2022/9/27 14:07
 */
public class DYGoodsCategory {
    /**
     * id : 20000
     * name : 3C数码配件
     * level : 1
     */
    private int id;
    private String name;
    private int level;
    public int getId() {
        return id;
    }
    public void setId(int id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public int getLevel() {
        return level;
    }
    public void setLevel(int level) {
        this.level = level;
    }
}
fanli/src/main/java/com/yeshi/fanli/util/goods/douyin/vo/DYGoodsDetail.java
New file
@@ -0,0 +1,481 @@
package com.yeshi.fanli.util.goods.douyin.vo;
import java.util.List;
/**
 * @author hxh
 * @title: DYGoodsDetail
 * @description: 商品详情
 * @date 2022/9/28 13:52
 */
public class DYGoodsDetail {
    /**
     * product_id : 3566898027765626183
     * title : 千可净小白鞋专用去污膏不伤手带海绵擦去污渍膏
     * is_kol_product : false
     * price : 990
     * cos_ratio : 3600
     * cos_fee : 356
     * first_cid : 20073
     * second_cid : 21125
     * third_cid : 26764
     * in_stock : true
     * sales : 441201
     * imgs : ["https://p6-aio.ecombdimg.com/obj/ecom-shop-material/RFZoBkS_m_b56b6e4ac369731c1cea6c5d6cd01d28_sx_278669_www800-800","https://p6-aio.ecombdimg.com/obj/ecom-shop-material/RFZoBkS_m_d661087e15cbd8e54b85e08c738c6b70_sx_503840_www800-800","https://p6-aio.ecombdimg.com/obj/ecom-shop-material/RFZoBkS_m_9b35bafd7db9af0e902782d3f5e08b14_sx_550850_www1000-1000","https://p3-aio.ecombdimg.com/obj/ecom-shop-material/RFZoBkS_m_8d885efe1cb4efdb4636c8b811bd555f_sx_244785_www800-800"]
     * cover : https://p3-aio.ecombdimg.com/obj/ecom-shop-material/RFZoBkS_m_b56b6e4ac369731c1cea6c5d6cd01d28_sx_278669_www800-800
     * detail_url : https://haohuo.jinritemai.com/views/product/item2?id=3566898027765626183
     * shop_id : 6985389
     * shop_name : 蜜斯
     * coupon_price : 0
     * comment_score : 4.5
     * comment_num : 24766
     * order_num : 471151
     * view_num : 1555136
     * kol_num : 177832
     * daily_statistics : [{"date":"20220829","order_num":2,"view_num":35,"kol_num":2},{"date":"20220830","order_num":40,"view_num":80,"kol_num":6},{"date":"20220831","order_num":62,"view_num":155,"kol_num":11},{"date":"20220901","order_num":225,"view_num":374,"kol_num":27},{"date":"20220902","order_num":270,"view_num":505,"kol_num":33},{"date":"20220903","order_num":361,"view_num":1472,"kol_num":70},{"date":"20220904","order_num":1155,"view_num":6993,"kol_num":101},{"date":"20220905","order_num":2420,"view_num":8234,"kol_num":311},{"date":"20220906","order_num":2434,"view_num":11698,"kol_num":5040},{"date":"20220907","order_num":6527,"view_num":27315,"kol_num":4625},{"date":"20220908","order_num":24710,"view_num":102883,"kol_num":9567},{"date":"20220909","order_num":30221,"view_num":119736,"kol_num":15190},{"date":"20220910","order_num":21939,"view_num":77247,"kol_num":12460},{"date":"20220911","order_num":30351,"view_num":94710,"kol_num":14296},{"date":"20220912","order_num":53295,"view_num":143262,"kol_num":15348},{"date":"20220913","order_num":44679,"view_num":152025,"kol_num":22824},{"date":"20220914","order_num":10101,"view_num":51049,"kol_num":16186},{"date":"20220915","order_num":5885,"view_num":32718,"kol_num":11516},{"date":"20220916","order_num":24797,"view_num":62066,"kol_num":11467},{"date":"20220917","order_num":39142,"view_num":150680,"kol_num":16181},{"date":"20220918","order_num":6159,"view_num":33576,"kol_num":12655},{"date":"20220919","order_num":22750,"view_num":73259,"kol_num":12705},{"date":"20220920","order_num":32436,"view_num":88282,"kol_num":9742},{"date":"20220921","order_num":29045,"view_num":68023,"kol_num":8493},{"date":"20220922","order_num":21939,"view_num":53703,"kol_num":7254},{"date":"20220923","order_num":17545,"view_num":56700,"kol_num":10815},{"date":"20220924","order_num":10586,"view_num":31719,"kol_num":9390},{"date":"20220925","order_num":14773,"view_num":46818,"kol_num":8293},{"date":"20220926","order_num":9552,"view_num":31658,"kol_num":9672},{"date":"20220927","order_num":8143,"view_num":28161,"kol_num":7918}]
     * is_assured : true
     * logistics_info : 48小时内从浙江省发货,运费0元起
     * has_sxt : true
     * shop_total_score : {"shop_score":{"text":"商家体验分","score":"4.89","level":1},"product_score":{"text":"商品体验分","score":"4.93","level":1},"logistics_score":{"text":"物流体验分","score":"4.83","level":1},"service_score":{"text":"商家服务分","score":"4.97","level":1}}
     */
    private long product_id;
    private String title;
    /**
     * 在穿⼭甲上是否有达⼈特
     * 殊佣⾦
     **/
    private boolean is_kol_product;
    private int price;
    /**
     * 分佣⽐例,百分⽐乘以
     * 100,⽐如 1% 返回
     * 1*100 = 100
     **/
    private int cos_ratio;
    /**
     * 佣⾦⾦额,单位分
     **/
    private int cos_fee;
    private int first_cid;
    private int second_cid;
    private int third_cid;
    /**
     * 是否有库存
     **/
    private boolean in_stock;
    private int sales;
    private String cover;
    private String detail_url;
    private int shop_id;
    private String shop_name;
    /**
     * 券后价格,单位分(0或
     * 者没传则为原价)
     **/
    private int coupon_price;
    /**
     * 商品评分
     **/
    private double comment_score;
    /**
     * 商品评价数⽬
     **/
    private int comment_num;
    /**
     * 近30天商品总订单量
     **/
    private int order_num;
    /**
     * 近30天商品总浏览量
     **/
    private int view_num;
    /**
     * 近30天推⼴总达⼈数
     **/
    private int kol_num;
    /**
     *
     **/
    private boolean is_assured;
    /**
     * 商品物流说明
     **/
    private String logistics_info;
    /**
     * 是否具有短视频随⼼推资
     * 质
     **/
    private boolean has_sxt;
    /**
     * 店铺评分
     **/
    private ShopTotalScoreBean shop_total_score;
    /**
     * 商品轮播图
     **/
    private List<String> imgs;
    /**
     * 商品日期统计
     **/
    private List<DailyStatisticsBean> daily_statistics;
    public long getProduct_id() {
        return product_id;
    }
    public void setProduct_id(long product_id) {
        this.product_id = product_id;
    }
    public String getTitle() {
        return title;
    }
    public void setTitle(String title) {
        this.title = title;
    }
    public boolean isIs_kol_product() {
        return is_kol_product;
    }
    public void setIs_kol_product(boolean is_kol_product) {
        this.is_kol_product = is_kol_product;
    }
    public int getPrice() {
        return price;
    }
    public void setPrice(int price) {
        this.price = price;
    }
    public int getCos_ratio() {
        return cos_ratio;
    }
    public void setCos_ratio(int cos_ratio) {
        this.cos_ratio = cos_ratio;
    }
    public int getCos_fee() {
        return cos_fee;
    }
    public void setCos_fee(int cos_fee) {
        this.cos_fee = cos_fee;
    }
    public int getFirst_cid() {
        return first_cid;
    }
    public void setFirst_cid(int first_cid) {
        this.first_cid = first_cid;
    }
    public int getSecond_cid() {
        return second_cid;
    }
    public void setSecond_cid(int second_cid) {
        this.second_cid = second_cid;
    }
    public int getThird_cid() {
        return third_cid;
    }
    public void setThird_cid(int third_cid) {
        this.third_cid = third_cid;
    }
    public boolean isIn_stock() {
        return in_stock;
    }
    public void setIn_stock(boolean in_stock) {
        this.in_stock = in_stock;
    }
    public int getSales() {
        return sales;
    }
    public void setSales(int sales) {
        this.sales = sales;
    }
    public String getCover() {
        return cover;
    }
    public void setCover(String cover) {
        this.cover = cover;
    }
    public String getDetail_url() {
        return detail_url;
    }
    public void setDetail_url(String detail_url) {
        this.detail_url = detail_url;
    }
    public int getShop_id() {
        return shop_id;
    }
    public void setShop_id(int shop_id) {
        this.shop_id = shop_id;
    }
    public String getShop_name() {
        return shop_name;
    }
    public void setShop_name(String shop_name) {
        this.shop_name = shop_name;
    }
    public int getCoupon_price() {
        return coupon_price;
    }
    public void setCoupon_price(int coupon_price) {
        this.coupon_price = coupon_price;
    }
    public double getComment_score() {
        return comment_score;
    }
    public void setComment_score(double comment_score) {
        this.comment_score = comment_score;
    }
    public int getComment_num() {
        return comment_num;
    }
    public void setComment_num(int comment_num) {
        this.comment_num = comment_num;
    }
    public int getOrder_num() {
        return order_num;
    }
    public void setOrder_num(int order_num) {
        this.order_num = order_num;
    }
    public int getView_num() {
        return view_num;
    }
    public void setView_num(int view_num) {
        this.view_num = view_num;
    }
    public int getKol_num() {
        return kol_num;
    }
    public void setKol_num(int kol_num) {
        this.kol_num = kol_num;
    }
    public boolean isIs_assured() {
        return is_assured;
    }
    public void setIs_assured(boolean is_assured) {
        this.is_assured = is_assured;
    }
    public String getLogistics_info() {
        return logistics_info;
    }
    public void setLogistics_info(String logistics_info) {
        this.logistics_info = logistics_info;
    }
    public boolean isHas_sxt() {
        return has_sxt;
    }
    public void setHas_sxt(boolean has_sxt) {
        this.has_sxt = has_sxt;
    }
    public ShopTotalScoreBean getShop_total_score() {
        return shop_total_score;
    }
    public void setShop_total_score(ShopTotalScoreBean shop_total_score) {
        this.shop_total_score = shop_total_score;
    }
    public List<String> getImgs() {
        return imgs;
    }
    public void setImgs(List<String> imgs) {
        this.imgs = imgs;
    }
    public List<DailyStatisticsBean> getDaily_statistics() {
        return daily_statistics;
    }
    public void setDaily_statistics(List<DailyStatisticsBean> daily_statistics) {
        this.daily_statistics = daily_statistics;
    }
    public static class ShopTotalScoreBean {
        /**
         * shop_score : {"text":"商家体验分","score":"4.89","level":1}
         * product_score : {"text":"商品体验分","score":"4.93","level":1}
         * logistics_score : {"text":"物流体验分","score":"4.83","level":1}
         * service_score : {"text":"商家服务分","score":"4.97","level":1}
         */
        private ScoreBean shop_score;
        private ScoreBean product_score;
        private ScoreBean logistics_score;
        private ScoreBean service_score;
        public ScoreBean getShop_score() {
            return shop_score;
        }
        public void setShop_score(ScoreBean shop_score) {
            this.shop_score = shop_score;
        }
        public ScoreBean getProduct_score() {
            return product_score;
        }
        public void setProduct_score(ScoreBean product_score) {
            this.product_score = product_score;
        }
        public ScoreBean getLogistics_score() {
            return logistics_score;
        }
        public void setLogistics_score(ScoreBean logistics_score) {
            this.logistics_score = logistics_score;
        }
        public ScoreBean getService_score() {
            return service_score;
        }
        public void setService_score(ScoreBean service_score) {
            this.service_score = service_score;
        }
        public static class ScoreBean {
            /**
             * text : 商家体验分
             * score : 4.89
             * level : 1
             */
            private String text;
            private String score;
            private int level;
            public String getText() {
                return text;
            }
            public void setText(String text) {
                this.text = text;
            }
            public String getScore() {
                return score;
            }
            public void setScore(String score) {
                this.score = score;
            }
            public int getLevel() {
                return level;
            }
            public void setLevel(int level) {
                this.level = level;
            }
        }
    }
    public static class DailyStatisticsBean {
        /**
         * date : 20220829
         * order_num : 2
         * view_num : 35
         * kol_num : 2
         */
       /**
        * 日期
        **/
        private String date;
        /**
         * 当⽇商品订单量明细
         **/
        private int order_num;
        /**
         * 当⽇商品浏览量明细
         **/
        private int view_num;
        /**
         * 当⽇推⼴达⼈数明细
         **/
        private int kol_num;
        public String getDate() {
            return date;
        }
        public void setDate(String date) {
            this.date = date;
        }
        public int getOrder_num() {
            return order_num;
        }
        public void setOrder_num(int order_num) {
            this.order_num = order_num;
        }
        public int getView_num() {
            return view_num;
        }
        public void setView_num(int view_num) {
            this.view_num = view_num;
        }
        public int getKol_num() {
            return kol_num;
        }
        public void setKol_num(int kol_num) {
            this.kol_num = kol_num;
        }
    }
}
fanli/src/main/java/com/yeshi/fanli/util/goods/douyin/vo/DYGoodsSearchFilter.java
New file
@@ -0,0 +1,220 @@
package com.yeshi.fanli.util.goods.douyin.vo;
import java.util.List;
/**
 * @author hxh
 * @title: DYGoodsSearchFilter
 * @description: 抖音商品筛选条件
 * @date 2022/9/27 14:16
 */
public class DYGoodsSearchFilter {
    /**
     * 商品第⼏⻚,从1开始
     */
    private int page;
    /**
     * 商品每⻚数量,最⼤20,最
     * ⼩1
     */
    private int pageSize;
    /**
     * 商品关键词
     */
    private String title;
    /**
     * 筛选商品⼀级类⽬,从商品
     * 类⽬接⼝可获得⼀级类⽬
     */
    private List<Integer> first_cids;
    /**
     * 筛选商品⼆级类⽬, 从商品
     * 类⽬接⼝可获得⼆级类⽬
     */
    private List<Integer> second_cids;
    /**
     * 筛选商品三级类⽬,从商品
     * 类⽬接⼝可获得三级类⽬
     */
    private List<Integer> third_cids;
    /**
     * 最低价格,包含,单位分
     */
    private Integer price_min;
    /**
     * 最⾼价格,不包含,单位
     * 分。应保证
     * price_max>=price_min
     */
    private Integer price_max;
    /**
     * 历史销量最⼩值
     */
    private Integer sell_num_min;
    /**
     * 历史销量最⼤值。应保证
     * sell_num_max>sell_num_
     * min
     */
    private Integer sell_num_max;
    /**
     * 排序类型:0 默认排序;1
     * 历史销量排序;2价格排
     * 序;3佣⾦排序;4佣⾦⽐例
     * 排序。不填默认为0。
     */
    private Integer search_type;
    /**
     * 0 升序,1 降序。不填默认
     * 为0。若search_type为0,
     * 则此值⽆意义
     */
    private Integer order_type;
    /**
     * 最低分佣,单位分
     */
    private Integer cos_fee_min;
    /**
     * 最⾼分佣,单位分。应保证
     */
    private Integer cos_fee_max;
    /**
     * 分佣⽐例百分⽐乘以100:
     * 1.1%,传1.1*100 = 110
     */
    private Integer cos_ratio_min;
    /**
     * 分佣⽐例百分⽐乘以100:
     * 1.1%,传1.1*100 = 110
     */
    private Integer cos_ratio_max;
    public int getPage() {
        return page;
    }
    public void setPage(int page) {
        this.page = page;
    }
    public int getPageSize() {
        return pageSize;
    }
    public void setPageSize(int pageSize) {
        this.pageSize = pageSize;
    }
    public String getTitle() {
        return title;
    }
    public void setTitle(String title) {
        this.title = title;
    }
    public List<Integer> getFirst_cids() {
        return first_cids;
    }
    public void setFirst_cids(List<Integer> first_cids) {
        this.first_cids = first_cids;
    }
    public List<Integer> getSecond_cids() {
        return second_cids;
    }
    public void setSecond_cids(List<Integer> second_cids) {
        this.second_cids = second_cids;
    }
    public List<Integer> getThird_cids() {
        return third_cids;
    }
    public void setThird_cids(List<Integer> third_cids) {
        this.third_cids = third_cids;
    }
    public Integer getPrice_min() {
        return price_min;
    }
    public void setPrice_min(Integer price_min) {
        this.price_min = price_min;
    }
    public Integer getPrice_max() {
        return price_max;
    }
    public void setPrice_max(Integer price_max) {
        this.price_max = price_max;
    }
    public Integer getSell_num_min() {
        return sell_num_min;
    }
    public void setSell_num_min(Integer sell_num_min) {
        this.sell_num_min = sell_num_min;
    }
    public Integer getSell_num_max() {
        return sell_num_max;
    }
    public void setSell_num_max(Integer sell_num_max) {
        this.sell_num_max = sell_num_max;
    }
    public Integer getSearch_type() {
        return search_type;
    }
    public void setSearch_type(Integer search_type) {
        this.search_type = search_type;
    }
    public Integer getOrder_type() {
        return order_type;
    }
    public void setOrder_type(Integer order_type) {
        this.order_type = order_type;
    }
    public Integer getCos_fee_min() {
        return cos_fee_min;
    }
    public void setCos_fee_min(Integer cos_fee_min) {
        this.cos_fee_min = cos_fee_min;
    }
    public Integer getCos_fee_max() {
        return cos_fee_max;
    }
    public void setCos_fee_max(Integer cos_fee_max) {
        this.cos_fee_max = cos_fee_max;
    }
    public Integer getCos_ratio_min() {
        return cos_ratio_min;
    }
    public void setCos_ratio_min(Integer cos_ratio_min) {
        this.cos_ratio_min = cos_ratio_min;
    }
    public Integer getCos_ratio_max() {
        return cos_ratio_max;
    }
    public void setCos_ratio_max(Integer cos_ratio_max) {
        this.cos_ratio_max = cos_ratio_max;
    }
}
fanli/src/main/java/com/yeshi/fanli/util/goods/douyin/vo/DYLiveInfo.java
New file
@@ -0,0 +1,707 @@
package com.yeshi.fanli.util.goods.douyin.vo;
import java.util.List;
/**
 * @author hxh
 * @title: DYLiveInfo
 * @description: 抖音直播信息
 * @date 2022/9/26 15:28
 */
public class DYLiveInfo {
    /**
     * author_openid : 1@#6ND9iPMOaYtq5zLItnzvdXR9cybYIIT4/AwkF5qtAONlIEb7XvMua3GsaA0rCAsn762v3ePi1vVx/6AnVe/qFvlH43nVZUw=
     * author_name : 迈特优官方旗舰店
     * author_pic : https://p3-aio.ecombdimg.com/origin/aweme-avatar/douyin-user-file_64ed7cc0375578292e48e35f234d4927
     * author_level : 6
     * product_category : ["服饰内衣"]
     * average_gmv : 10万-50万
     * fans_num : 2232391
     * average_commission_rate : 14.67
     * room_id : 7147501547499375391
     * is_live : true
     * is_ecom : true
     * gender : male
     * ext : e86e8d0f-3d75-11ed-8b4b-3436ac1201bd
     * online_num : 589
     * create_time : 1664157435
     * products : [{}]
     * lottery_products : [{}]
     */
    private String author_openid;
    private String author_name;
    private String author_pic;
    private int author_level;
    private String average_gmv;
    private int fans_num;
    private String average_commission_rate;
    private String room_id;
    private boolean is_live;
    private boolean is_ecom;
    private String gender;
    private String ext;
    private int online_num;
    private int create_time;
    private List<String> product_category;
    private List<ProductsBean> products;
    private List<LotteryProductsBean> lottery_products;
    public String getAuthor_openid() {
        return author_openid;
    }
    public void setAuthor_openid(String author_openid) {
        this.author_openid = author_openid;
    }
    public String getAuthor_name() {
        return author_name;
    }
    public void setAuthor_name(String author_name) {
        this.author_name = author_name;
    }
    public String getAuthor_pic() {
        return author_pic;
    }
    public void setAuthor_pic(String author_pic) {
        this.author_pic = author_pic;
    }
    public int getAuthor_level() {
        return author_level;
    }
    public void setAuthor_level(int author_level) {
        this.author_level = author_level;
    }
    public String getAverage_gmv() {
        return average_gmv;
    }
    public void setAverage_gmv(String average_gmv) {
        this.average_gmv = average_gmv;
    }
    public int getFans_num() {
        return fans_num;
    }
    public void setFans_num(int fans_num) {
        this.fans_num = fans_num;
    }
    public String getAverage_commission_rate() {
        return average_commission_rate;
    }
    public void setAverage_commission_rate(String average_commission_rate) {
        this.average_commission_rate = average_commission_rate;
    }
    public String getRoom_id() {
        return room_id;
    }
    public void setRoom_id(String room_id) {
        this.room_id = room_id;
    }
    public boolean isIs_live() {
        return is_live;
    }
    public void setIs_live(boolean is_live) {
        this.is_live = is_live;
    }
    public boolean isIs_ecom() {
        return is_ecom;
    }
    public void setIs_ecom(boolean is_ecom) {
        this.is_ecom = is_ecom;
    }
    public String getGender() {
        return gender;
    }
    public void setGender(String gender) {
        this.gender = gender;
    }
    public String getExt() {
        return ext;
    }
    public void setExt(String ext) {
        this.ext = ext;
    }
    public int getOnline_num() {
        return online_num;
    }
    public void setOnline_num(int online_num) {
        this.online_num = online_num;
    }
    public int getCreate_time() {
        return create_time;
    }
    public void setCreate_time(int create_time) {
        this.create_time = create_time;
    }
    public List<String> getProduct_category() {
        return product_category;
    }
    public void setProduct_category(List<String> product_category) {
        this.product_category = product_category;
    }
    public List<ProductsBean> getProducts() {
        return products;
    }
    public void setProducts(List<ProductsBean> products) {
        this.products = products;
    }
    public List<LotteryProductsBean> getLottery_products() {
        return lottery_products;
    }
    public void setLottery_products(List<LotteryProductsBean> lottery_products) {
        this.lottery_products = lottery_products;
    }
    public static class ProductsBean {
        /**
         * product_id : 3557841818521569758
         * title : 【浮雕透气】2022夏季新款男女休闲运动无袖背心短裤套装 3083
         * price : 15990
         * first_cid : 20009
         * first_cname : 男装
         * second_cid : 20192
         * second_cname : 套装
         * third_cid : 22419
         * third_cname : 休闲运动套装
         * in_stock : true
         * sales : 4066
         * cover : https://p3-aio.ecombdimg.com/obj/ecom-shop-material/v1_WNxCemZY_71116845633065290590856_fd8fdb82ded95deac8a3325c6070455d_sx_90073_www720-720
         * detail_url : https://haohuo.jinritemai.com/views/product/item2?id=3557841818521569758
         * shop_id : 12502856
         * shop_name : 迈特优官方旗舰店
         * coupon_price : 6990
         * cos_ratio : 2500
         * cos_fee : 1572
         * old_fans_cos_ratio : 5000
         * old_fans_cos_fee : 3145
         * ext :
         * is_explaining : false
         * has_given_product : false
         */
        private long product_id;
        private String title;
        private int price;
        private int first_cid;
        private String first_cname;
        private int second_cid;
        private String second_cname;
        private int third_cid;
        private String third_cname;
        private boolean in_stock;
        private int sales;
        private String cover;
        private String detail_url;
        private int shop_id;
        private String shop_name;
        private int coupon_price;
        private int cos_ratio;
        private int cos_fee;
        private int old_fans_cos_ratio;
        private int old_fans_cos_fee;
        private String ext;
        private boolean is_explaining;
        private boolean has_given_product;
        public long getProduct_id() {
            return product_id;
        }
        public void setProduct_id(long product_id) {
            this.product_id = product_id;
        }
        public String getTitle() {
            return title;
        }
        public void setTitle(String title) {
            this.title = title;
        }
        public int getPrice() {
            return price;
        }
        public void setPrice(int price) {
            this.price = price;
        }
        public int getFirst_cid() {
            return first_cid;
        }
        public void setFirst_cid(int first_cid) {
            this.first_cid = first_cid;
        }
        public String getFirst_cname() {
            return first_cname;
        }
        public void setFirst_cname(String first_cname) {
            this.first_cname = first_cname;
        }
        public int getSecond_cid() {
            return second_cid;
        }
        public void setSecond_cid(int second_cid) {
            this.second_cid = second_cid;
        }
        public String getSecond_cname() {
            return second_cname;
        }
        public void setSecond_cname(String second_cname) {
            this.second_cname = second_cname;
        }
        public int getThird_cid() {
            return third_cid;
        }
        public void setThird_cid(int third_cid) {
            this.third_cid = third_cid;
        }
        public String getThird_cname() {
            return third_cname;
        }
        public void setThird_cname(String third_cname) {
            this.third_cname = third_cname;
        }
        public boolean isIn_stock() {
            return in_stock;
        }
        public void setIn_stock(boolean in_stock) {
            this.in_stock = in_stock;
        }
        public int getSales() {
            return sales;
        }
        public void setSales(int sales) {
            this.sales = sales;
        }
        public String getCover() {
            return cover;
        }
        public void setCover(String cover) {
            this.cover = cover;
        }
        public String getDetail_url() {
            return detail_url;
        }
        public void setDetail_url(String detail_url) {
            this.detail_url = detail_url;
        }
        public int getShop_id() {
            return shop_id;
        }
        public void setShop_id(int shop_id) {
            this.shop_id = shop_id;
        }
        public String getShop_name() {
            return shop_name;
        }
        public void setShop_name(String shop_name) {
            this.shop_name = shop_name;
        }
        public int getCoupon_price() {
            return coupon_price;
        }
        public void setCoupon_price(int coupon_price) {
            this.coupon_price = coupon_price;
        }
        public int getCos_ratio() {
            return cos_ratio;
        }
        public void setCos_ratio(int cos_ratio) {
            this.cos_ratio = cos_ratio;
        }
        public int getCos_fee() {
            return cos_fee;
        }
        public void setCos_fee(int cos_fee) {
            this.cos_fee = cos_fee;
        }
        public int getOld_fans_cos_ratio() {
            return old_fans_cos_ratio;
        }
        public void setOld_fans_cos_ratio(int old_fans_cos_ratio) {
            this.old_fans_cos_ratio = old_fans_cos_ratio;
        }
        public int getOld_fans_cos_fee() {
            return old_fans_cos_fee;
        }
        public void setOld_fans_cos_fee(int old_fans_cos_fee) {
            this.old_fans_cos_fee = old_fans_cos_fee;
        }
        public String getExt() {
            return ext;
        }
        public void setExt(String ext) {
            this.ext = ext;
        }
        public boolean isIs_explaining() {
            return is_explaining;
        }
        public void setIs_explaining(boolean is_explaining) {
            this.is_explaining = is_explaining;
        }
        public boolean isHas_given_product() {
            return has_given_product;
        }
        public void setHas_given_product(boolean has_given_product) {
            this.has_given_product = has_given_product;
        }
    }
    public static class LotteryProductsBean {
        /**
         * product_id : 3572489218263492280
         * title : YHBM42A5HX873随机颜色尺码发货   短袖t恤男夏季新款潮流42
         * price : 9900
         * first_cid : 20009
         * first_cname : 男装
         * second_cid : 20172
         * second_cname : T恤
         * third_cid : 0
         * third_cname :
         * in_stock : true
         * sales : 0
         * cover : https://p9-aio.ecombdimg.com/obj/ecom-shop-material/v1_WNxCemZY_71083070041840683640856_4f1ffc00ec33e4c933c9c181e88042cc_sx_365628_www800-800
         * detail_url :
         * shop_id : 0
         * shop_name :
         * coupon_price : 0
         * cos_ratio : 2500
         * cos_fee : 0
         * old_fans_cos_ratio : 5000
         * old_fans_cos_fee : 0
         * ext :
         * is_explaining : false
         * has_given_product : false
         * lottery_activity_info : {"lottery_activity_id":7147492334950777100,"lottery_product_start_time":1664159397,"lottery_product_end_time":1664159997}
         */
        private long product_id;
        private String title;
        private int price;
        private int first_cid;
        private String first_cname;
        private int second_cid;
        private String second_cname;
        private int third_cid;
        private String third_cname;
        private boolean in_stock;
        private int sales;
        private String cover;
        private String detail_url;
        private int shop_id;
        private String shop_name;
        private int coupon_price;
        private int cos_ratio;
        private int cos_fee;
        private int old_fans_cos_ratio;
        private int old_fans_cos_fee;
        private String ext;
        private boolean is_explaining;
        private boolean has_given_product;
        private LotteryActivityInfoBean lottery_activity_info;
        public long getProduct_id() {
            return product_id;
        }
        public void setProduct_id(long product_id) {
            this.product_id = product_id;
        }
        public String getTitle() {
            return title;
        }
        public void setTitle(String title) {
            this.title = title;
        }
        public int getPrice() {
            return price;
        }
        public void setPrice(int price) {
            this.price = price;
        }
        public int getFirst_cid() {
            return first_cid;
        }
        public void setFirst_cid(int first_cid) {
            this.first_cid = first_cid;
        }
        public String getFirst_cname() {
            return first_cname;
        }
        public void setFirst_cname(String first_cname) {
            this.first_cname = first_cname;
        }
        public int getSecond_cid() {
            return second_cid;
        }
        public void setSecond_cid(int second_cid) {
            this.second_cid = second_cid;
        }
        public String getSecond_cname() {
            return second_cname;
        }
        public void setSecond_cname(String second_cname) {
            this.second_cname = second_cname;
        }
        public int getThird_cid() {
            return third_cid;
        }
        public void setThird_cid(int third_cid) {
            this.third_cid = third_cid;
        }
        public String getThird_cname() {
            return third_cname;
        }
        public void setThird_cname(String third_cname) {
            this.third_cname = third_cname;
        }
        public boolean isIn_stock() {
            return in_stock;
        }
        public void setIn_stock(boolean in_stock) {
            this.in_stock = in_stock;
        }
        public int getSales() {
            return sales;
        }
        public void setSales(int sales) {
            this.sales = sales;
        }
        public String getCover() {
            return cover;
        }
        public void setCover(String cover) {
            this.cover = cover;
        }
        public String getDetail_url() {
            return detail_url;
        }
        public void setDetail_url(String detail_url) {
            this.detail_url = detail_url;
        }
        public int getShop_id() {
            return shop_id;
        }
        public void setShop_id(int shop_id) {
            this.shop_id = shop_id;
        }
        public String getShop_name() {
            return shop_name;
        }
        public void setShop_name(String shop_name) {
            this.shop_name = shop_name;
        }
        public int getCoupon_price() {
            return coupon_price;
        }
        public void setCoupon_price(int coupon_price) {
            this.coupon_price = coupon_price;
        }
        public int getCos_ratio() {
            return cos_ratio;
        }
        public void setCos_ratio(int cos_ratio) {
            this.cos_ratio = cos_ratio;
        }
        public int getCos_fee() {
            return cos_fee;
        }
        public void setCos_fee(int cos_fee) {
            this.cos_fee = cos_fee;
        }
        public int getOld_fans_cos_ratio() {
            return old_fans_cos_ratio;
        }
        public void setOld_fans_cos_ratio(int old_fans_cos_ratio) {
            this.old_fans_cos_ratio = old_fans_cos_ratio;
        }
        public int getOld_fans_cos_fee() {
            return old_fans_cos_fee;
        }
        public void setOld_fans_cos_fee(int old_fans_cos_fee) {
            this.old_fans_cos_fee = old_fans_cos_fee;
        }
        public String getExt() {
            return ext;
        }
        public void setExt(String ext) {
            this.ext = ext;
        }
        public boolean isIs_explaining() {
            return is_explaining;
        }
        public void setIs_explaining(boolean is_explaining) {
            this.is_explaining = is_explaining;
        }
        public boolean isHas_given_product() {
            return has_given_product;
        }
        public void setHas_given_product(boolean has_given_product) {
            this.has_given_product = has_given_product;
        }
        public LotteryActivityInfoBean getLottery_activity_info() {
            return lottery_activity_info;
        }
        public void setLottery_activity_info(LotteryActivityInfoBean lottery_activity_info) {
            this.lottery_activity_info = lottery_activity_info;
        }
        public static class LotteryActivityInfoBean {
            /**
             * lottery_activity_id : 7147492334950777100
             * lottery_product_start_time : 1664159397
             * lottery_product_end_time : 1664159997
             */
            private long lottery_activity_id;
            private int lottery_product_start_time;
            private int lottery_product_end_time;
            public long getLottery_activity_id() {
                return lottery_activity_id;
            }
            public void setLottery_activity_id(long lottery_activity_id) {
                this.lottery_activity_id = lottery_activity_id;
            }
            public int getLottery_product_start_time() {
                return lottery_product_start_time;
            }
            public void setLottery_product_start_time(int lottery_product_start_time) {
                this.lottery_product_start_time = lottery_product_start_time;
            }
            public int getLottery_product_end_time() {
                return lottery_product_end_time;
            }
            public void setLottery_product_end_time(int lottery_product_end_time) {
                this.lottery_product_end_time = lottery_product_end_time;
            }
        }
    }
}
fanli/src/main/java/com/yeshi/fanli/util/goods/douyin/vo/DYLiveSearchFilter.java
New file
@@ -0,0 +1,72 @@
package com.yeshi.fanli.util.goods.douyin.vo;
/**
 * @author hxh
 * @title: LiveSearchFilter
 * @description: 直播搜索条件
 * @date 2022/9/26 15:14
 */
public class DYLiveSearchFilter {
    private int page;
    /**
     * 分⻚size,范围(0,100]
     */
    private int pageSize;
    /**
     * 1-综合;2-销量;3-佣⾦率;4-粉丝数。不填默认为1
     */
    private Integer sortBy;
    /**
     * 排序⽅式:0-降序;1-升序。
     * 不填默认为0。若sort_by为
     * 1, 则此字段⽆意义
     */
    private Integer sortType;
    /**
     * 直播间状态筛选:0-在播和不
     * 在播,1-在播,2-不在播。默
     * 认为1,代表只出在播直播间
     */
    private Integer status;
    public int getPage() {
        return page;
    }
    public void setPage(int page) {
        this.page = page;
    }
    public int getPageSize() {
        return pageSize;
    }
    public void setPageSize(int pageSize) {
        this.pageSize = pageSize;
    }
    public Integer getSortBy() {
        return sortBy;
    }
    public void setSortBy(Integer sortBy) {
        this.sortBy = sortBy;
    }
    public Integer getSortType() {
        return sortType;
    }
    public void setSortType(Integer sortType) {
        this.sortType = sortType;
    }
    public Integer getStatus() {
        return status;
    }
    public void setStatus(Integer status) {
        this.status = status;
    }
}
fanli/src/main/java/com/yeshi/fanli/util/goods/douyin/vo/DYOrder.java
New file
@@ -0,0 +1,254 @@
package com.yeshi.fanli.util.goods.douyin.vo;
/**
 * @author hxh
 * @title: DYOrder
 * @description: 抖音订单
 * @date 2022/9/30 16:00
 */
public class DYOrder {
    //支付成功
    public final static String FLOW_POINT_PAY_SUCCESS="PAY_SUCC";
    //退款
    public final static String FLOW_POINT_REFUND="REFUND";
    //结算。此状态代表商家确定会结算佣⾦
    public final static String FLOW_POINT_SETTLE="SETTLE";
    //确认收货
    public final static String FLOW_POINT_CONFIRM="CONFIRM";
     //正常状态
    public final static int AFTER_SALE_STATUS_NORMAL=0;
    //退款
    public final static int AFTER_SALE_STATUS_REFUND=2;
    /**
     * order_id : 4984002890650177191
     * app_id : 5171164
     * product_id : 3549871967593209780
     * product_name : 心相印抽纸茶语丝享3层100抽5包家用纸巾面巾纸餐巾纸卫生纸
     * product_img : https://p9-aio.ecombdimg.com/obj/ecom-shop-material/v1_uudYARcp_71167039980691622430814_a91754ba6c808f9cc7e6a553a8bc3268_sx_306764_www800-800
     * total_pay_amount : 970
     * pay_success_time : 2022-09-30 15:47:40
     * refund_time :
     * pay_goods_amount : 990
     * estimated_commission : 0
     * split_rate : 0
     * after_sales_status : 1
     * flow_point : PAY_SUCC
     * external_info : 12313
     * settle_time :
     * confirm_time :
     * estimated_tech_service_fee : 0
     */
    /**
     * 订单id
     **/
    private String order_id;
    /**
     * 应⽤id
     **/
    private String app_id;
    /**
     * 商品id
     **/
    private String product_id;
    /**
     * 商品名称
     **/
    private String product_name;
    /**
     * 商品封面
     **/
    private String product_img;
    /**
     * 总付款⾦额,单位分
     **/
    private int total_pay_amount;
    /**
     * ⽀付成功时间 yyyy-MM-dd HH:mm:ss
     **/
    private String pay_success_time;
    /**
     * 退款时间 yyyy-MM-dd HH:mm:ss
     **/
    private String refund_time;
    /**
     * 预估结算⾦额,单位分。如果有⽀付优惠,
     * pay_goods_amount会略⼤于total_pay_amount
     **/
    private int pay_goods_amount;
    /**
     * 预估佣⾦收⼊,单位分
     **/
    private int estimated_commission;
    /**
     * 推⼴费率,10代表推⼴费率为0.10
     **/
    private int split_rate;
    /**
     * 售后状态,1-空,2-产⽣退款
     **/
    private int after_sales_status;
    /**
     * PAY_SUCC:⽀付完成
     * REFUND:退款
     * SETTLE:结算。此状态代表商家确定会结算佣⾦
     * CONFIRM: 确认收货
     **/
    private String flow_point;
    /**
     * 开发者在转链时⾃⼰上传的external_inf
     **/
    private String external_info;
    /**
     * 结算时间
     **/
    private String settle_time;
    /**
     * 确认收货时间
     **/
    private String confirm_time;
    /**
     * 预估技术服务费,为pay_goods_amount*0.1。此字段
     * 当前不准,仅供参考。
     **/
    private int estimated_tech_service_fee;
    public String getOrder_id() {
        return order_id;
    }
    public void setOrder_id(String order_id) {
        this.order_id = order_id;
    }
    public String getApp_id() {
        return app_id;
    }
    public void setApp_id(String app_id) {
        this.app_id = app_id;
    }
    public String getProduct_id() {
        return product_id;
    }
    public void setProduct_id(String product_id) {
        this.product_id = product_id;
    }
    public String getProduct_name() {
        return product_name;
    }
    public void setProduct_name(String product_name) {
        this.product_name = product_name;
    }
    public String getProduct_img() {
        return product_img;
    }
    public void setProduct_img(String product_img) {
        this.product_img = product_img;
    }
    public int getTotal_pay_amount() {
        return total_pay_amount;
    }
    public void setTotal_pay_amount(int total_pay_amount) {
        this.total_pay_amount = total_pay_amount;
    }
    public String getPay_success_time() {
        return pay_success_time;
    }
    public void setPay_success_time(String pay_success_time) {
        this.pay_success_time = pay_success_time;
    }
    public String getRefund_time() {
        return refund_time;
    }
    public void setRefund_time(String refund_time) {
        this.refund_time = refund_time;
    }
    public int getPay_goods_amount() {
        return pay_goods_amount;
    }
    public void setPay_goods_amount(int pay_goods_amount) {
        this.pay_goods_amount = pay_goods_amount;
    }
    public int getEstimated_commission() {
        return estimated_commission;
    }
    public void setEstimated_commission(int estimated_commission) {
        this.estimated_commission = estimated_commission;
    }
    public int getSplit_rate() {
        return split_rate;
    }
    public void setSplit_rate(int split_rate) {
        this.split_rate = split_rate;
    }
    public int getAfter_sales_status() {
        return after_sales_status;
    }
    public void setAfter_sales_status(int after_sales_status) {
        this.after_sales_status = after_sales_status;
    }
    public String getFlow_point() {
        return flow_point;
    }
    public void setFlow_point(String flow_point) {
        this.flow_point = flow_point;
    }
    public String getExternal_info() {
        return external_info;
    }
    public void setExternal_info(String external_info) {
        this.external_info = external_info;
    }
    public String getSettle_time() {
        return settle_time;
    }
    public void setSettle_time(String settle_time) {
        this.settle_time = settle_time;
    }
    public String getConfirm_time() {
        return confirm_time;
    }
    public void setConfirm_time(String confirm_time) {
        this.confirm_time = confirm_time;
    }
    public int getEstimated_tech_service_fee() {
        return estimated_tech_service_fee;
    }
    public void setEstimated_tech_service_fee(int estimated_tech_service_fee) {
        this.estimated_tech_service_fee = estimated_tech_service_fee;
    }
}
fanli/src/main/java/com/yeshi/fanli/util/goods/douyin/vo/DYOrderFilter.java
New file
@@ -0,0 +1,100 @@
package com.yeshi.fanli.util.goods.douyin.vo;
import java.util.List;
/**
 * @author hxh
 * @title: DYOrderFilter
 * @description: 抖音订单
 * @date 2022/9/28 14:04
 */
public class DYOrderFilter {
    //商品分销
    public final static int ORDER_TYPE_GOODS = 1;
    //直播分销
    public final static int ORDER_TYPE_LIVE = 2;
    /**
     * 此次请求拉取数量 取值区间: [1, 50]。
     **/
    private Integer size;
    /**
     * 上⼀次相同app_id订单查询返回的游标 某个app_id第⼀次查询应为"0",后
     * ⾯查询应使⽤前⼀次请求返回的
     * Cursor。直到查询返回cursor为""。
     * 可⽤于分批拉取订单
     **/
    private String cursor;
    /**
     * ⽀付的开始时间  开始时间不能⼤于结束时间,且为北京时间的时间戳,单位为秒
     **/
    private Long start_time;
    /**
     * ⽀付的结束时间,如果没有传递order_ids参数,则必填
     * 结束时间与开始时间间隔不超过90天
     **/
    private Long end_time;
    /**
     * 订单号,选填,最多⽀持10个订单号,如果这
     * 个字段填了,
     * start_time/end_time/cursor/size不
     * 会使⽤
     **/
    private List<String> order_ids;
    /**
     * 1-商品分销订单,
     * 2-直播间分销订单
     * 必填,1/2
     **/
    private Integer order_type;
    public Integer getSize() {
        return size;
    }
    public void setSize(Integer size) {
        this.size = size;
    }
    public String getCursor() {
        return cursor;
    }
    public void setCursor(String cursor) {
        this.cursor = cursor;
    }
    public Long getStart_time() {
        return start_time;
    }
    public void setStart_time(Long start_time) {
        this.start_time = start_time;
    }
    public Long getEnd_time() {
        return end_time;
    }
    public void setEnd_time(Long end_time) {
        this.end_time = end_time;
    }
    public List<String> getOrder_ids() {
        return order_ids;
    }
    public void setOrder_ids(List<String> order_ids) {
        this.order_ids = order_ids;
    }
    public Integer getOrder_type() {
        return order_type;
    }
    public void setOrder_type(Integer order_type) {
        this.order_type = order_type;
    }
}
fanli/src/main/java/com/yeshi/fanli/util/goods/douyin/vo/DYOrderResult.java
New file
@@ -0,0 +1,31 @@
package com.yeshi.fanli.util.goods.douyin.vo;
import java.util.List;
/**
 * @author hxh
 * @title: DYOrderResult
 * @description: TODO
 * @date 2022/9/30 16:15
 */
public class DYOrderResult {
    private String cursor;
    private List<DYOrder> orders;
    public String getCursor() {
        return cursor;
    }
    public void setCursor(String cursor) {
        this.cursor = cursor;
    }
    public List<DYOrder> getOrders() {
        return orders;
    }
    public void setOrders(List<DYOrder> orders) {
        this.orders = orders;
    }
}
fanli/src/main/java/com/yeshi/fanli/util/goods/douyin/vo/ListResult.java
New file
@@ -0,0 +1,35 @@
package com.yeshi.fanli.util.goods.douyin.vo;
import java.util.List;
/**
 * @author hxh
 * @title: ListResult
 * @description: TODO
 * @date 2022/9/26 16:42
 */
public class ListResult {
    private int count;
    private List<Object> dataList;
    public ListResult(int count, List<Object> dataList) {
        this.count = count;
        this.dataList = dataList;
    }
    public int getCount() {
        return count;
    }
    public void setCount(int count) {
        this.count = count;
    }
    public List<Object> getDataList() {
        return dataList;
    }
    public void setDataList(List<Object> dataList) {
        this.dataList = dataList;
    }
}
fanli/src/main/java/com/yeshi/fanli/util/taobao/TaoKeApiUtil.java
@@ -117,6 +117,7 @@
        Map<String, String> map = new HashMap<>();
        //TODO 临时接口 taobao.tbk.item.info.get
        map.put("method", "taobao.tbk.item.info.get");
        //map.put("biz_scene_id", 2 + "");
        map.put("num_iids", id + "");
        String resultStr = TaoKeBaseUtil.baseRequestForThreeTimes(map, true);
        System.out.println(resultStr);
@@ -635,8 +636,8 @@
        if (filter.getKey() != null && filter.getKey().trim().equalsIgnoreCase(""))
            return null;
        if (filter.getKey() != null && filter.getKey().length() > 100)
            return null;
//        if (filter.getKey() != null && filter.getKey().length() > 100)
//            return null;
        PageEntity pageEntity = new PageEntity();
        TaoBaoSearchResult taoBaoSearchResult = new TaoBaoSearchResult();
@@ -1940,6 +1941,9 @@
        return null;
    }
    // 淘礼金创建
    //{"result":{"msg_code":"FAIL_CHECK_ITEM_DAILY_SEND_NUM_CHECK_ERROR","msg_info":"今日该商品淘礼金创建数已超上限,请您明日再试","success":false},"request_id":"10p30v02qadkq"}
    //{"result":{"msg_code":"ASSET_ACCOUNT_BALANCE_NOT_ENOUGH","msg_info":"账户预算不足","success":false},"request_id":"5caz9izr7jqp"}
@@ -2282,11 +2286,15 @@
        }
    }
    public static  void main(String[] args) throws TaobaoGoodsDownException {
        //搜索
        TaoBaoGoodsBrief goods=  searchGoodsDetail("682141395159");
    public static  void main(String[] args) throws TaoBaoTokenParseException, TaobaoGoodsDownException {
        System.out.println(goods);
        String token="【淘宝】https://m.tb.cn/h.Ud07Ald?tk=NIWE2xNaOzs CZ0001 「超细高分子细滑牙线棒一次性牙签牙线便携牙线盒牙线签6盒300支」\n" +
                "点击链接直接打开 或者 淘宝搜索直接打开";
        TokenConvertResult convertResult=tokenConvert(token);
        getSimpleGoodsInfo(convertResult.getNum_iid());
    }
fanli/src/main/java/com/yeshi/fanli/util/taobao/TaoKeOrderApiUtil.java
@@ -420,6 +420,7 @@
        app.setAppSecret(TaoBaoConstant.TAOBAO_AUTH_APPSECRET);
        try {
            JSONObject json = TaoKeBaseUtil.baseRequest(params, app);
            System.out.println(json.toString());
            if (Constant.IS_TEST)
                System.out.println(json);
            if (clazz instanceof TaoBaoOrder)
@@ -567,10 +568,12 @@
    public static void main(String[] args){
        long endTime=System.currentTimeMillis();
        long startTime=endTime-1000*60*60*3;
        long endTime=TimeUtil.convertToTimeTemp("2022-09-20 11:16:50","yyyy-MM-dd HH:mm:ss");
        long startTime=TimeUtil.convertToTimeTemp("2022-09-20 11:16:48","yyyy-MM-dd HH:mm:ss");
        List<TaoBaoOrder> orderList=  getTaoBaoCommonOrderList(startTime,endTime,1);
        List<TaoBaoOrder> orderList=  getTaoBaoSpecialOrderList(startTime,endTime,1);
        orderList=  getTaoBaoCommonOrderList(startTime,endTime,1);
        orderList=  getTaoBaoRelationOrderList(startTime,endTime,1);
        System.out.println(orderList);
    }