refactor(wms): 优化库存管理逻辑
- 修改 XXL-JOB 配置,禁用执行器 - 优化库存变更逻辑,简化代码结构 -调整库存查询方式,按创建时间排序取第一个 - 移除不必要的条件判断,简化业务逻辑 - 增加库存变更日志的备注信息
This commit is contained in:
@@ -20,7 +20,7 @@ spring.boot.admin.client:
|
||||
--- # xxl-job 配置
|
||||
xxl.job:
|
||||
# 执行器开关
|
||||
enabled: true
|
||||
enabled: false
|
||||
# 调度中心地址:如调度中心集群部署存在多个地址则用逗号分隔。
|
||||
admin-addresses: http://localhost:9100/xxl-job-admin
|
||||
# 执行器通讯TOKEN:非空时启用
|
||||
|
||||
@@ -435,24 +435,24 @@ public class WmsStockIoServiceImpl implements IWmsStockIoService {
|
||||
*/
|
||||
private void changeStock(Long warehouseId, String itemType, Long itemId, String batchNo, BigDecimal quantity, boolean isAdd, String unit) {
|
||||
WmsStock stock = null;
|
||||
|
||||
|
||||
if (StringUtils.isNotBlank(batchNo)) {
|
||||
// 如果指定了批次号,按批次号查找
|
||||
// 如果指定了批次号,按批次号查找(应该是唯一的)
|
||||
stock = stockMapper.selectOne(Wrappers.<WmsStock>lambdaQuery()
|
||||
.eq(WmsStock::getWarehouseId, warehouseId)
|
||||
.eq(WmsStock::getItemType, itemType)
|
||||
.eq(WmsStock::getItemId, itemId)
|
||||
.eq(WmsStock::getBatchNo, batchNo)
|
||||
.last("limit 1"));
|
||||
.eq(WmsStock::getBatchNo, batchNo));
|
||||
} else {
|
||||
// 如果没有指定批次号,查找任意一个批次
|
||||
// 如果没有指定批次号,查找任意一个批次(按创建时间排序取第一个)
|
||||
stock = stockMapper.selectOne(Wrappers.<WmsStock>lambdaQuery()
|
||||
.eq(WmsStock::getWarehouseId, warehouseId)
|
||||
.eq(WmsStock::getItemType, itemType)
|
||||
.eq(WmsStock::getItemId, itemId)
|
||||
.orderByAsc(WmsStock::getCreateTime)
|
||||
.last("limit 1"));
|
||||
}
|
||||
|
||||
|
||||
if (stock == null) {
|
||||
if (!isAdd) {
|
||||
throw new RuntimeException("库存不足,无法出库/移库");
|
||||
@@ -466,23 +466,7 @@ public class WmsStockIoServiceImpl implements IWmsStockIoService {
|
||||
stock.setQuantity(quantity);
|
||||
stock.setUnit(unit);
|
||||
stockMapper.insert(stock);
|
||||
} else {
|
||||
// 如果指定了批次号且与现有库存批次号不同,需要新建记录
|
||||
if (StringUtils.isNotBlank(batchNo) && !batchNo.equals(stock.getBatchNo())) {
|
||||
if (!isAdd) {
|
||||
throw new RuntimeException("指定批次号库存不足,无法出库/移库");
|
||||
}
|
||||
// 新建不同批次号的库存记录
|
||||
WmsStock newStock = new WmsStock();
|
||||
newStock.setWarehouseId(warehouseId);
|
||||
newStock.setItemType(itemType);
|
||||
newStock.setItemId(itemId);
|
||||
newStock.setBatchNo(batchNo);
|
||||
newStock.setQuantity(quantity);
|
||||
newStock.setUnit(unit);
|
||||
stockMapper.insert(newStock);
|
||||
stock = newStock; // 更新stock引用用于日志记录
|
||||
} else {
|
||||
} else {
|
||||
// 更新现有库存
|
||||
BigDecimal newQty = isAdd ? stock.getQuantity().add(quantity) : stock.getQuantity().subtract(quantity);
|
||||
if (newQty.compareTo(BigDecimal.ZERO) < 0) {
|
||||
@@ -491,8 +475,6 @@ public class WmsStockIoServiceImpl implements IWmsStockIoService {
|
||||
stock.setQuantity(newQty);
|
||||
stockMapper.updateById(stock);
|
||||
}
|
||||
}
|
||||
|
||||
// 记录库存变更日志
|
||||
WmsStockLog log = new WmsStockLog();
|
||||
log.setWarehouseId(warehouseId);
|
||||
@@ -505,6 +487,7 @@ public class WmsStockIoServiceImpl implements IWmsStockIoService {
|
||||
// 变动类型(入库/出库等)
|
||||
log.setChangeType(isAdd ? "入库" : "出库");
|
||||
log.setChangeTime(new Date());
|
||||
log.setRemark(stock.getBatchNo());
|
||||
stockLogMapper.insert(log);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user