package com.xinyilu.system.mapper.kindergarteninfo;

import com.xinyilu.system.domain.dto.KindergartenInfoDTO;
import com.xinyilu.system.domain.dto.ScoreExportDTO;
import com.xinyilu.system.domain.kindergarteninfo.KindergartenInfo;
import com.xinyilu.system.domain.systemarea.SysArea;
import com.xinyilu.system.domain.vo.kinderPhysiqueAnalysis.FirstCategoryScoreVO;
import com.xinyilu.system.domain.vo.kinderPhysiqueAnalysis.KinderCategoryScoreVO;
import com.xinyilu.system.domain.vo.kinderPhysiqueAnalysis.StudentAndKindergartenVO;
import com.xinyilu.system.domain.vo.kindergartenSideAnalysis.KindergartenSideAnalysisVO;
import com.xinyilu.system.domain.vo.kindergartenSideAnalysis.KindergartenTestItemVO;
import org.apache.ibatis.annotations.Param;

import java.util.List;


/**
 * 幼儿园信息管理Mapper接口
 *
 * @author jihan
 * @date 2022-07-28
 */
public interface KindergartenInfoMapper {
    /**
     * 查询幼儿园信息管理
     *
     * @param id 幼儿园信息管理主键
     * @return 幼儿园信息管理
     */
    public KindergartenInfo selectKindergartenInfoById(Long id);

    /**
     * 查询幼儿园信息管理列表
     *
     * @param kindergartenInfo 幼儿园信息管理
     * @return 幼儿园信息管理集合
     */
    public List<KindergartenInfoDTO> selectKindergartenInfoList(KindergartenInfoDTO kindergartenInfo);

    /**
     * 查询幼儿园
     *
     * @param kindergartenInfo 幼儿园信息管理
     * @return 幼儿园信息管理集合
     */
    public int selectKindergartenInfoCount(KindergartenInfoDTO kindergartenInfo);

    /**
     * 新增幼儿园信息管理
     *
     * @param kindergartenInfo 幼儿园信息管理
     * @return 结果
     */
    public int insertKindergartenInfo(KindergartenInfo kindergartenInfo);

    /**
     * 修改幼儿园信息管理
     *
     * @param kindergartenInfo 幼儿园信息管理
     * @return 结果
     */
    public int updateKindergartenInfo(KindergartenInfo kindergartenInfo);

    /**
     * 修改幼儿园园长
     *
     * @param kindergartenInfo 幼儿园信息
     * @return int
     */
    int updateKindergartenInfoUserId(KindergartenInfo kindergartenInfo);

    /**
     * 删除幼儿园信息管理
     *
     * @param id 幼儿园信息管理主键
     * @return 结果
     */
    public int deleteKindergartenInfoById(Long id);

    /**
     * 批量删除幼儿园信息管理
     *
     * @param ids 需要删除的数据主键集合
     * @return 结果
     */
    public int deleteKindergartenInfoByIds(Long[] ids);

    /**
     * 逻辑删除幼儿园信息管理
     *
     * @param ids 需要删除的数据主键集合
     * @return 结果
     */
    int updateKindergartenInfoByIds(Long[] ids);

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

    /**
     * 查询幼儿园每个学生某个测试项目成绩信息
     *
     * @param kindergartenId 幼儿园id
     * @param batchCode      批次编号
     * @return 测试项目成绩信息
     */
    List<KindergartenSideAnalysisVO> getKindergartenSideAnalysis(@Param("kindergartenId") Long kindergartenId,
                                                                 @Param("batchCode") String batchCode);

    /**
     * 查询幼儿园一级分类得分信息
     *
     * @param kindergartenId 幼儿园id
     * @param batchCode      批次信息
     * @param studentSex     学生性别
     * @param itemCode       测试项目编码
     * @return 幼儿园一级分类得分信息
     */
    List<KinderCategoryScoreVO> getFirstKinderCategoryScoreInfo(@Param("kindergartenId") Long kindergartenId,
                                                                @Param("batchCode") String batchCode,
                                                                @Param("studentSex") String studentSex,
                                                                @Param("itemCode") String itemCode);

    /**
     * 查询幼儿园一级分类得分信息(支持班级筛选)
     *
     * @return 幼儿园一级分类得分信息
     */
    List<KinderCategoryScoreVO> getItemCategoryScoreGroupByClassId(ScoreExportDTO scoreExportDTO);

