package com.xhpc.charging.station.mapper;

import com.xhpc.charging.station.dto.XhpcActivityDiscountDto;
import com.xhpc.common.domain.XhpcChargingStation;
import com.xhpc.common.domain.XhpcRate;
import com.xhpc.common.domain.XhpcRateModel;
import com.xhpc.common.domain.XhpcRateTime;
import com.xhpc.common.dto.XhpcRateTimeDto;
import org.apache.ibatis.annotations.Param;

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

/**
 * 电站Mapper接口
 *
 * @author yuyang
 * @date 2021-07-19
 */
public interface XhpcChargingStationMapper {

    /**
     * 查询电站
     *
     * @param chargingStationId 电站ID
     * @return 电站
     */
    XhpcChargingStation selectXhpcChargingStationById(Long chargingStationId);



    /**
     * 查询电站
     *
     * @param chargingStationName 电站名称
     * @return 电站
     */
    XhpcChargingStation selectXhpcChargingStationByName(String chargingStationName);
    /**
     * 查询电站列表
     *
     * @param name         电站名称
     * @param operatorName 运营商名称
     * @return 电站集合
     */
    List<Map<String, Object>> selectXhpcChargingStationList(@Param("operatorId")Long operatorId,@Param("chargingStationId")Long chargingStationId,@Param("name") String name, @Param("operatorName") String operatorName,@Param("logOperatorId")Long logOperatorId,@Param("type")Integer type,@Param("tenantId")String tenantId);

    /**
     * 新增电站
     *
     * @param xhpcChargingStation 电站
     * @return 结果
     */
    int insertXhpcChargingStation(XhpcChargingStation xhpcChargingStation);

    /**
     * 修改电站
     *
     * @param xhpcChargingStation 电站
     * @return 结果
     */
    int updateXhpcChargingStation(XhpcChargingStation xhpcChargingStation);

    /**
     * 删除电站
     *
     * @param chargingStationId 电站ID
     * @return 结果
     */
    int updateXhpcChargingStationById(Long chargingStationId);

    /**
     * 批量删除电站
     *
     * @param chargingStationIds 需要删除的数据ID
     * @return 结果
     */
    int updateXhpcChargingStationByIds(Long[] chargingStationIds);

    /**
     * 状态（0启用 1停用）
     *
     * @param status 0启用 1停用
     * @return 结果
     */
    void status(@Param("status") Integer status, @Param("chargingStationId") Long chargingStationId);


    /**
     * APP端、小程序是否可见
     *
     * @param clientVisible     app可见值
     * @param chargingStationId 场站id
     * @return 结果
     */
    void clientVisible(@Param("clientVisible") String clientVisible, @Param("chargingStationId") Long chargingStationId);

    /**
     * 合作的电站
     *
     * @param chargingStationId 电站ID
     * @return 电站
     */
    List<Map<String, Object>> stationInternetBlackList(Long chargingStationId);


    /**
     * 电站详情信息
     *
     * @param chargingStationId 电站ID
     * @return 电站
     */
    Map<String, Object> getXhpcChargingStationMessage(@Param("chargingStationId") Long chargingStationId);


    /**
     * 微信小程序电站列表
     *
     * @param name              电站名称
     * @param serviceFacilities 标签集合（服务设施）
     * @param code              城市id
     * @param longitude         经度
     * @param latitude          维度
     * @param clientVisible     微信小程序是否可见 2可见
     * @return
     */
    List<Map<String, Object>> getWXList(@Param("name") String name, @Param("serviceFacilities") List<String> serviceFacilities, @Param("code") Integer code, @Param("longitude") String longitude, @Param("latitude") String latitude, @Param("clientVisible") Integer clientVisible,@Param("date") String date,@Param("tenantId")String tenantId);


    /**
     * 根据code获取数据
     *
     * @param code              字典code
     * @param serviceFacilities 筛选条件
     * @return 电站
     */
    List<Map<String, Object>> getCode(@Param("code") String code, @Param("serviceFacilities") List<String> serviceFacilities);

    /**
     * 电站详情（站点详情）
     *
     * @param chargingStationId 电站ID
     * @return 电站
     */
    Map<String, Object> getWXXhpcChargingStationMessage(@Param("chargingStationId") Long chargingStationId, @Param("longitude") String longitude, @Param("latitude") String latitude);


