From 651f2856e9ae10aacbfb8327d967aacbb6d58333 Mon Sep 17 00:00:00 2001
From: admin <weikou2014>
Date: 星期三, 12 四月 2023 18:13:58 +0800
Subject: [PATCH] 大淘客API修复/唯品会订单爬取策略修改
---
fanli/src/main/java/com/yeshi/fanli/service/impl/lable/QualityFactoryServiceImpl.java | 1619 ++++++++++++++++++++++++++++-------------------------------
1 files changed, 767 insertions(+), 852 deletions(-)
diff --git a/fanli/src/main/java/com/yeshi/fanli/service/impl/lable/QualityFactoryServiceImpl.java b/fanli/src/main/java/com/yeshi/fanli/service/impl/lable/QualityFactoryServiceImpl.java
index a6a4c43..c31ce3e 100644
--- a/fanli/src/main/java/com/yeshi/fanli/service/impl/lable/QualityFactoryServiceImpl.java
+++ b/fanli/src/main/java/com/yeshi/fanli/service/impl/lable/QualityFactoryServiceImpl.java
@@ -1,852 +1,767 @@
-package com.yeshi.fanli.service.impl.lable;
-
-import java.math.BigDecimal;
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.List;
-import java.util.Map;
-
-import javax.annotation.Resource;
-
-import org.springframework.stereotype.Service;
-import org.springframework.transaction.annotation.Transactional;
-
-import com.yeshi.fanli.dao.mybatis.TaoBaoClassRelationMapper;
-import com.yeshi.fanli.dao.mybatis.lable.LabelGoodsMapper;
-import com.yeshi.fanli.dao.mybatis.lable.QualityFactoryMapper;
-import com.yeshi.fanli.dao.mybatis.lable.QualityFlashSaleMapper;
-import com.yeshi.fanli.dao.mybatis.taobao.TaoBaoGoodsBriefMapper;
-import com.yeshi.fanli.entity.bus.lable.BoutiqueAutoRule;
-import com.yeshi.fanli.entity.bus.lable.Label;
-import com.yeshi.fanli.entity.bus.lable.LabelGoods;
-import com.yeshi.fanli.entity.bus.lable.QualityFactory;
-import com.yeshi.fanli.entity.bus.lable.QualityFlashSale;
-import com.yeshi.fanli.entity.common.AdminUser;
-import com.yeshi.fanli.entity.taobao.TaoBaoGoodsBrief;
-import com.yeshi.fanli.exception.QualityFactoryException;
-import com.yeshi.fanli.exception.taobao.TaobaoGoodsDownException;
-import com.yeshi.fanli.exception.taobao.TaobaoGoodsUpdateException;
-import com.yeshi.fanli.service.inter.goods.TaoBaoGoodsBriefService;
-import com.yeshi.fanli.service.inter.lable.LabelService;
-import com.yeshi.fanli.service.inter.lable.QualityFactoryService;
-import com.yeshi.fanli.service.inter.lable.QualityFlashSaleService;
-import com.yeshi.fanli.service.inter.taobao.TaoBaoGoodsUpdateService;
-import com.yeshi.fanli.service.inter.taobao.TaoBaoUnionConfigService;
-import com.yeshi.fanli.util.RedisManager;
-import com.yeshi.fanli.util.StringUtil;
-import com.yeshi.fanli.util.taobao.TaoBaoUtil;
-import com.yeshi.fanli.util.taobao.TaoKeApiUtil;
-import com.yeshi.fanli.vo.quality.QualityFactoryVO;
-
-@Service
-public class QualityFactoryServiceImpl implements QualityFactoryService {
-
- @Resource
- private RedisManager redisManager;
- @Resource
- private QualityFactoryMapper qualityFactoryMapper;
- @Resource
- private TaoBaoGoodsBriefService taoBaoGoodsBriefService;
- @Resource
- private LabelGoodsMapper labelGoodsMapper;
- @Resource
- private LabelService labelService;
- @Resource
- private TaoBaoGoodsBriefMapper taoBaoGoodsBriefMapper;
- @Resource
- private TaoBaoUnionConfigService taoBaoUnionConfigService;
- @Resource
- private TaoBaoClassRelationMapper taoBaoClassRelationMapper;
- @Resource
- private QualityFlashSaleService qualityFlashSaleService;
- @Resource
- private QualityFlashSaleMapper qualityFlashSaleMapper;
-
- @Resource
- private TaoBaoGoodsUpdateService taoBaoGoodsUpdateService;
-
- @Override
- public int updateByPrimaryKeySelective(QualityFactory record) throws QualityFactoryException {
- return qualityFactoryMapper.updateByPrimaryKeySelective(record);
- }
-
-
- @Override
- public void deleteByTaoBaoGoodsId(Long auctionId) {
- if (auctionId == null) {
- return;
- }
- // 绉婚櫎绮鹃�夊簱
- qualityFactoryMapper.deleteByGoodsId(auctionId);
- // 鍒犻櫎闄愭椂鎶㈣喘
- qualityFlashSaleMapper.deleteByGoodsId(auctionId);
- // 鍒犻櫎瀵瑰簲鏍囩
- labelGoodsMapper.deleteByGoodsId(auctionId);
- }
-
-
- @Override
- public void deleteBatchByTaoBaoGoodsId(List<Long> listGid) {
-
- if (listGid == null || listGid.size() == 0) {
- return;
- }
- // 鎵归噺鍒犻櫎绮鹃�夊簱
- qualityFactoryMapper.deleteBatchByGoodsId(listGid);
- // 鎵归噺鍒犻櫎闄愭椂鎶㈣喘
- qualityFlashSaleMapper.deleteBatchByQualityID(listGid);
- // 鍒犻櫎瀵瑰簲鏍囩
- labelGoodsMapper.deleteBatchByGoodsId(listGid);
- }
-
-
- @Override
- @Transactional
- public void deleteByGoodsId(List<String> ids) throws QualityFactoryException {
-
- if (ids != null && ids.size() > 0) {
- for (String goodsId : ids) {
- qualityFactoryMapper.deleteByGoodsId(Long.parseLong(goodsId));
- }
- }
- }
-
- @Override
- public QualityFactory selectByPrimaryKey(Long id) throws QualityFactoryException {
- return qualityFactoryMapper.selectByPrimaryKey(id);
- }
-
- @Override
- public List<Long> getAuctionIdbyClassId(Long systemCid, Integer goodsSource, String dateTime){
- return qualityFactoryMapper.getAuctionIdbyClassId(systemCid, goodsSource, dateTime);
- }
-
- @Override
- public List<QualityFactory> queryAll(long start, int count, Integer days) {
- return qualityFactoryMapper.queryAll(start, count, days);
- }
-
- @Override
- public List<QualityFactory> query(QualityFactoryVO qualityFactoryVO) throws QualityFactoryException {
- return qualityFactoryMapper.query(qualityFactoryVO);
- }
-
- @Override
- public long queryCount(QualityFactoryVO qualityFactoryVO) throws QualityFactoryException {
- return qualityFactoryMapper.queryCount(qualityFactoryVO);
- }
-
- @Override
- public Map<String, Object> getCountAll() {
- return qualityFactoryMapper.getCountAll();
- }
-
- @Override
- public Long queryCountByGoodsId(Long goodsId) {
- return qualityFactoryMapper.queryCountByGoodsId(goodsId);
- }
-
- @Override
- public List<QualityFactory> listQueryByAuctionId(List<Long> list) {
- return qualityFactoryMapper.listQueryByAuctionId(list);
- }
-
- @Override
- @Transactional
- public void addBatchTaoBaoGoods(List<TaoBaoGoodsBrief> listTaoBaoGoods, String lableNames, AdminUser admin)
- throws Exception {
-
- if (listTaoBaoGoods == null || listTaoBaoGoods.size() == 0) {
- throw new Exception("鏈壘鍒板尮閰嶇殑鍟嗗搧");
- }
-
- // 鍒涘缓鏍囩
- List<Label> listLabs = labelService.addBatchByNames(lableNames, admin);
-
-
- // 娣诲姞鍟嗗搧鏍囩鍒楄〃
- List<LabelGoods> listLabelAdd = new ArrayList<LabelGoods>();
- // 鎻掑叆鍟嗗搧闆嗗悎
- List<TaoBaoGoodsBrief> listGoodsInsert = new ArrayList<TaoBaoGoodsBrief>();
- // 鏇存柊鍟嗗搧闆嗗悎
- List<TaoBaoGoodsBrief> listGoodsUpdate = new ArrayList<TaoBaoGoodsBrief>();
- // 杩涘叆绮鹃�夊晢鍝佸垪琛�
- List<QualityFactory> listInsertQuality = new ArrayList<QualityFactory>();
-
-
- // 鎻掑叆鍟嗗搧娣樺疂ID闆嗗悎
- List<Long> listAuctionId = new ArrayList<Long>();
- for (TaoBaoGoodsBrief goodsBrief : listTaoBaoGoods) {
- listAuctionId.add(goodsBrief.getAuctionId());
- }
- List<Long> listHas = taoBaoGoodsBriefService.listExistById(listAuctionId);
-
- // 閬嶅巻鍟嗗搧
- for (TaoBaoGoodsBrief newGoodsBrief : listTaoBaoGoods) {
- Long auctionId = newGoodsBrief.getAuctionId();
- // 璁剧疆鎴愪富閿�
- newGoodsBrief.setId(auctionId);
- newGoodsBrief.setState(0); // 鐘舵�佸惎鐢�
- newGoodsBrief.setCreatetime(new Date());
- newGoodsBrief.setUpdatetime(new Date());
-
- /* 鍒ゆ柇鍟嗗搧 鏄惁宸茬粡瀛樺湪鏁版嵁搴� */
- if (listHas != null && listHas.size() > 0 && listHas.contains(auctionId)) {
- // 鏇存柊鍟嗗搧
-
- listGoodsUpdate.add(newGoodsBrief);
- // 鍟嗗搧鏍囩
- if (listLabs != null && listLabs.size() > 0) {
- for (Label lab: listLabs) {
- long existence = labelGoodsMapper.isExistence(auctionId, lab.getId());
- if (existence <= 0) {
- // 璐翠笂鏂版爣绛�
- LabelGoods lg = new LabelGoods();
- lg.setLabel(lab);
- lg.setCreateUser(admin);
- lg.setCreatetime(new Date());
- lg.setTaoBaoGoodsBrief(newGoodsBrief);
- listLabelAdd.add(lg);
- }
- }
- }
-
- // 鏇存柊鐨勫晢鍝佷俊鎭� 鏄惁瀛樺湪绮鹃�夊簱涓�
- QualityFactory quality = qualityFactoryMapper.getByAuctionId(auctionId);
- if (quality == null) {
- QualityFactory selectionGoods = new QualityFactory();
- selectionGoods.setTaoBaoGoodsBrief(newGoodsBrief);
- selectionGoods.setCreateUser(admin);
- selectionGoods.setCreatetime(new Date());
- selectionGoods.setUpdateUser(admin);
- selectionGoods.setUpdatetime(new Date());
- selectionGoods.setEntryMode(QualityFactory.MODE_MANUAL);// 浜哄伐绛涢��
- selectionGoods.setGoodsSource(QualityFactory.SOURCE_TAOBAO);// 鏉ユ簮
- selectionGoods.setWeight((int) (Math.random() * (4000)));
- listInsertQuality.add(selectionGoods);
- }
- } else {
- // 璁剧疆鍟嗗搧榛樿鍊�
- taoBaoGoodsBriefService.setGoodsBriefDefault(newGoodsBrief);
- listGoodsInsert.add(newGoodsBrief);
-
- // 绮鹃�夊簱淇℃伅
- QualityFactory selectionGoods = new QualityFactory();
- selectionGoods.setTaoBaoGoodsBrief(newGoodsBrief);
- selectionGoods.setCreateUser(admin);
- selectionGoods.setCreatetime(new Date());
- selectionGoods.setUpdateUser(admin);
- selectionGoods.setUpdatetime(new Date());
- selectionGoods.setEntryMode(QualityFactory.MODE_MANUAL);// 浜哄伐绛涢��
- selectionGoods.setGoodsSource(QualityFactory.SOURCE_TAOBAO);// 鏉ユ簮
- selectionGoods.setWeight((int) (Math.random() * (4000)));
- listInsertQuality.add(selectionGoods);
-
- // 鍟嗗搧鏍囩
- if (listLabs != null && listLabs.size() > 0) {
- for (Label lab: listLabs) {
- LabelGoods lg = new LabelGoods();
- lg.setLabel(lab);
- lg.setCreateUser(admin);
- lg.setCreatetime(new Date());
- lg.setTaoBaoGoodsBrief(newGoodsBrief);
- listLabelAdd.add(lg);
- }
- }
- }
- }
- // 鎻掑叆娣樺疂鍟嗗搧
- if (listGoodsInsert.size() > 0) {
- taoBaoGoodsBriefService.insertBatch(listGoodsInsert);
- }
-
- // 鏇存柊娣樺疂鍟嗗搧
- if (listGoodsUpdate.size() > 0) {
- taoBaoGoodsUpdateService.updateTaoBaoGoods(listGoodsUpdate);
- }
-
- // 鍔犲叆绮鹃�夊簱
- if (listInsertQuality.size() > 0) {
- qualityFactoryMapper.insertBatch(listInsertQuality);
- }
-
- // 娣诲姞鏍囩
- if (listLabelAdd.size() > 0) {
- labelGoodsMapper.insertBatch(listLabelAdd);
- }
-
- }
-
- @Override
- @Transactional
- public void setWeightBatch(List<Long> idList, AdminUser admin, Integer weight, Integer weightSmall,
- Integer weightLarge) throws Exception {
-
- for (Long selectId : idList) {
-
- QualityFactory selectionGoods = qualityFactoryMapper.selectByPrimaryKey(selectId);
-
- if (selectionGoods == null) {
- continue;
- }
- // 榛樿 50
- int resultWeight = 50;
-
- if (weight != null) {
- resultWeight = weight;
- } else {
- if (weightSmall != null && weightLarge != null) {
- // 闅忔満鏉冮噸
- resultWeight = weightSmall + (int) (Math.random() * ((weightLarge - weightSmall) + 1));
- }
- }
-
- // 淇敼鏉冮噸
- selectionGoods.setUpdateUser(admin);
- selectionGoods.setWeight(resultWeight);
- qualityFactoryMapper.updateByPrimaryKeySelective(selectionGoods);
- }
-
- }
-
- @Override
- public Long countTotalRows(Integer days) {
- return qualityFactoryMapper.countTotalRows(days);
- }
-
- @Override
- public void updateWeight(Integer weight, Integer time) {
- qualityFactoryMapper.updateWeight(weight, time);
- }
-
- @Override
- public long queryNeedUpdateCount() {
- return qualityFactoryMapper.countQueryNeedUpdate();
- }
-
- @Override
- public List<Long> queryNeedUpdate(long start, int count, int hour) {
- return qualityFactoryMapper.queryNeedUpdate(start, count, hour);
- }
-
- /**
- * 鑾峰彇缂撳瓨
- *
- * @param key
- * 閿�
- * @param title
- * 鏍囩鍚嶇О
- * @return
- */
- public String getLabelIdByRedis(String key, String title) throws Exception {
-
- String value = redisManager.getCommonString(key);
-
- if (StringUtil.isNullOrEmpty(value)) {
-
- // id涓虹┖鏃剁郴缁熻繘琛屾煡璇�
- List<Label> list9K9 = labelService.selectByTitle(title);
-
- if (list9K9 != null && list9K9.size() > 0) {
- Long id = list9K9.get(0).getId();
- if (id != null) {
- value = id + "";
- // 缂撳瓨20鍒嗛挓
- redisManager.cacheCommonString(key, value, 60 * 20);
- }
- }
- }
-
- return value;
- }
-
- @Override
- public void updateQualityGoods(Long goodsId) {
- if (goodsId == null) {
- return;
- }
-
- TaoBaoGoodsBrief goods = null;
- boolean isDelete = false;
- try {
- // 鑾峰彇璇︽儏
- goods = TaoKeApiUtil.searchGoodsDetail(goodsId);
- if(goods == null) {
- isDelete = true;
- } else if (goods.getCouponAmount().compareTo(BigDecimal.valueOf(0)) > 0) {
- isDelete = true;
- }
- } catch (TaobaoGoodsDownException e) {
- isDelete = true;
- }
-
- // 绉婚櫎绮鹃�夊簱
- if (isDelete) {
- deleteByTaoBaoGoodsId(goodsId);
- taoBaoGoodsBriefService.deleteByPrimaryKey(goodsId);
- return;
- }
-
- goods.setId(goodsId);
- goods.setCreatetime(new Date());
- goods.setUpdatetime(new Date());
- try {
- taoBaoGoodsUpdateService.updateTaoBaoGoods(goods);
- } catch (TaobaoGoodsUpdateException e) {
- e.printStackTrace();
- }
-
- }
-
- @Override
- public void autoInsertOrUpadateStorage(BoutiqueAutoRule autoRule, List<TaoBaoGoodsBrief> goodsList, List<Label> listLabs) {
-
- if (goodsList == null || goodsList.size() == 0) {
- return;
- }
-
- /* 鏉ユ簮鎺ㄨ崘鍟嗗搧 闇�瑕佽幏鍙栬鎯� */
- if (QualityFactory.SOURCE_TAOBAO_MATERIAL == autoRule.getGoodsSource()) {
- List<TaoBaoGoodsBrief> listGoodsBrief = new ArrayList<TaoBaoGoodsBrief>();
-
- goodsList.parallelStream().forEach(goods -> {
- try {
- TaoBaoGoodsBrief taoBaoGoodsBrief = TaoKeApiUtil.searchGoodsDetail(goods.getAuctionId());
- if (taoBaoGoodsBrief != null) {
- listGoodsBrief.add(taoBaoGoodsBrief);
- }
- } catch (TaobaoGoodsDownException e) {
- e.printStackTrace();
- }
- });
-
- goodsList.clear();
- goodsList = listGoodsBrief;
-
- if (goodsList == null || goodsList.size() == 0) {
- return;
- }
- }
-
-
-// for (int i = 0; i < goodsList.size(); i++) {
-// if (goodsList.get(i).getMaterialLibType() != null && goodsList.get(i).getMaterialLibType() == 0) {
-// goodsList.remove(i);
-// i--;
-// }
-// }
-
-
- // 娣诲姞鍟嗗搧鏍囩鍒楄〃
- List<LabelGoods> listLabelAdd = new ArrayList<LabelGoods>();
-
- // 鎻掑叆鍟嗗搧闆嗗悎
- List<TaoBaoGoodsBrief> listGoodsInsert = new ArrayList<TaoBaoGoodsBrief>();
- // 鏇存柊鍟嗗搧闆嗗悎
- List<TaoBaoGoodsBrief> listGoodsUpdate = new ArrayList<TaoBaoGoodsBrief>();
-
- // 杩涘叆绮鹃�夊晢鍝佸垪琛�
- List<QualityFactory> listInsertQuality = new ArrayList<QualityFactory>();
- // 杩涘叆绮鹃�夊晢鍝佸垪琛�
- List<QualityFactory> listUpdateQuality = new ArrayList<QualityFactory>();
-
- // 鎻掑叆鍟嗗搧娣樺疂ID闆嗗悎
- List<Long> listAuctionId = new ArrayList<Long>();
- for (TaoBaoGoodsBrief goodsBrief : goodsList) {
- listAuctionId.add(goodsBrief.getAuctionId());
- }
- List<Long> listHas = taoBaoGoodsBriefService.listExistById(listAuctionId);
-
-
-
- // 閬嶅巻鍟嗗搧
- for (TaoBaoGoodsBrief newGoodsBrief : goodsList) {
- Long auctionId = newGoodsBrief.getAuctionId();
- // 璁剧疆鎴愪富閿�
- newGoodsBrief.setId(auctionId);
- newGoodsBrief.setState(0); // 鐘舵�佸惎鐢�
- newGoodsBrief.setCreatetime(new Date());
- newGoodsBrief.setUpdatetime(new Date());
-
- /* 鍒ゆ柇鍟嗗搧 鏄惁宸茬粡瀛樺湪鏁版嵁搴� */
- if (listHas != null && listHas.size() > 0 && listHas.contains(auctionId)) {
- // 鏇存柊鍟嗗搧
-
- listGoodsUpdate.add(newGoodsBrief);
-
- // 鍟嗗搧鏍囩
- if (listLabs != null && listLabs.size() > 0) {
- for (Label lab: listLabs) {
- long existence = labelGoodsMapper.isExistence(auctionId, lab.getId());
- if (existence <= 0) {
- // 璐翠笂鏂版爣绛�
- LabelGoods lg = new LabelGoods();
- lg.setLabel(lab);
- lg.setCreateUser(autoRule.getAdminUser());
- lg.setCreatetime(new Date());
- lg.setTaoBaoGoodsBrief(newGoodsBrief);
- listLabelAdd.add(lg);
- }
- }
- }
-
- // 鏇存柊鐨勫晢鍝佷俊鎭� 鏄惁瀛樺湪绮鹃�夊簱涓�
- QualityFactory quality = qualityFactoryMapper.getByAuctionId(auctionId);
- if (quality == null) {
- listInsertQuality.add(getNewQualityFactory(newGoodsBrief, autoRule));
- } else {
- // 闅忔満鏉冮噸
- int weight = autoRule.getStartWeight()
- + (int) (Math.random() * ((autoRule.getEndWeight() - autoRule.getStartWeight()) + 1));
- quality.setWeight(weight);
- // 鏇存柊鏃堕棿
- quality.setUpdatetime(new Date());
- // 鏇存柊鏉ユ簮瑙勫垯
- quality.setBoutiqueAutoRule(autoRule);
- // 鏇存柊鏉ユ簮绫诲埆
- quality.setSourceCalss(autoRule.getSourceCalss());
- // 鏉ユ簮
- quality.setGoodsSource(autoRule.getGoodsSource());
- listUpdateQuality.add(quality);
- }
-
- } else {
- // 璁剧疆鍟嗗搧榛樿鍊�
- taoBaoGoodsBriefService.setGoodsBriefDefault(newGoodsBrief);
- listGoodsInsert.add(newGoodsBrief);
-
- // 绮鹃�夊簱淇℃伅
- listInsertQuality.add(getNewQualityFactory(newGoodsBrief, autoRule));
-
- // 鍟嗗搧鏍囩
- if (listLabs != null && listLabs.size() > 0) {
- for (Label lab: listLabs) {
- LabelGoods lg = new LabelGoods();
- lg.setLabel(lab);
- lg.setCreateUser(autoRule.getAdminUser());
- lg.setCreatetime(new Date());
- lg.setTaoBaoGoodsBrief(newGoodsBrief);
- listLabelAdd.add(lg);
- }
- }
- }
- }
-
- // 鎻掑叆娣樺疂鍟嗗搧
- if (listGoodsInsert.size() > 0) {
- taoBaoGoodsBriefService.insertBatch(listGoodsInsert);
- }
-
- // 鏇存柊娣樺疂鍟嗗搧
- if (listGoodsUpdate.size() > 0) {
- try {
- taoBaoGoodsUpdateService.updateTaoBaoGoods(listGoodsUpdate);
- } catch (TaobaoGoodsUpdateException e) {
- e.printStackTrace();
- }
- }
-
-
- // 鍔犲叆绮鹃�夊簱
- if (listInsertQuality.size() > 0) {
- qualityFactoryMapper.insertBatch(listInsertQuality);
- }
-
- // 鏇存柊绮鹃�夊簱
- if (listUpdateQuality.size() > 0) {
- qualityFactoryMapper.updateBatchSelective(listUpdateQuality);
- }
-
- // 娣诲姞鏍囩
- if (listLabelAdd.size() > 0) {
- labelGoodsMapper.insertBatch(listLabelAdd);
- }
-
- // 鍔犲叆闄愭椂鎶㈣喘
- if (autoRule.isFlashSale()) {
- updateQualityFlashSale(goodsList, autoRule);
- }
- }
-
-
-
- /**
- * 闄愭椂绉掓潃
- * @param listinsert
- * @param listUpdate
- * @param autoRule
- */
- public void updateQualityFlashSale(List<TaoBaoGoodsBrief> listGoods, BoutiqueAutoRule autoRule) {
-
- List<Long> listQFId = new ArrayList<Long>();
- for (TaoBaoGoodsBrief taoBaoGoodsBrief : listGoods) {
- listQFId.add(taoBaoGoodsBrief.getId());
- }
-
- int startWeight = autoRule.getStartWeight();
- int endWeight = autoRule.getEndWeight();
- int goodsSource = autoRule.getGoodsSource();
-
- // 鍔犲叆鍏ラ檺鏃舵姠璐�
- List<QualityFlashSale> listFlashSale = new ArrayList<QualityFlashSale>();
- // 闄愭椂鎶㈣喘鏇存柊锛�
- List<QualityFlashSale> listFlashSaleUpdate = new ArrayList<QualityFlashSale>();
-
-
- // 鏌ヨ宸插瓨鍦ㄦ樉绀洪檺鏃舵姠璐殑鍟嗗搧
- List<QualityFlashSale> listQuery = qualityFlashSaleService.listQueryByQualityID(listQFId);
-
- if (listQuery == null || listQuery.size() == 0) {
- for (TaoBaoGoodsBrief taoBaoGoodsBrief: listGoods) {
- listFlashSale.add(getNewQualityFlashSale(taoBaoGoodsBrief, startWeight, endWeight, goodsSource));
- }
- } else {
-
- for (TaoBaoGoodsBrief taoBaoGoodsBrief: listGoods) {
- boolean exist = false;
- Long id = taoBaoGoodsBrief.getId();
-
- for (QualityFlashSale flashSale : listQuery) {
- TaoBaoGoodsBrief goodsBrief = flashSale.getTaoBaoGoodsBrief();
- if (id.equals(goodsBrief.getId())) {
- exist = true;
- double weight = startWeight + (Math.random() * ((endWeight - startWeight) + 1));
- flashSale.setWeight(weight);
- flashSale.setUpdatetime(new Date());
- listFlashSaleUpdate.add(flashSale);
- listQuery.remove(flashSale);
- break;
- }
- }
-
- if (!exist) {
- listFlashSale.add(getNewQualityFlashSale(taoBaoGoodsBrief, startWeight, endWeight, goodsSource));
- }
- }
- }
-
- // 鎻掑叆闄愭椂鎶㈣喘
- if (listFlashSale.size() > 0) {
- qualityFlashSaleService.insertBatch(listFlashSale);
- }
-
- // 鏇存柊闄愭椂鎶㈣喘
- if (listFlashSaleUpdate.size() > 0) {
- qualityFlashSaleService.updateBatchSelective(listFlashSaleUpdate);
- }
- }
-
- /**
- * 鍒涘缓鏂板璞ualityFlashSale
- *
- * @param qfId
- * @param i
- * @return
- */
- public QualityFlashSale getNewQualityFlashSale(TaoBaoGoodsBrief taoBaoGoodsBrief, int startWeight,
- int endWeight, int goodsSource) {
-
- QualityFlashSale flashSale = new QualityFlashSale();
- flashSale.setTaoBaoGoodsBrief(taoBaoGoodsBrief);
- flashSale.setCreatetime(new Date());
- flashSale.setUpdatetime(new Date());
-
- // 鏉冮噸璁剧疆锛氬ぇ娣樺浼樺厛灞曠ず
- double weight = 0;
- if (QualityFactory.SOURCE_TAOBAO_DATAOKE == goodsSource) {
- weight = 10000 + (Math.random() * 2001);
- } else {
- weight = startWeight + (Math.random() * ((endWeight - startWeight) + 1));
- }
- flashSale.setWeight(weight);
-
- return flashSale;
- }
-
-
- /**
- * 鍟嗗搧鍔犲叆绮鹃�夊簱-new QualityFactory()
- *
- * @param goodsBrief
- * @param admin
- * @return
- */
- public QualityFactory getNewQualityFactory(TaoBaoGoodsBrief goodsBrief, BoutiqueAutoRule autoRule) {
-
- /* 鍒嗙被 */
- Long classID = null;
-
- Integer rootCatId = goodsBrief.getRootCatId();
- if (rootCatId != null) {
- classID = taoBaoClassRelationMapper.getClassIdByTaoBaoCid(rootCatId.longValue());
- }
-
- // 娣诲姞鑷崇簿閫夊晢鍝佸簱
- QualityFactory selectionGoods = new QualityFactory();
-
- selectionGoods.setBoutiqueAutoRule(autoRule);
- selectionGoods.setSourceCalss(autoRule.getSourceCalss());
- selectionGoods.setSystemCid(classID);// 绫诲埆id
- selectionGoods.setGoodsSource(autoRule.getGoodsSource());// 鏉ユ簮
- selectionGoods.setTaoBaoGoodsBrief(goodsBrief);
-
- selectionGoods.setCreateUser(autoRule.getAdminUser());
- selectionGoods.setCreatetime(new Date());
- selectionGoods.setUpdateUser(autoRule.getAdminUser());
- selectionGoods.setUpdatetime(new Date());
- selectionGoods.setEntryMode(QualityFactory.MODE_AUTO);// 绯荤粺绛涢��
-
- // 闅忔満鏉冮噸
- int resultWeight = autoRule.getStartWeight()
- + (int) (Math.random() * ((autoRule.getEndWeight() - autoRule.getStartWeight()) + 1));
-
- selectionGoods.setWeight(resultWeight);
-
- return selectionGoods;
-
- }
-
-
-
- /**
- * 鍒犻櫎鏈洿鏂扮殑鍟嗗搧
- *
- * @param systemCid
- * @param formatDate
- * @param source
- */
- @Override
- public void deleteNotUpdateGoods(Long systemCid, String formatDate, int source) {
- List<Long> list = qualityFactoryMapper.getAuctionIdbyClassId(systemCid, source, formatDate);
- if (list == null || list.size() == 0) {
- return;
- }
-
- // 灏忎簬100鏉$洿鎺ュ垹闄�
- if (list.size() <= 100) {
- // 鍒犻櫎绮鹃�夊簱
- deleteBatchByTaoBaoGoodsId(list);
- // 鍒犻櫎鍟嗗搧
- taoBaoGoodsBriefService.deleteBatchByGoodsId(list);
- return;
- }
-
-
- // 澶т簬100闇�瑕佸垎娈靛垹闄�
- int start = 0;
- int end = 100;
- int countRow = 100;
-
- int count = list.size() / countRow;
- if (list.size() % countRow > 0) {
- count += 1;
- }
-
- for (int i = 0; i < count; i++) {
- List<Long> sublist = new ArrayList<Long>();
- if (i == count - 1) {
- sublist = list.subList(start, list.size());
- deleteBatchByTaoBaoGoodsId(sublist);
- taoBaoGoodsBriefService.deleteBatchByGoodsId(sublist);
- break;
- }
- sublist = list.subList(start, end);
- deleteBatchByTaoBaoGoodsId(sublist);
- taoBaoGoodsBriefService.deleteBatchByGoodsId(sublist);
- start += countRow;
- end += countRow;
- }
- }
-
-
- /**
- * 鏌ヨ绮鹃�夊晢鍝佹暟鎹簲鐢ㄥ墠绔�
- *
- * @param start
- * @param count
- * @param key
- * @param classId
- * 鍒嗙被id
- * @param labId
- * 鏍囩id
- * @return
- */
- @Override
- public List<QualityFactory> listQuery(long start, int count, String key, Long classId, Long labId) {
- return qualityFactoryMapper.listQuery(start, count, key, classId, labId, null, null);
- }
-
- /**
- * 瀵瑰簲鏌ヨ绮鹃�夊晢鍝佹暟鎹簲鐢ㄥ墠绔粺璁�
- */
- @Override
- public long countQuery(String key, Integer goodsSource, Long classId, Long labId) {
- return qualityFactoryMapper.countQuery(key, classId, labId, null, null);
- }
-
- public LabelGoods screen9K9(TaoBaoGoodsBrief goodsBrief, Map<String, Label> map) {
- // 璐翠笂鏂版爣绛�
- LabelGoods lg = null;
-
- /* 9k9 */
- BigDecimal price9k9 = new BigDecimal(10);
- /* 19k9 */
- BigDecimal price19k9 = new BigDecimal(20);
- /* 29.9 */
- BigDecimal price29K9 = new BigDecimal(30);
- /* 49.9 */
- BigDecimal price49K9 = new BigDecimal(50);
- /* 鍒稿悗浠�--璁$畻 */
- BigDecimal couponPrice = TaoBaoUtil.getAfterUseCouplePrice(goodsBrief);
-
- if (couponPrice.compareTo(price9k9) < 0) {
- Label label = map.get("9.9");
- if (label == null) {
- return null;
- }
-
- lg = new LabelGoods();
- lg.setLabel(label);
-
- } else if (couponPrice.compareTo(price19k9) < 0) {
- Label label = map.get("19.9");
- if (label == null) {
- return null;
- }
-
- lg = new LabelGoods();
- lg.setLabel(label);
- } else if (couponPrice.compareTo(price29K9) < 0) {
- Label label = map.get("29.9");
- if (label == null) {
- return null;
- }
-
- lg = new LabelGoods();
- lg.setLabel(label);
- } else if (couponPrice.compareTo(price49K9) < 0) {
- Label label = map.get("49.9");
- if (label == null) {
- return null;
- }
-
- lg = new LabelGoods();
- lg.setLabel(label);
- } else {
- return null;
- }
-
- lg.setCreateUser(new AdminUser(2L));
- lg.setCreatetime(new Date());
- lg.setTaoBaoGoodsBrief(goodsBrief);
-
- return lg;
- }
-
- @Override
- public List<QualityFactory> listByMinSalesCountOrderByCreateTimeDesc(int salesCount, int page, int pageSize) {
- return qualityFactoryMapper.listByMinSalesCountOrderByCreateTimeDesc(salesCount, (page - 1) * pageSize,
- pageSize);
- }
-
-}
+package com.yeshi.fanli.service.impl.lable;
+
+import java.math.BigDecimal;
+import java.util.*;
+
+import javax.annotation.Resource;
+
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import com.yeshi.fanli.dao.mybatis.TaoBaoClassRelationMapper;
+import com.yeshi.fanli.dao.mybatis.lable.LabelGoodsMapper;
+import com.yeshi.fanli.dao.mybatis.lable.QualityFactoryMapper;
+import com.yeshi.fanli.dao.mybatis.lable.QualityFlashSaleMapper;
+import com.yeshi.fanli.dao.mybatis.taobao.TaoBaoGoodsBriefMapper;
+import com.yeshi.fanli.entity.bus.lable.BoutiqueAutoRule;
+import com.yeshi.fanli.entity.bus.lable.Label;
+import com.yeshi.fanli.entity.bus.lable.LabelGoods;
+import com.yeshi.fanli.entity.bus.lable.QualityFactory;
+import com.yeshi.fanli.entity.bus.lable.QualityFlashSale;
+import com.yeshi.fanli.entity.common.AdminUser;
+import com.yeshi.goods.facade.entity.taobao.TaoBaoGoodsBrief;
+import com.yeshi.fanli.exception.goods.quality.QualityFactoryException;
+import com.yeshi.fanli.exception.taobao.TaobaoGoodsDownException;
+import com.yeshi.fanli.exception.taobao.TaobaoGoodsUpdateException;
+import com.yeshi.fanli.service.inter.goods.TaoBaoGoodsBriefService;
+import com.yeshi.fanli.service.inter.lable.LabelService;
+import com.yeshi.fanli.service.inter.lable.QualityFactoryService;
+import com.yeshi.fanli.service.inter.lable.QualityFlashSaleService;
+import com.yeshi.fanli.service.inter.taobao.TaoBaoGoodsUpdateService;
+import com.yeshi.fanli.service.inter.taobao.TaoBaoUnionConfigService;
+import com.yeshi.fanli.util.RedisKeyEnum;
+import com.yeshi.fanli.util.RedisManager;
+import com.yeshi.fanli.util.StringUtil;
+import com.yeshi.fanli.util.taobao.TaoKeApiUtil;
+import com.yeshi.fanli.vo.quality.QualityFactoryVO;
+
+@Service
+public class QualityFactoryServiceImpl implements QualityFactoryService {
+
+ @Resource
+ private RedisManager redisManager;
+ @Resource
+ private QualityFactoryMapper qualityFactoryMapper;
+ @Resource
+ private TaoBaoGoodsBriefService taoBaoGoodsBriefService;
+ @Resource
+ private LabelGoodsMapper labelGoodsMapper;
+ @Resource
+ private LabelService labelService;
+ @Resource
+ private TaoBaoGoodsBriefMapper taoBaoGoodsBriefMapper;
+ @Resource
+ private TaoBaoUnionConfigService taoBaoUnionConfigService;
+ @Resource
+ private TaoBaoClassRelationMapper taoBaoClassRelationMapper;
+ @Resource
+ private QualityFlashSaleService qualityFlashSaleService;
+ @Resource
+ private QualityFlashSaleMapper qualityFlashSaleMapper;
+
+ @Resource
+ private TaoBaoGoodsUpdateService taoBaoGoodsUpdateService;
+
+ @Override
+ public int updateByPrimaryKeySelective(QualityFactory record) throws QualityFactoryException {
+ return qualityFactoryMapper.updateByPrimaryKeySelective(record);
+ }
+
+
+ @Override
+ public void deleteByTaoBaoGoodsId(String auctionId) {
+ if (auctionId == null) {
+ return;
+ }
+ // 绉婚櫎绮鹃�夊簱
+ qualityFactoryMapper.deleteByGoodsId(auctionId);
+ // 鍒犻櫎闄愭椂鎶㈣喘
+ qualityFlashSaleMapper.deleteByGoodsId(auctionId);
+ // 鍒犻櫎瀵瑰簲鏍囩
+ labelGoodsMapper.deleteByGoodsId(auctionId);
+ }
+
+
+ @Override
+ public void deleteBatchByTaoBaoGoodsId(List<String> listGid) {
+
+ if (listGid == null || listGid.size() == 0) {
+ return;
+ }
+ // 鎵归噺鍒犻櫎绮鹃�夊簱
+ qualityFactoryMapper.deleteBatchByGoodsId(listGid);
+ // 鎵归噺鍒犻櫎闄愭椂鎶㈣喘
+ qualityFlashSaleMapper.deleteBatchByQualityID(listGid);
+ // 鍒犻櫎瀵瑰簲鏍囩
+ labelGoodsMapper.deleteBatchByGoodsId(listGid);
+ }
+
+
+ @Override
+ @Transactional(rollbackFor=Exception.class)
+ public void deleteByGoodsId(List<String> ids) throws QualityFactoryException {
+
+ if (ids != null && ids.size() > 0) {
+ for (String goodsId : ids) {
+ qualityFactoryMapper.deleteByGoodsId(goodsId);
+ }
+ }
+ }
+
+ @Override
+ public QualityFactory selectByPrimaryKey(Long id) throws QualityFactoryException {
+ return qualityFactoryMapper.selectByPrimaryKey(id);
+ }
+
+ @Override
+ public List<String> getAuctionIdbyClassId(Long systemCid, Integer goodsSource, String dateTime){
+ return qualityFactoryMapper.getAuctionIdbyClassId(systemCid, goodsSource, dateTime);
+ }
+
+ @Override
+ public List<QualityFactory> queryAll(long start, int count, Integer days) {
+ return qualityFactoryMapper.queryAll(start, count, days);
+ }
+
+ @Override
+ public List<QualityFactory> query(QualityFactoryVO qualityFactoryVO) throws QualityFactoryException {
+ return qualityFactoryMapper.query(qualityFactoryVO);
+ }
+
+ @Override
+ public long queryCount(QualityFactoryVO qualityFactoryVO) throws QualityFactoryException {
+ return qualityFactoryMapper.queryCount(qualityFactoryVO);
+ }
+
+ @Override
+ public Map<String, Object> getCountAll() {
+ return qualityFactoryMapper.getCountAll();
+ }
+
+ @Override
+ public Long queryCountByGoodsId(String goodsId) {
+ return qualityFactoryMapper.queryCountByGoodsId(goodsId);
+ }
+
+ @Override
+ public List<QualityFactory> listQueryByAuctionId(List<String> list) {
+ return qualityFactoryMapper.listQueryByAuctionId(list);
+ }
+
+ @Override
+ @Transactional(rollbackFor=Exception.class)
+ public void addBatchTaoBaoGoods(List<TaoBaoGoodsBrief> listTaoBaoGoods, String lableNames, AdminUser admin)
+ throws Exception {
+
+ if (listTaoBaoGoods == null || listTaoBaoGoods.size() == 0) {
+ throw new Exception("鏈壘鍒板尮閰嶇殑鍟嗗搧");
+ }
+
+ // 鍒涘缓鏍囩
+ List<Label> listLabs = labelService.addBatchByNames(lableNames, admin);
+
+
+ // 娣诲姞鍟嗗搧鏍囩鍒楄〃
+ List<LabelGoods> listLabelAdd = new ArrayList<LabelGoods>();
+ // 鎻掑叆鍟嗗搧闆嗗悎
+ List<TaoBaoGoodsBrief> listGoodsInsert = new ArrayList<TaoBaoGoodsBrief>();
+ // 鏇存柊鍟嗗搧闆嗗悎
+ List<TaoBaoGoodsBrief> listGoodsUpdate = new ArrayList<TaoBaoGoodsBrief>();
+ // 杩涘叆绮鹃�夊晢鍝佸垪琛�
+ List<QualityFactory> listInsertQuality = new ArrayList<QualityFactory>();
+
+
+ // 鎻掑叆鍟嗗搧娣樺疂ID闆嗗悎
+ List<String> listAuctionId = new ArrayList<>();
+ for (TaoBaoGoodsBrief goodsBrief : listTaoBaoGoods) {
+ listAuctionId.add(goodsBrief.getAuctionId());
+ }
+ List<Long> listHas = taoBaoGoodsBriefService.listExistById(listAuctionId);
+
+ // 閬嶅巻鍟嗗搧
+ for (TaoBaoGoodsBrief newGoodsBrief : listTaoBaoGoods) {
+ String auctionId = newGoodsBrief.getAuctionId();
+ // 璁剧疆鎴愪富閿�
+ newGoodsBrief.setAuctionId(auctionId);
+ newGoodsBrief.setState(0); // 鐘舵�佸惎鐢�
+ newGoodsBrief.setCreatetime(new Date());
+ newGoodsBrief.setUpdatetime(new Date());
+
+ /* 鍒ゆ柇鍟嗗搧 鏄惁宸茬粡瀛樺湪鏁版嵁搴� */
+ if (listHas != null && listHas.size() > 0 && listHas.contains(auctionId)) {
+ // 鏇存柊鍟嗗搧
+
+ listGoodsUpdate.add(newGoodsBrief);
+ // 鍟嗗搧鏍囩
+ if (listLabs != null && listLabs.size() > 0) {
+ for (Label lab: listLabs) {
+ long existence = labelGoodsMapper.isExistence(auctionId, lab.getId());
+ if (existence <= 0) {
+ // 璐翠笂鏂版爣绛�
+ LabelGoods lg = new LabelGoods();
+ lg.setLabel(lab);
+ lg.setCreateUser(admin);
+ lg.setCreatetime(new Date());
+ lg.setTaoBaoGoodsBrief(newGoodsBrief);
+ listLabelAdd.add(lg);
+ }
+ }
+ }
+
+ // 鏇存柊鐨勫晢鍝佷俊鎭� 鏄惁瀛樺湪绮鹃�夊簱涓�
+ QualityFactory quality = qualityFactoryMapper.getByAuctionId(auctionId);
+ if (quality == null) {
+ QualityFactory selectionGoods = new QualityFactory();
+ selectionGoods.setTaoBaoGoodsBrief(newGoodsBrief);
+ selectionGoods.setCreateUser(admin);
+ selectionGoods.setCreatetime(new Date());
+ selectionGoods.setUpdateUser(admin);
+ selectionGoods.setUpdatetime(new Date());
+ selectionGoods.setEntryMode(QualityFactory.MODE_MANUAL);// 浜哄伐绛涢��
+ selectionGoods.setGoodsSource(QualityFactory.SOURCE_TAOBAO);// 鏉ユ簮
+ selectionGoods.setWeight((int) (Math.random() * (4000)));
+ listInsertQuality.add(selectionGoods);
+ }
+ } else {
+ // 璁剧疆鍟嗗搧榛樿鍊�
+ taoBaoGoodsBriefService.setGoodsBriefDefault(newGoodsBrief);
+ listGoodsInsert.add(newGoodsBrief);
+
+ // 绮鹃�夊簱淇℃伅
+ QualityFactory selectionGoods = new QualityFactory();
+ selectionGoods.setTaoBaoGoodsBrief(newGoodsBrief);
+ selectionGoods.setCreateUser(admin);
+ selectionGoods.setCreatetime(new Date());
+ selectionGoods.setUpdateUser(admin);
+ selectionGoods.setUpdatetime(new Date());
+ selectionGoods.setEntryMode(QualityFactory.MODE_MANUAL);// 浜哄伐绛涢��
+ selectionGoods.setGoodsSource(QualityFactory.SOURCE_TAOBAO);// 鏉ユ簮
+ selectionGoods.setWeight((int) (Math.random() * (4000)));
+ listInsertQuality.add(selectionGoods);
+
+ // 鍟嗗搧鏍囩
+ if (listLabs != null && listLabs.size() > 0) {
+ for (Label lab: listLabs) {
+ LabelGoods lg = new LabelGoods();
+ lg.setLabel(lab);
+ lg.setCreateUser(admin);
+ lg.setCreatetime(new Date());
+ lg.setTaoBaoGoodsBrief(newGoodsBrief);
+ listLabelAdd.add(lg);
+ }
+ }
+ }
+ }
+ // 鎻掑叆娣樺疂鍟嗗搧
+ if (listGoodsInsert.size() > 0) {
+ taoBaoGoodsBriefService.insertBatch(listGoodsInsert);
+ }
+
+ // 鏇存柊娣樺疂鍟嗗搧
+ if (listGoodsUpdate.size() > 0) {
+ taoBaoGoodsUpdateService.updateTaoBaoGoods(listGoodsUpdate);
+ }
+
+ // 鍔犲叆绮鹃�夊簱
+ if (listInsertQuality.size() > 0) {
+ qualityFactoryMapper.insertBatch(listInsertQuality);
+ }
+
+ // 娣诲姞鏍囩
+ if (listLabelAdd.size() > 0) {
+ labelGoodsMapper.insertBatch(listLabelAdd);
+ }
+
+ }
+
+ @Override
+ @Transactional(rollbackFor=Exception.class)
+ public void setWeightBatch(List<Long> idList, AdminUser admin, Integer weight, Integer weightSmall,
+ Integer weightLarge) throws Exception {
+
+ for (Long selectId : idList) {
+
+ QualityFactory selectionGoods = qualityFactoryMapper.selectByPrimaryKey(selectId);
+
+ if (selectionGoods == null) {
+ continue;
+ }
+ // 榛樿 50
+ int resultWeight = 50;
+
+ if (weight != null) {
+ resultWeight = weight;
+ } else {
+ if (weightSmall != null && weightLarge != null) {
+ // 闅忔満鏉冮噸
+ resultWeight = weightSmall + (int) (Math.random() * ((weightLarge - weightSmall) + 1));
+ }
+ }
+
+ // 淇敼鏉冮噸
+ selectionGoods.setUpdateUser(admin);
+ selectionGoods.setWeight(resultWeight);
+ qualityFactoryMapper.updateByPrimaryKeySelective(selectionGoods);
+ }
+
+ }
+
+ @Override
+ public Long countTotalRows(Integer days) {
+ return qualityFactoryMapper.countTotalRows(days);
+ }
+
+ @Override
+ public void updateWeight(Integer weight, Integer time) {
+ qualityFactoryMapper.updateWeight(weight, time);
+ }
+
+
+ /**
+ * 鑾峰彇缂撳瓨
+ *
+ * @param key
+ * 閿�
+ * @param title
+ * 鏍囩鍚嶇О
+ * @return
+ */
+ public String getLabelIdByRedis(String key, String title) throws Exception {
+ key = RedisKeyEnum.getRedisKey(RedisKeyEnum.emptyKey, key);
+ String value = redisManager.getCommonString(key);
+
+ if (StringUtil.isNullOrEmpty(value)) {
+
+ // id涓虹┖鏃剁郴缁熻繘琛屾煡璇�
+ List<Label> list9K9 = labelService.selectByTitle(title);
+
+ if (list9K9 != null && list9K9.size() > 0) {
+ Long id = list9K9.get(0).getId();
+ if (id != null) {
+ value = id + "";
+ // 缂撳瓨20鍒嗛挓
+ redisManager.cacheCommonString(key, value, 60 * 20);
+ }
+ }
+ }
+
+ return value;
+ }
+
+ @Override
+ public void updateQualityGoods(String goodsId) {
+ if (goodsId == null) {
+ return;
+ }
+
+ TaoBaoGoodsBrief goods = null;
+ boolean isDelete = false;
+ try {
+ // 鑾峰彇璇︽儏
+ goods = TaoKeApiUtil.searchGoodsDetail(goodsId);
+ if(goods == null) {
+ isDelete = true;
+ } else if (goods.getCouponAmount().compareTo(BigDecimal.valueOf(0)) > 0) {
+ isDelete = true;
+ }
+ } catch (TaobaoGoodsDownException e) {
+ isDelete = true;
+ }
+
+ // 绉婚櫎绮鹃�夊簱
+ if (isDelete) {
+ deleteByTaoBaoGoodsId(goodsId);
+ taoBaoGoodsBriefService.deleteBatchByGoodsId(Arrays.asList(new String[]{ goodsId}));
+ return;
+ }
+
+ goods.setAuctionId(goodsId);
+ goods.setCreatetime(new Date());
+ goods.setUpdatetime(new Date());
+ try {
+ taoBaoGoodsUpdateService.updateTaoBaoGoods(goods);
+ } catch (TaobaoGoodsUpdateException e) {
+ e.printStackTrace();
+ }
+
+ }
+
+ @Override
+ @Transactional
+ public void autoInsertOrUpadateStorage(BoutiqueAutoRule autoRule, List<TaoBaoGoodsBrief> goodsList, List<Label> listLabs) {
+
+ if (goodsList == null || goodsList.size() == 0) {
+ return;
+ }
+
+ /* 鏉ユ簮鎺ㄨ崘鍟嗗搧 闇�瑕佽幏鍙栬鎯� */
+ if (QualityFactory.SOURCE_TAOBAO_MATERIAL == autoRule.getGoodsSource()) {
+ List<TaoBaoGoodsBrief> listGoodsBrief = new ArrayList<TaoBaoGoodsBrief>();
+
+ goodsList.parallelStream().forEach(goods -> {
+ try {
+ TaoBaoGoodsBrief taoBaoGoodsBrief = TaoKeApiUtil.searchGoodsDetail(goods.getAuctionId());
+ if (taoBaoGoodsBrief != null) {
+ listGoodsBrief.add(taoBaoGoodsBrief);
+ }
+ } catch (TaobaoGoodsDownException e) {
+ e.printStackTrace();
+ }
+ });
+
+ goodsList.clear();
+ goodsList = listGoodsBrief;
+
+ if (goodsList == null || goodsList.size() == 0) {
+ return;
+ }
+ }
+
+
+// for (int i = 0; i < goodsList.size(); i++) {
+// if (goodsList.get(i).getMaterialLibType() != null && goodsList.get(i).getMaterialLibType() == 0) {
+// goodsList.remove(i);
+// i--;
+// }
+// }
+
+
+ // 娣诲姞鍟嗗搧鏍囩鍒楄〃
+ List<LabelGoods> listLabelAdd = new ArrayList<LabelGoods>();
+
+ // 鎻掑叆鍟嗗搧闆嗗悎
+ List<TaoBaoGoodsBrief> listGoodsInsert = new ArrayList<TaoBaoGoodsBrief>();
+ // 鏇存柊鍟嗗搧闆嗗悎
+ List<TaoBaoGoodsBrief> listGoodsUpdate = new ArrayList<TaoBaoGoodsBrief>();
+
+ // 杩涘叆绮鹃�夊晢鍝佸垪琛�
+ List<QualityFactory> listInsertQuality = new ArrayList<QualityFactory>();
+ // 杩涘叆绮鹃�夊晢鍝佸垪琛�
+ List<QualityFactory> listUpdateQuality = new ArrayList<QualityFactory>();
+
+ // 鎻掑叆鍟嗗搧娣樺疂ID闆嗗悎
+ List<String> listAuctionId = new ArrayList<>();
+ for (TaoBaoGoodsBrief goodsBrief : goodsList) {
+ listAuctionId.add(goodsBrief.getAuctionId());
+ }
+
+ List<Long> listHas = new ArrayList<Long>();
+ if (listAuctionId.size() > 0) {
+ listHas = taoBaoGoodsBriefService.listExistById(listAuctionId);
+ }
+
+
+ // 閬嶅巻鍟嗗搧
+ for (TaoBaoGoodsBrief newGoodsBrief : goodsList) {
+ String auctionId = newGoodsBrief.getAuctionId();
+ // 璁剧疆鎴愪富閿�
+ newGoodsBrief.setAuctionId(auctionId);
+ newGoodsBrief.setState(0); // 鐘舵�佸惎鐢�
+ newGoodsBrief.setCreatetime(new Date());
+ newGoodsBrief.setUpdatetime(new Date());
+
+ /* 鍒ゆ柇鍟嗗搧 鏄惁宸茬粡瀛樺湪鏁版嵁搴� */
+ if (listHas != null && listHas.size() > 0 && listHas.contains(auctionId)) {
+ // 鏇存柊鍟嗗搧
+
+ listGoodsUpdate.add(newGoodsBrief);
+
+ // 鍟嗗搧鏍囩
+ if (listLabs != null && listLabs.size() > 0) {
+ for (Label lab: listLabs) {
+ long existence = labelGoodsMapper.isExistence(auctionId, lab.getId());
+ if (existence <= 0) {
+ // 璐翠笂鏂版爣绛�
+ LabelGoods lg = new LabelGoods();
+ lg.setLabel(lab);
+ lg.setCreateUser(autoRule.getAdminUser());
+ lg.setCreatetime(new Date());
+ lg.setTaoBaoGoodsBrief(newGoodsBrief);
+ listLabelAdd.add(lg);
+ }
+ }
+ }
+
+ // 鏇存柊鐨勫晢鍝佷俊鎭� 鏄惁瀛樺湪绮鹃�夊簱涓�
+ QualityFactory quality = qualityFactoryMapper.getByAuctionId(auctionId);
+ if (quality == null) {
+ listInsertQuality.add(getNewQualityFactory(newGoodsBrief, autoRule));
+ } else {
+ // 闅忔満鏉冮噸
+ int weight = autoRule.getStartWeight()
+ + (int) (Math.random() * ((autoRule.getEndWeight() - autoRule.getStartWeight()) + 1));
+ quality.setWeight(weight);
+ // 鏇存柊鏃堕棿
+ quality.setUpdatetime(new Date());
+ // 鏇存柊鏉ユ簮瑙勫垯
+ quality.setBoutiqueAutoRule(autoRule);
+ // 鏇存柊鏉ユ簮绫诲埆
+ quality.setSourceCalss(autoRule.getSourceCalss());
+ // 鏉ユ簮
+ quality.setGoodsSource(autoRule.getGoodsSource());
+ listUpdateQuality.add(quality);
+ }
+
+ } else {
+ // 璁剧疆鍟嗗搧榛樿鍊�
+ taoBaoGoodsBriefService.setGoodsBriefDefault(newGoodsBrief);
+ listGoodsInsert.add(newGoodsBrief);
+
+ // 绮鹃�夊簱淇℃伅
+ listInsertQuality.add(getNewQualityFactory(newGoodsBrief, autoRule));
+
+ // 鍟嗗搧鏍囩
+ if (listLabs != null && listLabs.size() > 0) {
+ for (Label lab: listLabs) {
+ LabelGoods lg = new LabelGoods();
+ lg.setLabel(lab);
+ lg.setCreateUser(autoRule.getAdminUser());
+ lg.setCreatetime(new Date());
+ lg.setTaoBaoGoodsBrief(newGoodsBrief);
+ listLabelAdd.add(lg);
+ }
+ }
+ }
+ }
+
+ // 鎻掑叆娣樺疂鍟嗗搧
+ if (listGoodsInsert.size() > 0) {
+ taoBaoGoodsBriefService.insertBatch(listGoodsInsert);
+ }
+
+ // 鏇存柊娣樺疂鍟嗗搧
+ if (listGoodsUpdate.size() > 0) {
+ try {
+ taoBaoGoodsUpdateService.updateTaoBaoGoods(listGoodsUpdate);
+ } catch (TaobaoGoodsUpdateException e) {
+ e.printStackTrace();
+ }
+ }
+
+
+ // 鍔犲叆绮鹃�夊簱
+ if (listInsertQuality.size() > 0) {
+ qualityFactoryMapper.insertBatch(listInsertQuality);
+ }
+
+ // 鏇存柊绮鹃�夊簱
+ if (listUpdateQuality.size() > 0) {
+ qualityFactoryMapper.updateBatchSelective(listUpdateQuality);
+ }
+
+ // 娣诲姞鏍囩
+ if (listLabelAdd.size() > 0) {
+ labelGoodsMapper.insertBatch(listLabelAdd);
+ }
+
+ // 鍔犲叆闄愭椂鎶㈣喘
+ if (autoRule.isFlashSale()) {
+ updateQualityFlashSale(goodsList, autoRule);
+ }
+ }
+
+
+
+ /**
+ * 闄愭椂绉掓潃
+ * @param listGoods
+ * @param autoRule
+ */
+ public void updateQualityFlashSale(List<TaoBaoGoodsBrief> listGoods, BoutiqueAutoRule autoRule) {
+
+ List<Long> listQFId = new ArrayList<Long>();
+ for (TaoBaoGoodsBrief taoBaoGoodsBrief : listGoods) {
+ listQFId.add(taoBaoGoodsBrief.getId());
+ }
+
+ int startWeight = autoRule.getStartWeight();
+ int endWeight = autoRule.getEndWeight();
+ int goodsSource = autoRule.getGoodsSource();
+
+ // 鍔犲叆鍏ラ檺鏃舵姠璐�
+ List<QualityFlashSale> listFlashSale = new ArrayList<QualityFlashSale>();
+ // 闄愭椂鎶㈣喘鏇存柊锛�
+ List<QualityFlashSale> listFlashSaleUpdate = new ArrayList<QualityFlashSale>();
+
+
+ // 鏌ヨ宸插瓨鍦ㄦ樉绀洪檺鏃舵姠璐殑鍟嗗搧
+ List<QualityFlashSale> listQuery = qualityFlashSaleService.listQueryByQualityID(listQFId);
+
+ if (listQuery == null || listQuery.size() == 0) {
+ for (TaoBaoGoodsBrief taoBaoGoodsBrief: listGoods) {
+ listFlashSale.add(getNewQualityFlashSale(taoBaoGoodsBrief, startWeight, endWeight, goodsSource));
+ }
+ } else {
+
+ for (TaoBaoGoodsBrief taoBaoGoodsBrief: listGoods) {
+ boolean exist = false;
+ Long id = taoBaoGoodsBrief.getId();
+
+ for (QualityFlashSale flashSale : listQuery) {
+ TaoBaoGoodsBrief goodsBrief = flashSale.getTaoBaoGoodsBrief();
+ if (id.equals(goodsBrief.getId())) {
+ exist = true;
+ double weight = startWeight + (Math.random() * ((endWeight - startWeight) + 1));
+ flashSale.setWeight(weight);
+ flashSale.setUpdatetime(new Date());
+ listFlashSaleUpdate.add(flashSale);
+ listQuery.remove(flashSale);
+ break;
+ }
+ }
+
+ if (!exist) {
+ listFlashSale.add(getNewQualityFlashSale(taoBaoGoodsBrief, startWeight, endWeight, goodsSource));
+ }
+ }
+ }
+
+ // 鎻掑叆闄愭椂鎶㈣喘
+ if (listFlashSale.size() > 0) {
+ qualityFlashSaleService.insertBatch(listFlashSale);
+ }
+
+ // 鏇存柊闄愭椂鎶㈣喘
+ if (listFlashSaleUpdate.size() > 0) {
+ qualityFlashSaleService.updateBatchSelective(listFlashSaleUpdate);
+ }
+ }
+
+ /**
+ * 鍒涘缓鏂板璞ualityFlashSale
+ *
+ * @return
+ */
+ public QualityFlashSale getNewQualityFlashSale(TaoBaoGoodsBrief taoBaoGoodsBrief, int startWeight,
+ int endWeight, int goodsSource) {
+
+ QualityFlashSale flashSale = new QualityFlashSale();
+ flashSale.setTaoBaoGoodsBrief(taoBaoGoodsBrief);
+ flashSale.setCreatetime(new Date());
+ flashSale.setUpdatetime(new Date());
+
+ // 鏉冮噸璁剧疆锛氬ぇ娣樺浼樺厛灞曠ず
+ double weight = 0;
+ if (QualityFactory.SOURCE_TAOBAO_DATAOKE == goodsSource) {
+ weight = 10000 + (Math.random() * 2001);
+ } else {
+ weight = startWeight + (Math.random() * ((endWeight - startWeight) + 1));
+ }
+ flashSale.setWeight(weight);
+
+ return flashSale;
+ }
+
+
+ /**
+ * 鍟嗗搧鍔犲叆绮鹃�夊簱-new QualityFactory()
+ *
+ * @param goodsBrief
+ * @param autoRule
+ * @return
+ */
+ public QualityFactory getNewQualityFactory(TaoBaoGoodsBrief goodsBrief, BoutiqueAutoRule autoRule) {
+
+ /* 鍒嗙被 */
+ Long classID = null;
+
+ Integer rootCatId = goodsBrief.getRootCatId();
+ if (rootCatId != null) {
+ classID = taoBaoClassRelationMapper.getClassIdByTaoBaoCid(rootCatId.longValue());
+ }
+
+ // 娣诲姞鑷崇簿閫夊晢鍝佸簱
+ QualityFactory selectionGoods = new QualityFactory();
+
+ selectionGoods.setBoutiqueAutoRule(autoRule);
+ selectionGoods.setSourceCalss(autoRule.getSourceCalss());
+ selectionGoods.setSystemCid(classID);// 绫诲埆id
+ selectionGoods.setGoodsSource(autoRule.getGoodsSource());// 鏉ユ簮
+ selectionGoods.setTaoBaoGoodsBrief(goodsBrief);
+
+ selectionGoods.setCreateUser(autoRule.getAdminUser());
+ selectionGoods.setCreatetime(new Date());
+ selectionGoods.setUpdateUser(autoRule.getAdminUser());
+ selectionGoods.setUpdatetime(new Date());
+ selectionGoods.setEntryMode(QualityFactory.MODE_AUTO);// 绯荤粺绛涢��
+
+ // 闅忔満鏉冮噸
+ int resultWeight = autoRule.getStartWeight()
+ + (int) (Math.random() * ((autoRule.getEndWeight() - autoRule.getStartWeight()) + 1));
+
+ selectionGoods.setWeight(resultWeight);
+
+ return selectionGoods;
+
+ }
+
+
+
+ /**
+ * 鍒犻櫎鏈洿鏂扮殑鍟嗗搧
+ *
+ * @param systemCid
+ * @param formatDate
+ * @param source
+ */
+ @Override
+ public void deleteNotUpdateGoods(Long systemCid, String formatDate, int source) {
+ List<String> list = qualityFactoryMapper.getAuctionIdbyClassId(systemCid, source, formatDate);
+ if (list == null || list.size() == 0) {
+ return;
+ }
+
+ // 灏忎簬100鏉$洿鎺ュ垹闄�
+ if (list.size() <= 100) {
+ // 鍒犻櫎绮鹃�夊簱
+ deleteBatchByTaoBaoGoodsId(list);
+ // 鍒犻櫎鍟嗗搧
+ taoBaoGoodsBriefService.deleteBatchByGoodsId(list);
+ return;
+ }
+
+ // 澶т簬100闇�瑕佸垎娈靛垹闄�
+ int start = 0;
+ int end = 100;
+ int countRow = 100;
+
+ int count = list.size() / countRow;
+ if (list.size() % countRow > 0) {
+ count += 1;
+ }
+
+ for (int i = 0; i < count; i++) {
+ List<String> sublist = new ArrayList<>();
+ if (i == count - 1) {
+ sublist = list.subList(start, list.size());
+ deleteBatchByTaoBaoGoodsId(sublist);
+ taoBaoGoodsBriefService.deleteBatchByGoodsId(sublist);
+ break;
+ }
+ sublist = list.subList(start, end);
+ deleteBatchByTaoBaoGoodsId(sublist);
+ taoBaoGoodsBriefService.deleteBatchByGoodsId(sublist);
+ start += countRow;
+ end += countRow;
+ }
+ }
+
+
+
+ @Override
+ public List<QualityFactory> listQuery(long start, int count, String key, Long classId, Long labId) {
+ return qualityFactoryMapper.listQuery(start, count, key, classId, labId, null, null);
+ }
+
+ @Override
+ public long countQuery(String key, Integer goodsSource, Long classId, Long labId) {
+ return qualityFactoryMapper.countQuery(key, classId, labId, null, null);
+ }
+
+ @Override
+ public List<QualityFactory> listByMinSalesCountOrderByCreateTimeDesc(int salesCount, int page, int pageSize) {
+ return qualityFactoryMapper.listByMinSalesCountOrderByCreateTimeDesc(salesCount, (page - 1) * pageSize,
+ pageSize);
+ }
+
+}
--
Gitblit v1.8.0