随笔 - 936  文章 - 0  评论 - 3  阅读 - 30万

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

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

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

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

Web按钮:

导出通道信息:

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

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
}
posted on   EasyGBS  阅读(64)  评论(0编辑  收藏  举报
编辑推荐:
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
阅读排行:
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 提示词工程——AI应用必不可少的技术
· 字符编码:从基础到乱码解决
· 地球OL攻略 —— 某应届生求职总结
历史上的今天:
2020-08-19 国标GB28181客户端EasyGBS视频平台新增用户管理功能如何使用?
2020-08-19 AI养猪,国标GB28181协议视频平台EasyGBS流媒体服务器携手RTMP流媒体服务器EasyDSS协同打造智慧养殖生态圈
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

点击右上角即可分享
微信分享提示