yudao-module-erp/src/main/java/cn/iocoder/yudao/module/erp/dal/mysql/purchase/ErpPurchaseOrderMapper.java
@@ -11,6 +11,7 @@
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;
@@ -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);
    }