admin
2020-11-28 dc5be7d38446f70e6ff86df311119c32b41fe7f8
fanli/src/main/java/com/yeshi/fanli/controller/client/v2/GoodsControllerV2.java
@@ -3,18 +3,24 @@
import java.io.PrintWriter;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.annotation.Resource;
import com.yeshi.fanli.entity.SystemEnum;
import com.yeshi.fanli.entity.SystemFunction;
import com.yeshi.fanli.service.inter.user.tb.UserExtraTaoBaoInfoService;
import com.yeshi.fanli.util.*;
import org.json.simple.JSONArray;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.yeshi.utils.HttpUtil;
import org.yeshi.utils.JsonUtil;
import org.yeshi.utils.taobao.TbImgUtil;
import com.google.gson.Gson;
import com.yeshi.fanli.dto.ConfigParamsDTO;
import com.yeshi.fanli.dto.jd.JDCategoryInfo;
import com.yeshi.fanli.dto.jd.JDCouponInfo;
@@ -22,21 +28,33 @@
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.dto.suning.SuningGoodsInfo;
import com.yeshi.fanli.dto.suning.SuningGoodsInfoRecommend;
import com.yeshi.goods.facade.dto.taobao.dataoke.DaTaoKeFilterResult;
import com.yeshi.fanli.dto.vip.VIPConvertResultDTO;
import com.yeshi.fanli.dto.vip.goods.VIPGoodsInfo;
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.vip.UserLevelEnum;
import com.yeshi.fanli.entity.dynamic.CommentInfo;
import com.yeshi.fanli.entity.dynamic.GoodsEvaluate;
import com.yeshi.fanli.entity.dynamic.ImgInfo;
import com.yeshi.fanli.entity.dynamic.ImgInfo.ImgEnum;
import com.yeshi.fanli.entity.goods.CollectionGoodsV2;
import com.yeshi.fanli.entity.goods.CommonGoods;
import com.yeshi.fanli.entity.jd.JDGoods;
import com.yeshi.fanli.entity.jd.JDGoodsClass;
import com.yeshi.fanli.entity.system.BusinessSystem;
import com.yeshi.fanli.entity.system.ConfigKeyEnum;
import com.yeshi.fanli.entity.system.SystemClientParams;
import com.yeshi.fanli.entity.taobao.ClientTBPid;
import com.yeshi.fanli.entity.taobao.TLJBuyGoods;
import com.yeshi.fanli.entity.taobao.TLJFreeBuyGoods;
import com.yeshi.fanli.entity.taobao.TaoBaoGoodsBrief;
import com.yeshi.fanli.entity.taobao.TaoBaoShop;
import com.yeshi.goods.facade.entity.taobao.TaoBaoGoodsBrief;
import com.yeshi.common.entity.taobao.TaoBaoShop;
import com.yeshi.fanli.entity.taobao.TaoBaoUnionConfig;
import com.yeshi.fanli.entity.taobao.TaoKeAppInfo;
import com.yeshi.common.entity.taobao.TaoKeAppInfo;
import com.yeshi.fanli.exception.taobao.TaoKeApiException;
import com.yeshi.fanli.exception.taobao.TaobaoGoodsDownException;
import com.yeshi.fanli.exception.taobao.TaobaoGoodsUpdateException;
@@ -45,11 +63,13 @@
import com.yeshi.fanli.service.inter.config.BusinessSystemService;
import com.yeshi.fanli.service.inter.config.ConfigService;
import com.yeshi.fanli.service.inter.config.SystemClientParamsService;
import com.yeshi.fanli.service.inter.dynamic.GoodsEvaluateService;
import com.yeshi.fanli.service.inter.goods.CollectionGoodsV2Service;
import com.yeshi.fanli.service.inter.goods.ScanHistoryV2Service;
import com.yeshi.fanli.service.inter.goods.TaoBaoGoodsBriefService;
import com.yeshi.fanli.service.inter.jd.JDGoodsClassService;
import com.yeshi.fanli.service.inter.money.UserMoneyExtraService;
import com.yeshi.fanli.service.inter.order.OrderHongBaoMoneyComputeService;
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;
@@ -57,7 +77,7 @@
import com.yeshi.fanli.service.inter.taobao.TaoBaoGoodsUpdateService;
import com.yeshi.fanli.service.inter.taobao.TaoBaoShopService;
import com.yeshi.fanli.service.inter.taobao.TaoBaoUnionConfigService;
import com.yeshi.fanli.service.inter.taobao.dataoke.DaTaoKeGoodsDetailService;
import com.yeshi.goods.facade.service.DaTaoKeGoodsDetailV2Service;
import com.yeshi.fanli.service.inter.tlj.ConfigTaoLiJinService;
import com.yeshi.fanli.service.inter.user.ShamUserService;
import com.yeshi.fanli.service.inter.user.TBPidService;
@@ -65,25 +85,28 @@
import com.yeshi.fanli.service.inter.user.UserInfoExtraService;
import com.yeshi.fanli.service.inter.user.UserInfoService;
import com.yeshi.fanli.service.inter.user.integral.IntegralGetService;
import com.yeshi.fanli.util.Constant;
import com.yeshi.fanli.util.MoneyBigDecimalUtil;
import com.yeshi.fanli.util.RedisManager;
import com.yeshi.fanli.util.StringUtil;
import com.yeshi.fanli.util.TaoBaoConstant;
import com.yeshi.fanli.util.ThreadUtil;
import com.yeshi.fanli.util.TimeUtil;
import com.yeshi.fanli.util.VersionUtil;
import com.yeshi.fanli.service.inter.user.vip.UserVIPInfoService;
import com.yeshi.fanli.service.inter.user.vip.UserVipConfigService;
import com.yeshi.fanli.service.manger.user.UserLevelManager;
import org.yeshi.utils.MoneyBigDecimalUtil;
import org.yeshi.utils.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.goods.facade.utils.taobao.DaTaoKeApiUtil;
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.suning.SuningApiUtil;
import com.yeshi.fanli.util.suning.SuningUtil;
import com.yeshi.fanli.util.taobao.TaoBaoUtil;
import com.yeshi.fanli.util.taobao.TaoKeApiUtil;
import com.yeshi.fanli.util.user.UserLevelUtil;
import com.yeshi.fanli.util.vipshop.VipShopApiUtil;
import com.yeshi.fanli.util.vipshop.VipShopUtil;
import com.yeshi.fanli.vo.goods.CouponInfoVO;
import com.yeshi.fanli.vo.goods.GoodsDetailExtraVO;
import com.yeshi.fanli.vo.goods.GoodsDetailVO;
@@ -92,7 +115,7 @@
import com.yeshi.fanli.vo.goods.RewardCouponVO;
import com.yeshi.fanli.vo.goods.ShareVO;
import com.yeshi.fanli.vo.goods.ShopInfoVO;
import com.yeshi.fanli.vo.msg.ClientTextStyleVO;
import com.yeshi.common.vo.ClientTextStyleVO;
import com.yeshi.fanli.vo.tlj.NewUserHongBao;
import com.yeshi.fanli.vo.tlj.ReduceHongBao;
@@ -102,1162 +125,1958 @@
@RequestMapping("api/v2/goods")
public class GoodsControllerV2 {
   @Resource
   private BusinessSystemService businessSystemService;
    @Resource
    private BusinessSystemService businessSystemService;
   @Resource
   private ConfigService configService;
    @Resource
    private ConfigService configService;
   @Resource
   private TBPidService tbPidService;
    @Resource
    private TBPidService tbPidService;
   @Resource
   private TaoBaoGoodsCacheUtil taoBaoGoodsCacheUtil;
    @Resource
    private TaoBaoGoodsCacheUtil taoBaoGoodsCacheUtil;
   @Resource
   private RedisManager redisManager;
    @Resource
    private TaoBaoShopService taoBaoShopService;
   @Resource
   private TaoBaoShopService taoBaoShopService;
    @Resource
    private ShamUserService shamUserService;
   @Resource
   private ShamUserService shamUserService;
    @Resource
    private CollectionGoodsV2Service collectionGoodsV2Service;
   @Resource
   private CollectionGoodsV2Service collectionGoodsV2Service;
    @Resource
    private TaoBaoGoodsUpdateService taoBaoGoodsUpdateService;
   @Resource
   private TaoBaoGoodsBriefService taoBaoGoodsBriefService;
    @Resource
    private TaoBaoUnionConfigService taoBaoUnionConfigService;
   @Resource
   private TaoBaoGoodsUpdateService taoBaoGoodsUpdateService;
    @Resource
    private DaTaoKeGoodsDetailV2Service daTaoKeGoodsDetailV2Service;
   @Resource
   private TaoBaoUnionConfigService taoBaoUnionConfigService;
    @Resource
    private OrderHongBaoMoneyComputeService orderHongBaoMoneyComputeService;
   @Resource
   private DaTaoKeGoodsDetailService daTaoKeGoodsDetailService;
    @Resource
    private SystemClientParamsService systemClientParamsService;
   @Resource
   private HongBaoManageService hongBaoManageService;
    @Resource
    private UserGoodsStorageService userGoodsStorageService;
   @Resource
   private SystemClientParamsService systemClientParamsService;
    @Resource
    private ScanHistoryV2Service scanHistoryV2Service;
   @Resource
   private UserGoodsStorageService userGoodsStorageService;
    @Resource
    private TLJBuyGoodsService tljBuyGoodsService;
   @Resource
   private ConfigTaoLiJinService configTaoLiJinService;
    @Resource
    private UserInfoService userInfoService;
   @Resource
   private UserInfoExtraService userInfoExtraService;
    @Resource
    private JDGoodsCacheUtil jdGoodsCacheUtil;
   @Resource
   private UserMoneyExtraService userMoneyExtraService;
    @Resource
    private PinDuoDuoCacheUtil pinDuoDuoCacheUtil;
   @Resource
   private ScanHistoryV2Service scanHistoryV2Service;
    @Resource
    private IntegralGetService integralGetService;
   @Resource
   private TLJBuyGoodsService tljBuyGoodsService;
    @Resource
    private JumpDetailV2Service jumpDetailV2Service;
   @Resource
   private UserInfoService userInfoService;
    @Resource
    private JDGoodsClassService jdGoodsClassService;
   @Resource
   private JDGoodsCacheUtil jdGoodsCacheUtil;
    @Resource
    private TLJFreeBuyGoodsService tljFreeBuyGoodsService;
   @Resource
   private PinDuoDuoCacheUtil pinDuoDuoCacheUtil;
   @Resource
   private IntegralGetService integralGetService;
    @Resource
    private UserVIPInfoService userVIPInfoService;
   @Resource
   private JumpDetailV2Service jumpDetailV2Service;
    @Resource
    private UserVipConfigService userVipConfigService;
   @Resource
   private JDGoodsClassService jdGoodsClassService;
   @Resource
   private TLJFreeBuyGoodsService tljFreeBuyGoodsService;
   @Resource
   private UserTaoLiJinNewbiesService userTaoLiJinNewbiesService;
    @Resource
    private GoodsEvaluateService goodsEvaluateService;
   /**
    * 淘宝商品详情
    *
    * @param acceptData
    * @param id
    * @param uid
    * @param from
    * @param 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;
      }
    @Resource
    private UserLevelManager userLevelManager;
      BusinessSystem system = businessSystemService.getBusinessSystemCache(acceptData.getPlatform(),
            acceptData.getPackages());
      if (system == null) {
         out.print(JsonUtil.loadFalseResult(1, "系统不存在"));
         return;
      }
    @Resource
    private HongBaoManageService hongBaoManageService;
      GoodsDetailExtraVO extraVO = new GoodsDetailExtraVO();
      extraVO.setIsNative(false);
    @Resource
    private UserExtraTaoBaoInfoService userExtraTaoBaoInfoService;
      // IOS是否正在上线
      if ("ios".equalsIgnoreCase(acceptData.getPlatform())) {
         String version = acceptData.getVersion();
         extraVO.setIosOnling(configService.iosOnLining(Integer.parseInt(version)));
      }
    private ConfigParamsDTO getParamsDTO(String platform, String version, Long uid, SystemEnum system) {
        UserLevelEnum level = UserLevelEnum.daRen;
        if (uid != null && uid > 0) {
            level = userLevelManager.getUserLevel(uid);
            if (level != null) {
                if (System.currentTimeMillis() < Constant.NEW_ORDER_FANLI_RULE_TIME)
                    level = UserLevelUtil.getOldLevel(level);
            }
        }
        if (level == null)
            level = UserLevelEnum.daRen;
      long startTime = java.lang.System.currentTimeMillis();
        return orderHongBaoMoneyComputeService.getShowComputeRate(platform, version, level, system);
    }
      // 获取淘客参数
      ClientTBPid clientTBPid = null;
    private TaoBaoGoodsBrief filterDaTaoKeGoodsInfo(TaoBaoGoodsBrief goods) {
        try {
            DaTaoKeFilterResult result = daTaoKeGoodsDetailV2Service.filterTaoBaoGoods(goods);
            if (result.getFilterType() == DaTaoKeFilterResult.FILTER_TYPE_COUPON
                    || result.getFilterType() == DaTaoKeFilterResult.FILTER_TYPE_PRICE_AND_COUPON) {
                // 缓存基础链接
                String dpid = null;
                if (TaoBaoUtil.isSpecialGoods(goods.getMaterialLibType())) {
                    dpid = TaoBaoConstant.TAOBAO_SPECIAL_PID_DEFAULT;
                } else {
                    dpid = TaoBaoConstant.TAOBAO_RELATION_AS_SPECIAL_PID;
                }
                String link = taoBaoGoodsCacheUtil.getBaseConvertLink(goods.getAuctionId(), dpid);
                if (!StringUtil.isNullOrEmpty(link)) {
                    // result.getGoods().setCouponLink(link);
                    return result.getGoods();
                } else {
                    link = DaTaoKeApiUtil.convertLink(goods.getAuctionId(), dpid);
                    if (!StringUtil.isNullOrEmpty(link)) {
                        // result.getGoods().setCouponLink(link);
                        taoBaoGoodsCacheUtil.cacheBaseConvertLink(goods.getAuctionId(), dpid, link);
                    }
                    return result.getGoods();
                }
            }
        } catch (Exception e) {
            LogHelper.errorDetailInfo(e);
        }
      // 用户未登录
      if (acceptData.getPlatform().equalsIgnoreCase("android")) {
         clientTBPid = tbPidService.getAndroidDefault();
      } else {
         clientTBPid = tbPidService.getIOSDefault();
      }
        return goods;
    }
      LogHelper.test("获取PID耗时:" + (java.lang.System.currentTimeMillis() - startTime));
    /**
     * 淘宝商品详情
     *
     * @param acceptData
     * @param id
     * @param uid
     * @param from
     * @param 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;
        }
      final List<TaoBaoGoodsBrief> goodsList = new ArrayList<>();
      // 是否在服务端进行转链
      boolean convertInServer = configService.isConvertTaoBaoLinkInServer();
        BusinessSystem system = businessSystemService.getBusinessSystemCache(acceptData.getPlatform(),
                acceptData.getPackages(), acceptData.getSystem());
        if (system == null) {
            out.print(JsonUtil.loadFalseResult(1, "系统不存在"));
            return;
        }
      TaoBaoGoodsBrief goods = null;
        GoodsDetailExtraVO extraVO = new GoodsDetailExtraVO();
        extraVO.setIsNative(false);
      if (!convertInServer) {
         try {
            goods = taoBaoGoodsCacheUtil.getCommonTaoBaoGoodsInfo(id);
            if (goods == null) {
               TaoKeAppInfo app = new TaoKeAppInfo();
               app.setAppKey(TaoBaoConstant.TAOBAO_COMMON_APPKEY);
               app.setAppSecret(TaoBaoConstant.TAOBAO_COMMON_APPSECRET);
               app.setPid(TaoBaoConstant.TAOBAO_COMMON_PID);
               app.setAdzoneId(TaoBaoConstant.TAOBAO_COMMON_PID.split("_")[3]);
               goods = TaoKeApiUtil.searchGoodsDetail(id, app);
               final TaoBaoGoodsBrief finalGoods = goods;
               if (goods != null) {
                  ThreadUtil.run(new Runnable() {
                     @Override
                     public void run() {
                        taoBaoGoodsCacheUtil.saveCommonTaoBaoGoodsInfo(finalGoods);
                     }
                  });
               }
            }
         } catch (TaobaoGoodsDownException e) {
            // 商品下架
            ThreadUtil.run(new Runnable() {
               public void run() {
                  taoBaoGoodsUpdateService.offlineTaoBaoGoods(id);
               }
            });
         }
        // IOS是否正在上线
        if ("ios".equalsIgnoreCase(acceptData.getPlatform())) {
            String version = acceptData.getVersion();
            extraVO.setIosOnling(configService.iosOnLining(Integer.parseInt(version), acceptData.getSystem()));
        }
      } else {
         final String clientPid = clientTBPid.getPid();
         String appId = clientPid.split("_")[2];
         TaoBaoUnionConfig config = taoBaoUnionConfigService.getConfigByAppIdCache(appId);
         TaoKeAppInfo app = new TaoKeAppInfo();
         app.setAdzoneId(clientPid.split("_")[3]);
         app.setAppKey(config.getAppKey());
         app.setAppSecret(config.getAppSecret());
         app.setPid(clientPid);
        long startTime = java.lang.System.currentTimeMillis();
         try {
            goods = TaoKeApiUtil.searchGoodsDetail(id, app);
            if (goods.getTkRate() == null || new BigDecimal(0).compareTo(goods.getTkRate()) == 0) {
               TaoBaoGoodsBrief linkInfo = TaoKeApiUtil.specialConvertCoupon(goods.getAuctionId(), app);
               if (linkInfo != null) {
                  goods.setAuctionUrl(linkInfo.getAuctionUrl());
                  goods.setCouponLink(linkInfo.getCouponLink());
                  goods.setTkRate(linkInfo.getTkRate());
               }
            }
        // 获取淘客参数
        ClientTBPid clientTBPid = null;
         } catch (NumberFormatException e) {
            e.printStackTrace();
         } catch (TaobaoGoodsDownException e) {
            ThreadUtil.run(new Runnable() {
               public void run() {
                  taoBaoGoodsUpdateService.offlineTaoBaoGoods(id);
               }
            });
         }
        // 用户未登录
        if (acceptData.getPlatform().equalsIgnoreCase("android")) {
            clientTBPid = tbPidService.getAndroidDefault();
        } else {
            clientTBPid = tbPidService.getIOSDefault();
        }
      }
        LogHelper.test("获取PID耗时:" + (java.lang.System.currentTimeMillis() - startTime));
      if (goods != null) {
         goodsList.add(goods);
         final TaoBaoGoodsBrief newGoods = goods;
         ThreadUtil.run(new Runnable() {
            public void run() {
               try {
                  // 更新商品
                  LogHelper.test("更新商品详情:" + newGoods.getAuctionId());
                  taoBaoGoodsUpdateService.updateTaoBaoGoods(newGoods);
               } catch (TaobaoGoodsUpdateException e) {
        // final List<TaoBaoGoodsBrief> goodsList = new ArrayList<>();
        // 是否在服务端进行转链
        boolean convertInServer = configService.isConvertTaoBaoLinkInServer(acceptData.getSystem());
               }
            }
         });
      }
        TaoBaoGoodsBrief goods = null;
      TaoBaoGoodsBrief tb = null;
      if (goodsList.size() > 0) {
         tb = goodsList.get(0);
      }
        if (!convertInServer) {
            try {
                goods = taoBaoGoodsCacheUtil.getCommonTaoBaoGoodsInfo(id);
                if (goods == null) {
                    TaoKeAppInfo app = new TaoKeAppInfo();
                    app.setAppKey(TaoBaoConstant.TAOBAO_COMMON_APPKEY);
                    app.setAppSecret(TaoBaoConstant.TAOBAO_COMMON_APPSECRET);
                    app.setPid(TaoBaoConstant.TAOBAO_COMMON_PID);
                    app.setAdzoneId(TaoBaoConstant.TAOBAO_COMMON_PID.split("_")[3]);
                    goods = TaoKeApiUtil.searchGoodsDetail(id, app);
      if (tb == null) {
         out.print(JsonUtil.loadFalseResult(2, "商品不存在"));
         return;
      }
                    final TaoBaoGoodsBrief finalGoods = goods;
                    if (goods != null) {
                        ThreadUtil.run(new Runnable() {
                            @Override
                            public void run() {
                                taoBaoGoodsCacheUtil.saveCommonTaoBaoGoodsInfo(finalGoods);
                            }
                        });
                    }
                }
            } catch (TaobaoGoodsDownException e) {
                // 商品下架
                ThreadUtil.run(new Runnable() {
      if (tb.getImgList() == null) {
         tb.setImgList(new ArrayList<>());
      }
                    public void run() {
                        taoBaoGoodsUpdateService.offlineTaoBaoGoods(id);
                    }
                });
            }
      tb.getImgList().add(0, tb.getPictUrl());
        } else {
            final String clientPid = clientTBPid.getPid();
            String appId = clientPid.split("_")[2];
            TaoBaoUnionConfig config = taoBaoUnionConfigService.getConfigByAppIdCache(appId);
            TaoKeAppInfo app = new TaoKeAppInfo();
            app.setAdzoneId(clientPid.split("_")[3]);
            app.setAppKey(config.getAppKey());
            app.setAppSecret(config.getAppSecret());
            app.setPid(clientPid);
      List<String> finalImgList = new ArrayList<>();
      for (String img : tb.getImgList()) {
         finalImgList.add(TbImgUtil.getTBSizeImg(img, 600));
      }
      if (!StringUtil.isNullOrEmpty(tb.getPictUrlWhite()))
         finalImgList.add(0, tb.getPictUrlWhite());
            try {
                goods = TaoKeApiUtil.searchGoodsDetail(id, app);
                if (goods.getTkRate() == null || new BigDecimal(0).compareTo(goods.getTkRate()) == 0) {
                    TaoBaoGoodsBrief linkInfo = TaoKeApiUtil.specialConvertCoupon(goods.getAuctionId(), app, null, null);
                    if (linkInfo != null) {
                        goods.setAuctionUrl(linkInfo.getAuctionUrl());
                        goods.setCouponLink(linkInfo.getCouponLink());
                        goods.setTkRate(linkInfo.getTkRate());
                    }
                }
      // 大淘客商品过滤
      try {
         goods = daTaoKeGoodsDetailService.filterTaoBaoGoods(goods);
      } catch (Exception e) {
         LogHelper.errorDetailInfo(e);
      }
            } catch (NumberFormatException e) {
                e.printStackTrace();
            } catch (TaobaoGoodsDownException e) {
                ThreadUtil.run(new Runnable() {
                    public void run() {
                        taoBaoGoodsUpdateService.offlineTaoBaoGoods(id);
                    }
                });
            }
      BigDecimal fanLiRate = hongBaoManageService.getFanLiRate();
      BigDecimal shareRate = hongBaoManageService.getShareRate();
      ConfigParamsDTO paramsDTO = new ConfigParamsDTO(fanLiRate, shareRate, Constant.MAX_REWARD_RATE);
      GoodsDetailVO goodsDetail = GoodsDetailVOFactory.convertTaoBao(goods, paramsDTO);
        }
      if (TaoBaoUtil.isYUShou(goods)) {
         if (!StringUtil.isNullOrEmpty(goods.getPresaleDiscountFeeText())) {
            if (goodsDetail.getLabels() == null)
               goodsDetail.setLabels(new ArrayList<>());
            goodsDetail.getLabels().add(new ClientTextStyleVO(goods.getPresaleDiscountFeeText(), "#FF2B4E"));
         }
      }
      // 在标题添加优惠信息
        if (goods != null) {
            final TaoBaoGoodsBrief newGoods = goods;
            ThreadUtil.run(new Runnable() {
                public void run() {
                    try {
                        // 更新商品
                        LogHelper.test("更新商品详情:" + newGoods.getAuctionId());
                        taoBaoGoodsUpdateService.updateTaoBaoGoods(newGoods);
                    } catch (TaobaoGoodsUpdateException e) {
      // 店铺信息
      TaoBaoShop shop = taoBaoShopService.getTaoBaoShop(id, goods.getSellerId());
      if (shop != null) {
         String shopLink = shop.getShopLink();
         if (StringUtil.isNullOrEmpty(shopLink)) {
            shop.setShopLink(TaoBaoUtil.getShopLink(shop.getId()));
         }
         goodsDetail.setShopInfo(ShopInfoVOFactory.convertTaoBaoShop(shop));
      }
                    }
                }
            });
        }
      // 有券处理
      if (goodsDetail.isHasCoupon()) {
         if (!StringUtil.isNullOrEmpty(from)) {
            if ("miandan".equals(from)) { // 免单商品
               MoneyInfoVO moneyInfo = goodsDetail.getMoneyInfo();
               moneyInfo.setFanliMoney("¥" + goodsDetail.getCouponPrice());
               goodsDetail.setMoneyInfo(moneyInfo);
            }
         }
      }
        TaoBaoGoodsBrief tb = goods;
      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);
         }
      }
      extraVO.setListShareUser(listShareUser);
        if (tb == null) {
            out.print(JsonUtil.loadFalseResult(2, "商品不存在"));
            return;
        }
      // 领券人列表
      List<ShamUser> listCouponUser = new ArrayList<ShamUser>();
      if (!StringUtil.isNullOrEmpty(goods.getCouponInfo()) && goods.getCouponAmount() != null
            && goods.getCouponAmount().compareTo(new BigDecimal(0)) > 0) {
         if (goods.getBiz30day() >= 1000) {
            listCouponUser = shamUserService.listRandCouponUser(5, 1, 300);
         }
      }
      extraVO.setListCouponUser(listCouponUser);
        if (tb.getImgList() == null) {
            tb.setImgList(new ArrayList<>());
        }
      if (uid != null) {
         // 是否加入收藏
         CollectionGoodsV2 collectionGoods = collectionGoodsV2Service.findByUidAndAuctionId(uid, id,
               Constant.SOURCE_TYPE_TAOBAO);
         extraVO.setCollected(collectionGoods != null ? true : false);
         // 是否加入选品库
         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);
      }
        if (uid != null && uid > 0) {
            String specialId = userExtraTaoBaoInfoService.getSpecialIdByUid(uid);
            //获取最新的比例
            TaoBaoGoodsBrief rateGoods = TaoKeApiUtil.specialConvertCoupon(tb.getAuctionId(), TaoBaoConstant.getSpecialAuthAppInfo(), specialId, null);
            if (rateGoods != null)
                tb.setMinTkRate(rateGoods.getTkRate());
        }
      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) {
         extraVO.setH5Url(h5Url);
      }
      String helpLink = null;
      boolean fanliValid = true;
      boolean shareValid = true;
      int moneyType = 1;
        List<String> finalImgList = new ArrayList<>();
        for (String img : tb.getImgList()) {
            finalImgList.add(TbImgUtil.getTBSizeImg(img, 600));
        }
      if (from != null && from.equals("taolijin_buy")) {
         // 查询分享库
         TLJBuyGoods buyGoods = tljBuyGoodsService.selectByAuctionIdAndDay(id,
               TimeUtil.getGernalTime(System.currentTimeMillis(), "yyyy-MM-dd"));
         if (buyGoods == null) {
            out.print(JsonUtil.loadFalseResult(2, "自购立减红包过期"));
            return;
         }
        if (finalImgList.size() == 0) {
            finalImgList.add(tb.getPictUrl());
        }
         moneyType = 2;
         fanliValid = true;
         shareValid = false;
         helpLink = configService.get("zigoulijian_nofanli_help");
        if (!StringUtil.isNullOrEmpty(tb.getPictUrlWhite()))
            finalImgList.add(0, tb.getPictUrlWhite());
         BigDecimal tljHongBao = TaoBaoUtil.getGoodsHongBaoMoney(goods, TaoBaoConstant.OWN_BUY_WITHOUT_FANLI_RATE);
        // 移除相同图片
        if (finalImgList.size() > 0)
            for (int i = 0; i < finalImgList.size(); i++) {
                if (i < finalImgList.size() - 1)
                    if (TbImgUtil.getTBSizeImg(finalImgList.get(i), 600)
                            .equalsIgnoreCase(TbImgUtil.getTBSizeImg(finalImgList.get(i + 1), 600))) {
                        finalImgList.remove(i--);
                    }
            }
         ReduceHongBao reduceHongBao = new ReduceHongBao();
         reduceHongBao.setLeft(buyGoods.getLeftHongBaoCount());
         reduceHongBao.setMoney(tljHongBao.toString());
         reduceHongBao.setName("付款立减 ");
         reduceHongBao.setTip("当日领取,当日内使用,过期失效");
         reduceHongBao.setTotal(buyGoods.getTotalHongBaoCount());
        tb.setImgList(finalImgList);
         OtherInfo otherInfo = new OtherInfo();
         otherInfo.setReduceHongBao(reduceHongBao);
         goodsDetail.setOtherInfo(otherInfo);
        // 大淘客商品过滤
        try {
            goods = filterDaTaoKeGoodsInfo(goods);
        } catch (Exception e) {
            LogHelper.errorDetailInfo(e);
        }
        ConfigParamsDTO paramsDTO = getParamsDTO(acceptData.getPlatform(), acceptData.getVersion(), uid, acceptData.getSystem());
        paramsDTO.setBaseFanliRate(hongBaoManageService.getBaseFanliRate(acceptData.getSystem()));
        GoodsDetailVO goodsDetail = GoodsDetailVOFactory.convertTaoBao(goods, paramsDTO);
        if (goodsDetail != null && goodsDetail.getMoneyInfo() != null && userVIPInfoService.isVIP(uid)) {
            goodsDetail.getMoneyInfo().setFanliMoney(goodsDetail.getMoneyInfo().getMaxMoney());
            goodsDetail.getMoneyInfo().setShareMoney("¥" + TaoBaoUtil.getGoodsHongBaoMoney(goods,
                    hongBaoManageService.getShareRate(UserLevelEnum.superVIP, acceptData.getSystem()), true));
            goodsDetail.getMoneyInfo().setRateInfo(goodsDetail.getMoneyInfo().getMaxRateInfo());
            goodsDetail.getMoneyInfo().setCompositionInfo(goodsDetail.getMoneyInfo().getMaxCompositionInfo());
        }
        goodsDetail.getMoneyInfo()
                .setRateInfoHelpUrl(configService.getValue(ConfigKeyEnum.goodsDetailFanliRateHelpUrl.getKey(), acceptData.getSystem()));
        if (TaoBaoUtil.isYUShou(goods)) {
            if (!StringUtil.isNullOrEmpty(goods.getPresaleDiscountFeeText())) {
                if (goodsDetail.getLabels() == null)
                    goodsDetail.setLabels(new ArrayList<>());
                goodsDetail.getLabels().add(new ClientTextStyleVO(goods.getPresaleDiscountFeeText(), "#FF2B4E"));
            }
        }
        // 在标题添加优惠信息
        // 店铺信息
        TaoBaoShop shop = taoBaoShopService.getTaoBaoShop(id, goods.getSellerId());
        if (shop != null) {
            String shopLink = shop.getShopLink();
            if (StringUtil.isNullOrEmpty(shopLink)) {
                shop.setShopLink(TaoBaoUtil.getShopLink(shop.getId()));
            }
            goodsDetail.setShopInfo(ShopInfoVOFactory.convertTaoBaoShop(shop));
        }
        // 免单商品
        if (!StringUtil.isNullOrEmpty(from) && "miandan".equals(from)) {
            MoneyInfoVO moneyInfo = goodsDetail.getMoneyInfo();
            if (goodsDetail.isHasCoupon()) {
                moneyInfo.setFanliMoney("¥" + goodsDetail.getCouponPrice());
            } else {
                moneyInfo.setFanliMoney("¥" + goodsDetail.getZkPrice());
            }
            goodsDetail.setMoneyInfo(moneyInfo);
        }
        extraVO.setTbPidInfo(clientTBPid);
        extraVO.setDetailUrl("http://apph5.banliapp.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);
            }
        }
        extraVO.setListShareUser(listShareUser);
        // 领券人列表
        List<ShamUser> listCouponUser = new ArrayList<ShamUser>();
        if (!StringUtil.isNullOrEmpty(goods.getCouponInfo()) && goods.getCouponAmount() != null
                && goods.getCouponAmount().compareTo(new BigDecimal(0)) > 0) {
            if (goods.getBiz30day() >= 1000) {
                listCouponUser = shamUserService.listRandCouponUser(5, 1, 300);
            }
        }
        extraVO.setListCouponUser(listCouponUser);
        if (uid != null) {
            // 是否加入收藏
            CollectionGoodsV2 collectionGoods = collectionGoodsV2Service.findByUidAndAuctionId(uid, id,
                    Constant.SOURCE_TYPE_TAOBAO);
            extraVO.setCollected(collectionGoods != null ? true : false);
            // 是否加入选品库
            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?uid=%s&id=%s&appType=flq", configService.getH5Host(acceptData.getSystem()),
                Constant.systemCommonConfig.getShareGoodsPagePath(), "", id + "");
        extraVO.setH5Url(h5Url);
        String helpLink = null;
        boolean fanliValid = true;
        boolean shareValid = true;
        int moneyType = 1;
        if (from != null && from.equals("taolijin_buy")) {
            // 查询分享库
            TLJBuyGoods buyGoods = tljBuyGoodsService.selectByAuctionIdAndDay(id,
                    TimeUtil.getGernalTime(System.currentTimeMillis(), "yyyy-MM-dd"));
            if (buyGoods == null) {
                out.print(JsonUtil.loadFalseResult(2, "自购立减红包过期"));
                return;
            }
            moneyType = 2;
            fanliValid = true;
            shareValid = false;
            helpLink = configService.getValue(ConfigKeyEnum.zigoulijianNofanliHelp.getKey(), acceptData.getSystem());
            BigDecimal tljHongBao = TaoBaoUtil.getGoodsHongBaoMoney(goods, TaoBaoConstant.OWN_BUY_WITHOUT_FANLI_RATE,
                    false);
            ReduceHongBao reduceHongBao = new ReduceHongBao();
            reduceHongBao.setLeft(buyGoods.getLeftHongBaoCount());
            reduceHongBao.setMoney(tljHongBao.toString());
            reduceHongBao.setName("付款立减 ");
            reduceHongBao.setTip("当日领取,当日内使用,过期失效");
            reduceHongBao.setTotal(buyGoods.getTotalHongBaoCount());
            OtherInfo otherInfo = new OtherInfo();
            otherInfo.setReduceHongBao(reduceHongBao);
            goodsDetail.setOtherInfo(otherInfo);
            // 1.6.5后改为福利价
            if (com.yeshi.fanli.util.VersionUtil.greaterThan_1_6_5(acceptData.getPlatform(), acceptData.getVersion())) {
                if (goodsDetail.getCouponPrice() != null
                        && goodsDetail.getCouponPrice().compareTo(new BigDecimal(0)) > 0)
                    goodsDetail.setCouponPrice(goodsDetail.getCouponPrice().subtract(tljHongBao));
                else
                    goodsDetail.setZkPrice(goodsDetail.getZkPrice().subtract(tljHongBao));
            }
        } else if (from != null && from.equals("taolijin_free_buy")) {
            TLJFreeBuyGoods freeGoods = tljFreeBuyGoodsService.selectByAuctionIdAndDay(id,
                    TimeUtil.getGernalTime(System.currentTimeMillis(), "yyyy-MM-dd"));
            if (freeGoods == null) {
                out.print(JsonUtil.loadFalseResult(2, "免单商品已下架"));
                return;
            }
            fanliValid = true;
            shareValid = false;
            BigDecimal couponPrice = goodsDetail.getCouponPrice();
            if (couponPrice == null)
                couponPrice = goodsDetail.getZkPrice();
            NewUserHongBao newUserHongBao = new NewUserHongBao();
            newUserHongBao.setMoney(couponPrice.setScale(2).toString());
            newUserHongBao.setName("新人红包 ");
            newUserHongBao.setTip("当日领取,当日内使用,过期失效");
            newUserHongBao.setLeft(1);
            newUserHongBao.setTotal(1);
            OtherInfo otherInfo = new OtherInfo();
            otherInfo.setReduceHongBao(newUserHongBao);
            goodsDetail.setOtherInfo(otherInfo);
            // 专属标签
            List<ClientTextStyleVO> labels = new ArrayList<ClientTextStyleVO>();
            labels.add(new ClientTextStyleVO("新人专属", "#FE0014"));
            labels.add(new ClientTextStyleVO("实付0元", "#FF9600"));
            goodsDetail.setLabels(labels);
        } else {// 普通购买
            OtherInfo otherInfo = new OtherInfo();
            RewardCouponVO rewardCoupon = new RewardCouponVO();
            rewardCoupon.setJumpDetail(jumpDetailV2Service.getByTypeCache("web"));
            JSONObject params1 = new JSONObject();
            if (!VersionUtil.greaterThan_2_0_5(acceptData.getPlatform(), acceptData.getVersion()))
                params1.put("url", configService.getValue(ConfigKeyEnum.specialGuideRewardCouponLink.getKey(), acceptData.getSystem()));
            else
                params1.put("url", userVipConfigService.getValueByKey("vip_link"));
            rewardCoupon.setMaxMoney(goodsDetail.getMoneyInfo().getMaxMoney());
            if (VersionUtil.greaterThan_2_0_5(acceptData.getPlatform(), acceptData.getVersion())) {
                rewardCoupon.setDesc("返");
                params1.put("url", userVipConfigService.getValueByKey("vip_link"));
                rewardCoupon.getJumpDetail().setNeedLogin(true);
            } else
                rewardCoupon.setDesc("用返利奖励券最高返");
            rewardCoupon.setParams(params1.toString());
            otherInfo.setRewardCoupon(rewardCoupon);
            if ("ios".equalsIgnoreCase(acceptData.getPlatform())
                    && configService.iosOnLining(Integer.parseInt(acceptData.getVersion()), acceptData.getSystem()))
                otherInfo.setRewardCoupon(null);
            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.getValue(ConfigKeyEnum.noRebateHelpLink.getKey(), acceptData.getSystem());
        }
        // 分享路径
        ShareVO shareInfoVO = new ShareVO();
        shareInfoVO.setHelpLink(helpLink);
        extraVO.setShare(shareInfoVO);
        if (goodsDetail.isHasCoupon()) {
            // 设置couponList
            List<CouponInfoVO> couponInfoList = new ArrayList<>();
            couponInfoList.add(goodsDetail.getCouponInfo());
            goodsDetail.setCouponInfoList(couponInfoList);
        }
        if (VersionUtil.greaterThan_2_1_2(acceptData.getPlatform(), acceptData.getVersion())) {
            getCloudInfo(acceptData, uid, goodsDetail, extraVO);  // 云发单文案信息
        }
        JSONObject object = new JSONObject();
        object.put("extra", JsonUtil.getApiCommonGson().toJson(extraVO));
        object.put("goods", JsonUtil.getApiCommonGson().toJson(goodsDetail));
        out.print(JsonUtil.loadTrueResult(object.toString()));
        final TaoBaoGoodsBrief goodsInfo = tb;
        ThreadUtil.run(new Runnable() {
            public void run() {
                // 添加浏览记录
                try {
                    scanHistoryV2Service.addScanHistory(uid, acceptData.getDevice(), goodsInfo);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
    }
    /**
     * 京东商品详情
     *
     * @param acceptData
     * @param id
     * @param uid
     * @param from
     * @param out
     */
    @RequestMapping(value = "getDetailJD")
    public void getDetialJD(AcceptData acceptData, Long id, Long uid, String from, PrintWriter out) {
        // uid=2255993L;
        // 系统验证
        BusinessSystem system = businessSystemService.getBusinessSystemCache(acceptData.getPlatform(),
                acceptData.getPackages(), acceptData.getSystem());
        if (system == null) {
            out.print(JsonUtil.loadFalseResult(1, "系统不存在"));
            return;
        }
        JDGoods jdGoods = JDApiUtil.queryGoodsDetail(id); // 高级接口
        if (jdGoods == null) {
            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);
        ConfigParamsDTO paramsDTO = getParamsDTO(acceptData.getPlatform(), acceptData.getVersion(), uid, acceptData.getSystem());
        paramsDTO.setBaseFanliRate(hongBaoManageService.getBaseFanliRate(acceptData.getSystem()));
        GoodsDetailVO goodsDetail = GoodsDetailVOFactory.convertJDGoods(jdGoods, paramsDTO);
        if (goodsDetail != null && goodsDetail.getMoneyInfo() != null && userVIPInfoService.isVIP(uid)) {
            goodsDetail.getMoneyInfo().setFanliMoney(goodsDetail.getMoneyInfo().getMaxMoney());
            goodsDetail.getMoneyInfo().setShareMoney("¥"
                    + JDUtil.getGoodsFanLiMoney(jdGoods, hongBaoManageService.getShareRate(UserLevelEnum.superVIP, acceptData.getSystem())));
            goodsDetail.getMoneyInfo().setRateInfo(goodsDetail.getMoneyInfo().getMaxRateInfo());
            goodsDetail.getMoneyInfo().setCompositionInfo(goodsDetail.getMoneyInfo().getMaxCompositionInfo());
        }
        goodsDetail.getMoneyInfo()
                .setRateInfoHelpUrl(configService.getValue(ConfigKeyEnum.goodsDetailFanliRateHelpUrl.getKey(), acceptData.getSystem()));
        // 附加信息
        OtherInfo otherInfo = new OtherInfo();
        // 京东plus返利
        String maxMoneyPlus = null;
        JDCategoryInfo categoryInfo = jdGoods.getCategoryInfo();
        if (categoryInfo != null && categoryInfo.getCid3() != null && jdGoods.getCommissionInfo() != null) {
            Long cid3 = categoryInfo.getCid3();
            JDGoodsClass threeClass = jdGoodsClassService.getThreeClassByCid(Integer.parseInt(cid3.toString()));
            if (threeClass != null && threeClass.getSelfComm() != null
                    && threeClass.getSelfComm().compareTo(new BigDecimal(0)) > 0) {
                BigDecimal commissionShare = jdGoods.getCommissionInfo().getCommissionShare();
                // plus比例 小于正常比例
                if (commissionShare != null && commissionShare.compareTo(threeClass.getSelfComm()) > 0) {
                    jdGoods.setCommissionPlus(threeClass.getSelfComm());
                    // plus返利
                    BigDecimal fanliMoneyPlus = JDUtil.getGoodsFanLiMoneyPlus(jdGoods,
                            hongBaoManageService.getFanLiRate(acceptData.getSystem()));
                    otherInfo.setFanliMoneyPlus("京东plus返¥" + fanliMoneyPlus);
                    // 使用奖励券最高返
                    if (VersionUtil.greaterThan_2_0_5(acceptData.getPlatform(), acceptData.getVersion())) {
                        maxMoneyPlus = "(京东plus返¥" + JDUtil.getGoodsFanLiMoneyPlus(jdGoods,
                                hongBaoManageService.getFanLiRate(UserLevelEnum.superVIP, acceptData.getSystem())) + ")";
                    } else
                        maxMoneyPlus = "(京东plus最高返¥"
                                + fanliMoneyPlus.add(MoneyBigDecimalUtil.mul(fanliMoneyPlus, Constant.MAX_REWARD_RATE))
                                + ")";
                }
            }
        }
        // 奖励券返利
        RewardCouponVO rewardCoupon = new RewardCouponVO();
        rewardCoupon.setMaxMoneyPlus(maxMoneyPlus);
        rewardCoupon.setJumpDetail(jumpDetailV2Service.getByTypeCache("web"));
        JSONObject params1 = new JSONObject();
        if (!VersionUtil.greaterThan_2_0_5(acceptData.getPlatform(), acceptData.getVersion()))
            params1.put("url", configService.getValue(ConfigKeyEnum.specialGuideRewardCouponLink.getKey(), acceptData.getSystem()));
        else
            params1.put("url", userVipConfigService.getValueByKey("vip_link"));
        rewardCoupon.setMaxMoney(goodsDetail.getMoneyInfo().getMaxMoney());
        if (VersionUtil.greaterThan_2_0_5(acceptData.getPlatform(), acceptData.getVersion())) {
            rewardCoupon.setDesc("返");
            params1.put("url", userVipConfigService.getValueByKey("vip_link"));
            rewardCoupon.getJumpDetail().setNeedLogin(true);
        } else {
            rewardCoupon.setDesc("用返利奖励券最高返");
        }
        rewardCoupon.setParams(params1.toString());
        otherInfo.setRewardCoupon(rewardCoupon);
        if ("ios".equalsIgnoreCase(acceptData.getPlatform())
                && configService.iosOnLining(Integer.parseInt(acceptData.getVersion()), acceptData.getSystem()))
            otherInfo.setRewardCoupon(null);
        goodsDetail.setOtherInfo(otherInfo);
        CouponInfoVO couponInfo = goodsDetail.getCouponInfo();
        if (couponInfo != null) {
            // 券链接处理
            String materialId = "https://item.jd.com/" + id + ".html";
            String url = JDApiUtil.convertLinkWithSubUnionId(materialId, couponInfo.getLink(),null,
                    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是否正在上线
        if ("ios".equalsIgnoreCase(acceptData.getPlatform())) {
            String version = acceptData.getVersion();
            extraVO.setIosOnling(configService.iosOnLining(Integer.parseInt(version), acceptData.getSystem()));
        }
        Long inOrderCount30Days = jdGoods.getInOrderCount30Days();
        List<ShamUser> listShareUser = new ArrayList<ShamUser>();
        // 京东开启分享
        String open = configService.getValue(ConfigKeyEnum.shareOpenJD.getKey(), acceptData.getSystem());
        if ("1".equals(open.trim())) {
            extraVO.setShareValid(true);
            MoneyInfoVO moneyInfo = goodsDetail.getMoneyInfo();
            if (moneyInfo != null) {
                String shareMoney = moneyInfo.getShareMoney().replaceAll("¥", "");
                if (Integer.parseInt(inOrderCount30Days.toString()) >= 1000) {
                    listShareUser.addAll(shamUserService.listRandShareUser(10, new BigDecimal(shareMoney), 1, 5));
                }
            }
        }
        extraVO.setListShareUser(listShareUser);
        // 领券人列表
        List<ShamUser> listCouponUser = new ArrayList<ShamUser>();
        if (goodsDetail.isHasCoupon() && Integer.parseInt(inOrderCount30Days.toString()) >= 1000) {
            listCouponUser = shamUserService.listRandCouponUser(5, 1, 300);
        }
        extraVO.setListCouponUser(listCouponUser);
        if (uid != null) {
            // 是否加入收藏
            CollectionGoodsV2 collectionGoods = collectionGoodsV2Service.findByUidAndAuctionId(uid, id,
                    Constant.SOURCE_TYPE_JD);
            extraVO.setCollected(collectionGoods != null ? true : false);
            // 是否加入选品库
            extraVO.setStorage(userGoodsStorageService.isExistStorage(uid, id, Constant.SOURCE_TYPE_JD));
        }
        // 图文详情
        extraVO.setDetailUrl("https://in.m.jd.com/product/jieshao/video/" + id + ".html");
        // 测试
        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?uid=%s&id=%s", configService.getH5Host(acceptData.getSystem()),
                Constant.systemCommonConfig.getShareGoodsPagePathJD(), "", id + "");
        // try {
        // extraVO.setH5Url(HttpUtil.getShortLink(h5Url));
        // } catch (Exception e) {
        extraVO.setH5Url(h5Url);
        // }
        String helpLink = null;
        extraVO.setFanliValid(true);
        if (StringUtil.isNullOrEmpty(helpLink)) {
            helpLink = configService.getValue(ConfigKeyEnum.noRebateHelpLink.getKey(), acceptData.getSystem());
        }
        ShareVO shareInfoVO = new ShareVO();
        shareInfoVO.setHelpLink(helpLink);
        extraVO.setShare(shareInfoVO);
        if (VersionUtil.greaterThan_2_1_2(acceptData.getPlatform(), acceptData.getVersion())) {
            getCloudInfo(acceptData, uid, goodsDetail, extraVO);  // 云发单文案信息
        }
        JSONObject object = new JSONObject();
        object.put("extra", JsonUtil.getApiCommonGson().toJson(extraVO));
        object.put("goods", JsonUtil.getApiCommonGson().toJson(goodsDetail));
        out.print(JsonUtil.loadTrueResult(object.toString()));
        final JDGoods goods = jdGoods;
        final Long fuid = uid;
        ThreadUtil.run(new Runnable() {
            public void run() {
                // 添加浏览记录
                try {
                    scanHistoryV2Service.addJDScanHistory(fuid, acceptData.getDevice(), goods);
                } catch (Exception e) {
                    e.printStackTrace();
                }
                try {
                    goodsEvaluateService.updateJDGoods(goods);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
    }
    /**
     * 拼多多商品详情
     *
     * @param acceptData
     * @param id
     * @param uid
     * @param from
     * @param 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(), acceptData.getSystem());
        if (system == null) {
            out.print(JsonUtil.loadFalseResult(1, "系统不存在"));
            return;
        }
        PDDGoodsDetail pddGoods = PinDuoDuoApiUtil.getGoodsDetail(id,PinDuoDuoApiUtil.PID_FANLI,uid+"");
        if (pddGoods == null) {
            out.print(JsonUtil.loadFalseResult(2, "商品不存在"));
            return;
        }
        ConfigParamsDTO paramsDTO = getParamsDTO(acceptData.getPlatform(), acceptData.getVersion(), uid, acceptData.getSystem());
        paramsDTO.setBaseFanliRate(hongBaoManageService.getBaseFanliRate(acceptData.getSystem()));
        GoodsDetailVO goodsDetail = GoodsDetailVOFactory.convertPDDGoods(pddGoods, paramsDTO);
        if (goodsDetail != null && goodsDetail.getMoneyInfo() != null && userVIPInfoService.isVIP(uid)) {
            goodsDetail.getMoneyInfo().setFanliMoney(goodsDetail.getMoneyInfo().getMaxMoney());
            goodsDetail.getMoneyInfo().setShareMoney("¥" + PinDuoDuoUtil.getGoodsShareMoney(pddGoods,
                    hongBaoManageService.getShareRate(UserLevelEnum.superVIP, acceptData.getSystem())));
            goodsDetail.getMoneyInfo().setRateInfo(goodsDetail.getMoneyInfo().getMaxRateInfo());
            goodsDetail.getMoneyInfo().setCompositionInfo(goodsDetail.getMoneyInfo().getMaxCompositionInfo());
        }
        goodsDetail.getMoneyInfo()
                .setRateInfoHelpUrl(configService.getValue(ConfigKeyEnum.goodsDetailFanliRateHelpUrl.getKey(), acceptData.getSystem()));
        // 附加信息
        OtherInfo otherInfo = new OtherInfo();
        RewardCouponVO rewardCoupon = new RewardCouponVO();
        rewardCoupon.setJumpDetail(jumpDetailV2Service.getByTypeCache("web"));
        JSONObject params1 = new JSONObject();
        if (!VersionUtil.greaterThan_2_0_5(acceptData.getPlatform(), acceptData.getVersion()))
            params1.put("url", configService.getValue(ConfigKeyEnum.specialGuideRewardCouponLink.getKey(), acceptData.getSystem()));
        else
            params1.put("url", userVipConfigService.getValueByKey("vip_link"));
        rewardCoupon.setMaxMoney(goodsDetail.getMoneyInfo().getMaxMoney());
        if (VersionUtil.greaterThan_2_0_5(acceptData.getPlatform(), acceptData.getVersion())) {
            rewardCoupon.setDesc("返");
            params1.put("url", userVipConfigService.getValueByKey("vip_link"));
            rewardCoupon.getJumpDetail().setNeedLogin(true);
        } else
            rewardCoupon.setDesc("用返利奖励券最高返");
        rewardCoupon.setParams(params1.toString());
        otherInfo.setRewardCoupon(rewardCoupon);
        if ("ios".equalsIgnoreCase(acceptData.getPlatform())
                && configService.iosOnLining(Integer.parseInt(acceptData.getVersion()), acceptData.getSystem()))
            otherInfo.setRewardCoupon(null);
        goodsDetail.setOtherInfo(otherInfo);
        CouponInfoVO couponInfo = goodsDetail.getCouponInfo();
        PDDPromotionUrl convertUrl = null;
        if (couponInfo != null) {
            convertUrl = PinDuoDuoApiUtil.convert(id, PinDuoDuoApiUtil.PID_COUPON + "", null, false);
            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);
        // IOS是否正在上线
        if ("ios".equalsIgnoreCase(acceptData.getPlatform())) {
            String version = acceptData.getVersion();
            extraVO.setIosOnling(configService.iosOnLining(Integer.parseInt(version), acceptData.getSystem()));
        }
        // 图文详情
        extraVO.setDetailUrl("http://apph5.banliapp.com/apppage/goods_img_pdd.html?id=" + id);
        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);
        }
        if (uid != null) {
            // 是否加入收藏
            CollectionGoodsV2 collectionGoods = collectionGoodsV2Service.findByUidAndAuctionId(uid, id,
                    Constant.SOURCE_TYPE_PDD);
            extraVO.setCollected(collectionGoods != null ? true : false);
            // 是否加入选品库
            extraVO.setStorage(userGoodsStorageService.isExistStorage(uid, id, Constant.SOURCE_TYPE_PDD));
        }
        extraVO.setIsNative(true);
        // 分享路径
        String h5Url = String.format("http://%s%s?uid=%s&id=%s", configService.getH5Host(acceptData.getSystem()),
                Constant.systemCommonConfig.getShareGoodsPagePathPDD(), "", id + "");
        // try {
        // extraVO.setH5Url(HttpUtil.getShortLink(h5Url));
        // } catch (Exception e) {
        extraVO.setH5Url(h5Url);
        // }
        String helpLink = null;
        extraVO.setFanliValid(true);
        extraVO.setShareValid(true);
        if (StringUtil.isNullOrEmpty(helpLink)) {
            helpLink = configService.getValue(ConfigKeyEnum.noRebateHelpLink.getKey(), acceptData.getSystem());
        }
        ShareVO shareInfoVO = new ShareVO();
        shareInfoVO.setHelpLink(helpLink);
        extraVO.setShare(shareInfoVO);
        if (convertUrl != null) {
            extraVO.setCouponJumpLink(convertUrl.getUrl());
            extraVO.setNativeCouponJumpLink(PinDuoDuoUtil.getAndroidNativeURI(convertUrl.getUrl()));
        }
        if (VersionUtil.greaterThan_2_1_2(acceptData.getPlatform(), acceptData.getVersion())) {
            getCloudInfo(acceptData, uid, goodsDetail, extraVO); // 云发单文案信息
        }
        // 免单商品
        if (!StringUtil.isNullOrEmpty(from) && "miandan".equals(from)) {
            MoneyInfoVO moneyInfo = goodsDetail.getMoneyInfo();
            if (goodsDetail.isHasCoupon()) {
                moneyInfo.setFanliMoney("¥" + goodsDetail.getCouponPrice());
            } else {
                moneyInfo.setFanliMoney("¥" + goodsDetail.getZkPrice());
            }
            goodsDetail.setMoneyInfo(moneyInfo);
        }
        JSONObject object = new JSONObject();
        object.put("extra", JsonUtil.getApiCommonGson().toJson(extraVO));
        object.put("goods", JsonUtil.getApiCommonGson().toJson(goodsDetail));
        out.print(JsonUtil.loadTrueResult(object.toString()));
        ThreadUtil.run(new Runnable() {
            public void run() {
                // 添加浏览记录
                try {
                    scanHistoryV2Service.addPDDScanHistory(uid, acceptData.getDevice(), pddGoods);
                } catch (Exception e) {
                    e.printStackTrace();
                }
                try {
                    goodsEvaluateService.updatePDDGoods(pddGoods);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
    }
    /**
     * 唯品会详情
     *
     * @param acceptData
     * @param id
     * @param uid
     * @param from
     * @param out
     */
    @RequestMapping(value = "getDetailVIP", method = RequestMethod.POST)
    public void getDetialVIP(AcceptData acceptData, Long id, Long uid, String from, PrintWriter out) {
        // 系统验证
        BusinessSystem system = businessSystemService.getBusinessSystemCache(acceptData.getPlatform(),
                acceptData.getPackages(), acceptData.getSystem());
        if (system == null) {
            out.print(JsonUtil.loadFalseResult(1, "系统不存在"));
            return;
        }
        VIPGoodsInfo vipGoodsInfo = VipShopApiUtil.getGoodsDetail(id + "");
        if (vipGoodsInfo == null) {
            out.print(JsonUtil.loadFalseResult(2, "商品不存在"));
            return;
        }
        ConfigParamsDTO paramsDTO = getParamsDTO(acceptData.getPlatform(), acceptData.getVersion(), uid, acceptData.getSystem());
        paramsDTO.setBaseFanliRate(hongBaoManageService.getBaseFanliRate(acceptData.getSystem()));
        GoodsDetailVO goodsDetail = GoodsDetailVOFactory.convertVIPGoods(vipGoodsInfo, paramsDTO);
        if (goodsDetail != null && goodsDetail.getMoneyInfo() != null && userVIPInfoService.isVIP(uid)) {
            goodsDetail.getMoneyInfo().setFanliMoney(goodsDetail.getMoneyInfo().getMaxMoney());
            goodsDetail.getMoneyInfo().setShareMoney("¥" + VipShopUtil.getGoodsFanLiMoney(vipGoodsInfo,
                    hongBaoManageService.getShareRate(UserLevelEnum.superVIP, acceptData.getSystem())));
            goodsDetail.getMoneyInfo().setRateInfo(goodsDetail.getMoneyInfo().getMaxRateInfo());
            goodsDetail.getMoneyInfo().setCompositionInfo(goodsDetail.getMoneyInfo().getMaxCompositionInfo());
        }
        goodsDetail.getMoneyInfo()
                .setRateInfoHelpUrl(configService.getValue(ConfigKeyEnum.goodsDetailFanliRateHelpUrl.getKey(), acceptData.getSystem()));
        // 附加信息
        OtherInfo otherInfo = new OtherInfo();
        RewardCouponVO rewardCoupon = new RewardCouponVO();
        rewardCoupon.setJumpDetail(jumpDetailV2Service.getByTypeCache("web"));
        JSONObject params1 = new JSONObject();
        if (!VersionUtil.greaterThan_2_0_5(acceptData.getPlatform(), acceptData.getVersion()))
            params1.put("url", configService.getValue(ConfigKeyEnum.specialGuideRewardCouponLink.getKey(), acceptData.getSystem()));
        else
            params1.put("url", userVipConfigService.getValueByKey("vip_link"));
        rewardCoupon.setMaxMoney(goodsDetail.getMoneyInfo().getMaxMoney());
        rewardCoupon.setDesc("返");
        params1.put("url", userVipConfigService.getValueByKey("vip_link"));
        rewardCoupon.getJumpDetail().setNeedLogin(true);
        rewardCoupon.setParams(params1.toString());
        otherInfo.setRewardCoupon(rewardCoupon);
        if ("ios".equalsIgnoreCase(acceptData.getPlatform())
                && configService.iosOnLining(Integer.parseInt(acceptData.getVersion()), acceptData.getSystem()))
            otherInfo.setRewardCoupon(null);
        goodsDetail.setOtherInfo(otherInfo);
        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是否正在上线
        if ("ios".equalsIgnoreCase(acceptData.getPlatform())) {
            String version = acceptData.getVersion();
            extraVO.setIosOnling(configService.iosOnLining(Integer.parseInt(version), acceptData.getSystem()));
        }
        // 图文详情
        extraVO.setDetailUrl("http://apph5.banliapp.com/apppage/goods_img_pdd.html?id=" + id);
        if (uid != null) {
            // 是否加入收藏
            CollectionGoodsV2 collectionGoods = collectionGoodsV2Service.findByUidAndAuctionId(uid, id,
                    Constant.SOURCE_TYPE_VIP);
            extraVO.setCollected(collectionGoods != null ? true : false);
            // 是否加入选品库
            extraVO.setStorage(userGoodsStorageService.isExistStorage(uid, id, Constant.SOURCE_TYPE_VIP));
        }
        extraVO.setIsNative(true);
        // 分享路径
        String h5Url = String.format("http://%s%s?uid=%s&id=%s", configService.getH5Host(acceptData.getSystem()),
                Constant.systemCommonConfig.getShareGoodsPagePathPDD(), "", id + "");
        // try {
        // extraVO.setH5Url(HttpUtil.getShortLink(h5Url));
        // } catch (Exception e) {
        extraVO.setH5Url(h5Url);
        // }
        String helpLink = null;
        extraVO.setFanliValid(true);
        extraVO.setShareValid(true);
        if (StringUtil.isNullOrEmpty(helpLink)) {
            helpLink = configService.getValue(ConfigKeyEnum.noRebateHelpLink.getKey(), acceptData.getSystem());
        }
        ShareVO shareInfoVO = new ShareVO();
        shareInfoVO.setHelpLink(helpLink);
        extraVO.setShare(shareInfoVO);
        // 云发单文案信息
        getCloudInfo(acceptData, uid, goodsDetail, extraVO);
        JSONObject object = new JSONObject();
        object.put("extra", JsonUtil.getApiCommonGson().toJson(extraVO));
        object.put("goods", JsonUtil.getApiCommonGson().toJson(goodsDetail));
        out.print(JsonUtil.loadTrueResult(object.toString()));
        ThreadUtil.run(new Runnable() {
            public void run() {
                // 添加浏览记录
                try {
                    scanHistoryV2Service.addVIPScanHistory(uid, acceptData.getDevice(), vipGoodsInfo);
                } catch (Exception e) {
                    e.printStackTrace();
                }
                try {
                    goodsEvaluateService.updateVIPGoods(vipGoodsInfo);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
    }
    @RequestMapping(value = "getDetailSuning", method = RequestMethod.POST)
    public void getDetialSuning(AcceptData acceptData, String id, Long uid, String from, PrintWriter out) {
        // 系统验证
        BusinessSystem system = businessSystemService.getBusinessSystemCache(acceptData.getPlatform(),
                acceptData.getPackages(), acceptData.getSystem());
        if (system == null) {
            out.print(JsonUtil.loadFalseResult(1, "系统不存在"));
            return;
        }
        String[] ids = SuningUtil.getGoodsIdDetail(id);
        SuningGoodsInfo suningGoodsInfo = SuningApiUtil.getGoodsDetail(ids[1], ids[0]);
        if (suningGoodsInfo == null) {
            out.print(JsonUtil.loadFalseResult(2, "商品不存在"));
            return;
        }
        ConfigParamsDTO paramsDTO = getParamsDTO(acceptData.getPlatform(), acceptData.getVersion(), uid, acceptData.getSystem());
        paramsDTO.setBaseFanliRate(hongBaoManageService.getBaseFanliRate(acceptData.getSystem()));
        GoodsDetailVO goodsDetail = GoodsDetailVOFactory.convertSuningGoods(suningGoodsInfo, paramsDTO);
        if (goodsDetail != null && goodsDetail.getMoneyInfo() != null && userVIPInfoService.isVIP(uid)) {
            goodsDetail.getMoneyInfo().setFanliMoney(goodsDetail.getMoneyInfo().getMaxMoney());
            goodsDetail.getMoneyInfo().setShareMoney("¥" + SuningUtil.getGoodsFanLiMoney(suningGoodsInfo,
                    hongBaoManageService.getShareRate(UserLevelEnum.superVIP, acceptData.getSystem())));
            goodsDetail.getMoneyInfo().setRateInfo(goodsDetail.getMoneyInfo().getMaxRateInfo());
            goodsDetail.getMoneyInfo().setCompositionInfo(goodsDetail.getMoneyInfo().getMaxCompositionInfo());
        }
        goodsDetail.getMoneyInfo()
                .setRateInfoHelpUrl(configService.getValue(ConfigKeyEnum.goodsDetailFanliRateHelpUrl.getKey(), acceptData.getSystem()));
        // 附加信息
        OtherInfo otherInfo = new OtherInfo();
        RewardCouponVO rewardCoupon = new RewardCouponVO();
        rewardCoupon.setJumpDetail(jumpDetailV2Service.getByTypeCache("web"));
        JSONObject params1 = new JSONObject();
        params1.put("url", userVipConfigService.getValueByKey("vip_link"));
        rewardCoupon.setMaxMoney(goodsDetail.getMoneyInfo().getMaxMoney());
        rewardCoupon.setDesc("返");
        params1.put("url", userVipConfigService.getValueByKey("vip_link"));
        rewardCoupon.getJumpDetail().setNeedLogin(true);
         // 1.6.5后改为福利价
         if (com.yeshi.fanli.util.VersionUtil.greaterThan_1_6_5(acceptData.getPlatform(), acceptData.getVersion())) {
            if (goodsDetail.getCouponPrice() != null
                  && goodsDetail.getCouponPrice().compareTo(new BigDecimal(0)) > 0)
               goodsDetail.setCouponPrice(goodsDetail.getCouponPrice().subtract(tljHongBao));
            else
               goodsDetail.setZkPrice(goodsDetail.getZkPrice().subtract(tljHongBao));
         }
      } else if (from != null && from.equals("taolijin_free_buy")) {
         TLJFreeBuyGoods freeGoods = tljFreeBuyGoodsService.selectByAuctionIdAndDay(id, TimeUtil.getGernalTime(System.currentTimeMillis(), "yyyy-MM-dd"));
         if (freeGoods == null) {
            out.print(JsonUtil.loadFalseResult(2, "免单商品已下架"));
            return;
         }
        rewardCoupon.setParams(params1.toString());
        otherInfo.setRewardCoupon(rewardCoupon);
        if ("ios".equalsIgnoreCase(acceptData.getPlatform())
                && configService.iosOnLining(Integer.parseInt(acceptData.getVersion()), acceptData.getSystem()))
            otherInfo.setRewardCoupon(null);
        goodsDetail.setOtherInfo(otherInfo);
         fanliValid = true;
         shareValid = false;
         BigDecimal couponPrice = goodsDetail.getCouponPrice();
         if (couponPrice == null)
            couponPrice = goodsDetail.getZkPrice();
         NewUserHongBao newUserHongBao = new NewUserHongBao();
         newUserHongBao.setMoney(couponPrice.setScale(2).toString());
         newUserHongBao.setName("新人红包 ");
         newUserHongBao.setTip("当日领取,当日内使用,过期失效");
         newUserHongBao.setLeft(1);
         newUserHongBao.setTotal(1);
        ShopInfoVO shopInfo = goodsDetail.getShopInfo();
        if (shopInfo != null) {
            if (shopInfo.getId() == null || shopInfo.getScoreGoods() == null || shopInfo.getScoreLogistics() == null
                    || shopInfo.getScoreSeller() == null) {
                goodsDetail.setShopInfo(null);
            }
        }
         OtherInfo otherInfo = new OtherInfo();
         otherInfo.setReduceHongBao(newUserHongBao);
         goodsDetail.setOtherInfo(otherInfo);
      } else {// 普通购买
         OtherInfo otherInfo = new OtherInfo();
         RewardCouponVO rewardCoupon = new RewardCouponVO();
         rewardCoupon.setJumpDetail(jumpDetailV2Service.getByTypeCache("web"));
         JSONObject params1 = new JSONObject();
         params1.put("url", configService.get("special_guide_reward_coupon_link"));
        GoodsDetailExtraVO extraVO = new GoodsDetailExtraVO();
        extraVO.setIsNative(false);
        // IOS是否正在上线
        if ("ios".equalsIgnoreCase(acceptData.getPlatform())) {
            String version = acceptData.getVersion();
            extraVO.setIosOnling(configService.iosOnLining(Integer.parseInt(version), acceptData.getSystem()));
        }
         rewardCoupon.setMaxMoney("¥" + TaoBaoUtil.getGoodsHongBaoMoney(goods, fanLiRate).add(MoneyBigDecimalUtil
               .mul(TaoBaoUtil.getGoodsHongBaoMoney(goods, fanLiRate), Constant.MAX_REWARD_RATE)));
         if (VersionUtil.greaterThan_2_1(acceptData.getPlatform(), acceptData.getVersion())) {
            rewardCoupon.setDesc("返");
            params1.put("url", configService.get("vip_link"));
            rewardCoupon.getJumpDetail().setNeedLogin(true);
         } else
            rewardCoupon.setDesc("用返利奖励券最高返");
         rewardCoupon.setParams(params1.toString());
         otherInfo.setRewardCoupon(rewardCoupon);
         goodsDetail.setOtherInfo(otherInfo);
      }
      extraVO.setFanliValid(fanliValid);
      extraVO.setShareValid(shareValid);
        // 图文详情
        extraVO.setDetailUrl("http://apph5.banliapp.com/apppage/goods_img_suning.html?id="
                + suningGoodsInfo.getCommodityInfo().getCommodityCode() + "&supplierCode="
                + suningGoodsInfo.getCommodityInfo().getSupplierCode());
      MoneyInfoVO goodsMoney = goodsDetail.getMoneyInfo();
      if (goodsMoney != null) {
         goodsMoney.setMoneyType(moneyType);
      }
        if (uid != null) {
            // 是否加入收藏
            CollectionGoodsV2 collectionGoods = collectionGoodsV2Service.findByUidAndAuctionId(uid,
                    Long.parseLong(suningGoodsInfo.getCommodityInfo().getCommodityCode()), Constant.SOURCE_TYPE_SUNING);
            extraVO.setCollected(collectionGoods != null ? true : false);
            // 是否加入选品库
            extraVO.setStorage(userGoodsStorageService.isExistStorage(uid,
                    Long.parseLong(suningGoodsInfo.getCommodityInfo().getCommodityCode()),
                    Constant.SOURCE_TYPE_SUNING));
        }
      // 分享路径
      if (StringUtil.isNullOrEmpty(helpLink)) {
         helpLink = configService.get("no_rebate_help_link");
      }
        extraVO.setIsNative(true);
      // 分享路径
      ShareVO shareInfoVO = new ShareVO();
      shareInfoVO.setHelpLink(helpLink);
      extraVO.setShare(shareInfoVO);
        // 分享路径
        String h5Url = String.format("http://%s%s?uid=%s&id=%s", configService.getH5Host(acceptData.getSystem()),
                Constant.systemCommonConfig.getShareGoodsPagePathPDD(), "", id + "");
        // try {
        // extraVO.setH5Url(HttpUtil.getShortLink(h5Url));
        // } catch (Exception e) {
        extraVO.setH5Url(h5Url);
        // }
      JSONObject object = new JSONObject();
      object.put("extra", JsonUtil.getApiCommonGson().toJson(extraVO));
      object.put("goods", JsonUtil.getApiCommonGson().toJson(goodsDetail));
      out.print(JsonUtil.loadTrueResult(object.toString()));
        String helpLink = null;
        extraVO.setFanliValid(true);
        extraVO.setShareValid(true);
      final TaoBaoGoodsBrief goodsInfo = tb;
      ThreadUtil.run(new Runnable() {
         public void run() {
            // 添加浏览记录
            try {
               scanHistoryV2Service.addScanHistory(uid, acceptData.getDevice(), goodsInfo);
            } catch (Exception e) {
               e.printStackTrace();
            }
         }
      });
   }
        if (StringUtil.isNullOrEmpty(helpLink)) {
            helpLink = configService.getValue(ConfigKeyEnum.noRebateHelpLink.getKey(), acceptData.getSystem());
        }
   /**
    * 京东商品详情
    *
    * @param acceptData
    * @param id
    * @param uid
    * @param from
    * @param 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());
      if (system == null) {
         out.print(JsonUtil.loadFalseResult(1, "系统不存在"));
         return;
      }
        ShareVO shareInfoVO = new ShareVO();
        shareInfoVO.setHelpLink(helpLink);
        extraVO.setShare(shareInfoVO);
      JDGoods jdGoods = JDApiUtil.queryGoodsDetail(id); // 高级接口
      if (jdGoods == null) {
         jdGoods = JDUtil.getGoodsDetail(id); // 爬取网页
         // jdGoods = JDApiUtil.getGoodsDetail(id); // 普通接口
      }
        // 云发单文案信息
        getCloudInfo(acceptData, uid, goodsDetail, extraVO);
      if (jdGoods == null) {
         out.print(JsonUtil.loadFalseResult(2, "商品不存在"));
         return;
      }
        JSONObject object = new JSONObject();
        object.put("extra", JsonUtil.getApiCommonGson().toJson(extraVO));
        object.put("goods", JsonUtil.getApiCommonGson().toJson(goodsDetail));
        out.print(JsonUtil.loadTrueResult(object.toString()));
      List<String> imageList = jdGoods.getImageList();
      if (imageList == null) {
         imageList = new ArrayList<String>();
         imageList.add(jdGoods.getPicUrl());
      }
        ThreadUtil.run(new Runnable() {
            public void run() {
                // 添加浏览记录
                try {
                    scanHistoryV2Service.addSuningScanHistory(uid, acceptData.getDevice(), suningGoodsInfo);
                } catch (Exception e) {
                    e.printStackTrace();
                }
      // 保存缓存
      jdGoodsCacheUtil.saveGoodsInfo(jdGoods);
                try {
                    goodsEvaluateService.updateSuningGoods(suningGoodsInfo);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
    }
      BigDecimal fanLiRate = hongBaoManageService.getFanLiRate();
      BigDecimal shareRate = hongBaoManageService.getShareRate();
      ConfigParamsDTO paramsDTO = new ConfigParamsDTO(fanLiRate, shareRate, Constant.MAX_REWARD_RATE);
      GoodsDetailVO goodsDetail = GoodsDetailVOFactory.convertJDGoods(jdGoods, paramsDTO);
    /**
     * // 云发单文案信息
     *
     * @param goodsDetail
     */
    private void getCloudInfo(AcceptData acceptData, Long uid, GoodsDetailVO goodsDetail, GoodsDetailExtraVO extraVO) {
        // 云发单是否开启
        boolean cloudOpen = configService.isRobotCloudOpen(ConfigKeyEnum.robotCloudOpenGoodsDetail.getKey(), acceptData.getPlatform(), acceptData.getVersion(), acceptData.getSystem());
        if (!cloudOpen && uid != null) {
            List<String> testUsers = configService.getTestUsers(acceptData.getSystem());
            if (testUsers != null && testUsers.contains(uid + "")) {
                cloudOpen = true;
            }
        }
        extraVO.setCloudOpen(cloudOpen);
      // 附加信息
      OtherInfo otherInfo = new OtherInfo();
        // 无券或者未开启发圈
        if (!goodsDetail.isHasCoupon() || !cloudOpen) {
            return;
        }
      // 京东plus返利
      String maxMoneyPlus = null;
      JDCategoryInfo categoryInfo = jdGoods.getCategoryInfo();
      if (categoryInfo != null && categoryInfo.getCid3() != null && jdGoods.getCommissionInfo() != null) {
         Long cid3 = categoryInfo.getCid3();
         JDGoodsClass threeClass = jdGoodsClassService.getThreeClassByCid(Integer.parseInt(cid3.toString()));
         if (threeClass != null && threeClass.getSelfComm() != null
               && threeClass.getSelfComm().compareTo(new BigDecimal(0)) > 0) {
            BigDecimal commissionShare = jdGoods.getCommissionInfo().getCommissionShare();
            // plus比例 小于正常比例
            if (commissionShare != null && commissionShare.compareTo(threeClass.getSelfComm()) > 0) {
               jdGoods.setCommissionPlus(threeClass.getSelfComm());
               // plus返利
               BigDecimal fanliMoneyPlus = JDUtil.getGoodsFanLiMoneyPlus(jdGoods, fanLiRate);
               otherInfo.setFanliMoneyPlus("京东plus会员返¥" + fanliMoneyPlus);
               // 使用奖励券最高返
               if (VersionUtil.greaterThan_2_1(acceptData.getPlatform(), acceptData.getVersion())) {
                  maxMoneyPlus = "(京东plus返¥"
                        + fanliMoneyPlus.add(MoneyBigDecimalUtil.mul(fanliMoneyPlus, Constant.MAX_REWARD_RATE))
                        + ")";
               } else
                  maxMoneyPlus = "(京东plus会员最高返¥"
                        + fanliMoneyPlus.add(MoneyBigDecimalUtil.mul(fanliMoneyPlus, Constant.MAX_REWARD_RATE))
                        + ")";
            }
         }
      }
        GoodsEvaluate evaluate = goodsEvaluateService.queryExistSingle(goodsDetail.getGoodsId() + "", goodsDetail.getGoodsType(), acceptData.getSystem());
        if (evaluate != null) {
            String cloudText = null;
            List<CommentInfo> comments = evaluate.getComments();
            if (comments != null && comments.size() > 0) {
                cloudText = comments.get(0).getContent();
            }
      // 奖励券返利
      RewardCouponVO rewardCoupon = new RewardCouponVO();
      rewardCoupon.setMaxMoneyPlus(maxMoneyPlus);
      rewardCoupon.setJumpDetail(jumpDetailV2Service.getByTypeCache("web"));
      JSONObject params1 = new JSONObject();
      params1.put("url", configService.get("special_guide_reward_coupon_link"));
            String cloudPic = null;
            List<ImgInfo> imgList = evaluate.getImgList();
            if (imgList != null && imgList.size() > 0) {
                for (ImgInfo imgInfo : imgList) {
                    ImgEnum type = imgInfo.getType();
                    if (type == ImgEnum.goods) {
                        cloudPic = imgInfo.getUrl();
                    }
                }
            }
      rewardCoupon.setMaxMoney("¥" + JDUtil.getGoodsFanLiMoney(jdGoods, fanLiRate)
            .add(MoneyBigDecimalUtil.mul(JDUtil.getGoodsFanLiMoney(jdGoods, fanLiRate), Constant.MAX_REWARD_RATE)));
      if (VersionUtil.greaterThan_2_1(acceptData.getPlatform(), acceptData.getVersion())) {
         rewardCoupon.setDesc("返");
         params1.put("url", configService.get("vip_link"));
         rewardCoupon.getJumpDetail().setNeedLogin(true);
      } else {
         rewardCoupon.setDesc("用返利奖励券最高返");
      }
      rewardCoupon.setParams(params1.toString());
      otherInfo.setRewardCoupon(rewardCoupon);
      goodsDetail.setOtherInfo(otherInfo);
            if (!StringUtil.isNullOrEmpty(cloudText) && !StringUtil.isNullOrEmpty(cloudPic)) {
      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);
      }
                cloudText = cloudText.replace("[原价]", MoneyBigDecimalUtil.getWithNoZera(goodsDetail.getZkPrice()) + "");
                if (!goodsDetail.isHasCoupon()) {
                    cloudText = cloudText.replace("领券抢购", "抢购");
                    cloudText = cloudText.replace("【券后价】[券后价]元", "");
                } else {
                    cloudText = cloudText.replace("[券后价]", MoneyBigDecimalUtil.getWithNoZera(goodsDetail.getCouponPrice()) + "");
                }
                cloudText = cloudText.replace("\r\n\r\n", "\r\n").replace("\r\n\r\n", "\r\n").replace("\r\n\r\n", "\r\n");
      ShopInfoVO shopInfo = goodsDetail.getShopInfo();
      if (shopInfo != null) {
         if (shopInfo.getId() == null || shopInfo.getScoreGoods() == null || shopInfo.getScoreLogistics() == null
               || shopInfo.getScoreSeller() == null) {
            goodsDetail.setShopInfo(null);
         }
      }
                extraVO.setCloudPic(cloudPic);
                extraVO.setCloudText(cloudText);
            }
        }
    }
      GoodsDetailExtraVO extraVO = new GoodsDetailExtraVO();
      extraVO.setIsNative(false);
      // IOS是否正在上线
      if ("ios".equalsIgnoreCase(acceptData.getPlatform())) {
         String version = acceptData.getVersion();
         extraVO.setIosOnling(configService.iosOnLining(Integer.parseInt(version)));
      }
    /**
     * 商品详情推荐(猜你喜欢 + 推荐)
     *
     * @param acceptData
     * @param id
     * @param out
     */
    @RequestMapping(value = "getRecommendGoods", method = RequestMethod.POST)
    public void getRecommendGoods(AcceptData acceptData, String id, Integer goodsType, PrintWriter out) {
        if (goodsType == null) {
            goodsType = Constant.SOURCE_TYPE_TAOBAO;
        }
      Long inOrderCount30Days = jdGoods.getInOrderCount30Days();
      List<ShamUser> listShareUser = new ArrayList<ShamUser>();
        try {
            // 京东
            if (goodsType == Constant.SOURCE_TYPE_JD) {
                JSONObject data = new JSONObject();
                data.put("listGuess", JsonUtil.getApiCommonGson().toJson(new ArrayList<GoodsDetailVO>()));
      // 京东开启分享
      String open = configService.get("share_jd_open");
      if ("1".equals(open.trim())) {
         extraVO.setShareValid(true);
         MoneyInfoVO moneyInfo = goodsDetail.getMoneyInfo();
         if (moneyInfo != null) {
            String shareMoney = moneyInfo.getShareMoney().replaceAll("¥", "");
            if (Integer.parseInt(inOrderCount30Days.toString()) >= 1000) {
               listShareUser.addAll(shamUserService.listRandShareUser(10, new BigDecimal(shareMoney), 1, 5));
            }
         }
      }
                List<JDGoods> list = JDUtil.getRecommendGoodsById(Long.parseLong(id));
                if (list == null) {
                    list = new ArrayList<JDGoods>();
                } else if (list.size() > 10) {
                    list = list.subList(0, 10);
                }
      extraVO.setListShareUser(listShareUser);
                ConfigParamsDTO paramsDTO = getParamsDTO(acceptData.getPlatform(), acceptData.getVersion(), null, acceptData.getSystem());
                List<GoodsDetailVO> listDetailVO = new ArrayList<GoodsDetailVO>();
      // 领券人列表
      List<ShamUser> listCouponUser = new ArrayList<ShamUser>();
      if (goodsDetail.isHasCoupon() && Integer.parseInt(inOrderCount30Days.toString()) >= 1000) {
         listCouponUser = shamUserService.listRandCouponUser(5, 1, 300);
      }
      extraVO.setListCouponUser(listCouponUser);
                for (JDGoods goods : list) {
                    listDetailVO.add(GoodsDetailVOFactory.convertJDGoods(goods, paramsDTO));
                }
      if (uid != null) {
         // 是否加入收藏
         CollectionGoodsV2 collectionGoods = collectionGoodsV2Service.findByUidAndAuctionId(uid, id,
               Constant.SOURCE_TYPE_JD);
         extraVO.setCollected(collectionGoods != null ? true : false);
         // 是否加入选品库
         extraVO.setStorage(userGoodsStorageService.isExistStorage(uid, id, Constant.SOURCE_TYPE_JD));
      }
                // 取偶数个数据
                if (listDetailVO.size() % 2 != 0) {
                    listDetailVO.remove(listDetailVO.size() - 1);
                }
      // 图文详情
      extraVO.setDetailUrl("https://in.m.jd.com/product/jieshao/video/" + id + ".html");
                data.put("listQuality", JsonUtil.getApiCommonGson().toJson(listDetailVO));
                out.print(JsonUtil.loadTrueResult(data));
                return;
            }
      // 测试
      SystemClientParams params = systemClientParamsService.getSystemClientParamsBySystemAndKey(system,
            "goods_detail_jump_taobao");
      if ("1".equalsIgnoreCase((params.getValue() + "").trim())) {
         extraVO.setIsNative(true);
      }
            // 拼多多
            if (goodsType == Constant.SOURCE_TYPE_PDD) {
                JSONObject data = new JSONObject();
                data.put("listGuess", JsonUtil.getApiCommonGson().toJson(new ArrayList<GoodsDetailVO>()));
      // 商品链接
      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) {
         extraVO.setH5Url(h5Url);
      }
                List<GoodsDetailVO> listDetailVO = new ArrayList<GoodsDetailVO>();
      String helpLink = null;
      extraVO.setFanliValid(true);
                List<Long> goodsIdList = PinDuoDuoUtil.getRecommendGoodsId(Long.parseLong(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));
      if (StringUtil.isNullOrEmpty(helpLink)) {
         helpLink = configService.get("no_rebate_help_link");
      }
                    PDDGoodsResult result = PinDuoDuoApiUtil.searchGoods(pddfilter,Constant.PDD_SEARCH_CUSTOMER_PARAMS);
                    if (result != null) {
                        List<PDDGoodsDetail> goodsList = result.getGoodsList();
                        if (goodsList != null && goodsList.size() > 0) {
      ShareVO shareInfoVO = new ShareVO();
      shareInfoVO.setHelpLink(helpLink);
      extraVO.setShare(shareInfoVO);
                            if (goodsList.size() > 10) {
                                goodsList = goodsList.subList(0, 10);
                            }
      JSONObject object = new JSONObject();
      object.put("extra", JsonUtil.getApiCommonGson().toJson(extraVO));
      object.put("goods", JsonUtil.getApiCommonGson().toJson(goodsDetail));
      out.print(JsonUtil.loadTrueResult(object.toString()));
                            ConfigParamsDTO paramsDTO = getParamsDTO(acceptData.getPlatform(), acceptData.getVersion(),
                                    null, acceptData.getSystem());
                            for (PDDGoodsDetail goods : goodsList) {
                                listDetailVO.add(GoodsDetailVOFactory.convertPDDGoods(goods, paramsDTO));
                            }
                        }
                    }
                }
      final JDGoods goods = jdGoods;
      ThreadUtil.run(new Runnable() {
         public void run() {
            // 添加浏览记录
            try {
               scanHistoryV2Service.addJDScanHistory(uid, acceptData.getDevice(), goods);
            } catch (Exception e) {
               e.printStackTrace();
            }
         }
      });
   }
                // 取偶数个数据
                if (listDetailVO.size() % 2 != 0) {
                    listDetailVO.remove(listDetailVO.size() - 1);
                }
   /**
    * 拼多多商品详情
    *
    * @param acceptData
    * @param id
    * @param uid
    * @param from
    * @param 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());
      if (system == null) {
         out.print(JsonUtil.loadFalseResult(1, "系统不存在"));
         return;
      }
                data.put("listQuality", JsonUtil.getApiCommonGson().toJson(listDetailVO));
                out.print(JsonUtil.loadTrueResult(data));
                return;
            }
      PDDGoodsDetail pddGoods = PinDuoDuoApiUtil.getGoodsDetail(id);
      if (pddGoods == null) {
         out.print(JsonUtil.loadFalseResult(2, "商品不存在"));
         return;
      }
            // 唯品会
            if (goodsType == Constant.SOURCE_TYPE_VIP) {
                JSONObject data = new JSONObject();
                data.put("listGuess", JsonUtil.getApiCommonGson().toJson(new ArrayList<GoodsDetailVO>()));
                data.put("listQuality", JsonUtil.getApiCommonGson().toJson(new ArrayList<GoodsDetailVO>()));
                out.print(JsonUtil.loadTrueResult(data));
                return;
            }
      BigDecimal fanLiRate = hongBaoManageService.getFanLiRate();
      BigDecimal shareRate = hongBaoManageService.getShareRate();
      ConfigParamsDTO paramsDTO = new ConfigParamsDTO(fanLiRate, shareRate, Constant.MAX_REWARD_RATE);
      GoodsDetailVO goodsDetail = GoodsDetailVOFactory.convertPDDGoods(pddGoods, paramsDTO);
            // 苏宁
            if (goodsType == Constant.SOURCE_TYPE_SUNING) {
                List<SuningGoodsInfo> resultList = null;
                String[] ids = SuningUtil.getGoodsIdDetail(id);
                List<SuningGoodsInfoRecommend> list = SuningApiUtil.getRecommendGoods(ids[1], ids[0]);
                if (list != null && list.size() > 0) {
                    List<String> listId = new ArrayList<>();
                    for (SuningGoodsInfoRecommend goodsInfo : list) {
                        if (goodsInfo != null) {
                            listId.add(goodsInfo.getCommodityCode() + "-" + goodsInfo.getSupplierCode());
                        }
                    }
                    resultList = SuningApiUtil.getGoodsDetailList(listId);
                }
      // 附加信息
      OtherInfo otherInfo = new OtherInfo();
      RewardCouponVO rewardCoupon = new RewardCouponVO();
      rewardCoupon.setJumpDetail(jumpDetailV2Service.getByTypeCache("web"));
      JSONObject params1 = new JSONObject();
      params1.put("url", configService.get("special_guide_reward_coupon_link"));
                List<GoodsDetailVO> listDetailVO = new ArrayList<GoodsDetailVO>();
                if (resultList != null) {
                    if (resultList != null && resultList.size() > 0) {
                        ConfigParamsDTO paramsDTO = orderHongBaoMoneyComputeService.getShowComputeRate(acceptData.getPlatform(),
                                acceptData.getVersion(), acceptData.getSystem());
      rewardCoupon.setMaxMoney("¥" + PinDuoDuoUtil.getGoodsFanLiMoney(pddGoods, fanLiRate).add(MoneyBigDecimalUtil
            .mul(PinDuoDuoUtil.getGoodsFanLiMoney(pddGoods, fanLiRate), Constant.MAX_REWARD_RATE)));
      if (VersionUtil.greaterThan_2_1(acceptData.getPlatform(), acceptData.getVersion())) {
         rewardCoupon.setDesc("返");
         params1.put("url", configService.get("vip_link"));
         rewardCoupon.getJumpDetail().setNeedLogin(true);
      } else
         rewardCoupon.setDesc("用返利奖励券最高返");
      rewardCoupon.setParams(params1.toString());
      otherInfo.setRewardCoupon(rewardCoupon);
      goodsDetail.setOtherInfo(otherInfo);
                        for (SuningGoodsInfo goods : resultList) {
                            GoodsDetailVO goodsDetailVO = GoodsDetailVOFactory.convertSuningGoods(goods, paramsDTO);
                            listDetailVO.add(goodsDetailVO);
                        }
                    }
                }
      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());
      }
                JSONObject data = new JSONObject();
                data.put("listQuality", JsonUtil.getApiCommonGson().toJson(listDetailVO));
                data.put("listGuess", JsonUtil.getApiCommonGson().toJson(new ArrayList<GoodsDetailVO>()));
                out.print(JsonUtil.loadTrueResult(data));
                return;
            }
      ShopInfoVO shopInfo = goodsDetail.getShopInfo();
      if (shopInfo != null) {
         if (shopInfo.getId() == null || shopInfo.getScoreGoods() == null || shopInfo.getScoreLogistics() == null
               || shopInfo.getScoreSeller() == null) {
            goodsDetail.setShopInfo(null);
         }
      }
            List<TaoBaoGoodsBrief> goodsList = TaoKeApiUtil.guessLikeByAuctionId(Long.parseLong(id), 10);
            // 初始化
            if (goodsList == null) {
                goodsList = new ArrayList<TaoBaoGoodsBrief>();
            }
      GoodsDetailExtraVO extraVO = new GoodsDetailExtraVO();
      extraVO.setIsNative(false);
      // IOS是否正在上线
      if ("ios".equalsIgnoreCase(acceptData.getPlatform())) {
         String version = acceptData.getVersion();
         extraVO.setIosOnling(configService.iosOnLining(Integer.parseInt(version)));
      }
            List<GoodsDetailVO> listExtra = new ArrayList<GoodsDetailVO>();
            ConfigParamsDTO paramsDTO = getParamsDTO(acceptData.getPlatform(), acceptData.getVersion(), null, acceptData.getSystem());
            goodsList.parallelStream().forEach(goods -> {
                if (goods != null) {
                    listExtra.add(GoodsDetailVOFactory.convertTaoBao(goods, paramsDTO));
                }
            });
      // 图文详情
      extraVO.setDetailUrl("http://apph5.yeshitv.com/apppage/goods_img_pdd.html?id=" + id);
            List<GoodsDetailVO> listQuality = new ArrayList<GoodsDetailVO>();
            // 取偶数个数据
            if (listExtra.size() % 2 != 0) {
                listExtra.remove(listExtra.size() - 1);
            }
      String salesTip = pddGoods.getSalesTip();
      if (!StringUtil.isNullOrEmpty(salesTip)) {
         int indexOf = salesTip.indexOf("+");
         if (indexOf > 0) {
            salesTip = salesTip.substring(0, indexOf);
         }
            if (listQuality.size() % 2 != 0) {
                listQuality.remove(listQuality.size() - 1);
            }
         int totalSales = 0;
         if (salesTip.contains("万")) {
            salesTip = salesTip.substring(0, salesTip.indexOf("万"));
            totalSales = (int) (Float.parseFloat(salesTip) * 10000);
         } else {
            totalSales = Integer.parseInt(salesTip);
         }
            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<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);
      }
    /**
     * 获取京东领券链接(不返利)
     *
     * @param acceptData
     * @param id
     * @param couponUrl
     * @param source
     * @param out
     */
    private void getJDLinkWithoutFanLi(AcceptData acceptData, Long id, String couponUrl, String source, PrintWriter out) {
        JDGoods goods = jdGoodsCacheUtil.getGoodsInfo(id);
        if (goods == null) {
            out.print(JsonUtil.loadFalseResult(2, "商品已下架"));
            return;
        }
        String jumpLink = null;
        String materialId = "https://item.jd.com/" + id + ".html";
        if (StringUtil.isNullOrEmpty(couponUrl)) {
            JDCouponInfo couponInfo = JDUtil.getShowCouponInfo(goods.getCouponInfoList(), goods.getPrice());
            if (couponInfo != null) {
                couponUrl = couponInfo.getLink();
            }
            jumpLink = JDApiUtil.convertLinkWithSubUnionId(materialId, couponUrl, null,JDApiUtil.POSITION_COUPON + "",
                    "");
            if (jumpLink == null) {
                jumpLink = JDApiUtil.convertLinkWithSubUnionId(materialId, null, null,JDApiUtil.POSITION_COUPON + "",
                        "");
            }
        } else {
            jumpLink = JDApiUtil.convertLinkWithSubUnionId(materialId, couponUrl, null,JDApiUtil.POSITION_COUPON + "",
                    "");
            if (StringUtil.isNullOrEmpty(jumpLink)) {
                jumpLink = couponUrl;
            }
        }
      if (uid != null) {
         // 是否加入收藏
         CollectionGoodsV2 collectionGoods = collectionGoodsV2Service.findByUidAndAuctionId(uid, id,
               Constant.SOURCE_TYPE_PDD);
         extraVO.setCollected(collectionGoods != null ? true : false);
         // 是否加入选品库
         extraVO.setStorage(userGoodsStorageService.isExistStorage(uid, id, Constant.SOURCE_TYPE_PDD));
      }
        JSONObject data = new JSONObject();
        data.put("native", true);
        data.put("jumpLink", jumpLink);
        out.print(JsonUtil.loadTrueResult(data));
    }
      extraVO.setIsNative(true);
    /**
     * 京东购买链接
     *
     * @param acceptData
     * @param uid
     * @param id
     * @param couponUrl  -优惠券链接
     * @param source
     * @param out
     */
    @RequestMapping(value = "getJDLink")
    public void getJDLink(AcceptData acceptData, Long uid, Long id, String couponUrl, String source, PrintWriter out) {
      // 分享路径
      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) {
         extraVO.setH5Url(h5Url);
      }
      String helpLink = null;
      extraVO.setFanliValid(true);
      extraVO.setShareValid(true);
        if (id == null || id <= 0) {
            out.print(JsonUtil.loadFalseResult(1, "商品ID不能为空"));
            return;
        }
      if (StringUtil.isNullOrEmpty(helpLink)) {
         helpLink = configService.get("no_rebate_help_link");
      }
        if (!SystemInfoUtil.hasFunctions(acceptData.getSystem(), SystemFunction.fanli)) {
            getJDLinkWithoutFanLi(acceptData, id, couponUrl, source, out);
            return;
        }
      ShareVO shareInfoVO = new ShareVO();
      shareInfoVO.setHelpLink(helpLink);
      extraVO.setShare(shareInfoVO);
        if (uid == null || uid <= 0) {
            out.print(JsonUtil.loadFalseResult(1, "用户ID不能为空"));
            return;
        }
      if (convertUrl != null) {
         extraVO.setCouponJumpLink(convertUrl.getUrl());
         extraVO.setNativeCouponJumpLink(PinDuoDuoUtil.getAndroidNativeURI(convertUrl.getUrl()));
      }
      JSONObject object = new JSONObject();
      object.put("extra", JsonUtil.getApiCommonGson().toJson(extraVO));
      object.put("goods", JsonUtil.getApiCommonGson().toJson(goodsDetail));
      out.print(JsonUtil.loadTrueResult(object.toString()));
        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;
        }
      ThreadUtil.run(new Runnable() {
         public void run() {
            // 添加浏览记录
            try {
               scanHistoryV2Service.addPDDScanHistory(uid, acceptData.getDevice(), pddGoods);
            } catch (Exception e) {
               e.printStackTrace();
            }
         }
      });
   }
        JDGoods goods = jdGoodsCacheUtil.getGoodsInfo(id);
        if (goods == null) {
            out.print(JsonUtil.loadFalseResult(2, "商品已下架"));
            return;
        }
   /**
    * 商品详情推荐(猜你喜欢 + 推荐)
    *
    * @param acceptData
    * @param id
    * @param out
    */
   @RequestMapping(value = "getRecommendGoods", method = RequestMethod.POST)
   public void getRecommendGoods(AcceptData acceptData, long id, Integer goodsType, PrintWriter out) {
      if (goodsType == null) {
         goodsType = Constant.SOURCE_TYPE_TAOBAO;
      }
        String jumpLink = null;
        String materialId = "https://item.jd.com/" + id + ".html";
        if (StringUtil.isNullOrEmpty(couponUrl)) {
            JDCouponInfo couponInfo = JDUtil.getShowCouponInfo(goods.getCouponInfoList(), goods.getPrice());
            if (couponInfo != null) {
                couponUrl = couponInfo.getLink();
            }
            jumpLink = JDApiUtil.convertLinkWithSubUnionId(materialId, couponUrl, null,JDApiUtil.POSITION_FANLI + "",
                    uid + "");
            if (jumpLink == null) {
                jumpLink = JDApiUtil.convertLinkWithSubUnionId(materialId, null, null,JDApiUtil.POSITION_FANLI + "",
                        uid + "");
            }
        } else {
            jumpLink = JDApiUtil.convertLinkWithSubUnionId(materialId, couponUrl, null,JDApiUtil.POSITION_FANLI + "",
                    uid + "");
            if (StringUtil.isNullOrEmpty(jumpLink)) {
                jumpLink = couponUrl;
            }
        }
      try {
        JSONObject data = new JSONObject();
        data.put("native", true);
        data.put("jumpLink", jumpLink);
        out.print(JsonUtil.loadTrueResult(data));
         // 京东
         if (goodsType == Constant.SOURCE_TYPE_JD) {
            JSONObject data = new JSONObject();
            data.put("listGuess", JsonUtil.getApiCommonGson().toJson(new ArrayList<GoodsDetailVO>()));
        // 获得金币
        integralGetService.addCouponRebate(uid);
    }
            List<JDGoods> list = JDUtil.getRecommendGoodsById(id);
            if (list == null) {
               list = new ArrayList<JDGoods>();
            } else if (list.size() > 10) {
               list = list.subList(0, 10);
            }
    @RequestMapping(value = "getJDCouponLink")
    public void getJDCouponLink(AcceptData acceptData, Long id, String couponUrl, PrintWriter out) {
        if (StringUtil.isNullOrEmpty(couponUrl)) {
            out.print(JsonUtil.loadFalseResult(1, "券链接不能为空"));
            return;
        }
        if (id == null || id <= 0) {
            out.print(JsonUtil.loadFalseResult(1, "商品ID不能为空"));
            return;
        }
            BigDecimal fanLiRate = hongBaoManageService.getFanLiRate();
            BigDecimal shareRate = hongBaoManageService.getShareRate();
            ConfigParamsDTO paramsDTO = new ConfigParamsDTO(fanLiRate, shareRate, Constant.MAX_REWARD_RATE);
            List<GoodsDetailVO> listDetailVO = new ArrayList<GoodsDetailVO>();
        String jumpLink = null;
        String materialId = "https://item.jd.com/" + id + ".html";
            for (JDGoods goods : list) {
               listDetailVO.add(GoodsDetailVOFactory.convertJDGoods(goods, paramsDTO));
            }
        jumpLink = JDApiUtil.convertLinkWithSubUnionId(materialId, couponUrl, null,JDApiUtil.POSITION_FANLI + "", null);
        if (StringUtil.isNullOrEmpty(jumpLink)) {
            jumpLink = couponUrl;
        }
            // 取偶数个数据
            if (listDetailVO.size() % 2 != 0) {
               listDetailVO.remove(listDetailVO.size() - 1);
            }
        JSONObject data = new JSONObject();
        data.put("native", true);
        data.put("jumpLink", jumpLink);
        out.print(JsonUtil.loadTrueResult(data));
    }
            data.put("listQuality", JsonUtil.getApiCommonGson().toJson(listDetailVO));
            out.print(JsonUtil.loadTrueResult(data));
            return;
         }
    /**
     * 拼多多购买链接
     *
     * @param acceptData
     * @param uid
     * @param id
     * @param source
     * @param out
     */
    @RequestMapping(value = "getPDDLink")
    public void getPDDLink(AcceptData acceptData, Long uid, Long id, String source, PrintWriter out) {
         // 拼多多
         if (goodsType == Constant.SOURCE_TYPE_PDD) {
            JSONObject data = new JSONObject();
            data.put("listGuess", JsonUtil.getApiCommonGson().toJson(new ArrayList<GoodsDetailVO>()));
        if (id == null || id <= 0) {
            out.print(JsonUtil.loadFalseResult(1, "商品ID不能为空"));
            return;
        }
            List<GoodsDetailVO> listDetailVO = new ArrayList<GoodsDetailVO>();
        String pid = PinDuoDuoApiUtil.PID_FANLI;
        //只是领券
        if (!SystemInfoUtil.hasFunctions(acceptData.getSystem(), SystemFunction.fanli)) {
            pid = PinDuoDuoApiUtil.PID_COUPON;
            uid = null;
        } else {
            if (uid == null || uid <= 0) {
                out.print(JsonUtil.loadFalseResult(1, "用户ID不能为空"));
                return;
            }
            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));
            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;
            }
               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();
                     ConfigParamsDTO paramsDTO = new ConfigParamsDTO(fanLiRate, shareRate,
                           Constant.MAX_REWARD_RATE);
                     for (PDDGoodsDetail goods : goodsList) {
                        listDetailVO.add(GoodsDetailVOFactory.convertPDDGoods(goods, paramsDTO));
                     }
                  }
               }
            }
        PDDGoodsDetail goods = pinDuoDuoCacheUtil.getGoodsInfo(id);
        if (goods == null) {
            out.print(JsonUtil.loadFalseResult(2, "商品已下架"));
            return;
        }
            // 取偶数个数据
            if (listDetailVO.size() % 2 != 0) {
               listDetailVO.remove(listDetailVO.size() - 1);
            }
        boolean auth = PinDuoDuoApiUtil.isAuth(pid, uid + "");
        PDDPromotionUrl convertUrl = PinDuoDuoApiUtil.convert(id, pid + "", uid + "", !auth);
        JSONObject data = new JSONObject();
        data.put("native", true);
        data.put("jumpLink", convertUrl.getUrl());
        data.put("nativeJumpLink", PinDuoDuoUtil.getAndroidNativeURI(convertUrl.getUrl()));
        LogHelper.test(String.format("拼多多转链:uid:%s data:%s",uid+"",data.toString()));
        out.print(JsonUtil.loadTrueResult(data));
            data.put("listQuality", JsonUtil.getApiCommonGson().toJson(listDetailVO));
            out.print(JsonUtil.loadTrueResult(data));
            return;
         }
        // 获得金币
        integralGetService.addCouponRebate(uid);
    }
         List<TaoBaoGoodsBrief> goodsList = TaoKeApiUtil.guessLikeByAuctionId(id, 10);
         // 初始化
         if (goodsList == null) {
            goodsList = new ArrayList<TaoBaoGoodsBrief>();
         }
    /**
     * 拼多多购买链接
     *
     * @param acceptData
     * @param uid
     * @param id
     * @param source
     * @param out
     */
    @RequestMapping(value = "getVIPLink")
    public void getVIPLink(AcceptData acceptData, Long uid, Long id, String source, PrintWriter out) {
        if (id == null || id <= 0) {
            out.print(JsonUtil.loadFalseResult(1, "商品ID不能为空"));
            return;
        }
         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);
        String tag = null;
        //只是领券
        if (!SystemInfoUtil.hasFunctions(acceptData.getSystem(), SystemFunction.fanli)) {
            tag = VipShopUtil.getCouponChanTag();
        } else {
            if (uid == null || uid <= 0) {
                out.print(JsonUtil.loadFalseResult(1, "用户ID不能为空"));
                return;
            }
         List<Long> ids = new ArrayList<>();
         for (TaoBaoGoodsBrief goods : goodsList)
            ids.add(goods.getAuctionId());
            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;
            }
         try {
            goodsList = TaoKeApiUtil.getBatchGoodsInfo(ids);
         } catch (TaoKeApiException e1) {
         } catch (TaobaoGoodsDownException e1) {
         }
            tag = VipShopUtil.getBuyChanTag(uid);
        }
         if (goodsList != null && goodsList.size() > 0) {
        VIPGoodsInfo goods = VipShopApiUtil.getGoodsDetail(id + "");
        if (goods == null) {
            out.print(JsonUtil.loadFalseResult(2, "商品已下架"));
            return;
        }
            BigDecimal fanLiRate = hongBaoManageService.getFanLiRate();
            BigDecimal shareRate = hongBaoManageService.getShareRate();
            ConfigParamsDTO paramsDTO = new ConfigParamsDTO(fanLiRate, shareRate, Constant.MAX_REWARD_RATE);
        VIPConvertResultDTO convertUrl = VipShopApiUtil.convertLink(id + "", tag);
        JSONObject data = new JSONObject();
        data.put("native", true);
        data.put("jumpLink", convertUrl.getUrl());
        data.put("nativeJumpLink", convertUrl.getDeeplinkUrl());
        out.print(JsonUtil.loadTrueResult(data));
            goodsList.parallelStream().forEach(goods -> {
               if (goods != null) {
                  // 获取详情
                  TaoBaoGoodsBrief taoBaoGoodsBrief = null;
                  try {
                     taoBaoGoodsBrief = taoBaoGoodsCacheUtil.getCommonTaoBaoGoodsInfo(goods.getAuctionId());
                  } catch (Exception e) {
                     e.printStackTrace();
                  }
        // 获得金币
        integralGetService.addCouponRebate(uid);
    }
                  if (taoBaoGoodsBrief == null) {
                     TaoBaoGoodsBrief newGoods = TaoKeApiUtil.specialConvertCoupon(goods.getAuctionId(), app);
                     goods.setCouponInfo(newGoods.getCouponInfo());
                     goods.setCouponLink(newGoods.getCouponLink());
                     goods.setTkRate(newGoods.getTkRate());
                     taoBaoGoodsBrief = goods;
                  }
    @RequestMapping(value = "getSuningLink")
    public void getSuningLink(AcceptData acceptData, Long uid, String id, String source, PrintWriter out) {
        if (StringUtil.isNullOrEmpty(id)) {
            out.print(JsonUtil.loadFalseResult(1, "商品ID不能为空"));
            return;
        }
                  if (taoBaoGoodsBrief != null) {
                     listExtra.add(GoodsDetailVOFactory.convertTaoBao(taoBaoGoodsBrief, paramsDTO));
                  }
               }
            });
         }
        String pid = SuningApiUtil.PID_BUY;
        if (!SystemInfoUtil.hasFunctions(acceptData.getSystem(), SystemFunction.fanli)) {
            pid = SuningApiUtil.PID_COUPON;
            uid = null;
        } else {
            if (uid == null || uid <= 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;
            }
        }
         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);
         }
        String[] sts = SuningUtil.getGoodsIdDetail(id);
        String supplierCode = sts[0];
        String goodsCode = sts[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));
      }
   }
        SuningGoodsInfo goods = SuningApiUtil.getGoodsDetail(goodsCode, supplierCode);
        if (goods == null) {
            out.print(JsonUtil.loadFalseResult(2, "商品已下架"));
            return;
        }
   /**
    * 京东购买链接
    *
    * @param acceptData
    * @param uid
    * @param id
    * @param couponUrl
    *            -优惠券链接
    * @param source
    * @param out
    */
   @RequestMapping(value = "getJDLink")
   public void getJDLink(AcceptData acceptData, Long uid, Long id, String couponUrl, String source, PrintWriter out) {
      if (uid == null || uid <= 0) {
         out.print(JsonUtil.loadFalseResult(1, "用户ID不能为空"));
         return;
      }
        String quanUrl = null;
        if (!StringUtil.isNullOrEmpty(goods.getCouponInfo().getCouponUrl()))
            quanUrl = goods.getCouponInfo().getCouponUrl();
        String link = SuningApiUtil.convertLink(SuningUtil.getProductUrl(supplierCode, goodsCode), quanUrl,
                pid, uid + "");
        JSONObject data = new JSONObject();
        data.put("native", false);
        data.put("jumpLink", link);
        out.print(JsonUtil.loadTrueResult(data));
      if (id == null || id <= 0) {
         out.print(JsonUtil.loadFalseResult(1, "商品ID不能为空"));
         return;
      }
        // 获得金币
        integralGetService.addCouponRebate(uid);
    }
      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;
      }
    /**
     * 是否在参与推广
     *
     * @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();
            }
      JDGoods goods = jdGoodsCacheUtil.getGoodsInfo(id);
      if (goods == null) {
         out.print(JsonUtil.loadFalseResult(2, "商品已下架"));
         return;
      }
            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);
            }
      String jumpLink = null;
      String materialId = "https://item.jd.com/" + id + ".html";
      if (StringUtil.isNullOrEmpty(couponUrl)) {
         JDCouponInfo couponInfo = JDUtil.getShowCouponInfo(goods.getCouponInfoList(), goods.getPrice());
         if (couponInfo != null) {
            couponUrl = couponInfo.getLink();
         }
         jumpLink = JDApiUtil.convertLink(materialId, couponUrl, JDApiUtil.POSITION_FANLI + "", uid + "");
      } else {
         jumpLink = JDApiUtil.convertLink(materialId, couponUrl, JDApiUtil.POSITION_FANLI + "", uid + "");
      }
        } 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);
            }
        } else if (goodsType == Constant.SOURCE_TYPE_VIP) {
            VIPGoodsInfo goods = VipShopApiUtil.getGoodsDetail(goodsId);
            if (goods == null) {
                data.put("extend", false);
                data.put("url", "");
            } else {
                data.put("extend", true);
            }
        } else if (goodsType == Constant.SOURCE_TYPE_SUNING) {
            SuningGoodsInfo goods = SuningApiUtil.getGoodsDetail(goodsId.split("-")[1], goodsId.split("-")[0]);
            if (goods == null) {
                data.put("extend", false);
                data.put("url", String.format("https://m.suning.com/product/%s/%s.html", goodsId.split("-")[0], goodsId.split("-")[1]));
            } else {
                data.put("extend", true);
            }
        }
        out.print(JsonUtil.loadTrueResult(data));
    }
      JSONObject data = new JSONObject();
      data.put("native", true);
      data.put("jumpLink", jumpLink);
      out.print(JsonUtil.loadTrueResult(data));
    @RequestMapping(value = "listSimpleGoods", method = RequestMethod.POST)
    public void listSimpleGoods(AcceptData acceptData, String goodsInfo, PrintWriter out) {
        if (StringUtil.isNullOrEmpty(goodsInfo)) {
            out.print(JsonUtil.loadFalseResult(1, "商品信息为空"));
            return;
        }
      // 获得金币
      integralGetService.addCouponRebate(uid);
   }
        net.sf.json.JSONArray array = net.sf.json.JSONArray.fromObject(goodsInfo);
   @RequestMapping(value = "getJDCouponLink")
   public void getJDCouponLink(AcceptData acceptData, Long id, String couponUrl, PrintWriter out) {
      if (StringUtil.isNullOrEmpty(couponUrl)) {
         out.print(JsonUtil.loadFalseResult(1, "券链接不能为空"));
         return;
      }
      if (id == null || id <= 0) {
         out.print(JsonUtil.loadFalseResult(1, "商品ID不能为空"));
         return;
      }
        List<CommonGoods> commonGoodsList = new ArrayList<>();
      String jumpLink = null;
      String materialId = "https://item.jd.com/" + id + ".html";
        for (int i = 0; i < array.size(); i++) {
            JSONObject obj = array.optJSONObject(i);
            CommonGoods cg = new CommonGoods();
            cg.setGoodsId(obj.optLong("goodsId"));
            cg.setGoodsType(obj.optInt("goodsType"));
            commonGoodsList.add(cg);
        }
      jumpLink = JDApiUtil.convertLink(materialId, couponUrl, JDApiUtil.POSITION_FANLI + "", null + "");
        if (commonGoodsList.size() > 9) {
            out.print(JsonUtil.loadFalseResult(1, "最多同时获取9条数据"));
            return;
        }
      JSONObject data = new JSONObject();
      data.put("native", true);
      data.put("jumpLink", jumpLink);
      out.print(JsonUtil.loadTrueResult(data));
   }
        // 分离各个平台的商品信息
        List<Long> tbGoodsList = new ArrayList<>();
        List<Long> jdGoodsList = new ArrayList<>();
        List<Long> pddGoodsList = new ArrayList<>();
   /**
    * 拼多多购买链接
    *
    * @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;
      }
        List<String> keyList = new ArrayList<>();
      if (id == null || id <= 0) {
         out.print(JsonUtil.loadFalseResult(1, "商品ID不能为空"));
         return;
      }
        for (CommonGoods cg : commonGoodsList) {
            keyList.add(cg.getGoodsId() + "-" + cg.getGoodsType());
            if (cg.getGoodsType() == Constant.SOURCE_TYPE_TAOBAO) {
                tbGoodsList.add(cg.getGoodsId());
            } else if (cg.getGoodsType() == Constant.SOURCE_TYPE_JD) {
                jdGoodsList.add(cg.getGoodsId());
            } else if (cg.getGoodsType() == Constant.SOURCE_TYPE_PDD) {
                pddGoodsList.add(cg.getGoodsId());
            }
        }
      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;
      }
        Map<String, GoodsDetailVO> tempGoodsList = new HashMap<>();
      PDDGoodsDetail goods = pinDuoDuoCacheUtil.getGoodsInfo(id);
      if (goods == null) {
         out.print(JsonUtil.loadFalseResult(2, "商品已下架"));
         return;
      }
        ConfigParamsDTO params = new ConfigParamsDTO(hongBaoManageService.getFanLiRate(acceptData.getSystem()),
                hongBaoManageService.getShareRate(acceptData.getSystem()), new BigDecimal(80),
                hongBaoManageService.getFanLiRate(UserLevelEnum.superVIP, acceptData.getSystem()));
      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));
        if (tbGoodsList.size() > 0) {
            List<TaoBaoGoodsBrief> goodsList = null;
            try {
                goodsList = TaoKeApiUtil.getBatchGoodsInfo(tbGoodsList);
            } catch (TaobaoGoodsDownException e) {
                e.printStackTrace();
            } catch (TaoKeApiException e) {
                e.printStackTrace();
            }
            if (goodsList != null)
                for (TaoBaoGoodsBrief goods : goodsList) {
                    goods.setTkRate(new BigDecimal(0));
                    tempGoodsList.put(goods.getAuctionId() + "-" + Constant.SOURCE_TYPE_TAOBAO,
                            GoodsDetailVOFactory.convertTaoBao(goods, params));
                }
        }
        if (jdGoodsList.size() > 0) {
            List<JDGoods> goodsList = JDApiUtil.getGoodsDetail(jdGoodsList);
            for (JDGoods goods : goodsList) {
                tempGoodsList.put(goods.getSkuId() + "-" + Constant.SOURCE_TYPE_JD,
                        GoodsDetailVOFactory.convertJDGoods(goods, params));
            }
        }
        if (pddGoodsList.size() > 0) {
            List<PDDGoodsDetail> goodsList = PinDuoDuoApiUtil.listGoodsDetail(pddGoodsList);
            for (PDDGoodsDetail goods : goodsList) {
                tempGoodsList.put(goods.getGoodsId() + "-" + Constant.SOURCE_TYPE_PDD,
                        GoodsDetailVOFactory.convertPDDGoods(goods, params));
            }
        }
        List<GoodsDetailVO> voList = new ArrayList<>();
        Gson gson = JsonUtil.getApiCommonGson();
        for (String key : keyList) {
            GoodsDetailVO vo = tempGoodsList.get(key);
            if (vo != null) {
                voList.add(vo);
            }
        }
        out.print(JsonUtil.loadTrueResult(gson.toJson(voList)));
    }
      // 获得金币
      integralGetService.addCouponRebate(uid);
   }
    /**
     * 京东转链
     *
     * @param acceptData
     * @param link
     * @param uid
     * @param out        void 返回类型
     * @throws
     * @Title: getJDLink
     * @Description:
     */
    @RequestMapping(value = "convertJDLink")
    public void convertJDLink(AcceptData acceptData, String link, Long uid, String callback, PrintWriter out) {
        if (StringUtil.isNullOrEmpty(link)) {
            out.print(JsonUtil.loadFalseResult(1, "链接为空"));
            return;
        }
   /**
    * 是否在参与推广
    *
    * @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();
         }
        link = JDApiUtil.convertLinkWithSubUnionId(link, null, null,JDApiUtil.POSITION_FANLI + "", uid + "");
         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);
         }
        JSONObject data = new JSONObject();
        data.put("link", link);
        JsonUtil.printMode(out, callback, JsonUtil.loadTrueResult(data));
    }
      } 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));
   }
}