package com.tofly.xrtygis.custom.service;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.tofly.xrtygis.custom.entity.dto.TablelinkUserDto;
import com.tofly.xrtygis.custom.entity.dto.TablelinkpipeDto;
import com.tofly.xrtygis.custom.entity.marketing.CustomerWaterVo;
import com.tofly.xrtygis.entity.vo.*;

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

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

    /**
     * 确认水表是否为总表
     *
     * @param code 水表编号
     * @return Boolean
     */
    boolean isSumTable(String code);

    /**
     * 总表与管线绑定
     *
     * @param t 总表与管线关联表
     * @return Boolean
     */
    boolean bindLine(TablelinkpipeDto t);

    /**
     * 查询总表信息
     *
     * @return list
     */
    List<Map<String, Object>> selectSunTable();

    /**
     * 显示管线与表信息关联
     *
     * @param page page
     * @return page
     */
    Page<Map<String,Object>> viewTablePipe(Page page, String type, String likeStr);

    /**
     * 通过ID删除用户水表信息和绑定用户
     *
     * @param id id
     */
    String deleteTableById(Long id);

    /**
     * 总表管线确认
     *
     * @param codes 水表编号
     * @return boolean
     */
    boolean confirmTablePipe(String codes,String type);

    /**
     * 查询未关联客户信息
     *
     * @param page page
     * @param str  用户编号/用户地址/用户姓名
     * @return page
     */
    Page unaffiliatedCustomer(Page page, String str);

    /**
     * 用户关联总表
     *
     * @param dto dto
     * @return boolean
     */
    boolean userToTable(TablelinkUserDto dto);

    /**
     * 确认水表与总表
     *
     * @param codes 客户编号
     * @return boolean
     */
    boolean confirmTableUser(String tableId,String codes,String type);

    /**
     * 查询关联总表客户信息
     *
     * @param page page
     * @return page
     */
    Page associatedCustomer(Page page, String tableIds, String likeStr);

    /**
     * 查询关联总表客户信息
     *
     * @param tableIds 表id
     * @return list
     */
    List<Map<String,Object>> associatedCustomer(String tableIds, String likeStr);

    /**
     * 移除总表-客户关联
     *
     * @param ids ids
     * @return boolean
     */
    boolean removeUser(String tableId, String ids);

    /**
     * 客户-总表移动
     *
     * @param tableId 总表id
     * @param codes   客户编号
     * @return boolean
     */
    boolean moveUserTable(String tableId, String codes, String origTableId);

    /**
     * 总表换表
     *
     * @param oldId 旧表id
     * @param newId 新表id
     * @return boolean
     */
    boolean inTheTable(String oldId, String newId);

    /**
     * 设置小区名称
     *
     * @param name  小区名称
     * @param codes 水表编号
     * @return boolean
     */
    boolean setPlotName(String name, String codes);

    /**
     * 自动匹配
     * @return boolean
     */
    boolean autoMatch();

    /**
     * 获取添加进度
     * @return double
     */
    Double getInsertSchedule();

    /**
     * 查询总表用户的DMA分区绑定列表
     * @param page
     * @param dmaId
     * @param likeStr
     * @return
     */
    Page<ResultUserWaterMeterInfoVo> getTableDmaUserBindList(Page page, Long dmaId, String likeStr, String tableLikeStr);

    /**
     * 导出
     * @param dmaId
     * @param likeStr
     * @return
     */
    List<ResultUserWaterMeterInfoVo> getTableDmaUserBindList(Long dmaId,String likeStr, String tableLikeStr);
    /**
     * 查询未绑定总表的用户列表
     * @param page
     * @param likeStr
     * @return
     */
    Page<UserWaterMeterInfoVo> getTableUserBindList(Page page, String likeStr, String cbbmc, String cbpqLikeStr);


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

    /**
     * 停水区域查询 根据管线id列表其他模糊条件,获取对应水表用户
     * @param page
     * @param valves
     * @param likeStr
     * @return
     */
    Page<WaterStopAreaInfoVo> waterStopArea(Page page, String valves,String likeStr);

    /**
     * 用水监控 区域水量查看
     * @param page
     * @param lon
     * @param lat
     * @param strTime
     * @param endTime
     * @param code
     * @param likeStr
     * @return
     */
    Map<String, Object> getTableInArea(Page page, Double[] lon, Double[] lat, String strTime, String endTime, String code,String likeStr);

    /**
     * 用户历史用水列表
     * @param page
     * @param yhbh
     * @param startTime
     * @param endTime
     * @return
     */
    Page<CustomerWaterVo> useWaterHistory(Page page, String yhbh, String startTime, String endTime);

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

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

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

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

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

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

}
