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/goods/ConvertLinkManager.java |  153 +++++++++++++++++++++++++++++++++++++++++---------
 1 files changed, 125 insertions(+), 28 deletions(-)

diff --git a/fanli/src/main/java/com/yeshi/fanli/service/manger/goods/ConvertLinkManager.java b/fanli/src/main/java/com/yeshi/fanli/service/manger/goods/ConvertLinkManager.java
index ad07eea..8e0274c 100644
--- a/fanli/src/main/java/com/yeshi/fanli/service/manger/goods/ConvertLinkManager.java
+++ b/fanli/src/main/java/com/yeshi/fanli/service/manger/goods/ConvertLinkManager.java
@@ -1,23 +1,34 @@
 package com.yeshi.fanli.service.manger.goods;
 
+import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.HashSet;
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
 
 import javax.annotation.Resource;
 
 import org.springframework.stereotype.Component;
 import org.yeshi.utils.StringUtil;
 
+import com.yeshi.fanli.dto.pdd.PDDPromotionUrl;
+import com.yeshi.fanli.dto.taobao.api.TaoKeOfficialActivityConvertResultDTO;
 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;
 import com.yeshi.fanli.util.jd.JDApiUtil;
 import com.yeshi.fanli.util.jd.JDUtil;
+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;
 
@@ -36,17 +47,16 @@
 	@Resource
 	private TaoBaoBuyRelationMapService taoBaoBuyRelationMapService;
 
+	@Resource
+	private RedisManager redisManager;
+
+	@Resource
+	private TaoBaoTokenAuctionIdMapManager taoBaoTokenAuctionIdMapManager;
+
 	/**
 	 * 
-	 * @Title: convertJDLinkFromText
-	 * @Description:杞摼鏂囨湰涓殑浜笢鐭摼 
-	 * @param text
-	 * @param uid
-	 * @param share
-	 * @return
-	 * @throws Exception 
-	 * String 杩斿洖绫诲瀷
-	 * @throws
+	 * @Title: convertJDLinkFromText @Description:杞摼鏂囨湰涓殑浜笢鐭摼 @param text @param
+	 *         uid @param share @return @throws Exception String 杩斿洖绫诲瀷 @throws
 	 */
 
 	public String convertJDLinkFromText(String text, Long uid, boolean share) throws Exception {
@@ -83,23 +93,67 @@
 		return newText;
 	}
 
+	public String convertPDDLinkFromText(String text, Long uid, boolean share) throws Exception {
+
+		StringBuilder builder = new StringBuilder(text);
+		String newText = builder.toString();
+		// 浜笢杞摼
+		// 鎻愬彇浜笢鎵�鏈夌殑閾炬帴
+		List<String> pddShortLink = PinDuoDuoUtil.getPDDShortLinksFromText(text);
+		Set<String> linkSet = new HashSet<>();
+		Map<String, String> linkMap = new HashMap<>();
+		if (pddShortLink != null && pddShortLink.size() > 0) {
+			linkSet.addAll(pddShortLink);
+			for (String shortLink : linkSet) {
+				String goodsId = PinDuoDuoUtil.getPDDGoodsId(shortLink);
+				if (!StringUtil.isNullOrEmpty(goodsId)) {
+					PDDPromotionUrl pddUrl = PinDuoDuoApiUtil.convert(Long.parseLong(goodsId),
+							share ? PinDuoDuoApiUtil.PID_SHARE : PinDuoDuoApiUtil.PID_FANLI, uid + "");
+					if (pddUrl != null) {
+						linkMap.put(shortLink, pddUrl.getShortUrl());
+					}
+				}
+
+			}
+		}
+
+		for (String link : linkSet) {
+			if (linkMap.get(link) == null)
+				throw new Exception("鎷煎澶氳浆閾惧け璐�");
+			newText = newText.replace(link, linkMap.get(link));
+		}
+
+		return newText;
+	}
+
+	// 鑾峰彇娣樺疂瀹樻柟娲诲姩ID鍐呭
+	public List<String> getTaoBaoOfficialActivityId(String text) {
+
+		// {娣樺疂娲诲姩:13123123}
+		String regex = "(\\{\u6dd8\u5b9d\u6d3b\u52a8\\:){1}+[0-9]{5,20}\\}{1}";
+		Pattern pattern = Pattern.compile(regex);
+		Matcher m = pattern.matcher(text);
+		List<String> urlList = new ArrayList<>();
+		while (m.find()) {
+			urlList.add(m.group());
+		}
+
+		return urlList;
+
+	}
+
 	/**
 	 * 
-	 * @Title: convertTBLinkFromText
-	 * @Description: 杞摼鏂囨湰涓殑娣樺彛浠�
-	 * @param text
-	 * @param uid
-	 * @param share
-	 * @return
-	 * @throws Exception 
-	 * String 杩斿洖绫诲瀷
-	 * @throws
+	 * @Title: convertTBLinkFromText @Description: 杞摼鏂囨湰涓殑娣樺彛浠� @param text @param
+	 *         uid @param share @return @throws Exception String 杩斿洖绫诲瀷 @throws
 	 */
 	private String convertTBLinkFromText(String text, Long uid, boolean share) throws Exception {
 
 		StringBuilder builder = new StringBuilder(text);
 		String newText = builder.toString();
-		List<String> tokenList = TaoBaoUtil.getTokenListFromText(newText);
+
+		// 瑙f瀽娣樺彛浠�
+		List<String> tokenList = TaoBaoUtil.getTokenListFromTextWithKuoHao(newText);
 		if (tokenList != null && tokenList.size() > 0) {
 
 			String relationId = null;
@@ -112,7 +166,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("浠庢窐鍙d护鑾峰彇鍟嗗搧澶辫触");
 				TaoBaoGoodsBrief simpleGoods = TaoKeApiUtil.getSimpleGoodsInfo(auctionId);
@@ -174,7 +228,7 @@
 				if (StringUtil.isNullOrEmpty(newToken)) {
 					throw new Exception("鍙d护杞摼澶辫触");
 				}
-				tokenMap.put(token, newToken);
+				tokenMap.put(token, TaoBaoUtil.filterTaoToken(newToken));
 			}
 
 			for (String token : tokenSet) {
@@ -183,22 +237,65 @@
 				newText = newText.replace(token, tokenMap.get(token));
 			}
 		}
