package com.jeeplus.test.reimbursementAssess.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.jeeplus.test.reimbursementAssess.domain.dto.AssessReimbursementDTO;
import com.jeeplus.test.reimbursementsys.domain.dto.ReimbursementDTO;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * @author li-peike
 * @version 1.0.0
 * @ClassName ReimbursementSysMapper.java
 * @Description TODO
 * @createTime 2022年05月06日 10:40:00
 */
@Mapper
public interface AssessReimbursementSysMapper extends BaseMapper<AssessReimbursementDTO> {
    /**
     * 根据条件查询数据信息
     * @param page
     * @param reimbursement
     * @return
     */
    IPage<AssessReimbursementDTO> findList(Page<AssessReimbursementDTO> page, @Param("reimbursement")AssessReimbursementDTO reimbursement);

    /**
     * 根据条件查询数据信息
     * @param page
     * @param reimbursement
     * @return
     */
    IPage<AssessReimbursementDTO> queryAllList(Page<AssessReimbursementDTO> page, @Param("reimbursement")AssessReimbursementDTO reimbursement);


    List<AssessReimbursementDTO> getInvoiceList(AssessReimbursementDTO reimbursement);

    /**
     * 根据父id查询已收款的发票信息的首款额度总和
     * @param parentId
     * @return
     */
    String getReceiptInvoiceIncomeByReimbursementId(String parentId);

    /**
     * 根据业务id查询报销比例
     * @param id
     * @return
     */
    String getReimbursementRatioByReimbursementId(String id);

    /**
     * 根据父节点id查询发票信息
     * @param parentIdList
     * @return
     */
    List<AssessReimbursementDTO> getInvoiceByParentIdList(@Param("parentIdList")List<String> parentIdList);

    /**
     * 查询是否存在需要保存的发票信息
     * @param invoiceNumberList
     * @return
     */
    List<String> selectOldInvoiceNumber(@Param("invoiceNumberList") List<String> invoiceNumberList);

    /**
     * 查询是否存在已有的业务编号信息
     * @param businessCodeList
     * @return
     */
    List<String> selectOldBusinessCode(@Param("businessCodeList") List<String> businessCodeList);

    /**
     * 查询是否存在已有的业务编号信息（业务编码和年份）
     * @param businessCodeList
     * @return
     */
    List<AssessReimbursementDTO> selectOldBusinessCodeByInfo(@Param("businessCodeList") List<String> businessCodeList,@Param("year") String year);

    /**
     * 保存业务编号信息
     * @param businessCodeList
     */
    void insertBusinessCodeList(@Param("businessCodeList")List<AssessReimbursementDTO> businessCodeList);

    /**
     * 保存发票编号数据信息
     * @param invoiceInfoList
     */
    void insertInvoiceList(@Param("invoiceInfoList")List<AssessReimbursementDTO> invoiceInfoList);

    /**
     * 查询业务信息
     * @param id
     * @return
     */
    AssessReimbursementDTO queryBusinessById(String id);

    /**
     * 根据发票id查询业务具体信息
     * @param id
     * @return
     */
    AssessReimbursementDTO queryBusinessByInvoiceId(String id);

    /**
     * 查询发票信息
     * @param id
     * @return
     */
    AssessReimbursementDTO queryInvoiceById(String id);

    /**
     * 保存业务编码
     * @param reimbursement
     * @return
     */
    Integer saveBusiness(AssessReimbursementDTO reimbursement);

    /**
     * 保存发票收款时间
     * @param reimbursement
     * @return
     */
    Integer saveInvoice(AssessReimbursementDTO reimbursement);

    /**
     * 修改发票信息
     * @param reimbursement
     * @return
     */
    Integer modifyInvoice(AssessReimbursementDTO reimbursement);

    /**
     * 根据业务编码查询业务信息
     * @param reimbursement
     * @return
     */
    AssessReimbursementDTO getInfoByBusinessCode(AssessReimbursementDTO reimbursement);

    /**
     * 批量修改发票信息
     * @param invoiceInfoList
     */
    void updateInvoiceList(@Param("invoiceInfoList")List<AssessReimbursementDTO> invoiceInfoList);

    /**
     * 根据id删除对应业务信息（物理删除）
     * @param id
     */
    void deleteBusinessById(String id);

    /**
     * 根据id删除对应业务信息（物理删除）
     * @param idList
     */
    void deleteBusinessByIdList(@Param("idList")List<String> idList);

    /**
     * 删除业务信息（逻辑删除）
     * @param idList
     */
    void removeBusinessByIds(@Param("idList")List<String> idList);

    /**
     * 删除发票信息（逻辑删除）
     * @param idList
     */
    void removeBusinessByParentIds(@Param("idList")List<String> idList);

    /**
     * 删除发票信息（逻辑删除）
     * @param idList
     */
    void removeInvoiceByIds(@Param("idList")List<String> idList);

    /**
     * 查询该发票信息下是否存在有效的同级数据信息
     * @param id
     */
    String getValidBusinessIdByInvoiceId(String id);

    /**
     * 修改业务报销比例
     * @param reimbursement
     */
    void updateReimbursementRatio(AssessReimbursementDTO reimbursement);

    /**
     * 修改业务信息
     * @param reimbursement
     */
    int updateById(AssessReimbursementDTO reimbursement);

    /**
     * 根据发票id查询是否已经填写收款时间
     * @param idList
     * @return
     */
    List<AssessReimbursementDTO> getGatheringTimeInvoiceList(@Param("idList") List<String> idList);

    /**
     * 根据发票id查询发票信息
     * @param idList
     * @return
     */
    List<AssessReimbursementDTO> getInvoiceByIdList(@Param("idList") List<String> idList);

    /**
     * 根据该条发票信息查询同业务编号下的没有收款的发票信息
     * @param reimbursement
     * @return
     */
    List<AssessReimbursementDTO> getNotGatheringTimeInvoice(AssessReimbursementDTO reimbursement);

    void updateGatheringTime(@Param("idList") List<String> idList, @Param("reimbursement") AssessReimbursementDTO reimbursement);

    /**
     * 根据id修改业务信息的收款状态
     * @param id
     */
    void updateGatheringStatusById(String id);

    /**
     * 根据该条发票信息查询同业务编号下的没有收款的发票信息
     * @param reimbursement
     * @return
     */
    List<AssessReimbursementDTO> getNotGatheringTimeInvoiceBybusinessCodeId(AssessReimbursementDTO reimbursement);

    /**
     * 查询最后一个随机业务编码的编码序号
     * @return
     */
    String getLastRandomBusinessCodeIndex(String year);

    /**
     * 修改发票收款日期
     * @param reimbursement
     */
    int updateInvoiceGatheringTime(AssessReimbursementDTO reimbursement);
}
