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