package com.yeshi.fanli.service.manger.goods;
|
|
import com.yeshi.common.entity.taobao.TaoKeAppInfo;
|
import com.yeshi.fanli.entity.taobao.PidUser;
|
import com.yeshi.fanli.entity.taobao.TBPid;
|
import com.yeshi.fanli.entity.taobao.TaoBaoLink;
|
import com.yeshi.fanli.entity.taobao.TaoBaoUnionConfig;
|
import com.yeshi.fanli.exception.taobao.TaoBaoConvertLinkException;
|
import com.yeshi.fanli.exception.taobao.TaobaoGoodsDownException;
|
import com.yeshi.fanli.exception.tlj.UserTaoLiJinNewbiesException;
|
import com.yeshi.fanli.log.LogManager;
|
import com.yeshi.fanli.log.LogType;
|
import com.yeshi.fanli.service.inter.redpack.UserTaoLiJinNewbiesService;
|
import com.yeshi.fanli.service.inter.taobao.TaoBaoUnionConfigService;
|
import com.yeshi.fanli.service.inter.user.TBPidService;
|
import com.yeshi.fanli.util.*;
|
import com.yeshi.fanli.util.cache.TaoBaoGoodsCacheUtil;
|
import com.yeshi.fanli.util.taobao.TaoBaoUtil;
|
import com.yeshi.fanli.util.taobao.TaoKeApiUtil;
|
import com.yeshi.goods.facade.dto.taobao.dataoke.DaTaoKeFilterResult;
|
import com.yeshi.goods.facade.entity.taobao.TaoBaoCouponCache;
|
import com.yeshi.goods.facade.entity.taobao.TaoBaoGoodsBrief;
|
import com.yeshi.goods.facade.service.DaTaoKeGoodsDetailV2Service;
|
import com.yeshi.goods.facade.service.TaoBaoCouponCacheService;
|
import com.yeshi.goods.facade.utils.factory.TaoBaoCouponCacheFactory;
|
import com.yeshi.goods.facade.utils.taobao.DaTaoKeApiUtil;
|
import org.springframework.stereotype.Component;
|
import org.yeshi.utils.TimeUtil;
|
|
import javax.annotation.Resource;
|
import java.math.BigDecimal;
|
import java.util.Date;
|
|
@Component
|
public class TaoBaoLinkManager {
|
|
@Resource
|
private TaoBaoGoodsCacheUtil taoBaoGoodsCacheUtil;
|
|
@Resource
|
private DaTaoKeGoodsDetailV2Service daTaoKeGoodsDetailV2Service;
|
|
@Resource
|
private RedisManager redisManager;
|
|
@Resource
|
private TaoBaoUnionConfigService taoBaoUnionConfigService;
|
|
@Resource
|
private TBPidService tbPidService;
|
|
@Resource
|
private ConvertLinkManager convertLinkManager;
|
|
@Resource
|
private UserTaoLiJinNewbiesService userTaoLiJinNewbiesService;
|
|
@Resource
|
private TaoBaoCouponCacheService taoBaoCouponCacheService;
|
|
|
/**
|
* 只领券
|
* @param auctionId
|
* @param specialId
|
* @param pid
|
* @return
|
*/
|
public TaoBaoLink getTaoBaoLinkForRecieveCoupon(Long auctionId, String specialId, String pid) throws TaoBaoConvertLinkException{
|
if (auctionId == null || auctionId <= 0) {
|
throw new TaoBaoConvertLinkException(2, "商品ID不能为空");
|
}
|
|
TaoKeAppInfo app = new TaoKeAppInfo();
|
app.setAppKey(TaoBaoConstant.TAOBAO_AUTH_APPKEY);
|
app.setAppSecret(TaoBaoConstant.TAOBAO_AUTH_APPSECRET);
|
app.setPid(TaoBaoConstant.TAOBAO_SPECIAL_PID_DEFAULT);
|
|
TaoBaoLink taoBaoLink = new TaoBaoLink();
|
taoBaoLink.setAuctionId(auctionId);
|
|
String baseUrl = taoBaoGoodsCacheUtil.getBaseConvertLink(auctionId, app.getPid());
|
if (!StringUtil.isNullOrEmpty(baseUrl)) {
|
taoBaoLink.setClickUrl(baseUrl);
|
taoBaoLink.setCouponLink(baseUrl);
|
return taoBaoLink;
|
}
|
|
// 查询是否为大淘客商品
|
|
String link = null;
|
try {
|
link = DaTaoKeApiUtil.convertLink(auctionId, app.getPid());
|
} catch (Exception e) {
|
}
|
|
if (!StringUtil.isNullOrEmpty(link)) {
|
taoBaoGoodsCacheUtil.cacheBaseConvertLink(auctionId, app.getPid(), link);
|
}
|
|
if (!StringUtil.isNullOrEmpty(link)) {
|
taoBaoLink.setCouponLink(link);
|
//缓存
|
|
cacheCouponInfo(auctionId, link, app.getPid());
|
|
return taoBaoLink;
|
}
|
|
TaoBaoGoodsBrief goods = TaoKeApiUtil.specialConvertCoupon(auctionId, app, specialId, null);
|
if (goods == null) {
|
throw new TaoBaoConvertLinkException(1, "");
|
}
|
|
taoBaoLink.setClickUrl(goods.getAuctionUrl());
|
taoBaoLink.setCouponLink(goods.getCouponLink());
|
|
if (!StringUtil.isNullOrEmpty(goods.getYsylClickUrl()))
|
taoBaoLink.setCouponLink(goods.getYsylClickUrl());
|
taoBaoLink.setGoods(goods);
|
//缓存
|
goods.setCouponLink(taoBaoLink.getCouponLink());
|
cacheCouponInfo(auctionId, taoBaoLink.getCouponLink(), app.getPid());
|
return taoBaoLink;
|
}
|
|
/**
|
* 获取淘宝购买链接
|
*
|
* @param uid
|
* @param auctionId
|
* @param pid
|
* @return
|
*/
|
public TaoBaoLink getTaoBaoLinkForBuy(Long uid, Long auctionId, String specialId, String pid) throws TaoBaoConvertLinkException {
|
if (uid == null || uid <= 0) {
|
throw new TaoBaoConvertLinkException(1, "用户ID不能为空");
|
}
|
return getTaoBaoLinkForRecieveCoupon(auctionId,specialId,pid);
|
}
|
|
|
/**
|
* 记录淘宝转链的券信息
|
*
|
* @param goods
|
* @param pid
|
*/
|
private void cacheCouponInfo(TaoBaoGoodsBrief goods, String pid) {
|
if (goods.getCouponAmount() == null || goods.getCouponAmount().compareTo(new BigDecimal(0)) <= 0) {
|
return;
|
}
|
|
if (StringUtil.isNullOrEmpty(goods.getCouponLink()))
|
return;
|
|
if (StringUtil.isNullOrEmpty(goods.getCouponEffectiveStartTime()) || StringUtil.isNullOrEmpty(goods.getCouponEffectiveEndTime()))
|
return;
|
|
try {
|
TaoBaoCouponCache cache = TaoBaoCouponCacheFactory.create(goods.getAuctionId(), goods.getCouponActivityId(), goods.getCouponAmount(), goods.getCouponStartFee(), new Date(TimeUtil.convertToTimeTemp(goods.getCouponEffectiveStartTime(), "yyyy-MM-dd")), new Date(TimeUtil.convertToTimeTemp(goods.getCouponEffectiveEndTime(), "yyyy-MM-dd")), pid, goods.getCouponLink());
|
if (cache != null) {
|
//异步保存
|
ThreadUtil.run(new Runnable() {
|
@Override
|
public void run() {
|
taoBaoCouponCacheService.save(cache);
|
}
|
});
|
}
|
} catch (Exception e) {
|
e.printStackTrace();
|
}
|
}
|
|
|
private void cacheCouponInfo(Long auctionId, String link, String pid) {
|
String activityId = TaoBaoUtil.getActivityIdFromCouponLink(link);
|
if (StringUtil.isNullOrEmpty(activityId))
|
return;
|
//异步保存
|
ThreadUtil.run(new Runnable() {
|
@Override
|
public void run() {
|
TaoKeApiUtil.QuanInfo coupon = TaoKeApiUtil.getQuanInfo(auctionId, activityId);
|
if (coupon == null)
|
return;
|
TaoBaoGoodsBrief goods = new TaoBaoGoodsBrief();
|
goods.setCouponLink(link);
|
goods.setCouponAmount(coupon.coupon_amount);
|
goods.setCouponStartFee(coupon.coupon_start_fee);
|
goods.setCouponEffectiveStartTime(coupon.coupon_start_time);
|
goods.setCouponEffectiveEndTime(coupon.coupon_end_time);
|
goods.setAuctionId(auctionId);
|
goods.setCouponActivityId(activityId);
|
|
|
if (goods.getCouponAmount() == null || goods.getCouponAmount().compareTo(new BigDecimal(0)) <= 0) {
|
return;
|
}
|
|
if (StringUtil.isNullOrEmpty(goods.getCouponLink()))
|
return;
|
|
if (StringUtil.isNullOrEmpty(goods.getCouponEffectiveStartTime()) || StringUtil.isNullOrEmpty(goods.getCouponEffectiveEndTime()))
|
return;
|
|
try {
|
TaoBaoCouponCache cache = TaoBaoCouponCacheFactory.create(goods.getAuctionId(), goods.getCouponActivityId(), goods.getCouponAmount(), goods.getCouponStartFee(), new Date(TimeUtil.convertToTimeTemp(goods.getCouponEffectiveStartTime(), "yyyy-MM-dd")), new Date(TimeUtil.convertToTimeTemp(goods.getCouponEffectiveEndTime(), "yyyy-MM-dd")+1000*60*60*24L), pid, goods.getCouponLink());
|
if (cache != null) {
|
taoBaoCouponCacheService.save(cache);
|
}
|
} catch (Exception e) {
|
e.printStackTrace();
|
}
|
}
|
});
|
|
|
}
|
|
/**
|
* 获取淘宝分享链接
|
*
|
* @param uid
|
* @param auctionId
|
* @param relationId
|
* @param pid
|
* @return
|
*/
|
public TaoBaoLink getTaoBaoLinkForShare(Long uid, Long auctionId, String relationId, String pid) throws
|
TaoBaoConvertLinkException {
|
if (uid == null || uid <= 0) {
|
throw new TaoBaoConvertLinkException(1, "用户ID不能为空");
|
}
|
|
if (auctionId == null || auctionId <= 0) {
|
throw new TaoBaoConvertLinkException(2, "商品ID不能为空");
|
}
|
|
TaoKeAppInfo info = new TaoKeAppInfo();
|
|
if (!StringUtil.isNullOrEmpty(relationId)) {
|
if (StringUtil.isNullOrEmpty(pid))
|
pid = TaoBaoConstant.TAOBAO_RELATION_PID_DEFAULT;
|
String appId = pid.split("_")[2];
|
String adzoneId = pid.split("_")[3];
|
TaoBaoUnionConfig taoBaoUnionConfig = taoBaoUnionConfigService.getConfigByAppIdCache(appId);
|
info.setAdzoneId(adzoneId);
|
info.setAppKey(taoBaoUnionConfig.getAppKey());
|
info.setAppSecret(taoBaoUnionConfig.getAppSecret());
|
info.setPid(pid);
|
} else {
|
TBPid tbPid = tbPidService.getTBPid(uid, PidUser.TYPE_SHARE_GOODS);
|
if (tbPid == null) {
|
throw new TaoBaoConvertLinkException(3, "获取推广位失败");
|
}
|
String appId = tbPid.getPid().split("_")[2];
|
TaoBaoUnionConfig taoBaoUnionConfig = taoBaoUnionConfigService.getConfigByAppIdCache(appId);
|
String adzoneId = tbPid.getPid().split("_")[3];
|
info.setAdzoneId(adzoneId);
|
info.setAppKey(taoBaoUnionConfig.getAppKey());
|
info.setAppSecret(taoBaoUnionConfig.getAppSecret());
|
info.setPid(tbPid.getPid());
|
}
|
TaoBaoGoodsBrief goods = null;
|
try {
|
goods = TaoKeApiUtil.searchGoodsDetail(auctionId, info);
|
} catch (TaobaoGoodsDownException e) {
|
throw new TaoBaoConvertLinkException(4, "商品已下架");
|
} finally {
|
}
|
if (goods == null) {
|
throw new TaoBaoConvertLinkException(5, "获取商品详情失败");
|
}
|
|
if (StringUtil.isNullOrEmpty(goods.getCouponLink()) && !goods.getAuctionUrl().contains("s.click.taobao.com")) {
|
|
TaoBaoGoodsBrief taoBaoLink = TaoKeApiUtil.specialConvertCoupon(auctionId, info, null, relationId);
|
if (taoBaoLink == null) {
|
throw new TaoBaoConvertLinkException(201, "商品转链失败");
|
}
|
goods.setCouponLink(taoBaoLink.getCouponLink());
|
goods.setAuctionUrl(taoBaoLink.getAuctionUrl());
|
}
|
|
String link = taoBaoGoodsCacheUtil.getBaseConvertLink(auctionId, info.getPid());
|
if (link != null) {//有缓存
|
goods.setCouponLink(link);
|
} else {// 没有缓存
|
DaTaoKeFilterResult result = daTaoKeGoodsDetailV2Service.filterTaoBaoGoods(goods);
|
if (result.getFilterType() == DaTaoKeFilterResult.FILTER_TYPE_COUPON
|
|| result.getFilterType() == DaTaoKeFilterResult.FILTER_TYPE_PRICE_AND_COUPON) {
|
link = DaTaoKeApiUtil.convertLink(auctionId, info.getPid());
|
} else if (goods.getCouponAmount() != null && goods.getCouponAmount().compareTo(new BigDecimal(0)) > 0) {// 有券
|
link = DaTaoKeApiUtil.convertLink(auctionId, info.getPid());
|
|
}
|
|
if (!StringUtil.isNullOrEmpty(link)) {
|
goods.setCouponLink(link);
|
taoBaoGoodsCacheUtil.cacheBaseConvertLink(auctionId, info.getPid(), link);
|
//保存券链接
|
cacheCouponInfo(goods, info.getPid());
|
} else {
|
TaoBaoGoodsBrief taoBaoLink = TaoKeApiUtil.specialConvertCoupon(auctionId, info, null, relationId);
|
if (taoBaoLink == null) {
|
throw new TaoBaoConvertLinkException(201, "商品转链失败");
|
}
|
goods.setCouponLink(taoBaoLink.getCouponLink());
|
goods.setAuctionUrl(taoBaoLink.getAuctionUrl());
|
//保存券链接
|
cacheCouponInfo(goods, info.getPid());
|
}
|
}
|
|
if (!StringUtil.isNullOrEmpty(relationId)) {
|
if (!StringUtil.isNullOrEmpty(goods.getAuctionUrl()))
|
goods.setAuctionUrl(TaoBaoUtil.concatRelationId(goods.getAuctionUrl(), relationId));
|
if (!StringUtil.isNullOrEmpty(goods.getCouponLink()))
|
goods.setCouponLink(TaoBaoUtil.concatRelationId(goods.getCouponLink(), relationId));
|
}
|
|
// 保存商品详情
|
|
// 创建淘口令
|
TaoBaoLink tbLink = new TaoBaoLink();
|
tbLink.setAuctionId(goods.getAuctionId());
|
tbLink.setClickUrl(goods.getAuctionUrl());
|
tbLink.setCouponLink(goods.getCouponLink());
|
|
if (!StringUtil.isNullOrEmpty(tbLink.getCouponLink())) {// 通过立即推广方式获取淘口令成功
|
String quanToken = convertLinkManager.createTaoBaoToken(uid, goods.getPictUrl(), goods.getTitle(),
|
tbLink.getCouponLink());
|
if (!StringUtil.isNullOrEmpty(quanToken)) {
|
tbLink.setTaoToken(quanToken);
|
}
|
} else if (!StringUtil.isNullOrEmpty(tbLink.getClickUrl())) {
|
String quanToken = convertLinkManager.createTaoBaoToken(uid, goods.getPictUrl(), goods.getTitle(),
|
tbLink.getClickUrl());
|
if (!StringUtil.isNullOrEmpty(quanToken)) {
|
tbLink.setTaoToken(quanToken);
|
}
|
}
|
|
tbLink.setGoods(goods);
|
|
// 存储分享商品的信息,用于加快分享网页接口请求速度
|
if (Constant.IS_OUTNET)
|
redisManager.saveTaoBaoGoodsBriefTemp(goods);
|
|
LogManager.getLogger(LogType.taobaoTrade)
|
.info(String.format("淘宝商品分享\n UID:%s \n 商品ID:%s \n 券链接%s \n商品链接:%s \n 口令:%s ", uid, auctionId,
|
tbLink.getCouponLink(), tbLink.getClickUrl(), tbLink.getTaoToken()));
|
|
return tbLink;
|
}
|
|
/**
|
* 获取淘礼金购买链接
|
*
|
* @param uid
|
* @param auctionId
|
* @param pid
|
* @return
|
*/
|
public TaoBaoLink getTaoLiJinLinkForBuy(Long uid, Long auctionId, String pid) throws TaoBaoConvertLinkException {
|
if (uid == null || uid <= 0)
|
throw new TaoBaoConvertLinkException(1, "用户ID不能为空");
|
|
if (auctionId == null || auctionId <= 0)
|
throw new TaoBaoConvertLinkException(1, "商品ID不能为空");
|
|
TaoBaoGoodsBrief goods = null;
|
try {
|
goods = TaoKeApiUtil.searchGoodsDetail(auctionId);
|
} catch (TaobaoGoodsDownException e) {
|
throw new TaoBaoConvertLinkException(1, "该商品已下架");
|
}
|
|
if (goods == null)
|
throw new TaoBaoConvertLinkException(1, "该商品已下架");
|
|
String taoLiJinLink = null;
|
try {
|
goods.setAuctionId(auctionId);
|
taoLiJinLink = userTaoLiJinNewbiesService.createTaoLiJinForBuy(goods, uid);
|
} catch (UserTaoLiJinNewbiesException e1) {
|
throw new TaoBaoConvertLinkException(e1.getCode(), e1.getMsg());
|
}
|
|
TaoBaoLink taoBaoLink = new TaoBaoLink();
|
taoBaoLink.setAuctionId(auctionId);
|
taoBaoLink.setClickUrl(goods.getAuctionUrl());
|
taoBaoLink.setCouponLink(taoLiJinLink);
|
taoBaoLink.setGoods(goods);
|
return taoBaoLink;
|
}
|
|
/**
|
* 获取淘礼金分享链接
|
*
|
* @param uid
|
* @param auctionId
|
* @param relationId
|
* @param pid
|
* @return
|
*/
|
public TaoBaoLink getTaoLiJinLinkForShare(Long uid, Long auctionId, String relationId, String pid) throws
|
TaoBaoConvertLinkException {
|
if (uid == null || uid <= 0) {
|
throw new TaoBaoConvertLinkException(1, "用户ID不能为空");
|
}
|
|
if (auctionId == null || auctionId <= 0) {
|
throw new TaoBaoConvertLinkException(2, "商品ID不能为空");
|
}
|
|
TaoKeAppInfo info = new TaoKeAppInfo();
|
|
if (!StringUtil.isNullOrEmpty(relationId)) {
|
if (StringUtil.isNullOrEmpty(pid))
|
pid = TaoBaoConstant.TAOBAO_RELATION_PID_DEFAULT;
|
String appId = pid.split("_")[2];
|
String adzoneId = pid.split("_")[3];
|
TaoBaoUnionConfig taoBaoUnionConfig = taoBaoUnionConfigService.getConfigByAppIdCache(appId);
|
info.setAdzoneId(adzoneId);
|
info.setAppKey(taoBaoUnionConfig.getAppKey());
|
info.setAppSecret(taoBaoUnionConfig.getAppSecret());
|
info.setPid(pid);
|
} else {
|
TBPid tbPid = tbPidService.getTBPid(uid, PidUser.TYPE_SHARE_GOODS);
|
if (tbPid == null) {
|
throw new TaoBaoConvertLinkException(3, "获取推广位失败");
|
}
|
String appId = tbPid.getPid().split("_")[2];
|
TaoBaoUnionConfig taoBaoUnionConfig = taoBaoUnionConfigService.getConfigByAppIdCache(appId);
|
String adzoneId = tbPid.getPid().split("_")[3];
|
info.setAdzoneId(adzoneId);
|
info.setAppKey(taoBaoUnionConfig.getAppKey());
|
info.setAppSecret(taoBaoUnionConfig.getAppSecret());
|
info.setPid(tbPid.getPid());
|
}
|
TaoBaoGoodsBrief goods = null;
|
try {
|
goods = TaoKeApiUtil.searchGoodsDetail(auctionId, info);
|
} catch (TaobaoGoodsDownException e) {
|
throw new TaoBaoConvertLinkException(4, "商品已下架");
|
} finally {
|
}
|
if (goods == null) {
|
throw new TaoBaoConvertLinkException(5, "获取商品详情失败");
|
}
|
|
if (StringUtil.isNullOrEmpty(goods.getCouponLink()) && !goods.getAuctionUrl().contains("s.click.taobao.com")) {
|
TaoBaoUnionConfig taoBaoUnionConfig = taoBaoUnionConfigService
|
.getConfigByAppIdCache(info.getPid().split("_")[2]);
|
TaoBaoGoodsBrief taoBaoLink = TaoKeApiUtil.specialConvertCoupon(auctionId, info, null, relationId);
|
if (taoBaoLink == null) {
|
throw new TaoBaoConvertLinkException(201, "商品转链失败");
|
}
|
goods.setCouponLink(taoBaoLink.getCouponLink());
|
goods.setAuctionUrl(taoBaoLink.getAuctionUrl());
|
}
|
|
if (!StringUtil.isNullOrEmpty(relationId)) {
|
if (!StringUtil.isNullOrEmpty(goods.getAuctionUrl()))
|
goods.setAuctionUrl(goods.getAuctionUrl() + "&relationId=" + relationId);
|
if (!StringUtil.isNullOrEmpty(goods.getCouponLink()))
|
goods.setCouponLink(goods.getCouponLink() + "&relationId=" + relationId);
|
}
|
|
// 创建淘口令
|
TaoBaoLink tbLink = new TaoBaoLink();
|
tbLink.setAuctionId(goods.getAuctionId());
|
tbLink.setClickUrl(goods.getAuctionUrl());
|
tbLink.setCouponLink(goods.getCouponLink());
|
tbLink.setGoods(goods);
|
|
// 存储分享商品的信息,用于加快分享网页接口请求速度
|
if (Constant.IS_OUTNET)
|
redisManager.saveTaoBaoGoodsBriefTemp(goods);
|
|
return tbLink;
|
}
|
|
}
|