package com.tofly.feesapi.sfgl.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.sun.istack.NotNull;
import com.tofly.feesapi.common.core.dto.PageDto;
import com.tofly.feesapi.common.core.vo.PageResult;
import com.tofly.feesapi.mxcx.entity.dto.YsartjFilter;
import com.tofly.feesapi.mxcx.entity.vo.YffkjmxcxSelect;
import com.tofly.feesapi.mxcx.entity.vo.YffycmxcxSelect;
import com.tofly.feesapi.mxcx.entity.vo.YsartjSelect;
import com.tofly.feesapi.sfgl.entity.YyQfmx;
import com.tofly.feesapi.sfgl.entity.YySspjxx;
import com.tofly.feesapi.sfgl.entity.dto.*;
import com.tofly.feesapi.sfgl.entity.vo.*;

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

/**
 * 收费明细
 */
public interface YySspjxxService extends IService<YySspjxx> {

    YySspjxxDailyStat dailyStat(YySspjxxDailyStatFilter filter);

    PageResult<YySspjxxSelect> getPage(PageDto pageDto, YySspjxxFilter filter, String sffl, String chbz);

    Map getZhcxPage(PageDto pageDto, YySspjxxFilter filter, String sffl, String chbz);

    /** 微信公众号-缴费-先扣后存 */
    Boolean wxgzhsfxkhc(@NotNull YySspjxxInsert insert);

    Boolean wxgzhsf(@NotNull YySspjxxInsert insert);

    /**
     *  营业厅收费-先扣后存
     */
    List<String> payByReduceFirst(@NotNull YySspjxxInsert insert) throws Exception;

    /**
     *  营业厅收费-先存后扣
     */
    List<String> payBysaveFirst(YySspjxxInsert insert) throws Exception;

    List<JrtjSelect> jrtj(String sfrybm);

    BigDecimal sbje(String yhbh);

    /**
     * 预付费收取
     */
    void addYffsq(String yhbh, BigDecimal scye, BigDecimal bcye, BigDecimal sszje, Date sfrq, String bz, int sfxh, String fffs, String sflsbh);

    /**
     * 余额转存
     */
    void addZyc(String yhbh, BigDecimal scye, BigDecimal bcye, BigDecimal zyc, Date sfrq, String bz, int sfxh, String fffs, String sflsbh);

    Integer pjCh(PjCh pjch);

    List<YySspjxxSelect> getList(YySspjxxFilter filter, String sffl, String chbz);

    YySspjxxSelectCount getPageList(PageDto pageDto, YySspjxxFilter filter, String sffl, String chbz);

    List<YySspjxxDailyStat2> dailyStat2(YySspjxxStatFilter filter);

    List<YySspjxxZhSfStat> zhSfStat(YySspjxxStatFilter filter);

    List<YySspjxxMonthlyStat> monthlyStat(YySspjxxStatFilter filter);

    List<YySspjxxMonthlyStat> monthlyStatSummary(YySspjxxStatFilter filter);

    YyStat stat(YySspjxxStatFilter filter);

    YffYeSeachSelectCount yffyeseach(PageDto pageDto, YffYeSeachFilter filter);

    List<YffYeSeachSelect> yffyeseachList(YffYeSeachFilter filter);

    List<String> plsfsave(@NotNull YySspjxxInsert insert);

    List<String>  yctf(YySspjxxyctj yySspjxxyctj);

    String printPj(String ssid, String dyfs);

    /*** 根据人员统计 */
    List<RyYySspjxxSelect> getRymxReport(YySspjxxDailyStatFilter filter);

    List<YySspjxxSelect> getDsftj(YySspjxxFilter filter);

    List<DsfhzSelect> getDsfHztj(YySspjxxFilter filter);


    List<SsybbSelect> getSssf(YySspjxxFilter filter);

    PageResult<YffycmxcxSelect> yffycmxcx(PageDto pageDto, YffYeSeachFilter filter);

    List<YffycmxcxSelect> yffycmxcxlist(YffYeSeachFilter filter);

    PageResult<YffkjmxcxSelect> yffkjmxcx(PageDto pageDto, YffYeSeachFilter filter);

    List<YffkjmxcxSelect> yffkjmxcxlist(YffYeSeachFilter filter);

    PageResult<PjmxSelectVo> getPjmxPage(PageDto pageDto, YySspjxxFilter filter);

    boolean fpbk(FpbkInsert insert);

    void yffzdkj();

    int yffkj(String yhbh, BigDecimal syje, List<YyQfmx> yyQfmxes);

    YySspjxxSelect1Count getQzhpjglPage(PageDto pageDto, YySspjxxFilter filter);

    /** 大户收费 */
    List<String> keyAccountCharge(YySspjxxInsert insert) throws Exception;

    /** 批量收费 */
    List<String> batchCharge(PlsfReq plsfReq);

    List<String> qtfysf(YySspjxxInsertQtfy insert) throws Exception;

    /** 报表管理-日汇总 */
    List<YySspjxxDailyStat2> getDailySummary(YySspjxxFilter filter);

    List<YySspjxxDailyStat1> getDailySummary1(YySspjxxFilter filter);

    /** 实收查询 */
    List<JzhztjDto> sscxby(YySspjxxFilter filter);

    public Map<String, String> getSjMap();

    BigDecimal getYszje();

    Map getDrystj();

    List<YsartjSelect> getYsartj(YsartjFilter filter);

    List<Map> getYssfzb(YsartjFilter filter);

    List<YsartjSelect> getYsaytj();

    YysSsbbSelectCount getYsSsbb(YysSsbbFilter filter);
}
