云
2026-10-27 ffca46b39d25439a06a27cafda2ec523a3fb67cf
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
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);
        }
    }
}