yujian
2020-06-08 b3da9f82b7740d39742fef1a81a56c22fe1c8b9c
fanli/src/main/java/com/yeshi/fanli/service/impl/goods/ShareGoodsServiceImpl.java
@@ -19,15 +19,12 @@
import org.yeshi.utils.exception.HttpException;
import org.yeshi.utils.tencentcloud.COSManager;
import com.yeshi.fanli.dao.mybatis.HongBaoManageMapper;
import com.yeshi.fanli.dao.mybatis.UserInfoMapper;
import com.yeshi.fanli.dao.mybatis.UserShareGoodsHistoryMapper;
import com.yeshi.fanli.dao.mybatis.share.PidUserMapper;
import com.yeshi.fanli.dto.taobao.DaTaoKeFilterResult;
import com.yeshi.fanli.dto.taobao.TaoLiJinDTO;
import com.yeshi.fanli.entity.bus.share.UserShareGoodsHistory;
import com.yeshi.fanli.entity.bus.tlj.UserTaoLiJinRecord;
import com.yeshi.fanli.entity.bus.user.UserInfo;
import com.yeshi.fanli.entity.bus.user.UserMoneyExtra;
import com.yeshi.fanli.entity.taobao.PidUser;
import com.yeshi.fanli.entity.taobao.TBPid;
import com.yeshi.fanli.entity.taobao.TaoBaoGoodsBrief;
@@ -35,33 +32,39 @@
import com.yeshi.fanli.entity.taobao.TaoBaoUnionConfig;
import com.yeshi.fanli.entity.taobao.TaoKeAppInfo;
import com.yeshi.fanli.entity.taobao.UserTLJBuyHistory;
import com.yeshi.fanli.entity.taobao.dataoke.DaTaoKeDetailV2;
import com.yeshi.fanli.exception.share.ShareGoodsException;
import com.yeshi.fanli.exception.taobao.TaoKeApiException;
import com.yeshi.fanli.exception.taobao.TaobaoGoodsDownException;
import com.yeshi.fanli.exception.tlj.TaoLiJinCreateException;
import com.yeshi.fanli.exception.tlj.UserTaoLiJinRecordException;
import com.yeshi.fanli.exception.tlj.UserTaoLiJinNewbiesException;
import com.yeshi.fanli.log.LogHelper;
import com.yeshi.fanli.log.LogManager;
import com.yeshi.fanli.log.LogType;
import com.yeshi.fanli.service.inter.config.ConfigService;
import com.yeshi.fanli.service.inter.goods.CommonGoodsService;
import com.yeshi.fanli.service.inter.goods.ShareGoodsService;
import com.yeshi.fanli.service.inter.hongbao.HongBaoManageService;
import com.yeshi.fanli.service.inter.monitor.BusinessEmergent110Service;
import com.yeshi.fanli.service.inter.order.config.HongBaoManageService;
import com.yeshi.fanli.service.inter.redpack.UserTaoLiJinNewbiesService;
import com.yeshi.fanli.service.inter.taobao.TLJBuyGoodsService;
import com.yeshi.fanli.service.inter.taobao.TaoBaoUnionConfigService;
import com.yeshi.fanli.service.inter.taobao.UserTLJBuyHistoryService;
import com.yeshi.fanli.service.inter.tlj.UserTaoLiJinRecordService;
import com.yeshi.fanli.service.inter.taobao.dataoke.DaTaoKeGoodsDetailV2Service;
import com.yeshi.fanli.service.inter.user.TBPidService;
import com.yeshi.fanli.service.inter.user.UserAccountService;
import com.yeshi.fanli.service.inter.user.UserMoneyExtraService;
import com.yeshi.fanli.service.inter.user.UserShareGoodsRecordService;
import com.yeshi.fanli.service.manger.goods.ConvertLinkManager;
import com.yeshi.fanli.util.AESUtil;
import com.yeshi.fanli.util.Constant;
import com.yeshi.fanli.util.FilePathEnum;
import com.yeshi.fanli.util.FileUtil;
import com.yeshi.fanli.util.ImageUtil;
import com.yeshi.fanli.util.RedisManager;
import com.yeshi.fanli.util.StringUtil;
import com.yeshi.fanli.util.TaoBaoConstant;
import com.yeshi.fanli.util.TimeUtil;
import com.yeshi.fanli.util.cache.TaoBaoGoodsCacheUtil;
import com.yeshi.fanli.util.dataoke.DaTaoKeApiUtil;
import com.yeshi.fanli.util.taobao.DaTaoKeUtil;
import com.yeshi.fanli.util.taobao.TaoBaoUtil;
import com.yeshi.fanli.util.taobao.TaoKeApiUtil;
@@ -69,16 +72,10 @@
public class ShareGoodsServiceImpl implements ShareGoodsService {
   @Resource
   private PidUserMapper pidUserMapper;
   @Resource
   private TBPidService tbPidService;
   @Resource
   private UserShareGoodsHistoryMapper userShareGoodsHistoryMapper;
   @Resource
   private HongBaoManageMapper hongBaoManageMapper;
   @Resource
   private UserInfoMapper userinfoMapper;
@@ -99,18 +96,6 @@
   private HongBaoManageService hongBaoManageService;
   @Resource
   private UserShareGoodsRecordService userShareGoodsRecordService;
   @Resource
   private CommonGoodsService commonGoodsService;
   @Resource
   private UserMoneyExtraService userMoneyExtraService;
   @Resource
   private UserTaoLiJinRecordService userTaoLiJinRecordService;
   @Resource
   private UserTLJBuyHistoryService userTLJBuyHistoryService;
   @Resource
@@ -118,6 +103,18 @@
   @Resource
   private BusinessEmergent110Service businessEmergent110Service;
   @Resource
   private UserTaoLiJinNewbiesService userTaoLiJinNewbiesService;
   @Resource
   private ConvertLinkManager convertLinkManager;
   @Resource
   private TaoBaoGoodsCacheUtil taoBaoGoodsCacheUtil;
   @Resource
   private DaTaoKeGoodsDetailV2Service daTaoKeGoodsDetailV2Service;
   @Override
   public void addShareGoodsHistory(UserShareGoodsHistory history) {
@@ -204,10 +201,10 @@
      }
      UserShareGoodsHistory history = new UserShareGoodsHistory();
      history.setTkCode(tbLink.getTaoToken());
      history.setTkCode(TaoBaoUtil.filterTaoToken(tbLink.getTaoToken()));
      history.setLink(tbLink.getClickUrl());
      history.setQuanLink(tbLink.getCouponLink());
      history.setTkCode(tbLink.getTaoToken());
      history.setTkCode(TaoBaoUtil.filterTaoToken(tbLink.getTaoToken()));
      history.setCreateTime(new Date());
      history.setGoodsId(goods.getAuctionId());
@@ -246,7 +243,7 @@
         // throw new ShareGoodsException(4, "生成二维码失败");
         // }
         // 获取到用户的头像
         UserInfo user = userinfoMapper.selectByPrimaryKey(uid);
         UserInfo user = userinfoMapper.selectAvailableByPrimaryKey(uid);
         InputStream portrait = null;
         if (!StringUtil.isNullOrEmpty(user.getPortrait())) {
            try {
@@ -302,7 +299,8 @@
         }
         FileUploadResult shareImgResult = COSManager.getInstance().uploadInputStream(shareImgInputStream,
               "sharegoods/share_" + uid + "_" + goods.getAuctionId() + "_" + System.currentTimeMillis() + ".png");
               FilePathEnum.shareGoods.getPath() + "share_" + uid + "_" + goods.getAuctionId() + "_"
                     + System.currentTimeMillis() + ".png");
         if (shareImgResult == null || StringUtil.isNullOrEmpty(shareImgResult.getUrl())) {
            throw new ShareGoodsException(6, "分享图片保存失败");
@@ -366,16 +364,16 @@
         UserShareGoodsHistory history = new UserShareGoodsHistory();
         history.setId(userShareGoodsHistory.getId());
         history.setTkCode(tbLink.getTaoToken());
         history.setTkCode(TaoBaoUtil.filterTaoToken(tbLink.getTaoToken()));
         history.setLink(tbLink.getClickUrl());
         history.setQuanLink(tbLink.getCouponLink());
         history.setTkCode(tbLink.getTaoToken());
         history.setTkCode(TaoBaoUtil.filterTaoToken(tbLink.getTaoToken()));
         userShareGoodsHistoryMapper.updateByPrimaryKeySelective(history);
         userShareGoodsHistory.setTkCode(tbLink.getTaoToken());
         userShareGoodsHistory.setTkCode(TaoBaoUtil.filterTaoToken(tbLink.getTaoToken()));
         userShareGoodsHistory.setLink(tbLink.getClickUrl());
         userShareGoodsHistory.setQuanLink(tbLink.getCouponLink());
         userShareGoodsHistory.setTkCode(tbLink.getTaoToken());
         userShareGoodsHistory.setTkCode(TaoBaoUtil.filterTaoToken(tbLink.getTaoToken()));
      }
      return userShareGoodsHistory;
@@ -418,8 +416,6 @@
      }
      TaoBaoGoodsBrief goods = null;
      try {
         // 测试
         // info.setAdzoneId("123");
         goods = TaoKeApiUtil.searchGoodsDetail(auctionId, info);
      } catch (TaobaoGoodsDownException e) {
         throw new ShareGoodsException(4, "商品已下架");
@@ -430,14 +426,40 @@
      }
      if (StringUtil.isNullOrEmpty(goods.getCouponLink()) && !goods.getAuctionUrl().contains("s.click.taobao.com")) {
         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.getAuctionUrl());
      }
      String link = taoBaoGoodsCacheUtil.getBaseConvertLink(auctionId, info.getPid());
      if (link != null) {
         goods.setCouponLink(link);
      } else {// 缓存
         DaTaoKeFilterResult result = daTaoKeGoodsDetailV2Service.filterTaoBaoGoods(goods);
         if (result.getFilterType() == DaTaoKeFilterResult.FILTER_TYPE_COUPON
               || result.getFilterType() == DaTaoKeFilterResult.FILTER_TYPE_PRICE_AND_COUPON) {
            link = DaTaoKeApiUtil.convertLink(auctionId, info.getPid());
         } else if (goods.getCouponAmount() != null && goods.getCouponAmount().compareTo(new BigDecimal(0)) > 0) {// 有券
            link = DaTaoKeApiUtil.convertLink(auctionId, info.getPid());
         }
         if (!StringUtil.isNullOrEmpty(link)) {
            goods.setCouponLink(link);
            taoBaoGoodsCacheUtil.cacheBaseConvertLink(auctionId, info.getPid(), link);
         }
         if (StringUtil.isNullOrEmpty(link)) {
            TaoBaoGoodsBrief taoBaoLink = TaoKeApiUtil.specialConvertCoupon(auctionId, info);
            if (taoBaoLink == null) {
               throw new ShareGoodsException(201, "商品转链失败");
            }
            goods.setCouponLink(taoBaoLink.getCouponLink());
            goods.setAuctionUrl(taoBaoLink.getAuctionUrl());
         }
      }
      if (!StringUtil.isNullOrEmpty(relationId)) {
@@ -456,12 +478,14 @@
      tbLink.setCouponLink(goods.getCouponLink());
      if (!StringUtil.isNullOrEmpty(tbLink.getCouponLink())) {// 通过立即推广方式获取淘口令成功
         String quanToken = TaoKeApiUtil.getTKToken(goods.getPictUrl(), goods.getTitle(), tbLink.getCouponLink());
         String quanToken = convertLinkManager.createTaoBaoToken(uid, 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());
         String quanToken = convertLinkManager.createTaoBaoToken(uid, goods.getPictUrl(), goods.getTitle(),
               tbLink.getClickUrl());
         if (!StringUtil.isNullOrEmpty(quanToken)) {
            tbLink.setTaoToken(quanToken);
         }
@@ -473,7 +497,24 @@
      if (Constant.IS_OUTNET)
         redisManager.saveTaoBaoGoodsBriefTemp(goods);
      LogManager.getLogger(LogType.taobaoTrade)
            .info(String.format("淘宝商品分享\n UID:%s \n 商品ID:%s \n 券链接%s \n商品链接:%s \n 口令:%s ", uid, auctionId,
                  tbLink.getCouponLink(), tbLink.getClickUrl(), tbLink.getTaoToken()));
      return tbLink;
   }
   @Override
   public String createTaoBaoToken(Long uid, TaoBaoGoodsBrief goods) {
      String quanToken = "";
      if (!StringUtil.isNullOrEmpty(goods.getCouponLink())) {// 通过立即推广方式获取淘口令成功
         quanToken = convertLinkManager.createTaoBaoToken(uid, goods.getPictUrl(), goods.getTitle(),
               goods.getCouponLink());
      } else if (!StringUtil.isNullOrEmpty(goods.getAuctionUrl())) {
         quanToken = convertLinkManager.createTaoBaoToken(uid, goods.getPictUrl(), goods.getTitle(),
               goods.getAuctionUrl());
      }
      return quanToken;
   }
   @Override
@@ -562,17 +603,60 @@
      app.setAppKey(TaoBaoConstant.TAOBAO_AUTH_APPKEY);
      app.setAppSecret(TaoBaoConstant.TAOBAO_AUTH_APPSECRET);
      app.setPid(TaoBaoConstant.TAOBAO_SPECIAL_PID_DEFAULT);
      TaoBaoLink taoBaoLink = new TaoBaoLink();
      taoBaoLink.setAuctionId(auctionId);
      String baseUrl = taoBaoGoodsCacheUtil.getBaseConvertLink(auctionId, app.getPid());
      if (!StringUtil.isNullOrEmpty(baseUrl)) {
         taoBaoLink.setClickUrl(baseUrl);
         taoBaoLink.setCouponLink(baseUrl);
         return taoBaoLink;
      }
      // 查询是否为大淘客商品
      String link = null;
      try {
         link = DaTaoKeApiUtil.convertLink(auctionId, app.getPid());
      } catch (Exception e) {
      }
      DaTaoKeDetailV2 v2 = daTaoKeGoodsDetailV2Service.selectByAuctionId(auctionId);
      if (v2 != null) {
         try {
            TaoBaoGoodsBrief goods = redisManager.getTaoBaoGoodsBrief(auctionId);
            if (goods != null) {
               if (DaTaoKeUtil.canFilterCouponInfo(goods, v2)) {
                  // link = DaTaoKeApiUtil.convertLink(auctionId,
                  // app.getPid());
               }
            }
         } catch (TaobaoGoodsDownException e) {
            throw new ShareGoodsException(4, "商品ID不能为空");
         }
      }
      if (!StringUtil.isNullOrEmpty(link)) {
         taoBaoGoodsCacheUtil.cacheBaseConvertLink(auctionId, app.getPid(), link);
      }
      if (!StringUtil.isNullOrEmpty(link)) {
         taoBaoLink.setCouponLink(link);
         return taoBaoLink;
      }
      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);
      if (!StringUtil.isNullOrEmpty(goods.getYsylClickUrl()))
         taoBaoLink.setCouponLink(goods.getYsylClickUrl());
      taoBaoLink.setGoods(goods);
      return taoBaoLink;
   }
