package com.tofly.feesapi.sfgl.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.tofly.feesapi.common.core.dto.PageDto;
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 org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Options;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.mapping.StatementType;

import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.util.List;
import java.util.Map;

@Mapper
public interface YyQfmxMapper extends BaseMapper<YyQfmx> {

    //获取用户是否存在欠费 测试冲突合并
    int selectExistQf(@Param("yhbh") String yhbh);

    BigDecimal selectJmje(@Param("qfid") String qfid);

    long wyjqbjm(@Param("yhbh") String yhbh);

    @Select({"{call PROC_SLSFJS(#{cbkid},#{code,mode=OUT,jdbcType=INTEGER},#{message,mode=OUT,jdbcType=VARCHAR})}"})
    @Options(statementType = StatementType.CALLABLE)
    Map<Integer, String> sf(String cbkid);

    Map qfmxbgtj(@Param("filter") YyQfmxFilter filter);

    List<YyQfmxSelect> getPageList(
            @Param("filter") YyQfmxFilter filter,
            @Param("sfbz") String sfbz,
            @Param("chbz") String chbz);

    PageDto<YyQfmxSelect> getPageList(PageDto page,
                                      @Param("filter") YyQfmxFilter filter,
                                      @Param("sfbz") String sfbz,
                                      @Param("chbz") String chbz);



    List<YyQfmxSelect> getPageListByKhbm(@Param("filter") YyQfmxFilter filter,
                                         @Param("sfbz") String sfbz,
                                         @Param("chbz") String chbz);

    PageDto<YyQfmxSelect> getPageListByKhbm(PageDto page,
                                            @Param("filter") YyQfmxFilter filter,
                                            @Param("sfbz") String sfbz,
                                            @Param("chbz") String chbz);

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


    /**
     * 结转汇总明细统计
     */
    List<YyQfmxJzhzSelect> getJzhztjList(@Param("filter") JzhztjSeachFilter filter,
                                         @Param("sfbz") String sfbz, @Param("chbz") String chbz, @Param("tag") String tag);

    YyQfmxSelectCount getPageCount(@Param("filter") YyQfmxFilter filter, @Param("sfbz") String sfbz, @Param("chbz") String chbz);

    /**
     * 用水性质统计（非补差）
     */
    List<YySjStat> sjStat(@Param("filter") YyQfmxStatFilter filter, @Param("tag") String tag, @Param("cwrq") String cwrq);

    /**
     * 用水性质阶梯统计（非补差）
     */
    List<YySjStat> sjjtStat(@Param("filter") YyQfmxStatFilter filter, @Param("tag") String tag, @Param("cwrq") String cwrq, @Param("sjbm") String sjbm);

    /**
     * 补差统计
     */
    BigDecimal bcStat(@Param("filter") YyQfmxStatFilter filter);

    BigDecimal qtStat(@Param("filter") YyQfmxStatFilter filter,
                      @Param("flag") String flag);

    YyStat stat(@Param("filter") YyQfmxStatFilter filter);

    List<Map> getqfsjmx(@Param("qfid") String qfid);

    PageDto<YyQfmxFytzSelect> fytzpage(PageDto pageDto, @Param("filter") FytzFilter filter);

    PageDto<Map> fytzpage2(PageDto pageDto, @Param("filter") FytzFilter filter);

    PageDto<QftjabsSelect> qftjabs(PageDto pageDto, @Param("filter") QftjSeachFilter filter);

    List<QftjabsSelect> qftjabs(@Param("filter") QftjSeachFilter filter);

    QftjabsSelectCount qftjabsCount(@Param("filter") QftjSeachFilter filter);


    PageDto<QftjSelect> qftj(PageDto pageDto, @Param("filter") QftjSeachFilter filter);


    QftjSelectCount qftjCount(@Param("filter") QftjSeachFilter filter);

    Map qftjhj(@Param("filter") QftjSeachFilter filter);

    List<QftjSelect> qftj(@Param("filter") QftjSeachFilter filter);

    PageDto<YsqdSelect> ysqd(PageDto pageDto, @Param("filter") QftjSeachFilter filter);

    List<YsqdSelect> ysqd(@Param("filter") QftjSeachFilter filter);

    List<LjftjSelect> wsljf(@Param("filter") LjftjFilter filter);

    List<LjftjSelect> ysljf(@Param("filter") LjftjFilter filter);

    List<LjftjSelect> yisljf(@Param("filter") LjftjFilter filter);

    PageDto<YkfpmxtjSelect> getYcfpmxpage(PageDto pageDto, @Param("filter") YkfpmxtjFilter filter);

    YkfpmxtjPageSelect getYcfpmxhj(@Param("filter") YkfpmxtjFilter filter);

    List<YkfpmxtjSelect> getYcfpmxpage(@Param("filter") YkfpmxtjFilter filter);

    List<LjfjmVo> ljfjm(@Param("dto") LjfjmDto dto);

    PageDto<QfmxbgtjVo> qfmxbgPage(PageDto pageDto, @Param("filter") QfmxbgtjDto filter);

    List<QfmxbgtjVo> qfmxbgPageList(@Param("filter") QfmxbgtjDto filter);

    PageDto<FylrtjVo> fylrtjPage(PageDto pageDto, @Param("filter") FylrtjDto filter);

    List<FylrtjVo> fylrtjPageList(@Param("filter") FylrtjDto filter);

    BigDecimal getqmjyje(@Param("cwrq") String cwrq, @Param("typeid") String typeid);

    BigDecimal getbckj(@Param("sfrqStart") LocalDateTime sfrqStart, @Param("sfrqEnd") LocalDateTime sfrqEnd);

    BigDecimal getbcyeandtf(@Param("sfrqStart") LocalDateTime sfrqStart, @Param("sfrqEnd") LocalDateTime sfrqEnd, @Param("istf") String istf);

    List<YyHslStat> hslStatDt(@Param("filter") FyhslFilter filter, @Param("tag") String tag, @Param("ysyf") String ysyf);

    List<YyHslStatGd> hslStatGd(@Param("filter") FyhslFilter filter, @Param("tag") String tag, @Param("ysyf") String ysyf);

    List<Map> cxykjqfmx(@Param("filter") YyQfmxFilter filter);

    List<YstjbbVo> getMonthlyStatDetail(@Param("filter") YyQfmxStatFilter filter);

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

    /**
     * 报表管理-欠费统计
     */
    PageDto<YyqfmxSumSelect> getSumQfmx(PageDto pageDto, @Param("filter") YyQfmxFilter filter);

    /**
     * 营业厅欠费冲红
     */
    void yytkfch(@Param("data") YySspjxx chpjData, @Param("dto") PjchDto pjchDto, @Param("cwrq") String cwrq);

    /**
     * 更新营业厅欠费明细冲红标志
     */
    void updateQfmxChbz(@Param("qfid") String qfid, @Param("dto") PjchDto pjchDto);

    /**
     * 欠费冲红后新增欠费明细
     */
    void xzqfmx(@Param("qfid") String qfid, @Param("dto") PjchDto pjchDto, @Param("cwrq") String cwrq);

    /**
     * 预存抵扣添加欠费冲红记录
     */
    void ycdkch(@Param("data") YySspjxx yySspjxx, @Param("dto") PjchDto pjchDto, @Param("cwrq") String cwrq);

    long getQfyhs();

    List<Map> getYsbbmxList(@Param("filter") YysSsbbFilter filter);

    String getFirstCwrq(@Param("qflsbh") String qflsbh);
}
