package jnpf.personnels.service;

import jnpf.base.vo.PageListVO;
import jnpf.model.personnels.dto.analysis.FtbPersonnlesAnalysisDTO;
import jnpf.model.personnels.vo.analysis.FtbPersonnelsPeopleTransferRatioVO;
import jnpf.model.personnels.vo.analysis.FtbPersonnelsPostAdjustmentDetailsVO;
import jnpf.model.personnels.vo.analysis.FtbPersonnelsShopAdjustmentDetailsVO;
import jnpf.model.personnels.vo.analysis.FtbPersonnlesBrainShopAdjustmentVO;

import java.io.IOException;
import java.util.List;

public interface FtbPersonnelChangesService {
    /**
     * 人事异动调店人数同比环比
     */
    FtbPersonnlesBrainShopAdjustmentVO getBrainDrainCorrectRateShopAdjustment(FtbPersonnlesAnalysisDTO dto);

    /**
     * 人事异动调岗人数同比环比
     */
    FtbPersonnlesBrainShopAdjustmentVO getBrainDrainCorrectRateTransferPost(FtbPersonnlesAnalysisDTO dto);

    /**
     * 获取正则化存储维度调整后的店铺人员信息比例
     * <p>
     * 该方法根据提供的数据分析 DTO，计算并返回经过正则化处理和店铺维度调整后的人员信息比例
     * 主要用于数据分析和报表展示，以帮助理解店铺人员构成的比例关系
     *
     * @param dto 数据分析 DTO，包含进行分析所需的参数和条件
     * @return 返回一个 PageListVO，包含每个店铺经过正则化和维度调整后的人员信息比例
     */
    List<FtbPersonnelsPeopleTransferRatioVO> getRegularizationStoreDimensionShopAdjustment(FtbPersonnlesAnalysisDTO dto);

    /**
     * 获取人员标准化维度下的调动岗位比例信息
     * <p>
     * 此方法根据传入的分析维度条件，计算并返回人员在不同存储维度下的调动岗位比例
     * 主要用于数据分析，了解人员在不同维度（如部门、时间等）的岗位变动情况
     *
     * @param dto 人员分析条件传输对象，包含了分析所需的条件和参数
     * @return 返回一个 PageListVO，包含每个标准化存储维度下的人员调动比例信息
     */
    List<FtbPersonnelsPeopleTransferRatioVO> getRegularizationStoreDimensionTransferPost(FtbPersonnlesAnalysisDTO dto);

    /**
     * 调店人数分布列表
     */
    PageListVO<FtbPersonnelsShopAdjustmentDetailsVO> shopAdjustmentDetails(FtbPersonnlesAnalysisDTO dto);

    /**
     * 调店人数分布列表导出
     */
    void shopAdjustmentDetailsExport(FtbPersonnlesAnalysisDTO dto) throws IOException;

    /**
     * 调岗人数分布列表
     */
    PageListVO<FtbPersonnelsPostAdjustmentDetailsVO> postAdjustmentDetails(FtbPersonnlesAnalysisDTO dto);

    /**
     * 调岗人数分布列表导出
     */
    void postAdjustmentDetailsExport(FtbPersonnlesAnalysisDTO dto) throws IOException;
}
