package jnpf.personnels.service;

import jnpf.model.common.PayRollJsonItem;
import jnpf.model.personnels.dto.salary.FtbPersonnelRosterSalaryHistoryDTO;
import jnpf.model.personnels.dto.salary.FtbPersonnelsSalaryInfo;
import jnpf.model.personnels.dto.salary.FtbPersonnelsSalaryTemporaryStorageCreatDto;
import jnpf.model.personnels.po.FtbPersonnelsStaffRoster;
import jnpf.model.personnels.vo.salary.FtbPersonnelRosterSalaryVO;
import jnpf.model.personnels.vo.salary.FtbPersonnelsSalaryTemporaryStorageVo;
import jnpf.model.personnels.vo.salary.UserInfoWithSalary;

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

/**
 * @Title: 薪酬对接
 * @Author: peng.hao
 * @create: 2024/5/22:14:56
 */
public interface FtbPersonnelsSalaryService {
    /**
     * 保存薪酬信息
     *
     * @param salaryList    更改list
     * @param userId        用户id
     * @param date          生效时间
     * @param userInfoWithSalary       用户信息
     * @param updateType    更新类@型：0 重复入职 1-调薪，2-入职
     * @param remark        备注
     * @param operationType 操作标识 1：转正  0：其他  2: 调岗 3 晋升 4 入职 5 调薪 6 调动
     * @param isDelete  1: 作废，0：不作废 默认写写0
     * @param salaryType    调薪方式 1.加薪 2.降薪
     * @param payrollSequenceId 薪资顺序id
     */
    void  saveTheChangePayInformation(List<FtbPersonnelsSalaryInfo> salaryList,
                                      String userId,
                                      Date date,
                                      UserInfoWithSalary userInfoWithSalary,
                                      String updateType,
                                      String remark,
                                      String operationType,
                                      Integer isDelete,
                                      Integer salaryType,
                                      String payrollSequenceId);

    /**
     * 保存薪酬信息
     *
     * @param salaryList         更改list
     * @param userId             用户id
     * @param date               生效时间
     * @param userInfoWithSalary 用户信息
     * @param updateType         更新类@型：0 重复入职 1-调薪，2-入职
     * @param remark             备注
     * @param operationType      操作标识 1：转正  0：其他  2: 调岗 3 晋升 4 入职 5 调薪 6 调动 9 借调 10 借调返岗
     * @param isDelete           1: 作废，0：不作废 默认写写0
     * @param salaryType         调薪方式 1.加薪 2.降薪
     * @param payrollSequenceId  薪资顺序id
     */
    String saveTheChangePayInformation(List<FtbPersonnelsSalaryInfo> salaryList,
                                     String userId,
                                     Date date,
                                     UserInfoWithSalary userInfoWithSalary,
                                     String updateType,
                                     String remark,
                                     String operationType,
                                     Integer isDelete,
                                     Integer salaryType,
                                     String payrollSequenceId, String tenantId);

    /**
     *  获取薪酬变化历史(额外封装花名册部分信息)
     * @return 变化历史信息
     */
    List<FtbPersonnelRosterSalaryVO> getSalaryHistoryByUserId(FtbPersonnelRosterSalaryHistoryDTO dto);

    List<FtbPersonnelsSalaryInfo>  getTheCurrentPersonSSalary( String userId,
                                                          String rankId,
                                                          String postId);
    List<FtbPersonnelsSalaryInfo> innerGetTheCurrentPersonSSalary(FtbPersonnelsStaffRoster entity, String rankId, String postId) ;

    void regularizationRevoked(String userId);

    void creatSalaryTemporaryStorage(FtbPersonnelsSalaryTemporaryStorageCreatDto creatDto);

    void updateSalaryTemporaryStorage(FtbPersonnelsSalaryTemporaryStorageCreatDto creatDto);

    FtbPersonnelsSalaryTemporaryStorageVo querySalaryTemporaryStorage(String uerId, String configType);

    String whetherToVoidWages(String userId, List<PayRollJsonItem> beforeItem, String flag, Date changeDate);

    void removeUserAllSalary(String userId);

    void voidSalary(String userId, String date, String salaryRecordId);

    String lochCheck(String userId, Date lochStartTime, Date lochEndTime);

    List<Map<String, Object>> querySalaryIntersectionWithOtherBusiness(String userId, Date startData, Date endData);
}