@@ -635,6 +719,29 @@
         goods.setAuctionUrl(taoBaoLink.getAuctionUrl());
      }
      String link = taoBaoGoodsCacheUtil.getBaseConvertLink(auctionId, info.getPid());
      if (link != null) {
         goods.setCouponLink(link);
      } else {// 缓存
         DaTaoKeFilterResult result = daTaoKeGoodsDetailV2Service.filterTaoBaoGoods(goods);
         if (result.getFilterType() == DaTaoKeFilterResult.FILTER_TYPE_COUPON
               || result.getFilterType() == DaTaoKeFilterResult.FILTER_TYPE_PRICE_AND_COUPON) {
            link = DaTaoKeApiUtil.convertLink(auctionId, info.getPid());
            if (!StringUtil.isNullOrEmpty(link)) {
               goods.setCouponLink(link);
               taoBaoGoodsCacheUtil.cacheBaseConvertLink(auctionId, info.getPid(), link);
            }
         }
         if (StringUtil.isNullOrEmpty(link)) {
            TaoBaoGoodsBrief taoBaoLink = TaoKeApiUtil.specialConvertCoupon(auctionId, info);
            if (taoBaoLink == null) {
               throw new ShareGoodsException(201, "商品转链失败");
            }
            goods.setCouponLink(taoBaoLink.getCouponLink());
            goods.setAuctionUrl(taoBaoLink.getAuctionUrl());
         }
      }
      if (!StringUtil.isNullOrEmpty(relationId)) {
         if (!StringUtil.isNullOrEmpty(goods.getAuctionUrl()))
            goods.setAuctionUrl(goods.getAuctionUrl() + "&relationId=" + relationId);
@@ -649,6 +756,8 @@
      tbLink.setAuctionId(goods.getAuctionId());
      tbLink.setClickUrl(goods.getAuctionUrl());
      tbLink.setCouponLink(goods.getCouponLink());
      if (!StringUtil.isNullOrEmpty(goods.getYsylClickUrl()))
         tbLink.setCouponLink(goods.getYsylClickUrl());
      if (!StringUtil.isNullOrEmpty(tbLink.getCouponLink())) {// 通过立即推广方式获取淘口令成功
         String quanToken = TaoKeApiUtil.getTKToken(goods.getPictUrl(), goods.getTitle(), tbLink.getCouponLink());
@@ -674,39 +783,28 @@
   @Override
   public TaoBaoLink getTaoLiJinLinkForBuy(Long uid, String specialId, Long auctionId, String pid)
         throws ShareGoodsException {
      if (uid == null || uid <= 0) {
      if (uid == null || uid <= 0)
         throw new ShareGoodsException(1, "用户ID不能为空");
      if (auctionId == null || auctionId <= 0)
         throw new ShareGoodsException(1, "商品ID不能为空");
      TaoBaoGoodsBrief goods = null;
      try {
         goods = TaoKeApiUtil.searchGoodsDetail(auctionId);
      } catch (TaobaoGoodsDownException e) {
         throw new ShareGoodsException(1, "该商品已下架");
      }
      if (auctionId == null || auctionId <= 0) {
         throw new ShareGoodsException(2, "商品ID不能为空");
      }
      // 用户剩余可以淘礼金验证
      UserMoneyExtra userMoneyExtra = userMoneyExtraService.selectByPrimaryKey(uid);
      if (userMoneyExtra == null || userMoneyExtra.getTlj() == null) {
         throw new ShareGoodsException(101, "红包余额不足");
      }
      TaoKeAppInfo app = new TaoKeAppInfo();
      app.setAppKey(TaoBaoConstant.TAOBAO_AUTH_APPKEY);
      app.setAppSecret(TaoBaoConstant.TAOBAO_AUTH_APPSECRET);
      if (pid == null)
         app.setPid(TaoBaoConstant.TAOBAO_SPECIAL_PID_DEFAULT);
      else
         app.setPid(pid);
      TaoBaoGoodsBrief goods = TaoKeApiUtil.specialConvertCoupon(auctionId, app);
      if (goods == null) {
         throw new ShareGoodsException(1, "");
      }
      if (goods == null)
         throw new ShareGoodsException(1, "该商品已下架");
      String taoLiJinLink = null;
      try {
         goods.setAuctionId(auctionId);
         UserTaoLiJinRecord createUserTaoLiJin = userTaoLiJinRecordService.createSelfBuyTaoLiJin(uid, 1, goods);
         taoLiJinLink = createUserTaoLiJin.getSendUrl();
      } catch (UserTaoLiJinRecordException e) {
         throw new ShareGoodsException(e.getCode(), e.getMsg());
         taoLiJinLink = userTaoLiJinNewbiesService.createTaoLiJinForBuy(goods, uid);
      } catch (UserTaoLiJinNewbiesException e1) {
         throw new ShareGoodsException(e1.getCode(), e1.getMsg());
      }
      TaoBaoLink taoBaoLink = new TaoBaoLink();
@@ -714,7 +812,6 @@
      taoBaoLink.setClickUrl(goods.getAuctionUrl());
      taoBaoLink.setCouponLink(taoLiJinLink);
      taoBaoLink.setGoods(goods);
      return taoBaoLink;
   }
@@ -822,7 +919,7 @@
         throw new ShareGoodsException(4, "商品已下架");
      }
      BigDecimal perface = TaoBaoUtil.getGoodsHongBaoMoney(goods, new BigDecimal(70));
      BigDecimal perface = TaoBaoUtil.getGoodsHongBaoMoney(goods, new BigDecimal(70), false);
      TaoLiJinDTO taoLiJinDTO = null;
      try {
         taoLiJinDTO = TaoKeApiUtil.createTaoLiJin(auctionId, "自购立减", perface, 1,