package com.rf.psychological.scale.service;

import com.rf.psychological.dao.dto.InstitutionRecordingDTO;
import com.rf.psychological.dao.dto.InstitutionRecordingUserDTO;
import com.rf.psychological.dao.dto.InstitutionRecordingUsersDTO;
import com.rf.psychological.dao.dto.UserRecordsDto;
import com.rf.psychological.scale.dao.model.UserRecordEntity;
import org.springframework.data.domain.Page;

import java.sql.Date;
import java.util.List;

/**
 * @author zsy
 * @description:用户测试记录
 * @date 2021/6/17 15:55
 */
public interface UserRecordService {

    /**
     * 保存
     *
     * @param userRecordEntity
     */
    void save(UserRecordEntity userRecordEntity);

    /**
     * 认知任务测试次数统计
     *
     * @return
     */
    List<UserRecordEntity> testAmount();

    /**
     * （旧）根据手机号查询用户测试记录
     *
     * @return
     */
    List<UserRecordEntity> getTestListByPhone(int pageNum, int pageSize, String phone, String institutionNo, String searchKey);

    /**
     * （新）根据手机号查询用户测试记录
     *
     * @param pageNum
     * @param pageSize
     * @param phone
     * @param institutionNo
     * @param searchKey
     * @return
     */
    Page<UserRecordsDto> getUserRecording(int pageNum, int pageSize, String phone, String institutionNo, String searchKey);

    /**
     * 查询记录
     * @param pageNum
     * @param pageSize
     * @param phone
     * @param institutionNo
     * @param searchKey
     * @return
     */
    Page<UserRecordEntity> getUserRecording2(int pageNum, int pageSize, String phone, String institutionNo, String searchKey);

    /**
     * 根据手机号和记录类别查询
     *
     * @param pageNum
     * @param pageSize
     * @param phone
     * @param type
     * @return
     */
    List<UserRecordEntity> getListByPhoneAndType(int pageNum, int pageSize, String phone, String institutionNo, String type);

    /**
     * 根据手机号和类别查询用户测试记录总条数
     *
     * @return
     */
    int countByPhoneAndType(String phone, String type,String institutionNo);

    /**
     * 根据手机号和记录类别查询
     *
     * @param pageNum
     * @param pageSize
     * @param phone
     * @param type
     * @return
     */
    List<UserRecordEntity> getListByPhoneAndTypeAndTime(int pageNum, int pageSize, String phone, String institutionNo, String type, String beginTime, String endTime);

    /**
     * 根据手机号和类别查询用户测试记录总条数
     *
     * @return
     */
    int countByPhoneAndTypeAndTime(String phone, String type, String beginTime, String endTime, String institutionNo);

    /**
     * 根据手机号查询用户测试记录总条数
     *
     * @return
     */
    int allNumByPhone(String phone, String institutionNo, String searchKey);

    /**
     * 根据id查询数据
     *
     * @return
     */
    UserRecordEntity getUserRecordById(String id);

    /**
     * 用户查询靶向神经振荡评估与训练记录
     *
     * @return
     */
    UserRecordEntity getRHYTHM(String phone, String institutionNo, String testPlanId);

    /**
     * 查询枪林弹雨
     *
     * @param phone
     * @return
     */
    List<UserRecordEntity> getGUNSBULLETS(String phone, String institutionNo);

    /**
     * 查询机构下所有用户已经做的测试记录
     *
     * @param pageNum
     * @param pageSize
     * @param institutionNo
     * @param searchKey
     * @return
     */
    List<InstitutionRecordingDTO> getInstitutionUserRecording(int pageNum, int pageSize, String type, String institutionNo, String searchKey, String beginTime, String endTime);

    int allCountByInstitutionNo(String institutionNo, String type, String searchKey, String beginTime, String endTime);

    /**
     * 查询机构内测试量表下的用户
     *
     * @param pageNum
     * @param pageSize
     * @param institutionNo
     * @param name
     * @return
     */
    List<InstitutionRecordingUserDTO> getInstitutionRecording(int pageNum, int pageSize, String institutionNo, String name, String searchKey, String beginFormat, String endFormat, String groupId);

    int allCountInstitutionRecording(String institutionNo, String name, String searchKey, String beginFormat, String endFormat, String groupId);

    /**
     * 查询全量数据
     *
     * @return
     */
    List<UserRecordEntity> findAll();

    /**
     * 根据id修改信息
     *
     * @param
     * @return
     */
    void updateById(String id, String testResult);

    List<InstitutionRecordingUsersDTO> getInstitution(String institutionNo, String name, String searchName, String beginTime, String endTime, String groupId);

    List<UserRecordEntity> getRecordingInfoByTestPlanIdAndPhoneAndInstitutionNoAndType(String institutionNo, String testPlanId, String phone, String type);

    List<UserRecordEntity> findAll1();

    /**
     * 查看某测试计划下的某量表或认知任务是否存在
     * @param institutionNo
     * @param phone
     * @param testPlanId
     * @param flag
     * @return
     */
    UserRecordEntity findByPhoneAndTestPlanIdAndInstitution(String institutionNo, String phone, String testPlanId, String flag);

    /**
     * 查询某测试计划下的测试记录
     * @param testPlanId
     * @return
     */
    List<UserRecordEntity> getUserRecordByPlanId(String testPlanId);

    List<UserRecordEntity> getuserRecordByPhone(String phone,String flag);

    InstitutionRecordingUsersDTO getRecordingUsersDTOById(String id);

    /**
     * 删除测试记录
     * @param institutionNo
     */
    void deleteBatchByInstitution(String institutionNo);

    void deleteAllByPhoneAndInstitutionNo(String phone, String institutionNo);

    UserRecordEntity getuserRecordByIdAndInstitutionNoAndPhone(String resultId, String userId, String institutionNo);

    /**
     * 查看量表或认知任务历史测试记录
     * @param pageNum
     * @param pageSize
     * @param phone
     * @param institutionNo
     * @param flag
     * @return
     */
    Page<UserRecordEntity> getHistoryRecord(int pageNum, int pageSize, String phone, String institutionNo, String flag);

    int countHistoryRecord( String phone, String institutionNo, String flag);

    int finAllByInstitutionNo(String institutionNo);

    String findByTestNum(String institutionNo, int i);

    /**
     * 微博分享-通过手机号查询测试记录
     * @param pageNum
     * @param pageSize
     * @param modelPhone
     * @return
     */
    Page<UserRecordEntity> getRecordByModelPhone(int pageNum, int pageSize, String modelPhone, String orderStatus);

    int countNum(String flag, String promotionStartTime);
}
