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
}