package cn.iocoder.yudao.module.relations.service.contract;


import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.module.relations.controller.admin.contract.vo.RelationsContractPageReqVO;
import cn.iocoder.yudao.module.relations.controller.admin.contract.vo.RelationsContractRespVO;
import cn.iocoder.yudao.module.relations.controller.admin.contract.vo.RelationsContractSaveReqVO;
import cn.iocoder.yudao.module.relations.dal.dataobject.contract.RelationsContractDO;

import javax.validation.Valid;
import java.util.List;

/**
 * 员工合同信息 Service 接口
 *
 * @author zhaopq
 */
public interface RelationsContractService {

    /**
     * 创建员工合同信息
     *
     * @param createReqVO 创建信息
     * @return 编号
     */
    Long createContractInfo(@Valid RelationsContractSaveReqVO createReqVO);

    /**
     * 更新员工合同信息
     *
     * @param updateReqVO 更新信息
     */
    void updateContractInfo(@Valid RelationsContractSaveReqVO updateReqVO);

    /**
     * 删除员工合同信息
     *
     * @param id 编号
     */
    void deleteContractInfo(Long id);

    /**
     * 获得员工合同信息
     *
     * @param id 编号
     * @return 员工合同信息
     */
    RelationsContractDO getContractInfo(Long id);

    /**
     * 通过ID获得工合同信息
     *
     * @param id
     * @return
     */
    RelationsContractRespVO getById(Long id);

    /**
     * 获得员工合同信息分页
     *
     * @param pageReqVO 分页查询
     * @return 员工合同信息分页
     */
    PageResult<RelationsContractDO> getContractInfoPage(RelationsContractPageReqVO pageReqVO);

    /**
     * 将已过期的合同，状态修改为失效
     * 新的合同生效后，将原合同信息添加到合同历史信息表中。
     *
     * @return 过期的合同数量
     */
    int effectiveContractInfo();

    /**
     * 根据员工ID获取合同信息列表
     *
     * 此方法用于查询特定员工相关的合同信息列表它提供了一种根据员工ID检索该员工所有相关合同的方式，
     * 使得用户可以在系统中查看和分析员工的合同情况
     *
     * @param employeeId 员工ID，用于定位特定员工的相关合同信息
     * @return 返回一个包含特定员工所有相关合同信息的列表
     */
    List<RelationsContractDO> getContractInfoList(Long employeeId);
}