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