    /**
     * 查询幼儿园一级分类得分信息(支持幼儿园筛选)
     *
     * @return 幼儿园一级分类得分信息
     */
    List<KinderCategoryScoreVO> getItemCategoryScoreGroupByKindergartenId(ScoreExportDTO scoreExportDTO);

    /**
     * 查询幼儿园每个分类得分信息
     *
     * @param kindergartenId 幼儿园id
     * @param batchCode      批次信息
     * @param studentSex     学生性别
     * @param itemCode       项目编码
     * @return 幼儿园每个分类得分信息
     */
    List<KinderCategoryScoreVO> getKinderCategoryScoreInfo(@Param("kindergartenId") Long kindergartenId,
                                                           @Param("batchCode") String batchCode,
                                                           @Param("studentSex") String studentSex,
                                                           @Param("itemCode") String itemCode);

    /**
     * 查询幼儿园每个分类得分信息(支持班级筛选)
     *
     * @return 幼儿园每个分类得分信息
     */
    List<KinderCategoryScoreVO> getKinderCategoryScoreInfoByClass(ScoreExportDTO scoreExportDTO);

    /**
     * 查询幼儿园每个分类得分信息(支持幼儿园筛选)
     *
     * @return 幼儿园每个分类得分信息
     */
    List<KinderCategoryScoreVO> getKinderCategoryScoreInfoByKindergarten(ScoreExportDTO scoreExportDTO);

    /**
     * 查询幼儿园下每个分类的总得分信息
     *
     * @param kindergartenId 幼儿园id
     * @param batchCode      批次编号
     * @param studentSex     学生性别
     * @param itemCode       项目编码
     * @return List<FirstCategoryScoreVO> 幼儿园得分信息
     */
    List<FirstCategoryScoreVO> getAvgKinderCategoryScoreInfo(@Param("kindergartenId") Long kindergartenId,
                                                             @Param("batchCode") String batchCode,
                                                             @Param("studentSex") String studentSex,
                                                             @Param("itemCode") String itemCode);

    /**
     * 查询每个分类的全市平均得分信息
     *
     * @param kindergartenId 幼儿园id
     * @param studentSex     学生性别
     * @return List<FirstCategoryScoreVO> 每个分类的全市平均得分集合
     */
    List<FirstCategoryScoreVO> getAvgCityCategoryScoreInfo(@Param("kindergartenId") Long kindergartenId,
                                                           @Param("studentSex") String studentSex);

    /**
     * 查询幼儿园园长手机号的数量
     *
     * @param phone 幼儿园园长手机号
     * @return int 幼儿园园长手机号的重复数量
     **/
    int getKindergartenPhoneCount(@Param("phone") String phone);

    /**
     * 查询幼儿园园长id的数量
     *
     * @param principalId 幼儿园园长id
     * @return int  幼儿园园长id的重复数量
     **/
    int getKindergartenPrincipalIdCount(@Param("principalId") Long principalId);

    /**
     * 根据幼儿园id查询区域code
     *
     * @param kindergartenId 幼儿园id
     * @return 区域code
     */
    String getCityCodeByKindergartenId(@Param("kindergartenId") Long kindergartenId);

    /**
     * 根据区域编码查询当前区域下得所有幼儿园和学生信息
     *
     * @param areaIdList 区域id集合
     * @return 信息集合
     */
    List<StudentAndKindergartenVO> getStudentAndKindergartenCount(@Param("areaIdList") List<Long> areaIdList);

    /**
     * 查询所属市区下得各分类的总成绩信息
     *
     * @param kindergartenId 幼儿园id
     * @param batchCode      批次编号
     * @param studentSex     学生性别
     * @param itemCode       项目编码
     * @return List<FirstCategoryScoreVO> 幼儿园得分信息
     */
    List<FirstCategoryScoreVO> getAvgWholeCityCategoryScoreInfo(@Param("kindergartenId") List<Long> kindergartenId,
                                                                @Param("batchCode") String batchCode,
                                                                @Param("studentSex") String studentSex,
                                                                @Param("itemCode") String itemCode);

    /**
     * 查询所属市区下得各项目的总成绩信息 ：项目
     *
     * @param kindergartenId 幼儿园id
     * @param batchCode      批次编号
     * @param studentSex     学生性别
     * @param itemCode       项目编码
     * @return List<FirstCategoryScoreVO> 幼儿园得分信息
     */
    List<FirstCategoryScoreVO> getAvgWholeCityItemScore(@Param("kindergartenId") List<Long> kindergartenId,
                                                        @Param("batchCode") String batchCode,
                                                        @Param("studentSex") String studentSex,
                                                        @Param("itemCode") String itemCode);

