|  | @@ -314,77 +314,77 @@ public class GoodsServiceImpl extends BaseServiceImpl<Integer, Goods>  implement
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  		List<Goods> tempGoodsList = goodsDao.lockGoods(new ArrayList<>(goodsIds));
 | 
	
		
			
				|  |  |  		Map<Integer, Goods> idTempGoodsMap = tempGoodsList.stream().collect(Collectors.toMap(Goods::getId, g -> g));
 | 
	
		
			
				|  |  | -		List<Integer> singleGoodsIds = new ArrayList<>();
 | 
	
		
			
				|  |  | +		List<GoodsProcurement> goodsBatchNoDtos = new ArrayList<>();
 | 
	
		
			
				|  |  |  		for (Integer goodsId : goodsIds) {
 | 
	
		
			
				|  |  |  			Goods tempGoods = idTempGoodsMap.get(goodsId);
 | 
	
		
			
				|  |  | +			List<Goods> childGoods = new ArrayList<>();
 | 
	
		
			
				|  |  |  			if(StringUtils.isBlank(tempGoods.getComplementGoodsIdList())){
 | 
	
		
			
				|  |  | -				singleGoodsIds.add(tempGoods.getId());
 | 
	
		
			
				|  |  | +				childGoods.add(tempGoods);
 | 
	
		
			
				|  |  |  			}else{
 | 
	
		
			
				|  |  |  				List<Integer> complementGoodsIds = Arrays.stream(tempGoods.getComplementGoodsIdList().split(",")).map(s -> Integer.valueOf(s)).collect(Collectors.toList());
 | 
	
		
			
				|  |  | -				singleGoodsIds.addAll(complementGoodsIds);
 | 
	
		
			
				|  |  | +				childGoods = goodsDao.getGoodies(complementGoodsIds);
 | 
	
		
			
				|  |  |  			}
 | 
	
		
			
				|  |  |  			tempGoods.setSellCount((int) (tempGoods.getSellCount() + goodsSellNumMap.get(tempGoods.getId())));
 | 
	
		
			
				|  |  | -//			goodsDao.update(tempGoods);
 | 
	
		
			
				|  |  | -		}
 | 
	
		
			
				|  |  | -		goodsDao.batchUpdate(tempGoodsList);
 | 
	
		
			
				|  |  | -		List<Goods> singleGoodsList = goodsDao.getGoodies(singleGoodsIds);
 | 
	
		
			
				|  |  | -		Map<Integer, Goods> idSingleGoodsMap = singleGoodsList.stream().collect(Collectors.toMap(Goods::getId, g -> g));
 | 
	
		
			
				|  |  | -		List<GoodsProcurement> goodsBatchNoDtos = new ArrayList<>();
 | 
	
		
			
				|  |  | -		for (Integer singleGoodsId : singleGoodsIds) {
 | 
	
		
			
				|  |  | -			Goods goods = idSingleGoodsMap.get(singleGoodsId);
 | 
	
		
			
				|  |  | -			GoodsProcurement goodsProcurement = null;
 | 
	
		
			
				|  |  | -			if(StockType.INTERNAL.equals(goods.getStockType())||(StockType.ALL.equals(goods.getStockType())&&AccountType.INTERNAL.equals(accountType))){
 | 
	
		
			
				|  |  | -				goodsProcurement = goodsProcurementDao.getWithStockSurplusProcurement(goods.getId());
 | 
	
		
			
				|  |  | -				goods.setStockCount(new AtomicInteger(goods.getStockCount()).decrementAndGet());
 | 
	
		
			
				|  |  | -				if(Objects.nonNull(goodsProcurement)){
 | 
	
		
			
				|  |  | -					goodsProcurement.setStockCount(new AtomicInteger(goodsProcurement.getStockCount()).decrementAndGet());
 | 
	
		
			
				|  |  | -					goodsProcurement.setStockSoldNum(new AtomicInteger(goodsProcurement.getStockSoldNum()).incrementAndGet());
 | 
	
		
			
				|  |  | +			for (Goods goods : childGoods) {
 | 
	
		
			
				|  |  | +				GoodsProcurement goodsProcurement = null;
 | 
	
		
			
				|  |  | +				if(StockType.INTERNAL.equals(goods.getStockType())||(StockType.ALL.equals(goods.getStockType())&&AccountType.INTERNAL.equals(accountType))){
 | 
	
		
			
				|  |  | +					goodsProcurement = goodsProcurementDao.getWithStockSurplusProcurement(goods.getId());
 | 
	
		
			
				|  |  | +					goods.setStockCount(new AtomicInteger(goods.getStockCount()).decrementAndGet());
 | 
	
		
			
				|  |  | +					if(Objects.nonNull(goodsProcurement)){
 | 
	
		
			
				|  |  | +						goodsProcurement.setStockCount(new AtomicInteger(goodsProcurement.getStockCount()).decrementAndGet());
 | 
	
		
			
				|  |  | +						goodsProcurement.setStockSoldNum(new AtomicInteger(goodsProcurement.getStockSoldNum()).incrementAndGet());
 | 
	
		
			
				|  |  | +					}
 | 
	
		
			
				|  |  | +				}else if(StockType.EXTERNAL.equals(goods.getStockType())||(StockType.ALL.equals(goods.getStockType())&&AccountType.EXTERNAL.equals(accountType))){
 | 
	
		
			
				|  |  | +					goodsProcurement = goodsProcurementDao.getWithTaxStockSurplusProcurement(goods.getId());
 | 
	
		
			
				|  |  | +					goods.setTaxStockCount(new AtomicInteger(goods.getTaxStockCount()).decrementAndGet());
 | 
	
		
			
				|  |  | +					if(Objects.nonNull(goodsProcurement)){
 | 
	
		
			
				|  |  | +						goodsProcurement.setTaxStockCount(new AtomicInteger(goodsProcurement.getTaxStockCount()).decrementAndGet());
 | 
	
		
			
				|  |  | +						goodsProcurement.setTaxStockSoldNum(new AtomicInteger(goodsProcurement.getTaxStockSoldNum()).incrementAndGet());
 | 
	
		
			
				|  |  | +					}
 | 
	
		
			
				|  |  |  				}
 | 
	
		
			
				|  |  | -			}else if(StockType.EXTERNAL.equals(goods.getStockType())||(StockType.ALL.equals(goods.getStockType())&&AccountType.EXTERNAL.equals(accountType))){
 | 
	
		
			
				|  |  | -				goodsProcurement = goodsProcurementDao.getWithTaxStockSurplusProcurement(goods.getId());
 | 
	
		
			
				|  |  | -				goods.setTaxStockCount(new AtomicInteger(goods.getTaxStockCount()).decrementAndGet());
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +				goodsDao.update(goods);
 | 
	
		
			
				|  |  |  				if(Objects.nonNull(goodsProcurement)){
 | 
	
		
			
				|  |  | -					goodsProcurement.setTaxStockCount(new AtomicInteger(goodsProcurement.getTaxStockCount()).decrementAndGet());
 | 
	
		
			
				|  |  | -					goodsProcurement.setTaxStockSoldNum(new AtomicInteger(goodsProcurement.getTaxStockSoldNum()).incrementAndGet());
 | 
	
		
			
				|  |  | +					goodsProcurementDao.update(goodsProcurement);
 | 
	
		
			
				|  |  | +				}else{
 | 
	
		
			
				|  |  | +					goodsProcurement = new GoodsProcurement(goods.getId());
 | 
	
		
			
				|  |  | +				}
 | 
	
		
			
				|  |  | +				if(StringUtils.isNotBlank(tempGoods.getComplementGoodsIdList())){
 | 
	
		
			
				|  |  | +					goodsProcurement.setParentGoodsId(tempGoods.getId());
 | 
	
		
			
				|  |  |  				}
 | 
	
		
			
				|  |  | -			}
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -			goodsDao.update(goods);
 | 
	
		
			
				|  |  | -			if(Objects.nonNull(goodsProcurement)){
 | 
	
		
			
				|  |  |  				goodsBatchNoDtos.add(goodsProcurement);
 | 
	
		
			
				|  |  | -				goodsProcurementDao.update(goodsProcurement);
 | 
	
		
			
				|  |  | -			}else{
 | 
	
		
			
				|  |  | -				goodsBatchNoDtos.add(new GoodsProcurement(goods.getId()));
 | 
	
		
			
				|  |  |  			}
 | 
	
		
			
				|  |  | +//			goodsDao.update(tempGoods);
 | 
	
		
			
				|  |  |  		}
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | +		goodsDao.batchUpdate(tempGoodsList);
 | 
	
		
			
				|  |  |  		return goodsBatchNoDtos;
 | 
	
		
			
				|  |  |  	}
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  	@Override
 | 
	
		
			
				|  |  |  	@Transactional(rollbackFor = Exception.class, isolation = Isolation.READ_COMMITTED)
 | 
	
		
			
				|  |  | -	public void increaseStock(List<GoodsBatchNoDto> goodsBatchNoDtos, List<Integer> goodsIdsList, AccountType accountType) {
 | 
	
		
			
				|  |  | -		Set<Integer> goodsIds = goodsBatchNoDtos.stream().map(GoodsBatchNoDto::getGoodsId).collect(Collectors.toSet());
 | 
	
		
			
				|  |  | -		List<Goods> goodsList = goodsDao.getGoodies(new ArrayList<>(goodsIds));
 | 
	
		
			
				|  |  | -		Map<Integer, Goods> idGoodsMap = goodsList.stream().collect(Collectors.toMap(Goods::getId, g -> g));
 | 
	
		
			
				|  |  | -		for (GoodsBatchNoDto goodsBatchNoDto : goodsBatchNoDtos) {
 | 
	
		
			
				|  |  | -			Goods goods = idGoodsMap.get(goodsBatchNoDto.getGoodsId());
 | 
	
		
			
				|  |  | -			GoodsProcurement goodsProcurement = goodsProcurementDao.getWithGoodsAndBatchNo(goods.getId(), goodsBatchNoDto.getBatchNo());
 | 
	
		
			
				|  |  | -			if(StockType.INTERNAL.equals(goods.getStockType())||(StockType.ALL.equals(goods.getStockType())&&AccountType.INTERNAL.equals(accountType))){
 | 
	
		
			
				|  |  | -				goods.setStockCount(new AtomicInteger(goods.getStockCount()).incrementAndGet());
 | 
	
		
			
				|  |  | -				if(Objects.nonNull(goodsProcurement)){
 | 
	
		
			
				|  |  | -					goodsProcurement.setStockCount(new AtomicInteger(goodsProcurement.getStockCount()).incrementAndGet());
 | 
	
		
			
				|  |  | -					goodsProcurement.setStockSoldNum(new AtomicInteger(goodsProcurement.getStockSoldNum()).decrementAndGet());
 | 
	
		
			
				|  |  | -				}
 | 
	
		
			
				|  |  | -			}else if(StockType.EXTERNAL.equals(goods.getStockType())||(StockType.ALL.equals(goods.getStockType())&&AccountType.EXTERNAL.equals(accountType))){
 | 
	
		
			
				|  |  | -				goods.setTaxStockCount(new AtomicInteger(goods.getTaxStockCount()).incrementAndGet());
 | 
	
		
			
				|  |  | -				if(Objects.nonNull(goodsProcurement)){
 | 
	
		
			
				|  |  | -					goodsProcurement.setTaxStockCount(new AtomicInteger(goodsProcurement.getTaxStockCount()).incrementAndGet());
 | 
	
		
			
				|  |  | -					goodsProcurement.setTaxStockSoldNum(new AtomicInteger(goodsProcurement.getTaxStockSoldNum()).decrementAndGet());
 | 
	
		
			
				|  |  | -				}
 | 
	
		
			
				|  |  | -			}
 | 
	
		
			
				|  |  | -			goodsDao.update(goods);
 | 
	
		
			
				|  |  | -			goodsProcurementDao.update(goodsProcurement);
 | 
	
		
			
				|  |  | -		}
 | 
	
		
			
				|  |  | +	public void increaseStock(List<Integer> sellOrderIds, AccountType accountType) {
 | 
	
		
			
				|  |  | +//		Set<Integer> goodsIds = goodsBatchNoDtos.stream().map(GoodsBatchNoDto::getGoodsId).collect(Collectors.toSet());
 | 
	
		
			
				|  |  | +//		List<Goods> goodsList = goodsDao.lockGoods(new ArrayList<>(goodsIds));
 | 
	
		
			
				|  |  | +//		Map<Integer, Goods> idGoodsMap = goodsList.stream().collect(Collectors.toMap(Goods::getId, g -> g));
 | 
	
		
			
				|  |  | +//		for (GoodsBatchNoDto goodsBatchNoDto : goodsBatchNoDtos) {
 | 
	
		
			
				|  |  | +//			Goods goods = idGoodsMap.get(goodsBatchNoDto.getGoodsId());
 | 
	
		
			
				|  |  | +//			GoodsProcurement goodsProcurement = goodsProcurementDao.getWithGoodsAndBatchNo(goods.getId(), goodsBatchNoDto.getBatchNo());
 | 
	
		
			
				|  |  | +//			if(StockType.INTERNAL.equals(goods.getStockType())||(StockType.ALL.equals(goods.getStockType())&&AccountType.INTERNAL.equals(accountType))){
 | 
	
		
			
				|  |  | +//				goods.setStockCount(new AtomicInteger(goods.getStockCount()).incrementAndGet());
 | 
	
		
			
				|  |  | +//				if(Objects.nonNull(goodsProcurement)){
 | 
	
		
			
				|  |  | +//					goodsProcurement.setStockCount(new AtomicInteger(goodsProcurement.getStockCount()).incrementAndGet());
 | 
	
		
			
				|  |  | +//					goodsProcurement.setStockSoldNum(new AtomicInteger(goodsProcurement.getStockSoldNum()).decrementAndGet());
 | 
	
		
			
				|  |  | +//				}
 | 
	
		
			
				|  |  | +//			}else if(StockType.EXTERNAL.equals(goods.getStockType())||(StockType.ALL.equals(goods.getStockType())&&AccountType.EXTERNAL.equals(accountType))){
 | 
	
		
			
				|  |  | +//				goods.setTaxStockCount(new AtomicInteger(goods.getTaxStockCount()).incrementAndGet());
 | 
	
		
			
				|  |  | +//				if(Objects.nonNull(goodsProcurement)){
 | 
	
		
			
				|  |  | +//					goodsProcurement.setTaxStockCount(new AtomicInteger(goodsProcurement.getTaxStockCount()).incrementAndGet());
 | 
	
		
			
				|  |  | +//					goodsProcurement.setTaxStockSoldNum(new AtomicInteger(goodsProcurement.getTaxStockSoldNum()).decrementAndGet());
 | 
	
		
			
				|  |  | +//				}
 | 
	
		
			
				|  |  | +//			}
 | 
	
		
			
				|  |  | +//			goodsDao.update(goods);
 | 
	
		
			
				|  |  | +//			goodsProcurementDao.update(goodsProcurement);
 | 
	
		
			
				|  |  | +//		}
 | 
	
		
			
				|  |  |  	}
 | 
	
		
			
				|  |  |  }
 |