package com.dayou.service;
import com.dayou.dto.FinanceRealFundExportDTO;
import com.dayou.dto.FinanceRealNotClaimDTO;
import com.dayou.entity.FinanceRealFund;
import com.baomidou.mybatisplus.extension.service.IService;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.dayou.vo.*;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.springframework.web.multipart.MultipartFile;

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

/**
 * <p>
 * 财务实收款 服务类
 * </p>
 *
 * @author wucl
 * @since 2023-12-08
 */
public interface IFinanceRealFundService extends IService<FinanceRealFund> {

        Page<FinanceRealFundVO> selectPage(Page page, FinanceRealFund financeRealFund,String keyword);

        FinanceRealFund detail(Long id);

        Boolean add(FinanceRealFund financeRealFund);

        Boolean update(FinanceRealFund financeRealFund);

        Boolean delete(Long id);

        BigDecimal getNotClaimAmount(Long realFundId);

    Page<MajorProdOverdueVO> overdueMajor(MajorProdOverdueVO overdueVO, Page page);

    List<MajorProdOverdueVO> overdueMajorExport(MajorProdOverdueVO overdueVO);

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

    Page<SettleMajorProductionVO> majorMarketSettleProd(SettleMajorProductionVO settleVO, Page page,String keyword);

    List<SettleMajorProductionVO> majorMarketSettleExport(SettleMajorProductionVO production,Page page,String keyword);

    List<SettleMajorProductionVO> majorEvaluatorSettleExport(SettleMajorProductionVO production,Page page,String keyword);

    List<UserCommissionTotalAmountVO> majorEvaluatorCommission(UserCommissionTotalAmountVO vo);

    List<UserCommissionProdVO> majorEvaluatorCommissionDetail(UserCommissionProdVO vo);

    List<UserCommissionTotalAmountVO> majorEvaluatorTotalAmountExport(UserCommissionTotalAmountVO vo);

    List<UserCommissionProdVO> evaluatorCurUserDetailExport(UserCommissionProdVO vo);

    List<UserCommissionProdVO> evaluatorAllUserDetailExport(UserCommissionProdVO vo);

    List<UserCommissionTotalAmountVO> majorMarketCommission(UserCommissionTotalAmountVO vo);

    List<UserCommissionProdVO> majorMarketCommissionDetail(UserCommissionProdVO vo);

    List<UserCommissionTotalAmountVO> majorMarketTotalAmountExport(UserCommissionTotalAmountVO vo);

    List<UserCommissionProdVO> marketCurUserDetailExport(UserCommissionProdVO vo);

    List<UserCommissionProdVO> marketAllUserDetailExport(UserCommissionProdVO vo);

    Page<PersonalOverdueVO> overduePersonal(PersonalOverdueVO overdueVO, Page page);

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    List<PersonalOverdueVO> overduePersonalList(PersonalOverdueVO overdueVO);

    List<FinanceRealFundExportDTO> exportList(FinanceRealFund financeRealFund, String keyword,Page page);

    Page<FinanceRealFundVO> claimPage(Page page, FinanceRealFund financeRealFund, String keyword);

    Page<FinanceRealFundVO> realClaimed(Page page, FinanceRealFundVO vo, String keyword);

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

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