package cn.iocoder.yudao.module.mes.service.wm.productsales;
|
|
import cn.hutool.core.util.StrUtil;
|
import cn.iocoder.yudao.module.erp.api.sale.ErpSaleOrderApi;
|
import cn.iocoder.yudao.module.mes.dal.dataobject.wm.productsales.MesWmProductSalesLineDO;
|
import cn.iocoder.yudao.module.mes.service.wm.batch.MesWmBatchService;
|
import jakarta.annotation.Resource;
|
import org.springframework.stereotype.Service;
|
|
import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
|
import static cn.iocoder.yudao.module.mes.enums.ErrorCodeConstants.*;
|
|
/** 按销售明细盘号校验实际选中的库存批次;无盘号的历史单据保留原有流程。 */
|
@Service
|
public class MesWmSalesReelGuard {
|
@Resource private ErpSaleOrderApi saleOrderApi;
|
@Resource private MesWmBatchService batchService;
|
|
public void validate(MesWmProductSalesLineDO line, Long batchId) {
|
if (line.getSaleOrderItemId() == null) return;
|
var item = saleOrderApi.getSaleOrderItem(line.getSaleOrderItemId()).getCheckedData();
|
if (item == null) throw exception(WM_PRODUCT_SALES_REEL_SOURCE_MISSING);
|
if (StrUtil.isBlank(item.getReelNo())) return;
|
var batch = batchId == null ? null : batchService.getBatch(batchId);
|
if (batch == null || !item.getReelNo().equals(batch.getReelNo())) {
|
throw exception(WM_PRODUCT_SALES_REEL_MISMATCH);
|
}
|
}
|
}
|