package com.dayou.mapper;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.dayou.dto.FinanceRealFundExportDTO;
import com.dayou.dto.FinanceRealNotClaimDTO;
import com.dayou.entity.FinanceRealFund;
import com.dayou.dao.CustomBaseMapper;
import com.dayou.vo.*;
import org.apache.ibatis.annotations.Param;

import java.math.BigDecimal;
import java.util.List;

/**
 * <p>
 * 财务实收款 Mapper 接口
 * </p>
 *
 * @author wucl
 * @since 2023-12-08
 */
public interface FinanceRealFundMapper extends CustomBaseMapper<FinanceRealFund> {

    Page<FinanceRealFundVO> getPage(Page page, @Param("vo") FinanceRealFund vo,@Param("keyword") String keyword);

    Page<FinanceRealFundVO> claimPage(Page page, @Param("vo") FinanceRealFund vo,@Param("keyword")  String keyword ,@Param("userId") Long userId);

    BigDecimal getNotClaimAmount(@Param("realFundId") Long realFundId);

    Page<MajorProdOverdueVO> overdueMajor(Page page, @Param("overdueVO")MajorProdOverdueVO overdueVO);

    List<MajorProdOverdueVO> overdueMajorExport(@Param("overdueVO")MajorProdOverdueVO overdueVO);

    Page<SettleMajorProductionVO> majorEvaluatorSettleProd(Page page, @Param("settleVO") SettleMajorProductionVO settleVO,@Param("keyword") String keyword);

    Page<SettleMajorProductionVO> majorMarketerSettleProd(Page page, @Param("settleVO") SettleMajorProductionVO settleVO,@Param("keyword")String keyword);

    List<SettleMajorProductionVO> majorEvaluatorSettleExport(Page page, @Param("settleVO") SettleMajorProductionVO settleVO,@Param("keyword") String keyword);

    List<SettleMajorProductionVO> majorMarketSettleExport(Page page,@Param("settleVO") SettleMajorProductionVO settleVO,@Param("keyword") String keyword);

    List<UserCommissionTotalAmountVO> majorEvaluatorCommission(@Param("vo") UserCommissionTotalAmountVO vo);

    List<UserCommissionProdVO> majorEvaluatorCommissionDetail(@Param("vo") UserCommissionProdVO vo);

    List<UserCommissionTotalAmountVO> majorEvaluatorTotalAmountExport(@Param("vo")UserCommissionTotalAmountVO vo);

    List<UserCommissionProdVO> evaluatorUserDetailExport(@Param("vo")UserCommissionProdVO vo);

    List<UserCommissionTotalAmountVO> majorMarketCommission(@Param("vo") UserCommissionTotalAmountVO vo);

    List<UserCommissionProdVO> majorMarketCommissionDetail(@Param("vo")UserCommissionProdVO vo);

    List<UserCommissionTotalAmountVO> majorMarketTotalAmountExport(@Param("vo")UserCommissionTotalAmountVO vo);

    List<UserCommissionProdVO> marketUserDetailExport(@Param("vo")UserCommissionProdVO vo);

    /**
     * 资产评估人员提成计算
     * @param vo vo
     * @return List<UserCommissionTotalAmountVO>
     */
    List<UserCommissionTotalAmountVO> assetsEvaluatorCommission(@Param("vo") UserCommissionTotalAmountVO vo);

    /**
     * 资产评估人员提成计算详情
     * @param vo vo
     * @return List<UserCommissionTotalAmountVO>
     */
    List<UserCommissionProdAssetsVO> assetsEvaluatorCommissionDetail(@Param("vo") UserCommissionProdVO vo);

    /**
     * 资产评估人员合计导出
     * @param vo vo
     * @return List<UserCommissionTotalAmountVO>
     */
    List<UserCommissionTotalAmountVO> assetsEvaluatorTotalAmountExport(@Param("vo")UserCommissionTotalAmountVO vo);

