refactor(wms): 优化库存管理逻辑

- 修改 XXL-JOB 配置,禁用执行器
- 优化库存变更逻辑,简化代码结构
-调整库存查询方式,按创建时间排序取第一个
- 移除不必要的条件判断,简化业务逻辑
- 增加库存变更日志的备注信息
This commit is contained in:
2025-09-12 15:53:34 +08:00
parent 510a8efb91
commit 4e7af79f63
2 changed files with 9 additions and 26 deletions

View File

@@ -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非空时启用

View File

@@ -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);
}
}