package com.yeshi.fanli.job.goods;
|
|
import java.math.BigDecimal;
|
import java.util.ArrayList;
|
import java.util.List;
|
|
import javax.annotation.Resource;
|
|
import com.yeshi.fanli.entity.SystemEnum;
|
import com.yeshi.fanli.exception.pdd.PDDApiException;
|
import org.springframework.stereotype.Component;
|
|
import com.xxl.job.core.biz.model.ReturnT;
|
import com.xxl.job.core.handler.annotation.XxlJob;
|
import com.yeshi.fanli.dto.GoodsMoneyConfigParamsDTO;
|
import com.yeshi.fanli.dto.jd.JDCommissionInfo;
|
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.dto.pdd.PDDSearchRange;
|
import com.yeshi.goods.facade.dto.taobao.haodanku.HDKGoodsListResultDTO;
|
import com.yeshi.goods.facade.dto.taobao.haodanku.HDKSearchFilter;
|
import com.yeshi.fanli.entity.goods.FreeGoodsCoupon;
|
import com.yeshi.fanli.entity.jd.JDGoods;
|
import com.yeshi.goods.facade.entity.taobao.TaoBaoGoodsBrief;
|
import com.yeshi.goods.facade.entity.taobao.haodanku.HDKGoodsDetail;
|
import com.yeshi.fanli.service.inter.goods.FreeGoodsCouponService;
|
import com.yeshi.fanli.service.inter.order.OrderHongBaoMoneyComputeService;
|
import com.yeshi.fanli.service.inter.order.config.HongBaoManageService;
|
import com.yeshi.fanli.util.Constant;
|
import com.yeshi.fanli.util.cache.JDGoodsCacheUtil;
|
import com.yeshi.fanli.util.cache.PinDuoDuoCacheUtil;
|
import com.yeshi.fanli.util.factory.goods.GoodsDetailVOFactory;
|
import com.yeshi.fanli.util.factory.goods.TaoBaoGoodsFactory;
|
import com.yeshi.fanli.util.jd.JDApiUtil;
|
import com.yeshi.fanli.util.pinduoduo.PinDuoDuoApiUtil;
|
import com.yeshi.goods.facade.utils.taobao.HaoDanKuApiUtil;
|
import com.yeshi.fanli.vo.goods.GoodsDetailVO;
|
|
@Component
|
public class FreeGoodsCouponJob {
|
|
@Resource
|
private FreeGoodsCouponService freeGoodsCouponService;
|
|
@Resource
|
private OrderHongBaoMoneyComputeService orderHongBaoMoneyComputeService;
|
|
@Resource
|
private HongBaoManageService hongBaoManageService;
|
|
@Resource
|
private JDGoodsCacheUtil jdGoodsCacheUtil;
|
|
@Resource
|
private PinDuoDuoCacheUtil pinDuoDuoCacheUtil;
|
|
|
@XxlJob("freeGoodsCouponJob-addFreeGoods")
|
public ReturnT<String> addFreeGoods(String param) throws Exception {
|
updateGoodsTB();
|
updateGoodsPDD();
|
return ReturnT.SUCCESS;
|
}
|
|
/**
|
* 更新淘宝商品-免单
|
*/
|
private void updateGoodsTB() {
|
int maxNum = 5;
|
BigDecimal limitPrice = new BigDecimal(2);
|
List<FreeGoodsCoupon> listExist = freeGoodsCouponService.listByType(0, 100, Constant.SOURCE_TYPE_TAOBAO);
|
|
GoodsMoneyConfigParamsDTO params = orderHongBaoMoneyComputeService.getShowComputeRate("android", "55", SystemEnum.blks);
|
params.setBaseFanliRate(hongBaoManageService.getBaseFanliRate(SystemEnum.blks));
|
|
// 信息更新
|
List<GoodsDetailVO> listNew = new ArrayList<GoodsDetailVO>();
|
List<FreeGoodsCoupon> listdel = new ArrayList<FreeGoodsCoupon>();
|
|
if (listExist != null && listExist.size() > 0) {
|
for (FreeGoodsCoupon freeGood : listExist) {
|
HDKGoodsDetail itemDetail = HaoDanKuApiUtil.getInstance().getItemDetail(freeGood.getGoodsId());
|
if (itemDetail == null) {
|
listdel.add(freeGood);
|
} else {
|
if (listNew.size() >= 5) {
|
listdel.add(freeGood);
|
continue;
|
}
|
|
// 比例限制: 金比高于60%
|
if (itemDetail.getTkrates() == null || itemDetail.getTkrates() < 60) {
|
listdel.add(freeGood);
|
continue;
|
}
|
|
TaoBaoGoodsBrief tbGoods = TaoBaoGoodsFactory.create(itemDetail);
|
GoodsDetailVO detailVO = GoodsDetailVOFactory.convertTaoBao(tbGoods, params);
|
if (detailVO.getCouponPrice() != null) {
|
if (detailVO.getCouponPrice().compareTo(limitPrice) > 0)
|
continue;
|
} else if (detailVO.getZkPrice().compareTo(limitPrice) > 0) {
|
continue;
|
}
|
|
boolean saveResult = freeGoodsCouponService.saveFreeGoods(detailVO);
|
if (saveResult) {
|
listNew.add(detailVO);
|
}
|
}
|
}
|
}
|
|
if (listNew.size() < 5) {
|
Integer minId = 1;
|
HDKSearchFilter filter = new HDKSearchFilter();
|
filter.setBack(100);
|
filter.setPriceMax(2);
|
filter.setTkratesMin(60);
|
while (minId != null) {
|
filter.setMinId(minId);
|
HDKGoodsListResultDTO dto = HaoDanKuApiUtil.getInstance().queryList(filter);
|
if (dto == null) {
|
break;
|
}
|
minId = dto.getMinId();
|
List<HDKGoodsDetail> goodsList = dto.getGoodsList();
|
if (goodsList == null || goodsList.size() == 0) {
|
break;
|
}
|
|
for (HDKGoodsDetail goods : goodsList) {
|
// 比例限制: 金比高于60%
|
if (goods.getTkrates() == null || goods.getTkrates() < 60)
|
continue;
|
|
boolean exist = false;
|
if (listNew.size() > 0) {
|
for (GoodsDetailVO goodsDetailVO : listNew) {
|
if (goodsDetailVO.getGoodsId().equalsIgnoreCase(goods.getItemid() + "")) {
|
exist = true;
|
break;
|
}
|
}
|
}
|
if (exist)
|
continue;
|
|
TaoBaoGoodsBrief tbGoods = TaoBaoGoodsFactory.create(goods);
|
GoodsDetailVO detailVO = GoodsDetailVOFactory.convertTaoBao(tbGoods, params);
|
boolean saveResult = freeGoodsCouponService.saveFreeGoods(detailVO);
|
if (saveResult) {
|
listNew.add(detailVO);
|
}
|
|
if (listNew.size() >= maxNum)
|
break;
|
}
|
|
if (listNew.size() >= maxNum)
|
break;
|
}
|
}
|
|
// 删除不满足条件
|
if (listdel.size() > 0) {
|
for (FreeGoodsCoupon freeGoods : listdel) {
|
freeGoodsCouponService.delete(freeGoods.getGoodsId(), freeGoods.getGoodsType());
|
}
|
}
|
}
|
|
|
/**
|
* 更新京东商品-免单
|
*/
|
private void updateGoodsPDD() {
|
int maxNum = 5;
|
BigDecimal limitPrice = new BigDecimal(2);
|
List<FreeGoodsCoupon> listExist = freeGoodsCouponService.listByType(0, 100, Constant.SOURCE_TYPE_PDD);
|
|
GoodsMoneyConfigParamsDTO params = orderHongBaoMoneyComputeService.getShowComputeRate("android", "55",SystemEnum.blks);
|
params.setBaseFanliRate(hongBaoManageService.getBaseFanliRate(SystemEnum.blks));
|
|
// 信息更新
|
List<GoodsDetailVO> listNew = new ArrayList<GoodsDetailVO>();
|
List<FreeGoodsCoupon> listdel = new ArrayList<FreeGoodsCoupon>();
|
if (listExist != null && listExist.size() > 0) {
|
for (FreeGoodsCoupon freeGood : listExist) {
|
PDDGoodsDetail goodsInfo = pinDuoDuoCacheUtil.getGoodsInfo(freeGood.getGoodsId());
|
if (goodsInfo == null) {
|
listdel.add(freeGood);
|
} else {
|
if (listNew.size() >= 5) {
|
listdel.add(freeGood);
|
continue;
|
}
|
|
// 比例限制: 金比高于60%
|
BigDecimal promotionRate = new BigDecimal(goodsInfo.getPromotionRate());
|
if (promotionRate.compareTo(BigDecimal.valueOf(600)) < 0)
|
continue;
|
|
GoodsDetailVO detailVO = GoodsDetailVOFactory.convertPDDGoods(goodsInfo, params);
|
if (detailVO.getCouponPrice() != null) {
|
if (detailVO.getCouponPrice().compareTo(limitPrice) > 0)
|
continue;
|
} else if (detailVO.getZkPrice().compareTo(limitPrice) > 0) {
|
continue;
|
}
|
|
boolean saveResult = freeGoodsCouponService.saveFreeGoods(detailVO);
|
if (saveResult) {
|
listNew.add(detailVO);
|
}
|
}
|
}
|
}
|
|
// 不足补齐
|
if (listNew.size() < maxNum) {
|
// 筛选范围列表
|
List<PDDSearchRange> rangeList = new ArrayList<>();
|
// 券后价小于2元
|
rangeList.add(new PDDSearchRange(0L, 0, 200L));
|
// 比例60%以上
|
rangeList.add(new PDDSearchRange(600L, 2, 1000L));
|
|
PDDSearchFilter pddfilter = new PDDSearchFilter();
|
pddfilter.setRangeList(rangeList);
|
for (int page = 1; page < 1000; page++) {
|
pddfilter.setPage(page);
|
PDDGoodsResult result = null;
|
try {
|
result = PinDuoDuoApiUtil.searchGoods(pddfilter, Constant.PDD_SEARCH_CUSTOMER_PARAMS);
|
} catch (PDDApiException e) {
|
e.printStackTrace();
|
}
|
if (result == null) {
|
break;
|
}
|
|
List<PDDGoodsDetail> goodsList = result.getGoodsList();
|
if (goodsList == null || goodsList.size() == 0) {
|
break;
|
}
|
|
for (PDDGoodsDetail goods : goodsList) {
|
boolean exist = false;
|
if (listNew.size() > 0) {
|
for (GoodsDetailVO goodsDetailVO : listNew) {
|
if (goodsDetailVO.getGoodsId().equalsIgnoreCase(goods.getGoodsId() + "")) {
|
exist = true;
|
break;
|
}
|
}
|
}
|
if (exist)
|
continue;
|
|
GoodsDetailVO detailVO = GoodsDetailVOFactory.convertPDDGoods(goods, params);
|
boolean saveResult = freeGoodsCouponService.saveFreeGoods(detailVO);
|
if (saveResult) {
|
listNew.add(detailVO);
|
}
|
|
if (listNew.size() >= maxNum)
|
break;
|
}
|
|
if (listNew.size() >= maxNum)
|
break;
|
}
|
}
|
|
// 删除不满足条件
|
if (listdel.size() > 0) {
|
for (FreeGoodsCoupon freeGoods : listdel) {
|
freeGoodsCouponService.delete(freeGoods.getGoodsId(), freeGoods.getGoodsType());
|
}
|
}
|
}
|
|
}
|