package jnpf.personnels.mapper;

import jnpf.model.personnels.po.FtbPersonnelsStaffEmploymentApply;
import jnpf.model.personnels.vo.analysis.*;
import org.apache.ibatis.annotations.Param;

import java.math.BigDecimal;
import java.util.List;

public interface FtbPersonnelsOverviewAnalysisMapper {

    /**
     * 根据指定月份和工作状态列表，计算该月份内处于任一给定工作状态的员工总数
     *
     */
    BigDecimal employeesEmployedInTheMonth(@Param("month") String month, @Param("workStatus") List<String> workStatus
            , @Param("userIds") List<String> userIds);

    /**
     * 在职员工列表
     *
     */
    List<PersonnelsOverviewEmployeesDetailsVO> employeesEmployedInTheMonthList(@Param("month") String month, @Param("workStatus") List<String> workStatus
            , @Param("userIds") List<String> userIds);

    /**
     * 在职员工司龄统计
     */
    BigDecimal numberOfDaysOfAge(@Param("userIds") List<String> userIds, @Param("month") String month, @Param("workStatus") List<String> workStatus);

    /**
     * 员工年龄
     */
    List<String> employeeAge(@Param("userIds") List<String> userIds, @Param("month") String month, @Param("workStatus") List<String> workStatus);

    /**
     * 性别分布
     */
    BigDecimal genderDistribution(@Param("month") String month, @Param("workStatus") List<String> workStatus
            , @Param("userIds") List<String> userIds, @Param("sex") String sex);

    /**
     * 性别分布列表
     */
    List<PersonnelsOverviewProportionDetailsVO> genderDistributionList(@Param("month") String month, @Param("workStatus") List<String> workStatus
            , @Param("userIds") List<String> userIds);

    /**
     * 员工状态占比
     */
    List<PersonnelsOverviewProportionVO> employeeStatusProportion(@Param("month") String month, @Param("userIds") List<String> userIds);

    /**
     * 员工状态占比列表
     */
    List<PersonnelsOverviewSituationDetailsVO> employeeStatusProportionList(@Param("month") String month, @Param("userIds") List<String> userIds);

    /**
     * 用工类型占比
     */
    List<PersonnelsOverviewProportionVO> proportionOfEmploymentTypes(@Param("month") String month, @Param("workStatus") List<String> workStatus, @Param("userIds") List<String> userIds);

    /**
     * 员工类型占比列表
     */
    List<PersonnelsOverviewTypeDetailsVO> proportionOfEmploymentTypesList(@Param("month") String month, @Param("workStatus") List<String> workStatus, @Param("userIds") List<String> userIds);

    /**
     * 学历占比
     */
    List<PersonnelsOverviewProportionVO> educationalBackground(@Param("month") String month, @Param("workStatus") List<String> workStatus, @Param("userIds") List<String> userIds);

    /**
     * 司龄分布
     */
    List<PersonnelsOverviewProportionVO> ageDistribution(@Param("month") String month, @Param("workStatus") List<String> workStatus, @Param("userIds") List<String> userIds);

    /**
     * 年龄分布
     */
    List<PersonnelsOverviewProportionVO> ageDistributionProportion(@Param("month") String month, @Param("workStatus") List<String> workStatus, @Param("userIds") List<String> userIds);

    /**
     * 岗位和组织占比
     */
    List<String> departmentHeadcountRatio(@Param("month") String month, @Param("workStatus") List<String> workStatus, @Param("userIds") List<String> userIds);

    /**
     * 工龄
     */
    List<BigDecimal> seniorityDistribution(@Param("month") String month, @Param("userIds") List<String> userIds,@Param("workStatus") List<String> workStatus);

    /**
     * 新人数
     *
     * @param startMonth
     * @param endMonth
     * @param userIds
     * @param timeRule
     * @return
     */
    BigDecimal queryTheNumberOfNewcomers(@Param("startMonth")String startMonth, @Param("endMonth")String endMonth, @Param("userIds") List<String> userIds, @Param("timeRule") Integer timeRule);

    /**
     * 进行保险购买分析
     * <p>
     * 根据指定月份、工作状态和用户ID列表，分析并返回人员概况比例信息
     * 此方法主要用于统计和分析特定条件下的保险购买情况，以帮助决策者了解保险覆盖情况
     *
     * @param month      用于分析的月份，格式为"yyyy-MM"
     * @param workStatus 工作状态列表，用于过滤分析对象
     * @param userIds    用户ID列表，指定需要分析的用户范围
     * @return 返回一个列表，包含根据条件分析得到的人员概况比例信息
     */
    List<PersonnelsOverviewProportionVO> insurancePurchaseAnalysis(@Param("formFieldId") String formFieldId, @Param("month") String month, @Param("workStatus") List<String> workStatus, @Param("userIds") List<String> userIds);

    List<String> queryTheNewcomerID(@Param("endMonth")String endMonth,  @Param("userIds") List<String> userIds,@Param("timeRule") Integer timeRule);

    List<FtbPersonnelsStaffEmploymentApply> queryTheNumberOfNewcomersList(@Param("startMonth")String startMonth, @Param("endMonth")String endMonth, @Param("userIds") List<String> userIds, @Param("timeRule") Integer timeRule);

    /**
     * 保险购买分析列表
     */
    List<PersonnelsOverviewInsuranceDetailsVO> insurancePurchaseAnalysisList(@Param("formFieldId") String formFieldId, @Param("month") String month, @Param("workStatus") List<String> workStatus, @Param("userIds") List<String> userIds);

    /**
     * 学历占比列表
     */
    List<PersonnelsOverviewEducationDetailsVO> educationalBackgroundList(@Param("month") String month, @Param("workStatus") List<String> workStatus, @Param("userIds") List<String> userIds);

    /**
     * 司龄分布占比列表
     */
    List<PersonnelsOverviewSeniorityDetailsVO> seniorityDistributionList(@Param("month") String month, @Param("workStatus") List<String> workStatus, @Param("userIds") List<String> userIds);

    /**
     * 年龄分布占比列表
     */
    List<PersonnelsOverviewAgeDetailsVO> ageDistributionProportionList(@Param("month") String month, @Param("workStatus") List<String> workStatus, @Param("userIds") List<String> userIds);

    /**
     * 司龄分布占比列表
     */
    List<PersonnelsOverviewCompanyDetailsVO> companyDistributionList(@Param("month") String month, @Param("workStatus") List<String> workStatus, @Param("userIds") List<String> userIds);
}