    /**
     * 根据幼儿园id查询其所在的区域信息
     *
     * @param kindergartenId 幼儿园id
     * @return 区域信息
     */
    SysArea getSysAreaByKindergartenId(Long kindergartenId);

    /**
     * 根据区域编号集合查询当前区域下所有的幼儿园信息
     *
     * @param areaIdList 区域id集合
     * @return 信息集合
     */
    List<Long> getKindergartenIdListByArea(@Param("areaIdList") List<Long> areaIdList);

    /**
     * 查询学生名称
     *
     * @param kindergartenId 学生id
     * @param batchCode      批次编号
     * @param studentSex     性别
     * @param itemCode       项目编号
     * @return long
     */
    Long getStudentCount(@Param("kindergartenId") Long kindergartenId,
                         @Param("batchCode") String batchCode,
                         @Param("studentSex") String studentSex,
                         @Param("itemCode") String itemCode);

    /**
     * 查询学生名称(支持班级筛选)
     *
     * @return long
     */
    Long getItemCategoryStudentCount(ScoreExportDTO scoreExportDTO);

    /**
     * 查询幼儿园一级分类得分信息
     *
     * @param kindergartenId 幼儿园id
     * @param batchCode      批次信息
     * @param studentSex     学生性别
     * @param itemCode       测试项目编码
     * @return 幼儿园一级分类得分信息
     */
    List<KinderCategoryScoreVO> getFirstKinderCategoryScore(@Param("kindergartenId") Long kindergartenId,
                                                            @Param("batchCode") String batchCode,
                                                            @Param("studentSex") String studentSex,
                                                            @Param("itemCode") String itemCode);

    /**
     * 查询幼儿园一级分类信息
     *
     * @param itemCode 测试项目编码
     * @return 幼儿园一级分类得分信息
     */
    List<KinderCategoryScoreVO> getTestItemCategoryParentId(String itemCode);

    /**
     * 某幼儿园某批次八项成绩（体侧达标分析达标率）
     *
     * @param kindergartenId 幼儿园id
     * @param batchCode      批次编号
     * @param itemIdList     项目id集合
     * @param itemCode       项目编码
     * @return java.util.List<com.xinyilu.system.domain.vo.testItemAvgScore.TestItemAvgScoreClassVO>
     **/
    List<KindergartenTestItemVO> getTestItemList(@Param("kindergartenId") Long kindergartenId,
                                                 @Param("batchCode") String batchCode,
                                                 @Param("itemIdList") List<Long> itemIdList,
                                                 @Param("itemCode") String itemCode);


    /**
     * 查询幼儿园名称
     *
     * @param kindergartenName 幼儿园名称
     * @return KindergartenInfo
     */
    List<KindergartenInfo> getKindergartenNameList(String kindergartenName);


    /**
     * 查询幼儿园名称
     *
     * @param kindergartenName 幼儿园名称
     * @return KindergartenInfo
     */
    Long getKindergartenByKindergartenName(String kindergartenName);

    /**
     * 查询学生出生日期及单学生项目成绩
     *
     * @param kindergartenId 幼儿园id
     * @param batchCode      批次编号
     * @param studentSex     学生性别
     * @param itemCode       项目编码
     * @return KindergartenTestItemVO
     */
    List<KinderCategoryScoreVO> getStudentBirthDate(@Param("kindergartenId") Long kindergartenId,
                                                    @Param("batchCode") String batchCode,
                                                    @Param("studentSex") String studentSex,
                                                    @Param("itemCode") String itemCode);

    /**
     * 查询学生出生日期及分类项目成绩
     *
     * @param kindergartenId 幼儿园id
     * @param batchCode      批次编号
     * @param studentSex     学生性别
     * @param itemCode       项目编码
     * @return KindergartenTestItemVO
     */
    List<KinderCategoryScoreVO> getCategoryScoreAndStudentBirthDate(@Param("kindergartenId") Long kindergartenId,
                                                                    @Param("batchCode") String batchCode,
                                                                    @Param("studentSex") String studentSex,
                                                                    @Param("itemCode") String itemCode);
}
