package com.tofly.feesapi.sfgl.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.tofly.feesapi.bjgl.entity.YhCbkxx;
import com.tofly.feesapi.cbgl.entity.YyCblr;
import com.tofly.feesapi.common.core.dto.PageDto;
import com.tofly.feesapi.common.core.vo.PageResult;
import com.tofly.feesapi.mxcx.entity.dto.JkbsltjFilter;
import com.tofly.feesapi.mxcx.entity.dto.LjftjFilter;
import com.tofly.feesapi.mxcx.entity.dto.QftjSeachFilter;
import com.tofly.feesapi.mxcx.entity.dto.YkfpmxtjFilter;
import com.tofly.feesapi.mxcx.entity.vo.*;

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 com.tofly.feesapi.yhgl.entity.YhKhjbxx;

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

/**
 * 应收明细：欠费明细
 */
public interface YyQfmxService extends IService<YyQfmx> {

    /** 全部抄表录入算费生成应收明细 */
    void sf();

    void suanfeiTask();

    int Tasksf(List<YyCblr> cblrs);

    PageResult<YyQfmxSelect> getPage(PageDto pageDto, YyQfmxFilter filter, String sfbz, String chbz);

    Map qfmxbgtj(YyQfmxFilter filter);

    /** 按抄表本（册）算费生成应收明细 */
    String cbbSf(CbbSf cbbSf);

    /** 按用户算费生成应收明细 */
    String yhSf(YhSf yhSf);

    /** 水费补差 */
    boolean sfBc(SfBc sfBc);

    /** 水费测算 */
    SfJsJg sfJs(SfJs sfJs) throws Exception;

    SfJsJg sfCs(Sfcs sfcs);

    /** 应收汇总月报表（按月统计版） */
    List<YyQfmxMonthlyStat> monthlyStat(YyQfmxStatFilter filter) ;

    /** 应收汇总月报表（汇总版）*/
    List<YyQfmxMonthlyStat> monthlyStatSummary(YyQfmxStatFilter filter);

    /** 欠费统计报表 */
    List<YyQfmxMonthlyStat> monthlyStat1(YyQfmxStatFilter filter) ;

    /** 欠费统计报表（汇总版）*/
    List<YyQfmxMonthlyStat> monthlyStatSummary1(YyQfmxStatFilter filter);

    List<YyQfmxSelect> getList(YyQfmxFilter filter, String sfbz, String chbz);

    List<YyQfmxSelect1> getQfList(YyQfmxFilter filter, String sfbz, String chbz);

    YyQfmxSelectCount getPageList(PageDto page, YyQfmxFilter filter, String sfbz, String chbz);

    /** 结转汇总-应收统计 */
    List<JzhztjDto> jzhztj(JzhztjSeachFilter filter);
    List<JzhztjDto> jzhzqscx(JzhztjSeachFilter filter);

    /** 撤销算费 */
    boolean cxSf(String id);

    /** 欠费统计 */
    YyStat stat(YyQfmxStatFilter filter);

    SfJsJg znbsfJs(YhCbkxx cbkxx, YhKhjbxx khjbxx, BigDecimal sjsl) throws Exception;

    SfJsJg jtSfjs(Jtsfjs jtsfjs);

    String pjyl(pjYl pjyl);

    boolean ykfp(FpykInsert insert);

    String fytzsave(fylrDto dto,String gdzt);

    PageResult<YyQfmxFytzSelect> fytzpage(PageDto pageDto, FytzFilter filter);

    List<Map> getqfsjmx(String qfid);

    void ZfborZmb(String type, List<String> value);

    QftjabsSelectCount qftjabs(PageDto pageDto, QftjSeachFilter filter);

    List<QftjabsSelect> qftjabslist(QftjSeachFilter filter);

    QftjSelectCount qftj(PageDto pageDto, QftjSeachFilter filter);

    Map qftjhj(QftjSeachFilter filter);

    List<QftjSelect> qftjlist(QftjSeachFilter filter);

    PageResult<YsqdSelect> ysqd(PageDto pageDto, QftjSeachFilter filter);

    List<YsqdSelect> ysqdlist(QftjSeachFilter filter);

    List<LjftjSelect> wsljf(LjftjFilter filter);

    List<LjftjSelect> ysljf(LjftjFilter filter);

    List<LjftjSelect> yisljf(LjftjFilter filter);

    YyQfmx createHp(YyQfmx yyQfmx, Date chsj);

    String getFirstCwrq(String qflsbh);

    YkfpmxtjPageSelect getYcfpmxtj(PageDto pageDto, YkfpmxtjFilter filter);

    List<YkfpmxtjSelect> exportYcfpmxtj(YkfpmxtjFilter filter);

    List<LjfjmVo> ljfjm(LjfjmDto dto);

    PageResult<QfmxbgtjVo> qfmxbgPage(PageDto pageDto, QfmxbgtjDto dto);

    List<QfmxbgtjVo> qfmxbgPageList(QfmxbgtjDto dto);

    PageResult<FylrtjVo> fylrtjPage(PageDto pageDto, FylrtjDto dto);

    List<FylrtjVo> fylrtjPageList(FylrtjDto dto);

    Boolean qfmxbgPlcj(String gdlsbh);

    List<YcyetjVo> getYcyetj(YcyetjDto dto);

    List<FyhslSelect> getfyhslbb(FyhslFilter filter);

    /** 生成部分收费明细 */
    YyQfmx createByPartialCharges(YyQfmx original, List<Integer> chargeTypes, String sflsbh);

    /** 批量查询用户指定月份欠费明细 */
    List<YyQfmx> selectQfmxBatch(List<String> yhbhs, String cwrq);

    /** 水量抄表统计 */
    Sltjzj slcbtj(PageDto pageDto, QftjSeachFilter filter);

    /** 结转汇总-欠费查询 */


    /** 报表管理-欠费统计 */
    List<YstjbbVo> bbglqftj(YyQfmxStatFilter filter);

    /** 报表管理-应收统计 */
    List<YstjbbVo> bbglystj(YyQfmxStatFilter filter);

    Long checkQfmxIsCharged(YyQfmx yyQfmx);

    PageResult<YyqfmxSumSelect> getQfmxSumSelect(PageDto pageDto,YyQfmxFilter filter);

    /** 营业厅扣费冲红 */
    void yytkfch(YySspjxx chpjData, PjchDto pjchDto, String cwrq);

    /** 预存抵扣冲红 */
    void ycdkch(YySspjxx yySspjxx, PjchDto pjchDto, String cwrq);


    /*换表算费*/
    void hbsf(YyCblr cblr, YhCbkxx cbkxx) throws Exception;

    long getQfyhs();

    List<Map> getYsbbmxList(YysSsbbFilter filter);
}
