package com.docus.server.archivefile.infrastructure.mapper;

import com.docus.server.archivefile.infrastructure.entity.AfReportRecord;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * 上报记录保存表
 *
 * @author wyb
 */
@Mapper
public interface AfReportRecordMapper {
    /**
     * 保存报告推送记录
     *
     * @param afReportRecord 报告推送记录
     * @return 数据库操作结果
     */
    int saveRecord(@Param("reportRecord") AfReportRecord afReportRecord);

    /**
     * 根据文件唯一号 住院号 住院次数 系统标识 得到唯一推送记录
     *
     * @param serialnum   报告唯一号
     * @param inpatientNo 住院号
     * @param admisstimes 住院次数
     * @param sysFlag     系统标识
     * @return 报告推送记录
     */
    AfReportRecord getRecordBySerialnumAndInpatientNoAndSysFlag(@Param("serialnum") String serialnum, @Param("inpatientNo") String inpatientNo, @Param("admisstimes") Integer admisstimes, @Param("sysFlag") String sysFlag);

    /**
     * 更新报告推送 主要更新 下载地址，下载类型，文件名称
     *
     * @param afReportRecord 报告推送记录
     * @return 数据库操作结果
     */
    int updateRecordByTaskId(@Param("reportRecord") AfReportRecord afReportRecord);

    /**
     * 更新记录的状态
     *
     * @param taskId 任务id
     * @return 数据库操作结果
     */
    int updateStateByTaskId(@Param("taskId") Long taskId);

    AfReportRecord getReportRecordInfoByTaskId(@Param("taskId") Long taskId);

    /**
     * 根据任务id查询有patientId数据的任务id
     *
     * @param taskIds 任务id集合
     * @return 数据有patientId的任务id集合
     */
    List<Long> getHasPatientIdTaskIdsByTaskIds(@Param("taskIds") List<Long> taskIds);

    /**
     * 获取未开始的报告记录
     *
     * @param page     分页页码
     * @param pageSize 一页条数
     * @return 未开始的报告记录
     */
    List<AfReportRecord> getStartStateReportRecord(@Param("page") int page, @Param("pageSize") int pageSize);

    /**
     * 根据任务id更新病案主键
     *
     * @param patientId 病案主键
     * @param taskId    任务id
     * @return 数据库操作结果
     */
    int updateReportRecordPatientId(@Param("patientId") String patientId, @Param("taskId") Long taskId);
}
