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.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.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.util.Date;
import java.util.List;
import java.util.Map;

/**
 * 收费明细
 */
@Mapper
public interface YySspjxxMapper extends BaseMapper<YySspjxx> {

    List<YyFjFffsStat> fjFffsStat(@Param("filter") YySspjxxDailyStatFilter filter);

    List<YySjFffsStat> sjSffsStat(@Param("filter") YySspjxxDailyStatFilter filter, @Param("tag") String tag);

    PageDto<YySspjxxSelect> getPageList(PageDto pageDto,
                                    @Param("filter") YySspjxxFilter filter,
                                    @Param("sffl") String sffl,
                                    @Param("chbz") String chbz);

    List<YySspjxxSelect> getPageList(@Param("filter") YySspjxxFilter filter,
                                 @Param("sffl") String sffl,
                                 @Param("chbz") String chbz);



    List<YySspjxxSelect> getPageListByKhbm(@Param("filter") YySspjxxFilter filter,
                                           @Param("sffl") String sffl,
                                           @Param("chbz") String chbz);

    PageDto<YySspjxxSelect> getPageListByKhbm(PageDto pageDto,
                                              @Param("filter") YySspjxxFilter filter,
                                              @Param("sffl") String sffl,
                                              @Param("chbz") String chbz);

    YySspjxxSelectCount getPageCount(@Param("filter") YySspjxxFilter filter,
                                     @Param("sffl") String sffl,
                                     @Param("chbz") String chbz);


    /**
     * 今日统计
     */
    List<JrtjSelect> jrtj(@Param("sfrybm") String sfrybm);

    /**
     * 上笔金额
     */
    BigDecimal sbje(@Param("yhbh") String yhbh);

    /**
     * 实收总金额
     */
    BigDecimal sszje(@Param("sflsbh") String sflsbh);


    List<Map> yhsszje(@Param("sflsbh") String sflsbh);

    List<Map> yhkjje(@Param("sflsbh") String sflsbh);

    /**
     * 票据冲红
     *
     * @param params yhbh   用户编号
     *               sflsbh 收费流水编号
     *               sszje  实收金额
     *               chrybm 冲红人员编码
     *               chryxm 冲红人员姓名
     *               chsj   冲红时间
     *               sflsbh1 收费流水编号(用于冲红统一)
     *               result 是否成功
     *               <p>
     *               ***0（失败）;1（成功）
     *               --***2（收费金额不匹配）;
     *               --***3（不是最新缴费记录）;
     *               --***4（预付费余额已发生变化或剩余预付费不够退费）;
     *               --***5（收费转存的预付费不能单独退费）
     *               --***9（没有收费记录）
     *               --***-6生成电子发票（红票错误）
     */
    @Select({"{call PROC_SF_CH(#{yhbh}, #{sflsbh}, #{sszje}, #{chrybm}, #{chryxm}, #{chsj}, #{sflsbh1}, #{khbm}, #{result,mode=OUT,jdbcType=INTEGER})}"})
    @Options(statementType = StatementType.CALLABLE)
    void pjCh(Map<String, Object> params);




    List<YySspjxxDailyStat2> dailyStat2(@Param("filter") YySspjxxStatFilter filter);

    /**
     * 综合收费报表
     */
    List<YySspjxxZhSfStat> zhSfStat(@Param("filter") YySspjxxStatFilter filter);

    /**
     * 水价收费统计
     */
    List<YySjStat> sjStat(@Param("filter") YySspjxxStatFilter filter,
                          @Param("tag") String tag, @Param("cwrq") String cwrq);

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

    /**
     * 其它收费统计
     */
    BigDecimal qtStat(@Param("filter") YySspjxxStatFilter filter,
                      @Param("flag") String flag);

    /**
     * 用户缴费信息统计
     */
    YyStat stat(@Param("filter") YySspjxxStatFilter filter);

    PageDto<YffYeSeachSelect> yffyeseach(PageDto pageDto, @Param("filter") YffYeSeachFilter filter);

    YffYeSeachSelectCount yffyeseachCount(@Param("filter") YffYeSeachFilter filter);

    List<YffYeSeachSelect> yffyeseachList(@Param("filter") YffYeSeachFilter filter);

