package jnpf.personnels.service;

import jnpf.base.vo.PageListVO;
import jnpf.model.personnels.dto.analysis.FtbPersonnlesAnalysisDTO;
import jnpf.model.personnels.vo.analysis.*;

import javax.servlet.http.HttpServletResponse;
import java.util.List;

/**
 * @Author: peng.hao
 * @create: 2024/10/14
 */
public interface FtbPersonnelsTurnoverAnalysisService {
    /**
     * 获取离职人员按月分布的信息
     *
     * @param dto 分析参数对象，包含查询条件等
     * @return 返回一个数据对象，包含按月分布的离职人员信息
     */
    FtbPersonnelsTurnoverWithAnalysisInfoVO getLeavePeopleMonth(FtbPersonnlesAnalysisDTO dto);

    /**
     * 获取按月分布的离职人员性别比例
     *
     * @param dto 分析参数对象，包含查询条件等
     * @return 返回一个数据对象，包含按月分布的离职人员性别比例信息
     */
    FtbPersonnelsTurnoverPeopleSexVO getLeavePeopleSexMonth(FtbPersonnlesAnalysisDTO dto);

    /**
     * 获取首月离职率信息
     *
     * @param dto 分析参数对象，包含查询条件等
     * @return 返回一个数据对象，包含首月离职率信息
     */
    FtbPersonnelsTurnoverFirstMonthLeaveRateVO getFirstMonthLeaveRate(FtbPersonnlesAnalysisDTO dto);

    /**
     * 获取首周离职率信息
     *
     * @param dto 分析参数对象，包含查询条件等
     * @return 返回一个数据对象，包含首周离职率信息
     */
    FtbPersonnelsTurnoverFirstWeekLeaveRateVO getFirstWeekLeaveRate(FtbPersonnlesAnalysisDTO dto);

    /**
     * 获取首年离职率信息
     *
     * @param dto 分析参数对象，包含查询条件等
     * @return 返回一个数据对象，包含首年离职率信息
     */
    FtbPersonnelsTurnoverFirstYearLeaveRateVO getFirstYearLeaveRate(FtbPersonnlesAnalysisDTO dto);

    /**
     * 获取新员工离职率信息
     *
     * @param dto 分析参数对象，包含查询条件等
     * @return 返回一个数据对象，包含新员工离职率信息
     */
    FtbPersonnelsTurnoverLeaveRateVO getNewEmployeeLeaveRate(FtbPersonnlesAnalysisDTO dto);

    /**
     * 获取离职原因分布信息
     *
     * @param dto 分析参数对象，包含查询条件等
     * @return 返回一个数据对象，包含离职原因分布信息
     */
    List<FtbPersonnelsTurnoverLeaveReasonDistributionVO> getLeaveReasonDistribution(FtbPersonnlesAnalysisDTO dto);

    /**
     * 获取离职人员岗位比例信息
     *
     * @param dto 分析参数对象，包含查询条件等
     * @return 返回一个数据对象，包含离职人员岗位比例信息
     */
    List<FtbPersonnelsTurnoverLeavePeoplePostRatioVO> getLeavePeoplePostRatio(FtbPersonnlesAnalysisDTO dto);

    /**
     * 获取离职人员年龄分布信息
     *
     * @param dto 分析参数对象，包含查询条件等
     * @return 返回一个数据对象，包含离职人员年龄分布信息
     */
    List<FtbPersonnelsTurnoverLeavePeopleAgeDistributionVO> getLeavePeopleAgeDistribution(FtbPersonnlesAnalysisDTO dto);

    /**
     * 获取离职人员年龄比例信息
     *
     * @param dto 分析参数对象，包含查询条件等
     * @return 返回一个数据对象，包含离职人员年龄比例信息
     */
    List<FtbPersonnelsTurnoverLeavePeopleAgeRatioVO> getLeavePeopleAgeRatio(FtbPersonnlesAnalysisDTO dto);

