| | |
| | | package models |
| | | |
| | | import ( |
| | | "basic.com/valib/logger.git" |
| | | "fmt" |
| | | "strconv" |
| | | "strings" |
| | | "vamicro/config" |
| | | |
| | | "basic.com/valib/logger.git" |
| | | ) |
| | | |
| | | const ( |
| | | Default_Layer = -9999 //摄像机添加进来的默认楼层 |
| | | TYPE_LOCAL_CAMERA = 0 //本地摄像机 |
| | | TYPE_GB28181_CAMERA = 1 //国标摄像机 |
| | | Default_Layer = -9999 //摄像机添加进来的默认楼层 |
| | | TYPE_LOCAL_CAMERA = 0 //本地摄像机 |
| | | TYPE_GB28181_CAMERA = 1 //国标摄像机 |
| | | |
| | | TYPE_RUNTYPE_VIDEO = -1 //单纯的监控,不做分析 |
| | | TYPE_RUNTYPE_POLL = 0 //轮询做任务 |
| | | TYPE_RUNTYPE_REALTIME = 1 //实时做任务 |
| | | TYPE_RUNTYPE_VIDEO = -1 //单纯的监控,不做分析 |
| | | TYPE_RUNTYPE_POLL = 0 //轮询做任务 |
| | | TYPE_RUNTYPE_REALTIME = 1 //实时做任务 |
| | | |
| | | Camera_Status_NoRule = 0 //未配规则 |
| | | Camera_Status_Wait = 1 //等待处理 |
| | | Camera_Status_Doing = 2 //处理中 |
| | | Camera_Status_Other = -1 //其他情况 |
| | | Camera_Status_Wait = 1 //等待处理 |
| | | Camera_Status_Doing = 2 //处理中 |
| | | Camera_Status_Other = -1 //其他情况 |
| | | ) |
| | | |
| | | // 智查任务 |
| | | type Task struct { |
| | | TaskId int64 `db:"task_id" json:"taskId"` |
| | | TaskName string `db:"task_name" json:"taskName"` |
| | | } |
| | | |
| | | type Camera struct { |
| | | Id string `gorm:"primary_key;column:id;type:varchar(100);unique;" json:"id"` |
| | | Name string `gorm:"column:name" json:"name" bind:"required"` |
| | | Alias string `gorm:"column:alias" json:"alias"` //摄像机的别名 |
| | | SnapshotUrl string `gorm:"column:snapshot_url" json:"snapshot_url"`//快照地址 |
| | | Type int `gorm:"column:type" json:"type" ` |
| | | Addr string `gorm:"column:addr" json:"addr"` |
| | | Longitude float32 `gorm:"column:longitude" json:"longitude"` |
| | | Latitude float32 `gorm:"column:latitude" json:"latitude"` |
| | | Floor int `gorm:"column:floor" json:"floor"`//楼层 |
| | | Rtsp string `gorm:"column:rtsp" json:"rtsp"` |
| | | Ip string `gorm:"column:ip" json:"ip"` |
| | | Port int `gorm:"column:port" json:"port"` |
| | | Username string `gorm:"column:username" json:"username"` |
| | | Password string `gorm:"column:password" json:"password"` |
| | | Brand string `gorm:"column:brand" json:"brand"` |
| | | Reserved string `gorm:"column:reserved" json:"reserved"` |
| | | IsRunning bool `gorm:"column:is_running" json:"is_running"`//是否正在解码 |
| | | RunEnable bool `gorm:"column:run_enable" json:"run_enable"`//控制实时处理或轮询处理的开关 |
| | | RunType int `gorm:"column:run_type" json:"run_type"`//处理类型:0:轮询,1:实时,-1:无任务,不做分析或者分析任务被关了 |
| | | RunServerId string `gorm:"column:run_server_id" json:"run_server_id"`//当前正在处理的分析服务器id |
| | | Id string `gorm:"primary_key;column:id;type:varchar(100);unique;" json:"id"` |
| | | Name string `gorm:"column:name" json:"name" bind:"required"` |
| | | Alias string `gorm:"column:alias" json:"alias"` //摄像机的别名 |
| | | SnapshotUrl string `gorm:"column:snapshot_url" json:"snapshot_url"` //快照地址 |
| | | Type int `gorm:"column:type" json:"type" ` |
| | | Addr string `gorm:"column:addr" json:"addr"` |
| | | Longitude float32 `gorm:"column:longitude" json:"longitude"` |
| | | Latitude float32 `gorm:"column:latitude" json:"latitude"` |
| | | Floor int `gorm:"column:floor" json:"floor"` //楼层 |
| | | Rtsp string `gorm:"column:rtsp" json:"rtsp"` |
| | | Ip string `gorm:"column:ip" json:"ip"` |
| | | Port int `gorm:"column:port" json:"port"` |
| | | Username string `gorm:"column:username" json:"username"` |
| | | Password string `gorm:"column:password" json:"password"` |
| | | Brand string `gorm:"column:brand" json:"brand"` |
| | | Reserved string `gorm:"column:reserved" json:"reserved"` |
| | | IsRunning bool `gorm:"column:is_running" json:"is_running"` //是否正在解码 |
| | | RunEnable bool `gorm:"column:run_enable" json:"run_enable"` //控制实时处理或轮询处理的开关 |
| | | RunType int `gorm:"column:run_type" json:"run_type"` //处理类型:0:轮询,1:实时,-1:无任务,不做分析或者分析任务被关了 |
| | | RunServerId string `gorm:"column:run_server_id" json:"run_server_id"` //当前正在处理的分析服务器id |
| | | |
| | | ResolutionWidth int `gorm:"column:resolution_width;default:0" json:"resolution_width"`//分辨率宽 |
| | | ResolutionHeight int `gorm:"column:resolution_height;default:0" json:"resolution_height"`//分辨率高 |
| | | ResolutionWidth int `gorm:"column:resolution_width;default:0" json:"resolution_width"` //分辨率宽 |
| | | ResolutionHeight int `gorm:"column:resolution_height;default:0" json:"resolution_height"` //分辨率高 |
| | | |
| | | VoiceEnable bool `gorm:"column:voiceEnable;default:0" json:"voiceEnable"` |
| | | VoiceId string `gorm:"column:voiceId" json:"voiceId"` |
| | | VoiceEnable bool `gorm:"column:voiceEnable;default:0" json:"voiceEnable"` |
| | | VoiceId string `gorm:"column:voiceId" json:"voiceId"` |
| | | } |
| | | |
| | | type CameraTreeNode struct { |
| | | Id string `json:"id"` |
| | | Areaid string `json:"areaid"` |
| | | Name string `json:"name"` |
| | | CameraType int `json:"cameratype"`//是本地还是国标 |
| | | Rtsp string `json:"rtsp"` |
| | | Id string `json:"id"` |
| | | Areaid string `json:"areaid"` |
| | | Name string `json:"name"` |
| | | CameraType int `json:"cameratype"` //是本地还是国标 |
| | | Rtsp string `json:"rtsp"` |
| | | } |
| | | |
| | | func (camera *Camera) GetIdNameMap() (map[string]string) { |
| | | cameraEMap :=make(map[string]string,0) |
| | | func (camera *Camera) GetIdNameMap() map[string]string { |
| | | cameraEMap := make(map[string]string, 0) |
| | | allCams, err := camera.FindAll() |
| | | if err ==nil && allCams !=nil && len(allCams) >0 { |
| | | for _,model :=range allCams { |
| | | cameraEMap[model.Id]=model.Name |
| | | if err == nil && allCams != nil && len(allCams) > 0 { |
| | | for _, model := range allCams { |
| | | cameraEMap[model.Id] = model.Name |
| | | } |
| | | } |
| | | |
| | | return cameraEMap |
| | | } |
| | | |
| | | //cameraType (0:查全部,1:分析摄像机,2:监控摄像机) |
| | | //cameraName |
| | | // cameraType (0:查全部,1:分析摄像机,2:监控摄像机) |
| | | // cameraName |
| | | func (camera *Camera) Find(cameraType int, cameraName string, camType int, isPlatform int) (camMenus []CameraTreeNode, err error) { |
| | | logger.Debug("camType:",camType) |
| | | logger.Debug("camType:", camType) |
| | | cType := strconv.Itoa(camType) |
| | | var sql = "select c.id,ca.areaid as areaid,case ifnull(c.alias,'') when '' then c.name else c.alias end as name,c.type as cameratype,c.rtsp from camera_area ca join cameras c on ca.cameraid=c.id where c.type="+cType+"" |
| | | var sql = "select c.id,ca.areaid as areaid,case ifnull(c.alias,'') when '' then c.name else c.alias end as name,c.type as cameratype,c.rtsp from camera_area ca join cameras c on ca.cameraid=c.id where c.type=" + cType + "" |
| | | |
| | | if cameraName != "" { |
| | | sql += " and c.name like '%" + cameraName + "%'" |
| | | } |
| | | if cameraType == 1 { //查分析摄像机 |
| | | sql += " and (c.run_type="+strconv.Itoa(TYPE_RUNTYPE_POLL)+" or c.run_type="+strconv.Itoa(TYPE_RUNTYPE_REALTIME)+")" |
| | | sql += " and (c.run_type=" + strconv.Itoa(TYPE_RUNTYPE_POLL) + " or c.run_type=" + strconv.Itoa(TYPE_RUNTYPE_REALTIME) + ")" |
| | | } else if cameraType == 2 { //查监控摄像机 |
| | | sql += " and c.run_type="+strconv.Itoa(TYPE_RUNTYPE_VIDEO)+"" |
| | | sql += " and c.run_type=" + strconv.Itoa(TYPE_RUNTYPE_VIDEO) + "" |
| | | } else if cameraType == 3 { //查联动摄像机 |
| | | sql += " and c.id in (select crga.camera_id from camera_rule_group_arg crga join camera_task_link ctl on crga.group_id=ctl.link_task_id)" |
| | | } |
| | | if camType == TYPE_LOCAL_CAMERA {//国标的始终显示整棵树,本地树本机查本机,平台查所有 |
| | | if isPlatform == 0 {//查本机 |
| | | sql += " and c.run_server_id='"+config.Server.AnalyServerId+"'" |
| | | if camType == TYPE_LOCAL_CAMERA { //国标的始终显示整棵树,本地树本机查本机,平台查所有 |
| | | if isPlatform == 0 { //查本机 |
| | | sql += " and c.run_server_id='" + config.Server.AnalyServerId + "'" |
| | | } |
| | | } |
| | | |
| | |
| | | return camMenus, nil |
| | | } |
| | | |
| | | func (cam *Camera) FindAllByServer(serverId string,cameraName string)(list []Camera,err error) { |
| | | func (cam *Camera) FindAllByServer(serverId string, cameraName string) (list []Camera, err error) { |
| | | var sql = "select * from cameras where 1=1 " |
| | | if serverId != "" { |
| | | sql += " and (run_server_id='"+serverId+"' or (run_server_id ='' or run_server_id is NULL))" |
| | | sql += " and (run_server_id='" + serverId + "' or (run_server_id ='' or run_server_id is NULL))" |
| | | } |
| | | if cameraName != "" { |
| | | sql += " and name like '%"+cameraName+"%'" |
| | | sql += " and name like '%" + cameraName + "%'" |
| | | } |
| | | if err := db.Raw(sql).Scan(&list).Error;err !=nil{ |
| | | return nil,err |
| | | if err := db.Raw(sql).Scan(&list).Error; err != nil { |
| | | return nil, err |
| | | } |
| | | return list,nil |
| | | return list, nil |
| | | } |
| | | |
| | | func (camera *Camera) GetCamerasByRunType(runType int,cameraName string) (list []Camera,err error) { |
| | | analyServerId := config.Server.AnalyServerId//当前分析服务器的id(analyServerId,在配置文件中) |
| | | func (camera *Camera) GetCamerasByRunType(runType int, cameraName string) (list []Camera, err error) { |
| | | analyServerId := config.Server.AnalyServerId //当前分析服务器的id(analyServerId,在配置文件中) |
| | | sql := "select * from cameras where run_type=? and run_server_id=? " |
| | | if cameraName !=""{ |
| | | sql = sql+" and name like ?" |
| | | if cameraName != "" { |
| | | sql = sql + " and name like ?" |
| | | } |
| | | |
| | | if err := db.Raw(sql,runType,analyServerId,"%"+cameraName+"%").Scan(&list).Error;err !=nil{ |
| | | return nil,err |
| | | if err := db.Raw(sql, runType, analyServerId, "%"+cameraName+"%").Scan(&list).Error; err != nil { |
| | | return nil, err |
| | | } |
| | | return list,nil |
| | | return list, nil |
| | | } |
| | | |
| | | func (camera *Camera) Insert() (err error) { |
| | |
| | | } |
| | | |
| | | func (camera *Camera) FindAllMap() map[string]Camera { |
| | | m := make(map[string]Camera,0) |
| | | m := make(map[string]Camera, 0) |
| | | cams, err := camera.FindAll() |
| | | if err ==nil && cams !=nil { |
| | | for _,model :=range cams { |
| | | if err == nil && cams != nil { |
| | | for _, model := range cams { |
| | | m[model.Id] = model |
| | | } |
| | | } |
| | |
| | | } |
| | | |
| | | func (camera *Camera) Update() (err error) { |
| | | logger.Debug("camera:",camera) |
| | | longitude := fmt.Sprintf("%3.4f",camera.Longitude) |
| | | latitude := fmt.Sprintf("%3.4f",camera.Latitude) |
| | | logger.Debug("camera:", camera) |
| | | longitude := fmt.Sprintf("%3.4f", camera.Longitude) |
| | | latitude := fmt.Sprintf("%3.4f", camera.Latitude) |
| | | voiceEnable := 0 |
| | | if camera.VoiceEnable { |
| | | voiceEnable = 1 |
| | | } |
| | | sql := "update cameras set name='"+camera.Name+"',alias='"+camera.Alias+"',type="+strconv.Itoa(camera.Type)+",addr='"+camera.Addr+"',longitude="+longitude+",latitude="+latitude+",rtsp='"+camera.Rtsp+"',ip='"+camera.Ip+"',port="+strconv.Itoa(camera.Port)+",username='"+camera.Username+"',password='"+camera.Password+"',brand='"+camera.Brand+"',reserved='"+camera.Reserved+"',run_server_id='"+camera.RunServerId+"',resolution_width="+strconv.Itoa(camera.ResolutionWidth)+",resolution_height="+strconv.Itoa(camera.ResolutionHeight)+",voiceEnable="+strconv.Itoa(voiceEnable)+",voiceId='"+camera.VoiceId+"' where id='"+camera.Id+"'" |
| | | sql := "update cameras set name='" + camera.Name + "',alias='" + camera.Alias + "',type=" + strconv.Itoa(camera.Type) + ",addr='" + camera.Addr + "',longitude=" + longitude + ",latitude=" + latitude + ",rtsp='" + camera.Rtsp + "',ip='" + camera.Ip + "',port=" + strconv.Itoa(camera.Port) + ",username='" + camera.Username + "',password='" + camera.Password + "',brand='" + camera.Brand + "',reserved='" + camera.Reserved + "',run_server_id='" + camera.RunServerId + "',resolution_width=" + strconv.Itoa(camera.ResolutionWidth) + ",resolution_height=" + strconv.Itoa(camera.ResolutionHeight) + ",voiceEnable=" + strconv.Itoa(voiceEnable) + ",voiceId='" + camera.VoiceId + "' where id='" + camera.Id + "'" |
| | | |
| | | if err := db.Exec(sql).Error; err != nil { |
| | | return err |
| | |
| | | return nil |
| | | } |
| | | |
| | | func (camera *Camera) UpdateRunEnable(cameraId string,runEnable bool) bool{ |
| | | func (camera *Camera) UpdateRunEnable(cameraId string, runEnable bool) bool { |
| | | result := db.Exec("update cameras set run_enable=? where id=?", runEnable, cameraId) |
| | | if result.Error !=nil { |
| | | if result.Error != nil { |
| | | return false |
| | | } |
| | | return result.RowsAffected>0 |
| | | return result.RowsAffected > 0 |
| | | } |
| | | |
| | | func (camera *Camera) ChangeRunType(cameraId string,runType int) bool{ |
| | | func (camera *Camera) ChangeRunType(cameraId string, runType int) bool { |
| | | result := db.Exec("update cameras set run_type=? where id=?", runType, cameraId) |
| | | if result.Error !=nil { |
| | | if result.Error != nil { |
| | | return false |
| | | } |
| | | return result.RowsAffected>0 |
| | | return result.RowsAffected > 0 |
| | | } |
| | | |
| | | func (camera *Camera) UpdateIsRunningState(cameraId string,isRunning bool) bool{ |
| | | func (camera *Camera) UpdateIsRunningState(cameraId string, isRunning bool) bool { |
| | | isRunningStr := "0" |
| | | if isRunning { |
| | | isRunningStr = "1" |
| | | } |
| | | result := db.Exec("update cameras set is_running="+isRunningStr+" where id='"+cameraId+"'") |
| | | if result.Error !=nil { |
| | | result := db.Exec("update cameras set is_running=" + isRunningStr + " where id='" + cameraId + "'") |
| | | if result.Error != nil { |
| | | return false |
| | | } |
| | | return result.RowsAffected>0 |
| | | return result.RowsAffected > 0 |
| | | } |
| | | |
| | | func (camera *Camera) UpdateIsRunningAll(camIds []string) bool { |
| | | analyServerId := config.Server.AnalyServerId |
| | | sql := "update cameras set is_running=0 where run_server_id='"+analyServerId+"'" |
| | | sql := "update cameras set is_running=0 where run_server_id='" + analyServerId + "'" |
| | | uIds := "" |
| | | if camIds != nil { |
| | | for _,id := range camIds { |
| | | uIds = uIds + "'"+id+"'," |
| | | for _, id := range camIds { |
| | | uIds = uIds + "'" + id + "'," |
| | | } |
| | | } |
| | | uIds = strings.Trim(uIds, ",") |
| | | if uIds != "" { |
| | | sql += " and id not in ("+uIds+");update cameras set is_running=1 where run_server_id='"+analyServerId+"' and id in ("+uIds+");" |
| | | sql += " and id not in (" + uIds + ");update cameras set is_running=1 where run_server_id='" + analyServerId + "' and id in (" + uIds + ");" |
| | | } |
| | | logger.Debug("UpdateIsRunningAll sql:", sql) |
| | | result := db.Exec(sql) |
| | | if result.Error !=nil { |
| | | if result.Error != nil { |
| | | return false |
| | | } |
| | | return true |
| | | } |
| | | |
| | | func (camera *Camera) UpdateSnapshot(cameraId string, snapshot string) bool{ |
| | | func (camera *Camera) UpdateSnapshot(cameraId string, snapshot string) bool { |
| | | result := db.Exec("update cameras set snapshot_url=? where id=?", snapshot, cameraId) |
| | | if result.Error !=nil { |
| | | if result.Error != nil { |
| | | return false |
| | | } |
| | | return result.RowsAffected>0 |
| | | return result.RowsAffected > 0 |
| | | } |
| | | |
| | | func (camera *Camera) Delete(cid string) (int64, error) { |
| | | var err error |
| | | tx := GetDB().Begin() |
| | | defer func() { |
| | | if err !=nil && tx !=nil{ |
| | | if err != nil && tx != nil { |
| | | tx.Rollback() |
| | | } |
| | | }() |
| | | dbdel := tx.Exec("delete from cameras where id=?",cid) |
| | | dbdel := tx.Exec("delete from cameras where id=?", cid) |
| | | err = dbdel.Error |
| | | if err != nil || dbdel.RowsAffected == 0 { |
| | | return 0, err |
| | | } |
| | | if err = tx.Exec("delete from camera_polygon where camera_id=?",cid).Error;err !=nil{ |
| | | return 0,err |
| | | if err = tx.Exec("delete from camera_polygon where camera_id=?", cid).Error; err != nil { |
| | | return 0, err |
| | | } |
| | | if err = tx.Exec("delete from camera_area where cameraId=?",cid).Error;err !=nil { |
| | | return 0,err |
| | | if err = tx.Exec("delete from camera_area where cameraId=?", cid).Error; err != nil { |
| | | return 0, err |
| | | } |
| | | if err = tx.Exec("delete from camera_sensor where camera_id=?",cid).Error;err !=nil { |
| | | return 0,err |
| | | if err = tx.Exec("delete from camera_sensor where camera_id=?", cid).Error; err != nil { |
| | | return 0, err |
| | | } |
| | | tx.Commit() |
| | | //发布数据更改消息 |
| | | return dbdel.RowsAffected, nil |
| | | |
| | | } |
| | | } |
| | | |
| | | // 查询列表数据 |
| | | func GetListTask(ids []string) (items []Task, err error) { |
| | | //idList := strings.Join(ids, ",") |
| | | idList := "'" + strings.Join(ids, "','") + "'" |
| | | // 主查询SQL |
| | | //sqlStr := `select c.task_id, c.task_name from mal_task_video_link a left join mal_smart_task c on a.task_id = c.task_id where a.video_id in(?) ORDER BY a.task_id desc` |
| | | sqlStr := fmt.Sprintf(` |
| | | SELECT c.task_id, c.task_name |
| | | FROM mal_task_video_link a |
| | | LEFT JOIN mal_smart_task c ON a.task_id = c.task_id |
| | | WHERE a.video_id IN (%s) |
| | | ORDER BY a.task_id DESC |
| | | `, idList) |
| | | if err := db.Raw(sqlStr).Scan(&items).Error; err != nil { |
| | | fmt.Println(err.Error()) |
| | | return nil, err |
| | | } |
| | | return |
| | | } |