yujian
2019-04-29 9a24f2802a3d6fe3e82c05e52f2880d65ad04dcf
fanli/src/main/java/com/yeshi/fanli/service/impl/goods/ShareGoodsServiceImpl.java
@@ -32,7 +32,6 @@
import com.yeshi.fanli.entity.taobao.TaoBaoUnionConfig;
import com.yeshi.fanli.entity.taobao.TaoKeAppInfo;
import com.yeshi.fanli.exception.ShareGoodsException;
import com.yeshi.fanli.exception.goods.CommonGoodsException;
import com.yeshi.fanli.exception.taobao.TaobaoGoodsDownException;
import com.yeshi.fanli.log.LogHelper;
import com.yeshi.fanli.service.inter.config.ConfigService;
@@ -49,8 +48,7 @@
import com.yeshi.fanli.util.ImageUtil;
import com.yeshi.fanli.util.RedisManager;
import com.yeshi.fanli.util.StringUtil;
import com.yeshi.fanli.util.ThreadUtil;
import com.yeshi.fanli.util.factory.CommonGoodsFactory;
import com.yeshi.fanli.util.TaoBaoConstant;
import com.yeshi.fanli.util.taobao.TaoBaoUtil;
import com.yeshi.fanli.util.taobao.TaoKeApiUtil;
@@ -137,12 +135,14 @@
      // 没有获取到转过链的商品详情
      if (StringUtil.isNullOrEmpty(goods.getCouponLink()) && !goods.getAuctionUrl().contains("s.click.taobao.com")) {
         TaoBaoLink taoBaoLink = TaoBaoUtil.getTbLinkForShare(auctionId, tbPid.getPid(), taoBaoUnionConfig);
         TaoBaoGoodsBrief taoBaoLink = TaoKeApiUtil.specialConvertCoupon(auctionId, info); // TaoBaoUtil.getTbLinkForShare(auctionId,
                                                                        // tbPid.getPid(),
                                                                        // taoBaoUnionConfig);
         if (taoBaoLink == null) {
            throw new ShareGoodsException(201, "转链失败");
         }
         goods.setCouponLink(taoBaoLink.getCouponLink());
         goods.setAuctionUrl(taoBaoLink.getClickUrl());
         goods.setAuctionUrl(taoBaoLink.getAuctionUrl());
      }
      return addShareGoodsHistory(uid, goods);
   }
