feat(admin): 新增二维码与库存数量一致性检查业务逻辑

- 新增BaseControllerService类,封装二维码和库存数量一致性检查方法
- 增加判断物料是否生成二维码的功能
- 实现物料库存数量与二维码数量的校验逻辑
- 定义补码待办任务接口,待后续实现
- 新增NoScanningRequest和NoScanningItemRequest请求参数对象
- 设计物料非扫描明细及其数量、批次号、序列号和库位属性校验
This commit is contained in:
曹鹏飞 2026-05-30 16:58:00 +08:00
parent 536c5e807f
commit 452d924f9d
3 changed files with 131 additions and 0 deletions

View File

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

View File

@ -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<NoScanningItemRequest> items;
}

View File

@ -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 给仓库负责人创建补码的待办任务
}
}
}