package com.tofly.xrtygis.custom.mapper;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.tofly.xrtygis.custom.entity.marketing.CustomerWaterVo;
import com.tofly.xrtygis.entity.Tablelinkuser;
import com.tofly.xrtygis.entity.vo.*;
import org.apache.ibatis.annotations.Select;
import org.springframework.data.repository.query.Param;

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

/**
 * 综合展示线上核对
 *
 * @author 泡泡
 */
public interface TheOnlineCheckMapper {

    /**
     * 是否为总表
     */
    @Select("select SID from TF_YWPN_WATERMETER_W where SID = #{code} and ISSUM = 1")
    String isSumTable(@Param("code") String code);

    /**
     * 查询总表信息
     *
     * @return list
     */
    @Select("select id,sid,address,x,y from TF_YWPN_WATERMETER_W where ISSUM = 1")
    List<Map<String, Object>> selectSumTableInfo();

    /**
     * 管线客户总表显示
     *
     * @param type 确认状态：0未确认、1已确认、2自动匹配
     * @param page page
     * @return pages
     */
    Page<Map<String,Object>> viewTablePipe(Page page,@Param("type") Short type,@Param("likeStr") String likeStr);

    List<Map<String,Object>> getDmaByTableId(Long waterMeterId);

    void deleteTableById(Long id);

    void deleteUserById(Long id);

    void deleteDmaWaterById(Long id);

    /**
     *
     * 查询未关联客户信息
     *
     * @param page page
     * @param str  str
     * @return page
     */
    Page<Map> unaffiliatedCustomer(Page page, @Param("str") String str);


    Page<Map> affiliatedCustomerPage(Page page, @Param("tableIds") String tableIds, @Param("likeStr") String likeStr);

    List<Map<String, Object>> affiliatedCustomer(@Param("tableIds") String tableIds, @Param("likeStr") String likeStr);

    boolean insertUserToTable(@Param("t") List<Tablelinkuser> t);

    boolean updatePlotName(@Param("name") String name,@Param("codes") List<String> codes);

    @Select("select address from TF_YWPN_WATERMETER_W where issum = 1 and id = #{id}")
    String getSumTableAddress(@Param("id") String id);

    @Select("select YHBH, SID\n" +
            "from TF_YWPN_WATERMETER_W w\n" +
            "where instr(ADDRESS, #{address}) > 0\n" +
            "  and ISSUM = 0\n" +
            "  and (select count(*) from TF_YWPN_TABLELINKUSER_W  t where w.SID = t.SID) = 0")
    List<Map<String, Object>> getMatchInfo(@Param("address") String address);

    @Select("select count(*) from TF_YWPN_TABLELINKUSER_W")
    Double getNowNum();

    /**
     * 获取已绑定分区的用户信息
     * @param page
     * @param dmaId
     * @param likeStr
     * @return
     */
    Page<ResultUserWaterMeterInfoVo> getTableDmaUserBindList(Page page, @Param("dmaId") Long dmaId, @Param("likeStr") String likeStr, @Param("tableLikeStr") String tableLikeStr);

    /**
     * 获取全部已绑定分区的用户信息
     * @param dmaId
     * @param likeStr
     * @return
     */
    List<ResultUserWaterMeterInfoVo> getTableDmaUserBindList(@Param("dmaId") Long dmaId, @Param("likeStr") String likeStr, @Param("tableLikeStr") String tableLikeStr);

    /**
     * 查询未绑定总表的用户列表
     * @param page
     * @param likeStr
     * @return
     */
    Page<UserWaterMeterInfoVo> getTableUserBindList(Page page, @Param("likeStr") String likeStr, @Param("cbbmc") String cbbmc, @Param("cbpqLikeStr") String cbpqLikeStr);

    /**
     * 通过用户编号获取所有虚拟总表的编号
     * @param userCode
     * @return
     */
    List<String> getTableListByUserCode(String userCode);

    /**
     * 查询用户数量
     * @return
     */
    Integer getTableUserListNum();

    Page<WaterStopAreaInfoVo> getWaterStopAreaPage(Page page, @Param("pipeIds") String pipeIds,@Param("likeStr")String likeStr);

    /**
     * 用水监控 区域水量查看
     * @param sbbhs
     * @param startTime
     * @param endTime
     * @param likeStr
     * @return
     */
    List<CustomerWaterVo> getCustomerWaterVoList(@Param("sbbhs") List<String> sbbhs, @Param("startTime")String startTime,@Param("endTime") String endTime,@Param("likeStr")String likeStr);

    /**
     * 用户用水历史
     * @param yhbh
     * @param startTime
     * @param endTime
     * @return
     */
    Page<CustomerWaterVo> getUseWaterHistoryPage(Page page,@Param("yhbh")String yhbh,@Param("startTime")String startTime,@Param("endTime") String endTime);

    /**
     * 获取营销客户信息
     * @param page
     * @param meterReadingArea
     * @param likeStr
     * @return
     */
    Page<UserWaterMeterInfoVo> getYxUserInfoPage(Page page,@Param("meterReadingArea")String meterReadingArea,@Param("yhbhs")String yhbhs,@Param("likeStr")String likeStr);

    /**
     * 获取营销缴费明细
     * @param page
     * @param
     * @param
     * @return
     */
    Page<ChargeDetailInfoVo> getYxChargeDetail(Page page, @Param("userId")Long userId);

    /**
     * 获取营销客户信息档案
     * @param page
     * @param
     * @param likeStr
     * @return
     */
    Page<ChargeUserInfoVo> getYxChargeUserInfo(Page page, @Param("likeStr")String likeStr, @Param("chargeArea")Long chargeArea, @Param("sex")String sex);

    /**
     * 获取营销客户信息档案列表
     * @param
     * @param
     * @param likeStr
     * @return
     */
    List<ChargeUserInfoVo> getYxChargeUserInfoList(@Param("likeStr")String likeStr, @Param("chargeArea")Long chargeArea, @Param("sex")String sex);

    /**
     * 获取抄表区域列表
     * @return
     */
    List<Map<String, Object>> getMeterReadingAreaList();

    /**
     * 通过总表ID获取分区级别
     * @return
     */
    List<Integer> getDmaLevelListByTableId(@Param("tableId")Long tableId, @Param("dmaId")Long dmaId);

}