    /**
     * 离职率情况
     */
    FtbPersonnelsTurnoverRateVO ftbPersonnelsTurnoverAnalysisService(FtbPersonnlesAnalysisDTO dto);

    /**
     * 离职率对比
     */
    FtbPersonnelsTurnoverRateComparisonVO getLeaveRateComparison(FtbPersonnlesAnalysisDTO dto);

    /**
     * 获取离职率明细
     *
     * @param dto 分析参数对象，包含查询条件等
     * @return 返回离职率明细列表
     */
    PageListVO<FtbPersonnelsTurnoverDetailVO> getLeaveRateDetail(FtbPersonnlesAnalysisDTO dto);

    /**
     * 新员工离职比例明细
     *
     * @param dto 分析参数对象，包含查询条件等
     * @return 返回新员工离职比例明细 PageListVO
     */
    PageListVO<FtbPersonnelsTurnoverNewEmployeeDetailVO> getNewEmployeeLeaveRateDetail(FtbPersonnlesAnalysisDTO dto);

    /**
     * 新员工离职比例明细导出
     *
     * @param dto 分析参数对象
     * @param response HTTP 响应
     */
    void getNewEmployeeLeaveRateDetailExport(FtbPersonnlesAnalysisDTO dto, HttpServletResponse response);

    /**
     * 离职原因分布明细
     *
     * @param dto 分析参数对象，包含查询条件等
     * @return 返回离职原因分布明细 PageListVO
     */
    PageListVO<FtbPersonnelsTurnoverLeaveReasonDetailVO> getLeaveReasonDistributionDetail(FtbPersonnlesAnalysisDTO dto);

    /**
     * 离职原因分布明细导出
     *
     * @param dto 分析参数对象
     * @param response HTTP 响应
     */
    void getLeaveReasonDistributionDetailExport(FtbPersonnlesAnalysisDTO dto, HttpServletResponse response);

    /**
     * 各岗位人数占比明细
     *
     * @param dto 分析参数对象，包含查询条件等
     * @return 返回各岗位人数占比明细 PageListVO
     */
    PageListVO<FtbPersonnelsTurnoverPostRatioDetailVO> getLeavePeoplePostRatioDetail(FtbPersonnlesAnalysisDTO dto);

    /**
     * 各岗位人数占比明细导出
     *
     * @param dto 分析参数对象
     * @param response HTTP 响应
     */
    void getLeavePeoplePostRatioDetailExport(FtbPersonnlesAnalysisDTO dto, HttpServletResponse response);

    /**
     * 离职人员司龄分布明细
     *
     * @param dto 分析参数对象，包含查询条件等
     * @return 返回离职人员司龄分布明细 PageListVO
     */
    PageListVO<FtbPersonnelsTurnoverSeniorityDetailVO> getLeavePeopleAgeDistributionDetail(FtbPersonnlesAnalysisDTO dto);

    /**
     * 离职人员司龄分布明细导出
     *
     * @param dto 分析参数对象
     * @param response HTTP 响应
     */
    void getLeavePeopleAgeDistributionDetailExport(FtbPersonnlesAnalysisDTO dto, HttpServletResponse response);

    /**
     * 离职人员年龄分布占比明细
     *
     * @param dto 分析参数对象，包含查询条件等
     * @return 返回离职人员年龄分布占比明细 PageListVO
     */
    PageListVO<FtbPersonnelsTurnoverAgeDetailVO> getLeavePeopleAgeRatioDetail(FtbPersonnlesAnalysisDTO dto);

    /**
     * 离职人员年龄分布占比明细导出
     *
     * @param dto 分析参数对象
     * @param response HTTP 响应
     */
    void getLeavePeopleAgeRatioDetailExport(FtbPersonnlesAnalysisDTO dto, HttpServletResponse response);

    PageListVO<FtbPersonnelsTurnoverGenderDetailVO> breakdownOfGenderDistributionOfResignation(FtbPersonnlesAnalysisDTO dto);

    void breakdownOfGenderDistributionOfResignationExprot(FtbPersonnlesAnalysisDTO dto, HttpServletResponse response);
}
