yudao-module-erp/src/main/java/cn/iocoder/yudao/module/erp/dal/mysql/purchase/ErpPurchaseOrderMapper.java
@@ -11,13 +11,14 @@
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import org.apache.ibatis.annotations.Mapper;
import java.time.LocalDateTime;
import java.util.List;
import java.util.Objects;
/**
 * ERP 采购订单 Mapper
 *
 * @author 芋道源码
 * @author 超级管理员
 */
@Mapper
public interface ErpPurchaseOrderMapper extends BaseMapperX<ErpPurchaseOrderDO> {
@@ -70,6 +71,35 @@
                .eq(ErpPurchaseOrderDO::getId, id).eq(ErpPurchaseOrderDO::getStatus, status));
    }
    /**
     * 提交审批:更新状态并清空上一轮的审核信息
     *
     * 说明:必须使用 LambdaUpdateWrapper 显式 set null,
     * 否则 MyBatis-Plus 的 updateById 会忽略 null 字段,导致驳回原因残留。
     */
    default int submitAndResetAuditInfo(Long id, Integer status) {
        return update(null, new LambdaUpdateWrapper<ErpPurchaseOrderDO>()
                .eq(ErpPurchaseOrderDO::getId, id)
                .set(ErpPurchaseOrderDO::getStatus, status)
                .set(ErpPurchaseOrderDO::getReviewerId, null)
                .set(ErpPurchaseOrderDO::getReviewerName, null)
                .set(ErpPurchaseOrderDO::getReviewTime, null)
                .set(ErpPurchaseOrderDO::getReviewRemark, null));
    }
    /**
     * 审核(通过 / 不通过):写入审核人与审核意见
     */
    default int auditPurchaseOrder(Long id, Integer status, Long reviewerId, String reviewerName, String reviewRemark) {
        return update(null, new LambdaUpdateWrapper<ErpPurchaseOrderDO>()
                .eq(ErpPurchaseOrderDO::getId, id)
                .set(ErpPurchaseOrderDO::getStatus, status)
                .set(ErpPurchaseOrderDO::getReviewerId, reviewerId)
                .set(ErpPurchaseOrderDO::getReviewerName, reviewerName)
                .set(ErpPurchaseOrderDO::getReviewTime, LocalDateTime.now())
                .set(ErpPurchaseOrderDO::getReviewRemark, reviewRemark));
    }
    default ErpPurchaseOrderDO selectByNo(String no) {
        return selectOne(ErpPurchaseOrderDO::getNo, no);
    }
@@ -81,4 +111,13 @@
                .orderByDesc(ErpPurchaseOrderDO::getId));
    }
    /**
     * 按来源查询采购订单(用于追溯来源工单对应的采购订单)
     */
    default List<ErpPurchaseOrderDO> selectListBySource(Integer sourceType, Long sourceId) {
        return selectList(new LambdaQueryWrapperX<ErpPurchaseOrderDO>()
                .eq(ErpPurchaseOrderDO::getSourceType, sourceType)
                .eq(ErpPurchaseOrderDO::getSourceId, sourceId));
    }
}