From 30d8e227e8d823b6c38c3b9c90ac2df03b63befe Mon Sep 17 00:00:00 2001
From: admin <weikou2014>
Date: 星期二, 25 二月 2025 16:41:22 +0800
Subject: [PATCH] 淘宝转链接口更新

---
 fanli/src/main/java/com/yeshi/fanli/service/manger/goods/ConvertLinkManager.java |  724 ++++++++++++++++++++++++++++++-------------------------
 1 files changed, 399 insertions(+), 325 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 eb3e741..effefd9 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,325 +1,399 @@
-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.goods.facade.entity.taobao.TaoBaoGoodsBrief;
-import com.yeshi.common.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.goods.facade.utils.taobao.HaoDanKuApiUtil;
-import com.yeshi.fanli.util.taobao.TaoBaoUtil;
-import com.yeshi.fanli.util.taobao.TaoKeApiUtil;
-import org.yeshi.utils.UrlUtils;
-
-/**
- * 杞摼缁勪欢
- *
- * @author Administrator
- */
-@Component
-public class ConvertLinkManager {
-
-    @Resource
-    private UserExtraTaoBaoInfoService userExtraTaoBaoInfoService;
-
-    @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
-     */
-
-    public String convertJDLinkFromText(String text, Long uid, boolean share, boolean simpleTKToken) throws Exception {
-
-        StringBuilder builder = new StringBuilder(text);
-        String newText = builder.toString();
-        // 浜笢杞摼
-        // 鎻愬彇浜笢鎵�鏈夌殑閾炬帴
-        List<String> jdShortLink = JDUtil.getJDShortLinksFromText(text);
-        Set<String> linkSet = new HashSet<>();
-        Map<String, String> linkMap = new HashMap<>();
-        if (jdShortLink != null && jdShortLink.size() > 0) {
-            linkSet.addAll(jdShortLink);
-            for (String shortLink : linkSet) {
-                String link = null;
-                if (share)
-                    link = JDApiUtil.convertLinkWithSubUnionId(shortLink, null, null,JDApiUtil.POSITION_SHARE + "",
-                            uid + "");
-                else
-                    link = JDApiUtil.convertLinkWithSubUnionId(shortLink, null, null,JDApiUtil.POSITION_FANLI + "",
-                            uid + "");
-                if (!StringUtil.isNullOrEmpty(link)) {
-                    linkMap.put(shortLink, link);
-                }
-            }
-        }
-
-        for (String link : linkSet) {
-            if (linkMap.get(link) == null)
-                throw new Exception("浜笢杞摼澶辫触");
-            newText = newText.replace(link, linkMap.get(link));
-        }
-
-        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 + "", false);
-                    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
-     */
-    /**
-     * @param text
-     * @param uid
-     * @param share
-     * @param simpleToken -鏄惁閲囩敤绠�鐗堟窐鍙d护
-     * @return
-     * @throws Exception
-     */
-    private String convertTBLinkFromText(String text, Long uid, boolean share, boolean simpleToken) throws Exception {
-
-        StringBuilder builder = new StringBuilder(text);
-        String newText = builder.toString();
-
-        // 瑙f瀽娣樺彛浠�
-        List<String> tokenList = TaoBaoUtil.getTokenListFromTextWithKuoHao(newText);
-        if (tokenList != null && tokenList.size() > 0) {
-
-            String relationId = null;
-            if (share) {
-                relationId = userExtraTaoBaoInfoService.getRelationIdByUid(uid);
-                if (StringUtil.isNullOrEmpty(relationId))
-                    throw new Exception("娣樺疂鏈巿鏉�");
-            }
-
-            Set<String> tokenSet = new HashSet<>();
-            tokenSet.addAll(tokenList);
-            Map<String, String> tokenMap = new HashMap<>();
-            for (String token : tokenSet) {
-                Long auctionId = taoBaoTokenAuctionIdMapManager.getAuctionIdByToken(token);
-                if (auctionId == null)
-                    throw new Exception("浠庢窐鍙d护鑾峰彇鍟嗗搧澶辫触");
-                TaoBaoGoodsBrief simpleGoods = TaoKeApiUtil.getSimpleGoodsInfo(auctionId);
-                if (simpleGoods == null)
-                    throw new Exception("鍟嗗搧淇℃伅鑾峰彇澶辫触");
-                String link = null;
-                if (share) {
-                    //鏆傛椂璋冪敤濂藉崟搴揂PI
-                    link = HaoDanKuApiUtil.getInstance().convertLink(auctionId, TaoBaoConstant.TAOBAO_RELATION_PID_DEFAULT, null, null, relationId);
-//					TaoBaoGoodsBrief goods =  TaoKeApiUtil.specialConvertCoupon(auctionId,
-//							new TaoKeAppInfo(TaoBaoConstant.TAOBAO_AUTH_APPKEY, TaoBaoConstant.TAOBAO_AUTH_APPSECRET,
-//									TaoBaoConstant.TAOBAO_RELATION_PID_DEFAULT));
-//					if (goods == null)
-//						throw new Exception("鍟嗗搧杞摼澶辫触");
-//
-//					link = goods.getCouponLink();
-//					if (StringUtil.isNullOrEmpty(link)) {
-//						link = goods.getAuctionUrl();
-//					}
-                    if (StringUtil.isNullOrEmpty(link))
-                        throw new Exception("鍟嗗搧杞摼澶辫触");
-                    link += "&relationId=" + relationId;
-                } else {
-                    String specialId = userExtraTaoBaoInfoService.getSpecialIdByUid(uid);
-
-
-                    if (simpleGoods.getMaterialLibType() != null && simpleGoods.getMaterialLibType() == 1) {
-                        TaoBaoGoodsBrief goods = TaoKeApiUtil.specialConvertCoupon(auctionId,
-                                new TaoKeAppInfo(TaoBaoConstant.TAOBAO_AUTH_APPKEY,
-                                        TaoBaoConstant.TAOBAO_AUTH_APPSECRET,
-                                        TaoBaoConstant.TAOBAO_SPECIAL_PID_DEFAULT), specialId, null);
-                        if (goods == null)
-                            throw new Exception("鍟嗗搧杞摼澶辫触");
-
-                        link = goods.getCouponLink();
-                        if (StringUtil.isNullOrEmpty(link)) {
-                            link = goods.getAuctionUrl();
-                        }
-                    } else {
-                        String sRelationId = taoBaoBuyRelationMapService.getRelationId(uid);
-
-                        TaoBaoGoodsBrief goods = TaoKeApiUtil.specialConvertCoupon(auctionId,
-                                new TaoKeAppInfo(TaoBaoConstant.TAOBAO_AUTH_APPKEY,
-                                        TaoBaoConstant.TAOBAO_AUTH_APPSECRET,
-                                        TaoBaoConstant.TAOBAO_RELATION_AS_SPECIAL_PID), specialId, null);
-                        if (goods == null)
-                            throw new Exception("鍟嗗搧杞摼澶辫触");
-
-                        link = goods.getCouponLink();
-                        if (StringUtil.isNullOrEmpty(link)) {
-                            link = goods.getAuctionUrl();
-                        }
-                        if (StringUtil.isNullOrEmpty(link))
-                            throw new Exception("鍟嗗搧杞摼澶辫触");
-                        link += "&relationId=" + sRelationId;
-                    }
-                }
-
-                if (StringUtil.isNullOrEmpty(link)) {
-                    throw new Exception("鍟嗗搧杞摼澶辫触");
-                }
-
-                String newToken = TaoKeApiUtil.getTKToken(simpleGoods.getPictUrl(), simpleGoods.getTitle(), link, simpleToken);
-                if (StringUtil.isNullOrEmpty(newToken)) {
-                    throw new Exception("鍙d护杞摼澶辫触");
-                }
-                tokenMap.put(token, TaoBaoUtil.filterTaoToken(newToken));
-            }
-
-            for (String token : tokenSet) {
-                if (tokenMap.get(token) == null)
-                    throw new Exception("娣樺疂閮ㄥ垎杞摼澶辫触");
-                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, simpleToken);
-                    newText = newText.replace(st, TaoBaoUtil.filterTaoToken(token));
-                }
-            }
-        }
-
-        return newText;
-    }
-
-    /**
-     * @Title: convertLinkFromText @Description: 浠庢枃鏈浆閾� @param text @return
-     * String 杩斿洖绫诲瀷 @throws
-     */
-    public String convertLinkFromText(String text, Long uid, boolean share, boolean simpleToken)
-            throws ConvertLinkExceptionException, Exception {
-        String newText = convertJDLinkFromText(text, uid, share, simpleToken);
-        newText = convertPDDLinkFromText(newText, uid, share);
-        newText = convertTBLinkFromText(newText, uid, share, simpleToken);
-
-        List<String> urls = UrlUtils.parseUrlsFromText(text);
-        if (urls != null)
-            for (String url : urls) {
-                if (url.contains("{relationId}")) {
-                    String relationId = userExtraTaoBaoInfoService.getRelationIdByUid(uid);
-                    if (StringUtil.isNullOrEmpty(relationId)) {
-                        throw new Exception("娣樺疂鏈巿鏉�");
-                    }
-                    newText = newText.replace(url, url.replace("{relationId}", relationId));
-                }
-            }
-        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, boolean simpleToken) {
-        String token = TaoKeApiUtil.getTKToken(picturl, title, link, simpleToken);
-        if (!StringUtil.isNullOrEmpty(token)) {
-            // 缂撳瓨30鍒嗛挓
-            redisManager.cacheCommonString(
-                    RedisKeyEnum.getRedisKey(RedisKeyEnum.taobaoUserTKToken, uid + "-" + StringUtil.Md5(token)), "1",
-                    60 * 30);
-        }
-        return token;
-    }
-
-}
+package com.yeshi.fanli.service.manger.goods;
+
+import java.util.*;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+import javax.annotation.Resource;
+
+import com.yeshi.fanli.dto.pdd.PDDGoodsDetail;
+import com.yeshi.fanli.entity.SystemEnum;
+import com.yeshi.fanli.entity.SystemFunction;
+import com.yeshi.fanli.entity.SystemPIDInfo;
+import com.yeshi.fanli.service.inter.pdd.PDDAuthService;
+import com.yeshi.fanli.service.inter.user.UserFunctionsLimitService;
+import com.yeshi.fanli.service.manger.PIDManager;
+import com.yeshi.fanli.util.Constant;
+import com.yeshi.fanli.vo.pdd.PDDConvertLinkResultVO;
+import org.springframework.stereotype.Component;
+import org.yeshi.utils.StringUtil;
+
+import com.yeshi.fanli.dto.taobao.api.TaoKeOfficialActivityConvertResultDTO;
+import com.yeshi.goods.facade.entity.taobao.TaoBaoGoodsBrief;
+import com.yeshi.common.entity.taobao.TaoKeAppInfo;
+import com.yeshi.fanli.exception.goods.ConvertLinkException;
+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.goods.facade.utils.taobao.HaoDanKuApiUtil;
+import com.yeshi.fanli.util.taobao.TaoBaoUtil;
+import com.yeshi.fanli.util.taobao.TaoKeApiUtil;
+import org.yeshi.utils.UrlUtils;
+
+/**
+ * 杞摼缁勪欢
+ *
+ * @author Administrator
+ */
+@Component
+public class ConvertLinkManager {
+
+    @Resource
+    private UserExtraTaoBaoInfoService userExtraTaoBaoInfoService;
+
+    @Resource
+    private TaoBaoBuyRelationMapService taoBaoBuyRelationMapService;
+
+    @Resource
+    private RedisManager redisManager;
+
+    @Resource
+    private TaoBaoTokenAuctionIdMapManager taoBaoTokenAuctionIdMapManager;
+
+    @Resource
+    private PDDAuthService pddAuthService;
+
+    @Resource
+    private PIDManager pidManager;
+
+    /**
+     * @Title: convertJDLinkFromText @Description:杞摼鏂囨湰涓殑浜笢鐭摼 @param text @param
+     * uid @param share @return @throws Exception String 杩斿洖绫诲瀷 @throws
+     */
+
+    public String convertJDLinkFromText(SystemEnum system, String text, Long uid, boolean share, boolean simpleTKToken) throws Exception {
+
+        StringBuilder builder = new StringBuilder(text);
+        String newText = builder.toString();
+        // 浜笢杞摼
+        // 鎻愬彇浜笢鎵�鏈夌殑閾炬帴
+        List<String> jdShortLink = JDUtil.getJDShortLinksFromText(text);
+        Set<String> linkSet = new HashSet<>();
+        Map<String, String> linkMap = new HashMap<>();
+        if (jdShortLink != null && jdShortLink.size() > 0) {
+            linkSet.addAll(jdShortLink);
+            for (String shortLink : linkSet) {
+                String link = null;
+                if (share)
+                    link = JDApiUtil.convertLinkWithSubUnionId(shortLink, null, null, pidManager.getPidCache(system, Constant.SOURCE_TYPE_JD, SystemPIDInfo.PidType.share),
+                            uid + "");
+                else
+                    link = JDApiUtil.convertLinkWithSubUnionId(shortLink, null, null, pidManager.getPidCache(system, Constant.SOURCE_TYPE_JD, SystemPIDInfo.PidType.fanli),
+                            uid + "");
+                if (!StringUtil.isNullOrEmpty(link)) {
+                    linkMap.put(shortLink, link);
+                }
+            }
+        }
+
+        for (String link : linkSet) {
+            if (linkMap.get(link) == null)
+                throw new Exception("浜笢杞摼澶辫触");
+            newText = newText.replace(link, linkMap.get(link));
+        }
+
+        return newText;
+    }
+
+    public String convertPDDLinkFromText(SystemEnum system, 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)) {
+                    PDDGoodsDetail goodsDetail = PinDuoDuoApiUtil.getGoodsDetail(goodsId);
+                    if (goodsDetail == null)
+                        throw new Exception("鎷煎澶氳浆閾惧け璐�");
+                    PDDConvertLinkResultVO pddUrl = PinDuoDuoApiUtil.convert(goodsDetail.getGoodsSign(),
+                            share ? pidManager.getPidCache(system, Constant.SOURCE_TYPE_PDD, SystemPIDInfo.PidType.share) : pidManager.getPidCache(system, Constant.SOURCE_TYPE_PDD, SystemPIDInfo.PidType.fanli), pddAuthService.getFanliCustomParams(uid), false);
+                    if (pddUrl != null) {
+                        linkMap.put(shortLink, pddUrl.getShort_url());
+                    }
+                }
+
+            }
+        }
+
+        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
+     */
+    /**
+     * @param text
+     * @param uid
+     * @param share
+     * @param simpleToken -鏄惁閲囩敤绠�鐗堟窐鍙d护
+     * @return
+     * @throws Exception
+     */
+    private String convertTBLinkFromText(SystemEnum system, String text, Long uid, boolean share, boolean simpleToken) throws Exception {
+
+
+        String specialPid = pidManager.getPid(system, Constant.SOURCE_TYPE_TAOBAO, SystemPIDInfo.PidType.fanli);
+        String relationPid = pidManager.getPid(system, Constant.SOURCE_TYPE_TAOBAO, SystemPIDInfo.PidType.share);
+        String specialRelationPid = pidManager.getPid(system, Constant.SOURCE_TYPE_TAOBAO, SystemPIDInfo.PidType.fanliChannel);
+
+        StringBuilder builder = new StringBuilder(text);
+        String newText = builder.toString();
+
+        // 瑙f瀽娣樺彛浠�
+        List<String> tokenList = TaoBaoUtil.getTokenListFromTextWithKuoHao(newText);
+        if (tokenList != null && tokenList.size() > 0) {
+
+            String relationId = null;
+            if (share) {
+                relationId = userExtraTaoBaoInfoService.getRelationIdByUid(uid);
+                if (StringUtil.isNullOrEmpty(relationId))
+                    throw new Exception("娣樺疂鏈巿鏉�");
+            }
+
+            Set<String> tokenSet = new HashSet<>();
+            tokenSet.addAll(tokenList);
+            Map<String, String> tokenMap = new HashMap<>();
+            for (String token : tokenSet) {
+                String auctionId = taoBaoTokenAuctionIdMapManager.getAuctionIdByToken(token);
+                if (auctionId == null)
+                    throw new Exception("浠庢窐鍙d护鑾峰彇鍟嗗搧澶辫触");
+                TaoBaoGoodsBrief simpleGoods = TaoKeApiUtil.getSimpleGoodsInfo(auctionId);
+                if (simpleGoods == null)
+                    throw new Exception("鍟嗗搧淇℃伅鑾峰彇澶辫触");
+                String link = null;
+                if (share) {
+                    //鏆傛椂璋冪敤濂藉崟搴揂PI
+                    link = HaoDanKuApiUtil.getInstance().convertLink(auctionId, relationPid, null, null, relationId);
+//					TaoBaoGoodsBrief goods =  TaoKeApiUtil.specialConvertCoupon(auctionId,
+//							new TaoKeAppInfo(TaoBaoConstant.TAOBAO_AUTH_APPKEY, TaoBaoConstant.TAOBAO_AUTH_APPSECRET,
+//									TaoBaoConstant.TAOBAO_RELATION_PID_DEFAULT));
+//					if (goods == null)
+//						throw new Exception("鍟嗗搧杞摼澶辫触");
+//
+//					link = goods.getCouponLink();
+//					if (StringUtil.isNullOrEmpty(link)) {
+//						link = goods.getAuctionUrl();
+//					}
+                    if (StringUtil.isNullOrEmpty(link))
+                        throw new Exception("鍟嗗搧杞摼澶辫触");
+                    link += "&relationId=" + relationId;
+                } else {
+                    String specialId = userExtraTaoBaoInfoService.getSpecialIdByUid(uid);
+
+
+                    if (simpleGoods.getMaterialLibType() != null && simpleGoods.getMaterialLibType() == 1) {
+                        TaoBaoGoodsBrief goods = TaoKeApiUtil.specialConvertCouponV2(auctionId,
+                                new TaoKeAppInfo(TaoBaoConstant.TAOBAO_AUTH_APPKEY,
+                                        TaoBaoConstant.TAOBAO_AUTH_APPSECRET,
+                                        specialPid), specialId, null);
+                        if (goods == null)
+                            throw new Exception("鍟嗗搧杞摼澶辫触");
+
+                        link = goods.getCouponLink();
+                        if (StringUtil.isNullOrEmpty(link)) {
+                            link = goods.getAuctionUrl();
+                        }
+                    } else {
+                        String sRelationId = taoBaoBuyRelationMapService.getRelationId(uid);
+
+                        TaoBaoGoodsBrief goods = TaoKeApiUtil.specialConvertCouponV2(auctionId,
+                                new TaoKeAppInfo(TaoBaoConstant.TAOBAO_AUTH_APPKEY,
+                                        TaoBaoConstant.TAOBAO_AUTH_APPSECRET,
+                                        specialRelationPid), specialId, null);
+                        if (goods == null)
+                            throw new Exception("鍟嗗搧杞摼澶辫触");
+
+                        link = goods.getCouponLink();
+                        if (StringUtil.isNullOrEmpty(link)) {
+                            link = goods.getAuctionUrl();
+                        }
+                        if (StringUtil.isNullOrEmpty(link))
+                            throw new Exception("鍟嗗搧杞摼澶辫触");
+                        link += "&relationId=" + sRelationId;
+                    }
+                }
+
+                if (StringUtil.isNullOrEmpty(link)) {
+                    throw new Exception("鍟嗗搧杞摼澶辫触");
+                }
+
+                String newToken = TaoKeApiUtil.getTKToken(simpleGoods.getPictUrl(), simpleGoods.getTitle(), link, simpleToken);
+                if (StringUtil.isNullOrEmpty(newToken)) {
+                    throw new Exception("鍙d护杞摼澶辫触");
+                }
+                tokenMap.put(token, TaoBaoUtil.filterTaoToken(newToken));
+            }
+
+            for (String token : tokenSet) {
+                if (tokenMap.get(token) == null)
+                    throw new Exception("娣樺疂閮ㄥ垎杞摼澶辫触");
+                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 = relationPid.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, simpleToken);
+                    newText = newText.replace(st, TaoBaoUtil.filterTaoToken(token));
+                }
+            }
+        }
+
+        return newText;
+    }
+
+    /**
+     * @Title: convertLinkFromText @Description: 浠庢枃鏈浆閾� @param text @return
+     * String 杩斿洖绫诲瀷 @throws
+     */
+    public String convertLinkFromText(SystemEnum system, String text, Long uid, boolean share, boolean simpleToken)
+            throws ConvertLinkException, Exception {
+        String newText = convertJDLinkFromText(system, text, uid, share, simpleToken);
+        newText = convertPDDLinkFromText(system, newText, uid, share);
+        newText = convertTBLinkFromText(system, newText, uid, share, simpleToken);
+
+        List<String> urls = UrlUtils.parseUrlsFromText(text);
+        if (urls != null)
+            for (String url : urls) {
+                if (url.contains("{relationId}")) {
+                    String relationId = userExtraTaoBaoInfoService.getRelationIdByUid(uid);
+                    if (StringUtil.isNullOrEmpty(relationId)) {
+                        throw new Exception("娣樺疂鏈巿鏉�");
+                    }
+                    newText = newText.replace(url, url.replace("{relationId}", relationId));
+                }
+            }
+        if (text.equalsIgnoreCase(newText))
+            throw new ConvertLinkException(ConvertLinkException.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, boolean simpleToken) {
+        String token = TaoKeApiUtil.getTKToken(picturl, title, link, simpleToken);
+        if (!StringUtil.isNullOrEmpty(token)) {
+            // 缂撳瓨30鍒嗛挓
+            redisManager.cacheCommonString(
+                    RedisKeyEnum.getRedisKey(RedisKeyEnum.taobaoUserTKToken, uid + "-" + StringUtil.Md5(token)), "1",
+                    60 * 30);
+        }
+        return token;
+    }
+
+    @Resource
+    private UserFunctionsLimitService userFunctionsLimitService;
+
+
+    //娣樺疂瀹樻柟娲诲姩杞摼
+    public TaoKeOfficialActivityConvertResultDTO taobaoOfficialActivityConvert(Long uid, String pid, String promotionSceneId, String relationId, boolean share) throws ConvertLinkException {
+        // 鐢ㄦ埛ID涓嶄负绌烘椂瑕侀獙璇佺浉鍏崇殑鑳藉姏
+        if (uid != null) {
+            //鑷喘
+            if (!share) {
+                if (userFunctionsLimitService.isLimit(uid, SystemFunction.fanli, new Date())) {
+                    throw new ConvertLinkException(ConvertLinkException.CODE_FUNCTION_LIMIT, "璇ュ姛鑳借闄愬埗");
+                }
+            } else {
+                //鍒嗕韩
+                if (userFunctionsLimitService.isLimit(uid, SystemFunction.share, new Date())) {
+                    throw new ConvertLinkException(ConvertLinkException.CODE_FUNCTION_LIMIT, "璇ュ姛鑳借闄愬埗");
+                }
+            }
+
+        }
+
+        TaoKeOfficialActivityConvertResultDTO dto = TaoKeApiUtil.officialActivityConvert(
+                pid.split("_")[3], promotionSceneId, relationId);
+        return dto;
+    }
+
+
+    public static void main(String[] args){
+
+       String newText = "銆愬ぉ鐚�戝弻11-棰勫敭鐜╂硶浼氬満锛佸仛浠诲姟锛岃耽鏈�楂�16鍏冪孩鍖咃紒\n" +
+               "寰╄=鏈潯{娣樺疂娲诲姩:20150318020016625}锛岃繘鍏ャ�怲a0瀹濄�戠珛鍗虫姠璐紒";
+        // 瑙f瀽娣樺疂瀹樻柟娲诲姩ID
+        List<String> list = new ConvertLinkManager(). getTaoBaoOfficialActivityId(newText);
+        if (list.size() > 0) {
+            String relationId = null;
+            for (String st : list) {
+                String activityid = st.replace("{娣樺疂娲诲姩:", "").replace("}", "");
+                if (!StringUtil.isNullOrEmpty(activityid)) {
+                    String adzoneId = "mm_124933865_56750082_89555600043".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, true);
+                    newText = newText.replace(st, TaoBaoUtil.filterTaoToken(token));
+                }
+            }
+        }
+
+    }
+
+
+}

--
Gitblit v1.8.0