From 452d924f9da25f797fff29637d912bf18e3b3cdd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9B=B9=E9=B9=8F=E9=A3=9E?= Date: Sat, 30 May 2026 16:58:00 +0800 Subject: [PATCH] =?UTF-8?q?feat(admin):=20=E6=96=B0=E5=A2=9E=E4=BA=8C?= =?UTF-8?q?=E7=BB=B4=E7=A0=81=E4=B8=8E=E5=BA=93=E5=AD=98=E6=95=B0=E9=87=8F?= =?UTF-8?q?=E4=B8=80=E8=87=B4=E6=80=A7=E6=A3=80=E6=9F=A5=E4=B8=9A=E5=8A=A1?= =?UTF-8?q?=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 新增BaseControllerService类,封装二维码和库存数量一致性检查方法 - 增加判断物料是否生成二维码的功能 - 实现物料库存数量与二维码数量的校验逻辑 - 定义补码待办任务接口,待后续实现 - 新增NoScanningRequest和NoScanningItemRequest请求参数对象 - 设计物料非扫描明细及其数量、批次号、序列号和库位属性校验 --- .../pojo/request/NoScanningItemRequest.java | 31 +++++++++ .../admin/pojo/request/NoScanningRequest.java | 32 +++++++++ .../admin/service/BaseControllerService.java | 68 +++++++++++++++++++ 3 files changed, 131 insertions(+) create mode 100644 nflg-wms-admin/src/main/java/com/nflg/wms/admin/pojo/request/NoScanningItemRequest.java create mode 100644 nflg-wms-admin/src/main/java/com/nflg/wms/admin/pojo/request/NoScanningRequest.java create mode 100644 nflg-wms-admin/src/main/java/com/nflg/wms/admin/service/BaseControllerService.java diff --git a/nflg-wms-admin/src/main/java/com/nflg/wms/admin/pojo/request/NoScanningItemRequest.java b/nflg-wms-admin/src/main/java/com/nflg/wms/admin/pojo/request/NoScanningItemRequest.java new file mode 100644 index 00000000..d797b7b6 --- /dev/null +++ b/nflg-wms-admin/src/main/java/com/nflg/wms/admin/pojo/request/NoScanningItemRequest.java @@ -0,0 +1,31 @@ +package com.nflg.wms.admin.pojo.request; + +import jakarta.validation.constraints.NotNull; +import lombok.Data; + +import java.math.BigDecimal; + +@Data +public class NoScanningItemRequest { + + /** + * 数量 + */ + @NotNull + private BigDecimal num; + + /** + * 批次号 + */ + private String batchNo; + + /** + * 序列号 + */ + private String serialNo; + + /** + * 库位 + */ + private String binNo; +} diff --git a/nflg-wms-admin/src/main/java/com/nflg/wms/admin/pojo/request/NoScanningRequest.java b/nflg-wms-admin/src/main/java/com/nflg/wms/admin/pojo/request/NoScanningRequest.java new file mode 100644 index 00000000..22dde3d6 --- /dev/null +++ b/nflg-wms-admin/src/main/java/com/nflg/wms/admin/pojo/request/NoScanningRequest.java @@ -0,0 +1,32 @@ +package com.nflg.wms.admin.pojo.request; + +import jakarta.validation.Valid; +import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.NotEmpty; +import jakarta.validation.constraints.NotNull; +import lombok.Data; + +import java.util.List; + +@Data +public class NoScanningRequest { + + /** + * 订单项ID + */ + @NotNull + private Long orderItemId; + + /** + * 物料编号 + */ + @NotBlank + private String materialNo; + + /** + * 明细列表 + */ + @Valid + @NotEmpty + private List items; +} diff --git a/nflg-wms-admin/src/main/java/com/nflg/wms/admin/service/BaseControllerService.java b/nflg-wms-admin/src/main/java/com/nflg/wms/admin/service/BaseControllerService.java new file mode 100644 index 00000000..5c3005ed --- /dev/null +++ b/nflg-wms-admin/src/main/java/com/nflg/wms/admin/service/BaseControllerService.java @@ -0,0 +1,68 @@ +package com.nflg.wms.admin.service; + +import com.nflg.wms.common.constant.BarCodeProcessStage; +import com.nflg.wms.repository.entity.WmsInventory; +import com.nflg.wms.repository.entity.WmsQrCodeMaster; +import com.nflg.wms.repository.service.IWmsInventoryService; +import com.nflg.wms.repository.service.IWmsQrCodeMasterService; +import jakarta.annotation.Resource; +import org.springframework.stereotype.Component; + +import java.math.BigDecimal; + +@Component +public class BaseControllerService { + + @Resource + private IWmsQrCodeMasterService qrCodeMasterService; + + @Resource + private IWmsInventoryService inventoryService; + + /** + * 物料是否生成过二维码 + * @param materialNo 物料编号 + * @return 是否生成过二维码 + */ + protected boolean existsQrCode(String materialNo) { + return qrCodeMasterService.lambdaQuery() + .eq(WmsQrCodeMaster::getMaterialCode, materialNo) + .exists(); + } + + /** + * 物料库存和物料二维码数量一致性检查 + * @param materialNo 物料编号 + * @param factoryNo 工厂编号 + * @param warehouseNo 仓库编号 + * @return 数量是否一致 + */ + 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; + } + + protected void qrCodeCreateTask(String materialNo,String factoryNo, String warehouseNo){ + if (!quantityConsistencyCheck(materialNo, factoryNo, warehouseNo)) { + //TODO 给仓库负责人创建补码的待办任务 + } + } +}