yujian
2019-08-27 d8359ddb48dab5cc797a9d552e11fde571f4920c
fanli/src/main/java/com/yeshi/fanli/controller/client/v2/GoodsControllerV2.java
@@ -3,10 +3,12 @@
import java.io.PrintWriter;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import javax.annotation.Resource;
import org.json.simple.JSONArray;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
@@ -14,9 +16,14 @@
import org.yeshi.utils.JsonUtil;
import org.yeshi.utils.taobao.TbImgUtil;
import com.yeshi.fanli.dto.jd.JDCouponInfo;
import com.yeshi.fanli.dto.pdd.PDDGoodsDetail;
import com.yeshi.fanli.dto.pdd.PDDGoodsResult;
import com.yeshi.fanli.dto.pdd.PDDPromotionUrl;
import com.yeshi.fanli.dto.pdd.PDDSearchFilter;
import com.yeshi.fanli.entity.accept.AcceptData;
import com.yeshi.fanli.entity.bus.user.ShamUser;
import com.yeshi.fanli.entity.bus.user.UserInfo;
import com.yeshi.fanli.entity.bus.user.UserMoneyExtra;
import com.yeshi.fanli.entity.goods.CollectionGoodsV2;
import com.yeshi.fanli.entity.jd.JDGoods;
@@ -51,6 +58,7 @@
import com.yeshi.fanli.service.inter.user.TBPidService;
import com.yeshi.fanli.service.inter.user.UserGoodsStorageService;
import com.yeshi.fanli.service.inter.user.UserInfoExtraService;
import com.yeshi.fanli.service.inter.user.UserInfoService;
import com.yeshi.fanli.service.inter.user.UserMoneyExtraService;
import com.yeshi.fanli.util.Constant;
import com.yeshi.fanli.util.RedisManager;
@@ -58,19 +66,25 @@
import com.yeshi.fanli.util.TaoBaoConstant;
import com.yeshi.fanli.util.ThreadUtil;
import com.yeshi.fanli.util.TimeUtil;
import com.yeshi.fanli.util.cache.JDGoodsCacheUtil;
import com.yeshi.fanli.util.cache.PinDuoDuoCacheUtil;
import com.yeshi.fanli.util.cache.TaoBaoGoodsCacheUtil;
import com.yeshi.fanli.util.factory.goods.GoodsDetailVOFactory;
import com.yeshi.fanli.util.factory.goods.ShopInfoVOFactory;
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.fanli.util.taobao.TaoBaoUtil;
import com.yeshi.fanli.util.taobao.TaoKeApiUtil;
import com.yeshi.fanli.util.taobao.TaoLiJinUtil;
import com.yeshi.fanli.vo.goods.CouponInfoVO;
import com.yeshi.fanli.vo.goods.GoodsDetailExtraVO;
import com.yeshi.fanli.vo.goods.GoodsDetailVO;
import com.yeshi.fanli.vo.goods.MoneyInfoVO;
import com.yeshi.fanli.vo.goods.OtherInfo;
import com.yeshi.fanli.vo.goods.ShareVO;
import com.yeshi.fanli.vo.goods.ShopInfoVO;
import com.yeshi.fanli.vo.msg.ClientTextStyleVO;
import com.yeshi.fanli.vo.tlj.ReduceHongBao;
import com.yeshi.fanli.vo.tlj.SpreadHongBao;
@@ -146,56 +160,29 @@
   @Resource
   private TLJBuyGoodsService tljBuyGoodsService;
   @Resource
   private UserInfoService userInfoService;
   @Resource
   private JDGoodsCacheUtil jdGoodsCacheUtil;
   @Resource
   private PinDuoDuoCacheUtil pinDuoDuoCacheUtil;
   /**
    * 获取商品详情
    * 淘宝商品详情
    * 
    * @param acceptData
    * @param id
    * @param source
    * @param uid
    * @param from
    * @param out
    */
   @RequestMapping(value = "getDetail", method = RequestMethod.POST)
   public void getDetail(AcceptData acceptData, Long id, Integer goodsType, Long uid, String from, PrintWriter out) {
   @RequestMapping(value = "getDetailTB", method = RequestMethod.POST)
   public void getDetialTB(AcceptData acceptData, Long id, Long uid, String from, PrintWriter out) {
      if (id == null) {
         out.print(JsonUtil.loadFalseResult(1, "商品id不能为空"));
         return;
      }
      // 淘宝商品
      if (goodsType == null || Constant.SOURCE_TYPE_TAOBAO == goodsType) {
         getTaoBaoGoodsDetial(acceptData, id, uid, from, out);
         return;
      }
      // 京东商品
      if (Constant.SOURCE_TYPE_JD == goodsType) {
         getJDGoodsDetial(acceptData, id, uid, from, out);
         return;
      }
      // 拼多多商品
      if (Constant.SOURCE_TYPE_PDD == goodsType) {
         getPDDGoodsDetial(acceptData, id, uid, from, out);
         return;
      }
   }
   /**
    * 淘宝商品详情
    * @param acceptData
    * @param id
    * @param uid
    * @param from
    * @param out
    */
   public void getTaoBaoGoodsDetial(AcceptData acceptData, Long id, Long uid, String from, PrintWriter out) {
      if (id == null) {
         out.print(JsonUtil.loadFalseResult(1, "请上传id"));
         return;
      }
@@ -343,12 +330,11 @@
      } catch (Exception e) {
         LogHelper.errorDetailInfo(e);
      }
      BigDecimal fanLiRate = hongBaoManageService.getFanLiRate();
      BigDecimal shareRate = hongBaoManageService.getShareRate();
      GoodsDetailVO goodsDetail = GoodsDetailVOFactory.convertTaoBao(goods, null, fanLiRate, shareRate);
      // 店铺信息
      TaoBaoShop shop = taoBaoShopService.getTaoBaoShop(id, goods.getSellerId());
      if (shop != null) {
@@ -358,7 +344,7 @@
         }
         goodsDetail.setShopInfo(ShopInfoVOFactory.convertTaoBaoShop(shop));
      }
      // 有券处理
      if (goodsDetail.isHasCoupon()) {
         if (!StringUtil.isNullOrEmpty(from)) {
@@ -369,22 +355,22 @@
            }
         }
      }
      extraVO.setTbPidInfo(clientTBPid);
      extraVO.setDetailUrl("http://apph5.yeshitv.com/apppage/goods_img.html?id=" + id);
      // 分享赚人提示
      MoneyInfoVO moneyInfo = goodsDetail.getMoneyInfo();
      List<ShamUser> listShareUser = new ArrayList<ShamUser>();
      if (moneyInfo != null) {
         String shareMoney = moneyInfo.getShareMoney();
         if (goods.getBiz30day() >= 1000) {
            listShareUser = shamUserService.listRandShareUser(10, new BigDecimal(shareMoney.replaceAll("¥", "")), 1, 5);
            listShareUser = shamUserService.listRandShareUser(10, new BigDecimal(shareMoney.replaceAll("¥", "")), 1,
                  5);
         }
      }
      extraVO.setListShareUser(listShareUser);
      // 领券人列表
      List<ShamUser> listCouponUser = new ArrayList<ShamUser>();
      if (!StringUtil.isNullOrEmpty(goods.getCouponInfo()) && goods.getCouponAmount() != null
@@ -394,8 +380,7 @@
         }
      }
      extraVO.setListCouponUser(listCouponUser);
      if (uid != null) {
         // 是否加入收藏
         CollectionGoodsV2 collectionGoods = collectionGoodsV2Service.findByUidAndAuctionId(uid, id,
@@ -405,17 +390,15 @@
         extraVO.setStorage(userGoodsStorageService.isExistStorage(uid, id, Constant.SOURCE_TYPE_TAOBAO));
      }
      // 测试
      SystemClientParams params = systemClientParamsService.getSystemClientParamsBySystemAndKey(system,
            "goods_detail_jump_taobao");
      if ("1".equalsIgnoreCase((params.getValue() + "").trim())) {
         extraVO.setIsNative(true);
      }
      }
      // 商品链接
      String h5Url = String.format("http://%s%s?id=%s&appType=flq", configService.getH5Host(),
            Constant.systemCommonConfig.getShareGoodsPagePath(), id + "");
      String h5Url = String.format("http://%s%s?uid=%s&id=%s&appType=flq", configService.getH5Host(),
            Constant.systemCommonConfig.getShareGoodsPagePath(), "", id + "");
      try {
         extraVO.setH5Url(HttpUtil.getShortLink(h5Url));
      } catch (Exception e) {
@@ -426,11 +409,11 @@
      boolean fanliValid = true;
      boolean shareValid = true;
      int moneyType = 1;
      // 推广红包
      if (from != null && from.equals("taolijin")) {
         // 计算推广红包
         String warningRate = configTaoLiJinService.getValueByKey("warning_value");
         String warningRate = configTaoLiJinService.getValueByKey("warning_value", new Date());
         BigDecimal spreadMoney = TaoLiJinUtil.getSpreadMoney(warningRate, goods);
         // 推广红包 不能小于1
@@ -439,8 +422,8 @@
            return;
         }
         // 是否为新用户
         boolean isNewUser = userInfoExtraService.isNewUser(uid);
         // 取消新用户自购
         boolean isNewUser = false;// userInfoExtraService.isNewUser(uid);
         if (isNewUser) {
            // 判定为老用户: 新人只要使用了新人红包,也就是那1块钱,那么,他看到的分享爆款中的商品-就只能分享。
            long countRecord = userTaoLiJinRecordService.countRecordByUid(uid);
@@ -451,12 +434,12 @@
         SpreadHongBao spreadHongBao = new SpreadHongBao();
         if (isNewUser) {
            spreadHongBao.setMoney("¥1");
            spreadHongBao.setMoney("1");
         } else {
            moneyType = 2;
            fanliValid = false;
            spreadHongBao.setMoney("¥" + spreadMoney.toString());
            spreadHongBao.setMoney(spreadMoney.toString());
            ClientTextStyleVO textStyleVO1 = new ClientTextStyleVO();
            textStyleVO1.setContent("分享");
            textStyleVO1.setColor("#666666");
@@ -477,12 +460,17 @@
            listText.add(textStyleVO4);
            extraVO.setTip(listText);
         }
         spreadHongBao.setName("推广红包 ");
         spreadHongBao.setTip("当日领取,当日内使用,过期失效");
         OtherInfo otherInfo = new OtherInfo();
         otherInfo.setSpreadHongBao(spreadHongBao);
         goodsDetail.setOtherInfo(otherInfo);
         goodsDetail.getMoneyInfo().setFanliMoney(TaoBaoUtil.getGoodsHongBaoInfo(goods,
               hongBaoManageService.getTLJShareRate(System.currentTimeMillis())));
         goodsDetail.getMoneyInfo().setShareMoney(TaoBaoUtil.getGoodsHongBaoInfo(goods,
               hongBaoManageService.getTLJShareRate(System.currentTimeMillis())));
         // 用户淘礼金
         UserMoneyExtra userMoneyExtra = userMoneyExtraService.selectByPrimaryKey(uid);
@@ -491,7 +479,7 @@
         } else {
            extraVO.setUserTLJ(userMoneyExtra.getTlj().setScale(2).toString());
         }
         helpLink = configTaoLiJinService.getValueByKey("share_goods_help_link");
         helpLink = configTaoLiJinService.getValueByKey("share_goods_help_link", new Date());
      } else if (from != null && from.equals("taolijin_buy")) {
         // 查询分享库
@@ -506,39 +494,35 @@
         fanliValid = true;
         shareValid = false;
         helpLink = configService.get("zigoulijian_nofanli_help");
         String tljHongBao = TaoBaoUtil.getGoodsHongBaoMoney(goods, new BigDecimal(70)).toString();
         ReduceHongBao reduceHongBao = new ReduceHongBao();
         reduceHongBao.setLeft(buyGoods.getLeftHongBaoCount());
         reduceHongBao.setMoney(tljHongBao);
         reduceHongBao.setName("付款立减 ¥" + tljHongBao);
         reduceHongBao.setName("付款立减 ");
         reduceHongBao.setTip("当日领取,当日内使用,过期失效");
         reduceHongBao.setTotal(buyGoods.getTotalHongBaoCount());
         OtherInfo otherInfo = new OtherInfo();
         otherInfo.setReduceHongBao(reduceHongBao);
         goodsDetail.setOtherInfo(otherInfo);
      }
      extraVO.setFanliValid(fanliValid);
      extraVO.setShareValid(shareValid);
      MoneyInfoVO goodsMoney = goodsDetail.getMoneyInfo();
      if (goodsMoney != null) {
         goodsMoney.setMoneyType(moneyType);
      }
      // 分享路径
      if (StringUtil.isNullOrEmpty(helpLink)) {
         helpLink = configService.get("no_rebate_help_link");
      }
      // 分享路径
      String shareUrl = String.format("%s?id=" + id, Constant.systemCommonConfig.getAppShareInfoUrl());
      ShareVO shareInfoVO = new ShareVO();
      shareInfoVO.setUrl(shareUrl);
      shareInfoVO.setHelpLink(helpLink);
      extraVO.setShare(shareInfoVO);
