package com.yeshi.fanli.controller.h5;
|
|
import java.io.PrintWriter;
|
import java.math.BigDecimal;
|
import java.util.ArrayList;
|
import java.util.Arrays;
|
import java.util.List;
|
|
import javax.annotation.Resource;
|
|
import org.springframework.stereotype.Controller;
|
import org.springframework.web.bind.annotation.RequestMapping;
|
import org.springframework.web.bind.annotation.RequestMethod;
|
import org.yeshi.utils.JsonUtil;
|
import org.yeshi.utils.taobao.TbImgUtil;
|
|
import com.google.gson.Gson;
|
import com.yeshi.fanli.dto.jd.JDCouponInfo;
|
import com.yeshi.fanli.dto.jd.JDPingouInfo;
|
import com.yeshi.fanli.dto.pdd.PDDGoodsDetail;
|
import com.yeshi.fanli.entity.accept.AcceptData;
|
import com.yeshi.fanli.entity.bus.recommend.RecommendBanner;
|
import com.yeshi.fanli.entity.bus.share.UserShareGoodsHistory;
|
import com.yeshi.fanli.entity.bus.su.recommend.SuperRecommendBanner;
|
import com.yeshi.fanli.entity.bus.tlj.UserTaoLiJinRecord;
|
import com.yeshi.fanli.entity.jd.JDGoods;
|
import com.yeshi.fanli.entity.system.BusinessSystem;
|
import com.yeshi.fanli.entity.taobao.ClientTBPid;
|
import com.yeshi.fanli.entity.taobao.PidUser;
|
import com.yeshi.fanli.entity.taobao.TaoBaoGoodsBrief;
|
import com.yeshi.fanli.entity.taobao.TaoBaoLink;
|
import com.yeshi.fanli.entity.taobao.TaoBaoUnionConfig;
|
import com.yeshi.fanli.entity.taobao.TaoKeAppInfo;
|
import com.yeshi.fanli.exception.ShareGoodsException;
|
import com.yeshi.fanli.exception.share.UserShareGoodsRecordException;
|
import com.yeshi.fanli.exception.taobao.TaobaoGoodsDownException;
|
import com.yeshi.fanli.service.inter.config.BusinessSystemService;
|
import com.yeshi.fanli.service.inter.config.ConfigService;
|
import com.yeshi.fanli.service.inter.config.SystemConfigService;
|
import com.yeshi.fanli.service.inter.goods.ShareGoodsService;
|
import com.yeshi.fanli.service.inter.goods.SuperRecommendBannerService;
|
import com.yeshi.fanli.service.inter.goods.TaoBaoGoodsBriefService;
|
import com.yeshi.fanli.service.inter.hongbao.HongBaoManageService;
|
import com.yeshi.fanli.service.inter.taobao.TaoBaoUnionConfigService;
|
import com.yeshi.fanli.service.inter.tlj.UserTaoLiJinRecordService;
|
import com.yeshi.fanli.service.inter.user.TBPidService;
|
import com.yeshi.fanli.service.inter.user.UserShareGoodsGroupService;
|
import com.yeshi.fanli.util.AESUtil;
|
import com.yeshi.fanli.util.Constant;
|
import com.yeshi.fanli.util.MoneyBigDecimalUtil;
|
import com.yeshi.fanli.util.RedisManager;
|
import com.yeshi.fanli.util.StringUtil;
|
import com.yeshi.fanli.util.ThreadUtil;
|
import com.yeshi.fanli.util.jd.JDApiUtil;
|
import com.yeshi.fanli.util.jd.JDUtil;
|
import com.yeshi.fanli.util.pinduoduo.PinDuoDuoApiUtil;
|
import com.yeshi.fanli.util.pinduoduo.PinDuoDuoUtil;
|
import com.yeshi.fanli.util.taobao.TaoBaoUtil;
|
import com.yeshi.fanli.util.taobao.TaoKeApiUtil;
|
|
import net.sf.json.JSONObject;
|
|
@Controller
|
@RequestMapping("api/h5/v1/webRecommend")
|
public class H5RecommendController {
|
|
@Resource
|
private H5ControllerUtil h5ControllerUtil;
|
|
@Resource
|
private SuperRecommendBannerService superRecommendBannerService;
|
|
@Resource
|
private HongBaoManageService hongBaoManageService;
|
|
@Resource
|
private RedisManager redisManager;
|
|
@Resource
|
private BusinessSystemService businessSystemService;
|
|
@Resource
|
private ConfigService configService;
|
|
@Resource
|
private SystemConfigService systemConfigService;
|
|
@Resource
|
private TaoBaoGoodsBriefService taoBaoGoodsBriefService;
|
|
@Resource
|
private TBPidService tbPidService;
|
|
@Resource
|
private ShareGoodsService shareGoodsService;
|
|
@Resource
|
private TaoBaoUnionConfigService taoBaoUnionConfigService;
|
|
@Resource
|
private UserShareGoodsGroupService userShareGoodsGroupService;
|
|
@Resource
|
private UserTaoLiJinRecordService userTaoLiJinRecordService;
|
|
|
/**
|
*
|
* 方法说明: 推荐轮播商品信息
|
*
|
* @author mawurui createTime 2018年5月11日 上午11:13:47
|
* @param acceptData
|
* @param out
|
*/
|
@RequestMapping(value = "getRecommenBanner", method = RequestMethod.GET)
|
public void getRecommendBanner(AcceptData acceptData, String callback, PrintWriter out) {
|
|
BusinessSystem system = businessSystemService.getBusinessSystem("WEB",
|
Constant.systemCommonConfig.getH5PackageName());
|
JSONObject json = new JSONObject();
|
if (system == null) {
|
out.print(JsonUtil.loadFalseResult(1, H5ControllerUtil.NOSYSTEM));
|
return;
|
}
|
List<SuperRecommendBanner> superRecommendBanners = superRecommendBannerService
|
.getSuperRecommendBannersBySystem(system);
|
List<RecommendBanner> list = null;
|
for (SuperRecommendBanner superRecommendBanner : superRecommendBanners) {
|
if (list == null) {
|
list = new ArrayList<RecommendBanner>();
|
}
|
RecommendBanner recommendBanner = superRecommendBanner.getRecommendBanner();
|
// 淘特价暂时修改
|
if (system.getId() == 7) {
|
recommendBanner.getJumpDetail().setActivity(recommendBanner.getJumpDetail().getActivity()
|
.replace("com.yeshi.ec.rebate.myapplication", "com.yeshi.ec.taospecial"));
|
}
|
|
list.add(recommendBanner);
|
}
|
|
if (list == null) {
|
json.put("code", "1");
|
json.put("msg", H5ControllerUtil.NODATA);
|
out.print(json);
|
java.lang.System.out.println("json-" + json);
|
return;
|
}
|
json.put("code", 0);
|
JSONObject data = new JSONObject();
|
data.put("count", list.size());
|
Gson gson = new Gson();
|
data.put("data", gson.toJson(list));
|
json.put("data", data);
|
// jsonp方式返回
|
out.print(JsonUtil.loadJSONP(callback, JsonUtil.loadTrueResult(json)));
|
return;
|
}
|
|
/**
|
* 处理条件
|
*
|
* @param uid
|
* @param tid
|
* @param out
|
*/
|
private void doTaoLiJin(String callback, Long uid, Long tid, PrintWriter out) {
|
// 查询商品淘礼金
|
UserTaoLiJinRecord record = userTaoLiJinRecordService.selectByPrimaryKey(tid);
|
if (record == null) {
|
out.print(JsonUtil.loadJSONP(callback, JsonUtil.loadFalseResult("商品信息获取失败")));
|
return;
|
}
|
|
Long auctionId = record.getGoodsId();
|
String tljLink = record.getSendUrl();
|
BigDecimal tljMoney= record.getPerFace();
|
|
TaoBaoGoodsBrief goods = null;
|
try {
|
goods = redisManager.getTaoBaoGoodsBrief(auctionId);
|
} catch (TaobaoGoodsDownException e) {
|
}
|
|
if (goods == null) {// 已经下线
|
out.print(JsonUtil.loadJSONP(callback, JsonUtil.loadFalseResult("商品信息获取失败")));
|
return;
|
}
|
|
String token = redisManager.getTLJToken(tljLink);
|
if (StringUtil.isNullOrEmpty(token)) {
|
token = TaoKeApiUtil.getTKToken(goods.getPictUrl(), goods.getTitle(), tljLink);
|
}
|
|
// 券后价
|
BigDecimal afterCouponPrice = TaoBaoUtil.getAfterUseCouplePrice(goods);
|
TaoBaoLink link = new TaoBaoLink();
|
link.setTaoToken(token);
|
|
JSONObject data = new JSONObject();
|
data.put("title", goods.getTitle());
|
if (goods.getImgList() == null)
|
goods.setImgList(new ArrayList<>());
|
goods.getImgList().add(0, TbImgUtil.getTBSizeImg(goods.getPictUrl(), 300));
|
data.put("imgs", goods.getImgList());
|
data.put("couponPrice", afterCouponPrice);
|
// 老版本兼容
|
data.put("quanPrice", afterCouponPrice);
|
data.put("zkPrice", goods.getZkPrice());
|
data.put("shareContent", "长按复制本段文字,打开【手机淘宝】即可领取【特别优惠券】购买下单,");
|
data.put("token", link.getTaoToken());
|
data.put("reservePrice", goods.getReservePrice());
|
data.put("shopType", goods.getUserType() == 1 ? 2 : 1);
|
if (!StringUtil.isNullOrEmpty(goods.getCouponInfo()) && !"无".equalsIgnoreCase(goods.getCouponInfo())) {
|
data.put("couponAmount", MoneyBigDecimalUtil.getWithNoZera(goods.getCouponAmount()));
|
data.put("coupon", true);
|
} else {
|
data.put("coupon", false);
|
}
|
|
data.put("tljMoney", tljMoney);
|
|
out.print(JsonUtil.loadJSONP(callback, JsonUtil.loadTrueResult(data)));
|
}
|
|
/**
|
*
|
* 方法说明: 获取商品详情
|
*
|
* @author mawurui createTime 2018年5月11日 上午11:37:02
|
* @param acceptData
|
* @param id
|
* @param uid
|
* @param out
|
*/
|
|
@SuppressWarnings("unused")
|
@RequestMapping(value = "getGoodsDetail", method = RequestMethod.GET)
|
public void getGoodsDetail(final AcceptData acceptData, final String id, String tid, String uid, String callback,
|
PrintWriter out) {
|
long begin = java.lang.System.currentTimeMillis();
|
if (StringUtil.isNullOrEmpty(id)) {
|
out.print(JsonUtil.loadFalseResult(1, "请上传id"));
|
return;
|
}
|
|
if (!StringUtil.isNullOrEmpty(uid)) {
|
uid = AESUtil.decrypt(uid, Constant.UIDAESKEY);
|
}
|
|
if (!StringUtil.isNullOrEmpty(tid)) {
|
tid = AESUtil.decrypt(tid, Constant.UIDAESKEY);
|
doTaoLiJin(callback, StringUtil.isNullOrEmpty(uid) || Long.parseLong(uid) == 0 ? null : Long.parseLong(uid),
|
Long.parseLong(tid), out);
|
return;
|
}
|
|
TaoBaoGoodsBrief goods = null;
|
String token = null;
|
if (!StringUtil.isNullOrEmpty(uid)) {
|
// 查询是否有分享记录
|
UserShareGoodsHistory shareHistory = null;
|
try {
|
shareHistory = shareGoodsService.getShareGoodsHistoryDetail(Long.parseLong(uid), Long.parseLong(id));
|
} catch (NumberFormatException e) {
|
e.printStackTrace();
|
} catch (ShareGoodsException e) {
|
e.printStackTrace();
|
}
|
|
if (shareHistory != null) {// 有分享记录
|
token = shareHistory.getTkCode();
|
goods = redisManager.getTaoBaoGoodsTemp(Long.parseLong(id));
|
if (goods == null)
|
try {
|
goods = TaoKeApiUtil.searchGoodsDetail(Long.parseLong(id));
|
} catch (NumberFormatException e) {
|
e.printStackTrace();
|
} catch (TaobaoGoodsDownException e) {
|
e.printStackTrace();
|
}
|
|
} else {// 没有分享记录,需要直接分享
|
List<TaoBaoUnionConfig> configList = taoBaoUnionConfigService
|
.getConfigByTypeCache(PidUser.TYPE_SHARE_GOODS);
|
String pid = null;
|
ClientTBPid tbPid = tbPidService.getSharePid();
|
if (tbPid != null)
|
pid = tbPid.getPid();
|
else {
|
pid = configList.get(0).getDefaultPid();
|
}
|
|
// 获取
|
TaoKeAppInfo app = new TaoKeAppInfo();
|
app.setAdzoneId(pid.split("_")[3]);
|
app.setAppKey(configList.get(0).getAppKey());
|
app.setAppSecret(configList.get(0).getAppSecret());
|
app.setPid(pid);
|
try {
|
goods = TaoKeApiUtil.searchGoodsDetail(Long.parseLong(id), app);
|
} catch (NumberFormatException e) {
|
e.printStackTrace();
|
} catch (TaobaoGoodsDownException e) {
|
e.printStackTrace();
|
}
|
if (goods != null) {
|
String url = goods.getAuctionUrl();
|
if (!StringUtil.isNullOrEmpty(goods.getCouponLink())) {
|
url = goods.getCouponLink();
|
}
|
token = TaoKeApiUtil.getTKToken(goods.getPictUrl(), goods.getTitle(), url);
|
}
|
}
|
|
} else {
|
List<TaoBaoUnionConfig> configList = taoBaoUnionConfigService
|
.getConfigByTypeCache(PidUser.TYPE_SHARE_GOODS);
|
String pid = tbPidService.getSharePid().getPid();
|
TaoKeAppInfo app = new TaoKeAppInfo();
|
app.setAdzoneId(pid.split("_")[3]);
|
app.setAppKey(configList.get(0).getAppKey());
|
app.setAppSecret(configList.get(0).getAppSecret());
|
app.setPid(pid);
|
try {
|
goods = TaoKeApiUtil.searchGoodsDetail(Long.parseLong(id), app);
|
} catch (NumberFormatException e) {
|
e.printStackTrace();
|
} catch (TaobaoGoodsDownException e) {
|
e.printStackTrace();
|
}
|
if (goods != null) {
|
String url = goods.getAuctionUrl();
|
if (!StringUtil.isNullOrEmpty(goods.getCouponLink())) {
|
url = goods.getCouponLink();
|
}
|
if (!url.contains("uland.taobao.com") && !url.contains("s.click.taobao.com")) {
|
TaoBaoGoodsBrief linkInfo = TaoKeApiUtil.specialConvertCoupon(Long.parseLong(id), app);
|
url = linkInfo.getCouponLink();
|
if (StringUtil.isNullOrEmpty(url))
|
url = linkInfo.getAuctionUrl();
|
}
|
|
token = TaoKeApiUtil.getTKToken(goods.getPictUrl(), goods.getTitle(), url);
|
}
|
}
|
|
if (goods == null) {
|
out.print(JsonUtil.loadJSONP(callback, JsonUtil.loadFalseResult("商品信息获取失败")));
|
return;
|
}
|
|
if (StringUtil.isNullOrEmpty(token)) {
|
out.print(JsonUtil.loadJSONP(callback, JsonUtil.loadFalseResult("口令生成失败")));
|
return;
|
}
|
|
// 券后价
|
BigDecimal afterCouponPrice = TaoBaoUtil.getAfterUseCouplePrice(goods);
|
TaoBaoLink link = new TaoBaoLink();
|
link.setTaoToken(token);
|
|
JSONObject data = new JSONObject();
|
data.put("title", goods.getTitle());
|
if (goods.getImgList() == null)
|
goods.setImgList(new ArrayList<>());
|
goods.getImgList().add(0, TbImgUtil.getTBSizeImg(goods.getPictUrl(), 300));
|
data.put("imgs", goods.getImgList());
|
data.put("couponPrice", afterCouponPrice);
|
// 老版本兼容
|
data.put("quanPrice", afterCouponPrice);
|
data.put("zkPrice", goods.getZkPrice());
|
data.put("shareContent", "长按复制本段文字,打开【手机淘宝】即可领取【特别优惠券】购买下单,");
|
data.put("token", link.getTaoToken());
|
data.put("reservePrice", goods.getReservePrice());
|
data.put("shopType", goods.getUserType() == 1 ? 2 : 1);
|
if (!StringUtil.isNullOrEmpty(goods.getCouponInfo()) && !"无".equalsIgnoreCase(goods.getCouponInfo())) {
|
data.put("couponAmount", MoneyBigDecimalUtil.getWithNoZera(goods.getCouponAmount()));
|
data.put("coupon", true);
|
// 老版本兼容
|
data.put("quan", true);
|
} else {
|
data.put("coupon", false);
|
// 老版本兼容
|
data.put("quan", true);
|
}
|
|
out.print(JsonUtil.loadJSONP(callback, JsonUtil.loadTrueResult(data)));
|
|
final String tempUid = uid;
|
ThreadUtil.run(new Runnable() {
|
|
@Override
|
public void run() {
|
try {
|
if (!StringUtil.isNullOrEmpty(tempUid))
|
userShareGoodsGroupService.updateBrowseRecord(Long.parseLong(tempUid), Long.parseLong(id), 1);
|
} catch (NumberFormatException e) {
|
e.printStackTrace();
|
} catch (UserShareGoodsRecordException e) {
|
e.printStackTrace();
|
}
|
}
|
});
|
return;
|
}
|
|
|
|
/**
|
* 京东分享商品信息
|
* @param acceptData
|
* @param id
|
* @param uid
|
* @param callback
|
* @param out
|
*/
|
@RequestMapping(value = "getJDGoodsDetail")
|
public void getJDGoodsDetail(final AcceptData acceptData, final Long id, String uid, String callback,
|
PrintWriter out) {
|
if (id == null) {
|
out.print(JsonUtil.loadFalseResult(1, "请上传id"));
|
return;
|
}
|
|
if (!StringUtil.isNullOrEmpty(uid)) {
|
uid = AESUtil.decrypt(uid, Constant.UIDAESKEY);
|
}
|
|
JDGoods jdGoods = JDApiUtil.queryGoodsDetail(id);
|
if (jdGoods == null) {
|
jdGoods = JDApiUtil.getGoodsDetail(id);
|
}
|
|
if (jdGoods == null) {
|
out.print(JsonUtil.loadJSONP(callback, JsonUtil.loadFalseResult("商品信息获取失败")));
|
return;
|
}
|
|
List<String> imageList = jdGoods.getImageList();
|
if (imageList == null) {
|
imageList = new ArrayList<>();
|
imageList.add(jdGoods.getPicUrl());
|
}
|
|
boolean hasCoupon = false;
|
String couponUrl = null;
|
BigDecimal discount = new BigDecimal(0);
|
JDCouponInfo couponInfo = jdGoods.getCouponInfo();
|
if (couponInfo != null) {
|
hasCoupon = true;
|
discount = couponInfo.getDiscount();
|
couponUrl = couponInfo.getLink();
|
}
|
|
boolean jdzy = false;
|
String owner = jdGoods.getOwner();
|
if (!StringUtil.isNullOrEmpty(owner) && "g".equalsIgnoreCase(owner)) {
|
jdzy = true;
|
}
|
|
String materialId = "https://item.jd.com/" + id + ".html";
|
String jumpLink = JDApiUtil.convertLink(materialId, couponUrl, JDApiUtil.POSITION_SHARE + "", uid);
|
|
int priceType = 1;
|
BigDecimal price = jdGoods.getPrice();;
|
JDPingouInfo pinGouInfo = jdGoods.getPinGouInfo();
|
if (pinGouInfo != null) {
|
priceType = 2; // 拼购价
|
price = pinGouInfo.getPingouPrice();
|
}
|
|
JSONObject data = new JSONObject();
|
data.put("jdzy", jdzy);
|
data.put("imgs", imageList);
|
data.put("title", jdGoods.getSkuName());
|
data.put("zkPrice", price);
|
data.put("priceType", priceType);
|
data.put("coupon", hasCoupon);
|
data.put("couponAmount", discount);
|
data.put("couponPrice", JDUtil.getQuanPrice(jdGoods));
|
data.put("helpLink", configService.get("jd_share_h5_help_link"));
|
data.put("jumpLink", jumpLink);
|
JsonUtil.printMode(out, callback, JsonUtil.loadTrueResult(data));
|
|
final String tempUid = uid;
|
ThreadUtil.run(new Runnable() {
|
@Override
|
public void run() {
|
try {
|
if (!StringUtil.isNullOrEmpty(tempUid))
|
userShareGoodsGroupService.updateBrowseNum(Long.parseLong(tempUid), id, Constant.SOURCE_TYPE_JD);
|
} catch (NumberFormatException e) {
|
e.printStackTrace();
|
} catch (UserShareGoodsRecordException e) {
|
e.printStackTrace();
|
}
|
}
|
});
|
return;
|
}
|
|
|
/**
|
* 拼多多分享商品详情
|
* @param acceptData
|
* @param id
|
* @param uid
|
* @param callback
|
* @param out
|
*/
|
@RequestMapping(value = "getPDDGoodsDetail")
|
public void getPDDGoodsDetail(final AcceptData acceptData, final Long id, String uid, String callback,
|
PrintWriter out) {
|
if (id == null) {
|
out.print(JsonUtil.loadFalseResult(1, "请上传id"));
|
return;
|
}
|
|
if (!StringUtil.isNullOrEmpty(uid)) {
|
uid = AESUtil.decrypt(uid, Constant.UIDAESKEY);
|
}
|
|
PDDGoodsDetail pddGoods = PinDuoDuoApiUtil.getGoodsDetail(id);
|
if (pddGoods == null) {
|
out.print(JsonUtil.loadJSONP(callback, JsonUtil.loadFalseResult("商品信息获取失败")));
|
return;
|
}
|
|
List<String> imageList = null;
|
String[] goodsGalleryUrls = pddGoods.getGoodsGalleryUrls();
|
if (goodsGalleryUrls != null) {
|
imageList = Arrays.asList(goodsGalleryUrls);
|
}
|
if (imageList == null) {
|
imageList = new ArrayList<>();
|
String goodsImageUrl = pddGoods.getGoodsImageUrl();
|
if (!StringUtil.isNullOrEmpty(goodsImageUrl)) {
|
imageList.add(goodsImageUrl);
|
}
|
}
|
|
BigDecimal hundred = new BigDecimal(100);
|
Boolean hasCoupon = pddGoods.getHasCoupon();
|
BigDecimal amount = new BigDecimal(0);
|
if (hasCoupon != null && hasCoupon) {
|
amount = MoneyBigDecimalUtil.div(new BigDecimal(pddGoods.getCouponDiscount()), hundred).setScale(2);
|
} else {
|
hasCoupon = false;
|
}
|
|
String jumpLink = PinDuoDuoApiUtil.convert(id, PinDuoDuoApiUtil.PID_SHARE + "", uid);
|
|
JSONObject data = new JSONObject();
|
data.put("imgs", imageList);
|
data.put("title", pddGoods.getGoodsName());
|
data.put("zkPrice", MoneyBigDecimalUtil.div(new BigDecimal(pddGoods.getMinGroupPrice()), hundred).setScale(2));
|
data.put("coupon", hasCoupon);
|
data.put("couponAmount", amount);
|
data.put("couponPrice", PinDuoDuoUtil.getQuanPrice(pddGoods));
|
data.put("helpLink", configService.get("pdd_share_h5_help_link"));
|
data.put("jumpLink", jumpLink);
|
JsonUtil.printMode(out, callback, JsonUtil.loadTrueResult(data));
|
|
final String tempUid = uid;
|
ThreadUtil.run(new Runnable() {
|
@Override
|
public void run() {
|
try {
|
if (!StringUtil.isNullOrEmpty(tempUid))
|
userShareGoodsGroupService.updateBrowseNum(Long.parseLong(tempUid), id, Constant.SOURCE_TYPE_PDD);
|
} catch (NumberFormatException e) {
|
e.printStackTrace();
|
} catch (UserShareGoodsRecordException e) {
|
e.printStackTrace();
|
}
|
}
|
});
|
return;
|
}
|
}
|