|
@@ -27,7 +27,10 @@ import org.springframework.stereotype.Service;
|
|
import org.springframework.transaction.annotation.Transactional;
|
|
import org.springframework.transaction.annotation.Transactional;
|
|
|
|
|
|
import java.math.BigDecimal;
|
|
import java.math.BigDecimal;
|
|
-import java.util.*;
|
|
+import java.util.ArrayList;
|
|
|
|
+import java.util.HashMap;
|
|
|
|
+import java.util.List;
|
|
|
|
+import java.util.Map;
|
|
import java.util.stream.Collectors;
|
|
import java.util.stream.Collectors;
|
|
|
|
|
|
|
|
|
|
@@ -75,17 +78,21 @@ public class StockServiceImpl extends ServiceImpl<StockMapper, Stock> implements
|
|
|
|
|
|
@Transactional(rollbackFor = Exception.class)
|
|
@Transactional(rollbackFor = Exception.class)
|
|
@Override
|
|
@Override
|
|
- public List<StockJournal> changeQuantity(StockChangeVo stockChangeVo) {
|
|
+ public List<StockJournal> changeQuantity(StockChangeDto stockChangeDto) {
|
|
- Assert.notEmpty(stockChangeVo.getChangeDetailsList(), "变更数量列表为空");
|
|
+
|
|
|
|
+ Assert.notEmpty(stockChangeDto.getChangeDetailsList(), "库存变更数量列表不能为空");
|
|
|
|
+
|
|
|
|
|
|
- Map<String, Stock> map = mergeChangeQuantity(stockChangeVo);
|
|
+ Map<String, Stock> map = mergeChangeQuantity(stockChangeDto);
|
|
if (map.size() == 0) {
|
|
if (map.size() == 0) {
|
|
return new ArrayList<>();
|
|
return new ArrayList<>();
|
|
}
|
|
}
|
|
|
|
+
|
|
|
|
|
|
- ChangeQuantity(map, stockChangeVo.getTypeEnum());
|
|
+ ChangeQuantity(map, stockChangeDto.getTypeEnum());
|
|
|
|
+
|
|
|
|
|
|
- return stockJournalService.addJournal(stockChangeVo);
|
|
+ return stockJournalService.addJournal(stockChangeDto);
|
|
}
|
|
}
|
|
|
|
|
|
@Override
|
|
@Override
|
|
@@ -164,13 +171,13 @@ public class StockServiceImpl extends ServiceImpl<StockMapper, Stock> implements
|
|
|
|
|
|
* 合并变更数量(如果同一种物品在出入库一个仓库,则合并数量)
|
|
* 合并变更数量(如果同一种物品在出入库一个仓库,则合并数量)
|
|
*/
|
|
*/
|
|
- private Map<String, Stock> mergeChangeQuantity(StockChangeVo stockChangeVo) {
|
|
+ private Map<String, Stock> mergeChangeQuantity(StockChangeDto stockChangeDto) {
|
|
|
|
|
|
- List<? extends StockChangeVo.ChangeDetails> changeDetailsList = stockChangeVo.getChangeDetailsList();
|
|
+ List<? extends StockChangeDto.ChangeDetails> changeDetailsList = stockChangeDto.getChangeDetailsList();
|
|
- Enum<?> typeEnum = stockChangeVo.getTypeEnum();
|
|
+ Enum<?> typeEnum = stockChangeDto.getTypeEnum();
|
|
|
|
|
|
Map<String, Stock> map = new HashMap<>();
|
|
Map<String, Stock> map = new HashMap<>();
|
|
- for (StockChangeVo.ChangeDetails changeDetails : changeDetailsList) {
|
|
+ for (StockChangeDto.ChangeDetails changeDetails : changeDetailsList) {
|
|
|
|
|
|
BigDecimal changeQuantity = changeDetails.getChangeQuantity();
|
|
BigDecimal changeQuantity = changeDetails.getChangeQuantity();
|
|
|
|
|
|
@@ -178,7 +185,7 @@ public class StockServiceImpl extends ServiceImpl<StockMapper, Stock> implements
|
|
continue;
|
|
continue;
|
|
}
|
|
}
|
|
|
|
|
|
- Long warehouseId = ObjectUtil.defaultIfNull(changeDetails.getWarehouseId(), stockChangeVo.getDefaultWarehouseId());
|
|
+ Long warehouseId = ObjectUtil.defaultIfNull(changeDetails.getWarehouseId(), stockChangeDto.getDefaultWarehouseId());
|
|
|
|
|
|
Long goodsId = changeDetails.getGoodsId();
|
|
Long goodsId = changeDetails.getGoodsId();
|
|
|
|
|
|
@@ -188,25 +195,21 @@ public class StockServiceImpl extends ServiceImpl<StockMapper, Stock> implements
|
|
stock = new Stock();
|
|
stock = new Stock();
|
|
stock.setWarehouseId(warehouseId);
|
|
stock.setWarehouseId(warehouseId);
|
|
stock.setGoodsId(goodsId);
|
|
stock.setGoodsId(goodsId);
|
|
-
|
|
+ stock.setQuantity(BigDecimal.ZERO);
|
|
- if (typeEnum.equals(InTypeEnum.PURCHASE) || typeEnum.equals(OutTypeEnum.UNQUALIFIED_QUALITY_INSPECTION)) {
|
|
+ stock.setFrozenQuantity(BigDecimal.ZERO);
|
|
- stock.setFrozenQuantity(changeQuantity);
|
|
+ stock.setWeightingAveragePrice(BigDecimal.ZERO);
|
|
- }
|
|
|
|
-
|
|
|
|
- else {
|
|
|
|
- stock.setQuantity(changeQuantity);
|
|
|
|
- }
|
|
|
|
map.put(key, stock);
|
|
map.put(key, stock);
|
|
- } else {
|
|
|
|
-
|
|
|
|
- if (typeEnum.equals(InTypeEnum.PURCHASE) || typeEnum.equals(OutTypeEnum.UNQUALIFIED_QUALITY_INSPECTION)) {
|
|
|
|
- stock.setFrozenQuantity(stock.getFrozenQuantity().add(changeQuantity));
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- else {
|
|
|
|
- stock.setQuantity(stock.getQuantity().add(changeQuantity));
|
|
|
|
- }
|
|
|
|
}
|
|
}
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ if (typeEnum.equals(InTypeEnum.PURCHASE) || typeEnum.equals(OutTypeEnum.UNQUALIFIED_QUALITY_INSPECTION)) {
|
|
|
|
+ stock.setFrozenQuantity(changeQuantity);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ else {
|
|
|
|
+ stock.setQuantity(changeQuantity);
|
|
|
|
+ }
|
|
|
|
+
|
|
}
|
|
}
|
|
return map;
|
|
return map;
|
|
}
|
|
}
|
|
@@ -215,29 +218,34 @@ public class StockServiceImpl extends ServiceImpl<StockMapper, Stock> implements
|
|
* 变更库存数量
|
|
* 变更库存数量
|
|
*/
|
|
*/
|
|
private synchronized void ChangeQuantity(Map<String, Stock> map, Enum<?> typeEnum) {
|
|
private synchronized void ChangeQuantity(Map<String, Stock> map, Enum<?> typeEnum) {
|
|
- Set<String> keySet = map.keySet();
|
|
+
|
|
|
|
+ List<Stock> list = list(Wrappers.<Stock>query().in("CONCAT(goods_id, warehouse_id)", map.keySet()));
|
|
|
|
|
|
- List<Stock> list = list(Wrappers.<Stock>query().in("CONCAT(goods_id, warehouse_id)", keySet));
|
|
+
|
|
for (Stock oldStock : list) {
|
|
for (Stock oldStock : list) {
|
|
Stock newStock = map.get(oldStock.getGoodsId().toString() + oldStock.getWarehouseId().toString());
|
|
Stock newStock = map.get(oldStock.getGoodsId().toString() + oldStock.getWarehouseId().toString());
|
|
-
|
|
|
|
newStock.setId(oldStock.getId());
|
|
newStock.setId(oldStock.getId());
|
|
|
|
+
|
|
|
|
|
|
if (typeEnum instanceof InTypeEnum) {
|
|
if (typeEnum instanceof InTypeEnum) {
|
|
-
|
|
+
|
|
if (typeEnum.equals(InTypeEnum.PURCHASE)) {
|
|
if (typeEnum.equals(InTypeEnum.PURCHASE)) {
|
|
newStock.setFrozenQuantity(oldStock.getFrozenQuantity().add(newStock.getFrozenQuantity()));
|
|
newStock.setFrozenQuantity(oldStock.getFrozenQuantity().add(newStock.getFrozenQuantity()));
|
|
}
|
|
}
|
|
-
|
|
+
|
|
else {
|
|
else {
|
|
newStock.setQuantity(oldStock.getQuantity().add(newStock.getQuantity()));
|
|
newStock.setQuantity(oldStock.getQuantity().add(newStock.getQuantity()));
|
|
}
|
|
}
|
|
- } else {
|
|
+ }
|
|
-
|
|
+
|
|
|
|
+ else {
|
|
|
|
+
|
|
if (typeEnum.equals(OutTypeEnum.UNQUALIFIED_QUALITY_INSPECTION)) {
|
|
if (typeEnum.equals(OutTypeEnum.UNQUALIFIED_QUALITY_INSPECTION)) {
|
|
- newStock.setFrozenQuantity(oldStock.getFrozenQuantity().subtract(newStock.getFrozenQuantity()));
|
|
+ BigDecimal subtract = oldStock.getFrozenQuantity().subtract(newStock.getFrozenQuantity());
|
|
|
|
+ Assert.eqTrue(subtract.compareTo(BigDecimal.ZERO) < 0, "产品锁定库存不足,出库失败");
|
|
|
|
+ newStock.setFrozenQuantity(subtract);
|
|
}
|
|
}
|
|
-
|
|
+
|
|
else {
|
|
else {
|
|
BigDecimal subtract = oldStock.getQuantity().subtract(newStock.getQuantity());
|
|
BigDecimal subtract = oldStock.getQuantity().subtract(newStock.getQuantity());
|
|
Assert.eqTrue(subtract.compareTo(BigDecimal.ZERO) < 0, "产品库存不足,出库失败");
|
|
Assert.eqTrue(subtract.compareTo(BigDecimal.ZERO) < 0, "产品库存不足,出库失败");
|
|
@@ -245,7 +253,7 @@ public class StockServiceImpl extends ServiceImpl<StockMapper, Stock> implements
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
- saveOrUpdateBatch(new ArrayList<>(map.values()));
|
|
+ saveOrUpdateBatch(map.values());
|
|
}
|
|
}
|
|
|
|
|
|
}
|
|
}
|