云
2026-10-25 d54fbc9d4f8981fa0f7f613b33a28a8cd4f764ea
yudao-module-erp/src/main/java/cn/iocoder/yudao/module/erp/service/sale/listener/ProductionFinishedListener.java
@@ -3,6 +3,8 @@
import cn.iocoder.yudao.module.erp.dal.dataobject.sale.ErpSaleOrderDO;
import cn.iocoder.yudao.module.erp.dal.mysql.sale.ErpSaleOrderMapper;
import cn.iocoder.yudao.module.mes.api.event.ProductionFinishedEvent;
import cn.iocoder.yudao.module.mes.api.event.ProductionCanceledEvent;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import jakarta.annotation.Resource;
import lombok.extern.slf4j.Slf4j;
import org.springframework.context.event.EventListener;
@@ -37,4 +39,16 @@
        log.info("[onProductionFinished] 销售订单 {} 生产状态已更新为完成", event.getSaleOrderId());
    }
}
    @EventListener
    @Async
    public void onProductionCanceled(ProductionCanceledEvent event) {
        log.info("[onProductionCanceled] 收到生产取消事件,销售订单ID: {}", event.getSaleOrderId());
        // 使用显式 update wrapper 才能把已存在的完成时间真正更新为 NULL
        saleOrderMapper.update(null, new LambdaUpdateWrapper<ErpSaleOrderDO>()
                .eq(ErpSaleOrderDO::getId, event.getSaleOrderId())
                .set(ErpSaleOrderDO::getProductionStatus, 0)
                .set(ErpSaleOrderDO::getProductionFinishTime, null));
        log.info("[onProductionCanceled] 销售订单 {} 生产状态已恢复为未完成", event.getSaleOrderId());
    }
}