From 30d8e227e8d823b6c38c3b9c90ac2df03b63befe Mon Sep 17 00:00:00 2001 From: admin <weikou2014> Date: 星期二, 25 二月 2025 16:41:22 +0800 Subject: [PATCH] 淘宝转链接口更新 --- fanli/src/main/java/com/yeshi/fanli/service/impl/lable/QualityFactoryServiceImpl.java | 1540 +++++++++++++++++++++++++++++----------------------------- 1 files changed, 767 insertions(+), 773 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 ac04637..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,773 +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.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(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(rollbackFor=Exception.class) - 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(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<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(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(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 - @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<Long> listAuctionId = new ArrayList<Long>(); - 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) { - 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; - } - } - - - - @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); - } - -} +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