|
@@ -23,6 +23,7 @@ import org.springframework.beans.factory.annotation.Autowired;
|
|
|
import org.springframework.core.io.ClassPathResource;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
import org.springframework.transaction.annotation.Isolation;
|
|
|
+import org.springframework.transaction.annotation.Propagation;
|
|
|
import org.springframework.transaction.annotation.Transactional;
|
|
|
import org.springframework.util.CollectionUtils;
|
|
|
import org.springframework.web.multipart.MultipartFile;
|
|
@@ -464,55 +465,7 @@ public class GoodsServiceImpl extends BaseServiceImpl<Integer, Goods> implement
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
- @Transactional(rollbackFor = Exception.class, isolation = Isolation.READ_COMMITTED)
|
|
|
- public void getGoodsTest(List<Integer> goodsIds) {
|
|
|
- List<Goods> tempGoodsList = goodsDao.lockGoods(new ArrayList<>(goodsIds));
|
|
|
- Map<Integer, Goods> idTempGoodsMap = tempGoodsList.stream().collect(Collectors.toMap(Goods::getId, g -> g));
|
|
|
- List<GoodsProcurement> goodsProcurements = new ArrayList<>();
|
|
|
- for (Integer goodsId : goodsIds) {
|
|
|
- Goods tempGoods = goodsDao.get(goodsId);
|
|
|
- List<Goods> childGoods = new ArrayList<>();
|
|
|
- if(StringUtils.isBlank(tempGoods.getComplementGoodsIdList())){
|
|
|
- childGoods.add(tempGoods);
|
|
|
- }else{
|
|
|
- List<Integer> complementGoodsIds = Arrays.stream(tempGoods.getComplementGoodsIdList().split(",")).map(s -> Integer.valueOf(s)).collect(Collectors.toList());
|
|
|
- childGoods = goodsDao.lockGoods(complementGoodsIds);
|
|
|
- }
|
|
|
- for (Goods goods : childGoods) {
|
|
|
- GoodsProcurement goodsProcurement = null;
|
|
|
- if(StockType.INTERNAL.equals(goods.getStockType())||(StockType.ALL.equals(goods.getStockType())&&AccountType.INTERNAL.equals(AccountType.INTERNAL))){
|
|
|
- goodsProcurement = goodsProcurementDao.getWithStockSurplusProcurement(goods.getId());
|
|
|
- goods.setStockCount(new AtomicInteger(goods.getStockCount()).decrementAndGet());
|
|
|
- if(Objects.nonNull(goodsProcurement)){
|
|
|
- goodsProcurement.setStockSoldNum(new AtomicInteger(goodsProcurement.getStockSoldNum()).incrementAndGet());
|
|
|
- }
|
|
|
- }else if(StockType.EXTERNAL.equals(goods.getStockType())||(StockType.ALL.equals(goods.getStockType())&&AccountType.EXTERNAL.equals(AccountType.EXTERNAL))){
|
|
|
- goodsProcurement = goodsProcurementDao.getWithTaxStockSurplusProcurement(goods.getId());
|
|
|
- goods.setTaxStockCount(new AtomicInteger(goods.getTaxStockCount()).decrementAndGet());
|
|
|
- if(Objects.nonNull(goodsProcurement)){
|
|
|
- goodsProcurement.setTaxStockSoldNum(new AtomicInteger(goodsProcurement.getTaxStockSoldNum()).incrementAndGet());
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- goods.setSellCount(new AtomicInteger(goods.getSellCount()).incrementAndGet());
|
|
|
-
|
|
|
- goodsDao.update(goods);
|
|
|
- if(Objects.nonNull(goodsProcurement)){
|
|
|
- goodsProcurementDao.update(goodsProcurement);
|
|
|
- }else{
|
|
|
- goodsProcurement = new GoodsProcurement(goods.getId());
|
|
|
- }
|
|
|
- if(StringUtils.isNotBlank(tempGoods.getComplementGoodsIdList())){
|
|
|
- goodsProcurement.setParentGoodsId(tempGoods.getId());
|
|
|
- }
|
|
|
-
|
|
|
- goodsProcurements.add(goodsProcurement);
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- @Override
|
|
|
- @Transactional(rollbackFor = Exception.class, isolation = Isolation.READ_COMMITTED)
|
|
|
+ @Transactional(rollbackFor = Exception.class, propagation = Propagation.REQUIRES_NEW, isolation = Isolation.READ_COMMITTED)
|
|
|
public List<SellOrder> subtractStock(List<Integer> goodsIds, AccountType accountType) {
|
|
|
if(CollectionUtils.isEmpty(goodsIds)){
|
|
|
return Collections.emptyList();
|
|
@@ -522,7 +475,7 @@ public class GoodsServiceImpl extends BaseServiceImpl<Integer, Goods> implement
|
|
|
Map<Integer, Goods> idTempGoodsMap = tempGoodsList.stream().collect(Collectors.toMap(Goods::getId, g -> g));
|
|
|
List<GoodsProcurement> goodsProcurements = new ArrayList<>();
|
|
|
for (Integer goodsId : goodsIds) {
|
|
|
- Goods tempGoods = idTempGoodsMap.get(goodsId);
|
|
|
+ Goods tempGoods = goodsDao.get(goodsId);
|
|
|
List<Goods> childGoods = new ArrayList<>();
|
|
|
if(StringUtils.isBlank(tempGoods.getComplementGoodsIdList())){
|
|
|
childGoods.add(tempGoods);
|