admin
2020-05-20 98b1a0affd69bbe63223c21fdd2c404e8bedfccb
fanli/src/main/java/com/yeshi/fanli/service/manger/ClipboardAnalysisManager.java
@@ -21,11 +21,14 @@
import com.yeshi.fanli.entity.jd.JDGoods;
import com.yeshi.fanli.entity.taobao.TaoBaoGoodsBrief;
import com.yeshi.fanli.exception.taobao.TaoBaoTokenParseException;
import com.yeshi.fanli.exception.taobao.TaobaoGoodsDownException;
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.Constant;
import com.yeshi.fanli.util.DouYinUtil;
import com.yeshi.fanli.util.RedisManager;
import com.yeshi.fanli.util.StringUtil;
import com.yeshi.fanli.util.TokenUtil;
import com.yeshi.fanli.util.Utils;
@@ -58,6 +61,9 @@
   @Resource
   private TaoBaoTokenAuctionIdMapManager taoBaoTokenAuctionIdMapManager;
   @Resource
   private RedisManager redisManager;
   /**
    * @Title: parseContentType @Description: 解析文本的类型 @param text @return Set
@@ -199,7 +205,6 @@
               link = urlList.get(0);
            else// 第一个口令在第一个链接前面
               token = tokenList.get(0);
         } else if (typeSet.contains(ClipboardContentType.link) && typeSet.contains(ClipboardContentType.text)) {// 链接+文本
            link = urlList.get(0);
@@ -210,7 +215,25 @@
         if (!StringUtil.isNullOrEmpty(link)) {
            CommonGoods goods = parseLink(urlList.get(0));
            if (goods == null || goods.getGoodsId() == null) {
               resultListener.onResult(new GoodsDocParseResultVO(text, urlList.get(0)));
               if (tokenList.size() == 0 && urlList.size() == 2
                     && urlList.get(0).indexOf("://uland.taobao.com") > -1
                     && urlList.get(1).indexOf("?id=") > -1) {// 有2个链接的文案,第一个是店铺券链接,其中二个是淘宝商品详情
                  CommonGoods goods1 = parseLink(urlList.get(1));
                  if (goods1 != null && goods1.getGoodsType() == Constant.SOURCE_TYPE_TAOBAO) {
                     resultListener.onResult(goods1);
                  } else {
                     resultListener.onResult(new GoodsDocParseResultVO(text, urlList.get(0)));
                  }
               } else if (urlList.size() > 1)
                  resultListener.onResult(new GoodsDocParseResultVO(text, urlList.get(0)));
               else {// 单链接
                     // 判断是否包含可转链的链接
                  if (!isContainsLinkConvert(link))
                     resultListener.none();
                  else
                     resultListener.onResult(new GoodsDocParseResultVO(text, link));
               }
            } else {
               if (VersionUtil.greaterThan_2_0_7(platform, version)) {
                  if (urlList.size() == 1)// 单链接+文本
@@ -312,12 +335,131 @@
    */
   public CommonGoods parseLink(String link) {
      SimpleCommonGoods simpleGoods = parseGoodsIdFromLink(link);
      if (simpleGoods == null) {
         return null;
      }
      CommonGoods commonGoods = null;
      if (simpleGoods.getGoodsType() == Constant.SOURCE_TYPE_TAOBAO) {
         TaoBaoGoodsBrief goods = null;
         try {
            goods = redisManager.getTaoBaoGoodsBrief(Long.parseLong(simpleGoods.getGoodsId()));
         } catch (NumberFormatException e) {
            e.printStackTrace();
         } catch (TaobaoGoodsDownException e) {
            e.printStackTrace();
         }
         if (goods != null) {
            commonGoods = CommonGoodsFactory.create(goods);
         } else {
            goods = TaoBaoUtil.getTmallGoodsInfo(simpleGoods.getGoodsId());
            if (goods != null) {
               commonGoods = new CommonGoods();
               commonGoods.setTitle(goods.getTitle());
               commonGoods.setPicture(goods.getPictUrl());
            } else {
               // TODO 根据淘宝商品ID解析标题与图片
            }
         }
      } else if (simpleGoods.getGoodsType() == Constant.SOURCE_TYPE_JD) {
         // 优先采用高级接口请求数据
         JDGoods jdGoods = null;
         try {
            // 防止高级接口被收回
            jdGoods = JDApiUtil.queryGoodsDetail(Long.parseLong(simpleGoods.getGoodsId()));
         } catch (Exception e) {
         }
         if (jdGoods == null) {
            jdGoods = JDApiUtil.getGoodsDetail(Long.parseLong(simpleGoods.getGoodsId()));
         }
         if (jdGoods != null) {
            commonGoods = CommonGoodsFactory.create(jdGoods);
         } else {// 商品并未参与推广
            jdGoods = JDUtil.getSimpleGoodsInfo(simpleGoods.getGoodsId());
            if (jdGoods != null) {
               commonGoods = new CommonGoods();
               commonGoods.setTitle(jdGoods.getSkuName());
               commonGoods.setPicture(jdGoods.getPicUrl());
            }
         }
      } else if (simpleGoods.getGoodsType() == Constant.SOURCE_TYPE_PDD) {
         PDDGoodsDetail goods = PinDuoDuoApiUtil.getGoodsDetail(Long.parseLong(simpleGoods.getGoodsId()));
         if (goods != null) {
            commonGoods = CommonGoodsFactory.create(goods);
         } else {
            goods = PinDuoDuoUtil.getPDDGoodsInfo(simpleGoods.getGoodsId());
            if (goods != null) {
               commonGoods = new CommonGoods();
               commonGoods.setTitle(goods.getGoodsName());
               commonGoods.setPicture(goods.getGoodsThumbnailUrl());
            }
         }
      }
      return commonGoods;
   }
   /**
    * 从链接中解析商品ID
    *
    * @return
    */
   public SimpleCommonGoods parseGoodsIdFromLink(String link) {
      String jdId = parseJDSkuIdFromLink(link);
      if (!StringUtil.isNullOrEmpty(jdId)) {
         return new SimpleCommonGoods(jdId, Constant.SOURCE_TYPE_JD);
      }
      // 解析拼多多
      String pddId = PinDuoDuoUtil.getPDDGoodsId(link);
      if (!StringUtil.isNullOrEmpty(pddId)) {
         return new SimpleCommonGoods(pddId, Constant.SOURCE_TYPE_PDD);
      }
      // 解析淘宝
      String auctionId = parseTBAuctionIdFromLink(link);
      if (!StringUtil.isNullOrEmpty(auctionId)) {
         return new SimpleCommonGoods(auctionId, Constant.SOURCE_TYPE_TAOBAO);
      }
      return null;
   }
   /**
    * 从链接中解析京东商品的SKUID
    *
    * @param link
    * @return
    */
   public String parseJDSkuIdFromLink(String link) {
      // 解析其他商品
      String jdId = JDUtil.getJDGoodsId(link);
      // 微信链接
      if (StringUtil.isNullOrEmpty(jdId)) {
         jdId = JDUtil.getJDGoodsIdByWeiXin(link);
      }
      // 领券短连接
      if (StringUtil.isNullOrEmpty(jdId) && link.contains("u.jd.com")) {
         jdId = jdGoodsLinkParseManager.parseGoodsIdByJDShortUrl(link);
      }
      return jdId;
   }
   public String parseTBAuctionIdFromLink(String link) {
      TaoBaoGoodsBrief tb = null;
      String auctionId = null;
      if (link.startsWith("https://a.m.taobao.com/i"))// 淘宝账号未登录状态
      {
         link = link.substring("https://a.m.taobao.com/i".length(), link.indexOf(".htm"));
         if (NumberUtil.isNumeric(link)) {
            tb = TaoBaoUtil.isAlimama(link);
            auctionId = link + "";
         }
      } else if (link.contains("ju.taobao.com") || link.contains(".juhuasuan.com")) {// 聚划算
         int index = link.indexOf("item_id");
@@ -330,108 +472,36 @@
            else {
               id = link.substring(link.indexOf("=" + 1));
            }
            tb = TaoBaoUtil.isAlimama(id);
            if (tb == null) {
               tb = new TaoBaoGoodsBrief(Long.parseLong(id));
            }
            auctionId = id;
         }
      } else if (link.contains("http://zmnxbc.com")) { // 手机端天猫APP分享
         tb = TaoBaoUtil.parsePhoneShareUrlByTM(link);
         if (tb != null)
            auctionId = tb.getAuctionId() + "";
      } else if (link.contains("h5.m.taobao") || link.contains("detail.m.tmall") || link.contains("item.taobao")
            || link.contains("detail.tmall")) { // 手机页面和电脑页面
         Map<String, String> map = Utils.parseURL(link);
         String id = "";
         id = map.get("id").replace("}", "");
         tb = TaoBaoUtil.isAlimama(id);
         if (tb == null) {
            tb = new TaoBaoGoodsBrief(Long.parseLong(id));
         }
         auctionId = id;
      } else if (link.contains("v.douyin.com")) { // 抖音
         tb = analysisDouYin(link);
         if (tb != null) {
            if (!StringUtil.isNullOrEmpty(tb.getAuctionUrl())) {// 抖音解析到淘宝商品链接
               return parseLink(tb.getAuctionUrl());
               CommonGoods goods = parseLink(tb.getAuctionUrl());
               if (goods != null) {
                  auctionId = goods.getGoodsId() + "";
               }
            }
         }
      } else {
         tb = TaoBaoUtil.parsePhoneShareUrlByTB(link);
         if (tb != null)
            auctionId = tb.getAuctionId() + "";
      }
      // 没解析到淘宝相关商品
      if (tb == null) {
         String goodsId = TaoBaoUtil.getGoodsIdByPhoneShareUrl(link);
         if (!StringUtil.isNullOrEmpty(goodsId)) {
            tb = TaoBaoUtil.isAlimama(goodsId);
            if (tb == null) {
               tb = new TaoBaoGoodsBrief(Long.parseLong(goodsId));
            }
         }
      }
      return auctionId;
      CommonGoods commonGoods = null;
      // 淘宝商品解析结束
      if (tb != null) {
         if (StringUtil.isNullOrEmpty(tb.getTitle())) {
            tb = TaoBaoUtil.getTaoBaoGoodsBriefNotInPub(tb.getId());
            if (tb != null) {
               commonGoods = new CommonGoods();
               commonGoods.setPicture(tb.getPictUrl());
               commonGoods.setTitle(tb.getTitle());
            }
         } else {
            commonGoods = CommonGoodsFactory.create(tb);
         }
      } else {
         // 解析其他商品
         String jdId = JDUtil.getJDGoodsId(link);
         // 微信链接
         if (StringUtil.isNullOrEmpty(jdId)) {
            jdId = JDUtil.getJDGoodsIdByWeiXin(link);
         }
         // 领券短连接
         if (StringUtil.isNullOrEmpty(jdId) && link.contains("u.jd.com")) {
            jdId = jdGoodsLinkParseManager.parseGoodsIdByJDShortUrl(link);
         }
         if (!StringUtil.isNullOrEmpty(jdId)) {
            JDGoods goods = JDApiUtil.getGoodsDetail(Long.parseLong(jdId));
            if (goods != null) {
               // 高级接口 -- 信息更完整
               JDGoods jdGoods = JDApiUtil.queryGoodsDetail(Long.parseLong(jdId));
               if (jdGoods != null) {
                  commonGoods = CommonGoodsFactory.create(jdGoods);
               } else {
                  commonGoods = CommonGoodsFactory.create(goods);
               }
            } else {
               goods = JDUtil.getSimpleGoodsInfo(jdId);
               if (goods != null) {
                  commonGoods = new CommonGoods();
                  commonGoods.setTitle(goods.getSkuName());
                  commonGoods.setPicture(goods.getPicUrl());
               }
            }
         } else {
            String pddId = PinDuoDuoUtil.getPDDGoodsId(link);
            if (!StringUtil.isNullOrEmpty(pddId)) {
               PDDGoodsDetail goods = PinDuoDuoApiUtil.getGoodsDetail(Long.parseLong(pddId));
               if (goods != null) {
                  commonGoods = CommonGoodsFactory.create(goods);
               } else {
                  goods = PinDuoDuoUtil.getPDDGoodsInfo(pddId);
                  if (goods != null) {
                     commonGoods = new CommonGoods();
                     commonGoods.setTitle(goods.getGoodsName());
                     commonGoods.setPicture(goods.getGoodsThumbnailUrl());
                  }
               }
            }
         }
      }
      return commonGoods;
   }
   private CommonGoods parseTaoBaoToken(String token) throws TaoBaoTokenParseException {
@@ -480,6 +550,42 @@
      }
      return null;
   }
   private boolean isContainsLinkConvert(String link) {
      if (link.contains(".jd.com"))
         return true;
      else if (link.contains(".taobao.com") || link.contains(".tmall"))
         return true;
      else if (link.contains(".pinduoduo.com") || link.contains(".yangkeduo.com"))
         return true;
      return false;
   }
   class SimpleCommonGoods {
      private String goodsId;
      private int goodsType;
      public SimpleCommonGoods(String goodsId, int goodsType) {
         this.goodsId = goodsId;
         this.goodsType = goodsType;
      }
      public String getGoodsId() {
         return goodsId;
      }
      public void setGoodsId(String goodsId) {
         this.goodsId = goodsId;
      }
      public int getGoodsType() {
         return goodsType;
      }
      public void setGoodsType(int goodsType) {
         this.goodsType = goodsType;
      }
   }
}
/**