liu
2 天以前 311a4c9b4748d38a52f2f79eda471f2173a5c6a6
yudao-module-erp/src/main/java/cn/iocoder/yudao/module/erp/service/sale/ErpSaleOrderServiceImpl.java
@@ -21,6 +21,7 @@
import cn.iocoder.yudao.module.mdm.api.item.dto.MdmItemRespDTO;
import cn.iocoder.yudao.module.mes.api.mps.MesProMpsApi;
import cn.iocoder.yudao.module.mes.api.mps.dto.MesProMpsCreateReqDTO;
import cn.iocoder.yudao.module.mes.api.mps.dto.MesProMpsRespDTO;
import cn.iocoder.yudao.module.system.api.storage.StorageAttachmentApi;
import cn.iocoder.yudao.module.system.api.user.AdminUserApi;
import jakarta.annotation.Resource;
@@ -50,6 +51,11 @@
@Validated
@Slf4j
public class ErpSaleOrderServiceImpl implements ErpSaleOrderService {
    /**
     * MPS 状态:已取消(对应 MES 模块 MesProMpsStatusEnum.CANCELED 的值 3)
     */
    private static final Integer MPS_STATUS_CANCELED = 3;
    @Resource
    private ErpSaleOrderMapper saleOrderMapper;
@@ -205,6 +211,13 @@
            if (item.getNeedProduction() == null || item.getNeedProduction() != 1) {
                continue;
            }
            // 避免审批/反审批重复操作导致同一个销售订单号产生多条 MPS
            MesProMpsRespDTO existingMps = mpsApi.getMpsBySaleOrderItemId(item.getId());
            if (existingMps != null && ObjectUtil.notEqual(existingMps.getStatus(), MPS_STATUS_CANCELED)) {
                log.info("[createMpsForSaleOrder] 销售订单明细({}) 已存在 MPS({}),状态={},跳过创建",
                        item.getId(), existingMps.getId(), existingMps.getStatus());
                continue;
            }
            try {
                Long mpsId = createMpsForSaleOrderItem(saleOrder, item);
                if (mpsId != null) {