package models
|
|
import "strings"
|
|
type AreaList []Area
|
func (al AreaList) Len()int {
|
return len(al)
|
}
|
func (al AreaList) Swap(i,j int) {
|
al[i],al[j] = al[j],al[i]
|
}
|
func (al AreaList) Less(i,j int) bool {
|
return al[i].Id < al[j].Id
|
}
|
|
type CamTreeNodeList []CameraTreeNode
|
func (al CamTreeNodeList) Len()int {
|
return len(al)
|
}
|
func (al CamTreeNodeList) Swap(i,j int) {
|
al[i],al[j] = al[j],al[i]
|
}
|
func (al CamTreeNodeList) Less(i,j int) bool {
|
return al[i].Id < al[j].Id
|
}
|
|
type TreeMenu struct {
|
Id string `json:"id" `
|
Type string `json:"type"` // 如果不是MENU,区分本地摄像机(分析和监控)以及国标摄像机
|
Name string `json:"name"`
|
IsAI bool `json:"isAI"` //摄像机配置有任务,则有AI图标
|
Areanodes []TreeMenu `json:"children"`
|
CameraType int `json:"cameraType"`//0:本地摄像机,1:国标摄像机
|
IsRunning bool `json:"isRunning"`//是否正在解码
|
Rtsp string `json:"rtsp"`
|
}
|
|
type TreeNode struct {
|
Id string
|
Name string
|
Parentid string
|
}
|
|
|
func RecursiveArea(areas []Area, cams []CameraTreeNode, searchType int) (arr []Area){
|
var areaE Area
|
allAreas, _ := areaE.FindAll()
|
allMap := make(map[string]Area,0)
|
for _,ae :=range allAreas{
|
allMap[ae.Id] = ae
|
}
|
|
m := make(map[string]Area,0)
|
|
for _,camE :=range cams {
|
if camE.Areaid !="" && camE.Areaid !="0" {
|
if a,ok := allMap[camE.Areaid];ok{
|
if _,f :=m[camE.Areaid];!f{
|
m[camE.Areaid] = a
|
}
|
pidArr := strings.Split(a.Parentids, ",")
|
for _,pid :=range pidArr {
|
if pid !="" && pid !="0" {
|
if _,k :=m[pid];!k{
|
m[pid] = allMap[pid]
|
}
|
}
|
}
|
}
|
}
|
}
|
if len(m) >0 {
|
for _,v := range m {
|
arr = append(arr,v)
|
}
|
}
|
|
if searchType == 0 {
|
for _,fArea :=range areas {
|
if _,ok :=m[fArea.Id];!ok{
|
arr = append(arr,fArea)
|
}
|
}
|
}
|
|
return arr
|
}
|