package com.xinyilu.system.mapper.testItemScoreinfo;

import com.xinyilu.system.domain.dto.ImportTestProjectScoresDTO;
import com.xinyilu.system.domain.dto.ItemStudentScoreDTO;
import com.xinyilu.system.domain.dto.TestItemScoreinfoDTO;
import com.xinyilu.system.domain.nationalphysiquegrade.NationalPhysiqueGrade;
import com.xinyilu.system.domain.studentInfo.StudentInfo;
import com.xinyilu.system.domain.testItemScoreinfo.TestItemScore;
import com.xinyilu.system.domain.vo.ShowItemBatchScoreVO;
import com.xinyilu.system.domain.vo.TestItemScoreUpdateVO;
import com.xinyilu.system.domain.vo.TestItemScoreinfoVO;
import com.xinyilu.system.domain.vo.TestItemStudentScore.AllClassByVO;
import com.xinyilu.system.domain.vo.TestItemStudentScore.AllStudentScoreVO;
import com.xinyilu.system.domain.vo.TestItemStudentScore.TestAllStudentScoreVO;
import com.xinyilu.system.domain.vo.averageHeightAndWeight.HeightAndWeightAvgScoreVO;
import com.xinyilu.system.domain.vo.motionprescriptionlibrary.MotionPrescriptionLibraryAndVideoVO;
import com.xinyilu.system.domain.vo.motionprescriptionlibrary.MotionPrescriptionLibraryVO;
import com.xinyilu.system.domain.vo.testActionDevelopment.TestActionDevelopmentVO;
import com.xinyilu.system.domain.vo.testItemAvgScore.TestItemAvgScoreClassVO;
import com.xinyilu.system.domain.vo.testItemAvgScore.TestStudentFractionVO;
import com.xinyilu.system.domain.vo.testItemAvgScore.ThisActionDevelopmentVO;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * 个人成绩录入管理Mapper接口
 *
 * @author xinyilu
 * @date 2022-08-04
 */
public interface TestItemScoreMapper {
    /**
     * 查询个人成绩录入管理
     *
     * @param studentId 学生id
     * @param batchCode 批次编号
     * @return 个人成绩录入管理
     */
    public List<TestItemScoreUpdateVO> selectTestItemScoreById(@Param("studentId") Long studentId, @Param("batchCode") String batchCode);

    /**
     * 查询个人成绩录入管理列表
     *
     * @param testItemScore 个人成绩录入管理
     * @return 个人成绩录入管理集合
     */
    public List<TestItemScoreUpdateVO> selectTestItemScoreList(TestItemScoreinfoVO testItemScore);

    /**
     * 新增个人成绩录入管理
     *
     * @param testItemScore 个人成绩录入管理
     * @return 结果
     */
    public int insertTestItemScore(TestItemScoreinfoDTO testItemScore);

    /**
     * 修改个人成绩录入管理
     *
     * @param testItemScore 个人成绩录入管理
     * @return 结果
     */
    public int updateTestItemScore(TestItemScoreinfoDTO testItemScore);

    /**
     * 删除个人成绩录入管理
     *
     * @param id 个人成绩录入管理主键
     * @return 结果
     */
    public int deleteTestItemScoreById(Long id);

    /**
     * 逻辑批量删除个人成绩录入管理
     *
     * @param studentId 学生id
     * @param batchCode 批次编号
     * @return 结果
     */
    public int updateTestItemScoreByIds(@Param("studentId") Long studentId, @Param("batchCode") String batchCode);

    /**
     * 根据项目id查询对应得项目类型值
     *
     * @param itemId 项目id
     * @return 类型值
     */
    String getItemType(Long itemId);

    /**
     * 根据id修改平均成绩信息
     *
     * @param id 主键id
     * @return 数量
     */
    int updateTestItemScoreById(Long id);

    /**
     * 根据id修改平均成绩信息
     *
     * @param id 主键id
     * @return 数量
     */
    int updateTestItemTextById(Long id);

    /**
     * 根据区域id获取对应的班级id
     *
     * @param id 用户id
     * @return 幼儿园表id
     */
    List<Long> getSysAreaIdByParentId(Long id);

    /**
     * 根据园长id获取对应的班级id
     *
     * @param id 用户id
     * @return 幼儿园表id
     */
    List<Long> getClassInfoIdByParentId(Long id);

    /**
     * 根据老师id获取对应的班级id
     *
     * @param id 用户id
     * @return 幼儿园表id
     */
    List<Long> getClassAndTeacherInfoIdByParentId(Long id);

    /**
     * 根据家长手机号获取对应的学生的id
     *
     * @param phone 用户手机号
     * @return 幼儿园表id
     */
    List<Long> getStudentInfoIdByParentId(@Param("phone") String phone);

    /**
     * 根据幼儿园id和批次信息统计各年级身高和学生的平均成绩信息
     *
     * @param kindergartenId 幼儿园id
     * @param batchCode      批次信息
     * @param itemCodeList   项目编号集合
     * @return 年级身高和学生的平均成绩信息
     */
    List<HeightAndWeightAvgScoreVO> getAvgHeightAndWeightInfo(@Param("kindergartenId") Long kindergartenId,
                                                              @Param("batchCode") String batchCode,
                                                              @Param("itemCodeList") List<String> itemCodeList);