@@ -354,7 +354,7 @@
   }
   @Override
   public TaoBaoLink getTaoBaoLinkForShare(Long uid, Long auctionId) throws ShareGoodsException {
   public TaoBaoLink getTaoBaoLinkForShare(Long uid, Long auctionId, String relationId) throws ShareGoodsException {
      if (uid == null || uid <= 0) {
         throw new ShareGoodsException(1, "用户ID不能为空");
@@ -364,19 +364,30 @@
         throw new ShareGoodsException(2, "商品ID不能为空");
      }
      TBPid tbPid = tbPidService.getTBPid(uid, PidUser.TYPE_SHARE_GOODS);
      if (tbPid == null) {
         throw new ShareGoodsException(3, "获取推广位失败");
      }
      String appId = tbPid.getPid().split("_")[2];
      String adzoneId = tbPid.getPid().split("_")[3];
      TaoBaoUnionConfig taoBaoUnionConfig = taoBaoUnionConfigService.getConfigByAppIdCache(appId);
      TaoKeAppInfo info = new TaoKeAppInfo();
      info.setAdzoneId(adzoneId);
      info.setAppKey(taoBaoUnionConfig.getAppKey());
      info.setAppSecret(taoBaoUnionConfig.getAppSecret());
      info.setPid(tbPid.getPid());
      if (!StringUtil.isNullOrEmpty(relationId)) {
         String pid = TaoBaoConstant.TAOBAO_RELATION_PID_DEFAULT;
         String appId = pid.split("_")[2];
         String adzoneId = pid.split("_")[3];
         TaoBaoUnionConfig taoBaoUnionConfig = taoBaoUnionConfigService.getConfigByAppIdCache(appId);
         info.setAdzoneId(adzoneId);
         info.setAppKey(taoBaoUnionConfig.getAppKey());
         info.setAppSecret(taoBaoUnionConfig.getAppSecret());
         info.setPid(pid);
      } else {
         TBPid tbPid = tbPidService.getTBPid(uid, PidUser.TYPE_SHARE_GOODS);
         if (tbPid == null) {
            throw new ShareGoodsException(3, "获取推广位失败");
         }
         String appId = tbPid.getPid().split("_")[2];
         TaoBaoUnionConfig taoBaoUnionConfig = taoBaoUnionConfigService.getConfigByAppIdCache(appId);
         String adzoneId = tbPid.getPid().split("_")[3];
         info.setAdzoneId(adzoneId);
         info.setAppKey(taoBaoUnionConfig.getAppKey());
         info.setAppSecret(taoBaoUnionConfig.getAppSecret());
         info.setPid(tbPid.getPid());
      }
      TaoBaoGoodsBrief goods = null;
      try {
         goods = TaoKeApiUtil.searchGoodsDetail(auctionId, info);
@@ -389,12 +400,21 @@
      }
      if (StringUtil.isNullOrEmpty(goods.getCouponLink()) && !goods.getAuctionUrl().contains("s.click.taobao.com")) {
         TaoBaoLink taoBaoLink = TaoBaoUtil.getTbLinkForShare(auctionId, tbPid.getPid(), taoBaoUnionConfig);
         TaoBaoUnionConfig taoBaoUnionConfig = taoBaoUnionConfigService
               .getConfigByAppIdCache(info.getPid().split("_")[2]);
         TaoBaoGoodsBrief taoBaoLink = TaoKeApiUtil.specialConvertCoupon(auctionId, info);
         if (taoBaoLink == null) {
            throw new ShareGoodsException(201, "商品转链失败");
         }
         goods.setCouponLink(taoBaoLink.getCouponLink());
         goods.setAuctionUrl(taoBaoLink.getClickUrl());
         goods.setAuctionUrl(taoBaoLink.getAuctionUrl());
      }
      if (!StringUtil.isNullOrEmpty(relationId)) {
         if (!StringUtil.isNullOrEmpty(goods.getAuctionUrl()))
            goods.setAuctionUrl(goods.getAuctionUrl() + "&relationId=" + relationId);
         if (!StringUtil.isNullOrEmpty(goods.getCouponLink()))
            goods.setCouponLink(goods.getCouponLink() + "&relationId=" + relationId);
      }
      // 保存商品详情
@@ -441,18 +461,133 @@
      if (tbPid == null) {
         throw new ShareGoodsException(3, "获取推广位失败");
      }
      String appId = tbPid.getPid().split("_")[2];
      String adzoneId = tbPid.getPid().split("_")[3];
      return getTaoBaoLink(uid, auctionId, tbPid.getPid());
   }
   @Override
   public TaoBaoLink getTaoBaoLink(Long uid, Long auctionId, String pid) throws ShareGoodsException {
      if (uid == null || uid <= 0) {
         throw new ShareGoodsException(1, "用户ID不能为空");
      }
      if (auctionId == null || auctionId <= 0) {
         throw new ShareGoodsException(2, "商品ID不能为空");
      }
      if (StringUtil.isNullOrEmpty(pid)) {
         throw new ShareGoodsException(3, "无推广位");
      }
      String appId = pid.split("_")[2];
      String adzoneId = pid.split("_")[3];
      TaoBaoUnionConfig taoBaoUnionConfig = taoBaoUnionConfigService.getConfigByAppIdCache(appId);
      TaoKeAppInfo info = new TaoKeAppInfo();
      info.setAdzoneId(adzoneId);
      info.setAppKey(taoBaoUnionConfig.getAppKey());
      info.setAppSecret(taoBaoUnionConfig.getAppSecret());
      info.setPid(tbPid.getPid());
      info.setPid(pid);
      TaoBaoGoodsBrief goods = null;
      try {
         goods = TaoKeApiUtil.searchGoodsDetailForConvert(auctionId, info);
      } catch (TaobaoGoodsDownException e) {
         throw new ShareGoodsException(4, "商品已下架");
      } finally {
      }
      if (goods == null) {
         throw new ShareGoodsException(5, "获取商品详情失败");
      }
      if (StringUtil.isNullOrEmpty(goods.getCouponLink()) && !goods.getAuctionUrl().contains("s.click.taobao.com")) {
         TaoBaoGoodsBrief taoBaoLink = TaoKeApiUtil.specialConvertCoupon(auctionId, info);
         if (taoBaoLink == null) {
            throw new ShareGoodsException(201, "商品转链失败");
         }
         goods.setCouponLink(taoBaoLink.getCouponLink());
         goods.setAuctionUrl(taoBaoLink.getAuctionUrl());
      }
      // 创建淘口令
      TaoBaoLink tbLink = new TaoBaoLink();
      tbLink.setAuctionId(goods.getAuctionId());
      tbLink.setClickUrl(goods.getAuctionUrl());
      tbLink.setCouponLink(goods.getCouponLink());
      return tbLink;
   }
   @Override
   public TaoBaoLink getTaoBaoLinkForBuyWithSpecial(Long uid, String specialId, Long auctionId)
         throws ShareGoodsException {
      if (uid == null || uid <= 0) {
         throw new ShareGoodsException(1, "用户ID不能为空");
      }
      if (auctionId == null || auctionId <= 0) {
         throw new ShareGoodsException(2, "商品ID不能为空");
      }
      TaoKeAppInfo app = new TaoKeAppInfo();
      app.setAppKey(TaoBaoConstant.TAOBAO_AUTH_APPKEY);
      app.setAppSecret(TaoBaoConstant.TAOBAO_AUTH_APPSECRET);
      app.setPid(TaoBaoConstant.TAOBAO_SPECIAL_PID_DEFAULT);
      TaoBaoGoodsBrief goods = TaoKeApiUtil.specialConvertCoupon(auctionId, app);
      if (goods == null) {
         throw new ShareGoodsException(1, "");
      }
      TaoBaoLink taoBaoLink = new TaoBaoLink();
      taoBaoLink.setAuctionId(auctionId);
      taoBaoLink.setClickUrl(goods.getAuctionUrl());
      taoBaoLink.setCouponLink(goods.getCouponLink());
      taoBaoLink.setGoods(goods);
      return taoBaoLink;
   }
   @Override
   public UserShareGoodsHistory getShareGoodsHistory(Long uid, Long auctionId) {
      return userShareGoodsHistoryMapper.selectByUidAndAuctionId(uid, auctionId);
   }
   @Override
   public TaoBaoLink getTaoBaoLinkForShare(Long uid, Long auctionId, String relationId, String pid)
         throws ShareGoodsException {
      if (uid == null || uid <= 0) {
         throw new ShareGoodsException(1, "用户ID不能为空");
      }
      if (auctionId == null || auctionId <= 0) {
         throw new ShareGoodsException(2, "商品ID不能为空");
      }
      TaoKeAppInfo info = new TaoKeAppInfo();
      if (!StringUtil.isNullOrEmpty(relationId)) {
         String appId = pid.split("_")[2];
         String adzoneId = pid.split("_")[3];
         TaoBaoUnionConfig taoBaoUnionConfig = taoBaoUnionConfigService.getConfigByAppIdCache(appId);
         info.setAdzoneId(adzoneId);
         info.setAppKey(taoBaoUnionConfig.getAppKey());
         info.setAppSecret(taoBaoUnionConfig.getAppSecret());
         info.setPid(pid);
      } else {
         TBPid tbPid = tbPidService.getTBPid(uid, PidUser.TYPE_SHARE_GOODS);
         if (tbPid == null) {
            throw new ShareGoodsException(3, "获取推广位失败");
         }
         String appId = tbPid.getPid().split("_")[2];
         TaoBaoUnionConfig taoBaoUnionConfig = taoBaoUnionConfigService.getConfigByAppIdCache(appId);
         String adzoneId = tbPid.getPid().split("_")[3];
         info.setAdzoneId(adzoneId);
         info.setAppKey(taoBaoUnionConfig.getAppKey());
         info.setAppSecret(taoBaoUnionConfig.getAppSecret());
         info.setPid(tbPid.getPid());
      }
      TaoBaoGoodsBrief goods = null;
      try {
         goods = TaoKeApiUtil.searchGoodsDetail(auctionId, info);
      } catch (TaobaoGoodsDownException e) {
         throw new ShareGoodsException(4, "商品已下架");
      } finally {
@@ -462,19 +597,47 @@
      }
      if (StringUtil.isNullOrEmpty(goods.getCouponLink()) && !goods.getAuctionUrl().contains("s.click.taobao.com")) {
         TaoBaoLink taoBaoLink = TaoBaoUtil.getTbLinkForShare(auctionId, tbPid.getPid(), taoBaoUnionConfig);
         TaoBaoGoodsBrief taoBaoLink = TaoKeApiUtil.specialConvertCoupon(auctionId, info);
         if (taoBaoLink == null) {
            throw new ShareGoodsException(201, "商品转链失败");
         }
         goods.setCouponLink(taoBaoLink.getCouponLink());
         goods.setAuctionUrl(taoBaoLink.getClickUrl());
         goods.setAuctionUrl(taoBaoLink.getAuctionUrl());
      }
      if (!StringUtil.isNullOrEmpty(relationId)) {
         if (!StringUtil.isNullOrEmpty(goods.getAuctionUrl()))
            goods.setAuctionUrl(goods.getAuctionUrl() + "&relationId=" + relationId);
         if (!StringUtil.isNullOrEmpty(goods.getCouponLink()))
            goods.setCouponLink(goods.getCouponLink() + "&relationId=" + relationId);
      }
      // 保存商品详情
      // 创建淘口令
      TaoBaoLink tbLink = new TaoBaoLink();
      tbLink.setAuctionId(goods.getAuctionId());
      tbLink.setClickUrl(goods.getAuctionUrl());
      tbLink.setCouponLink(goods.getCouponLink());
      if (!StringUtil.isNullOrEmpty(tbLink.getCouponLink())) {// 通过立即推广方式获取淘口令成功
         String quanToken = TaoKeApiUtil.getTKToken(goods.getPictUrl(), goods.getTitle(), tbLink.getCouponLink());
         if (!StringUtil.isNullOrEmpty(quanToken)) {
            tbLink.setTaoToken(quanToken);
         }
      } else if (!StringUtil.isNullOrEmpty(tbLink.getClickUrl())) {
         String quanToken = TaoKeApiUtil.getTKToken(goods.getPictUrl(), goods.getTitle(), tbLink.getClickUrl());
         if (!StringUtil.isNullOrEmpty(quanToken)) {
            tbLink.setTaoToken(quanToken);
         }
      }
      tbLink.setGoods(goods);
      // 存储分享商品的信息,用于加快分享网页接口请求速度
      if (Constant.IS_OUTNET)
         redisManager.saveTaoBaoGoodsBriefTemp(goods);
      return tbLink;
   }