    /**
     * 资产评估人员提成信息导出
     * @param vo vo
     * @return List<UserCommissionProdVO>
     */
    List<UserCommissionProdAssetsVO> assetsEvaluatorUserDetailExport(@Param("vo")UserCommissionProdVO vo);

    /**
     * 资产市场人员提成计算
     * @param vo vo
     * @return List<UserCommissionTotalAmountVO>
     */
    List<UserCommissionTotalAmountVO> assetsMarketCommission(@Param("vo") UserCommissionTotalAmountVO vo);

    /**
     * 资产市场人员提成计算详情
     * @param vo vo
     * @return List<UserCommissionProdVO>
     */
    List<UserCommissionProdVO> assetsMarketCommissionDetail(@Param("vo")UserCommissionProdVO vo);

    /**
     * 资产市场人员提成合计导出
     * @param vo vo
     * @return List<UserCommissionTotalAmountVO>
     */
    List<UserCommissionTotalAmountVO> assetsMarketTotalAmountExport(@Param("vo")UserCommissionTotalAmountVO vo);

    /**
     * 资产市场人员提成信息导出
     * @param vo vo
     * @return List<UserCommissionProdVO>
     */
    List<UserCommissionProdVO> assetsMarketUserDetailExport(@Param("vo")UserCommissionProdVO vo);

    /**
     * 资产收款逾期列表
     * @param overdueVO vo
     * @param page 分页参数
     * @return Page<MajorProdOverdueVO>
     */
    Page<AssetsProdOverdueVO> overdueAssets(Page page, @Param("overdueVO")AssetsProdOverdueVO overdueVO);

    /**
     * 资产收款逾期列表导出
     * @param overdueVO vo
     * @return Page<MajorProdOverdueVO>
     */
    List<AssetsProdOverdueVO> overdueAssetsExport(@Param("overdueVO")AssetsProdOverdueVO overdueVO);

    /**
     * 资产市场人员结算项目查询
     * @param settleVO vo
     * @param page 分页参数
     * @return Page<SettleAssetsProductionVO>
     */
    Page<SettleAssetsProductionVO> assetsMarketSettleProd(@Param("settleVO")SettleAssetsProductionVO settleVO, Page page, @Param("keyword") String keyword);

    /**
     * 资产市场人员结算项目导出
     * @param settleVO vo
     * @return List<SettleAssetsProductionVO>
     */
    List<SettleAssetsProductionVO> assetsMarketSettleExport(Page page,@Param("settleVO")SettleAssetsProductionVO settleVO,@Param("keyword") String keyword);

    /**
     * 资产评估人员结算项目查询
     * @param settleVO vo
     * @param page 分页参数
     * @return Page<SettleAssetsProductionVO>
     */
    Page<SettleAssetsProductionVO> assetsEvaluatorSettleProd(@Param("settleVO")SettleAssetsProductionVO settleVO, Page page,@Param("keyword") String keyword);

    /**
     * 资产评估人员结算项目导出
     * @param settleVO vo
     * @return List<SettleAssetsProductionVO>
     */
    List<SettleAssetsProductionVO> assetsEvaluatorSettleExport(Page page,@Param("settleVO")SettleAssetsProductionVO settleVO,@Param("keyword")String keyword);

    Page<PersonalOverdueVO> overduePersonal(Page page, @Param("overdueVO")PersonalOverdueVO overdueVO);

    List<PersonalOverdueVO> overduePersonalList(@Param("overdueVO") PersonalOverdueVO overdueVO);

    List<FinanceRealFundExportDTO> exportList(Page page,@Param("vo") FinanceRealFund vo,@Param("keyword") String keyword);

    Page<FinanceRealFundVO> realAmountClaimed(Page page, @Param("vo") FinanceRealFundVO vo,@Param("keyword") String keyword);


    List<FinanceRealFundExportDTO> realClaimedExport( @Param("vo")FinanceRealFundVO vo, @Param("keyword")String keyword);

    List<FinanceRealNotClaimDTO> financeRealFundNotClaimExport(@Param("vo") FinanceRealFundVO vo, @Param("keyword")String keyword);
}