    /**
     * 获取测试项目名称以及分数
     *
     * @param studentId 学生id
     * @param batchCode 批次编号
     * @param itemCode  项目编码
     * @return java.util.List<com.xinyilu.system.domain.vo.TestItemScoreinfoVO>
     **/
    List<TestActionDevelopmentVO> selectTestNameScoreList(@Param("studentId") Long studentId, @Param("batchCode") String batchCode,
                                                          @Param("itemCode") String itemCode);

    /**
     * 获取所有学生的学生姓名以及成绩
     *
     * @param kindergartenId 幼儿园id
     * @param batchCode      批次编号
     * @return com.xinyilu.system.domain.vo.TestItemScoreinfoVO
     **/
    List<TestAllStudentScoreVO> selectAllStudentScoreList(@Param("kindergartenId") Long kindergartenId, @Param("batchCode") String batchCode);


    /**
     * 根据幼儿园id以及批次编号查询所有幼儿园的班级id
     *
     * @param kindergartenId 幼儿园id
     * @param batchCode      批次编号
     * @return java.util.List<com.xinyilu.system.domain.vo.TestItemStudentScore.TestAllStudentScoreVO>
     **/
    List<AllClassByVO> selectAllClassById(@Param("kindergartenId") Long kindergartenId, @Param("batchCode") String batchCode);


    /**
     * 获取所有班级的成绩
     *
     * @param kindergartenId 幼儿园id
     * @param batchCode      批次编号
     * @return java.util.List<com.xinyilu.system.domain.vo.TestItemScoreinfoVO>
     **/
    List<AllStudentScoreVO> selectAllClassScoreList(@Param("kindergartenId") Long kindergartenId, @Param("batchCode") String batchCode);

    /**
     * 据班级id 幼儿园id 批次编号 获取对应某幼儿园某班平均分数
     *
     * @param classId        班级id
     * @param kindergartenId 幼儿园id
     * @param batchCode      批次编号
     * @param itemCode       项目编号
     * @return java.util.List<com.xinyilu.system.domain.vo.testItemAvgScore.TestItemAvgScoreClassVO>
     **/
    List<TestItemAvgScoreClassVO> selectTestItemAvgScoreList(@Param("classId") Long classId,
                                                             @Param("kindergartenId") Long kindergartenId,
                                                             @Param("batchCode") String batchCode,
                                                             @Param("itemCode") String itemCode);

    /**
     * 班级类型 幼儿园id 某园幼儿园某班平均分
     *
     * @param classType      班级类型
     * @param kindergartenId 幼儿园id
     * @param batchCode      批次编号
     * @param categoryIdList 分类id集合
     * @param itemCode       项目编码
     * @return java.util.List<com.xinyilu.system.domain.vo.testItemAvgScore.TestItemAvgScoreClassVO>
     **/
    List<TestItemAvgScoreClassVO> selectTestItemAvgScoreSchoolList(@Param("classType") String classType,
                                                                   @Param("kindergartenId") Long kindergartenId,
                                                                   @Param("batchCode") String batchCode,
                                                                   @Param("categoryIdList") List<Long> categoryIdList,
                                                                   @Param("itemCode") String itemCode);

    /**
     * 查询某市的幼儿园某班平均分数
     *
     * @param classType          班级类型
     * @param kindergartenIdList 幼儿园id集合
     * @param batchCode          批次编号
     * @param categoryIdList     分类id集合
     * @param itemCode           项目编码
     * @return java.util.List<com.xinyilu.system.domain.vo.testItemAvgScore.TestItemAvgScoreClassVO>
     **/
    List<TestItemAvgScoreClassVO> selectTestItemAvgScoreCityList(@Param("classType") String classType,
                                                                 @Param("kindergartenIdList") List<Long> kindergartenIdList,
                                                                 @Param("batchCode") String batchCode,
                                                                 @Param("categoryIdList") List<Long> categoryIdList,
                                                                 @Param("itemCode") String itemCode);

    /**
     * 查询所有的个人成绩id
     *
     * @param studentId      学生id
     * @param testItemIdList 项目id集合
     * @param batchCode      批次编号
     * @return 信息集合
     **/
    List<Long> getAllTestItemId(@Param("studentId") Long studentId,
                                @Param("testItemIdList") List<Long> testItemIdList,
                                @Param("batchCode") String batchCode);


    /**
     * 删除录入管理的个人成绩
     *
     * @param testItemIdList 项目id集合
     * @return int
     **/
    int deleteTestItemById(@Param("testItemIdList") List<Long> testItemIdList);

    /**
     * 查询所有的个人成绩id
     *
     * @param batchId   批次id
     * @param batchCode 批次编号
     * @return java.util.List<java.lang.Long>
     **/
    List<ShowItemBatchScoreVO> getAllTestItemScoreInfo(@Param("batchId") Long batchId,
                                                       @Param("batchCode") String batchCode);

