EasyGBS在接入设备过多的情况下如何实现通道信息批量导出/导入?

2021-08-25 18:08:06 浏览数 (2)

EasyGBS流媒体平台广泛应用于智慧城市、智慧园区、智慧交通等各领域,通过GB/T28181协议接入,接收设备推流并输出RTMP、RTSP、HLS、FLV直播流分发,其统一的视频监控联网标准及架构,对全面构建安防互联网平台和共享平台起到至关重要的作用。

在部分大型项目中,会碰到EasyGBS现场接入设备数量过多的问题,在网络上,我们要确保如此多设备的承载能力,在管理上,我们也需要对巨大的设备有更加便捷的管理方式,比如对所有接入的通道信息做汇总记录。该功能的实现需要提供完整且准确的通道接入信息,因此我们要设计一个批量将接入通道信息导出的功能。

该功能根据用户需求,可以按照条件导出已录入经纬度信息的通道、未录入经纬度的通道,或者所有的接入通道。

Web按钮:

导出通道信息:

功能实现的参考代码如下:

代码语言:javascript复制
func createExportChannelXlsx(demo, option string) (string, error) {
   file, err := xlsx.OpenFile(demo)
   if err != nil {
      err = fmt.Errorf("模板文件打开错误, %v", err)
      return "", err
   }
   var channels []models.Channel
   switch option {
   case "all":
      db.SQLite.Table("t_channels").Find(&channels)
   case "position":
      db.SQLite.Table("t_channels").Where("longitude != ?", 0).Or("latitude != ?", 0).Find(&channels)
   case "noposition":
      db.SQLite.Table("t_channels").Where("longitude = ? and latitude = ?", 0, 0).Find(&channels)
   default:
      err := fmt.Errorf("请求通道信息参数错误 %s", option)
      return "", err
   }

   downloadFile := xlsx.NewFile()

   var cell *xlsx.Cell
   channelsSheet := file.Sheets[0]
   for _,v:=range channels{
      row := channelsSheet.AddRow()
      row.SetHeightCM(1)
      cell = row.AddCell()
      cell.Value = fmt.Sprintf("%v",v.DeviceID)
      cell = row.AddCell()
      cell.Value = fmt.Sprintf("%v",v.ID)
      cell = row.AddCell()
      cell.Value = fmt.Sprintf("%v",v.Name)
      cell = row.AddCell()
      cell.Value = fmt.Sprintf("%v",v.Manufacturer)
      cell = row.AddCell()
      if v.Status == "ON"{
         cell.Value = "在线"
      }else{
         cell.Value = "离线"
      }
      cell = row.AddCell()
      cell.Value = fmt.Sprintf("%v",v.Longitude)
      cell = row.AddCell()
      cell.Value = fmt.Sprintf("%v",v.Latitude)
      cell = row.AddCell()
      if v.Record == 0{
         cell.Value = "关闭"
      }else{
         cell.Value = "开启"
      }
      cell = row.AddCell()
      if v.Ondemand{
         cell.Value = "开启"
      }else{
         cell.Value = "未开启"
      }

   }
   _, _ = downloadFile.AppendSheet(*channelsSheet, channelsSheet.Name)
   tmpFilename := fmt.Sprintf("EasyGBS%sChannels.xlsx",option)
   tmpFile := filepath.Join(utils.DataDir(), tmpFilename)
   err = downloadFile.Save(tmpFile)
   if err != nil {
      err = fmt.Errorf("保存导出文件错误, %v", err)
      return "",err
   }
   return tmpFile, nil
}

0 人点赞