package cn.iocoder.yudao.module.system.service.loan;

import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.module.system.controller.admin.loan.vo.LoanPageReqVO;
import cn.iocoder.yudao.module.system.controller.admin.loan.vo.LoanSaveReqVO;
import cn.iocoder.yudao.module.system.dal.dataobject.loan.LoanDO;

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

/**
 * 借支管理 Service 接口
 *
 * @author 符溶馨
 */
public interface LoanService {

    /**
     * 创建借支管理
     *
     * @param createReqVO 创建信息
     */
    void createLoan(@Valid LoanSaveReqVO createReqVO);

    /**
     * 获得借支管理
     *
     * @param id 编号
     * @return 借支管理
     */
    LoanDO getLoan(Long id);

    /**
     * 获得借支管理分页
     *
     * @param pageReqVO 分页查询
     * @return 借支管理分页
     */
    PageResult<LoanDO> getLoanPage(LoanPageReqVO pageReqVO);


    /**
     * 根据用户编号获取借支管理
     * @param userId 用户编号
     * @param loanType 借支类型
     * @return 借支记录
     */
    LoanDO getByUserId(Long userId, Integer loanType);

    /**
     * 根据用户编号集合获取借支管理
     * @param userIds 用户编号集合
     * @param loanType 借支类型
     * @return 借支记录
     */
    List<LoanDO> getListByUserId(Collection<Long> userIds, Integer loanType);

    /**
     * 获取员工截止当前月份的工资借支余额
     * @param userId 用户编号集合
     * @param month 月份
     * @return 借支记录
     */
    List<LoanDO> getListByMonth(Collection<Long> userId, String month);
}