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); }