package com.yeshi.fanli.service.impl.taobao;
|
|
import java.math.BigDecimal;
|
import java.util.ArrayList;
|
import java.util.Date;
|
import java.util.List;
|
|
import javax.annotation.Resource;
|
|
import org.springframework.stereotype.Service;
|
import org.springframework.transaction.annotation.Transactional;
|
|
import com.google.gson.Gson;
|
import com.yeshi.fanli.dao.mybatis.taobao.TaoBaoGoodsBriefMapper;
|
import com.yeshi.fanli.entity.goods.CommonGoods;
|
import com.yeshi.fanli.entity.taobao.TaoBaoGoodsBrief;
|
import com.yeshi.fanli.exception.goods.CommonGoodsException;
|
import com.yeshi.fanli.exception.taobao.TaobaoGoodsDownException;
|
import com.yeshi.fanli.exception.taobao.TaobaoGoodsUpdateException;
|
import com.yeshi.fanli.service.inter.activity.ActivityService;
|
import com.yeshi.fanli.service.inter.goods.CommonGoodsService;
|
import com.yeshi.fanli.service.inter.goods.RecommendSectionGoodsService;
|
import com.yeshi.fanli.service.inter.lable.QualityFactoryService;
|
import com.yeshi.fanli.service.inter.taobao.TaoBaoGoodsUpdateService;
|
import com.yeshi.fanli.util.BeanUtil;
|
import com.yeshi.fanli.util.StringUtil;
|
import com.yeshi.fanli.util.factory.CommonGoodsFactory;
|
import com.yeshi.fanli.util.taobao.TaoKeApiUtil;
|
|
@Service
|
public class TaoBaoGoodsUpdateServiceImpl implements TaoBaoGoodsUpdateService {
|
@Resource
|
private RecommendSectionGoodsService recommendSectionGoodsService;
|
|
@Resource
|
private ActivityService activityService;
|
|
@Resource
|
private QualityFactoryService qualityFactoryService;
|
|
@Resource
|
private TaoBaoGoodsBriefMapper taoBaoGoodsBriefMapper;
|
|
@Resource
|
private CommonGoodsService commonGoodsService;
|
|
@Override
|
public void startUpdate() {
|
// 更新时间超过6个小时的做更新
|
List<TaoBaoGoodsBrief> list = taoBaoGoodsBriefMapper
|
.queryGoodsByMaxUpdateTime(new Date(System.currentTimeMillis() - 1000 * 60 * 60 * 6L), 0, 5000);
|
for (TaoBaoGoodsBrief goods : list) {
|
try {
|
TaoBaoGoodsBrief newGoods = TaoKeApiUtil.searchGoodsDetail(goods.getAuctionId());
|
if (newGoods != null) {
|
try {
|
updateTaoBaoGoods(newGoods);
|
} catch (TaobaoGoodsUpdateException e) {
|
e.printStackTrace();
|
}
|
}
|
|
} catch (TaobaoGoodsDownException e) {
|
offlineTaoBaoGoods(goods.getAuctionId());
|
} catch (Exception e) {
|
|
}
|
}
|
}
|
|
@Transactional
|
@Override
|
public void deleteTaoBaoGoods(Long auctionId) {
|
// 删除首页推荐数据
|
recommendSectionGoodsService.deleteRecommendSectionGoodsByTbAuctionId(auctionId);
|
|
// 删除精选库相关的数据
|
qualityFactoryService.deleteByTbAuctionId(auctionId);
|
|
// 删除商品本身数据
|
taoBaoGoodsBriefMapper.deleteByAuctionId(auctionId);
|
}
|
|
@Transactional
|
@Override
|
public void offlineTaoBaoGoods(Long auctionId) {
|
// 删除首页推荐数据
|
recommendSectionGoodsService.deleteRecommendSectionGoodsByTbAuctionId(auctionId);
|
// 更新动态数据
|
activityService.downTaoBaoGoods(auctionId);
|
|
// 删除精选库相关的数据
|
qualityFactoryService.deleteByTbAuctionId(auctionId);
|
|
// 删除商品本身数据
|
taoBaoGoodsBriefMapper.deleteByAuctionId(auctionId);
|
|
// 更新简版商品状态为下架
|
commonGoodsService.offlineCommonGoods(auctionId, CommonGoods.GOODS_TYPE_TB);
|
}
|
|
@Transactional
|
@Override
|
public void updateTaoBaoGoods(TaoBaoGoodsBrief goods) throws TaobaoGoodsUpdateException {
|
if (goods == null)
|
throw new TaobaoGoodsUpdateException(1, "商品为空");
|
|
if (goods.getAuctionId() == null || goods.getAuctionId() == 0)
|
throw new TaobaoGoodsUpdateException(2, "商品ID为空");
|
|
// 更新收藏信息
|
try {
|
commonGoodsService.updateCommonGoods(CommonGoodsFactory.create(goods));
|
} catch (CommonGoodsException e) {
|
e.printStackTrace();
|
}
|
|
List<TaoBaoGoodsBrief> goodsList = taoBaoGoodsBriefMapper.queryByAuctionId(goods.getAuctionId());
|
if (goodsList != null)
|
for (TaoBaoGoodsBrief tb : goodsList) {
|
goods.setId(tb.getId());
|
TaoBaoGoodsBrief updateGoods = getUpdateTaoBaoGoodsBrief(goods);
|
System.out.println("更细信息:" + new Gson().toJson(updateGoods));
|
taoBaoGoodsBriefMapper.updateByPrimaryKeySelective(updateGoods);
|
|
}
|
|
// 更新动态商品
|
activityService.updateRecommendActivityGoods(goods);
|
}
|
|
@Override
|
public void deleteOutOfDate() {
|
TaoBaoGoodsBriefMapper taoBaoGoodsBriefMapper = BeanUtil.getBean(TaoBaoGoodsBriefMapper.class);
|
List<Long> list = taoBaoGoodsBriefMapper
|
.queryCanDeleteGoods(new Date(System.currentTimeMillis() - 1000 * 60 * 60 * 24 * 2), 0, 2000);
|
for (Long auctionId : list) {
|
deleteTaoBaoGoods(auctionId);
|
}
|
}
|
|
@Override
|
public TaoBaoGoodsBrief getUpdateTaoBaoGoodsBrief(TaoBaoGoodsBrief goods) {
|
String auctionUrl = "https://item.taobao.com/item.htm?id=" + goods.getAuctionId();
|
String couponLink = "";
|
TaoBaoGoodsBrief updateGoods = new TaoBaoGoodsBrief(goods.getId());
|
updateGoods.setUpdatetime(new Date());
|
updateGoods.setState(0);
|
// 防止是转链的链接,数据过长
|
updateGoods.setAuctionUrl(auctionUrl);
|
updateGoods.setCouponLink(couponLink);
|
// 更新标题,商品图片,销量,价格,券信息,返利信息,店铺信息,分类信息
|
updateGoods.setTitle(goods.getTitle());
|
updateGoods.setPictUrl(goods.getPictUrl());
|
updateGoods.setPictUrlWhite(goods.getPictUrlWhite());
|
updateGoods.setImgList(goods.getImgList());
|
updateGoods.setBiz30day(goods.getBiz30day());
|
updateGoods.setZkPrice(goods.getZkPrice());
|
updateGoods.setReservePrice(goods.getReservePrice());
|
updateGoods.setTkRate(goods.getTkRate());
|
// 券信息
|
if (StringUtil.isNullOrEmpty(goods.getCouponInfo()) && StringUtil.isNullOrEmpty(goods.getCouponActivityId())) {
|
updateGoods.setCouponActivityId("");
|
updateGoods.setCouponAmount(new BigDecimal(0));
|
updateGoods.setCouponEffectiveEndTime("");
|
updateGoods.setCouponEffectiveStartTime("");
|
updateGoods.setCouponInfo("");
|
updateGoods.setCouponLeftCount(0);
|
updateGoods.setCouponLink("");
|
updateGoods.setCouponStartFee(new BigDecimal(0));
|
updateGoods.setCouponTotalCount(0); // 没有券了
|
} else {// 还有券
|
updateGoods.setCouponActivityId(goods.getCouponActivityId());
|
updateGoods.setCouponAmount(goods.getCouponAmount());
|
updateGoods.setCouponEffectiveEndTime(goods.getCouponEffectiveEndTime());
|
updateGoods.setCouponEffectiveStartTime(goods.getCouponEffectiveStartTime());
|
updateGoods.setCouponInfo(goods.getCouponInfo());
|
updateGoods.setCouponLeftCount(goods.getCouponLeftCount());
|
updateGoods.setCouponLink("");
|
updateGoods.setCouponStartFee(goods.getCouponStartFee());
|
updateGoods.setCouponTotalCount(goods.getCouponTotalCount());
|
}
|
|
// 店铺信息
|
updateGoods.setShopTitle(goods.getShopTitle());
|
updateGoods.setSellerId(goods.getSellerId());
|
|
// 分类信息
|
updateGoods.setRootCatId(goods.getRootCatId());
|
updateGoods.setRootCategoryName(goods.getRootCategoryName());
|
updateGoods.setLeafCatId(goods.getLeafCatId());
|
updateGoods.setLeafName(goods.getLeafName());
|
|
return updateGoods;
|
}
|
|
@Override
|
public void updateTaoBaoGoods(List<TaoBaoGoodsBrief> goodsList) throws TaobaoGoodsUpdateException {
|
if (goodsList == null || goodsList.size() == 0)
|
throw new TaobaoGoodsUpdateException(1, "商品列表为空");
|
|
List<TaoBaoGoodsBrief> updateList = new ArrayList<>();
|
|
for (TaoBaoGoodsBrief goods : goodsList) {
|
|
if (goods.getId() == null || goods.getId() == 0L) {
|
throw new TaobaoGoodsUpdateException(1, "商品主键ID为空");
|
}
|
|
TaoBaoGoodsBrief updateGoods = getUpdateTaoBaoGoodsBrief(goods);
|
updateGoods.setCreatetime(goods.getCreatetime());
|
|
updateList.add(updateGoods);
|
}
|
|
taoBaoGoodsBriefMapper.updateBatchSelective(updateList);
|
}
|
|
}
|