@@ -560,7 +544,6 @@
      });
   }
   /**
    * 京东商品详情
    * 
@@ -570,7 +553,8 @@
    * @param from
    * @param out
    */
   public void getJDGoodsDetial(AcceptData acceptData, Long id, Long uid, String from, PrintWriter out) {
   @RequestMapping(value = "getDetailJD", method = RequestMethod.POST)
   public void getDetialJD(AcceptData acceptData, Long id, Long uid, String from, PrintWriter out) {
      // 系统验证
      BusinessSystem system = businessSystemService.getBusinessSystemCache(acceptData.getPlatform(),
            acceptData.getPackages());
@@ -579,21 +563,46 @@
         return;
      }
      JDGoods jdGoods = JDApiUtil.queryGoodsDetail(id);
      JDGoods jdGoods = JDApiUtil.queryGoodsDetail(id); // 高级接口
      if (jdGoods == null) {
         jdGoods = JDApiUtil.getGoodsDetail(id);
         jdGoods = JDUtil.getGoodsDetail(id); // 爬取网页
         // jdGoods = JDApiUtil.getGoodsDetail(id); // 普通接口
      }
      if (jdGoods == null) {
         out.print(JsonUtil.loadFalseResult(2, "商品不存在"));
         return;
      }
      List<String> imageList = jdGoods.getImageList();
      if (imageList == null) {
         imageList = new ArrayList<String>();
         imageList.add(jdGoods.getPicUrl());
      }
      // 保存缓存
      jdGoodsCacheUtil.saveGoodsInfo(jdGoods);
      BigDecimal fanLiRate = hongBaoManageService.getFanLiRate();
      BigDecimal shareRate = hongBaoManageService.getShareRate();
      GoodsDetailVO goodsDetail = GoodsDetailVOFactory.convertJDGoods(jdGoods, null, fanLiRate, shareRate);
      GoodsDetailVO goodsDetail = GoodsDetailVOFactory.convertJDGoods(jdGoods, fanLiRate, shareRate);
      CouponInfoVO couponInfo = goodsDetail.getCouponInfo();
      if (couponInfo != null) {
         // 券链接处理
         String materialId = "https://item.jd.com/" + id + ".html";
         String url = JDApiUtil.convertLink(materialId, couponInfo.getLink(), JDApiUtil.POSITION_COUPON + "", null);
         couponInfo.setLink(url);
      }
      ShopInfoVO shopInfo = goodsDetail.getShopInfo();
      if (shopInfo != null) {
         if (shopInfo.getId() == null || shopInfo.getScoreGoods() == null || shopInfo.getScoreLogistics() == null
               || shopInfo.getScoreSeller() == null) {
            goodsDetail.setShopInfo(null);
         }
      }
      GoodsDetailExtraVO extraVO = new GoodsDetailExtraVO();
      extraVO.setIsNative(false);
      // IOS是否正在上线
@@ -637,8 +646,8 @@
      }
      // 图文详情
      extraVO.setDetailUrl("https://in.m.jd.com/product/jieshao/video/"+ id +".html");
      extraVO.setDetailUrl("https://in.m.jd.com/product/jieshao/video/" + id + ".html");
      // 测试
      SystemClientParams params = systemClientParamsService.getSystemClientParamsBySystemAndKey(system,
            "goods_detail_jump_taobao");
