package com.zt.plat.module.qms.resource.record.service.recordrecord;

import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.zt.plat.framework.common.pojo.PageResult;
import com.zt.plat.module.qms.resource.record.controller.admin.recordrecord.vo.RecordRecordPageReqVO;
import com.zt.plat.module.qms.resource.record.controller.admin.recordrecord.vo.RecordRecordRespVO;
import com.zt.plat.module.qms.resource.record.controller.admin.recordrecord.vo.RecordRecordSaveReqVO;
import com.zt.plat.module.qms.resource.record.dal.dataobject.recordrecord.RecordRecordDO;
import jakarta.validation.Valid;

import java.util.List;

/**
 * 文件、模板、记录 Service 接口
 *
 * @author 后台管理
 */
public interface RecordRecordService {

    /**
     * 创建文件、模板、记录
     *
     * @param createReqVO 创建信息
     * @return 编号
     */
    RecordRecordRespVO createRecordRecord(@Valid RecordRecordSaveReqVO createReqVO);

    /**
     * 更新文件、模板、记录
     *
     * @param updateReqVO 更新信息
     */
    RecordRecordRespVO updateRecordRecord(@Valid RecordRecordSaveReqVO updateReqVO);

    /**
     * 删除文件、模板、记录
     *
     * @param id 编号
     */
    void deleteRecordRecord(Long id);

    /**
    * 批量删除文件、模板、记录
    *
    * @param ids 编号
    */
    void deleteRecordRecordListByIds(List<Long> ids);

    /**
     * 获得文件、模板、记录
     *
     * @param id 编号
     * @return 文件、模板、记录
     */
    RecordRecordDO getRecordRecord(Long id);

    /**
     * 获得文件、模板、记录分页
     *
     * @param pageReqVO 分页查询
     * @return 文件、模板、记录分页
     */
    PageResult<RecordRecordDO> getRecordRecordPage(RecordRecordPageReqVO pageReqVO);

    PageResult<RecordRecordDO> getRecordHistoryPage(RecordRecordPageReqVO pageReqVO);


    RecordRecordDO getRecordById(Long id);

    /**
     * 更新单条
     * @param recordDO
     * @return
     */

    RecordRecordRespVO updateRecordRecordById(RecordRecordDO recordDO);

    /**
     * 通过记录Id 批量更新
     * @param recordRecordDOS
     */

    void updateRecordRecordListByIds(List<RecordRecordDO> recordRecordDOS);

//    RecordRecordDO recordSubmitStatus(RecordRecordDO recordDO);

//    List<RecordRecordRespVO> getRecordList(RecordRecordPageReqVO pageReqVO);

    /**
     * 定时任务：将生效日期已到的记录状态更新为已生效（recordStatus = 1）
     *
     * @return 更新条数
     */
    Integer updateRecordStatus();

    PageResult<RecordRecordDO> getEffectiveRecordPage(RecordRecordPageReqVO pageReqVO);

    PageResult<RecordRecordRespVO> getLookRecordList(RecordRecordPageReqVO pageReqVO);

    Integer updateExpireRecordJob();

    int updateRecord(LambdaUpdateWrapper<RecordRecordDO> updateWrapper);

    PageResult<RecordRecordRespVO> selectRecordRecordPage(RecordRecordPageReqVO pageReqVO);
}