From 5ae75d46c07cf9b4294b1c4d828f3c212b7bbe9d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9B=B9=E9=B9=8F=E9=A3=9E?= Date: Mon, 23 Mar 2026 21:17:50 +0800 Subject: [PATCH 1/2] =?UTF-8?q?fix(inventory):=20=E8=A7=A3=E5=86=B3?= =?UTF-8?q?=E5=BA=93=E5=AD=98=E4=B8=8D=E8=B6=B3=E6=97=B6=E7=9A=84=E9=94=99?= =?UTF-8?q?=E8=AF=AF=E5=A4=84=E7=90=86=E5=92=8C=E6=9F=A5=E8=AF=A2=E9=80=BB?= =?UTF-8?q?=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 在OutAssistanceController中添加库存不足验证和错误提示 - 在OutCostCenterController中添加库存不足验证和错误提示 - 在OutProduceController中添加库存不足验证和错误提示 - 在TransferCompanyController中添加库存不足验证和错误提示 - 在TransferFactoryController中添加库存不足验证和错误提示 - 在WmsReturnRequestServiceImpl中添加库存不足验证和错误提示 - 修复WmsWarehouseMapper.xml中的仓库名称查询SQL逻辑 - 统一库存锁定列表的获取和验证流程 --- .../wms/admin/controller/OutAssistanceController.java | 4 +++- .../wms/admin/controller/OutCostCenterController.java | 4 +++- .../nflg/wms/admin/controller/OutProduceController.java | 8 ++++++-- .../wms/admin/controller/TransferCompanyController.java | 4 +++- .../wms/admin/controller/TransferFactoryController.java | 4 +++- .../service/impl/WmsReturnRequestServiceImpl.java | 5 ++++- .../src/main/resources/mapper/WmsWarehouseMapper.xml | 7 ++++--- 7 files changed, 26 insertions(+), 10 deletions(-) diff --git a/nflg-wms-admin/src/main/java/com/nflg/wms/admin/controller/OutAssistanceController.java b/nflg-wms-admin/src/main/java/com/nflg/wms/admin/controller/OutAssistanceController.java index 0b5f027e..b1e8a9df 100644 --- a/nflg-wms-admin/src/main/java/com/nflg/wms/admin/controller/OutAssistanceController.java +++ b/nflg-wms-admin/src/main/java/com/nflg/wms/admin/controller/OutAssistanceController.java @@ -344,7 +344,9 @@ public class OutAssistanceController extends BaseController { // 等待5秒获取锁,10秒后自动释放 if (lock.tryLock(5, 10, TimeUnit.SECONDS)) { if (inventoryService.getNumOne(info.getFactoryNo(), info.getWarehouseNo(), info.getMaterialNo()).compareTo(lockNum) < 0) { - lockVOS.addAll(inventoryService.getLockList(info.getFactoryNo(), info.getWarehouseNo(), info.getMaterialNo())); + List itemLocks = inventoryService.getLockList(info.getFactoryNo(), info.getWarehouseNo(), info.getMaterialNo()); + VUtil.trueThrowBusinessError(CollectionUtil.isEmpty(itemLocks)).throwMessage("库存不足:" + info.getMaterialNo()); + lockVOS.addAll(itemLocks); } } else { throw new NflgException(STATE.BusinessError, "获取锁失败"); diff --git a/nflg-wms-admin/src/main/java/com/nflg/wms/admin/controller/OutCostCenterController.java b/nflg-wms-admin/src/main/java/com/nflg/wms/admin/controller/OutCostCenterController.java index 9de4ca0d..0ce53a17 100644 --- a/nflg-wms-admin/src/main/java/com/nflg/wms/admin/controller/OutCostCenterController.java +++ b/nflg-wms-admin/src/main/java/com/nflg/wms/admin/controller/OutCostCenterController.java @@ -338,7 +338,9 @@ public class OutCostCenterController extends BaseController { // 等待5秒获取锁,10秒后自动释放 if (lock.tryLock(5, 10, TimeUnit.SECONDS)) { if (inventoryService.getNumOne(info.getFactoryNo(), info.getWarehouseNo(), info.getMaterialNo()).compareTo(lockNum) < 0) { - lockVOS.addAll(inventoryService.getLockList(info.getFactoryNo(), info.getWarehouseNo(), info.getMaterialNo())); + List itemLocks = inventoryService.getLockList(info.getFactoryNo(), info.getWarehouseNo(), info.getMaterialNo()); + VUtil.trueThrowBusinessError(CollectionUtil.isEmpty(itemLocks)).throwMessage("库存不足:" + info.getMaterialNo()); + lockVOS.addAll(itemLocks); } } else { throw new NflgException(STATE.BusinessError, "获取锁失败"); diff --git a/nflg-wms-admin/src/main/java/com/nflg/wms/admin/controller/OutProduceController.java b/nflg-wms-admin/src/main/java/com/nflg/wms/admin/controller/OutProduceController.java index 3c625444..2a604f8b 100644 --- a/nflg-wms-admin/src/main/java/com/nflg/wms/admin/controller/OutProduceController.java +++ b/nflg-wms-admin/src/main/java/com/nflg/wms/admin/controller/OutProduceController.java @@ -166,7 +166,9 @@ public class OutProduceController extends BaseController { if (inventoryService.getNumOne(item.getDwerk(), item.getLgort2(), item.getMatnr()) .compareTo(item.getSqsl()) < 0 ) { - lockVOS.addAll(inventoryService.getLockList(item.getDwerk(), item.getLgort2(), item.getMatnr())); + List itemLocks = inventoryService.getLockList(item.getDwerk(), item.getLgort2(), item.getMatnr()); + VUtil.trueThrowBusinessError(CollectionUtil.isEmpty(itemLocks)).throwMessage("库存不足:" + item.getMatnr()); + lockVOS.addAll(itemLocks); } else { WmsOutProduceItem data = Convert.convert(WmsOutProduceItem.class, item); data.setLockNum(item.getSqsl()); @@ -225,7 +227,9 @@ public class OutProduceController extends BaseController { if (inventoryService.getNumOne(item.getDwerk(), item.getLgort2(), item.getMatnr()) .compareTo(item.getSqsl()) < 0 ) { - lockVOS.addAll(inventoryService.getLockList(item.getDwerk(), item.getLgort2(), item.getMatnr())); + List itemLocks = inventoryService.getLockList(item.getDwerk(), item.getLgort2(), item.getMatnr()); + VUtil.trueThrowBusinessError(CollectionUtil.isEmpty(itemLocks)).throwMessage("库存不足:" + item.getMatnr()); + lockVOS.addAll(itemLocks); } else { WmsOutProduceItem data = Convert.convert(WmsOutProduceItem.class, item); data.setLockNum(data.getSqsl()); diff --git a/nflg-wms-admin/src/main/java/com/nflg/wms/admin/controller/TransferCompanyController.java b/nflg-wms-admin/src/main/java/com/nflg/wms/admin/controller/TransferCompanyController.java index 1b491545..266431a0 100644 --- a/nflg-wms-admin/src/main/java/com/nflg/wms/admin/controller/TransferCompanyController.java +++ b/nflg-wms-admin/src/main/java/com/nflg/wms/admin/controller/TransferCompanyController.java @@ -144,7 +144,9 @@ public class TransferCompanyController extends BaseController { if (inventoryService.getNumOne(item.getReswk(), item.getLgfsb1(), item.getMatnr()) .compareTo(item.getNum()) < 0 ) { - lockVOS.addAll(inventoryService.getLockList(item.getReswk(), item.getLgfsb1(), item.getMatnr())); + List itemLocks = inventoryService.getLockList(item.getReswk(), item.getLgfsb1(), item.getMatnr()); + VUtil.trueThrowBusinessError(CollectionUtil.isEmpty(itemLocks)).throwMessage("库存不足:" + item.getMatnr()); + lockVOS.addAll(itemLocks); } else { WmsTransferCompanyItem data = Convert.convert(WmsTransferCompanyItem.class, item); data.setOrderId(order.getId()); diff --git a/nflg-wms-admin/src/main/java/com/nflg/wms/admin/controller/TransferFactoryController.java b/nflg-wms-admin/src/main/java/com/nflg/wms/admin/controller/TransferFactoryController.java index 8923a3d7..04b94928 100644 --- a/nflg-wms-admin/src/main/java/com/nflg/wms/admin/controller/TransferFactoryController.java +++ b/nflg-wms-admin/src/main/java/com/nflg/wms/admin/controller/TransferFactoryController.java @@ -142,7 +142,9 @@ public class TransferFactoryController extends BaseController { if (inventoryService.getNumOne(item.getWerks(), item.getLgort(), item.getMatnr()) .compareTo(item.getNum()) < 0 ) { - lockVOS.addAll(inventoryService.getLockList(item.getWerks(), item.getLgort(), item.getMatnr())); + List itemLocks = inventoryService.getLockList(item.getWerks(), item.getLgort(), item.getMatnr()); + VUtil.trueThrowBusinessError(CollectionUtil.isEmpty(itemLocks)).throwMessage("库存不足:" + item.getMatnr()); + lockVOS.addAll(itemLocks); } else { WmsTransferFactoryItem data = Convert.convert(WmsTransferFactoryItem.class, item); data.setOrderId(order.getId()); diff --git a/nflg-wms-repository/src/main/java/com/nflg/wms/repository/service/impl/WmsReturnRequestServiceImpl.java b/nflg-wms-repository/src/main/java/com/nflg/wms/repository/service/impl/WmsReturnRequestServiceImpl.java index 67afdb20..5aa4d99b 100644 --- a/nflg-wms-repository/src/main/java/com/nflg/wms/repository/service/impl/WmsReturnRequestServiceImpl.java +++ b/nflg-wms-repository/src/main/java/com/nflg/wms/repository/service/impl/WmsReturnRequestServiceImpl.java @@ -17,6 +17,7 @@ import com.nflg.wms.common.pojo.qo.GoodsReceiptSearchQO; import com.nflg.wms.common.pojo.vo.ApplyReturnRequestVO; import com.nflg.wms.common.pojo.vo.GoodsReceiptVO; import com.nflg.wms.common.pojo.vo.InventoryLockVO; +import com.nflg.wms.common.util.VUtil; import com.nflg.wms.repository.entity.WmsOutProduceItem; import com.nflg.wms.repository.entity.WmsReturnRequest; import com.nflg.wms.repository.entity.WmsReturnRequestItem; @@ -71,7 +72,9 @@ public class WmsReturnRequestServiceImpl extends ServiceImpl itemLocks = inventoryService.getLockList(item.getFactoryCode(), item.getStorageLocation(), item.getMaterialCode()); + VUtil.trueThrowBusinessError(CollectionUtil.isEmpty(itemLocks)).throwMessage("库存不足:" + item.getMaterialCode()); + lockVOS.addAll(itemLocks); } else { itemService.save(item); } diff --git a/nflg-wms-repository/src/main/resources/mapper/WmsWarehouseMapper.xml b/nflg-wms-repository/src/main/resources/mapper/WmsWarehouseMapper.xml index 6cdfcfe3..a6908dac 100644 --- a/nflg-wms-repository/src/main/resources/mapper/WmsWarehouseMapper.xml +++ b/nflg-wms-repository/src/main/resources/mapper/WmsWarehouseMapper.xml @@ -86,9 +86,10 @@ From 78ed6670e2b8e44b4ab5eed4631277605227004d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9B=B9=E9=B9=8F=E9=A3=9E?= Date: Mon, 23 Mar 2026 22:01:35 +0800 Subject: [PATCH 2/2] =?UTF-8?q?feat(exception):=20=E6=B7=BB=E5=8A=A0?= =?UTF-8?q?=E6=95=B0=E6=8D=AE=E8=AD=A6=E5=91=8A=E5=BC=82=E5=B8=B8=E5=A4=84?= =?UTF-8?q?=E7=90=86=E6=9C=BA=E5=88=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 新增 DataAlertException 类用于处理数据警告情况 - 在全局控制器增强中添加 DataAlertException 的异常处理器 - 将多个控制器中的直接返回错误改为抛出 DataAlertException 异常 - 统一处理库存不足等数据警告场景的异常响应格式 --- .../controller/OutAssistanceController.java | 3 ++- .../controller/OutCostCenterController.java | 3 ++- .../admin/controller/OutProduceController.java | 5 +++-- .../controller/PurchaseReturnController.java | 5 +++-- .../controller/TransferCompanyController.java | 3 ++- .../controller/TransferFactoryController.java | 3 ++- .../common/exception/DataAlertException.java | 18 ++++++++++++++++++ .../advice/GlobalRestControllerAdvice.java | 7 +++++++ 8 files changed, 39 insertions(+), 8 deletions(-) create mode 100644 nflg-wms-common/src/main/java/com/nflg/wms/common/exception/DataAlertException.java diff --git a/nflg-wms-admin/src/main/java/com/nflg/wms/admin/controller/OutAssistanceController.java b/nflg-wms-admin/src/main/java/com/nflg/wms/admin/controller/OutAssistanceController.java index b1e8a9df..4763e9bd 100644 --- a/nflg-wms-admin/src/main/java/com/nflg/wms/admin/controller/OutAssistanceController.java +++ b/nflg-wms-admin/src/main/java/com/nflg/wms/admin/controller/OutAssistanceController.java @@ -16,6 +16,7 @@ import com.nflg.wms.admin.util.QRCodeUtil; import com.nflg.wms.admin.util.ThymeleafUtil; import com.nflg.wms.common.constant.BarCodeProcessStage; import com.nflg.wms.common.constant.STATE; +import com.nflg.wms.common.exception.DataAlertException; import com.nflg.wms.common.exception.NflgException; import com.nflg.wms.common.pojo.ApiResult; import com.nflg.wms.common.pojo.PageData; @@ -361,7 +362,7 @@ public class OutAssistanceController extends BaseController { } }); if (CollectionUtil.isNotEmpty(lockVOS)) { - return ApiResult.errorWithExtras(STATE.OutOfStock, lockVOS); + throw new DataAlertException(STATE.OutOfStock, lockVOS); } outAssistanceItemService.updateBatchById(datas); outAssistanceTicketItemService.saveBatch(ticketItems); diff --git a/nflg-wms-admin/src/main/java/com/nflg/wms/admin/controller/OutCostCenterController.java b/nflg-wms-admin/src/main/java/com/nflg/wms/admin/controller/OutCostCenterController.java index 0ce53a17..31323034 100644 --- a/nflg-wms-admin/src/main/java/com/nflg/wms/admin/controller/OutCostCenterController.java +++ b/nflg-wms-admin/src/main/java/com/nflg/wms/admin/controller/OutCostCenterController.java @@ -16,6 +16,7 @@ import com.nflg.wms.admin.util.QRCodeUtil; import com.nflg.wms.admin.util.ThymeleafUtil; import com.nflg.wms.common.constant.BarCodeProcessStage; import com.nflg.wms.common.constant.STATE; +import com.nflg.wms.common.exception.DataAlertException; import com.nflg.wms.common.exception.NflgException; import com.nflg.wms.common.pojo.ApiResult; import com.nflg.wms.common.pojo.PageData; @@ -355,7 +356,7 @@ public class OutCostCenterController extends BaseController { } }); if (CollectionUtil.isNotEmpty(lockVOS)) { - return ApiResult.errorWithExtras(STATE.OutOfStock, lockVOS); + throw new DataAlertException(STATE.OutOfStock, lockVOS); } outCostcenterItemService.updateBatchById(datas); outCostcenterTicketItemService.saveBatch(ticketItems); diff --git a/nflg-wms-admin/src/main/java/com/nflg/wms/admin/controller/OutProduceController.java b/nflg-wms-admin/src/main/java/com/nflg/wms/admin/controller/OutProduceController.java index a030ce71..b1e487cf 100644 --- a/nflg-wms-admin/src/main/java/com/nflg/wms/admin/controller/OutProduceController.java +++ b/nflg-wms-admin/src/main/java/com/nflg/wms/admin/controller/OutProduceController.java @@ -15,6 +15,7 @@ import com.nflg.wms.admin.util.QRCodeUtil; import com.nflg.wms.admin.util.ThymeleafUtil; import com.nflg.wms.common.constant.BarCodeProcessStage; import com.nflg.wms.common.constant.STATE; +import com.nflg.wms.common.exception.DataAlertException; import com.nflg.wms.common.exception.NflgException; import com.nflg.wms.common.pojo.ApiResult; import com.nflg.wms.common.pojo.PageData; @@ -192,7 +193,7 @@ public class OutProduceController extends BaseController { if (CollectionUtil.isEmpty(lockVOS)) { return ApiResult.success(); } else { - return ApiResult.errorWithExtras(STATE.OutOfStock, lockVOS); + throw new DataAlertException(STATE.OutOfStock, lockVOS); } } @@ -254,7 +255,7 @@ public class OutProduceController extends BaseController { if (CollectionUtil.isEmpty(lockVOS)) { return ApiResult.success(); } else { - return ApiResult.errorWithExtras(STATE.OutOfStock, lockVOS); + throw new DataAlertException(STATE.OutOfStock, lockVOS); } } diff --git a/nflg-wms-admin/src/main/java/com/nflg/wms/admin/controller/PurchaseReturnController.java b/nflg-wms-admin/src/main/java/com/nflg/wms/admin/controller/PurchaseReturnController.java index 5a915a8c..0bf52803 100644 --- a/nflg-wms-admin/src/main/java/com/nflg/wms/admin/controller/PurchaseReturnController.java +++ b/nflg-wms-admin/src/main/java/com/nflg/wms/admin/controller/PurchaseReturnController.java @@ -16,6 +16,7 @@ import com.nflg.wms.admin.util.ThymeleafUtil; import com.nflg.wms.common.constant.BarCodeProcessStage; import com.nflg.wms.common.constant.STATE; import com.nflg.wms.common.constant.UserType; +import com.nflg.wms.common.exception.DataAlertException; import com.nflg.wms.common.pojo.ApiResult; import com.nflg.wms.common.pojo.PageData; import com.nflg.wms.common.pojo.dto.*; @@ -132,7 +133,7 @@ public class PurchaseReturnController extends BaseController { if (CollectionUtil.isEmpty(inventoryLockVOS)) { return ApiResult.success(); } else { - return ApiResult.errorWithExtras(STATE.OutOfStock, inventoryLockVOS); + throw new DataAlertException(STATE.OutOfStock, inventoryLockVOS); } } @@ -442,7 +443,7 @@ public class PurchaseReturnController extends BaseController { if (CollectionUtil.isEmpty(inventoryLockVOS)) { return ApiResult.success(); } else { - return ApiResult.errorWithExtras(STATE.OutOfStock, inventoryLockVOS); + throw new DataAlertException(STATE.OutOfStock, inventoryLockVOS); } } diff --git a/nflg-wms-admin/src/main/java/com/nflg/wms/admin/controller/TransferCompanyController.java b/nflg-wms-admin/src/main/java/com/nflg/wms/admin/controller/TransferCompanyController.java index 266431a0..e023f9e6 100644 --- a/nflg-wms-admin/src/main/java/com/nflg/wms/admin/controller/TransferCompanyController.java +++ b/nflg-wms-admin/src/main/java/com/nflg/wms/admin/controller/TransferCompanyController.java @@ -18,6 +18,7 @@ import com.nflg.wms.admin.service.SapService; import com.nflg.wms.admin.util.*; import com.nflg.wms.common.constant.BarCodeProcessStage; import com.nflg.wms.common.constant.STATE; +import com.nflg.wms.common.exception.DataAlertException; import com.nflg.wms.common.exception.NflgException; import com.nflg.wms.common.pojo.ApiResult; import com.nflg.wms.common.pojo.PageData; @@ -169,7 +170,7 @@ public class TransferCompanyController extends BaseController { if (CollectionUtil.isEmpty(lockVOS)) { return ApiResult.success(); } else { - return ApiResult.errorWithExtras(STATE.OutOfStock, lockVOS); + throw new DataAlertException(STATE.OutOfStock, lockVOS); } } diff --git a/nflg-wms-admin/src/main/java/com/nflg/wms/admin/controller/TransferFactoryController.java b/nflg-wms-admin/src/main/java/com/nflg/wms/admin/controller/TransferFactoryController.java index 04b94928..1cdfd02a 100644 --- a/nflg-wms-admin/src/main/java/com/nflg/wms/admin/controller/TransferFactoryController.java +++ b/nflg-wms-admin/src/main/java/com/nflg/wms/admin/controller/TransferFactoryController.java @@ -16,6 +16,7 @@ import com.nflg.wms.admin.util.QRCodeUtil; import com.nflg.wms.admin.util.ThymeleafUtil; import com.nflg.wms.common.constant.BarCodeProcessStage; import com.nflg.wms.common.constant.STATE; +import com.nflg.wms.common.exception.DataAlertException; import com.nflg.wms.common.exception.NflgException; import com.nflg.wms.common.pojo.ApiResult; import com.nflg.wms.common.pojo.PageData; @@ -167,7 +168,7 @@ public class TransferFactoryController extends BaseController { if (CollectionUtil.isEmpty(lockVOS)) { return ApiResult.success(); } else { - return ApiResult.errorWithExtras(STATE.OutOfStock, lockVOS); + throw new DataAlertException(STATE.OutOfStock, lockVOS); } } diff --git a/nflg-wms-common/src/main/java/com/nflg/wms/common/exception/DataAlertException.java b/nflg-wms-common/src/main/java/com/nflg/wms/common/exception/DataAlertException.java new file mode 100644 index 00000000..d58bc964 --- /dev/null +++ b/nflg-wms-common/src/main/java/com/nflg/wms/common/exception/DataAlertException.java @@ -0,0 +1,18 @@ +package com.nflg.wms.common.exception; + +import com.nflg.wms.common.constant.STATE; +import lombok.Data; + +@Data +public class DataAlertException extends RuntimeException { + + private final STATE state; + + private final Object obj; + + public DataAlertException(STATE state, Object obj) { + super(state.getType()); + this.state = state; + this.obj = obj; + } +} diff --git a/nflg-wms-starter/src/main/java/com/nflg/wms/starter/advice/GlobalRestControllerAdvice.java b/nflg-wms-starter/src/main/java/com/nflg/wms/starter/advice/GlobalRestControllerAdvice.java index dc970d73..1238f63a 100644 --- a/nflg-wms-starter/src/main/java/com/nflg/wms/starter/advice/GlobalRestControllerAdvice.java +++ b/nflg-wms-starter/src/main/java/com/nflg/wms/starter/advice/GlobalRestControllerAdvice.java @@ -4,6 +4,7 @@ import cn.dev33.satoken.exception.NotLoginException; import cn.hutool.core.util.StrUtil; import com.nflg.wms.common.constant.Constant; import com.nflg.wms.common.constant.STATE; +import com.nflg.wms.common.exception.DataAlertException; import com.nflg.wms.common.exception.NflgException; import com.nflg.wms.common.exception.SAPException; import com.nflg.wms.common.pojo.ApiResult; @@ -81,4 +82,10 @@ public class GlobalRestControllerAdvice { log.error("SAP错误: ", ex); return ApiResult.error(ex.getState(), "SAP错误:" + ex.getMessage()); } + + @ExceptionHandler(DataAlertException.class) + public ApiResult handleDataAlertException(DataAlertException ex) { + log.error("返回数据的错误: ", ex); + return ApiResult.errorWithExtras(ex.getState(), ex.getObj()); + } } \ No newline at end of file