From 28cf328a098334b51a3e9d2d56f983fb8c862211 Mon Sep 17 00:00:00 2001 From: yujian <yujian@163.com> Date: 星期六, 23 五月 2020 09:54:38 +0800 Subject: [PATCH] 足迹、收藏订单兼容新需求 --- fanli/src/main/java/com/yeshi/fanli/service/manger/ClipboardAnalysisManager.java | 335 ++++++++++++++++++++++++++++++++++++++----------------- 1 files changed, 229 insertions(+), 106 deletions(-) diff --git a/fanli/src/main/java/com/yeshi/fanli/service/manger/ClipboardAnalysisManager.java b/fanli/src/main/java/com/yeshi/fanli/service/manger/ClipboardAnalysisManager.java index 949d64c..47c4f3b 100644 --- a/fanli/src/main/java/com/yeshi/fanli/service/manger/ClipboardAnalysisManager.java +++ b/fanli/src/main/java/com/yeshi/fanli/service/manger/ClipboardAnalysisManager.java @@ -1,6 +1,7 @@ package com.yeshi.fanli.service.manger; -import java.util.Arrays; +import java.io.UnsupportedEncodingException; +import java.net.URLDecoder; import java.util.HashSet; import java.util.List; import java.util.Map; @@ -20,11 +21,14 @@ import com.yeshi.fanli.entity.jd.JDGoods; import com.yeshi.fanli.entity.taobao.TaoBaoGoodsBrief; import com.yeshi.fanli.exception.taobao.TaoBaoTokenParseException; +import com.yeshi.fanli.exception.taobao.TaobaoGoodsDownException; import com.yeshi.fanli.exception.user.TokenRecordException; import com.yeshi.fanli.service.inter.user.TokenRecordService; import com.yeshi.fanli.service.manger.goods.jd.JDGoodsLinkParseManager; import com.yeshi.fanli.service.manger.goods.tb.TaoBaoTokenAuctionIdMapManager; +import com.yeshi.fanli.util.Constant; import com.yeshi.fanli.util.DouYinUtil; +import com.yeshi.fanli.util.RedisManager; import com.yeshi.fanli.util.StringUtil; import com.yeshi.fanli.util.TokenUtil; import com.yeshi.fanli.util.Utils; @@ -35,7 +39,6 @@ import com.yeshi.fanli.util.pinduoduo.PinDuoDuoApiUtil; import com.yeshi.fanli.util.pinduoduo.PinDuoDuoUtil; import com.yeshi.fanli.util.taobao.TaoBaoUtil; -import com.yeshi.fanli.util.taobao.TaoKeApiUtil; import com.yeshi.fanli.vo.msg.TokenVO; import com.yeshi.fanli.vo.search.GoodsDocParseResultVO; @@ -58,6 +61,9 @@ @Resource private TaoBaoTokenAuctionIdMapManager taoBaoTokenAuctionIdMapManager; + + @Resource + private RedisManager redisManager; /** * @Title: parseContentType @Description: 瑙f瀽鏂囨湰鐨勭被鍨� @param text @return Set @@ -139,6 +145,25 @@ // 瑙f瀽鍟嗗搧 CommonGoods goods = parseLink(text); if (goods == null) { + // 鍒ゆ柇閾炬帴涔嬩腑鏄惁鍖呭惈鍙d护 + try { + String newText = URLDecoder.decode(text, "UTF-8"); + List<String> tokenList = TaoBaoUtil.getTokenListFromTextWithKuoHao(newText); + if (tokenList != null && tokenList.size() > 0) { + try { + goods = parseTaoBaoToken(tokenList.get(0)); + } catch (TaoBaoTokenParseException e) { + } + if (goods != null && goods.getGoodsId() != null) { + resultListener.onResult(goods); + return; + } + } + + } catch (UnsupportedEncodingException e) { + e.printStackTrace(); + } + resultListener.none(); } else { resultListener.onResult(goods); @@ -191,7 +216,15 @@ if (!StringUtil.isNullOrEmpty(link)) { CommonGoods goods = parseLink(urlList.get(0)); if (goods == null || goods.getGoodsId() == null) { - resultListener.onResult(new GoodsDocParseResultVO(text, urlList.get(0))); + if (urlList.size() > 1) + resultListener.onResult(new GoodsDocParseResultVO(text, urlList.get(0))); + else {// 鍗曢摼鎺� + // 鍒ゆ柇鏄惁鍖呭惈鍙浆閾剧殑閾炬帴 + if (!isContainsLinkConvert(link)) + resultListener.none(); + else + resultListener.onResult(new GoodsDocParseResultVO(text, link)); + } } else { if (VersionUtil.greaterThan_2_0_7(platform, version)) { if (urlList.size() == 1)// 鍗曢摼鎺�+鏂囨湰 @@ -211,15 +244,23 @@ return; } if (goods != null && goods.getGoodsId() != null) { - resultListener.onResult(new GoodsDocParseResultVO(text, goods)); + if (tokenList.size() == 1) {// 鍗曚釜鍙d护 + resultListener.onResult(goods); + } else + resultListener.onResult(new GoodsDocParseResultVO(text, goods)); } else { resultListener.onResult(new GoodsDocParseResultVO(text)); } - } } else if (typeSet.size() == 3) {// 鍙d护+閾炬帴+鏂囨湰 - List<String> tokenList = TaoBaoUtil.getTokenListFromText(text); + // 娣樺彛浠� + List<String> tokenList = null; + if (VersionUtil.greaterThan_2_0_7(platform, version)) + tokenList = TaoBaoUtil.getTokenListFromTextWithKuoHao(text); + else + tokenList = TaoBaoUtil.getTokenListFromText(text); + List<String> urlList = HttpUtil.getUrlListFromText(text); if (text.contains("銆�") && tokenList != null && tokenList.size() == 1 && urlList != null && urlList.size() == 1) {// Android娣樺疂閾炬帴澶嶅埗 @@ -246,32 +287,31 @@ } else {// 鏂囨 - String link = null; String token = null; + token = tokenList.get(0); - if (text.indexOf(urlList.get(0)) < text.indexOf(tokenList.get(0)))// 绗竴涓摼鎺ュ湪绗竴涓彛浠ゅ墠闈� - link = urlList.get(0); - else// 绗竴涓彛浠ゅ湪绗竴涓摼鎺ュ墠闈� - token = tokenList.get(0); - - if (!StringUtil.isNullOrEmpty(link)) { - CommonGoods goods = parseLink(urlList.get(0)); - if (goods == null || goods.getGoodsId() == null) { - resultListener.onResult(new GoodsDocParseResultVO(text, urlList.get(0))); - } else { - resultListener.onResult(new GoodsDocParseResultVO(text, goods)); - } - } else { + if (!StringUtil.isNullOrEmpty(token)) { CommonGoods goods = null; try { goods = parseTaoBaoToken(token); if (goods != null && goods.getGoodsId() != null) { - resultListener.onResult(new GoodsDocParseResultVO(text, goods)); + // 濡�:http://rd.wechat.com/qrcode/confirm?block_type=101&content=%E3%80%90%E5%8E%9F%E4%BB%B7%E3%80%9120%E5%85%83%0A%E3%80%90%E5%88%B8%E5%90%8E%E4%BB%B7%E3%80%9120%E5%85%83%0A-----------------%0A%E5%BE%A9%E8%A3%BD%E8%BF%99%E6%9D%A1%EF%BC%8C(psNX1UPRJNe)%EF%BC%8C%E8%BF%9B%E5%85%A5%E3%80%90Tao%E5%AE%9D%E3%80%91%E5%8D%B3%E5%8F%AF%E6%8A%A2%E8%B4%AD&lang=zh_CN&scene=37 + if (text.contains("//rd.wechat.com/qrcode/")) {// 寰俊澶嶅埗杩囨潵鐨� + resultListener.onResult(goods); + } else + resultListener.onResult(new GoodsDocParseResultVO(text, goods)); } else { resultListener.onResult(new GoodsDocParseResultVO(text)); } } catch (TaoBaoTokenParseException e) { resultListener.onResult(new GoodsDocParseResultVO(text)); + } + } else { + CommonGoods goods = parseLink(urlList.get(0)); + if (goods == null || goods.getGoodsId() == null) { + resultListener.onResult(new GoodsDocParseResultVO(text, urlList.get(0))); + } else { + resultListener.onResult(new GoodsDocParseResultVO(text, goods)); } } } @@ -286,12 +326,131 @@ */ public CommonGoods parseLink(String link) { + SimpleCommonGoods simpleGoods = parseGoodsIdFromLink(link); + if (simpleGoods == null) { + return null; + } + + CommonGoods commonGoods = null; + if (simpleGoods.getGoodsType() == Constant.SOURCE_TYPE_TAOBAO) { + TaoBaoGoodsBrief goods = null; + try { + goods = redisManager.getTaoBaoGoodsBrief(Long.parseLong(simpleGoods.getGoodsId())); + } catch (NumberFormatException e) { + e.printStackTrace(); + } catch (TaobaoGoodsDownException e) { + e.printStackTrace(); + } + + if (goods != null) { + commonGoods = CommonGoodsFactory.create(goods); + } else { + goods = TaoBaoUtil.getTmallGoodsInfo(simpleGoods.getGoodsId()); + if (goods != null) { + commonGoods = new CommonGoods(); + commonGoods.setTitle(goods.getTitle()); + commonGoods.setPicture(goods.getPictUrl()); + } else { + // TODO 鏍规嵁娣樺疂鍟嗗搧ID瑙f瀽鏍囬涓庡浘鐗� + } + } + + } else if (simpleGoods.getGoodsType() == Constant.SOURCE_TYPE_JD) { + // 浼樺厛閲囩敤楂樼骇鎺ュ彛璇锋眰鏁版嵁 + JDGoods jdGoods = null; + try { + // 闃叉楂樼骇鎺ュ彛琚敹鍥� + jdGoods = JDApiUtil.queryGoodsDetail(Long.parseLong(simpleGoods.getGoodsId())); + } catch (Exception e) { + } + if (jdGoods == null) { + jdGoods = JDApiUtil.getGoodsDetail(Long.parseLong(simpleGoods.getGoodsId())); + } + if (jdGoods != null) { + commonGoods = CommonGoodsFactory.create(jdGoods); + } else {// 鍟嗗搧骞舵湭鍙備笌鎺ㄥ箍 + jdGoods = JDUtil.getSimpleGoodsInfo(simpleGoods.getGoodsId()); + if (jdGoods != null) { + commonGoods = new CommonGoods(); + commonGoods.setTitle(jdGoods.getSkuName()); + commonGoods.setPicture(jdGoods.getPicUrl()); + } + } + } else if (simpleGoods.getGoodsType() == Constant.SOURCE_TYPE_PDD) { + PDDGoodsDetail goods = PinDuoDuoApiUtil.getGoodsDetail(Long.parseLong(simpleGoods.getGoodsId())); + if (goods != null) { + commonGoods = CommonGoodsFactory.create(goods); + } else { + goods = PinDuoDuoUtil.getPDDGoodsInfo(simpleGoods.getGoodsId()); + if (goods != null) { + commonGoods = new CommonGoods(); + commonGoods.setTitle(goods.getGoodsName()); + commonGoods.setPicture(goods.getGoodsThumbnailUrl()); + } + } + } + + return commonGoods; + } + + /** + * 浠庨摼鎺ヤ腑瑙f瀽鍟嗗搧ID + * + * @return + */ + public SimpleCommonGoods parseGoodsIdFromLink(String link) { + + String jdId = parseJDSkuIdFromLink(link); + + if (!StringUtil.isNullOrEmpty(jdId)) { + return new SimpleCommonGoods(jdId, Constant.SOURCE_TYPE_JD); + } + + // 瑙f瀽鎷煎澶� + String pddId = PinDuoDuoUtil.getPDDGoodsId(link); + if (!StringUtil.isNullOrEmpty(pddId)) { + return new SimpleCommonGoods(pddId, Constant.SOURCE_TYPE_PDD); + } + // 瑙f瀽娣樺疂 + String auctionId = parseTBAuctionIdFromLink(link); + if (!StringUtil.isNullOrEmpty(auctionId)) { + return new SimpleCommonGoods(auctionId, Constant.SOURCE_TYPE_TAOBAO); + } + + return null; + } + + /** + * 浠庨摼鎺ヤ腑瑙f瀽浜笢鍟嗗搧鐨凷KUID + * + * @param link + * @return + */ + public String parseJDSkuIdFromLink(String link) { + // 瑙f瀽鍏朵粬鍟嗗搧 + String jdId = JDUtil.getJDGoodsId(link); + + // 寰俊閾炬帴 + if (StringUtil.isNullOrEmpty(jdId)) { + jdId = JDUtil.getJDGoodsIdByWeiXin(link); + } + + // 棰嗗埜鐭繛鎺� + if (StringUtil.isNullOrEmpty(jdId) && link.contains("u.jd.com")) { + jdId = jdGoodsLinkParseManager.parseGoodsIdByJDShortUrl(link); + } + + return jdId; + } + + public String parseTBAuctionIdFromLink(String link) { TaoBaoGoodsBrief tb = null; + String auctionId = null; if (link.startsWith("https://a.m.taobao.com/i"))// 娣樺疂璐﹀彿鏈櫥褰曠姸鎬� { link = link.substring("https://a.m.taobao.com/i".length(), link.indexOf(".htm")); if (NumberUtil.isNumeric(link)) { - tb = TaoBaoUtil.isAlimama(link); + auctionId = link + ""; } } else if (link.contains("ju.taobao.com") || link.contains(".juhuasuan.com")) {// 鑱氬垝绠� int index = link.indexOf("item_id"); @@ -304,108 +463,36 @@ else { id = link.substring(link.indexOf("=" + 1)); } - tb = TaoBaoUtil.isAlimama(id); - if (tb == null) { - tb = new TaoBaoGoodsBrief(Long.parseLong(id)); - } + auctionId = id; } } else if (link.contains("http://zmnxbc.com")) { // 鎵嬫満绔ぉ鐚獳PP鍒嗕韩 tb = TaoBaoUtil.parsePhoneShareUrlByTM(link); - } else if (link.contains("h5.m.taobao") || link.contains("detail.m.tmall") || link.contains("item.taobao") + if (tb != null) + auctionId = tb.getAuctionId() + ""; + } else if (link.contains("h5.m.taobao") || link.contains("detail.m.tmall")|| link.contains("item.taobao") || link.contains("detail.tmall")) { // 鎵嬫満椤甸潰鍜岀數鑴戦〉闈� Map<String, String> map = Utils.parseURL(link); String id = ""; id = map.get("id").replace("}", ""); - tb = TaoBaoUtil.isAlimama(id); - if (tb == null) { - tb = new TaoBaoGoodsBrief(Long.parseLong(id)); - } + auctionId = id; } else if (link.contains("v.douyin.com")) { // 鎶栭煶 tb = analysisDouYin(link); if (tb != null) { if (!StringUtil.isNullOrEmpty(tb.getAuctionUrl())) {// 鎶栭煶瑙f瀽鍒版窐瀹濆晢鍝侀摼鎺� - return parseLink(tb.getAuctionUrl()); + CommonGoods goods = parseLink(tb.getAuctionUrl()); + if (goods != null) { + auctionId = goods.getGoodsId() + ""; + } } } } else { tb = TaoBaoUtil.parsePhoneShareUrlByTB(link); + if (tb != null) + auctionId = tb.getAuctionId() + ""; } - // 娌¤В鏋愬埌娣樺疂鐩稿叧鍟嗗搧 - if (tb == null) { - String goodsId = TaoBaoUtil.getGoodsIdByPhoneShareUrl(link); - if (!StringUtil.isNullOrEmpty(goodsId)) { - tb = TaoBaoUtil.isAlimama(goodsId); - if (tb == null) { - tb = new TaoBaoGoodsBrief(Long.parseLong(goodsId)); - } - } - } + return auctionId; - CommonGoods commonGoods = null; - - // 娣樺疂鍟嗗搧瑙f瀽缁撴潫 - if (tb != null) { - if (StringUtil.isNullOrEmpty(tb.getTitle())) { - tb = TaoBaoUtil.getTaoBaoGoodsBriefNotInPub(tb.getId()); - if (tb != null) { - commonGoods = new CommonGoods(); - commonGoods.setPicture(tb.getPictUrl()); - commonGoods.setTitle(tb.getTitle()); - } - } else { - commonGoods = CommonGoodsFactory.create(tb); - } - } else { - // 瑙f瀽鍏朵粬鍟嗗搧 - String jdId = JDUtil.getJDGoodsId(link); - - // 寰俊閾炬帴 - if (StringUtil.isNullOrEmpty(jdId)) { - jdId = JDUtil.getJDGoodsIdByWeiXin(link); - } - - // 棰嗗埜鐭繛鎺� - if (StringUtil.isNullOrEmpty(jdId) && link.contains("u.jd.com")) { - jdId = jdGoodsLinkParseManager.parseGoodsIdByJDShortUrl(link); - } - - if (!StringUtil.isNullOrEmpty(jdId)) { - JDGoods goods = JDApiUtil.getGoodsDetail(Long.parseLong(jdId)); - if (goods != null) { - // 楂樼骇鎺ュ彛 -- 淇℃伅鏇村畬鏁� - JDGoods jdGoods = JDApiUtil.queryGoodsDetail(Long.parseLong(jdId)); - if (jdGoods != null) { - commonGoods = CommonGoodsFactory.create(jdGoods); - } else { - commonGoods = CommonGoodsFactory.create(goods); - } - } else { - goods = JDUtil.getSimpleGoodsInfo(jdId); - if (goods != null) { - commonGoods = new CommonGoods(); - commonGoods.setTitle(goods.getSkuName()); - commonGoods.setPicture(goods.getPicUrl()); - } - } - } else { - String pddId = PinDuoDuoUtil.getPDDGoodsId(link); - if (!StringUtil.isNullOrEmpty(pddId)) { - PDDGoodsDetail goods = PinDuoDuoApiUtil.getGoodsDetail(Long.parseLong(pddId)); - if (goods != null) { - commonGoods = CommonGoodsFactory.create(goods); - } else { - goods = PinDuoDuoUtil.getPDDGoodsInfo(pddId); - if (goods != null) { - commonGoods = new CommonGoods(); - commonGoods.setTitle(goods.getGoodsName()); - commonGoods.setPicture(goods.getGoodsThumbnailUrl()); - } - } - } - } - } - return commonGoods; } private CommonGoods parseTaoBaoToken(String token) throws TaoBaoTokenParseException { @@ -454,6 +541,42 @@ } return null; } + + private boolean isContainsLinkConvert(String link) { + if (link.contains(".jd.com")) + return true; + else if (link.contains(".taobao.com") || link.contains(".tmall")) + return true; + else if (link.contains(".pinduoduo.com") || link.contains(".yangkeduo.com")) + return true; + return false; + } + + class SimpleCommonGoods { + private String goodsId; + private int goodsType; + + public SimpleCommonGoods(String goodsId, int goodsType) { + this.goodsId = goodsId; + this.goodsType = goodsType; + } + + public String getGoodsId() { + return goodsId; + } + + public void setGoodsId(String goodsId) { + this.goodsId = goodsId; + } + + public int getGoodsType() { + return goodsType; + } + + public void setGoodsType(int goodsType) { + this.goodsType = goodsType; + } + } } /** -- Gitblit v1.8.0