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] } } } } } } for _,fArea := range areas { if _,ok :=m[fArea.Id];!ok{ m[fArea.Id] = fArea } pArr := strings.Split(fArea.Parentids, ",") for _,id := range pArr { if _,ok := m[id];!ok { if va, in := allMap[id]; in { m[id] = va } } } } 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 }