content: package com.genersoft.iot.vmp.gb28181.dao;
  
  import com.genersoft.iot.vmp.gb28181.bean.*;
  import org.apache.ibatis.annotations.*;
  import org.springframework.stereotype.Repository;
  
  import java.util.Collection;
  import java.util.List;
  import java.util.Set;
  
  @Mapper
  @Repository
  public interface PlatformChannelMapper {
  
  
      @Insert("<script> "+
              "INSERT INTO wvp_platform_channel (platform_id, device_channel_id) VALUES" +
              "<foreach collection='channelList'  item='item' separator=','>" +
              " (#{platformId}, #{item.gbId} )" +
              "</foreach>" +
              "</script>")
      int addChannels(@Param("platformId") Integer platformId, @Param("channelList") List<CommonGBChannel> channelList);
  
      @Delete("<script> "+
              "DELETE from wvp_platform_channel WHERE device_channel_id in " +
              "( select  temp.device_channel_id from " +
              "(select pgc.device_channel_id from wvp_platform_channel pgc " +
              "left join wvp_device_channel dc on dc.id = pgc.device_channel_id where dc.channel_type = 0 and dc.device_id  =#{deviceId} " +
              ") temp)" +
              "</script>")
      int delChannelForDeviceId(String deviceId);
  
      @Select("select d.*\n" +
              "from wvp_platform_channel pgc\n" +
              "         left join wvp_device_channel dc on dc.id = pgc.device_channel_id\n" +
              "         left join wvp_device d on dc.device_id = d.device_id\n" +
              "where  dc.channel_type = 0 and dc.channel_id = #{channelId} and pgc.platform_id=#{platformId}")
      List<Device> queryDeviceByPlatformIdAndChannelId(@Param("platformId") String platformId, @Param("channelId") String channelId);
  
      @Select("<script> " +
              " SELECT " +
              " wp.* " +
              " FROM " +
              " wvp_platform wp " +
              " left join wvp_platform_channel wpgc on " +
              " wp.id = wpgc.platform_id " +
              " WHERE " +
              " wpgc.device_channel_id = #{channelId} and wp.status = true " +
              " AND wp.server_gb_id in " +
              "<foreach collection='platforms' item='item'  open='(' separator=',' close=')' > #{item}</foreach>" +
              "</script> ")
      List<Platform> queryPlatFormListForGBWithGBId(@Param("channelId") Integer channelId, List<String> platforms);
  
      @Select("select dc.channel_id, dc.device_id,dc.name,d.manufacturer,d.model,d.firmware\n" +
              "from wvp_platform_channel pgc\n" +
              "         left join wvp_device_channel dc on dc.id = pgc.device_channel_id\n" +
              "         left join wvp_device d on dc.device_id = d.device_id\n" +
              "where dc.channel_type = 0 and dc.channel_id = #{channelId} and pgc.platform_id=#{platformId}")
      List<Device> queryDeviceInfoByPlatformIdAndChannelId(@Param("platformId") String platformId, @Param("channelId") String channelId);
  
      @Select(" SELECT wp.* from wvp_platform_channel pgc " +
              " left join wvp_device_channel dc on dc.id = pgc.device_channel_id " +
              " left join  wvp_platform wp on wp.id = pgc.platform_id" +
              " WHERE  dc.channel_type = 0 and dc.device_id=#{channelId}")
      List<Platform> queryParentPlatformByChannelId(@Param("channelId") String channelId);
  
      @Select("<script>" +
              " select " +
              "    wpgc.id ,\n" +
              "    wdc.id as gb_id,\n" +
              "    wdc.data_type ,\n" +
              "    wdc.data_device_id,\n" +
              "    wdc.create_time,\n" +
              "    wdc.update_time,\n" +
              "    wpgc.custom_device_id, \n" +
              "    wpgc.custom_name, \n" +
              "    wpgc.custom_manufacturer, \n" +
              "    wpgc.custom_model, \n" +
              "    wpgc.custom_owner, \n" +
              "    wpgc.custom_civil_code,\n" +
              "    wpgc.custom_block, \n" +
              "    wpgc.custom_address,\n" +
              "    wpgc.custom_parental, \n" +
              "    wpgc.custom_parent_id, \n" +
              "    wpgc.custom_safety_way, \n" +
              "    wpgc.custom_register_way, \n" +
              "    wpgc.custom_cert_num, \n" +
              "    wpgc.custom_certifiable, \n" +
              "    wpgc.custom_err_code, \n" +
              "    wpgc.custom_end_time, \n" +
              "    wpgc.custom_secrecy, \n" +
              "    wpgc.custom_ip_address, \n" +
              "    wpgc.custom_port, \n" +
              "    wpgc.custom_password, \n" +
              "    wpgc.custom_status, \n" +
              "    wpgc.custom_longitude, \n" +
              "    wpgc.custom_latitude, \n" +
              "    wpgc.custom_ptz_type, \n" +
              "    wpgc.custom_position_type, \n" +
              "    wpgc.custom_room_type, \n" +
              "    wpgc.custom_use_type, \n" +
              "    wpgc.custom_supply_light_type, \n" +
              "    wpgc.custom_direction_type, \n" +
              "    wpgc.custom_resolution, \n" +
              "    wpgc.custom_business_group_id, \n" +
              "    wpgc.custom_download_speed, \n" +
              "    wpgc.custom_svc_space_support_mod,\n" +
              "    wpgc.custom_svc_time_support_mode," +
              "    coalesce( wdc.gb_device_id, wdc.device_id) as gb_device_id,\n" +
              "    coalesce( wdc.gb_name, wdc.name) as gb_name,\n" +
              "    coalesce( wdc.gb_manufacturer, wdc.manufacturer) as gb_manufacturer,\n" +
              "    coalesce( wdc.gb_model, wdc.model) as gb_model,\n" +
              "    coalesce( wdc.gb_owner, wdc.owner) as gb_owner,\n" +
              "    coalesce( wdc.gb_civil_code, wdc.civil_code) as gb_civil_code,\n" +
              "    coalesce( wdc.gb_block, wdc.block) as gb_block,\n" +
              "    coalesce( wdc.gb_address, wdc.address) as gb_address,\n" +
              "    coalesce( wdc.gb_parental, wdc.parental) as gb_parental,\n" +
              "    coalesce( wdc.gb_parent_id, wdc.parent_id) as gb_parent_id,\n" +
              "    coalesce( wdc.gb_safety_way, wdc.safety_way) as gb_safety_way,\n" +
              "    coalesce( wdc.gb_register_way, wdc.register_way) as gb_register_way,\n" +
              "    coalesce( wdc.gb_cert_num, wdc.cert_num) as gb_cert_num,\n" +
              "    coalesce( wdc.gb_certifiable, wdc.certifiable) as gb_certifiable,\n" +
              "    coalesce( wdc.gb_err_code, wdc.err_code) as gb_err_code,\n" +
              "    coalesce( wdc.gb_end_time, wdc.end_time) as gb_end_time,\n" +
              "    coalesce( wdc.gb_secrecy, wdc.secrecy) as gb_secrecy,\n" +
              "    coalesce( wdc.gb_ip_address, wdc.ip_address) as gb_ip_address,\n" +
              "    coalesce( wdc.gb_port, wdc.port) as gb_port,\n" +
              "    coalesce( wdc.gb_password, wdc.password) as gb_password,\n" +
              "    coalesce( wdc.gb_status, wdc.status) as gb_status,\n" +
              "    coalesce( wdc.gb_longitude, wdc.longitude) as gb_longitude,\n" +
              "    coalesce( wdc.gb_latitude, wdc.latitude) as gb_latitude,\n" +
              "    coalesce( wdc.gb_ptz_type, wdc.ptz_type) as gb_ptz_type,\n" +
              "    coalesce( wdc.gb_position_type, wdc.position_type) as gb_position_type,\n" +
              "    coalesce( wdc.gb_room_type, wdc.room_type) as gb_room_type,\n" +
              "    coalesce( wdc.gb_use_type, wdc.use_type) as gb_use_type,\n" +
              "    coalesce( wdc.gb_supply_light_type, wdc.supply_light_type) as gb_supply_light_type,\n" +
              "    coalesce( wdc.gb_direction_type, wdc.direction_type) as gb_direction_type,\n" +
              "    coalesce( wdc.gb_resolution, wdc.resolution) as gb_resolution,\n" +
              "    coalesce( wdc.gb_business_group_id, wdc.business_group_id) as gb_business_group_id,\n" +
              "    coalesce( wdc.gb_download_speed, wdc.download_speed) as gb_download_speed,\n" +
              "    coalesce( wdc.gb_svc_space_support_mod, wdc.svc_space_support_mod) as gb_svc_space_support_mod,\n" +
              "    coalesce( wdc.gb_svc_time_support_mode, wdc.svc_time_support_mode) as gb_svc_time_support_mode, \n" +
              "    wpgc.platform_id " +
              " from wvp_device_channel wdc" +
              " left join wvp_platform_channel wpgc on wdc.id = wpgc.device_channel_id and wpgc.platform_id = #{platformId}" +
              " where wdc.channel_type = 0 " +
              " <if test='query != null'> " +
              " AND (coalesce(wdc.gb_device_id, wdc.device_id) LIKE concat('%',#{query},'%') OR wpgc.custom_device_id LIKE concat('%',#{query},'%') " +
              "      OR coalesce(wdc.gb_name, wdc.name)  LIKE concat('%',#{query},'%') OR wpgc.custom_name LIKE concat('%',#{query},'%'))</if> " +
              " <if test='online == true'> AND coalesce(wpgc.custom_status, wdc.gb_status, wdc.status) = 'ON'</if> " +
              " <if test='online == false'> AND coalesce(wpgc.custom_status, wdc.gb_status, wdc.status) = 'OFF'</if> " +
              " <if test='hasShare == true'> AND wpgc.platform_id = #{platformId}</if> " +
              " <if test='hasShare == false'> AND wpgc.platform_id is null</if> " +
              " <if test='dataType != null'> AND wdc.data_type = #{dataType}</if> " +
              "</script>")
      List<PlatformChannel> queryForPlatformForWebList(@Param("platformId") Integer platformId, @Param("query") String query,
                                                       @Param("dataType") Integer dataType, @Param("online") Boolean online,
                                                       @Param("hasShare") Boolean hasShare);
  
      @Select("select\n" +
              "    wdc.id as gb_id,\n" +
              "    wdc.data_type,\n" +
              "    wdc.data_device_id,\n" +
              "    wdc.create_time,\n" +
              "    wdc.update_time,\n" +
              "    coalesce(wpgc.custom_device_id, wdc.gb_device_id, wdc.device_id) as gb_device_id,\n" +
              "    coalesce(wpgc.custom_name, wdc.gb_name, wdc.name) as gb_name,\n" +
              "    coalesce(wpgc.custom_manufacturer, wdc.gb_manufacturer, wdc.manufacturer) as gb_manufacturer,\n" +
              "    coalesce(wpgc.custom_model, wdc.gb_model, wdc.model) as gb_model,\n" +
              "    coalesce(wpgc.custom_owner, wdc.gb_owner, wdc.owner) as gb_owner,\n" +
              "    coalesce(wpgc.custom_civil_code, wdc.gb_civil_code, wdc.civil_code) as gb_civil_code,\n" +
              "    coalesce(wpgc.custom_block, wdc.gb_block, wdc.block) as gb_block,\n" +
              "    coalesce(wpgc.custom_address, wdc.gb_address, wdc.address) as gb_address,\n" +
              "    coalesce(wpgc.custom_parental, wdc.gb_parental, wdc.parental) as gb_parental,\n" +
              "    coalesce(wpgc.custom_parent_id, wdc.gb_parent_id, wdc.parent_id) as gb_parent_id,\n" +
              "    coalesce(wpgc.custom_safety_way, wdc.gb_safety_way, wdc.safety_way) as gb_safety_way,\n" +
              "    coalesce(wpgc.custom_register_way, wdc.gb_register_way, wdc.register_way) as gb_register_way,\n" +
              "    coalesce(wpgc.custom_cert_num, wdc.gb_cert_num, wdc.cert_num) as gb_cert_num,\n" +
              "    coalesce(wpgc.custom_certifiable, wdc.gb_certifiable, wdc.certifiable) as gb_certifiable,\n" +
              "    coalesce(wpgc.custom_err_code, wdc.gb_err_code, wdc.err_code) as gb_err_code,\n" +
              "    coalesce(wpgc.custom_end_time, wdc.gb_end_time, wdc.end_time) as gb_end_time,\n" +
              "    coalesce(wpgc.custom_secrecy, wdc.gb_secrecy, wdc.secrecy) as gb_secrecy,\n" +
              "    coalesce(wpgc.custom_ip_address, wdc.gb_ip_address, wdc.ip_address) as gb_ip_address,\n" +
              "    coalesce(wpgc.custom_port, wdc.gb_port, wdc.port) as gb_port,\n" +
              "    coalesce(wpgc.custom_password, wdc.gb_password, wdc.password) as gb_password,\n" +
              "    coalesce(wpgc.custom_status, wdc.gb_status, wdc.status) as gb_status,\n" +
              "    coalesce(wpgc.custom_longitude, wdc.gb_longitude, wdc.longitude) as gb_longitude,\n" +
              "    coalesce(wpgc.custom_latitude, wdc.gb_latitude, wdc.latitude) as gb_latitude,\n" +
              "    coalesce(wpgc.custom_ptz_type, wdc.gb_ptz_type, wdc.ptz_type) as gb_ptz_type,\n" +
              "    coalesce(wpgc.custom_position_type, wdc.gb_position_type, wdc.position_type) as gb_position_type,\n" +
              "    coalesce(wpgc.custom_room_type, wdc.gb_room_type, wdc.room_type) as gb_room_type,\n" +
              "    coalesce(wpgc.custom_use_type, wdc.gb_use_type, wdc.use_type) as gb_use_type,\n" +
              "    coalesce(wpgc.custom_supply_light_type, wdc.gb_supply_light_type, wdc.supply_light_type) as gb_supply_light_type,\n" +
              "    coalesce(wpgc.custom_direction_type, wdc.gb_direction_type, wdc.direction_type) as gb_direction_type,\n" +
              "    coalesce(wpgc.custom_resolution, wdc.gb_resolution, wdc.resolution) as gb_resolution,\n" +
              "    coalesce(wpgc.custom_business_group_id, wdc.gb_business_group_id, wdc.business_group_id) as gb_business_group_id,\n" +
              "    coalesce(wpgc.custom_download_speed, wdc.gb_download_speed, wdc.download_speed) as gb_download_speed,\n" +
              "    coalesce(wpgc.custom_svc_space_support_mod, wdc.gb_svc_space_support_mod, wdc.svc_space_support_mod) as gb_svc_space_support_mod,\n" +
              "    coalesce(wpgc.custom_svc_time_support_mode, wdc.gb_svc_time_support_mode, wdc.svc_time_support_mode) as gb_svc_time_support_mode\n" +
              " from wvp_device_channel wdc" +
              " left join wvp_platform_channel wpgc on wdc.id = wpgc.device_channel_id" +
              " where wdc.channel_type = 0 and wpgc.platform_id = #{platformId} and coalesce(wpgc.custom_device_id, wdc.gb_device_id, wdc.device_id) = #{channelDeviceId} order by wdc.id "
  
      )
      List<CommonGBChannel> queryOneWithPlatform(@Param("platformId") Integer platformId, @Param("channelDeviceId") String channelDeviceId);
  
  
      @Select("<script>" +
              " select " +
              "    wdc.id as gb_id,\n" +
              "    wdc.data_type,\n" +
              "    wdc.data_device_id,\n" +
              "    wdc.create_time,\n" +
              "    wdc.update_time,\n" +
              "    coalesce(wpgc.custom_device_id, wdc.gb_device_id, wdc.device_id) as gb_device_id,\n" +
              "    coalesce(wpgc.custom_name, wdc.gb_name, wdc.name) as gb_name,\n" +
              "    coalesce(wpgc.custom_manufacturer, wdc.gb_manufacturer, wdc.manufacturer) as gb_manufacturer,\n" +
              "    coalesce(wpgc.custom_model, wdc.gb_model, wdc.model) as gb_model,\n" +
              "    coalesce(wpgc.custom_owner, wdc.gb_owner, wdc.owner) as gb_owner,\n" +
              "    coalesce(wpgc.custom_civil_code, wdc.gb_civil_code, wdc.civil_code) as gb_civil_code,\n" +
              "    coalesce(wpgc.custom_block, wdc.gb_block, wdc.block) as gb_block,\n" +
              "    coalesce(wpgc.custom_address, wdc.gb_address, wdc.address) as gb_address,\n" +
              "    coalesce(wpgc.custom_parental, wdc.gb_parental, wdc.parental) as gb_parental,\n" +
              "    coalesce(wpgc.custom_parent_id, wdc.gb_parent_id, wdc.parent_id) as gb_parent_id,\n" +
              "    coalesce(wpgc.custom_safety_way, wdc.gb_safety_way, wdc.safety_way) as gb_safety_way,\n" +
              "    coalesce(wpgc.custom_register_way, wdc.gb_register_way, wdc.register_way) as gb_register_way,\n" +
              "    coalesce(wpgc.custom_cert_num, wdc.gb_cert_num, wdc.cert_num) as gb_cert_num,\n" +
              "    coalesce(wpgc.custom_certifiable, wdc.gb_certifiable, wdc.certifiable) as gb_certifiable,\n" +
              "    coalesce(wpgc.custom_err_code, wdc.gb_err_code, wdc.err_code) as gb_err_code,\n" +
              "    coalesce(wpgc.custom_end_time, wdc.gb_end_time, wdc.end_time) as gb_end_time,\n" +
              "    coalesce(wpgc.custom_secrecy, wdc.gb_secrecy, wdc.secrecy) as gb_secrecy,\n" +
              "    coalesce(wpgc.custom_ip_address, wdc.gb_ip_address, wdc.ip_address) as gb_ip_address,\n" +
              "    coalesce(wpgc.custom_port, wdc.gb_port, wdc.port) as gb_port,\n" +
              "    coalesce(wpgc.custom_password, wdc.gb_password, wdc.password) as gb_password,\n" +
              "    coalesce(wpgc.custom_status, wdc.gb_status, wdc.status) as gb_status,\n" +
              "    coalesce(wpgc.custom_longitude, wdc.gb_longitude, wdc.longitude) as gb_longitude,\n" +
              "    coalesce(wpgc.custom_latitude, wdc.gb_latitude, wdc.latitude) as gb_latitude,\n" +
              "    coalesce(wpgc.custom_ptz_type, wdc.gb_ptz_type, wdc.ptz_type) as gb_ptz_type,\n" +
              "    coalesce(wpgc.custom_position_type, wdc.gb_position_type, wdc.position_type) as gb_position_type,\n" +
              "    coalesce(wpgc.custom_room_type, wdc.gb_room_type, wdc.room_type) as gb_room_type,\n" +
              "    coalesce(wpgc.custom_use_type, wdc.gb_use_type, wdc.use_type) as gb_use_type,\n" +
              "    coalesce(wpgc.custom_supply_light_type, wdc.gb_supply_light_type, wdc.supply_light_type) as gb_supply_light_type,\n" +
              "    coalesce(wpgc.custom_direction_type, wdc.gb_direction_type, wdc.direction_type) as gb_direction_type,\n" +
              "    coalesce(wpgc.custom_resolution, wdc.gb_resolution, wdc.resolution) as gb_resolution,\n" +
              "    coalesce(wpgc.custom_business_group_id, wdc.gb_business_group_id, wdc.business_group_id) as gb_business_group_id,\n" +
              "    coalesce(wpgc.custom_download_speed, wdc.gb_download_speed, wdc.download_speed) as gb_download_speed,\n" +
              "    coalesce(wpgc.custom_svc_space_support_mod, wdc.gb_svc_space_support_mod, wdc.svc_space_support_mod) as gb_svc_space_support_mod,\n" +
              "    coalesce(wpgc.custom_svc_time_support_mode, wdc.gb_svc_time_support_mode, wdc.svc_time_support_mode) as gb_svc_time_support_mode\n" +
              " from wvp_device_channel wdc" +
              " left join wvp_platform_channel wpgc on wdc.id = wpgc.device_channel_id and wpgc.platform_id = #{platformId}" +
              " where wdc.channel_type = 0 and wpgc.platform_id is null" +
              "<if test='channelIds != null'> AND wdc.id in " +
              "<foreach item='item' index='index' collection='channelIds' open='(' separator=',' close=')'> #{item} </foreach> " +
              "</if>" +
              "</script>")
      List<CommonGBChannel> queryNotShare(@Param("platformId") Integer platformId, List<Integer> channelIds);
  
      @Select("<script>" +
              " select " +
              "    wdc.id as gb_id,\n" +
              "    wdc.data_type,\n" +
              "    wdc.data_device_id,\n" +
              "    wdc.create_time,\n" +
              "    wdc.update_time,\n" +
              "    wdc.gps_altitude,\n" +
              "    wdc.gps_speed,\n" +
              "    wdc.gps_direction,\n" +
              "    wdc.gps_time,\n" +
              "    coalesce(wpgc.custom_device_id, wdc.gb_device_id, wdc.device_id) as gb_device_id,\n" +
              "    coalesce(wpgc.custom_name, wdc.gb_name, wdc.name) as gb_name,\n" +
              "    coalesce(wpgc.custom_manufacturer, wdc.gb_manufacturer, wdc.manufacturer) as gb_manufacturer,\n" +
              "    coalesce(wpgc.custom_model, wdc.gb_model, wdc.model) as gb_model,\n" +
              "    coalesce(wpgc.custom_owner, wdc.gb_owner, wdc.owner) as gb_owner,\n" +
              "    coalesce(wpgc.custom_civil_code, wdc.gb_civil_code, wdc.civil_code) as gb_civil_code,\n" +
              "    coalesce(wpgc.custom_block, wdc.gb_block, wdc.block) as gb_block,\n" +
              "    coalesce(wpgc.custom_address, wdc.gb_address, wdc.address) as gb_address,\n" +
              "    coalesce(wpgc.custom_parental, wdc.gb_parental, wdc.parental) as gb_parental,\n" +
              "    coalesce(wpgc.custom_parent_id, wdc.gb_parent_id, wdc.parent_id) as gb_parent_id,\n" +
              "    coalesce(wpgc.custom_safety_way, wdc.gb_safety_way, wdc.safety_way) as gb_safety_way,\n" +
              "    coalesce(wpgc.custom_register_way, wdc.gb_register_way, wdc.register_way) as gb_register_way,\n" +
              "    coalesce(wpgc.custom_cert_num, wdc.gb_cert_num, wdc.cert_num) as gb_cert_num,\n" +
              "    coalesce(wpgc.custom_certifiable, wdc.gb_certifiable, wdc.certifiable) as gb_certifiable,\n" +
              "    coalesce(wpgc.custom_err_code, wdc.gb_err_code, wdc.err_code) as gb_err_code,\n" +
              "    coalesce(wpgc.custom_end_time, wdc.gb_end_time, wdc.end_time) as gb_end_time,\n" +
              "    coalesce(wpgc.custom_secrecy, wdc.gb_secrecy, wdc.secrecy) as gb_secrecy,\n" +
              "    coalesce(wpgc.custom_ip_address, wdc.gb_ip_address, wdc.ip_address) as gb_ip_address,\n" +
              "    coalesce(wpgc.custom_port, wdc.gb_port, wdc.port) as gb_port,\n" +
              "    coalesce(wpgc.custom_password, wdc.gb_password, wdc.password) as gb_password,\n" +
              "    coalesce(wpgc.custom_status, wdc.gb_status, wdc.status) as gb_status,\n" +
              "    coalesce(wpgc.custom_longitude, wdc.gb_longitude, wdc.longitude) as gb_longitude,\n" +
              "    coalesce(wpgc.custom_latitude, wdc.gb_latitude, wdc.latitude) as gb_latitude,\n" +
              "    coalesce(wpgc.custom_ptz_type, wdc.gb_ptz_type, wdc.ptz_type) as gb_ptz_type,\n" +
              "    coalesce(wpgc.custom_position_type, wdc.gb_position_type, wdc.position_type) as gb_position_type,\n" +
              "    coalesce(wpgc.custom_room_type, wdc.gb_room_type, wdc.room_type) as gb_room_type,\n" +
              "    coalesce(wpgc.custom_use_type, wdc.gb_use_type, wdc.use_type) as gb_use_type,\n" +
              "    coalesce(wpgc.custom_supply_light_type, wdc.gb_supply_light_type, wdc.supply_light_type) as gb_supply_light_type,\n" +
              "    coalesce(wpgc.custom_direction_type, wdc.gb_direction_type, wdc.direction_type) as gb_direction_type,\n" +
              "    coalesce(wpgc.custom_resolution, wdc.gb_resolution, wdc.resolution) as gb_resolution,\n" +
              "    coalesce(wpgc.custom_business_group_id, wdc.gb_business_group_id, wdc.business_group_id) as gb_business_group_id,\n" +
              "    coalesce(wpgc.custom_download_speed, wdc.gb_download_speed, wdc.download_speed) as gb_download_speed,\n" +
              "    coalesce(wpgc.custom_svc_space_support_mod, wdc.gb_svc_space_support_mod, wdc.svc_space_support_mod) as gb_svc_space_support_mod,\n" +
              "    coalesce(wpgc.custom_svc_time_support_mode, wdc.gb_svc_time_support_mode, wdc.svc_time_support_mode) as gb_svc_time_support_mode\n" +
              " from wvp_device_channel wdc" +
              " left join wvp_platform_channel wpgc on wdc.id = wpgc.device_channel_id" +
              " where wdc.channel_type = 0 and wpgc.platform_id = #{platformId}" +
              "<if test='channelIds != null'> AND wdc.id in " +
              "   <foreach item='item' index='index' collection='channelIds' open='(' separator=',' close=')'>" +
              "   #{item} " +
              "   </foreach> " +
              "</if>" +
              " order by wdc.id" +
              "</script>")
      List<CommonGBChannel> queryShare(@Param("platformId") Integer platformId, List<Integer> channelIds);
  
      @Delete("<script> " +
              "DELETE from wvp_platform_channel WHERE platform_id=#{platformId} " +
              "<if test='channelList != null'> AND device_channel_id in " +
              "   <foreach item='item' index='index' collection='channelList' open='(' separator=',' close=')'>" +
              "   #{item.gbId} " +
              "   </foreach> " +
              "</if>" +
              "</script>")
      int removeChannelsWithPlatform(@Param("platformId") Integer platformId, List<CommonGBChannel> channelList);
  
      @Delete("<script> " +
              "DELETE from wvp_platform_channel WHERE " +
              "<if test='channelList != null'> AND device_channel_id in " +
              "   <foreach item='item' index='index' collection='channelList' open='(' separator=',' close=')'>" +
              "   #{item.gbId} " +
              "   </foreach> " +
              "</if>" +
              "</script>")
      int removeChannels(List<CommonGBChannel> channelList);
  
      @Insert("<script> "+
              "INSERT INTO wvp_platform_group (platform_id, group_id) VALUES " +
              "<foreach collection='groupListNotShare'  item='item' separator=','>" +
              " (#{platformId}, #{item.id} )" +
              "</foreach>" +
              "</script>")
      int addPlatformGroup(Collection<Group> groupListNotShare, @Param("platformId") Integer platformId);
  
      @Insert("<script> "+
              "INSERT INTO wvp_platform_region (platform_id, region_id) VALUES " +
              "<foreach collection='regionListNotShare'  item='item' separator=','>" +
              " (#{platformId}, #{item.id} )" +
              "</foreach>" +
              "</script>")
      int addPlatformRegion(List<Region> regionListNotShare, @Param("platformId") Integer platformId);
  
      @Delete("<script> "+
              "DELETE from wvp_platform_group WHERE platform_id=#{platformId} AND group_id in" +
              "<foreach collection='groupList'  item='item'  open='(' separator=',' close=')' > #{item.id}</foreach>" +
              "</script>")
      int removePlatformGroup(List<Group> groupList, @Param("platformId") Integer platformId);
  
      @Delete("<script> "+
              "DELETE from wvp_platform_group WHERE platform_id=#{platformId} AND group_id  =#{id}" +
              "</script>")
      void removePlatformGroupById(@Param("id") int id, @Param("platformId") Integer platformId);
  
      @Delete("<script> "+
              "DELETE from wvp_platform_region WHERE platform_id=#{platformId} AND region_id  =#{id}" +
              "</script>")
      void removePlatformRegionById(@Param("id") int id, @Param("platformId") Integer platformId);
  
      @Select(" <script>" +
              " SELECT wcg.* " +
              " from wvp_common_group wcg" +
              " left join wvp_platform_group wpg on wpg.group_id = wcg.id and wpg.platform_id = #{platformId}" +
              " where wpg.platform_id IS NOT NULL and wcg.parent_id = #{parentId} " +
              " </script>")
      Set<Group> queryShareChildrenGroup(@Param("parentId") Integer parentId, @Param("platformId") Integer platformId);
  
      @Select(" <script>" +
              " SELECT wcr.* " +
              " from wvp_common_region wcr" +
              " left join wvp_platform_region wpr on wpr.region_id = wcr.id and wpr.platform_id = #{platformId}" +
              " where wpr.platform_id IS NOT NULL and wcr.parent_device_id = #{parentId} " +
              " </script>")
      Set<Region> queryShareChildrenRegion(@Param("parentId") String parentId, @Param("platformId") Integer platformId);
  
      @Select(" <script>" +
              " SELECT wcg.* " +
              " from wvp_common_group wcg" +
              " left join wvp_platform_group wpg on wpg.group_id = wcg.id and wpg.platform_id = #{platformId}" +
              " where wpg.platform_id is not null and wcg.id in " +
              "<foreach collection='groupSet'  item='item'  open='(' separator=',' close=')' > #{item.parentId}</foreach>" +
              " </script>")
      Set<Group> queryShareParentGroupByGroupSet(Set<Group> groupSet, @Param("platformId") Integer platformId);
  
      @Select(" <script>" +
              " SELECT wcr.* " +
              " from wvp_common_region wcr" +
              " left join wvp_platform_region wpr on wpr.region_id = wcr.id and wpr.platform_id = #{platformId}" +
              " where wpr.platform_id is not null and wcr.id in " +
              "<foreach collection='regionSet'  item='item'  open='(' separator=',' close=')' > #{item.parentId}</foreach>" +
              " </script>")
      Set<Region> queryShareParentRegionByRegionSet(Set<Region> regionSet, @Param("platformId") Integer platformId);
  
      @Select("<script> " +
              " SELECT " +
              " pp.* " +
              " FROM " +
              " wvp_platform pp " +
              " left join wvp_platform_channel pgc on " +
              " pp.id = pgc.platform_id " +
              " left join wvp_device_channel dc on " +
              " dc.id = pgc.device_channel_id " +
              " WHERE " +
              "  pgc.device_channel_id IN" +
              "<foreach collection='ids' item='item'  open='(' separator=',' close=')' > #{item}</foreach>" +
              "</script> ")
      List<Platform> queryPlatFormListByChannelList(Collection<Integer> ids);
  
      @Select("<script> " +
              " SELECT " +
              " pp.* " +
              " FROM " +
              " wvp_platform pp " +
              " left join wvp_platform_channel pgc on " +
              " pp.id = pgc.platform_id " +
              " left join wvp_device_channel dc on " +
              " dc.id = pgc.device_channel_id " +
              " WHERE " +
              "  pgc.device_channel_id = #{channelId}" +
              "</script> ")
      List<Platform> queryPlatFormListByChannelId(@Param("channelId") int channelId);
  
      @Delete("<script> "+
              "DELETE from wvp_platform_channel WHERE platform_id=#{platformId}" +
              "</script>")
      void removeChannelsByPlatformId(@Param("platformId") Integer platformId);
  
      @Delete("<script> "+
              "DELETE from wvp_platform_group WHERE platform_id=#{platformId}" +
              "</script>")
      void removePlatformGroupsByPlatformId(@Param("platformId") Integer platformId);
  
      @Delete("<script> "+
              "DELETE from wvp_platform_region WHERE platform_id=#{platformId}" +
              "</script>")
      void removePlatformRegionByPlatformId(@Param("platformId") Integer platformId);
  
      @Update(value = {" <script>" +
              " UPDATE wvp_platform_channel " +
              " SET custom_device_id =#{customDeviceId}" +
              " ,custom_name =#{customName}" +
              " ,custom_manufacturer =#{customManufacturer}" +
              " ,custom_model =#{customModel}" +
              " ,custom_owner =#{customOwner}" +
              " ,custom_civil_code =#{customCivilCode}" +
              " ,custom_block =#{customBlock}" +
              " ,custom_address =#{customAddress}" +
              " ,custom_parental =#{customParental}" +
              " ,custom_parent_id =#{customParentId}" +
              " ,custom_safety_way =#{customSafetyWay}" +
              " ,custom_register_way =#{customRegisterWay}" +
              " ,custom_cert_num =#{customCertNum}" +
              " ,custom_certifiable =#{customCertifiable}" +
              " ,custom_err_code =#{customErrCode}" +
              " ,custom_end_time =#{customEndTime}" +
              " ,custom_secrecy =#{customSecrecy}" +
              " ,custom_ip_address =#{customIpAddress}" +
              " ,custom_port =#{customPort}" +
              " ,custom_password =#{customPassword}" +
              " ,custom_status =#{customStatus}" +
              " ,custom_longitude =#{customLongitude}" +
              " ,custom_latitude =#{customLatitude}" +
              " ,custom_ptz_type =#{customPtzType}" +
              " ,custom_position_type =#{customPositionType}" +
              " ,custom_room_type =#{customRoomType}" +
              " ,custom_use_type =#{customUseType}" +
              " ,custom_supply_light_type =#{customSupplyLightType}" +
              " ,custom_direction_type =#{customDirectionType}" +
              " ,custom_resolution =#{customResolution}" +
              " ,custom_business_group_id =#{customBusinessGroupId}" +
              " ,custom_download_speed =#{customDownloadSpeed}" +
              " ,custom_svc_space_support_mod =#{customSvcSpaceSupportMod}" +
              " ,custom_svc_time_support_mode = #{customSvcTimeSupportMode}" +
              " WHERE id = #{id}"+
              " </script>"})
      void updateCustomChannel(PlatformChannel channel);
  
  
      @Select("<script>" +
              " select " +
              "    wdc.id as gb_id,\n" +
              "    wdc.data_type,\n" +
              "    wdc.data_device_id,\n" +
              "    wdc.create_time,\n" +
              "    wdc.update_time,\n" +
              "    coalesce(wpgc.custom_device_id, wdc.gb_device_id, wdc.device_id) as gb_device_id,\n" +
              "    coalesce(wpgc.custom_name, wdc.gb_name, wdc.name) as gb_name,\n" +
              "    coalesce(wpgc.custom_manufacturer, wdc.gb_manufacturer, wdc.manufacturer) as gb_manufacturer,\n" +
              "    coalesce(wpgc.custom_model, wdc.gb_model, wdc.model) as gb_model,\n" +
              "    coalesce(wpgc.custom_owner, wdc.gb_owner, wdc.owner) as gb_owner,\n" +
              "    coalesce(wpgc.custom_civil_code, wdc.gb_civil_code, wdc.civil_code) as gb_civil_code,\n" +
              "    coalesce(wpgc.custom_block, wdc.gb_block, wdc.block) as gb_block,\n" +
              "    coalesce(wpgc.custom_address, wdc.gb_address, wdc.address) as gb_address,\n" +
              "    coalesce(wpgc.custom_parental, wdc.gb_parental, wdc.parental) as gb_parental,\n" +
              "    coalesce(wpgc.custom_parent_id, wdc.gb_parent_id, wdc.parent_id) as gb_parent_id,\n" +
              "    coalesce(wpgc.custom_safety_way, wdc.gb_safety_way, wdc.safety_way) as gb_safety_way,\n" +
              "    coalesce(wpgc.custom_register_way, wdc.gb_register_way, wdc.register_way) as gb_register_way,\n" +
              "    coalesce(wpgc.custom_cert_num, wdc.gb_cert_num, wdc.cert_num) as gb_cert_num,\n" +
              "    coalesce(wpgc.custom_certifiable, wdc.gb_certifiable, wdc.certifiable) as gb_certifiable,\n" +
              "    coalesce(wpgc.custom_err_code, wdc.gb_err_code, wdc.err_code) as gb_err_code,\n" +
              "    coalesce(wpgc.custom_end_time, wdc.gb_end_time, wdc.end_time) as gb_end_time,\n" +
              "    coalesce(wpgc.custom_secrecy, wdc.gb_secrecy, wdc.secrecy) as gb_secrecy,\n" +
              "    coalesce(wpgc.custom_ip_address, wdc.gb_ip_address, wdc.ip_address) as gb_ip_address,\n" +
              "    coalesce(wpgc.custom_port, wdc.gb_port, wdc.port) as gb_port,\n" +
              "    coalesce(wpgc.custom_password, wdc.gb_password, wdc.password) as gb_password,\n" +
              "    coalesce(wpgc.custom_status, wdc.gb_status, wdc.status) as gb_status,\n" +
              "    coalesce(wpgc.custom_longitude, wdc.gb_longitude, wdc.longitude) as gb_longitude,\n" +
              "    coalesce(wpgc.custom_latitude, wdc.gb_latitude, wdc.latitude) as gb_latitude,\n" +
              "    coalesce(wpgc.custom_ptz_type, wdc.gb_ptz_type, wdc.ptz_type) as gb_ptz_type,\n" +
              "    coalesce(wpgc.custom_position_type, wdc.gb_position_type, wdc.position_type) as gb_position_type,\n" +
              "    coalesce(wpgc.custom_room_type, wdc.gb_room_type, wdc.room_type) as gb_room_type,\n" +
              "    coalesce(wpgc.custom_use_type, wdc.gb_use_type, wdc.use_type) as gb_use_type,\n" +
              "    coalesce(wpgc.custom_supply_light_type, wdc.gb_supply_light_type, wdc.supply_light_type) as gb_supply_light_type,\n" +
              "    coalesce(wpgc.custom_direction_type, wdc.gb_direction_type, wdc.direction_type) as gb_direction_type,\n" +
              "    coalesce(wpgc.custom_resolution, wdc.gb_resolution, wdc.resolution) as gb_resolution,\n" +
              "    coalesce(wpgc.custom_business_group_id, wdc.gb_business_group_id, wdc.business_group_id) as gb_business_group_id,\n" +
              "    coalesce(wpgc.custom_download_speed, wdc.gb_download_speed, wdc.download_speed) as gb_download_speed,\n" +
              "    coalesce(wpgc.custom_svc_space_support_mod, wdc.gb_svc_space_support_mod, wdc.svc_space_support_mod) as gb_svc_space_support_mod,\n" +
              "    coalesce(wpgc.custom_svc_time_support_mode, wdc.gb_svc_time_support_mode, wdc.svc_time_support_mode) as gb_svc_time_support_mode\n" +
              " from wvp_device_channel wdc" +
              " left join wvp_platform_channel wpgc on wdc.id = wpgc.device_channel_id" +
              " where wdc.channel_type = 0 and wpgc.platform_id = #{platformId} and wdc.id = #{gbId}" +
              "</script>")
      CommonGBChannel queryShareChannel(@Param("platformId") int platformId, @Param("gbId") int gbId);
  
  
      @Select(" <script>" +
              " SELECT wcg.* " +
              " from wvp_common_group wcg" +
              " left join wvp_platform_group wpg on wpg.group_id = wcg.id " +
              " where wpg.platform_id = #{platformId}" +
              " order by wcg.id DESC" +
              " </script>")
      Set<Group> queryShareGroup(@Param("platformId") Integer platformId);
  
      @Select(" <script>" +
              " SELECT wcr.* " +
              " from wvp_common_region wcr" +
              " left join wvp_platform_region wpr on wpr.region_id = wcr.id " +
              " where wpr.platform_id = #{platformId}" +
              " order by wcr.id DESC" +
              " </script>")
      Set<Region> queryShareRegion(Integer id);
  }
  