    /**
     * 批量插入个人成绩信息
     *
     * @param testItemScoreList 个人成绩信息集合
     * @return 数量
     */
    int insertTestItemScoreList(List<TestItemScore> testItemScoreList);

    /**
     * 修改个人成绩录入管理
     *
     * @param testItemScore 个人成绩录入管理
     * @return 结果
     */
    int updateTestItemScoreInfo(TestItemScore testItemScore);

    /**
     * 根据学生id和批次编号查询成绩信息
     *
     * @param studentId 学生id
     * @param batchCode 批次编号
     * @return java.util.List<java.lang.Long>
     **/
    List<ShowItemBatchScoreVO> getTestItemScoreByStudent(@Param("studentId") Long studentId,
                                                         @Param("batchCode") String batchCode);

    /**
     * 根据批次编号查询对应的批次项目信息
     *
     * @param batchCode 批次编号
     * @return 批次所绑定的测试项目信息
     */
    List<ItemStudentScoreDTO> getTestBatchItemInfoList(String batchCode);

    /**
     * 新增个人成绩录入管理
     *
     * @param testItemScore 个人成绩录入管理
     * @return 结果
     */
    int insertTestItemScoreInfo(TestItemScore testItemScore);


    /**
     * 根据学生的信息查询表中的信息自动匹配得分
     *
     * @param studentId 学生id
     * @return com.xinyilu.system.domain.vo.testItemAvgScore.TestStudentFractionVO
     **/
    TestStudentFractionVO getStudentFraction(@Param("studentId") Long studentId);

    /**
     * 除体重信息以外集合信息
     *
     * @param testStudentFractionVO 除体重信息以外集合
     * @return java.util.List<com.xinyilu.system.domain.vo.testItemAvgScore.TestStudentFractionVO>
     **/
    List<TestStudentFractionVO> getTestTargetScoreFraction(TestStudentFractionVO testStudentFractionVO);


    /**
     * 测试体重集合
     *
     * @param testStudentFractionVO 体重信息集合
     * @return java.util.List<com.xinyilu.system.domain.vo.testItemAvgScore.TestStudentFractionVO>
     **/
    List<TestStudentFractionVO> getHeightWeight(TestStudentFractionVO testStudentFractionVO);

    /**
     * 国民体质测定评判等级信息表
     *
     * @return java.util.List<com.xinyilu.system.domain.nationalphysiquegrade.NationalPhysiqueGrade>
     **/
    List<NationalPhysiqueGrade> getNationalPhysiqueGradeList();


    /**
     * 获取动作发展检测接口列表  个人体质检测报告
     *
     * @param studentId 学生id
     * @param batchCode 批次编号
     * @param itemCode  项目编码
     * @return java.util.List<com.xinyilu.system.domain.vo.TestItemScoreinfoVO>
     **/
    List<ThisActionDevelopmentVO> selectThisActionDevelopmentVO(@Param("studentId") Long studentId, @Param("batchCode") String batchCode,
                                                                @Param("itemCode") String itemCode);


    /**
     * 运动处方库数据表
     *
     * @return java.util.List<com.xinyilu.system.domain.motionprescriptionlibrary.MotionPrescriptionLibraryVO>
     **/
    List<MotionPrescriptionLibraryVO> getMotionPrescriptionLibraryList();

    /**
     * 根据学生id和批次编号查询对应的处方
     *
     * @return java.util.List<com.xinyilu.system.domain.motionprescriptionlibrary.MotionPrescriptionLibraryVO>
     **/
    List<MotionPrescriptionLibraryAndVideoVO> getMotionLibraryAndVideoList();

    /**
     * 获取动作发展检测接口列表
     *
     * @param studentId 学生id
     * @param batchCode 批次编号
     * @param itemCode  项目编码
     * @return java.util.List<com.xinyilu.system.domain.vo.TestItemScoreinfoVO>
     **/
    int getThisActionDevelopmentCount(@Param("studentId") Long studentId, @Param("batchCode") String batchCode,
                                      @Param("itemCode") String itemCode);

    /**
     * 批量插入个人成绩信息
     *
     * @param itemScore 个人成绩信息集合
     * @return 数量
     */
    int importTestItemScoreList(List<ImportTestProjectScoresDTO> itemScore);

    /**
     * 根据幼儿园查询学生班级信息
     *
     * @param kindergartenId 幼儿园id
     * @return StudentInfo
     */
    List<StudentInfo> selectStudentIdByKindergartenId(@Param("kindergartenId") Long kindergartenId);

    /**
     * 根据批次编号和学生编号查询成绩信息
     *
     * @param batchCode  批次编号
     * @param studentIds 学生id
     * @return ImportTestProjectScoresDTO
     */
    List<ImportTestProjectScoresDTO> selectTestItemScore(@Param("batchCode") String batchCode, @Param("studentIds") List<Long> studentIds);

    /**
     * 根据班级批次查询同意测成绩信息
     *
     * @param studentIds 学生
     * @param classId    班级
     * @param batchCode  批次
     * @return TestItemScore
     */
    List<TestItemScoreUpdateVO> selectTestItemScoresByStudentIds(@Param("studentIds") List<Long> studentIds, @Param("classId") Long classId, @Param("batchCode") String batchCode);
}