    /**
     * 获取图片信息
     *
     * @param imgIds
     * @return
     */
    List<Map<String, Object>> getImageList(@Param("imgIds") List<String> imgIds);


    /**
     * 电站详情---价格详情
     *
     * @param chargingStationId 电站ID
     * @return 电站
     */
    List<Map<String, Object>> getWXXhpcRateTimeMassage(@Param("chargingStationId") Long chargingStationId);

    List<Map<String, Object>> getPlaceholderTimeMassage(@Param("chargingStationId") Long chargingStationId);

    Map<String, Object> getPlaceholderTime(@Param("date") String date, @Param("datchargingStationId") Long datchargingStationId);
    /**
     * 电站详情---终端列表
     *
     * @param chargingStationId 电站ID
     * @return 电站
     */
    List<Map<String, Object>> getWXXhpcTerminalMassage(@Param("chargingStationId") Long chargingStationId);


    int getCountXhpcChargingStation(@Param("tenantId") String  tenantId);

    /**
     * 添加费率模型
     */
    int insertXhpcRateModel(XhpcRateModel xhpcRateModel);

    /**
     * 添加场站信息
     */
    int insertxhpcChargingStation(XhpcChargingStation xhpcChargingStation);

    /**
     * 添加费率
     */
    int insertXhpcRate(XhpcRate xhpcRate);


    /**
     * 添加费率时段
     */
    int insertXhpcRateTime(XhpcRateTime xhpcRateTime);


    /**
     * 返回费率
     */
    List<Map<String, Object>> getXhpcRateList(@Param("chargingStationId") Long chargingStationId);


    /**
     * 返回费率时段（设置时段）
     */
    List<Map<String, Object>> getXhpcRateTimeTypeList(@Param("chargingStationId") Long chargingStationId, @Param("type") Integer type);


    /**
     * 今日充电量、今日充电用户、今日充电次数
     */
    Map<String, Object> getXhpcRateTimeOrderStatistics(@Param("chargingStationId") Long chargingStationId,@Param("createTime")String createTime);

    /**
     * 删除之前的费率
     *
     * @param chargingStationId
     * @return
     */
    int updateXhpcRate(@Param("chargingStationId") Long chargingStationId);

    /**
     * 删除之前的费率时段
     *
     * @param chargingStationId
     * @return
     */
    int updateXhpcRateTime(@Param("chargingStationId") Long chargingStationId);

    /**
     * 根据场站id获取桩编号
     *
     * @param chargingStationId
     * @return
     */
    Set<String> getXchargingPileList(@Param("chargingStationId") Long chargingStationId);

    /**
     * 按照没30分钟为一段进行分组
     *
     * @param chargingStationId
     * @return
     */
    List<Map<String, Object>> getXhpcRateTimeNumber(@Param("chargingStationId") Long chargingStationId);

    /**
     * 修改桩的计费模型id
     * @param chargingStationId
     */
    void updateXhpcChargingPile(@Param("chargingStationId") Long chargingStationId,@Param("rateModelId") Long rateModelId);

    /**
     * 修改终端的计费模型id
     * @param chargingStationId
     */
    void updateXhpcTerminal(@Param("chargingStationId") Long chargingStationId,@Param("rateModelId") Long rateModelId);


    /**
     * 获取登陆用户信息
     */
    Map<String, Object> getLandUser(@Param("userId") Long userId);

    /**
     * 添加场站数据权限
     */
    void insertXhpcUserPrivilege(@Param("userId") Long userId,@Param("chargingStationId") Long chargingStationId);


    /**
     * 查询开始时间是否在活动中
     */
    List<XhpcActivityDiscountDto> getActivityDiscountTime(@Param("internetUserId")Long internetUserId, @Param("startTime")String startTime, @Param("userType")Integer userType, @Param("chargingStationId")Long chargingStationId, @Param("tenantId")String tenantId);


    //获取运营商信息
    Map<String, Object> getXhpcOperator(@Param("operatorId") Long operatorId);


    List<Map<String,Object>> getchargingMethodList();

    List<XhpcRateTimeDto> getReatTimeList(@Param("startTime")String startTime, @Param("endTime")String endTime, @Param("rateModelId")Long rateModelId);

}