    int sspjSFLX(@Param("val") List<String> val);

    int sspjFFFS(@Param("val") List<String> val);

    int sspjJFQD(@Param("val") List<String> val);

    List<RySlSelect> getRyMxReport(@Param("filter") YySspjxxDailyStatFilter filter);

    List<RySlSelect> getRyMxChReport(@Param("filter") YySspjxxDailyStatFilter filter);

    List<RySlSelect> getRyMxTfReport(@Param("filter") YySspjxxDailyStatFilter filter);

    List<YySspjxxSelect> getDsftj(@Param("filter") YySspjxxFilter filter);

    List<DsfhzSelect> getDsfHztj(@Param("filter") YySspjxxFilter filter);

    List<SsybbSelect> getSssf(@Param("filter") YySspjxxFilter filter);

    List<SsybbFjfDto> getFjf(@Param("filter") YySspjxxFilter filter);

    PageDto<YffycmxcxSelect> yffycmxcx(PageDto pageDto, @Param("filter") YffYeSeachFilter filter);

    List<YffycmxcxSelect> yffycmxcx(@Param("filter") YffYeSeachFilter filter);

    PageDto<YffkjmxcxSelect> yffkjmxcx(PageDto pageDto, @Param("filter") YffYeSeachFilter filter);

    List<YffkjmxcxSelect> yffkjmxcx(@Param("filter") YffYeSeachFilter filter);

    PageDto<PjmxSelectVo> getPjmxPage(PageDto pageDto, @Param("filter") YySspjxxFilter filter);

    List<Map> kkjQfmx();

    PageDto<YySspjxxSelect1> getQzhpjglPage(PageDto pageDto, @Param("filter") YySspjxxFilter filter);

    YySspjxxSelect1Count getQzhpjglPageCount(@Param("filter") YySspjxxFilter filter);

    /** 日汇总报表 */
    List<YySspjxxDailyStat2> getDailySummary(@Param("filter") YySspjxxFilter filter);

    List<Map> getDailySummary_fsf(@Param("filter") YySspjxxFilter filter);

    List<Map> getDailySummary_sf(@Param("filter") YySspjxxFilter filter);

    /** 实收统计 */
    List<YyQfmxJzhzSelect> sscxby(@Param("filter") YySspjxxFilter filter, @Param("tag") String tag);

    /** 账户充值 */
    List<YjcyjFffsStat> getYjje(@Param("filter")YySspjxxDailyStatFilter filter);

    /** 账户扣减 */
    List<YjcyjFffsStat> getCyjje(@Param("filter")YySspjxxDailyStatFilter filter);

    /** 查询需要冲红的实收数据 */
    ChSspjData selectSspjData(@Param("dto") PjchDto pjchDto);

    /** 查询最新收费数据数 */
    Integer selectByZxsfrq(@Param("zxsfrq") Date zxsfrq, @Param("dto") PjchDto pjchDto);

    /** 查询最新收费的本次余额 */
    BigDecimal selectZxbcye(@Param("yhbh") String yhbh, @Param("sflsbh") String sflsbh, @Param("dxh") Integer dxh);

    /** 添加预存冲红记录 */
    void addYcChjl(@Param("dto") PjchDto pjchDto, @Param("cwrq") String cwrq, @Param("syje") BigDecimal syje);

    /** 更新冲红标志 */
    void gxchbz(@Param("dto") PjchDto pjchDto, @Param("sflsbh")String sflsbh);

    /** 查询同一批次冲红数量 */
    Integer selectCountBySflsbh(@Param("dto") PjchDto pjchDto);

    /** 添加预存冲红记录 */
    void kfhycch(@Param("data") YySspjxx chpjData, @Param("dto") PjchDto pjchDto, @Param("cwrq") String cwrq);

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

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

    /** 第一条预存冲红 */
    void firstYcch(@Param("data") YySspjxx yySspjxx, @Param("dto") PjchDto pjchDto, @Param("cwrq") String cwrq);

    BigDecimal getYszje();

    Map getDrystj();

    List<YsartjSelect> getYsartj(@Param("filter") YsartjFilter filter);

    List<Map> getYssfzb(@Param("filter") YsartjFilter filter);

    List<YsartjSelect> getYsaytj();

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