fanli/src/main/java/com/yeshi/fanli/controller/admin/goods/ConvertLinkController.java
fanli/src/main/java/com/yeshi/fanli/controller/client/v1/DynamicRecommendController.java
@@ -28,6 +28,7 @@ import com.yeshi.fanli.service.inter.taobao.TaoBaoUnionConfigService; import com.yeshi.fanli.service.inter.taobao.dataoke.DaTaoKeGoodsDetailV2Service; import com.yeshi.fanli.service.inter.user.UserInfoService; import com.yeshi.fanli.service.manger.goods.tb.TaoBaoTokenAuctionIdMapManager; import com.yeshi.fanli.util.StringUtil; import com.yeshi.fanli.util.Utils; import com.yeshi.fanli.util.taobao.TaoBaoUtil; @@ -53,6 +54,9 @@ @Resource private DaTaoKeGoodsDetailV2Service daTaoKeGoodsDetailV2Service; @Resource private TaoBaoTokenAuctionIdMapManager taoBaoTokenAuctionIdMapManager; /** * 获取商品信息 @@ -274,12 +278,7 @@ List<String> tokenList = TaoBaoUtil.getTokenListFromText(text); if (tokenList != null && tokenList.size() > 0) { String token = tokenList.get(0); Long auctionId = null; try { auctionId = TaoKeApiUtil.tokenConvertAuctionId(token); } catch (TaoBaoTokenParseException e1) { e1.printStackTrace(); } Long auctionId = taoBaoTokenAuctionIdMapManager.getAuctionIdByToken(token); if (auctionId != null) { TaoBaoGoodsBrief tb = null; try { fanli/src/main/java/com/yeshi/fanli/exception/goods/ConvertLinkExceptionException.java
@@ -6,6 +6,9 @@ private static final long serialVersionUID = 1L; //不包含需要转链的文本与链接 public final static int CODE_NONE=1; public ConvertLinkExceptionException(int code, String msg) { super(code, msg); } 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; @@ -23,6 +24,7 @@ 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.DouYinUtil; import com.yeshi.fanli.util.StringUtil; import com.yeshi.fanli.util.TokenUtil; @@ -34,7 +36,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; @@ -54,6 +55,9 @@ @Resource private TokenRecordService tokenRecordService; @Resource private TaoBaoTokenAuctionIdMapManager taoBaoTokenAuctionIdMapManager; /** * @Title: parseContentType @Description: 解析文本的类型 @param text @return Set @@ -135,6 +139,25 @@ // 解析商品 CommonGoods goods = parseLink(text); if (goods == null) { // 判断链接之中是否包含口令 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); @@ -207,15 +230,23 @@ return; } if (goods != null && goods.getGoodsId() != null) { if (tokenList.size() == 1) {// 单个口令 resultListener.onResult(goods); } else resultListener.onResult(new GoodsDocParseResultVO(text, goods)); } else { resultListener.onResult(new GoodsDocParseResultVO(text)); } } } else if (typeSet.size() == 3) {// 口令+链接+文本 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淘宝链接复制 @@ -242,32 +273,31 @@ } else {// 文案 String link = null; String token = null; 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) { // 如: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)); } } } @@ -405,8 +435,7 @@ } private CommonGoods parseTaoBaoToken(String token) throws TaoBaoTokenParseException { Long auctionId = TaoKeApiUtil.tokenConvertAuctionId(token); Long auctionId = taoBaoTokenAuctionIdMapManager.getAuctionIdByToken(token); if (auctionId != null) {// TaoBaoGoodsBrief goods = TaoBaoUtil.isAlimama(auctionId + ""); if (goods == null) { fanli/src/main/java/com/yeshi/fanli/service/manger/goods/ConvertLinkManager.java
@@ -13,8 +13,10 @@ import com.yeshi.fanli.entity.taobao.TaoBaoGoodsBrief; import com.yeshi.fanli.entity.taobao.TaoKeAppInfo; import com.yeshi.fanli.exception.goods.ConvertLinkExceptionException; import com.yeshi.fanli.service.inter.taobao.TaoBaoBuyRelationMapService; import com.yeshi.fanli.service.inter.user.tb.UserExtraTaoBaoInfoService; import com.yeshi.fanli.service.manger.goods.tb.TaoBaoTokenAuctionIdMapManager; import com.yeshi.fanli.util.RedisKeyEnum; import com.yeshi.fanli.util.RedisManager; import com.yeshi.fanli.util.TaoBaoConstant; @@ -40,6 +42,9 @@ @Resource private RedisManager redisManager; @Resource private TaoBaoTokenAuctionIdMapManager taoBaoTokenAuctionIdMapManager; /** * @@ -103,7 +108,7 @@ tokenSet.addAll(tokenList); Map<String, String> tokenMap = new HashMap<>(); for (String token : tokenSet) { Long auctionId = TaoKeApiUtil.tokenConvertAuctionId(token); Long auctionId = taoBaoTokenAuctionIdMapManager.getAuctionIdByToken(token); if (auctionId == null) throw new Exception("从淘口令获取商品失败"); TaoBaoGoodsBrief simpleGoods = TaoKeApiUtil.getSimpleGoodsInfo(auctionId); @@ -182,9 +187,12 @@ * @Title: convertLinkFromText @Description: 从文本转链 @param text @return * String 返回类型 @throws */ public String convertLinkFromText(String text, Long uid, boolean share) throws Exception { public String convertLinkFromText(String text, Long uid, boolean share) throws ConvertLinkExceptionException, Exception { String newText = convertJDLinkFromText(text, uid, share); newText = convertTBLinkFromText(newText, uid, share); if (text.equalsIgnoreCase(newText)) throw new ConvertLinkExceptionException(ConvertLinkExceptionException.CODE_NONE, "不包含可转链的口令与链接"); return newText; } fanli/src/main/java/com/yeshi/fanli/service/manger/goods/tb/TaoBaoTokenAuctionIdMapManager.java
New file @@ -0,0 +1,35 @@ package com.yeshi.fanli.service.manger.goods.tb; import javax.annotation.Resource; import org.springframework.stereotype.Component; import com.yeshi.fanli.exception.taobao.TaoBaoTokenParseException; import com.yeshi.fanli.util.StringUtil; import com.yeshi.fanli.util.cache.TaoBaoGoodsCacheUtil; import com.yeshi.fanli.util.taobao.TaoKeApiUtil; @Component public class TaoBaoTokenAuctionIdMapManager { @Resource private TaoBaoGoodsCacheUtil taoBaoGoodsCacheUtil; public Long getAuctionIdByToken(String token) { if (StringUtil.isNullOrEmpty(token)) return null; Long auctionId = taoBaoGoodsCacheUtil.getGoodsIdByToken(token); if (auctionId != null) return auctionId; try { auctionId = TaoKeApiUtil.tokenConvertAuctionId(token); } catch (TaoBaoTokenParseException e) { e.printStackTrace(); } if (auctionId != null) { taoBaoGoodsCacheUtil.saveTokenGoodsIdMap(token, auctionId); } return auctionId; } } fanli/src/main/java/com/yeshi/fanli/util/RedisKeyEnum.java
@@ -26,6 +26,7 @@ taobaoUpdate("tb-u-", "淘宝商品更新"), taobaoQueue("tb-u-q-", "淘宝商品队列"), taobaoCode("taobao-code-", "淘宝code"), taobaoTokenGoodsMap("tb-t-g_m-","淘宝口令对应商品的映射关系保存"), JDGoods("JD-goods-", "京东商品"), JDShortUrl("jd-link-to-goods-", "京东短链"), jingDongGoods("jingdong-goods-", "京东商品"), fanli/src/main/java/com/yeshi/fanli/util/cache/TaoBaoGoodsCacheUtil.java
@@ -101,4 +101,29 @@ // TODO 凌晨删除缓存记录 } /** * 保存口令对应的商品ID * * @param token * @param auctionId */ public void saveTokenGoodsIdMap(String token, Long auctionId) { String key = RedisKeyEnum.getRedisKey(RedisKeyEnum.taobaoTokenGoodsMap, StringUtil.Md5(token)); redisManager.cacheCommonString(key, auctionId+"", 60 * 30);// 有效期30分钟 } /** * 通过口令获取商品ID * * @param token * @return */ public Long getGoodsIdByToken(String token) { String key = RedisKeyEnum.getRedisKey(RedisKeyEnum.taobaoTokenGoodsMap, StringUtil.Md5(token)); String goodsId = redisManager.getCommonString(key); if (StringUtil.isNullOrEmpty(goodsId)) return null; return Long.parseLong(goodsId); } }