refactor(wms): 优化无码出库逻辑并移除库存一致性检查

- 替换 existsQrCode 检查为 cannotOutNoScanning 方法调用
- 添加工厂号和仓库号参数到出库验证逻辑
- 移除 quantityConsistencyCheck 方法中的实际库存检查逻辑
- 在多个控制器中统一无码出库验证方式
- 注释掉部分控制器中的二维码存在性检查逻辑
- 保留基础的无码出库限制功能
This commit is contained in:
曹鹏飞 2026-06-03 18:51:51 +08:00
parent a6b861b69c
commit 4620719182
8 changed files with 45 additions and 37 deletions

View File

@ -421,7 +421,7 @@ public class ComponentOutboundController extends BaseController {
.eq(WmsComponentPackingItem::getPackingId, order.getId())
.list();
items.removeIf(item -> item.getOutQty().compareTo(BigDecimal.ZERO) <= 0
|| noScanningBaseControllerService.existsQrCode(item.getIdnrk()));
|| noScanningBaseControllerService.cannotOutNoScanning(item.getIdnrk(),order.getFactoryNo(),item.getLgort()));
return ApiResult.success(
items.stream()
.map(item -> new NoScanItemVO()
@ -475,7 +475,7 @@ public class ComponentOutboundController extends BaseController {
VUtil.trueThrowBusinessError(Objects.isNull(packingItem)).throwMessage("无效的装箱单明细");
VUtil.trueThrowBusinessError(!StrUtil.equals(item.getMaterialNo(), packingItem.getIdnrk()))
.throwMessage("装箱单明细与物料不匹配:" + item.getMaterialNo());
VUtil.trueThrowBusinessError(noScanningBaseControllerService.existsQrCode(packingItem.getIdnrk()))
VUtil.trueThrowBusinessError(noScanningBaseControllerService.cannotOutNoScanning(packingItem.getIdnrk(), packing.getFactoryNo(), item.getWarehouseNo()))
.throwMessage("物料" + packingItem.getIdnrk() + "已生成二维码,不允许无码出库");
WmsComponentOutboundItem outboundItem = setWmsComponentOutboundItem(packing, packingItem, outbound, item.getWarehouseNo());

View File

@ -298,7 +298,7 @@ public class OutAssistanceController extends BaseController {
.eq(WmsOutAssistanceItem::getOrderId, order.getId())
.list();
items.removeIf(item -> item.getLeft().compareTo(BigDecimal.ZERO) <= 0
|| noScanningBaseControllerService.existsQrCode(item.getMatnr1()));
|| noScanningBaseControllerService.cannotOutNoScanning(item.getMatnr1(),order.getWerks(),order.getLgort1()));
return ApiResult.success(
items.stream()
.map(item -> new NoScanItemVO()
@ -327,7 +327,7 @@ public class OutAssistanceController extends BaseController {
VUtil.trueThrowBusinessError(Objects.isNull(order)).throwMessage("订单不存在");
request.getItems()
.forEach(data ->
VUtil.trueThrowBusinessError(noScanningBaseControllerService.quantityConsistencyCheck(data.getMaterialNo(),order.getWerks(),data.getWarehouseNo()))
VUtil.trueThrowBusinessError(noScanningBaseControllerService.cannotOutNoScanning(data.getMaterialNo(),order.getWerks(),data.getWarehouseNo()))
.throwMessage("物料" + data.getMaterialNo() + "不支持无码出库")
);
WmsOutAssistanceTicket ticket = new WmsOutAssistanceTicket()

View File

@ -299,7 +299,7 @@ public class OutCostCenterController extends BaseController {
.eq(WmsOutCostcenterItem::getOrderId, order.getId())
.list();
items.removeIf(item -> item.getLeft().compareTo(BigDecimal.ZERO) <= 0
|| noScanningBaseControllerService.existsQrCode(item.getMatnr()));
|| noScanningBaseControllerService.cannotOutNoScanning(item.getMatnr(), order.getWerks(), item.getLgort()));
return ApiResult.success(
items.stream()
.map(item -> new NoScanItemVO()
@ -328,7 +328,7 @@ public class OutCostCenterController extends BaseController {
VUtil.trueThrowBusinessError(Objects.isNull(order)).throwMessage("订单不存在");
request.getItems()
.forEach(data ->
VUtil.trueThrowBusinessError(noScanningBaseControllerService.quantityConsistencyCheck(data.getMaterialNo(), order.getWerks(), data.getWarehouseNo()))
VUtil.trueThrowBusinessError(noScanningBaseControllerService.cannotOutNoScanning(data.getMaterialNo(), order.getWerks(), data.getWarehouseNo()))
.throwMessage("物料" + data.getMaterialNo() + "不支持无码出库")
);
WmsOutCostcenterTicket ticket = new WmsOutCostcenterTicket()

View File

@ -426,7 +426,7 @@ public class OutProduceController extends BaseController {
.eq(WmsOutProduceItem::getOrderId, order.getId())
.list();
items.removeIf(item -> item.getSqsl().subtract(item.getNum()).compareTo(BigDecimal.ZERO) <= 0
|| noScanningBaseControllerService.existsQrCode(item.getMatnr()));
|| noScanningBaseControllerService.cannotOutNoScanning(item.getMatnr(),order.getDwerk(),order.getLgort2()));
return ApiResult.success(
items.stream()
.map(item -> new NoScanItemVO()
@ -455,7 +455,7 @@ public class OutProduceController extends BaseController {
VUtil.trueThrowBusinessError(Objects.isNull(order)).throwMessage("订单不存在");
request.getItems()
.forEach(data ->
VUtil.trueThrowBusinessError(noScanningBaseControllerService.quantityConsistencyCheck(data.getMaterialNo(),order.getDwerk(),data.getWarehouseNo()))
VUtil.trueThrowBusinessError(noScanningBaseControllerService.cannotOutNoScanning(data.getMaterialNo(),order.getDwerk(),data.getWarehouseNo()))
.throwMessage("物料" + data.getMaterialNo() + "不支持无码出库")
);
WmsOutProduceTicket ticket = new WmsOutProduceTicket()

View File

@ -157,7 +157,7 @@ public class OutPurchaseController extends BaseController {
.eq(WmsReturnRequestItem::getApplicationId, order.getId())
.list();
items.removeIf(item -> item.getLeft().compareTo(BigDecimal.ZERO) <= 0
|| noScanningBaseControllerService.existsQrCode(item.getMaterialCode()));
|| noScanningBaseControllerService.cannotOutNoScanning(item.getMaterialCode(),item.getFactoryCode(),item.getStorageLocation()));
return ApiResult.success(
items.stream()
.map(item -> new NoScanItemVO()
@ -194,7 +194,7 @@ public class OutPurchaseController extends BaseController {
request.getItems().forEach(ri -> {
WmsReturnRequestItem rrItem = returnRequestItemService.getById(ri.getOrderItemId());
VUtil.trueThrowBusinessError(Objects.isNull(rrItem)).throwMessage("申请单项无效:" + ri.getOrderItemId());
VUtil.trueThrowBusinessError(noScanningBaseControllerService.quantityConsistencyCheck(rrItem.getMaterialCode(), rrItem.getFactoryCode(), ri.getWarehouseNo()))
VUtil.trueThrowBusinessError(noScanningBaseControllerService.cannotOutNoScanning(rrItem.getMaterialCode(), rrItem.getFactoryCode(), ri.getWarehouseNo()))
.throwMessage("物料" + rrItem.getMaterialCode() + "不支持无码出库");
VUtil.trueThrowBusinessError(rrItem.getLeft().compareTo(BigDecimal.ZERO) <= 0)
.throwMessage("物料" + ri.getMaterialNo() + "已全部退库");

View File

@ -507,7 +507,7 @@ public class TransferCompanyController extends BaseController {
.eq(WmsTransferCompanyItem::getOrderId, order.getId())
.list();
items.removeIf(item -> item.getLeft().compareTo(BigDecimal.ZERO) <= 0
|| noScanningBaseControllerService.existsQrCode(item.getMatnr()));
|| noScanningBaseControllerService.cannotOutNoScanning(item.getMatnr(),order.getReswk(),item.getLgpro()));
return ApiResult.success(
items.stream()
.map(item -> new NoScanItemVO()
@ -556,8 +556,8 @@ public class TransferCompanyController extends BaseController {
VUtil.trueThrowBusinessError(Objects.isNull(orderItem)).throwMessage("物料" + item.getMaterialNo() + "不需要出库");
VUtil.trueThrowBusinessError(!StrUtil.equals(item.getMaterialNo(), orderItem.getMatnr()))
.throwMessage("转储单明细与物料不匹配:" + item.getMaterialNo());
VUtil.trueThrowBusinessError(noScanningBaseControllerService.existsQrCode(orderItem.getMatnr()))
.throwMessage("物料" + orderItem.getMatnr() + "已生成二维码,不允许无扫码出库");
// VUtil.trueThrowBusinessError(noScanningBaseControllerService.cannotOutNoScanning(orderItem.getMatnr(), order.getReswk(), order.getLgfsb1()))
// .throwMessage("物料" + orderItem.getMatnr() + "已生成二维码,不允许无扫码出库");
BigDecimal totalNum = item.getDatas().stream()
.peek(data -> VUtil.trueThrowBusinessError(Objects.isNull(data.getNum()) || data.getNum().compareTo(BigDecimal.ZERO) <= 0)

View File

@ -533,7 +533,7 @@ public class TransferFactoryController extends BaseController {
.eq(WmsTransferFactoryItem::getOrderId, orderId)
.list();
items.removeIf(item -> item.getLeft().compareTo(BigDecimal.ZERO) <= 0
|| noScanningBaseControllerService.existsQrCode(item.getMatnr()));
|| noScanningBaseControllerService.cannotOutNoScanning(item.getMatnr(),order.getWerks(),order.getLgort()));
return ApiResult.success(
items.stream()
.map(item -> new NoScanItemVO()
@ -582,8 +582,8 @@ public class TransferFactoryController extends BaseController {
VUtil.trueThrowBusinessError(Objects.isNull(orderItem)).throwMessage("物料" + item.getMaterialNo() + "不需要出库");
VUtil.trueThrowBusinessError(!StrUtil.equals(item.getMaterialNo(), orderItem.getMatnr()))
.throwMessage("调拨单明细与物料不匹配:" + item.getMaterialNo());
VUtil.trueThrowBusinessError(noScanningBaseControllerService.existsQrCode(orderItem.getMatnr()))
.throwMessage("物料" + orderItem.getMatnr() + "已生成二维码,不允许无码出库");
// VUtil.trueThrowBusinessError(noScanningBaseControllerService.existsQrCode(orderItem.getMatnr()))
// .throwMessage("物料" + orderItem.getMatnr() + "已生成二维码,不允许无码出库");
BigDecimal totalNum = item.getDatas().stream()
.peek(data -> VUtil.trueThrowBusinessError(Objects.isNull(data.getNum()) || data.getNum().compareTo(BigDecimal.ZERO) <= 0)

View File

@ -31,6 +31,13 @@ public class NoScanningBaseControllerService {
return false;
}
public boolean cannotOutNoScanning(String materialNo, String factoryNo, String warehouseNo) {
if (!existsQrCode(materialNo)){
return true;
}
return !quantityConsistencyCheck(materialNo, factoryNo, warehouseNo);
}
/**
* 物料库存和物料二维码数量一致性检查
* @param materialNo 物料编号
@ -38,27 +45,28 @@ public class NoScanningBaseControllerService {
* @param warehouseNo 仓库编号
* @return 数量是否一致
*/
public boolean quantityConsistencyCheck(String materialNo, String factoryNo, String warehouseNo) {
BigDecimal quantityQr = qrCodeMasterService.lambdaQuery()
.select(WmsQrCodeMaster::getQuantity)
.eq(WmsQrCodeMaster::getMaterialCode, materialNo)
.eq(WmsQrCodeMaster::getFactoryCode, factoryNo)
.eq(WmsQrCodeMaster::getStorageLocation, warehouseNo)
.eq(WmsQrCodeMaster::getProcessStage, BarCodeProcessStage.InBound.getState())
.list()
.stream()
.map(WmsQrCodeMaster::getQuantity)
.reduce(BigDecimal.ZERO, BigDecimal::add);
BigDecimal quantityInventory = inventoryService.lambdaQuery()
.select(WmsInventory::getNum)
.eq(WmsInventory::getMaterialNo, materialNo)
.eq(WmsInventory::getFactoryNo, factoryNo)
.eq(WmsInventory::getWarehouseNo, warehouseNo)
.list()
.stream()
.map(WmsInventory::getNum)
.reduce(BigDecimal.ZERO, BigDecimal::add);
return quantityQr.compareTo(quantityInventory) == 0;
private boolean quantityConsistencyCheck(String materialNo, String factoryNo, String warehouseNo) {
// BigDecimal quantityQr = qrCodeMasterService.lambdaQuery()
// .select(WmsQrCodeMaster::getQuantity)
// .eq(WmsQrCodeMaster::getMaterialCode, materialNo)
// .eq(WmsQrCodeMaster::getFactoryCode, factoryNo)
// .eq(WmsQrCodeMaster::getStorageLocation, warehouseNo)
// .eq(WmsQrCodeMaster::getProcessStage, BarCodeProcessStage.InBound.getState())
// .list()
// .stream()
// .map(WmsQrCodeMaster::getQuantity)
// .reduce(BigDecimal.ZERO, BigDecimal::add);
// BigDecimal quantityInventory = inventoryService.lambdaQuery()
// .select(WmsInventory::getNum)
// .eq(WmsInventory::getMaterialNo, materialNo)
// .eq(WmsInventory::getFactoryNo, factoryNo)
// .eq(WmsInventory::getWarehouseNo, warehouseNo)
// .list()
// .stream()
// .map(WmsInventory::getNum)
// .reduce(BigDecimal.ZERO, BigDecimal::add);
// return quantityQr.compareTo(quantityInventory) == 0;
return true;
}
/**