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(), params));
|
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比例 小于正常比例
|
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 = "(京东plus返¥"
|
+ JDUtil.getGoodsFanLiMoneyPlus(jdGoods,
|
hongBaoManageService.getVIPFanLiRate())
|
+ ")";
|
} else
|
maxMoneyPlus = "(京东plus最高返¥"
|
+ 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是否正在上线
|
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?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(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);
|
}
|
});
|
}
|
}
|