package com.xinyilu.system.mapper.testItem;

import com.xinyilu.system.domain.dto.ScoreExportDTO;
import com.xinyilu.system.domain.testItem.TestItems;
import com.xinyilu.system.domain.testLevel.TestItemLevel;
import com.xinyilu.system.domain.vo.BodyShapeItemScoreVO;
import com.xinyilu.system.domain.vo.CategoryItemInfoVO;
import com.xinyilu.system.domain.vo.TestItemsVO;
import com.xinyilu.system.domain.vo.physicalActionAnalysis.ItemFractionInfo;
import com.xinyilu.system.domain.vo.physicalActionAnalysis.PhysicalActionAnalysisVO;
import com.xinyilu.system.domain.vo.scoreExport.PhysicalActionScoreVO;
import com.xinyilu.system.domain.vo.testItemAvgScore.TestStudentFractionVO;
import org.apache.ibatis.annotations.Param;

import java.util.List;


/**
 * 测试项目Mapper接口
 *
 * @author jihan
 * @date 2022-08-02
 */
public interface TestItemsMapper {
    /**
     * 查询测试项目
     *
     * @param id 测试项目主键
     * @return 测试项目
     */
    public TestItemsVO selectTestItemsById(Long id);

    /**
     * 查询测试项目列表
     *
     * @param testItems 测试项目
     * @return 测试项目集合
     */
    public List<TestItemsVO> selectTestItemsList(TestItems testItems);

    /**
     * 新增测试项目
     *
     * @param testItems 测试项目
     * @return 结果
     */
    public int insertTestItems(TestItems testItems);

    /**
     * 修改测试项目
     *
     * @param testItems 测试项目
     * @return 结果
     */
    public int updateTestItems(TestItems testItems);

    /**
     * 删除测试项目
     *
     * @param id 测试项目主键
     * @return 结果
     */
    public int deleteTestItemsById(Long id);

    /**
     * 批量删除测试项目
     *
     * @param ids 需要删除的数据主键集合
     * @return 结果
     */
    public int deleteTestItemsByIds(Long[] ids);

    /**
     * 批量删除测试项目
     *
     * @param ids 需要删除的数据主键集合
     * @return 结果
     */
    int updateTestItemsByIds(Long[] ids);

    /**
     * 根据项目编号查询当前信息是否存在
     *
     * @param itemCode 项目编号
     * @param itemName 项目名称
     * @return 项目信息
     */
    int selectItemCodeInfo(@Param("itemCode") String itemCode, @Param("itemName") String itemName);

    /**
     * 查询身体和体重检测项目信息
     *
     * @param studentId    学生id
     * @param itemCodeList 项目编号集合
     * @param batchCode    批次编号
     * @return 身高和体重信息集合
     */
    List<BodyShapeItemScoreVO> getBodyShapeScoreInfo(@Param("studentId") Long studentId,
                                                     @Param("itemCodeList") List<String> itemCodeList,
                                                     @Param("batchCode") String batchCode);

    /**
     * 根据项目编号查询对应得区间得分
     *
     * @param itemCode 项目编号
     * @return 区间得分集合
     */
    List<TestItemLevel> getTestItemsLevelList(String itemCode);


    /**
     * 根据幼儿园id 班级类型 批次编号 查询某幼儿园某个班级的男女生成绩
     *
     * @param kindergartenId 幼儿园id
     * @param classType      班级类型
     * @param batchCode      批次编号
     * @param itemCode       项目编码
     * @return java.util.List<com.xinyilu.system.domain.vo.physicalActionAnalysis.PhysicalActionAnalysisVO>
     **/
    List<PhysicalActionAnalysisVO> getItemAvgScore(@Param("kindergartenId") Long kindergartenId,
                                                   @Param("classType") String classType,
                                                   @Param("batchCode") String batchCode,
                                                   @Param("itemCode") String itemCode);

    /**
     * 根据幼儿园id 班级类型 批次编号 查询男女项目得分信息
     *
     * @param kindergartenId 幼儿园id
     * @param classType      班级类型
     * @param batchCode      批次编号
     * @param itemIdList     测试项目id集合
     * @param itemCode       测试项目编码
     * @return 项目得分信息
     */
    List<ItemFractionInfo> getItemFractionInfo(@Param("kindergartenId") Long kindergartenId,
                                               @Param("classType") String classType,
                                               @Param("batchCode") String batchCode,
                                               @Param("itemIdList") List<Long> itemIdList,
                                               @Param("itemCode") String itemCode);

    /**
     * 根据项目id查询区间信息
     *
     * @param itemIdList 项目id集合
     * @return 区间信息集合
     */
    List<TestItemLevel> getTestItemLevelByItemId(@Param("itemIdList") List<Long> itemIdList);

    /**
     * 根据项目id查询信息
     *
     * @param id 项目id
     * @return com.xinyilu.system.domain.testItem.TestItems
     **/
    TestStudentFractionVO getItemById(Long id);

    /**
     * 根据幼儿园id 班级类型 批次编号 查询全市幼儿园班级的男女生平均成绩
     *
     * @param kindergartenIdList 幼儿园id
     * @param classType          班级类型
     * @param batchCode          批次编号
     * @param itemCode           测试项目编码
     * @return 数据结果
     **/
    List<PhysicalActionAnalysisVO> getItemCityAvgScore(@Param("kindergartenIdList") List<Long> kindergartenIdList,
                                                       @Param("classType") String classType,
                                                       @Param("batchCode") String batchCode,
                                                       @Param("itemCode") String itemCode);

    /**
     * 根据项目id查询对应的分类信息
     *
     * @param itemId 测试项目id
     * @return 分类信息集合
     */
    List<CategoryItemInfoVO> getCategoryItemInfo(Long itemId);


    /**
     * 根据幼儿园id,批次编号,班级信息 查询各项目男女得分信息(班级)
     *
     * @return 分类信息集合
     */
    List<PhysicalActionScoreVO> scoreExportByClass(ScoreExportDTO scoreExportDTO);

    /**
     * 根据幼儿园id,批次编号,班级信息 查询各项目男女得分信息(幼儿园)
     *
     * @return 分类信息集合
     */
    List<PhysicalActionScoreVO> scoreExportByKindergarten(ScoreExportDTO scoreExportDTO);

    /**
     * 根据各项目男女得分信息,查询班级信息
     *
     * @return 分类信息集合
     */
    List<Long> getClassByScoreExport(ScoreExportDTO scoreExportDTO);
    /**
     * 根据各项目男女得分信息,查询幼儿园信息
     *
     * @return 分类信息集合
     */
    List<Long> getKindergartenByScoreExport(ScoreExportDTO scoreExportDTO);
}