@@ -647,8 +656,8 @@
      }
      // 商品链接
      String h5Url = String.format("http://%s%s?id=%s&appType=flq&goodsType=%s", configService.getH5Host(),
            Constant.systemCommonConfig.getShareGoodsPagePath(), jdGoods.getSkuId() + "", Constant.SOURCE_TYPE_JD);
      String h5Url = String.format("http://%s%s?uid=%s&id=%s", configService.getH5Host(),
            Constant.systemCommonConfig.getShareGoodsPagePathJD(), "", id + "");
      try {
         extraVO.setH5Url(HttpUtil.getShortLink(h5Url));
      } catch (Exception e) {
@@ -662,11 +671,7 @@
         helpLink = configService.get("no_rebate_help_link");
      }
      // 分享路径
      String shareUrl = String.format("%s?id=" + jdGoods.getSkuId(),
            Constant.systemCommonConfig.getAppShareInfoUrl());
      ShareVO shareInfoVO = new ShareVO();
      shareInfoVO.setUrl(shareUrl);
      shareInfoVO.setHelpLink(helpLink);
      extraVO.setShare(shareInfoVO);
@@ -689,7 +694,7 @@
   }
   /**
    * 京东商品详情
    * 拼多多商品详情
    * 
    * @param acceptData
    * @param id
@@ -697,7 +702,8 @@
    * @param from
    * @param out
    */
   public void getPDDGoodsDetial(AcceptData acceptData, Long id, Long uid, String from, PrintWriter out) {
   @RequestMapping(value = "getDetailPDD", method = RequestMethod.POST)
   public void getDetialPDD(AcceptData acceptData, Long id, Long uid, String from, PrintWriter out) {
      // 系统验证
      BusinessSystem system = businessSystemService.getBusinessSystemCache(acceptData.getPlatform(),
            acceptData.getPackages());
@@ -714,7 +720,22 @@
      BigDecimal fanLiRate = hongBaoManageService.getFanLiRate();
      BigDecimal shareRate = hongBaoManageService.getShareRate();
      GoodsDetailVO goodsDetail = GoodsDetailVOFactory.convertPDDGoods(pddGoods, null, fanLiRate, shareRate);
      GoodsDetailVO goodsDetail = GoodsDetailVOFactory.convertPDDGoods(pddGoods, fanLiRate, shareRate);
      CouponInfoVO couponInfo = goodsDetail.getCouponInfo();
      PDDPromotionUrl convertUrl = null;
      if (couponInfo != null) {
         convertUrl = PinDuoDuoApiUtil.convert(id, PinDuoDuoApiUtil.PID_COUPON + "", null);
         if (convertUrl != null)
            couponInfo.setLink(convertUrl.getUrl());
      }
      ShopInfoVO shopInfo = goodsDetail.getShopInfo();
      if (shopInfo != null) {
         if (shopInfo.getId() == null || shopInfo.getScoreGoods() == null || shopInfo.getScoreLogistics() == null
               || shopInfo.getScoreSeller() == null) {
            goodsDetail.setShopInfo(null);
         }
      }
      GoodsDetailExtraVO extraVO = new GoodsDetailExtraVO();
      extraVO.setIsNative(false);
@@ -724,24 +745,41 @@
         extraVO.setIosOnling(configService.iosOnLining(Integer.parseInt(version)));
      }
      Long inOrderCount30Days = pddGoods.getSoldQuantity();
      List<ShamUser> listShareUser = new ArrayList<ShamUser>();
      MoneyInfoVO moneyInfo = goodsDetail.getMoneyInfo();
      if (moneyInfo != null) {
         String shareMoney = moneyInfo.getShareMoney().replaceAll("¥", "");
         if (Integer.parseInt(inOrderCount30Days.toString()) >= 50000) {
            listShareUser = shamUserService.listRandShareUser(10, new BigDecimal(shareMoney), 1, 5);
         }
      }
      extraVO.setListShareUser(listShareUser);
      // 图文详情
      extraVO.setDetailUrl("http://apph5.yeshitv.com/apppage/goods_img_pdd.html?id=" + id);
      // 领券人列表
      List<ShamUser> listCouponUser = new ArrayList<ShamUser>();
      if (goodsDetail.isHasCoupon() && Integer.parseInt(inOrderCount30Days.toString()) >= 50000) {
         listCouponUser = shamUserService.listRandCouponUser(5, 1, 300);
      String salesTip = pddGoods.getSalesTip();
      if (!StringUtil.isNullOrEmpty(salesTip)) {
         int indexOf = salesTip.indexOf("+");
         if (indexOf > 0) {
            salesTip = salesTip.substring(0, indexOf);
         }
         int totalSales = 0;
         if (salesTip.contains("万")) {
            salesTip = salesTip.substring(0, salesTip.indexOf("万"));
            totalSales = (int) (Float.parseFloat(salesTip) * 10000);
         } else {
            totalSales = Integer.parseInt(salesTip);
         }
         List<ShamUser> listShareUser = new ArrayList<ShamUser>();
         MoneyInfoVO moneyInfo = goodsDetail.getMoneyInfo();
         if (moneyInfo != null) {
            String shareMoney = moneyInfo.getShareMoney().replaceAll("¥", "");
            if (totalSales >= 50000) {
               listShareUser = shamUserService.listRandShareUser(10, new BigDecimal(shareMoney), 1, 5);
            }
         }
         extraVO.setListShareUser(listShareUser);
         // 领券人列表
         List<ShamUser> listCouponUser = new ArrayList<ShamUser>();
         if (goodsDetail.isHasCoupon() && totalSales >= 50000) {
            listCouponUser = shamUserService.listRandCouponUser(5, 1, 300);
         }
         extraVO.setListCouponUser(listCouponUser);
      }
      extraVO.setListCouponUser(listCouponUser);
      if (uid != null) {
         // 是否加入收藏
@@ -752,16 +790,11 @@
         extraVO.setStorage(userGoodsStorageService.isExistStorage(uid, id, Constant.SOURCE_TYPE_PDD));
      }
      // 测试
      SystemClientParams params = systemClientParamsService.getSystemClientParamsBySystemAndKey(system,
            "goods_detail_jump_taobao");
      if ("1".equalsIgnoreCase((params.getValue() + "").trim())) {
         extraVO.setIsNative(true);
      }
      extraVO.setIsNative(true);
      // 商品链接
      String h5Url = String.format("http://%s%s?id=%s&appType=flq&goodsType=%s", configService.getH5Host(),
            Constant.systemCommonConfig.getShareGoodsPagePath(), id + "", Constant.SOURCE_TYPE_PDD);
      // 分享路径
      String h5Url = String.format("http://%s%s?uid=%s&id=%s", configService.getH5Host(),
            Constant.systemCommonConfig.getShareGoodsPagePathPDD(), "", id + "");
      try {
         extraVO.setH5Url(HttpUtil.getShortLink(h5Url));
      } catch (Exception e) {
@@ -775,12 +808,15 @@
      if (StringUtil.isNullOrEmpty(helpLink)) {
         helpLink = configService.get("no_rebate_help_link");
      }
      // 分享路径
      String shareUrl = String.format("%s?id=" + id, Constant.systemCommonConfig.getAppShareInfoUrl());
      ShareVO shareInfoVO = new ShareVO();
      shareInfoVO.setUrl(shareUrl);
      shareInfoVO.setHelpLink(helpLink);
      extraVO.setShare(shareInfoVO);
      if (convertUrl != null) {
         extraVO.setCouponJumpLink(convertUrl.getUrl());
         extraVO.setNativeCouponJumpLink(PinDuoDuoUtil.getAndroidNativeURI(convertUrl.getUrl()));
      }
      JSONObject object = new JSONObject();
      object.put("extra", JsonUtil.getApiCommonGson().toJson(extraVO));
@@ -798,10 +834,9 @@
         }
      });
   }
   /**
    * 商品详情推荐(猜你喜欢  +  推荐)
    * 商品详情推荐(猜你喜欢 + 推荐)
    * 
    * @param acceptData
    * @param id
@@ -812,98 +847,303 @@
      if (goodsType == null) {
         goodsType = Constant.SOURCE_TYPE_TAOBAO;
      }
      // 京东
      if (goodsType == Constant.SOURCE_TYPE_JD) {
         JSONObject data = new JSONObject();
         data.put("listQuality", JsonUtil.getApiCommonGson().toJson(new ArrayList<GoodsDetailVO>()));
         data.put("listGuess", JsonUtil.getApiCommonGson().toJson(new ArrayList<GoodsDetailVO>()));
         out.print(JsonUtil.loadTrueResult(data));
         return;
      }
      // 拼多多
      if (goodsType == Constant.SOURCE_TYPE_PDD) {
         JSONObject data = new JSONObject();
         data.put("listQuality", JsonUtil.getApiCommonGson().toJson(new ArrayList<GoodsDetailVO>()));
         data.put("listGuess", JsonUtil.getApiCommonGson().toJson(new ArrayList<GoodsDetailVO>()));
         out.print(JsonUtil.loadTrueResult(data));
         return;
      }
      List<TaoBaoGoodsBrief> goodsList = TaoKeApiUtil.getRelationGoodsRecommend(id, 10);
      // 初始化
      if (goodsList == null) {
         goodsList = new ArrayList<TaoBaoGoodsBrief>();
      }
      List<GoodsDetailVO> listExtra = new ArrayList<GoodsDetailVO>();
      TaoKeAppInfo app = new TaoKeAppInfo();
      app.setAppKey(TaoBaoConstant.TAOBAO_AUTH_APPKEY);
      app.setAppSecret(TaoBaoConstant.TAOBAO_AUTH_APPSECRET);
      app.setAdzoneId(TaoBaoConstant.TAOBAO_SPECIAL_PID_DEFAULT.split("_")[3]);
      app.setPid(TaoBaoConstant.TAOBAO_SPECIAL_PID_DEFAULT);
      List<Long> ids = new ArrayList<>();
      for (TaoBaoGoodsBrief goods : goodsList)
         ids.add(goods.getAuctionId());
      try {
         goodsList = TaoKeApiUtil.getBatchGoodsInfo(ids);
      } catch (TaoKeApiException e1) {
         e1.printStackTrace();
      } catch (TaobaoGoodsDownException e1) {
         e1.printStackTrace();
      }
      if (goodsList != null && goodsList.size() > 0) {
         BigDecimal fanLiRate = hongBaoManageService.getFanLiRate();
         BigDecimal shareRate = hongBaoManageService.getShareRate();
         goodsList.parallelStream().forEach(goods -> {
            if (goods != null) {
               // 获取详情
               TaoBaoGoodsBrief taoBaoGoodsBrief = null;
               try {
                  taoBaoGoodsBrief = taoBaoGoodsCacheUtil.getCommonTaoBaoGoodsInfo(goods.getAuctionId());
               } catch (Exception e) {
                  e.printStackTrace();
               }
         // 京东
         if (goodsType == Constant.SOURCE_TYPE_JD) {
            JSONObject data = new JSONObject();
            data.put("listGuess", JsonUtil.getApiCommonGson().toJson(new ArrayList<GoodsDetailVO>()));
               if (taoBaoGoodsBrief == null) {
                  TaoBaoGoodsBrief newGoods = TaoKeApiUtil.specialConvertCoupon(goods.getAuctionId(), app);
                  goods.setCouponInfo(newGoods.getCouponInfo());
                  goods.setCouponLink(newGoods.getCouponLink());
                  goods.setTkRate(newGoods.getTkRate());
                  taoBaoGoodsBrief = goods;
               }
            List<JDGoods> list = JDUtil.getRecommendGoodsById(id);
            if (list == null) {
               list = new ArrayList<JDGoods>();
            } else if (list.size() > 10) {
               list = list.subList(0, 10);
            }
               if (taoBaoGoodsBrief != null) {
                  listExtra.add(GoodsDetailVOFactory.convertTaoBao(taoBaoGoodsBrief, null, fanLiRate, shareRate));
            BigDecimal fanLiRate = hongBaoManageService.getFanLiRate();
            BigDecimal shareRate = hongBaoManageService.getShareRate();
            List<GoodsDetailVO> listDetailVO = new ArrayList<GoodsDetailVO>();
            for (JDGoods goods : list) {
               listDetailVO.add(GoodsDetailVOFactory.convertJDGoods(goods, fanLiRate, shareRate));
            }
            // 取偶数个数据
            if (listDetailVO.size() % 2 != 0) {
               listDetailVO.remove(listDetailVO.size() - 1);
            }
            data.put("listQuality", JsonUtil.getApiCommonGson().toJson(listDetailVO));
            out.print(JsonUtil.loadTrueResult(data));
            return;
         }
         // 拼多多
         if (goodsType == Constant.SOURCE_TYPE_PDD) {
            JSONObject data = new JSONObject();
            data.put("listGuess", JsonUtil.getApiCommonGson().toJson(new ArrayList<GoodsDetailVO>()));
            List<GoodsDetailVO> listDetailVO = new ArrayList<GoodsDetailVO>();
            List<Long> goodsIdList = PinDuoDuoUtil.getRecommendGoodsId(id);
            if (goodsIdList != null && goodsIdList.size() > 0) {
               PDDSearchFilter pddfilter = new PDDSearchFilter();
               pddfilter.setPage(1);
               pddfilter.setPageSize(Constant.PAGE_SIZE);
               Long[] strings = new Long[goodsIdList.size()];
               pddfilter.setGoodsIdList(goodsIdList.toArray(strings));
               PDDGoodsResult result = PinDuoDuoApiUtil.searchGoods(pddfilter);
               if (result != null) {
                  List<PDDGoodsDetail> goodsList = result.getGoodsList();
                  if (goodsList != null && goodsList.size() > 0) {
                     if (goodsList.size() > 10) {
                        goodsList = goodsList.subList(0, 10);
                     }
                     BigDecimal fanLiRate = hongBaoManageService.getFanLiRate();
                     BigDecimal shareRate = hongBaoManageService.getShareRate();
                     for (PDDGoodsDetail goods : goodsList) {
                        listDetailVO.add(GoodsDetailVOFactory.convertPDDGoods(goods, fanLiRate, shareRate));
                     }
                  }
               }
            }
         });
            // 取偶数个数据
            if (listDetailVO.size() % 2 != 0) {
               listDetailVO.remove(listDetailVO.size() - 1);
            }
            data.put("listQuality", JsonUtil.getApiCommonGson().toJson(listDetailVO));
            out.print(JsonUtil.loadTrueResult(data));
            return;
         }
         List<TaoBaoGoodsBrief> goodsList = TaoKeApiUtil.getRelationGoodsRecommend(id, 10);
         // 初始化
         if (goodsList == null) {
            goodsList = new ArrayList<TaoBaoGoodsBrief>();
         }
         List<GoodsDetailVO> listExtra = new ArrayList<GoodsDetailVO>();
         TaoKeAppInfo app = new TaoKeAppInfo();
         app.setAppKey(TaoBaoConstant.TAOBAO_AUTH_APPKEY);
         app.setAppSecret(TaoBaoConstant.TAOBAO_AUTH_APPSECRET);
         app.setAdzoneId(TaoBaoConstant.TAOBAO_SPECIAL_PID_DEFAULT.split("_")[3]);
         app.setPid(TaoBaoConstant.TAOBAO_SPECIAL_PID_DEFAULT);
         List<Long> ids = new ArrayList<>();
         for (TaoBaoGoodsBrief goods : goodsList)
            ids.add(goods.getAuctionId());
         try {
            goodsList = TaoKeApiUtil.getBatchGoodsInfo(ids);
         } catch (TaoKeApiException e1) {
         } catch (TaobaoGoodsDownException e1) {
         }
         if (goodsList != null && goodsList.size() > 0) {
            BigDecimal fanLiRate = hongBaoManageService.getFanLiRate();
            BigDecimal shareRate = hongBaoManageService.getShareRate();
            goodsList.parallelStream().forEach(goods -> {
               if (goods != null) {
                  // 获取详情
                  TaoBaoGoodsBrief taoBaoGoodsBrief = null;
                  try {
                     taoBaoGoodsBrief = taoBaoGoodsCacheUtil.getCommonTaoBaoGoodsInfo(goods.getAuctionId());
                  } catch (Exception e) {
                     e.printStackTrace();
                  }
                  if (taoBaoGoodsBrief == null) {
                     TaoBaoGoodsBrief newGoods = TaoKeApiUtil.specialConvertCoupon(goods.getAuctionId(), app);
                     goods.setCouponInfo(newGoods.getCouponInfo());
                     goods.setCouponLink(newGoods.getCouponLink());
                     goods.setTkRate(newGoods.getTkRate());
                     taoBaoGoodsBrief = goods;
                  }
                  if (taoBaoGoodsBrief != null) {
                     listExtra.add(
                           GoodsDetailVOFactory.convertTaoBao(taoBaoGoodsBrief, null, fanLiRate, shareRate));
                  }
               }
            });
         }
         List<GoodsDetailVO> listQuality = new ArrayList<GoodsDetailVO>();
         // 取偶数个数据
         if (listExtra.size() % 2 != 0) {
            listExtra.remove(listExtra.size() - 1);
         }
         if (listQuality.size() % 2 != 0) {
            listQuality.remove(listQuality.size() - 1);
         }
         JSONObject data = new JSONObject();
         data.put("listQuality", JsonUtil.getApiCommonGson().toJson(listExtra));
         data.put("listGuess", JsonUtil.getApiCommonGson().toJson(listQuality));
         out.print(JsonUtil.loadTrueResult(data));
      } catch (Exception e) {
         LogHelper.errorDetailInfo(e);
         JSONObject data = new JSONObject();
         data.put("listQuality", new JSONArray());
         data.put("listGuess", new JSONArray());
         out.print(JsonUtil.loadTrueResult(data));
      }
      List<GoodsDetailVO> listQuality = new ArrayList<GoodsDetailVO>();
      // 取偶数个数据
      if (listExtra.size() % 2 != 0) {
         listExtra.remove(listExtra.size() - 1);
   }
   /**
    * 京东购买链接
    *
    * @param acceptData
    * @param uid
    * @param id
    * @param source
    * @param request
    * @param out
    */
   @RequestMapping(value = "getJDLink")
   public void getJDLink(AcceptData acceptData, Long uid, Long id, String source, PrintWriter out) {
      if (uid == null || uid <= 0) {
         out.print(JsonUtil.loadFalseResult(1, "用户ID不能为空"));
         return;
      }
      if (listQuality.size() % 2 != 0) {
         listQuality.remove(listQuality.size() - 1);
      if (id == null || id <= 0) {
         out.print(JsonUtil.loadFalseResult(1, "商品ID不能为空"));
         return;
      }
      UserInfo user = userInfoService.getUserByIdWithMybatis(uid);
      if (user != null && user.getState() != UserInfo.STATE_NORMAL) {
         out.print(JsonUtil.loadFalseResult(Constant.CODE_FORBIDDEN_USER, Constant.FORBIDDEN_USER_REASON_DESC));
         return;
      }
      JDGoods goods = jdGoodsCacheUtil.getGoodsInfo(id);
      if (goods == null) {
         out.print(JsonUtil.loadFalseResult(2, "商品已下架"));
         return;
      }
      String couponUrl = null;
      String materialId = "https://item.jd.com/" + id + ".html";
      JDCouponInfo couponInfo = goods.getCouponInfo();
      if (couponInfo != null) {
         couponUrl = couponInfo.getLink();
      }
      String jumpLink = JDApiUtil.convertLink(materialId, couponUrl, JDApiUtil.POSITION_FANLI + "", uid + "");
      JSONObject data = new JSONObject();
      data.put("listQuality", JsonUtil.getApiCommonGson().toJson(listExtra));
      data.put("listGuess", JsonUtil.getApiCommonGson().toJson(listQuality));
      data.put("native", true);
      data.put("jumpLink", jumpLink);
      out.print(JsonUtil.loadTrueResult(data));
   }
   /**
    * 拼多多购买链接
    *
    * @param acceptData
    * @param uid
    * @param id
    * @param source
    * @param request
    * @param out
    */
   @RequestMapping(value = "getPDDLink")
   public void getPDDLink(AcceptData acceptData, Long uid, Long id, String source, PrintWriter out) {
      if (uid == null || uid <= 0) {
         out.print(JsonUtil.loadFalseResult(1, "用户ID不能为空"));
         return;
      }
      if (id == null || id <= 0) {
         out.print(JsonUtil.loadFalseResult(1, "商品ID不能为空"));
         return;
      }
      UserInfo user = userInfoService.getUserByIdWithMybatis(uid);
      if (user != null && user.getState() != UserInfo.STATE_NORMAL) {
         out.print(JsonUtil.loadFalseResult(Constant.CODE_FORBIDDEN_USER, Constant.FORBIDDEN_USER_REASON_DESC));
         return;
      }
      PDDGoodsDetail goods = pinDuoDuoCacheUtil.getGoodsInfo(id);
      if (goods == null) {
         out.print(JsonUtil.loadFalseResult(2, "商品已下架"));
         return;
      }
      PDDPromotionUrl convertUrl = PinDuoDuoApiUtil.convert(id, PinDuoDuoApiUtil.PID_FANLI + "", uid + "");
      JSONObject data = new JSONObject();
      data.put("native", true);
      data.put("jumpLink", convertUrl.getUrl());
      data.put("nativeJumpLink", PinDuoDuoUtil.getAndroidNativeURI(convertUrl.getUrl()));
      out.print(JsonUtil.loadTrueResult(data));
   }
   /**
    * 是否在参与推广
    *
    * @param goodsId
    *            -商品ID
    * @param goodsType
    *            -TB/JD
    * @param out
    */
   @RequestMapping(value = "isGoodsExtend")
   public void isGoodsExtend(AcceptData acceptData, String goodsId, Integer goodsType, PrintWriter out) {
      if (StringUtil.isNullOrEmpty(goodsId)) {
         out.print(JsonUtil.loadFalseResult(1, "未参与推广"));
         return;
      }
      if (goodsType == null) {
         out.print(JsonUtil.loadFalseResult(2, "缺少goodsType"));
         return;
      }
      JSONObject data = new JSONObject();
      if (goodsType == Constant.SOURCE_TYPE_TAOBAO) {
         TaoBaoGoodsBrief goods = null;
         try {
            goods = TaoKeApiUtil.getSimpleGoodsInfo(Long.parseLong(goodsId));
         } catch (NumberFormatException e) {
            e.printStackTrace();
         } catch (TaobaoGoodsDownException e) {
            e.printStackTrace();
         }
         if (goods == null) {
            data.put("extend", false);
            data.put("url", "https://h5.m.taobao.com/awp/core/detail.htm?id=" + goodsId);
         } else {
            data.put("extend", true);
         }
      } else if (goodsType == Constant.SOURCE_TYPE_JD) {
         JDGoods goods = JDApiUtil.getGoodsDetail(Long.parseLong(goodsId));
         if (goods == null) {
            data.put("extend", false);
            data.put("url", String.format("https://item.m.jd.com/product/%s.html", goodsId));
         } else {
            data.put("extend", true);
         }
      } else if (goodsType == Constant.SOURCE_TYPE_PDD) {
         PDDGoodsDetail goods = PinDuoDuoApiUtil.getGoodsDetail(Long.parseLong(goodsId));
         if (goods == null) {
            data.put("extend", false);
            data.put("url", String.format("https://mobile.yangkeduo.com/goods.html?goods_id=%s", goodsId));
         } else {
            data.put("extend", true);
         }
      }
      out.print(JsonUtil.loadTrueResult(data));
   }
}