|
@@ -9,6 +9,7 @@ import com.ym.mec.biz.dal.dao.GoodsProcurementDao;
|
|
|
import com.ym.mec.biz.dal.dao.SysConfigDao;
|
|
|
import com.ym.mec.biz.dal.dao.TeacherDao;
|
|
|
import com.ym.mec.biz.dal.dto.BasicUserDto;
|
|
|
+import com.ym.mec.biz.dal.dto.GoodsBatchNoDto;
|
|
|
import com.ym.mec.biz.dal.dto.GoodsSellDto;
|
|
|
import com.ym.mec.biz.dal.entity.Goods;
|
|
|
import com.ym.mec.biz.dal.entity.GoodsProcurement;
|
|
@@ -77,7 +78,8 @@ public class GoodsServiceImpl extends BaseServiceImpl<Integer, Goods> implement
|
|
|
existsGood.setTaxStockCount(existsGood.getTaxStockCount()+existsGood.getTaxStockCount());
|
|
|
goodsDao.update(existsGood);
|
|
|
}else{
|
|
|
- goodsDao.insert(existsGood);
|
|
|
+ goodsDao.insert(goods);
|
|
|
+ existsGood=goods;
|
|
|
}
|
|
|
|
|
|
String batchNo = idGeneratorService.generatorId("payment") + "";
|
|
@@ -269,7 +271,7 @@ public class GoodsServiceImpl extends BaseServiceImpl<Integer, Goods> implement
|
|
|
|
|
|
@Override
|
|
|
@Transactional(rollbackFor = Exception.class, isolation = Isolation.READ_COMMITTED)
|
|
|
- public List<Goods> subtractStock(List<Integer> goodsIds, AccountType accountType) {
|
|
|
+ public List<GoodsBatchNoDto> subtractStock(List<Integer> goodsIds, AccountType accountType) {
|
|
|
if(CollectionUtils.isEmpty(goodsIds)){
|
|
|
return Collections.emptyList();
|
|
|
}
|
|
@@ -277,7 +279,6 @@ public class GoodsServiceImpl extends BaseServiceImpl<Integer, Goods> implement
|
|
|
Map<Integer, Long> goodsSellNumMap = goodsIds.stream().collect(Collectors.groupingBy(s -> s, Collectors.counting()));
|
|
|
|
|
|
List<Goods> tempGoodsList = goodsDao.lockGoods(new ArrayList<>(goodsIds));
|
|
|
- Map<Integer, Integer> singleGoodsSellNumMap = new HashMap<>();
|
|
|
Map<Integer, Goods> idTempGoodsMap = tempGoodsList.stream().collect(Collectors.toMap(Goods::getId, g -> g));
|
|
|
List<Integer> singleGoodsIds = new ArrayList<>();
|
|
|
for (Integer goodsId : goodsIds) {
|
|
@@ -288,30 +289,67 @@ public class GoodsServiceImpl extends BaseServiceImpl<Integer, Goods> implement
|
|
|
List<Integer> complementGoodsIds = Arrays.stream(tempGoods.getComplementGoodsIdList().split(",")).map(s -> Integer.valueOf(s)).collect(Collectors.toList());
|
|
|
singleGoodsIds.addAll(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<GoodsBatchNoDto> 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());
|
|
|
- goodsProcurement.setStockCount(new AtomicInteger(goodsProcurement.getStockCount()).decrementAndGet());
|
|
|
- goodsProcurement.setStockSoldNum(new AtomicInteger(goodsProcurement.getStockSoldNum()).incrementAndGet());
|
|
|
+ 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());
|
|
|
- goodsProcurement.setTaxStockCount(new AtomicInteger(goodsProcurement.getTaxStockCount()).decrementAndGet());
|
|
|
- goodsProcurement.setTaxStockSoldNum(new AtomicInteger(goodsProcurement.getTaxStockSoldNum()).incrementAndGet());
|
|
|
+ if(Objects.nonNull(goodsProcurement)){
|
|
|
+ goodsProcurement.setTaxStockCount(new AtomicInteger(goodsProcurement.getTaxStockCount()).decrementAndGet());
|
|
|
+ goodsProcurement.setTaxStockSoldNum(new AtomicInteger(goodsProcurement.getTaxStockSoldNum()).incrementAndGet());
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ goodsDao.update(goods);
|
|
|
+ if(Objects.nonNull(goodsProcurement)){
|
|
|
+ goodsBatchNoDtos.add(new GoodsBatchNoDto(goods.getId(), goodsProcurement.getBatchNo()));
|
|
|
+ goodsProcurementDao.update(goodsProcurement);
|
|
|
+ }else{
|
|
|
+ goodsBatchNoDtos.add(new GoodsBatchNoDto(goods.getId(), goodsProcurement.getBatchNo()));
|
|
|
}
|
|
|
- if(Objects.isNull(goodsProcurement)){
|
|
|
- throw new BizException("商品类型不明");
|
|
|
+ }
|
|
|
+
|
|
|
+ return goodsBatchNoDtos;
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void increaseStock(List<GoodsBatchNoDto> goodsBatchNoDtos, 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);
|
|
|
}
|
|
|
-
|
|
|
- return null;
|
|
|
}
|
|
|
}
|