facade-goods/src/main/java/com/yeshi/goods/facade/utils/taobao/DaTaoKeApiUtil.java
@@ -57,6 +57,9 @@ final static String APP_KEY_2 = "5cf75b0f2c0e4"; final static String APP_KEY_SECRET_2 = "b14f1fa115129a447937ca998b311d1e"; final static String APP_KEY_FAQUAN = "65bb498aac5ed"; final static String APP_KEY_SECRET_FAQUAN = "c2a84e7ec5a7511fda0341ddc205b99c"; // 排序值 final public static int SORT_DEFAULT = 0; @@ -834,9 +837,9 @@ public static DaTaoKeGoodsResult getFriendsFircleList(String pageId, int pageSize) { DaTaoKeGoodsResult daTaoKeGoodsResult = new DaTaoKeGoodsResult(); TaoKeAppInfo app = getRandomApp(); TaoKeAppInfo app = new TaoKeAppInfo(APP_KEY_FAQUAN, APP_KEY_SECRET_FAQUAN); Map<String, String> params = new TreeMap<>(); params.put("version", "v1.2.2"); params.put("version", "v1.3.0"); params.put("appKey", app.getAppKey()); params.put("pageSize", pageSize + ""); if (!StringUtil.isNullOrEmpty(pageId)) @@ -1035,12 +1038,29 @@ } // 搜索京东商品 public static String searchJDGoods(JSONObject paramsJSON){ TaoKeAppInfo app = getRandomApp(); Map<String, String> params = new TreeMap<>(); params.put("version", "v1.0.0"); params.put("appKey", app.getAppKey()); Set<String> keys = paramsJSON.keySet(); for(String key:keys){ if(key.equalsIgnoreCase("skuIds")){ params.put(key, paramsJSON.optString(key).replace("[","").replace("]","")); continue; } params.put(key, paramsJSON.optString(key)); } params.put("sign", getSign(params, app.getAppSecret())); String result = baseGet("https://openapi.dataoke.com/api/dels/jd/goods/search", params); System.out.printf(result); return result; } public static void main(String[] args) { // String result = DaTaoKeApiUtil.convertLink("712706225501", "mm_124933865_56750082_89555600043",false); // System.out.println(result); String result = DaTaoKeApiUtil.parseGoodsIdFromToken("【淘宝】https://m.tb.cn/h.50OdXLq?tk=t7ghdGREBd3 CZ0001 「盼盼甲级防盗门家用双色门进户安全门入户门单门定制大门内外双色」\n" + "点击链接直接打开 或者 淘宝搜索直接打开"); System.out.println(result); } } fanli/src/main/java/com/yeshi/fanli/controller/client/v1/GoodsController.java
@@ -221,7 +221,7 @@ TaoBaoGoodsBrief goods = null; try { goods = TaoKeApiUtil.getSimpleGoodsInfo(auctionId); goods = TaoKeApiUtil.getSimpleGoodsInfoForOwnBuy(auctionId); } catch (TaobaoGoodsDownException e) { out.print(JsonUtil.loadFalseResult(3, "商品已下架")); return; fanli/src/main/java/com/yeshi/fanli/controller/client/v2/SearchControllerV2.java
@@ -890,6 +890,18 @@ if (darray != null && darray.size() > 0) { String auctionId = darray.optJSONObject(0).optString("item_id"); result.getTaoBaoGoodsBriefs().set(0, TaoKeApiUtil.searchGoodsDetail(auctionId)); }else{ // 大淘客无法搜索到,就将最后一个字去掉然后再搜索 String originText = sf.getKey(); sf.setKey(originText.substring(0,originText.length()-1)); result = TaoBaoUtil.search(sf, specialId, null); // if(result.getTaoBaoGoodsBriefs() != null) // for(TaoBaoGoodsBrief tb: result.getTaoBaoGoodsBriefs()){ // if(originText.equalsIgnoreCase(tb.getTitle())){ // // break; // } // } } } taoBaoGoodsCacheUtil.saveSearchResult(sf, result); fanli/src/main/java/com/yeshi/fanli/controller/client/v2/ShareControllerV2.java
@@ -1473,8 +1473,8 @@ ShareInfoVO shareInfo = new ShareInfoVO(); shareInfo.setClickUrl(convertResult.getQrCode()); shareInfo.setWxErCode(convertResult.getQrCode()); shareInfo.setClickUrl(convertResult.getZlink()); shareInfo.setWxErCode(convertResult.getZlink()); shareInfo.setCommentTexts(new ArrayList<>()); shareInfo.setRule(configService.getValue(ConfigKeyEnum.shareRuleLinkDY.getKey(), system)); shareInfo.setPictUrl(goods.getCover()); fanli/src/main/java/com/yeshi/fanli/job/goods/FreeGoodsCouponJob.java
@@ -173,118 +173,6 @@ } } /** * 更新京东商品-免单 */ private void updateGoodsJD() { int maxNum = 5; BigDecimal limitPrice = new BigDecimal(2); List<FreeGoodsCoupon> listExist = freeGoodsCouponService.listByType(0, 100, Constant.SOURCE_TYPE_JD); GoodsMoneyConfigParamsDTO params = orderHongBaoMoneyComputeService.getShowComputeRate("android", "55",SystemEnum.blks); params.setBaseFanliRate(hongBaoManageService.getBaseFanliRate(SystemEnum.blks)); // 信息更新 List<GoodsDetailVO> listNew = new ArrayList<GoodsDetailVO>(); List<FreeGoodsCoupon> listdel = new ArrayList<FreeGoodsCoupon>(); if (listExist != null && listExist.size() > 0) { for (FreeGoodsCoupon freeGood : listExist) { JDGoods goodsInfo = jdGoodsCacheUtil.getGoodsInfo(Long.parseLong(freeGood.getGoodsId())); if (goodsInfo == null) { listdel.add(freeGood); } else { if (listNew.size() >= 5) { listdel.add(freeGood); continue; } // 比例限制: 金比高于60% JDCommissionInfo commissionInfo = goodsInfo.getCommissionInfo(); if (commissionInfo == null) { continue; } if (commissionInfo.getCommissionShare().compareTo(BigDecimal.valueOf(60)) < 0) { continue; } GoodsDetailVO detailVO = GoodsDetailVOFactory.convertJDGoods(goodsInfo, params); if (detailVO.getCouponPrice() != null) { if (detailVO.getCouponPrice().compareTo(limitPrice) > 0) continue; } else if (detailVO.getZkPrice().compareTo(limitPrice) > 0) { continue; } boolean saveResult = freeGoodsCouponService.saveFreeGoods(detailVO); if (saveResult) { listNew.add(detailVO); } } } } // 不足补齐 if (listNew.size() < maxNum) { JDFilter filterAPI = new JDFilter(); filterAPI.setPageSize(Constant.PAGE_SIZE); filterAPI.setPriceto(2.0); filterAPI.setCommissionShareStart(60); for (int page = 1; page < 1000; page++) { filterAPI.setPageIndex(page); JDSearchResult result = JDApiUtil.queryByKey(filterAPI); if (result == null) { break; } List<JDGoods> goodsList = result.getGoodsList(); if (goodsList == null || goodsList.size() == 0) { break; } for (JDGoods goods : goodsList) { // 比例限制: 金比高于60% JDCommissionInfo commissionInfo = goods.getCommissionInfo(); if (commissionInfo == null) { continue; } if (commissionInfo.getCommissionShare().compareTo(BigDecimal.valueOf(60)) < 0) { continue; } boolean exist = false; if (listNew.size() > 0) { for (GoodsDetailVO goodsDetailVO : listNew) { if (goodsDetailVO.getGoodsId().equalsIgnoreCase(goods.getSkuId() + "")) { exist = true; break; } } } if (exist) continue; GoodsDetailVO detailVO = GoodsDetailVOFactory.convertJDGoods(goods, params); boolean saveResult = freeGoodsCouponService.saveFreeGoods(detailVO); if (saveResult) { listNew.add(detailVO); } if (listNew.size() >= maxNum) break; } if (listNew.size() >= maxNum) break; } } // 删除不满足条件 if (listdel.size() > 0) { for (FreeGoodsCoupon freeGoods : listdel) { freeGoodsCouponService.delete(freeGoods.getGoodsId(), freeGoods.getGoodsType()); } } } /** * 更新京东商品-免单 fanli/src/main/java/com/yeshi/fanli/service/impl/taobao/dataoke/DaTaoKeGoodsDetailV2ServiceImpl.java
@@ -341,18 +341,22 @@ private List<DaTaoKeDetailV2> getDefaultDingDongQiang() { // 按更新时间加 DaTaoKeGoodsResult result = DaTaoKeApiUtil.getRankingList(DaTaoKeApiUtil.RANK_TYPE_TIME, null); if (result != null && result.getGoodsList().size() > 0) { List<DaTaoKeDetailV2> finalList = new ArrayList<>(); Collections.shuffle(result.getGoodsList()); finalList.addAll(result.getGoodsList().subList(0, result.getGoodsList().size() > 8 ? 8 : result.getGoodsList().size())); for (DaTaoKeDetailV2 detail : finalList) { detail.setCouponReceiveNum(detail.getCouponTotalNum() - (int) (200 + Math.random() * 1000)); if (detail.getCouponTotalNum() - detail.getCouponReceiveNum() <= 0) detail.setCouponReceiveNum(detail.getCouponTotalNum()); try { DaTaoKeGoodsResult result = DaTaoKeApiUtil.getRankingList(DaTaoKeApiUtil.RANK_TYPE_TIME, null); if (result != null && result.getGoodsList().size() > 0) { List<DaTaoKeDetailV2> finalList = new ArrayList<>(); Collections.shuffle(result.getGoodsList()); finalList.addAll(result.getGoodsList().subList(0, result.getGoodsList().size() > 8 ? 8 : result.getGoodsList().size())); for (DaTaoKeDetailV2 detail : finalList) { detail.setCouponReceiveNum(detail.getCouponTotalNum() - (int) (200 + Math.random() * 1000)); if (detail.getCouponTotalNum() - detail.getCouponReceiveNum() <= 0) detail.setCouponReceiveNum(detail.getCouponTotalNum()); } return finalList; } return finalList; }catch(Exception e){ } return null; } fanli/src/main/java/com/yeshi/fanli/service/manger/ClipboardAnalysisManager.java
@@ -205,7 +205,7 @@ if (goodsId != null) { TaoBaoGoodsBrief taobaoGoods =null; try { taobaoGoods = TaoKeApiUtil.getSimpleGoodsInfo(goodsId); taobaoGoods = TaoKeApiUtil.getSimpleGoodsInfoForOwnBuy(goodsId); } catch (TaobaoGoodsDownException e) { e.printStackTrace(); } fanli/src/main/java/com/yeshi/fanli/util/goods/douyin/CSJCPSApiUtil.java
@@ -412,8 +412,9 @@ public static void main(String[] args) throws Exception { String id = parseProductId("https://v.douyin.com/iLQybbqP/"); System.out.printf(id); DYConvertResult result = goodsConvert("https://v.douyin.com/iNTutNyn/","123","132"); System.out.printf(result.toString()); } fanli/src/main/java/com/yeshi/fanli/util/jd/JDApiUtil.java
@@ -4,17 +4,13 @@ import java.lang.reflect.Type; import java.math.BigDecimal; import java.net.URLEncoder; import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; import java.util.Date; import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.*; import com.yeshi.fanli.dto.jd.*; import com.yeshi.fanli.entity.jd.JDBackUpOrder; import com.yeshi.fanli.util.Constant; import com.yeshi.fanli.util.taobao.SearchFilterUtil; import com.yeshi.goods.facade.utils.taobao.DaTaoKeApiUtil; import org.apache.commons.httpclient.HttpClient; import org.apache.commons.httpclient.methods.PostMethod; @@ -36,6 +32,9 @@ import net.sf.json.JSONObject; public class JDApiUtil { final static Logger logger = LoggerFactory.getLogger("jdApiLogger"); public static String APP_ID = "1864778416"; public static String APP_KEY = "388f5133d13a5ea290aa5c44f3ebcc00"; public static String SECRET_KEY = "e22367fc866746d98b50d47b4c521781"; @@ -228,6 +227,8 @@ * @return */ public static JDSearchResult queryByKey(JDFilter filter) { logger.info(String.format("queryByKey:%s %s", filter.getKeyword(), StringUtil.concat(filter.getListId(), ","))); JDSearchResult searchResult = new JDSearchResult(); List<JDGoods> list = new ArrayList<>(); @@ -293,15 +294,16 @@ json.put("owner", filter.getOwner()); System.out.println(json.toString()); String result = ""; JSONObject jsonDTO = new JSONObject(); jsonDTO.put("goodsReqDTO", json); String result = baseRequest2("jd.union.open.goods.query", null, jsonDTO); result = baseRequest2("jd.union.open.goods.query", null, jsonDTO); System.out.println(result); JSONObject resultJson = JSONObject.fromObject(result); resultJson = resultJson.optJSONObject("jd_union_open_goods_query_response"); if (resultJson.optInt("code") == 0) { if (resultJson != null && resultJson.optInt("code") == 0) { result = resultJson.optString("result"); resultJson = JSONObject.fromObject(result); String message = resultJson.optString("message"); @@ -315,13 +317,33 @@ } } } long totalCount = resultJson.optLong("totalCount"); PageEntity pageEntity = new PageEntity(); pageEntity.setTotalCount(totalCount); searchResult.setPageEntity(pageEntity); } else { result = DaTaoKeApiUtil.searchJDGoods(json); resultJson = JSONObject.fromObject(result); if (resultJson.optInt("code") == 0) { JSONObject data = resultJson.optJSONObject("data"); JSONArray array = data.optJSONArray("list"); for (int i = 0; i < array.size(); i++) { JSONObject item = array.optJSONObject(i); JDGoods goods = parseDaTaoKeJDGoods(item); if (goods != null) list.add(goods); } long totalCount = data.optLong("totalNum"); PageEntity pageEntity = new PageEntity(); pageEntity.setTotalCount(totalCount); searchResult.setPageEntity(pageEntity); } System.out.printf(result); } searchResult.setGoodsList(list); return searchResult; } @@ -470,6 +492,124 @@ return goods; } private static JDGoods parseDaTaoKeJDGoods(JSONObject json) { JDGoods goods = new JDGoods(); // 佣金信息 BigDecimal commissionShare = new BigDecimal(json.optString("commissionShare")); if (commissionShare.compareTo(new BigDecimal(0)) > 0) { JDCommissionInfo commissionInfo = new JDCommissionInfo(); commissionInfo.setCommission(new BigDecimal(json.optString("commission"))); commissionInfo.setCommissionShare(commissionShare); goods.setCommissionInfo(commissionInfo); } else { return null; } goods.setComments(json.optLong("comments")); goods.setBrandCode(json.optString("brandCode")); goods.setBrandName(json.optString("brandName")); goods.setGoodCommentsShare(new BigDecimal(json.optString("goodCommentsShare"))); goods.setInOrderCount30Days(json.optLong("inOrderCount30Days")); goods.setOwner(json.optString("owner")); goods.setMaterialUrl(json.optString("materialUrl")); goods.setSkuId(json.optLong("skuId")); goods.setSkuName(json.optString("skuName")); goods.setIsHot(json.optInt("isHot")); // 价格信息 goods.setPrice(new BigDecimal(json.optString("price"))); // 店铺信息 JDShopInfo jdshopInfo = new JDShopInfo(); jdshopInfo.setShopId(json.optInt("shopId")); jdshopInfo.setShopName(json.optString("shopName")); goods.setShopInfo(jdshopInfo); // 分类信息 JDCategoryInfo categoryInfo = new JDCategoryInfo(); categoryInfo.setCid1(json.optLong("cid1")); categoryInfo.setCid1Name(json.optString("cid1Name")); categoryInfo.setCid2(json.optLong("cid2")); categoryInfo.setCid2Name(json.optString("cid2Name")); categoryInfo.setCid3(json.optLong("cid3")); categoryInfo.setCid3Name(json.optString("cid3Name")); goods.setCategoryInfo(categoryInfo); // 图片信息 List<String> imageList = new ArrayList<>(); JSONArray imagesArray = json.optJSONArray("imageUrlList"); for (int i = 0; i < imagesArray.size(); i++) { imageList.add(imagesArray.optString(i)); } goods.setImageList(imageList); if (imageList.size() > 0) { goods.setPicUrl(imageList.get(0)); } BigDecimal price = new BigDecimal(json.optString("price")); // 拼购信息 Object pinGouInfo = json.get("pinGouInfo"); if (pinGouInfo != null) { JSONObject pinGouInfoJson = JSONObject.fromObject(pinGouInfo); if (!pinGouInfoJson.isEmpty()) { JDPingouInfo jdPinGouInfo = new JDPingouInfo(); price = new BigDecimal(pinGouInfoJson.optString("pingouPrice")); jdPinGouInfo.setPingouPrice(price); jdPinGouInfo.setPingouTmCount(pinGouInfoJson.optLong("pingouTmCount")); jdPinGouInfo.setPingouUrl(pinGouInfoJson.optString("pingouUrl")); jdPinGouInfo.setTotalCount(pinGouInfoJson.optLong("totalCount")); jdPinGouInfo.setPingouEndTime(pinGouInfoJson.optLong("pingouEndTime")); jdPinGouInfo.setPingouStartTime(pinGouInfoJson.optLong("pingouStartTime")); goods.setPinGouInfo(jdPinGouInfo); } } // 券信息 Object coupon = json.get("couponInfo"); if (coupon != null) { JSONArray couponArray = json.optJSONArray("couponList"); if (couponArray != null) { List<JDCouponInfo> couponInfoList = new ArrayList<>(); for (int i = 0; i < couponArray.size(); i++) { JDCouponInfo couponInfo = parseJDCouponInfo(couponArray.optJSONObject(i)); if (couponInfo != null) couponInfoList.add(couponInfo); } // 根据消费条件排序 Comparator<JDCouponInfo> cm = new Comparator<JDCouponInfo>() { @Override public int compare(JDCouponInfo o1, JDCouponInfo o2) { return o1.getQuota().compareTo(o2.getQuota()); } }; Collections.sort(couponInfoList, cm); // if (couponInfoList.size() > 0) { // // 设置券信息为最接近的一个 // for (int i = couponInfoList.size() - 1; i >= 0; i--) { // if // (couponInfoList.get(i).getQuota().compareTo(goods.getPrice()) // <= 0) { // goods.setCouponInfo(couponInfoList.get(i)); // break; // } // } // if (goods.getCouponInfo() == null) // goods.setCouponInfo(couponInfoList.get(0)); // } // goods.setCouponInfoList(couponInfoList); } } return goods; } /** * 获取推广商品信息接口 @@ -823,4 +963,9 @@ System.out.println(result); } public static void main(String[] args) { List<Long> ids=new ArrayList<>(); ids.add(100067115976L); } } fanli/src/main/java/com/yeshi/fanli/util/taobao/TaoKeApiUtil.java
@@ -121,6 +121,38 @@ map.put("method", "taobao.tbk.item.info.get"); map.put("num_iids", id + ""); String resultStr = TaoKeBaseUtil.baseRequestForThreeTimes(map, true); System.out.println(resultStr); JSONObject data = JSONObject.fromObject(resultStr); // 商品下架 if (data.optJSONObject("error_response") != null && data.optJSONObject("error_response").optInt("code") == 15 && data.optJSONObject("error_response").optInt("sub_code") == 50001) { throw new TaobaoGoodsDownException(data.optJSONObject("error_response").optInt("code"), "商品下架"); } //TODO 修改临时接口 tbk_item_info_get_response if (data.optJSONObject("tbk_item_info_get_response") == null) return null; JSONArray array = data.optJSONObject("tbk_item_info_get_response").optJSONObject("results") .optJSONArray("n_tbk_item"); if (array != null && array.size() > 0) { JSONObject item = array.optJSONObject(0); TaoBaoGoodsBrief goods = parseSimpleGoodsInfo(item); if(goods!=null&&!NumberUtil.isNumeric(id)){ goods.setAuctionId(id); } return goods; } return null; } // 获取商品详情自购 public static TaoBaoGoodsBrief getSimpleGoodsInfoForOwnBuy(String id) throws TaobaoGoodsDownException { Map<String, String> map = new HashMap<>(); map.put("method", "taobao.tbk.item.info.get"); map.put("num_iids", id + ""); String resultStr = null; if(!NumberUtil.isNumeric(id)){ resultStr = TaoKeBaseUtil.baseRequestForThreeTimes(map, true); fanli/src/main/resource/logback.xml
@@ -15,7 +15,7 @@ <property name="log.maxSize" value="20MB"/> <!--日志存储的根路径 ${catalina.base}指向每个Tomcat目录私有信息的位置, 就是conf、logs、temp、webapps和work的父目录--> <property name="log.filePath" value="D:/logs"/> <property name="log.filePath" value="logs"/> <!--日志展示的格式--> <property name="log.pattern" value="%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n"/> @@ -103,6 +103,22 @@ <file>${log.filePath}/order/order.log</file> <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"> <fileNamePattern>${log.filePath}/order/order.%d{yyyy-MM-dd}.%i.log.zip</fileNamePattern> <maxHistory>${log.maxHistory}</maxHistory> <maxFileSize>${log.maxSize}</maxFileSize> </rollingPolicy> <layout class="ch.qos.logback.classic.PatternLayout"> <pattern> ${log.pattern} </pattern> </layout> </appender> <appender name="JD_API_APPENDER" class="ch.qos.logback.core.rolling.RollingFileAppender"> <file>${log.filePath}/api/jdapi.log</file> <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"> <fileNamePattern>${log.filePath}/api/jdapi.%d{yyyy-MM-dd}.%i.log.zip</fileNamePattern> <maxHistory>${log.maxHistory}</maxHistory> <maxFileSize>${log.maxSize}</maxFileSize> </rollingPolicy> @@ -523,6 +539,11 @@ <!-- 排除不需要打印的日志 --> <logger name="com.qcloud.cmq.CMQTool" level="OFF" additivity="false"/> <!-- 京东API日志 --> <logger name="jdApiLogger" level="INFO" additivity="false"> <appender-ref ref="JD_API_APPENDER"></appender-ref> </logger> <!-- 一切logger都会继承自root,root默认的层级level为debug --> <root>