/*
 * Copyright (c) 2024 codvision.com All Rights Reserved.
 */

package com.codvision.basic.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.codvision.auth.entity.excel.PersonExcel;
import com.codvision.basic.entity.Person;
import com.codvision.basic.entity.vo.PersonCountVO;
import com.codvision.basic.entity.vo.PersonPortraitVO;
import com.codvision.basic.entity.vo.PersonVO;
import org.apache.ibatis.annotations.Param;

import java.util.List;
import java.util.Map;

/**
 * @author KX
 */
public interface PersonMapper extends BaseMapper<Person> {


    /**
     * 分页通用查询
     * @param page 分页对象
     * @param paraMap 查询条件
     * @return 列表
     */
    IPage<PersonVO> getPageResult(IPage<Map<String, Object>> page, @Param("query") Map<String, Object> paraMap);

    /**
     * 根据房屋Code统计人员数
     * @param addressCode 地址编码
     * @return 人员数
     */
    PersonCountVO getPersonCountByPark(String addressCode);

    /**
     * 根据房屋Code统计人员数
     * @param addressCode 地址编码
     * @return 人员数
     */
    PersonCountVO getPersonCountByBuilding(String addressCode);

    /**
     * 根据房屋Code统计人员数
     * @param addressCode 地址编码
     * @return 人员数
     */
    PersonCountVO getPersonCountByHouse(String addressCode);

    /**
     * 根据地址编码查询人员列表
     * @param page 分页对象
     * @param addressCodes 地址编码
     * @return 人员列表
     */
    IPage<PersonVO> getPersonListByAddressCode(IPage<Map<String, Object>> page, @Param("addressCodes") String addressCodes);

    /**
     * 获取关联人员
     * @param addressId 地址id
     * @return 人员列表
     */
    List<PersonVO> getRelationPerson(int addressId);

    /**
     * 获取人员详情
     * @param id 人员id
     * @return 人员详情
     */
    PersonVO details(int id);

    /**
     * 统计性别画像
     * @param personIds 人员id
     * @return 性别画像
     */
    List<PersonPortraitVO> getSexCount(List<Integer> personIds);

    /**
     * 统计年龄画像
     * @param personIds 人员id
     * @return 年龄画像
     */
    Map<String, Object> getAgeCount(List<Integer> personIds);

    /**
     * 统计文化程度画像
     * @param personIds 人员id
     * @return 文化程度画像
     */
    List<PersonPortraitVO> getEducationCount(List<Integer> personIds);

    /**
     * 统计婚姻状况画像
     * @param personIds 人员id
     * @return 婚姻状况画像
     */
    List<PersonPortraitVO> getMaritalCount(List<Integer> personIds);

    /**
     * 统计人口类型画像
     * @param personIds 人员id
     * @return 人口类型画像
     */
    List<PersonPortraitVO> getPersonTypeCount(List<Integer> personIds);

    /**
     * 统计人口类型画像
     * @param personIds 人员id
     * @return 人口类型画像
     */
    List<PersonPortraitVO> getPersonTagCount(List<Integer> personIds);

    /**
     * 导出Excel
     * @param paraMap 查询条件
     * @return 人员列表
     */
    IPage<PersonExcel> excelExport(IPage<Object> page, @Param("query")Map<String, Object> paraMap);

    /**
     * 获取人员详情
     * @param id 人员id
     * @return 人员详情
     */
    PersonVO getPersonAndTag(int id);

    /**
     * 根据标签查询符合条件人员信息
     * @param oid 组织id
     * @param tagIdList 标签ids
     * @return List<Person>
     */
    List<Person> getPersonInspectionTarget(@Param("oid") Integer oid, @Param("tagIdList") String tagIdList);
}
