From 30d8e227e8d823b6c38c3b9c90ac2df03b63befe Mon Sep 17 00:00:00 2001
From: admin <weikou2014>
Date: 星期二, 25 二月 2025 16:41:22 +0800
Subject: [PATCH] 淘宝转链接口更新

---
 fanli/src/main/java/com/yeshi/fanli/controller/wxmp/v1/GoodsController.java | 1912 ++++++++++++++++++++++++++++++----------------------------
 1 files changed, 990 insertions(+), 922 deletions(-)

diff --git a/fanli/src/main/java/com/yeshi/fanli/controller/wxmp/v1/GoodsController.java b/fanli/src/main/java/com/yeshi/fanli/controller/wxmp/v1/GoodsController.java
index 7b78c2d..4e5334f 100644
--- a/fanli/src/main/java/com/yeshi/fanli/controller/wxmp/v1/GoodsController.java
+++ b/fanli/src/main/java/com/yeshi/fanli/controller/wxmp/v1/GoodsController.java
@@ -1,922 +1,990 @@
-package com.yeshi.fanli.controller.wxmp.v1;
-
-import java.io.InputStream;
-import java.io.PrintWriter;
-import java.math.BigDecimal;
-import java.net.URLEncoder;
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.List;
-
-import javax.annotation.Resource;
-
-import org.json.simple.JSONArray;
-import org.springframework.stereotype.Controller;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RequestMethod;
-import org.yeshi.utils.HttpUtil;
-import org.yeshi.utils.JsonUtil;
-import org.yeshi.utils.entity.FileUploadResult;
-import org.yeshi.utils.wx.WXUtil;
-import org.yeshi.utils.wx.WXXCXUtil;
-
-import com.google.gson.Gson;
-import com.google.gson.GsonBuilder;
-import com.yeshi.fanli.dto.ConfigParamsDTO;
-import com.yeshi.fanli.dto.WXMPAcceptData;
-import com.yeshi.fanli.dto.jd.JDCategoryInfo;
-import com.yeshi.fanli.dto.jd.JDCouponInfo;
-import com.yeshi.fanli.dto.jd.JDFilter;
-import com.yeshi.fanli.dto.jd.JDSearchResult;
-import com.yeshi.fanli.dto.pdd.PDDGoodsDetail;
-import com.yeshi.fanli.dto.pdd.PDDGoodsResult;
-import com.yeshi.fanli.dto.pdd.PDDPromotionUrl;
-import com.yeshi.fanli.dto.pdd.PDDSearchFilter;
-import com.yeshi.fanli.entity.bus.homemodule.SwiperPicture;
-import com.yeshi.fanli.entity.bus.share.UserShareGoodsHistory;
-import com.yeshi.fanli.entity.bus.user.ShamUser;
-import com.yeshi.fanli.entity.bus.user.UserInfo;
-import com.yeshi.fanli.entity.goods.CollectionGoodsV2;
-import com.yeshi.fanli.entity.jd.JDGoods;
-import com.yeshi.fanli.entity.jd.JDGoodsClass;
-import com.yeshi.fanli.exception.share.UserShareGoodsRecordException;
-import com.yeshi.fanli.exception.user.UserInfoExtraException;
-import com.yeshi.fanli.log.LogHelper;
-import com.yeshi.fanli.service.inter.common.JumpDetailV2Service;
-import com.yeshi.fanli.service.inter.config.ConfigService;
-import com.yeshi.fanli.service.inter.goods.CollectionGoodsV2Service;
-import com.yeshi.fanli.service.inter.goods.ScanHistoryV2Service;
-import com.yeshi.fanli.service.inter.goods.ShareGoodsService;
-import com.yeshi.fanli.service.inter.homemodule.SwiperPictureService;
-import com.yeshi.fanli.service.inter.jd.JDGoodsClassService;
-import com.yeshi.fanli.service.inter.order.config.HongBaoManageService;
-import com.yeshi.fanli.service.inter.user.QrCodeService;
-import com.yeshi.fanli.service.inter.user.ShamUserService;
-import com.yeshi.fanli.service.inter.user.UserInfoExtraService;
-import com.yeshi.fanli.service.inter.user.UserInfoService;
-import com.yeshi.fanli.service.inter.user.UserShareGoodsRecordService;
-import com.yeshi.fanli.service.inter.user.vip.UserVIPInfoService;
-import com.yeshi.fanli.tag.PageEntity;
-import com.yeshi.fanli.util.Constant;
-import com.yeshi.fanli.util.JumpDetailUtil;
-import com.yeshi.fanli.util.MoneyBigDecimalUtil;
-import com.yeshi.fanli.util.StringUtil;
-import com.yeshi.fanli.util.ThreadUtil;
-import com.yeshi.fanli.util.VersionUtil;
-import com.yeshi.fanli.util.cache.JDGoodsCacheUtil;
-import com.yeshi.fanli.util.cache.PinDuoDuoCacheUtil;
-import com.yeshi.fanli.util.factory.CommonGoodsFactory;
-import com.yeshi.fanli.util.factory.goods.GoodsDetailVOFactory;
-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.vo.goods.CouponInfoVO;
-import com.yeshi.fanli.vo.goods.GoodsDetailExtraVO;
-import com.yeshi.fanli.vo.goods.GoodsDetailVO;
-import com.yeshi.fanli.vo.goods.MoneyInfoVO;
-import com.yeshi.fanli.vo.goods.OtherInfo;
-import com.yeshi.fanli.vo.goods.RewardCouponVO;
-import com.yeshi.fanli.vo.goods.ShareVO;
-import com.yeshi.fanli.vo.goods.ShopInfoVO;
-
-import net.sf.json.JSONObject;
-
-@Controller("WXMPGoodsController")
-@RequestMapping("/wxmp/api/v1/goods")
-public class GoodsController {
-
-
-	@Resource
-	private ConfigService configService;
-
-
-
-	@Resource
-	private ShamUserService shamUserService;
-
-	@Resource
-	private CollectionGoodsV2Service collectionGoodsV2Service;
-
-	@Resource
-	private HongBaoManageService hongBaoManageService;
-
-
-
-	@Resource
-	private UserInfoExtraService userInfoExtraService;
-
-
-	@Resource
-	private ScanHistoryV2Service scanHistoryV2Service;
-
-	@Resource
-	private UserInfoService userInfoService;
-
-	@Resource
-	private JDGoodsCacheUtil jdGoodsCacheUtil;
-
-	@Resource
-	private PinDuoDuoCacheUtil pinDuoDuoCacheUtil;
-
-	@Resource
-	private JumpDetailV2Service jumpDetailV2Service;
-
-	@Resource
-	private JDGoodsClassService jdGoodsClassService;
-
-	@Resource
-	private UserVIPInfoService userVIPInfoService;
-
-	@Resource
-	private QrCodeService qrCodeService;
-	
-	@Resource
-	private ShareGoodsService shareGoodsService;
-	
-	@Resource
-	private UserShareGoodsRecordService userShareGoodsRecordService;
-	
-	@Resource
-	private SwiperPictureService swiperPictureService;
-	
-	/**
-	 * 涓�绾у垎绫�
-	 * 
-	 * @param acceptData
-	 * @param out
-	 */
-	@RequestMapping(value = "getTopCategory", method = RequestMethod.POST)
-	public void getTopCategory(WXMPAcceptData acceptData, PrintWriter out) {
-		JSONObject data = new JSONObject();
-		data.put("list", configService.get("jd_wxmp_class"));
-		out.print(JsonUtil.loadTrueResult(data));
-	}
-
-	
-	/**
-	 * 涓�绾у垎绫诲晢鍝�
-	 * 
-	 * @param acceptData
-	 * @param out
-	 */
-	@RequestMapping(value = "getCategoryRecommend", method = RequestMethod.POST)
-	public void getCategoryRecommend(WXMPAcceptData acceptData, Long cid, Integer page, PrintWriter out) {
-		if (cid == null) {
-			out.print(JsonUtil.loadFalseResult("鍒嗙被ID涓虹┖"));
-			return;
-		}
-		
-		JSONObject data = new JSONObject();
-		if (page == 1) {
-			// 杞挱鍥�
-			String platform = acceptData.getPlatform();
-			int version = Integer.parseInt(acceptData.getVersion());
-			List<SwiperPicture> picList = swiperPictureService.getByBannerCardAndVersion("index_top", platform,
-					version);
-			if (picList == null) {
-				picList = new ArrayList<>();
-			}
-
-			for (SwiperPicture swiper : picList) {
-				JSONObject params = null;
-				if (StringUtil.isNullOrEmpty(swiper.getParams())) {
-					params = JSONObject.fromObject(swiper.getParams());
-				}
-				swiper.setJumpDetail(JumpDetailUtil.getWXMPJumDetail(swiper.getJumpDetail()));
-				swiper.setParams(null);
-			}
-			data.put("bannerList", JsonUtil.getApiCommonGson().toJson(picList));
-		}
-		
-		JDFilter filterAPI = new JDFilter();
-		filterAPI.setPageIndex(page);
-		filterAPI.setPageSize(Constant.PAGE_SIZE);
-		filterAPI.setIsCoupon(1); // 鏈夊埜
-		filterAPI.setIsHot(1); // 鐖嗘
-		filterAPI.setCid1(cid);
-		JDSearchResult result = JDApiUtil.queryByKey(filterAPI);
-		
-		long count = 0;
-		JSONArray array = new JSONArray();
-		if (result != null) {
-			PageEntity pageEntity = result.getPageEntity();
-			if (pageEntity != null) {
-				count = pageEntity.getTotalCount();
-			}
-
-			List<JDGoods> goodsList = result.getGoodsList();
-			if (goodsList != null && goodsList.size() > 0) {
-				Gson gson = JsonUtil.getConvertBigDecimalToStringSubZeroBuilder(new GsonBuilder())
-						.excludeFieldsWithoutExposeAnnotation().setDateFormat("yyyy-MM-dd").create();
-				ConfigParamsDTO paramsDTO = hongBaoManageService.getShowComputeRate(acceptData.getPlatform(),
-						acceptData.getVersion());
-				for (JDGoods goods : goodsList) {
-					GoodsDetailVO goodsDetailVO = GoodsDetailVOFactory.convertJDGoods(goods, paramsDTO);
-					if (goodsDetailVO.isHasCoupon()) {
-						array.add(gson.toJson(goodsDetailVO));
-					}
-				}
-			}
-		}
-
-		data.put("count", count);
-		data.put("list", array);
-		out.print(JsonUtil.loadTrueResult(data));
-	}
-
-	
-	
-	/**
-	 * 鑾峰彇鍟嗗搧璇︽儏
-	 * @param acceptData
-	 * @param goodsId 鍟嗗搧id
-	 * @param uid 
-	 * @param code 閭�璇风爜
-	 * @param goodsType 鍟嗗搧绫诲瀷
-	 * @param from 椤甸潰鏉ユ簮
-	 * @param out
-	 */
-	@RequestMapping(value = "getGoodsDetial", method = RequestMethod.POST)
-	public void getGoodsDetial(WXMPAcceptData acceptData, Long goodsId, Integer goodsType, String from, 
-			 Long uid, PrintWriter out) {
-		if (goodsType == null || goodsType < 2 || goodsType > 3) {
-			out.print(JsonUtil.loadFalseResult(1, "璇蜂紶閫掓纭钩鍙板弬鏁�"));
-			return;
-		}
-
-		/*--------- 浜笢鍟嗗搧  -------*/
-		if (goodsType.intValue() == Constant.SOURCE_TYPE_JD) {
-			getDetialJD(acceptData, goodsId, uid, from, out);
-			return;
-		}
-
-		/*-------- 鎷煎澶氬晢鍝�  -------*/
-		if (goodsType.intValue() == Constant.SOURCE_TYPE_PDD) {
-			getDetialPDD(acceptData, goodsId, uid, from, out);
-			return;
-		}
-	}
-
-	/**
-	 * 浜笢鍟嗗搧璇︽儏
-	 * 
-	 * @param acceptData
-	 * @param id
-	 * @param uid
-	 * @param from
-	 * @param out
-	 */
-	private void getDetialJD(WXMPAcceptData acceptData, Long id, Long uid, String from, PrintWriter out) {
-		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 = hongBaoManageService.getShowComputeRate(acceptData.getPlatform(),
-				acceptData.getVersion());
-		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.getVIPShareRate()));
-		}
-
-		// 闄勫姞淇℃伅
-		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姣斾緥 灏忎簬姝e父姣斾緥
-				if (commissionShare != null && commissionShare.compareTo(threeClass.getSelfComm()) > 0) {
-					jdGoods.setCommissionPlus(threeClass.getSelfComm());
-					// plus杩斿埄
-					BigDecimal fanliMoneyPlus = JDUtil.getGoodsFanLiMoneyPlus(jdGoods,
-							hongBaoManageService.getFanLiRate());
-					otherInfo.setFanliMoneyPlus("浜笢plus杩斅�" + fanliMoneyPlus);
-					// 浣跨敤濂栧姳鍒告渶楂樿繑
-					if (VersionUtil.greaterThan_2_0_5(acceptData.getPlatform(), acceptData.getVersion())) {
-						maxMoneyPlus = "锛堜含涓減lus杩斅�"
-								+ JDUtil.getGoodsFanLiMoneyPlus(jdGoods,
-										hongBaoManageService.getVIPFanLiRate())
-								+ "锛�";
-					} else
-						maxMoneyPlus = "锛堜含涓減lus鏈�楂樿繑楼"
-								+ fanliMoneyPlus.add(MoneyBigDecimalUtil.mul(fanliMoneyPlus, Constant.MAX_REWARD_RATE))
-								+ "锛�";
-				}
-			}
-		}
-
-		// 濂栧姳鍒歌繑鍒�
-		RewardCouponVO rewardCoupon = new RewardCouponVO();
-		rewardCoupon.setMaxMoneyPlus(maxMoneyPlus);
-		rewardCoupon.setJumpDetail(jumpDetailV2Service.getByTypeCache("web"));
-		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(),
-					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鏄惁姝e湪涓婄嚎
-		if ("ios".equalsIgnoreCase(acceptData.getPlatform())) {
-			String version = acceptData.getVersion();
-			extraVO.setIosOnling(configService.iosOnLining(Integer.parseInt(version)));
-		}
-
-		Long inOrderCount30Days = jdGoods.getInOrderCount30Days();
-		List<ShamUser> listShareUser = new ArrayList<ShamUser>();
-
-		// 浜笢寮�鍚垎浜�
-		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));
-				}
-			}
-		}
-
-		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.setDetailUrl("https://in.m.jd.com/product/jieshao/video/" + id + ".html");
-
-		// 鍟嗗搧閾炬帴
-		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);
-		}
-
-		String helpLink = null;
-		extraVO.setFanliValid(true);
-
-		if (StringUtil.isNullOrEmpty(helpLink)) {
-			helpLink = configService.get("no_rebate_help_link");
-		}
-
-		ShareVO shareInfoVO = new ShareVO();
-		shareInfoVO.setHelpLink(helpLink);
-		extraVO.setShare(shareInfoVO);
-
-		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;
-		ThreadUtil.run(new Runnable() {
-			public void run() {
-				// 娣诲姞娴忚璁板綍
-				try {
-					scanHistoryV2Service.addJDScanHistory(uid, acceptData.getDevice(), goods);
-				} catch (Exception e) {
-					e.printStackTrace();
-				}
-			}
-		});
-	}
-
-	/**
-	 * 鎷煎澶氬晢鍝佽鎯�
-	 * 
-	 * @param acceptData
-	 * @param id
-	 * @param uid
-	 * @param from
-	 * @param out
-	 */
-	private void getDetialPDD(WXMPAcceptData acceptData, Long id, Long uid, String from, PrintWriter out) {
-		PDDGoodsDetail pddGoods = PinDuoDuoApiUtil.getGoodsDetail(id);
-		if (pddGoods == null) {
-			out.print(JsonUtil.loadFalseResult(2, "鍟嗗搧涓嶅瓨鍦�"));
-			return;
-		}
-
-		ConfigParamsDTO paramsDTO = hongBaoManageService.getShowComputeRate(acceptData.getPlatform(),
-				acceptData.getVersion());
-		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.getGoodsFanLiMoney(pddGoods, hongBaoManageService.getVIPShareRate()));
-		}
-
-		CouponInfoVO couponInfo = goodsDetail.getCouponInfo();
-		PDDPromotionUrl convertUrl = null;
-		if (couponInfo != null) {
-			convertUrl = PinDuoDuoApiUtil.convert(id, PinDuoDuoApiUtil.PID_COUPON + "", null);
-			if (convertUrl != null)
-				couponInfo.setLink(convertUrl.getUrl());
-		}
-
-		ShopInfoVO shopInfo = goodsDetail.getShopInfo();
-		if (shopInfo != null) {
-			if (shopInfo.getId() == null || shopInfo.getScoreGoods() == null || shopInfo.getScoreLogistics() == null
-					|| shopInfo.getScoreSeller() == null) {
-				goodsDetail.setShopInfo(null);
-			}
-		}
-		
-		GoodsDetailExtraVO extraVO = new GoodsDetailExtraVO();
-		extraVO.setDetailUrl("http://apph5.yeshitv.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);
-		}
-
-		// 鍒嗕韩璺緞
-		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 (StringUtil.isNullOrEmpty(helpLink)) {
-			helpLink = configService.get("no_rebate_help_link");
-		}
-
-		ShareVO shareInfoVO = new ShareVO();
-		shareInfoVO.setHelpLink(helpLink);
-		extraVO.setShare(shareInfoVO);
-
-		if (convertUrl != null) {
-			extraVO.setCouponJumpLink(convertUrl.getUrl());
-			extraVO.setNativeCouponJumpLink(PinDuoDuoUtil.getAndroidNativeURI(convertUrl.getUrl()));
-		}
-
-		JSONObject object = new JSONObject();
-		object.put("extra", JsonUtil.getApiCommonGson().toJson(extraVO));
-		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();
-				}
-			}
-		});
-	}
-
-	/**
-	 * 鍟嗗搧璇︽儏鎺ㄨ崘锛堢寽浣犲枩娆� + 鎺ㄨ崘锛�
-	 * 
-	 * @param acceptData
-	 * @param id
-	 * @param out
-	 */
-	@RequestMapping(value = "getRecommendGoods", method = RequestMethod.POST)
-	public void getRecommendGoods(WXMPAcceptData acceptData, long id, Integer goodsType, PrintWriter out) {
-		if (goodsType == null || goodsType < 2 || goodsType > 3) {
-			out.print(JsonUtil.loadFalseResult(1, "璇蜂紶閫掓纭钩鍙板弬鏁�"));
-			return;
-		}
-
-		try {
-			// 浜笢
-			if (goodsType == Constant.SOURCE_TYPE_JD) {
-				JSONObject data = new JSONObject();
-				data.put("listGuess", JsonUtil.getApiCommonGson().toJson(new ArrayList<GoodsDetailVO>()));
-
-				List<JDGoods> list = JDUtil.getRecommendGoodsById(id);
-				if (list == null) {
-					list = new ArrayList<JDGoods>();
-				} else if (list.size() > 10) {
-					list = list.subList(0, 10);
-				}
-
-				ConfigParamsDTO paramsDTO = hongBaoManageService.getShowComputeRate(acceptData.getPlatform(),
-						acceptData.getVersion());
-				List<GoodsDetailVO> listDetailVO = new ArrayList<GoodsDetailVO>();
-
-				for (JDGoods goods : list) {
-					listDetailVO.add(GoodsDetailVOFactory.convertJDGoods(goods, paramsDTO));
-				}
-
-				// 鍙栧伓鏁颁釜鏁版嵁
-				if (listDetailVO.size() % 2 != 0) {
-					listDetailVO.remove(listDetailVO.size() - 1);
-				}
-
-				data.put("listQuality", JsonUtil.getApiCommonGson().toJson(listDetailVO));
-				out.print(JsonUtil.loadTrueResult(data));
-				return;
-			}
-
-			// 鎷煎澶�
-			if (goodsType == Constant.SOURCE_TYPE_PDD) {
-				JSONObject data = new JSONObject();
-				data.put("listGuess", JsonUtil.getApiCommonGson().toJson(new ArrayList<GoodsDetailVO>()));
-
-				List<GoodsDetailVO> listDetailVO = new ArrayList<GoodsDetailVO>();
-
-				List<Long> goodsIdList = PinDuoDuoUtil.getRecommendGoodsId(id);
-				if (goodsIdList != null && goodsIdList.size() > 0) {
-					PDDSearchFilter pddfilter = new PDDSearchFilter();
-					pddfilter.setPage(1);
-					pddfilter.setPageSize(Constant.PAGE_SIZE);
-					Long[] strings = new Long[goodsIdList.size()];
-					pddfilter.setGoodsIdList(goodsIdList.toArray(strings));
-
-					PDDGoodsResult result = PinDuoDuoApiUtil.searchGoods(pddfilter);
-					if (result != null) {
-						List<PDDGoodsDetail> goodsList = result.getGoodsList();
-						if (goodsList != null && goodsList.size() > 0) {
-
-							if (goodsList.size() > 10) {
-								goodsList = goodsList.subList(0, 10);
-							}
-
-							ConfigParamsDTO paramsDTO = hongBaoManageService
-									.getShowComputeRate(acceptData.getPlatform(), acceptData.getVersion());
-							for (PDDGoodsDetail goods : goodsList) {
-								listDetailVO.add(GoodsDetailVOFactory.convertPDDGoods(goods, paramsDTO));
-							}
-						}
-					}
-				}
-
-				// 鍙栧伓鏁颁釜鏁版嵁
-				if (listDetailVO.size() % 2 != 0) {
-					listDetailVO.remove(listDetailVO.size() - 1);
-				}
-
-				data.put("listQuality", JsonUtil.getApiCommonGson().toJson(listDetailVO));
-				out.print(JsonUtil.loadTrueResult(data));
-				return;
-			}
-		} 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));
-		}
-	}
-
-	
-	/**
-	 * 鑾峰彇鍟嗗搧璇︽儏
-	 * @param acceptData
-	 * @param goodsId 鍟嗗搧id
-	 * @param uid 
-	 * @param code 閭�璇风爜
-	 * @param goodsType 鍟嗗搧绫诲瀷
-	 * @param from 椤甸潰鏉ユ簮
-	 * @param out
-	 */
-	@RequestMapping(value = "getBuyLink", method = RequestMethod.POST)
-	public void getBuyLink(WXMPAcceptData acceptData, Long goodsId, Integer goodsType, String from,
-			String couponUrl, Long uid, String inviteCode, PrintWriter out) {
-		if (goodsId == null || goodsType == null) {
-			out.print(JsonUtil.loadFalseResult(1, "鍟嗗搧淇℃伅浼犻�掗敊璇�"));
-			return;
-		}
-
-		// 鍒ゆ柇鏄嚜璐� 杩樻槸鏍规嵁閭�璇风爜
-		boolean share = false;
-		
-		String subUnionId = "";
-		if (uid != null) {
-			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;
-			}
-			subUnionId = uid.toString();
-		} else if ((uid == null || uid < 1) && !StringUtil.isNullOrEmpty(inviteCode) ) {
-			try {
-				UserInfo user = userInfoExtraService.getUserByInviteCode(inviteCode);
-				if (user != null && user.getState() == UserInfo.STATE_NORMAL) {
-					share = true;
-					subUnionId = user.getId().toString();
-				}
-			} catch (UserInfoExtraException e) {
-				e.printStackTrace();
-			}
-		} 
-		
-		String jumpLink = null;
-		if (goodsType.intValue() == Constant.SOURCE_TYPE_JD) { // 浜笢
-			JDGoods goods = jdGoodsCacheUtil.getGoodsInfo(goodsId);
-			if (goods == null) {
-				out.print(JsonUtil.loadFalseResult(2, "鍟嗗搧宸蹭笅鏋�"));
-				return;
-			}
-			
-			String materialId = "https://item.jd.com/" + goodsId + ".html";
-			if (StringUtil.isNullOrEmpty(couponUrl)) {
-				JDCouponInfo couponInfo = JDUtil.getShowCouponInfo(goods.getCouponInfoList(), goods.getPrice());
-				if (couponInfo != null) {
-					couponUrl = couponInfo.getLink();
-				}
-			}
-			
-			
-			long position =  JDApiUtil.POSITION_FANLI;
-			if (share) {
-				position = JDApiUtil.POSITION_SHARE;
-			}
-			String jdLink = JDApiUtil.convertLinkWithSubUnionId(materialId, couponUrl, position + "", subUnionId);
-			try {
-				jumpLink = "/pages/union/proxy/proxy?spreadUrl=" + URLEncoder.encode(jdLink, "UTF-8");
-			} catch (Exception e) {
-				LogHelper.errorDetailInfo(e);
-			}
-		} else if (goodsType.intValue() == Constant.SOURCE_TYPE_PDD) { // 鎷煎澶�
-			PDDGoodsDetail goods = pinDuoDuoCacheUtil.getGoodsInfo(goodsId);
-			if (goods == null) {
-				out.print(JsonUtil.loadFalseResult(2, "鍟嗗搧宸蹭笅鏋�"));
-				return;
-			}
-			
-			String position = PinDuoDuoApiUtil.PID_FANLI;
-			if (share) {
-				position = PinDuoDuoApiUtil.PID_SHARE;
-			}
-			jumpLink = PinDuoDuoApiUtil.convertWXMP(goodsId, position, subUnionId);
-		} else {
-			out.print(JsonUtil.loadFalseResult(1, "鍙傛暟浼犻�掗敊璇�"));
-			return;
-		}
-
-		if (StringUtil.isNullOrEmpty(jumpLink)) {
-			out.print(JsonUtil.loadFalseResult(1, "鍒涘缓璐拱淇℃伅澶辫触"));
-			return;
-		}
-		
-		JSONObject data = new JSONObject();
-		data.put("goodsType", goodsType);
-		data.put("jumpLink", jumpLink);
-		out.print(JsonUtil.loadTrueResult(data));
-	}
-	
-	
-	
-	/**
-	 * 鍒嗕韩鍟嗗搧娴锋姤
-	 * @param acceptData
-	 * @param goodsId
-	 * @param goodsType
-	 * @param from
-	 * @param type
-	 * @param uid
-	 * @param out
-	 */
-	@RequestMapping(value = "sharePoster", method = RequestMethod.POST)
-	public void sharePoster(WXMPAcceptData acceptData, Long goodsId, Integer goodsType, String from, Integer type, 
-			Long uid, PrintWriter out) {
-		if (uid == null || uid < 1) {
-			out.print(JsonUtil.loadFalseResult(1, "鐢ㄦ埛鏈櫥褰�"));
-			return;
-		}
-		
-		if (goodsId == null || goodsType == null) {
-			out.print(JsonUtil.loadFalseResult(1, "鍟嗗搧淇℃伅浼犻�掗敊璇�"));
-			return;
-		}
-		
-		if (type == null || type < 1 || type > 2) {
-			out.print(JsonUtil.loadFalseResult(1, "鍒嗕韩绫诲瀷閿欒"));
-			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;
-		}
-		
-		String inviteCode = userInfoExtraService.getInviteCodeByUid(uid);
-		if (StringUtil.isNullOrEmpty(inviteCode)) {
-			out.print(JsonUtil.loadFalseResult(1, "閭�璇风爜鏈縺娲�"));
-			return;
-		}
-		
-		if (goodsType.intValue() == Constant.SOURCE_TYPE_JD) { // 浜笢
-			createPosterJD(acceptData, goodsId, goodsType, from, type, user, inviteCode, out);
-		} else if (goodsType.intValue() == Constant.SOURCE_TYPE_PDD) { // 鎷煎澶�
-			createPosterPDD(acceptData, goodsId, goodsType, from, type, user, inviteCode, out);
-		} else {
-			out.print(JsonUtil.loadFalseResult(1, "鍙傛暟浼犻�掗敊璇�"));
-		}
-	}
-	
-	
-	/**
-	 * 鍒涘缓浜笢鍒嗕韩娴锋姤
-	 */
-	private void createPosterJD(WXMPAcceptData acceptData, Long goodsId, Integer goodsType, String from, Integer type, UserInfo user,
-			String inviteCode,  PrintWriter out) {
-		JDGoods jdGoods = jdGoodsCacheUtil.getGoodsInfo(goodsId);
-		if (jdGoods == null) {
-			out.print(JsonUtil.loadFalseResult(2, "鍟嗗搧宸蹭笅鏋�"));
-			return;
-		}
-		ConfigParamsDTO paramsDTO = hongBaoManageService.getShowComputeRate(acceptData.getPlatform(),acceptData.getVersion());
-		GoodsDetailVO goods = GoodsDetailVOFactory.convertJDGoods(jdGoods, paramsDTO);
-		
-		String scene = goodsType+"#"+goodsId+"#" + inviteCode;
-		FileUploadResult uploadResult = null;
-		if (type == 1) {
-			String erCodeUrl = "https://wxmp.banliapp.com/goods?i="+ scene;
-			uploadResult = qrCodeService.drawGoodsPoster(erCodeUrl, user.getPortrait(), goods);
-		} else {
-			String acessToken = WXUtil.getAcessToken(Constant.WXMP_APP_INFO.getAppId(), Constant.WXMP_APP_INFO.getAppSecret());
-			InputStream xcxCode = WXXCXUtil.getXCXCode(acessToken, "/pages/goods/goods", scene);
-			uploadResult = qrCodeService.drawGoodsPosterXCX(xcxCode, user, goods);
-		}
-		
-		try {
-			userShareGoodsRecordService.saveShareRecord(user.getId(), CommonGoodsFactory.create(jdGoods));
-		} catch (UserShareGoodsRecordException e) {
-			e.printStackTrace();
-		}
-		String posterLink = uploadResult.getUrl();
-		
-		JSONObject data = new JSONObject();
-		data.put("posterLink", posterLink);
-		out.print(JsonUtil.loadTrueResult(data));
-		
-		com.yeshi.fanli.util.ThreadUtil.run(new Runnable() {
-			@Override
-			public void run() {
-				// 寮傛鎿嶄綔 娣诲姞鍒嗕韩璁板綍
-				UserShareGoodsHistory history = new UserShareGoodsHistory();
-				history.setUser(new UserInfo(user.getId()));
-				history.setHongbao(new BigDecimal(goods.getMoneyInfo().getShareMoney().replace("楼", "")));
-				history.setCreateTime(new Date());
-				history.setGoodsType(Constant.SOURCE_TYPE_JD);
-				history.setTkCode(null);
-				history.setLink(null);
-				history.setQuanLink(null);
-				history.setGoodsId(goodsId);
-				history.setPostPicture(goods.getPicUrl());
-				history.setPictures(JsonUtil.getGson().toJson(goods.getImgList()));
-				history.setShareImg(posterLink);
-				shareGoodsService.addShareGoodsHistory(history);
-			}
-		});
-	}
-	
-	
-	/**
-	 * 鍒涘缓鎷煎澶氬垎浜捣鎶�
-	 */
-	private void createPosterPDD(WXMPAcceptData acceptData, Long goodsId, Integer goodsType, String from, Integer type, UserInfo user,
-			String inviteCode,  PrintWriter out) {
-		PDDGoodsDetail pddGoods = pinDuoDuoCacheUtil.getGoodsInfo(goodsId);
-		if (pddGoods == null) {
-			out.print(JsonUtil.loadFalseResult(2, "鍟嗗搧宸蹭笅鏋�"));
-			return;
-		}
-		ConfigParamsDTO paramsDTO = hongBaoManageService.getShowComputeRate(acceptData.getPlatform(), acceptData.getVersion());
-		GoodsDetailVO goods = GoodsDetailVOFactory.convertPDDGoods(pddGoods, paramsDTO);
-		
-		String scene = goodsType+"#"+goodsId+"#" + inviteCode;
-		FileUploadResult uploadResult = null;
-		if (type == 1) {
-			String erCodeUrl = "https://wxmp.banliapp.com/goods?info="+ scene;
-			uploadResult = qrCodeService.drawGoodsPoster(erCodeUrl, user.getPortrait(), goods);
-		} else {
-			String acessToken = WXUtil.getAcessToken(Constant.WXMP_APP_INFO.getAppId(), Constant.WXMP_APP_INFO.getAppSecret());
-			InputStream xcxCode = WXXCXUtil.getXCXCode(acessToken, "/pages/goods/goods", scene);
-			uploadResult = qrCodeService.drawGoodsPosterXCX(xcxCode, user, goods);
-		}
-		
-		try {
-			userShareGoodsRecordService.saveShareRecord(user.getId(), CommonGoodsFactory.create(pddGoods));
-		} catch (UserShareGoodsRecordException e) {
-			e.printStackTrace();
-		}
-		String posterLink = uploadResult.getUrl();
-	
-		JSONObject data = new JSONObject();
-		data.put("posterLink", posterLink);
-		out.print(JsonUtil.loadTrueResult(data));
-		
-		// 寮傛鎿嶄綔
-		com.yeshi.fanli.util.ThreadUtil.run(new Runnable() {
-			@Override
-			public void run() {
-				// 寮傛鎿嶄綔 娣诲姞鍒嗕韩璁板綍
-				UserShareGoodsHistory history = new UserShareGoodsHistory();
-				history.setUser(new UserInfo(user.getId()));
-				history.setHongbao(new BigDecimal(goods.getMoneyInfo().getShareMoney().replace("楼", "")));
-				history.setCreateTime(new Date());
-				history.setGoodsType(Constant.SOURCE_TYPE_PDD);
-				history.setTkCode(null);
-				history.setLink(null);
-				history.setQuanLink(null);
-				history.setGoodsId(goodsId);
-				history.setPostPicture(goods.getPicUrl());
-				history.setPictures(JsonUtil.getGson().toJson(goods.getImgList()));
-				history.setShareImg(posterLink);
-				shareGoodsService.addShareGoodsHistory(history);
-			}
-		});
-	}
-}
+package com.yeshi.fanli.controller.wxmp.v1;
+
+import java.io.InputStream;
+import java.io.PrintWriter;
+import java.math.BigDecimal;
+import java.net.URLEncoder;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+
+import javax.annotation.Resource;
+
+import com.yeshi.fanli.entity.SystemEnum;
+import com.yeshi.fanli.entity.SystemPIDInfo;
+import com.yeshi.fanli.service.manger.PIDManager;
+import com.yeshi.fanli.util.*;
+import com.yeshi.fanli.vo.pdd.PDDConvertLinkResultVO;
+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.entity.FileUploadResult;
+import org.yeshi.utils.wx.WXUtil;
+import org.yeshi.utils.wx.WXXCXUtil;
+
+import com.google.gson.Gson;
+import com.google.gson.GsonBuilder;
+import com.yeshi.fanli.dto.GoodsMoneyConfigParamsDTO;
+import com.yeshi.fanli.dto.WXMPAcceptData;
+import com.yeshi.fanli.dto.jd.JDCategoryInfo;
+import com.yeshi.fanli.dto.jd.JDCouponInfo;
+import com.yeshi.fanli.dto.jd.JDFilter;
+import com.yeshi.fanli.dto.jd.JDSearchResult;
+import com.yeshi.fanli.dto.pdd.PDDGoodsDetail;
+import com.yeshi.fanli.dto.pdd.PDDGoodsResult;
+import com.yeshi.fanli.dto.pdd.PDDSearchFilter;
+import com.yeshi.fanli.entity.bus.share.UserShareGoodsHistory;
+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.goods.CollectionGoodsV2;
+import com.yeshi.fanli.entity.jd.JDGoods;
+import com.yeshi.fanli.entity.jd.JDGoodsClass;
+import com.yeshi.fanli.entity.system.ConfigKeyEnum;
+import com.yeshi.fanli.exception.share.UserShareGoodsRecordException;
+import com.yeshi.fanli.exception.user.UserInfoExtraException;
+import com.yeshi.fanli.log.LogHelper;
+import com.yeshi.fanli.service.inter.common.JumpDetailV2Service;
+import com.yeshi.fanli.service.inter.config.ConfigService;
+import com.yeshi.fanli.service.inter.count.HongBaoV2CountService;
+import com.yeshi.fanli.service.inter.goods.CollectionGoodsV2Service;
+import com.yeshi.fanli.service.inter.goods.ScanHistoryV2Service;
+import com.yeshi.fanli.service.inter.goods.ShareGoodsService;
+import com.yeshi.fanli.service.inter.homemodule.SwiperPictureService;
+import com.yeshi.fanli.service.inter.jd.JDGoodsClassService;
+import com.yeshi.fanli.service.inter.order.OrderHongBaoMoneyComputeService;
+import com.yeshi.fanli.service.inter.order.config.HongBaoManageService;
+import com.yeshi.fanli.service.inter.user.QrCodeService;
+import com.yeshi.fanli.service.inter.user.ShamUserService;
+import com.yeshi.fanli.service.inter.user.UserInfoExtraService;
+import com.yeshi.fanli.service.inter.user.UserInfoService;
+import com.yeshi.fanli.service.inter.user.UserShareGoodsRecordService;
+import com.yeshi.fanli.service.inter.user.vip.UserVIPInfoService;
+import com.yeshi.common.entity.PageEntity;
+import com.yeshi.fanli.util.cache.JDGoodsCacheUtil;
+import com.yeshi.fanli.util.cache.PinDuoDuoCacheUtil;
+import com.yeshi.fanli.util.factory.CommonGoodsFactory;
+import com.yeshi.fanli.util.factory.goods.GoodsDetailVOFactory;
+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.vo.goods.CouponInfoVO;
+import com.yeshi.fanli.vo.goods.GoodsDetailExtraVO;
+import com.yeshi.fanli.vo.goods.GoodsDetailVO;
+import com.yeshi.fanli.vo.goods.MoneyInfoVO;
+import com.yeshi.fanli.vo.goods.OtherInfo;
+import com.yeshi.fanli.vo.goods.RewardCouponVO;
+import com.yeshi.fanli.vo.goods.ShareVO;
+import com.yeshi.fanli.vo.goods.ShopInfoVO;
+import com.yeshi.fanli.vo.homemodule.BannerVO;
+
+import net.sf.json.JSONObject;
+
+@Controller("WXMPGoodsController")
+@RequestMapping("/wxmp/api/v1/goods")
+public class GoodsController {
+
+    @Resource
+    private ConfigService configService;
+
+    @Resource
+    private ShamUserService shamUserService;
+
+    @Resource
+    private CollectionGoodsV2Service collectionGoodsV2Service;
+
+    @Resource
+    private HongBaoManageService hongBaoManageService;
+
+    @Resource
+    private OrderHongBaoMoneyComputeService orderHongBaoMoneyComputeService;
+
+    @Resource
+    private UserInfoExtraService userInfoExtraService;
+
+    @Resource
+    private ScanHistoryV2Service scanHistoryV2Service;
+
+    @Resource
+    private UserInfoService userInfoService;
+
+    @Resource
+    private JDGoodsCacheUtil jdGoodsCacheUtil;
+
+    @Resource
+    private PinDuoDuoCacheUtil pinDuoDuoCacheUtil;
+
+    @Resource
+    private JumpDetailV2Service jumpDetailV2Service;
+
+    @Resource
+    private JDGoodsClassService jdGoodsClassService;
+
+    @Resource
+    private UserVIPInfoService userVIPInfoService;
+
+    @Resource
+    private QrCodeService qrCodeService;
+
+    @Resource
+    private ShareGoodsService shareGoodsService;
+
+    @Resource
+    private UserShareGoodsRecordService userShareGoodsRecordService;
+
+    @Resource
+    private SwiperPictureService swiperPictureService;
+
+    @Resource
+    private HongBaoV2CountService hongBaoV2CountService;
+
+
+    @Resource
+    private PIDManager pidManager;
+
+    /**
+     * 涓�绾у垎绫�
+     *
+     * @param acceptData
+     * @param out
+     */
+    @RequestMapping(value = "getTopCategory", method = RequestMethod.POST)
+    public void getTopCategory(WXMPAcceptData acceptData, Long uid, PrintWriter out) {
+
+        SystemEnum system = SystemInfoUtil.getSystemByWXCXCAppId(acceptData.getAppId());
+        JSONObject data = new JSONObject();
+        data.put("list", configService.getValue(ConfigKeyEnum.jdWXMPClass.getKey(), system));
+
+        String tips = null;
+        if (uid == null || uid <= 0) {
+            tips = configService.getValue(ConfigKeyEnum.tipGuideNewUser.getKey(), system);
+        } else {
+            long rebateOrder = hongBaoV2CountService.countRebateOrder(uid);
+            long shareOrInviteOrder = hongBaoV2CountService.countShareOrInviteOrder(uid);
+            if (rebateOrder + shareOrInviteOrder >= 3) {
+                // 鐔熷鐗�
+            } else if (rebateOrder <= 0 && shareOrInviteOrder <= 0) {
+                // 鏂颁汉鐗�
+                tips = configService.getValue(ConfigKeyEnum.tipGuideNewUser.getKey(), system);
+            } else if (rebateOrder > 0 && shareOrInviteOrder <= 0) {
+                // 鐪侀挶鐗�
+                tips = configService.getValue(ConfigKeyEnum.tipGuideSaveMoney.getKey(), system);
+            } else {
+                // 璧氶挶鐗�
+                tips = configService.getValue(ConfigKeyEnum.tipGuideShareInvite.getKey(), system);
+            }
+        }
+
+        if (!StringUtil.isNullOrEmpty(tips)) {
+            JSONObject tipData = JSONObject.fromObject(tips);
+            data.put("tipData", tipData);
+        }
+
+        out.print(JsonUtil.loadTrueResult(data));
+    }
+
+    /**
+     * 涓�绾у垎绫诲晢鍝�
+     *
+     * @param acceptData
+     * @param out
+     */
+    @RequestMapping(value = "getCategoryRecommend", method = RequestMethod.POST)
+    public void getCategoryRecommend(WXMPAcceptData acceptData, Long cid, Integer page, PrintWriter out) {
+        if (cid == null) {
+            out.print(JsonUtil.loadFalseResult("鍒嗙被ID涓虹┖"));
+            return;
+        }
+
+        JSONObject data = new JSONObject();
+        if (page == 1) {
+            // 杞挱鍥�
+            String platform = acceptData.getPlatform();
+            int version = Integer.parseInt(acceptData.getVersion());
+            List<BannerVO> picList = swiperPictureService.getByBannerCardAndVersion("index_top", platform,
+                    version, acceptData.getSystem());
+            if (picList == null) {
+                picList = new ArrayList<>();
+            }
+
+            for (BannerVO swiper : picList) {
+                JSONObject params = null;
+                if (StringUtil.isNullOrEmpty(swiper.getParams())) {
+                    params = JSONObject.fromObject(swiper.getParams());
+                }
+                swiper.setJumpDetail(JumpDetailUtil.getWXMPJumDetail(swiper.getJumpDetail()));
+            }
+            data.put("bannerList", JsonUtil.getApiCommonGson().toJson(picList));
+        }
+
+        JDFilter filterAPI = new JDFilter();
+        filterAPI.setPageIndex(page);
+        filterAPI.setPageSize(Constant.PAGE_SIZE);
+        filterAPI.setIsCoupon(1); // 鏈夊埜
+        filterAPI.setIsHot(1); // 鐖嗘
+        filterAPI.setCid1(cid);
+        JDSearchResult result = JDApiUtil.queryByKey(filterAPI);
+
+        long count = 0;
+        JSONArray array = new JSONArray();
+        if (result != null) {
+            PageEntity pageEntity = result.getPageEntity();
+            if (pageEntity != null) {
+                count = pageEntity.getTotalCount();
+            }
+
+            List<JDGoods> goodsList = result.getGoodsList();
+            if (goodsList != null && goodsList.size() > 0) {
+                Gson gson = JsonUtil.getConvertBigDecimalToStringSubZeroBuilder(new GsonBuilder())
+                        .excludeFieldsWithoutExposeAnnotation().setDateFormat("yyyy-MM-dd").create();
+                GoodsMoneyConfigParamsDTO paramsDTO = orderHongBaoMoneyComputeService.getShowComputeRate(acceptData.getPlatform(),
+                        acceptData.getVersion(), acceptData.getSystem());
+                for (JDGoods goods : goodsList) {
+                    GoodsDetailVO goodsDetailVO = GoodsDetailVOFactory.convertJDGoods(goods, paramsDTO);
+                    if (goodsDetailVO.isHasCoupon()) {
+                        array.add(gson.toJson(goodsDetailVO));
+                    }
+                }
+            }
+        }
+
+        data.put("count", count);
+        data.put("list", array);
+        out.print(JsonUtil.loadTrueResult(data));
+    }
+
+    /**
+     * 鑾峰彇鍟嗗搧璇︽儏
+     *
+     * @param acceptData
+     * @param goodsId    鍟嗗搧id
+     * @param uid        閭�璇风爜
+     * @param goodsType  鍟嗗搧绫诲瀷
+     * @param from       椤甸潰鏉ユ簮
+     * @param out
+     */
+    @RequestMapping(value = "getGoodsDetial")
+    public void getGoodsDetial(WXMPAcceptData acceptData, String goodsId, Integer goodsType, String from, Long uid,
+                               PrintWriter out) {
+        if (goodsType == null || goodsType < 2 || goodsType > 3) {
+            out.print(JsonUtil.loadFalseResult(1, "璇蜂紶閫掓纭钩鍙板弬鏁�"));
+            return;
+        }
+
+        /*--------- 浜笢鍟嗗搧  -------*/
+        if (goodsType.intValue() == Constant.SOURCE_TYPE_JD) {
+            getDetialJD(acceptData, goodsId, uid, from, out);
+            return;
+        }
+
+        /*-------- 鎷煎澶氬晢鍝�  -------*/
+        if (goodsType.intValue() == Constant.SOURCE_TYPE_PDD) {
+            getDetialPDD(acceptData, Long.parseLong(goodsId), uid, from, out);
+            return;
+        }
+    }
+
+    /**
+     * 浜笢鍟嗗搧璇︽儏
+     *
+     * @param acceptData
+     * @param id
+     * @param uid
+     * @param from
+     * @param out
+     */
+    private void getDetialJD(WXMPAcceptData acceptData, String id, Long uid, String from, PrintWriter out) {
+        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);
+
+        GoodsMoneyConfigParamsDTO paramsDTO = orderHongBaoMoneyComputeService.getShowComputeRate(acceptData.getPlatform(),
+                acceptData.getVersion(), acceptData.getSystem());
+        paramsDTO.setMaxRewardRate(null);
+        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姣斾緥 灏忎簬姝e父姣斾緥
+                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);
+                    // 浣跨敤濂栧姳鍒告渶楂樿繑
+
+                    maxMoneyPlus = "锛堜含涓減lus杩斅�"
+                            + JDUtil.getGoodsFanLiMoneyPlus(jdGoods, hongBaoManageService.getFanLiRate(UserLevelEnum.superVIP, acceptData.getSystem())) + "锛�";
+
+                }
+            }
+        }
+
+        // 濂栧姳鍒歌繑鍒�
+        RewardCouponVO rewardCoupon = new RewardCouponVO();
+        rewardCoupon.setMaxMoneyPlus(maxMoneyPlus);
+
+        rewardCoupon.setMaxMoney(goodsDetail.getMoneyInfo().getMaxMoney());
+        rewardCoupon.setDesc("杩�");
+        otherInfo.setRewardCoupon(rewardCoupon);
+        goodsDetail.setOtherInfo(otherInfo);
+
+        CouponInfoVO couponInfo = goodsDetail.getCouponInfo();
+        if (couponInfo != null) {
+            // 鍒搁摼鎺ュ鐞�
+            String materialId = "https://item.jd.com/" + id + ".html";
+            String url = null;
+            try {
+                url = JDApiUtil.convertLinkWithSubUnionId(materialId, couponInfo.getLink(),
+                        null, pidManager.getPidCache(acceptData.getSystem(), Constant.SOURCE_TYPE_JD, SystemPIDInfo.PidType.coupon), null);
+            } catch (Exception e) {
+                e.printStackTrace();
+            }
+            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鏄惁姝e湪涓婄嚎
+        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<>();
+        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.setDetailUrl("https://in.m.jd.com/product/jieshao/video/" + id + ".html");
+
+        // 鍟嗗搧閾炬帴
+        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);
+
+        // 鍒ゆ柇vip
+        if (uid != null) {
+            extraVO.setVip(userVIPInfoService.isVIP(uid));
+        }
+        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;
+        ThreadUtil.run(new Runnable() {
+            public void run() {
+                // 娣诲姞娴忚璁板綍
+                try {
+                    scanHistoryV2Service.addJDScanHistory(uid, acceptData.getDevice(), goods);
+                } catch (Exception e) {
+                    e.printStackTrace();
+                }
+            }
+        });
+    }
+
+    /**
+     * 鎷煎澶氬晢鍝佽鎯�
+     *
+     * @param acceptData
+     * @param id
+     * @param uid
+     * @param from
+     * @param out
+     */
+    private void getDetialPDD(WXMPAcceptData acceptData, Long id, Long uid, String from, PrintWriter out) {
+        PDDGoodsDetail pddGoods = null; //PinDuoDuoApiUtil.getGoodsDetail(id);
+        if (pddGoods == null) {
+            out.print(JsonUtil.loadFalseResult(2, "鍟嗗搧涓嶅瓨鍦�"));
+            return;
+        }
+
+        GoodsMoneyConfigParamsDTO paramsDTO = orderHongBaoMoneyComputeService.getShowComputeRate(acceptData.getPlatform(),
+                acceptData.getVersion(), acceptData.getSystem());
+        paramsDTO.setMaxRewardRate(null);
+        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.getGoodsFanLiMoney(pddGoods, hongBaoManageService.getShareRate(UserLevelEnum.superVIP, acceptData.getSystem())));
+        }
+
+        if (goodsDetail.getCouponInfo() != null) {
+            List<CouponInfoVO> list = new ArrayList<>();
+            list.add(goodsDetail.getCouponInfo());
+            goodsDetail.setCouponInfoList(list);
+        }
+
+        // 濂栧姳鍒歌繑鍒�
+        RewardCouponVO rewardCoupon = new RewardCouponVO();
+
+        rewardCoupon.setMaxMoney(goodsDetail.getMoneyInfo().getMaxMoney());
+        rewardCoupon.setDesc("杩�");
+
+        OtherInfo otherInfo = new OtherInfo();
+        otherInfo.setRewardCoupon(rewardCoupon);
+        goodsDetail.setOtherInfo(otherInfo);
+
+        CouponInfoVO couponInfo = goodsDetail.getCouponInfo();
+        PDDConvertLinkResultVO convertUrl = null;
+        if (couponInfo != null) {
+            convertUrl = PinDuoDuoApiUtil.convert(pddGoods.getGoodsSign(), pidManager.getPidCache(acceptData.getSystem(), Constant.SOURCE_TYPE_PDD, SystemPIDInfo.PidType.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.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);
+        }
+
+        // 鍒嗕韩璺緞
+        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);
+
+        // 鍒ゆ柇vip
+        if (uid != null) {
+            extraVO.setVip(userVIPInfoService.isVIP(uid));
+        }
+
+        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()));
+
+        ThreadUtil.run(new Runnable() {
+            public void run() {
+                try {
+                    scanHistoryV2Service.addPDDScanHistory(uid, acceptData.getDevice(), pddGoods);
+                } catch (Exception e) {
+                    e.printStackTrace();
+                }
+            }
+        });
+    }
+
+    /**
+     * 鍟嗗搧璇︽儏鎺ㄨ崘锛堢寽浣犲枩娆� + 鎺ㄨ崘锛�
+     *
+     * @param acceptData
+     * @param id
+     * @param out
+     */
+    @RequestMapping(value = "getRecommendGoods", method = RequestMethod.POST)
+    public void getRecommendGoods(WXMPAcceptData acceptData, long id, Integer goodsType, PrintWriter out) {
+        if (goodsType == null || goodsType < 2 || goodsType > 3) {
+            out.print(JsonUtil.loadFalseResult(1, "璇蜂紶閫掓纭钩鍙板弬鏁�"));
+            return;
+        }
+
+        try {
+            // 浜笢
+            if (goodsType == Constant.SOURCE_TYPE_JD) {
+                JSONObject data = new JSONObject();
+                data.put("listGuess", JsonUtil.getApiCommonGson().toJson(new ArrayList<GoodsDetailVO>()));
+
+                List<JDGoods> list = JDUtil.getRecommendGoodsById(id);
+                if (list == null) {
+                    list = new ArrayList<JDGoods>();
+                } else if (list.size() > 10) {
+                    list = list.subList(0, 10);
+                }
+
+                GoodsMoneyConfigParamsDTO paramsDTO = orderHongBaoMoneyComputeService.getShowComputeRate(acceptData.getPlatform(),
+                        acceptData.getVersion(), acceptData.getSystem());
+                List<GoodsDetailVO> listDetailVO = new ArrayList<GoodsDetailVO>();
+
+                for (JDGoods goods : list) {
+                    listDetailVO.add(GoodsDetailVOFactory.convertJDGoods(goods, paramsDTO));
+                }
+
+                // 鍙栧伓鏁颁釜鏁版嵁
+                if (listDetailVO.size() % 2 != 0) {
+                    listDetailVO.remove(listDetailVO.size() - 1);
+                }
+
+                data.put("listQuality", JsonUtil.getApiCommonGson().toJson(listDetailVO));
+                out.print(JsonUtil.loadTrueResult(data));
+                return;
+            }
+
+            // 鎷煎澶�
+            if (goodsType == Constant.SOURCE_TYPE_PDD) {
+                JSONObject data = new JSONObject();
+                data.put("listGuess", JsonUtil.getApiCommonGson().toJson(new ArrayList<GoodsDetailVO>()));
+
+                List<GoodsDetailVO> listDetailVO = new ArrayList<GoodsDetailVO>();
+
+                List<Long> goodsIdList = PinDuoDuoUtil.getRecommendGoodsId(id);
+                if (goodsIdList != null && goodsIdList.size() > 0) {
+                    PDDSearchFilter pddfilter = new PDDSearchFilter();
+                    pddfilter.setPage(1);
+                    pddfilter.setPageSize(Constant.PAGE_SIZE);
+                    Long[] strings = new Long[goodsIdList.size()];
+                    pddfilter.setGoodsIdList(goodsIdList.toArray(strings));
+
+                    PDDGoodsResult result = PinDuoDuoApiUtil.searchGoods(pddfilter, Constant.PDD_SEARCH_CUSTOMER_PARAMS);
+                    if (result != null) {
+                        List<PDDGoodsDetail> goodsList = result.getGoodsList();
+                        if (goodsList != null && goodsList.size() > 0) {
+
+                            if (goodsList.size() > 10) {
+                                goodsList = goodsList.subList(0, 10);
+                            }
+
+                            GoodsMoneyConfigParamsDTO paramsDTO = orderHongBaoMoneyComputeService
+                                    .getShowComputeRate(acceptData.getPlatform(), acceptData.getVersion(), acceptData.getSystem());
+                            for (PDDGoodsDetail goods : goodsList) {
+                                listDetailVO.add(GoodsDetailVOFactory.convertPDDGoods(goods, paramsDTO));
+                            }
+                        }
+                    }
+                }
+
+                // 鍙栧伓鏁颁釜鏁版嵁
+                if (listDetailVO.size() % 2 != 0) {
+                    listDetailVO.remove(listDetailVO.size() - 1);
+                }
+
+                data.put("listQuality", JsonUtil.getApiCommonGson().toJson(listDetailVO));
+                out.print(JsonUtil.loadTrueResult(data));
+                return;
+            }
+        } 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));
+        }
+    }
+
+    /**
+     * 鑾峰彇鍟嗗搧璇︽儏
+     *
+     * @param acceptData
+     * @param goodsId    鍟嗗搧id
+     * @param uid        閭�璇风爜
+     * @param goodsType  鍟嗗搧绫诲瀷
+     * @param from       椤甸潰鏉ユ簮
+     * @param out
+     */
+    @RequestMapping(value = "getBuyLink", method = RequestMethod.POST)
+    public void getBuyLink(WXMPAcceptData acceptData, String goodsId, Integer goodsType, String from, String couponUrl,
+                           Long uid, String inviteCode, PrintWriter out) {
+        if (goodsId == null || goodsType == null) {
+            out.print(JsonUtil.loadFalseResult(1, "鍟嗗搧淇℃伅浼犻�掗敊璇�"));
+            return;
+        }
+
+        // 鍒ゆ柇鏄嚜璐� 杩樻槸鏍规嵁閭�璇风爜
+        boolean share = false;
+
+        String subUnionId = "";
+        if (uid != null) {
+            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;
+            }
+            subUnionId = uid.toString();
+        } else if ((uid == null || uid < 1) && !StringUtil.isNullOrEmpty(inviteCode)) {
+            try {
+                UserInfo user = userInfoExtraService.getUserByInviteCode(inviteCode);
+                if (user != null && user.getState() == UserInfo.STATE_NORMAL) {
+                    share = true;
+                    subUnionId = user.getId().toString();
+                }
+            } catch (UserInfoExtraException e) {
+                e.printStackTrace();
+            }
+        }
+
+        String jumpLink = null;
+        if (goodsType.intValue() == Constant.SOURCE_TYPE_JD) { // 浜笢
+            JDGoods goods = jdGoodsCacheUtil.getGoodsInfo(goodsId);
+            if (goods == null) {
+                out.print(JsonUtil.loadFalseResult(2, "鍟嗗搧宸蹭笅鏋�"));
+                return;
+            }
+
+            String materialId = "https://item.jd.com/" + goodsId + ".html";
+            if (StringUtil.isNullOrEmpty(couponUrl)) {
+                JDCouponInfo couponInfo = JDUtil.getShowCouponInfo(goods.getCouponInfoList(), goods.getPrice());
+                if (couponInfo != null) {
+                    couponUrl = couponInfo.getLink();
+                }
+            }
+
+            long position = Long.parseLong(pidManager.getPidCache(acceptData.getSystem(), Constant.SOURCE_TYPE_JD, SystemPIDInfo.PidType.fanli));
+            if (share) {
+                position = Long.parseLong(pidManager.getPidCache(acceptData.getSystem(), Constant.SOURCE_TYPE_JD, SystemPIDInfo.PidType.share));
+            }
+            String jdLink = null;
+            try {
+                jdLink = JDApiUtil.convertLinkWithSubUnionId(materialId, couponUrl, null, position + "", subUnionId);
+            } catch (Exception e) {
+                e.printStackTrace();
+            }
+            try {
+                jumpLink = "/pages/union/proxy/proxy?spreadUrl=" + URLEncoder.encode(jdLink, "UTF-8");
+            } catch (Exception e) {
+                LogHelper.errorDetailInfo(e);
+            }
+        } else if (goodsType.intValue() == Constant.SOURCE_TYPE_PDD) { // 鎷煎澶�
+            PDDGoodsDetail goods = pinDuoDuoCacheUtil.getGoodsInfo(goodsId);
+            if (goods == null) {
+                out.print(JsonUtil.loadFalseResult(2, "鍟嗗搧宸蹭笅鏋�"));
+                return;
+            }
+
+            String position = pidManager.getPidCache(acceptData.getSystem(), Constant.SOURCE_TYPE_PDD, SystemPIDInfo.PidType.fanli);
+            if (share) {
+                position = pidManager.getPidCache(acceptData.getSystem(), Constant.SOURCE_TYPE_PDD, SystemPIDInfo.PidType.share);
+            }
+            jumpLink = PinDuoDuoApiUtil.convertWXMP(goodsId, position, subUnionId);
+        } else {
+            out.print(JsonUtil.loadFalseResult(1, "鍙傛暟浼犻�掗敊璇�"));
+            return;
+        }
+
+        if (StringUtil.isNullOrEmpty(jumpLink)) {
+            out.print(JsonUtil.loadFalseResult(1, "鍒涘缓璐拱淇℃伅澶辫触"));
+            return;
+        }
+
+        JSONObject data = new JSONObject();
+        data.put("goodsType", goodsType);
+        data.put("jumpLink", jumpLink);
+        out.print(JsonUtil.loadTrueResult(data));
+    }
+
+    /**
+     * 鍒嗕韩鍟嗗搧娴锋姤
+     *
+     * @param acceptData
+     * @param goodsId
+     * @param goodsType
+     * @param from
+     * @param type
+     * @param uid
+     * @param out
+     */
+    @RequestMapping(value = "sharePoster", method = RequestMethod.POST)
+    public void sharePoster(WXMPAcceptData acceptData, String goodsId, Integer goodsType, String from, Integer type,
+                            Long uid, PrintWriter out) {
+        if (uid == null || uid < 1) {
+            out.print(JsonUtil.loadFalseResult(1, "鐢ㄦ埛鏈櫥褰�"));
+            return;
+        }
+
+        if (goodsId == null || goodsType == null) {
+            out.print(JsonUtil.loadFalseResult(1, "鍟嗗搧淇℃伅浼犻�掗敊璇�"));
+            return;
+        }
+
+        if (type == null || type < 1 || type > 2) {
+            out.print(JsonUtil.loadFalseResult(1, "鍒嗕韩绫诲瀷閿欒"));
+            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;
+        }
+
+        String inviteCode = userInfoExtraService.getInviteCodeByUid(uid);
+        if (StringUtil.isNullOrEmpty(inviteCode)) {
+            out.print(JsonUtil.loadFalseResult(1, "閭�璇风爜鏈縺娲�"));
+            return;
+        }
+
+        if (goodsType.intValue() == Constant.SOURCE_TYPE_JD) { // 浜笢
+            createPosterJD(acceptData, goodsId, goodsType, from, type, user, inviteCode, out);
+        } else if (goodsType.intValue() == Constant.SOURCE_TYPE_PDD) { // 鎷煎澶�
+            createPosterPDD(acceptData, goodsId, goodsType, from, type, user, inviteCode, out);
+        } else {
+            out.print(JsonUtil.loadFalseResult(1, "鍙傛暟浼犻�掗敊璇�"));
+        }
+    }
+
+    /**
+     * 鍒涘缓浜笢鍒嗕韩娴锋姤
+     */
+    private void createPosterJD(WXMPAcceptData acceptData, String goodsId, Integer goodsType, String from, Integer type,
+                                UserInfo user, String inviteCode, PrintWriter out) {
+        JDGoods jdGoods = jdGoodsCacheUtil.getGoodsInfo(goodsId);
+        if (jdGoods == null) {
+            out.print(JsonUtil.loadFalseResult(2, "鍟嗗搧宸蹭笅鏋�"));
+            return;
+        }
+        GoodsMoneyConfigParamsDTO paramsDTO = orderHongBaoMoneyComputeService.getShowComputeRate(acceptData.getPlatform(),
+                acceptData.getVersion(), acceptData.getSystem());
+        GoodsDetailVO goods = GoodsDetailVOFactory.convertJDGoods(jdGoods, paramsDTO);
+
+        String scene = goodsType + "#" + goodsId + "#" + inviteCode;
+        FileUploadResult uploadResult = null;
+        if (type == 1) {
+            String erCodeUrl = "https://wxmp.banliapp.com/goods?i=" + scene;
+            uploadResult = qrCodeService.drawGoodsPoster(erCodeUrl, user.getPortrait(), goods);
+        } else {
+            String acessToken = WXUtil.getAcessToken(Constant.WXMP_APP_INFO.getAppId(),
+                    Constant.WXMP_APP_INFO.getAppSecret());
+            InputStream xcxCode = WXXCXUtil.getXCXCode(acessToken, "/pages/goods/goods", scene);
+            uploadResult = qrCodeService.drawGoodsPosterXCX(xcxCode, user, goods);
+        }
+
+        try {
+            userShareGoodsRecordService.saveShareRecord(user.getId(), CommonGoodsFactory.create(jdGoods));
+        } catch (UserShareGoodsRecordException e) {
+            e.printStackTrace();
+        }
+        String posterLink = uploadResult.getUrl();
+
+        JSONObject data = new JSONObject();
+        data.put("posterLink", posterLink);
+        out.print(JsonUtil.loadTrueResult(data));
+
+        com.yeshi.fanli.util.ThreadUtil.run(new Runnable() {
+            @Override
+            public void run() {
+                // 寮傛鎿嶄綔 娣诲姞鍒嗕韩璁板綍
+                UserShareGoodsHistory history = new UserShareGoodsHistory();
+                history.setUser(new UserInfo(user.getId()));
+                history.setHongbao(new BigDecimal(goods.getMoneyInfo().getShareMoney().replace("楼", "")));
+                history.setCreateTime(new Date());
+                history.setGoodsType(Constant.SOURCE_TYPE_JD);
+                history.setTkCode(null);
+                history.setLink(null);
+                history.setQuanLink(null);
+                history.setGoodsId(goodsId+"");
+                history.setPostPicture(goods.getPicUrl());
+                history.setPictures(JsonUtil.getGson().toJson(goods.getImgList()));
+                history.setShareImg(posterLink);
+                shareGoodsService.addShareGoodsHistory(history);
+            }
+        });
+    }
+
+    /**
+     * 鍒涘缓鎷煎澶氬垎浜捣鎶�
+     */
+    private void createPosterPDD(WXMPAcceptData acceptData, String goodsId, Integer goodsType, String from, Integer type,
+                                 UserInfo user, String inviteCode, PrintWriter out) {
+        PDDGoodsDetail pddGoods = pinDuoDuoCacheUtil.getGoodsInfo(goodsId);
+        if (pddGoods == null) {
+            out.print(JsonUtil.loadFalseResult(2, "鍟嗗搧宸蹭笅鏋�"));
+            return;
+        }
+        GoodsMoneyConfigParamsDTO paramsDTO = orderHongBaoMoneyComputeService.getShowComputeRate(acceptData.getPlatform(),
+                acceptData.getVersion(), acceptData.getSystem());
+        GoodsDetailVO goods = GoodsDetailVOFactory.convertPDDGoods(pddGoods, paramsDTO);
+
+        String scene = goodsType + "#" + goodsId + "#" + inviteCode;
+        FileUploadResult uploadResult = null;
+        if (type == 1) {
+            String erCodeUrl = "https://wxmp.banliapp.com/goods?info=" + scene;
+            uploadResult = qrCodeService.drawGoodsPoster(erCodeUrl, user.getPortrait(), goods);
+        } else {
+            String acessToken = WXUtil.getAcessToken(Constant.WXMP_APP_INFO.getAppId(),
+                    Constant.WXMP_APP_INFO.getAppSecret());
+            InputStream xcxCode = WXXCXUtil.getXCXCode(acessToken, "/pages/goods/goods", scene);
+            uploadResult = qrCodeService.drawGoodsPosterXCX(xcxCode, user, goods);
+        }
+
+        try {
+            userShareGoodsRecordService.saveShareRecord(user.getId(), CommonGoodsFactory.create(pddGoods));
+        } catch (UserShareGoodsRecordException e) {
+            e.printStackTrace();
+        }
+        String posterLink = uploadResult.getUrl();
+
+        JSONObject data = new JSONObject();
+        data.put("posterLink", posterLink);
+        out.print(JsonUtil.loadTrueResult(data));
+
+        // 寮傛鎿嶄綔
+        com.yeshi.fanli.util.ThreadUtil.run(new Runnable() {
+            @Override
+            public void run() {
+                // 寮傛鎿嶄綔 娣诲姞鍒嗕韩璁板綍
+                UserShareGoodsHistory history = new UserShareGoodsHistory();
+                history.setUser(new UserInfo(user.getId()));
+                history.setHongbao(new BigDecimal(goods.getMoneyInfo().getShareMoney().replace("楼", "")));
+                history.setCreateTime(new Date());
+                history.setGoodsType(Constant.SOURCE_TYPE_PDD);
+                history.setTkCode(null);
+                history.setLink(null);
+                history.setQuanLink(null);
+                history.setGoodsId(goodsId+"");
+                history.setPostPicture(goods.getPicUrl());
+                history.setPictures(JsonUtil.getGson().toJson(goods.getImgList()));
+                history.setShareImg(posterLink);
+                shareGoodsService.addShareGoodsHistory(history);
+            }
+        });
+    }
+}

--
Gitblit v1.8.0