Administrator
2020-03-01 666e5d4bae10a7082823bfbe91d0fa7e51f5ad2d
Merge remote-tracking branch 'origin/div' into div
7个文件已修改
1个文件已添加
154 ■■■■ 已修改文件
fanli/src/main/java/com/yeshi/fanli/controller/admin/goods/ConvertLinkController.java 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/controller/client/v1/DynamicRecommendController.java 11 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/exception/goods/ConvertLinkExceptionException.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/service/manger/ClipboardAnalysisManager.java 67 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/service/manger/goods/ConvertLinkManager.java 12 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/service/manger/goods/tb/TaoBaoTokenAuctionIdMapManager.java 35 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/util/RedisKeyEnum.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/util/cache/TaoBaoGoodsCacheUtil.java 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
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);
    }
}