+
+		// 瑙f瀽娣樺疂瀹樻柟娲诲姩ID
+		List<String> list = getTaoBaoOfficialActivityId(newText);
+		if (list.size() > 0) {
+			String relationId = null;
+			if (share) {
+				relationId = userExtraTaoBaoInfoService.getRelationIdByUid(uid);
+				if (StringUtil.isNullOrEmpty(relationId))
+					throw new Exception("娣樺疂鏈巿鏉�");
+			}
+			for (String st : list) {
+				String activityid = st.replace("{娣樺疂娲诲姩:", "").replace("}", "");
+				if (!StringUtil.isNullOrEmpty(activityid)) {
+					String adzoneId = TaoBaoConstant.TAOBAO_RELATION_PID_DEFAULT.split("_")[3];
+					TaoKeOfficialActivityConvertResultDTO dto = TaoKeApiUtil.officialActivityConvert(adzoneId,
+							activityid, relationId);
+					String link = dto.getShort_click_url();
+					if (StringUtil.isNullOrEmpty(link)) {
+						link = dto.getClick_url();
+					}
+
+					String token = TaoKeApiUtil.getTKToken("http://", "娣樺疂瀹樻柟娲诲姩", link);
+					newText = newText.replace(st, TaoBaoUtil.filterTaoToken(token));
+				}
+			}
+		}
+
 		return newText;
 	}
 
 	/**
 	 * 
-	 * @Title: convertLinkFromText
-	 * @Description: 浠庢枃鏈浆閾�
-	 * @param text
-	 * @return 
-	 * String 杩斿洖绫诲瀷
-	 * @throws
+	 * @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 = convertPDDLinkFromText(newText, uid, share);
 		newText = convertTBLinkFromText(newText, uid, share);
+		if (text.equalsIgnoreCase(newText))
+			throw new ConvertLinkExceptionException(ConvertLinkExceptionException.CODE_NONE, "涓嶅寘鍚彲杞摼鐨勫彛浠や笌閾炬帴");
 		return newText;
 	}
 
+	/**
+	 * 鍒涘缓鍙d护 @Title: createTaoBaoToken @Description: @param uid 鐢ㄦ埛ID @param
+	 * picturl @param title @param link @return String 杩斿洖绫诲瀷 @throws
+	 */
+	public String createTaoBaoToken(Long uid, String picturl, String title, String link) {
+
+		String token = TaoKeApiUtil.getTKToken(picturl, title, link);
+		if (!StringUtil.isNullOrEmpty(token)) {
+			// 缂撳瓨30鍒嗛挓
+			redisManager.cacheCommonString(
+					RedisKeyEnum.getRedisKey(RedisKeyEnum.taobaoUserTKToken, uid + "-" + StringUtil.Md5(token)), "1",
+					60 * 30);
+		}
+		return token;
+	}
+
 }

--
Gitblit v1.8.0