From 24f44f6ecefb5e83295bab670533529c6bc81810 Mon Sep 17 00:00:00 2001
From: qixiaoning <jony.kee@outlook.com>
Date: 星期五, 18 七月 2025 18:13:16 +0800
Subject: [PATCH] 本地调试
---
camera-common/models/task.go | 1
camera-service/controllers/camera.go | 10 +
sync-service/models/cameraRuleGroup.go | 91 ++++++++++
sync-service/models/cameraPolygon.go | 89 ++++-----
sync-service/models/cameraRuleGroupArg.go | 108 ++++++++++++
api-gateway/main.go | 21 +-
config/pro.yaml | 183 +++++++++----------
camera-service/main.go | 14 +
8 files changed, 361 insertions(+), 156 deletions(-)
diff --git a/api-gateway/main.go b/api-gateway/main.go
index 332b684..03b2a1a 100644
--- a/api-gateway/main.go
+++ b/api-gateway/main.go
@@ -1,14 +1,16 @@
package main
import (
- "basic.com/valib/logc.git"
- "basic.com/valib/logger.git"
- "basic.com/valib/version.git"
"context"
"flag"
+
+ "basic.com/valib/logc.git"
+ "basic.com/valib/logger.git"
+ vaversion "basic.com/valib/version.git"
"github.com/gin-gonic/gin"
-// "net/http"
-// _ "net/http/pprof"
+
+ // "net/http"
+ // _ "net/http/pprof"
"os"
"os/signal"
"syscall"
@@ -23,17 +25,18 @@
var (
procName = service.ProcName
- env = flag.String("e", "pro", "")
+ env = flag.String("e", "pro", "")
)
-//func init() {
+// func init() {
func sinit() {
flag.Parse()
+ //鎺у埗鍙版墦鍗扮増鏈�
vaversion.Usage()
config.Init(*env)
// 鏃ュ織鍒濆鍖�
- var logFile = config.LogConf.Path + "vamicro-"+procName+".log"
+ var logFile = config.LogConf.Path + "vamicro-" + procName + ".log"
logger.InitLogger(logFile, config.LogConf.Level, config.LogConf.MaxSize, config.LogConf.MaxBackups, config.LogConf.MaxAge)
logger.Info("log init success !")
}
@@ -44,7 +47,7 @@
// logger.Info(http.ListenAndServe("0.0.0.0:6077", nil))
//}()
- sinit()
+ sinit()
models.Init()
defer models.CloseDB()
diff --git a/camera-common/models/task.go b/camera-common/models/task.go
new file mode 100644
index 0000000..2640e7f
--- /dev/null
+++ b/camera-common/models/task.go
@@ -0,0 +1 @@
+package models
diff --git a/camera-service/controllers/camera.go b/camera-service/controllers/camera.go
index 4f9c380..3effa9b 100644
--- a/camera-service/controllers/camera.go
+++ b/camera-service/controllers/camera.go
@@ -321,7 +321,7 @@
if sv.ChangeRunType(ccrVo) {
cIds := strings.Join(ccrVo.CameraIds, ",")
cc.addDbChangeMsg(h.Bk, protomsg.TableChanged_T_Camera, cIds, protomsg.DbAction_Update, "")
- _, _ = service2.DoBusReq("/data/api-v/saas/syncCamera", config.Server.AnalyServerId, aiot.RequestMethod_Post, aiot.RequestContentType_ApplicationJson, map[string]interface{}{})
+ _, _ = service2.DoBusReq("/data/api-v/saas/syncCamera", config.Server.AnalyServerId, aiot.RequestMethod_Post, aiot.RequestContentType_ApplicationJson, map[string]interface{}{})
return &bhomeclient.Reply{Success: true, Msg: "鏇存柊鎴愬姛"}
} else {
return &bhomeclient.Reply{Success: false, Msg: "鏇存柊澶辫触"}
@@ -1000,3 +1000,11 @@
_, _ = service2.DoBusReq("/data/api-v/saas/syncCamera", config.Server.AnalyServerId, aiot.RequestMethod_Post, aiot.RequestContentType_ApplicationJson, map[string]interface{}{})
return &bhomeclient.Reply{Success: true, Msg: "淇濆瓨鎴愬姛"}
}
+
+/**
+ * 鏍规嵁瑙嗛id鑾峰彇浠诲姟
+ */
+func (cc CameraController) GetTaskById(h *bhomeclient.WrapperHandler, c *bhomeclient.Request) *bhomeclient.Reply {
+ tasks := "hello,world"
+ return &bhomeclient.Reply{Success: true, Msg: "鑾峰彇鎴愬姛", Data: tasks}
+}
diff --git a/camera-service/main.go b/camera-service/main.go
index 0b4b54b..845179a 100644
--- a/camera-service/main.go
+++ b/camera-service/main.go
@@ -1,10 +1,6 @@
package main
import (
- "basic.com/valib/bhomeclient.git"
- "basic.com/valib/bhomedbapi.git"
- "basic.com/valib/logger.git"
- "basic.com/valib/version.git"
"context"
"flag"
"os"
@@ -15,6 +11,11 @@
"vamicro/camera-service/models"
"vamicro/camera-service/service"
"vamicro/config"
+
+ "basic.com/valib/bhomeclient.git"
+ "basic.com/valib/bhomedbapi.git"
+ "basic.com/valib/logger.git"
+ vaversion "basic.com/valib/version.git"
)
var (
@@ -75,7 +76,7 @@
ms.Free()
}
-//澶勭悊璁㈤槄娑堟伅
+// 澶勭悊璁㈤槄娑堟伅
func dealSubMsg(ctx context.Context, ms *bhomeclient.MicroNode) {
for {
@@ -125,6 +126,9 @@
funcMap[urlPrefix+"/camera/getSyncSensorData"] = cc.GetSyncSensorData
funcMap[urlPrefix+"/camera/saveNotExistOrUpdate"] = cc.SaveNotExistOrUpdate
+ //鎽勫儚鏈哄叧鑱旂潱鏌ヤ换鍔�
+ funcMap[urlPrefix+"/camera/getTasks"] = cc.GetTaskById
+
var pubTopics []string
for key, _ := range funcMap {
pubTopics = append(pubTopics, key)
diff --git a/config/pro.yaml b/config/pro.yaml
index 3f68211..5bdc2d5 100644
--- a/config/pro.yaml
+++ b/config/pro.yaml
@@ -1,42 +1,32 @@
server:
- serverName: "SmartAI"
runmode: debug
jwtSecret: BASIC
jwtExpire: 24
url: http://127.0.0.1:8080
- analyServerId: DSPAD010120211015235820
- networkAdapter: eth0
-#寰幆瑕嗙洊---------------------------------------------------------------------------------------------#
- #es鏈嶅姟IP 浠呭湪鍏徃娴嬭瘯鐜浣跨敤锛岀嚎涓婂嬁閰嶇疆
- esServerIp: 192.168.8.118
- #es鏈嶅姟绔彛 浠呭湪鍏徃娴嬭瘯鐜浣跨敤锛岀嚎涓婂嬁閰嶇疆
- esServerPort: 9200
-#---------------------------------------------------------------------------------------------寰幆瑕嗙洊#
- #骞惰绾跨▼杩涘埗
- coreBaseUnit: 100
- #瓒呮椂鏃堕棿
- timeOut: 2
+ analyServerId: DSVAD202505139F8038
+ networkAdapter: enp6s0
#鑴氭湰鐩綍
scriptPath: /opt/vasystem/script
#璁惧缂栧彿
deviceNum: 001
#璁惧鍨嬪彿
- deviceModel: Bsk-JS1000N
+ deviceModel: BSK-JS1000X
#璁惧鍨嬪彿
- deviceType: DS0104322264020416
+ deviceType: DS0301322264020416
deviceDesc: 鍒嗘瀽/瀛樺偍璁惧1
#璁惧搴忓垪鍙�
deviceSerialNum: 01
#涓绘帶鐗堟湰
- masterVersion: V1.0.0
+ masterVersion: V1.0.0.0
#web鐗堟湰
- webVersion: 2.0
+ webVersion: 2.0
#閫氶亾涓暟
channelCount: 0
#纭洏涓暟
diskCount: 2
#Exec root command
- sudoPassword: basic2021
+ sudoPassword: 123
+ rtspUnique: false
sysThresholds:
- value: 60
color: '#13ce66'
@@ -49,34 +39,78 @@
licensePath: /opt/vasystem/licence.inc
lKey: flzxsqc,ysyhljt.
lPublicKeyPath: /opt/vasystem/public.pem
+ headpics: ["none"]
+ langs:
+ - name: "绠�浣撲腑鏂�"
+ lang: "zh_CN.UTF-8"
+ language: "zh_CN:zh"
+ - name: "鑻辫"
+ lang: "en_US.UTF-8"
+ language: "en_US:en"
+ - name: "绻佷綋涓枃(棣欐腐)"
+ lang: "zh_HK.UTF-8"
+ language: "zh_HK:zh"
voices:
- id: 1
name: 1.mp3
- path: /files/voices/1.mp3
- - id: 2
+ path: /home/basic/files/1.mp3
+ - id: 2
name: 2.mp3
- path: /files/voices/2.mp3
+ path: /home/basic/files/2.mp3
- id: 3
name: 3.mp3
- path: /files/voices/3.mp3
+ path: /home/basic/files/3.mp3
- id: 4
name: 4.mp3
- path: /files/voices/4.mp3
+ path: /home/basic/files/4.mp3
- id: 5
name: 5.mp3
- path: /files/voices/5.mp3
- - id: lineup
- name: 璇锋湁搴忔帓闃�,涓嶈鎷ユ尋
- path: /files/voices/lineup.mp3
- - id: warningArea
- name: 璀︽垝鍖哄煙,灏藉揩绂诲紑
- path: /files/voices/warningArea.wav
-
+ path: /home/basic/files/5.mp3
+database:
+ driver: sqlite
+ name: sqlite3
+ filepath: /opt/vasystem/config/testdb.db
+cluster:
+ pwdpre: bjbasic123
+ #serf snapshot鏂囦欢鐨勫畬鏁磋矾寰�,serfSnapShot鏄釜鏂囦欢
+ serfsnapshotpath: /opt/vasystem/serfSnapShot
+ # 闆嗙兢鍐呴儴绔彛
+ port: 7081
+ # 闆嗙兢蹇冭烦闂撮殧
+ heartBeat: 15
+ # saas鏈嶅姟涓婃姤鍦板潃
+ saasReportUrl: 192.168.20.117:7081
+facedetect:
+ ip: 127.0.0.1
+ port: 4009
+dbpersoncompare:
+ ip: 127.0.0.1
+ port: 4010
+espersoncompare:
+ port: 4011
+ ips:
+ - 127.0.0.1
+weedfs:
+ port: 6333
+es:
+ port: 9200
+ shards: 1,2
+ index:
+ aiOcean:
+ index: ai_ocean
+ type: analysisModel
+ thresholdTime: 10
+ thresholdStayTime: 0
+ storePath:
+ - /data3/elasticsearch
#寰幆瑕嗙洊---------------------------------------------------------------------------------------------#
storage:
- mountPoint: ["data"]
+ #鍚宎nalyServerId
+ id: DSVAD20230919AC63EC
+ #鏂囦欢鏈嶅姟鎸傝浇鐐�
+ mountPoint: ["/data/disk1/"]
#鏂囦欢鏈嶅姟瀛樺偍璺緞
- volumePath: ["/data/disk2/seaweedfs/data/volume"]
+ volumePath: ["/data/disk1/seaweedfs/data/volume"]
#娓呯悊闃堝��
threshold: 85
#鏂囦欢鏈嶅姟绔彛--鐢ㄥ仛鎸囧畾鏈嶅姟绔彛浠诲姟鎺у埗
@@ -93,85 +127,42 @@
indexName: basicfs
indexType: clearItem
#---------------------------------------------------------------------------------------------寰幆瑕嗙洊#
-fileDb:
- driver: sqlite
- name: sqlite3
- filepath: /opt/vasystem/config/file-service.db
-file-service:
- savePath: /opt/vasystem/files
-shop:
- url: apps.smartai.com:7004
-database:
+fileDb:
driver: sqlite
- name: sqlite3
- filepath: /opt/vasystem/config/testdb.db
-cluster:
- pwdpre: bjbasic123
- #serf snapshot鏂囦欢鐨勫畬鏁磋矾寰�,serfSnapShot鏄釜鏂囦欢
- serfsnapshotpath: /opt/vasystem/serfSnapShot
- # 鍐呴儴闆嗙兢閰嶇疆
- # 闆嗙兢鍐呴儴绔彛
- port: 7081
- # 闆嗙兢蹇冭烦闂撮殧
- heartBeat: 15
- # saas鏈嶅姟涓婃姤鍦板潃
- saasReportUrl: 192.168.20.117:7081
-
+ name: sqlite
+ filepath: /opt/vasystem/config/file-service.db
+file-service:
+ savePath: /opt/vasystem/files
+shop:
+ url: 127.0.0.1:7004
saas:
- url: 192.168.20.117:7080
-
-facedetect:
- ip: 127.0.0.1
- port: 4009
-dbpersoncompare:
- ip: 127.0.0.1
- port: 4010
-espersoncompare:
- port: 4011
- ips:
- - 127.0.0.1
-redis:
- host: 127.0.0.1
- port: 6379
- password: password
- db: 1
-es:
- shards: 1,2
- index:
- # 浜鸿劯鎶撴媿璁板綍
- videopersons:
- index: videopersons
- type: perVideoPicture
- # 琛屼负鎶撴媿璁板綍*
- personaction:
- index: personaction
- type: perVideoAction
- aiocean:
- index: ai_ocean
- type: analysisModel
- thresholdTime: 10
- thresholdStayTime: 0
+ url: 192.168.20.117:7080
+ruletrack:
+ timeout_seconds: 30
+ target_box: 1
+ jitter_buffer: 300
#so閰嶇疆
sopath:
ip: 192.168.1.182
port: 8008
-ruletrack:
- timeout_seconds: 86400
- movepos: 1
-
#閫氱敤閰嶇疆
LogBasePath: /opt/vasystem/valog/
-LogLevel: 5
+LogLevel: 5
log:
path: /opt/vasystem/valog/
level: -1
maxSize: 128
maxBackups: 30
maxAge: 15
-
-#鎺ㄦ祦
MaxStreamsNum: 16
+#鎺ㄦ祦
LibFfmpegPath: /opt/vasystem/libs/libcffmpeg-capture.so
VideoPublishWidth: 960
VideoPublishHeight: 640
VideoPublishPort: 10101
+
+SenderFreq: 1000
+
+#so閰嶇疆
+trace:
+ useBlockList: 1
diff --git a/sync-service/models/cameraPolygon.go b/sync-service/models/cameraPolygon.go
index 04a4376..8e50e25 100644
--- a/sync-service/models/cameraPolygon.go
+++ b/sync-service/models/cameraPolygon.go
@@ -1,26 +1,25 @@
package models
import (
- "basic.com/pubsub/protomsg.git"
- "basic.com/valib/logger.git"
- "encoding/json"
"regexp"
+
+ "basic.com/valib/logger.git"
)
type CameraPolygon struct {
Id string `gorm:"primary_key;column:id" json:"id"`
- CameraId string `gorm:"column:camera_id" json:"camera_id"` //鎽勫儚鏈篿d
- Name string `gorm:"column:name" json:"name"` //褰㈢姸鍚嶇О
- Polygon string `gorm:"column:polygon" json:"polygon"` //褰㈢姸缁撴瀯瀹氫箟
- DirectionLine string `gorm:"column:direction_line" json:"direction_line"` //鏂瑰悜绾�
- Type string `gorm:"column:type" json:"type"` //绫诲瀷锛孾"line","rect","polygon"]
+ CameraId string `gorm:"column:camera_id" json:"camera_id"` //鎽勫儚鏈篿d
+ Name string `gorm:"column:name" json:"name"` //褰㈢姸鍚嶇О
+ Polygon string `gorm:"column:polygon" json:"polygon"` //褰㈢姸缁撴瀯瀹氫箟
+ DirectionLine string `gorm:"column:direction_line" json:"direction_line"` //鏂瑰悜绾�
+ Type string `gorm:"column:type" json:"type"` //绫诲瀷锛孾"line","rect","polygon"]
DefenceState int `gorm:"column:defence_state;default:0" json:"defence_state"` //甯冩挙闃茬姸鎬�
}
const (
- TYPE_LINE = "line" //绾�
- TYPE_RECT = "rect" //鐭╁舰
- TYPE_POLYGON = "polygon" //闈�
+ TYPE_LINE = "line" //绾�
+ TYPE_RECT = "rect" //鐭╁舰
+ TYPE_POLYGON = "polygon" //闈�
CAMERAPOLYGON_AREA_ALL = "鍏ㄩ儴鍖哄煙"
)
@@ -35,44 +34,44 @@
}
func (cp *CameraPolygon) FindAll() (polygons []CameraPolygon) {
- if err := db.Table("camera_polygon").Scan(&polygons).Error;err !=nil {
+ if err := db.Table("camera_polygon").Scan(&polygons).Error; err != nil {
return nil
}
return polygons
}
func (cp *CameraPolygon) FindAllMap() map[string]CameraPolygon {
- m := make(map[string]CameraPolygon,0)
+ m := make(map[string]CameraPolygon, 0)
polygons := cp.FindAll()
- if polygons !=nil {
- for _,p :=range polygons {
+ if polygons != nil {
+ for _, p := range polygons {
m[p.Id] = p
}
}
return m
}
-func (cp *CameraPolygon) SelectById(id string) (model CameraPolygon,flag bool) {
- exist := db.Table("camera_polygon").First(&model,"id=?",id).RecordNotFound()
- return model,!exist
+func (cp *CameraPolygon) SelectById(id string) (model CameraPolygon, flag bool) {
+ exist := db.Table("camera_polygon").First(&model, "id=?", id).RecordNotFound()
+ return model, !exist
}
func (cp *CameraPolygon) FindAllByCameraId(cameraId string) (polygons []CameraPolygon, err error) {
- if err := db.Table("camera_polygon").Where("camera_id = ?", cameraId).Scan(&polygons).Error;err !=nil {
+ if err := db.Table("camera_polygon").Where("camera_id = ?", cameraId).Scan(&polygons).Error; err != nil {
return nil, err
}
- return polygons,nil
+ return polygons, nil
}
-//FindByCameraId 鏍规嵁鎽勫儚鏈篿d鏌ユ壘鍦ㄨ鍒欎腑浣跨敤鐨勫杈瑰舰
+// FindByCameraId 鏍规嵁鎽勫儚鏈篿d鏌ユ壘鍦ㄨ鍒欎腑浣跨敤鐨勫杈瑰舰
func (cp *CameraPolygon) FindRulePolygonsByCameraId(cameraId string) (polygons []CameraPolygon, err error) {
- if err := db.Table("camera_polygon").Where("camera_id = ? and type !=?", cameraId, TYPE_LINE).Scan(&polygons).Error;err !=nil {
+ if err := db.Table("camera_polygon").Where("camera_id = ? and type !=?", cameraId, TYPE_LINE).Scan(&polygons).Error; err != nil {
return nil, err
}
- return polygons,nil
+ return polygons, nil
}
-//淇濆瓨鎽勫儚鏈哄尯鍩�
+// 淇濆瓨鎽勫儚鏈哄尯鍩�
func (cp *CameraPolygon) Insert() (result bool, err error) {
if err = db.Table("camera_polygon").Save(&cp).Error; err != nil {
return false, err
@@ -80,63 +79,63 @@
return true, nil
}
-//鏇存柊鎽勫儚鏈哄尯鍩�
-func (cp *CameraPolygon) Update() (bool,error) {
- result := db.Exec("update camera_polygon set camera_id=?,name=?,polygon=?,direction_line=?,type=?,defence_state=? where id=?",cp.CameraId,cp.Name,cp.Polygon,cp.DirectionLine,cp.Type,cp.DefenceState,cp.Id)
+// 鏇存柊鎽勫儚鏈哄尯鍩�
+func (cp *CameraPolygon) Update() (bool, error) {
+ result := db.Exec("update camera_polygon set camera_id=?,name=?,polygon=?,direction_line=?,type=?,defence_state=? where id=?", cp.CameraId, cp.Name, cp.Polygon, cp.DirectionLine, cp.Type, cp.DefenceState, cp.Id)
if result.Error != nil {
return false, result.Error
}
return result.RowsAffected > 0, nil
}
-//鍒ゆ柇鎽勫儚鏈烘湁娌℃湁閲嶅悕鐨勫尯鍩�
+// 鍒ゆ柇鎽勫儚鏈烘湁娌℃湁閲嶅悕鐨勫尯鍩�
func (cp CameraPolygon) Exist(cameraId string, name string) (model CameraPolygon, exist bool) {
exist = db.Table("camera_polygon").First(&model, "camera_id=? and name=?", cameraId, name).RecordNotFound()
return model, !exist
}
-//UnInstall 鍒犻櫎鎽勫儚鏈哄尯鍩�
-func (cp *CameraPolygon) Delete(id string,name string) bool {
- if err := db.Table("camera_polygon").Where("id=?",id).Delete(&CameraPolygon{}).Error; err != nil {
+// UnInstall 鍒犻櫎鎽勫儚鏈哄尯鍩�
+func (cp *CameraPolygon) Delete(id string, name string) bool {
+ if err := db.Table("camera_polygon").Where("id=?", id).Delete(&CameraPolygon{}).Error; err != nil {
return false
}
var crg CameraRuleGroup
groups := crg.FindGroupByPolygonId(id)
if groups != nil {
- for _,g :=range groups {
+ for _, g := range groups {
//灏唃roupText涓殑宸插垹闄ょ殑澶氳竟褰㈠悕绉版浛鎹负NULL
- reg := regexp.MustCompile(`(`+name+`浜�)`)
+ reg := regexp.MustCompile(`(` + name + `浜�)`)
newGText := reg.ReplaceAllString(g.GroupText, `<span style="color:RGB(255,0,0);">NULL</span>浜巂)
crg.UpdateText(g.Id, newGText)
}
}
- err := db.Exec("update camera_task_args set polygon_id='' where polygon_id=?",id).Error
- if err !=nil {
- logger.Debug("rm polygon_id in camera_task_args err:",err)
+ err := db.Exec("update camera_task_args set polygon_id='' where polygon_id=?", id).Error
+ if err != nil {
+ logger.Debug("rm polygon_id in camera_task_args err:", err)
}
return true
}
-func (cp *CameraPolygon) UpdateDefenceStateByPolygonId(polygonId string,state int) bool {
- result := db.Exec("update camera_polygon set defence_state=? where id=?",state,polygonId)
- if result.Error!=nil{
+func (cp *CameraPolygon) UpdateDefenceStateByPolygonId(polygonId string, state int) bool {
+ result := db.Exec("update camera_polygon set defence_state=? where id=?", state, polygonId)
+ if result.Error != nil {
return false
}
- if result.RowsAffected>0{
+ if result.RowsAffected > 0 {
return true
} else {
return false
}
}
-func (cp *CameraPolygon) UpdateDefenceStateByCameraId(cameraId string,state int) bool {
- result := db.Exec("update camera_polygon set defence_state=? where camera_id=?",state,cameraId)
- if result.Error!=nil{
+func (cp *CameraPolygon) UpdateDefenceStateByCameraId(cameraId string, state int) bool {
+ result := db.Exec("update camera_polygon set defence_state=? where camera_id=?", state, cameraId)
+ if result.Error != nil {
return false
}
- if result.RowsAffected>0{
+ if result.RowsAffected > 0 {
return true
} else {
return false
}
-}
\ No newline at end of file
+}
diff --git a/sync-service/models/cameraRuleGroup.go b/sync-service/models/cameraRuleGroup.go
new file mode 100644
index 0000000..5b0deb0
--- /dev/null
+++ b/sync-service/models/cameraRuleGroup.go
@@ -0,0 +1,91 @@
+package models
+
+type CameraRuleGroup struct {
+ Id string `gorm:"primary_key;column:id" json:"id"`
+ GroupText string `gorm:"column:group_text" json:"group_text"`
+ AlarmLevel int `gorm:"column:alarm_level;default:1" json:"alarm_level"`
+ SetType string `gorm:"column:set_type" json:"set_type"`
+
+ TemplateId string `gorm:"column:template_id" json:"template_id"` //鍦烘櫙妯℃澘id
+ TemplateRule string `gorm:"column:template_rule" json:"template_rule"` //鍦烘櫙妯℃澘鐨勯厤缃�
+ TimeRuleId string `gorm:"column:time_rule_id" json:"time_rule_id"` //鏃堕棿娈�
+ SceneName string `gorm:"column:scene_name" json:"scene_name"` //鍦烘櫙鍚嶇О锛屼粠妯℃澘鏉ワ紝淇敼鍗宠嚜瀹氫箟
+ Desc string `gorm:"column:desc" json:"desc"` //鍦烘櫙鎻忚堪
+ Enable bool `gorm:"column:enable;default:1" json:"enable"` //寮�鍏筹紝榛樿寮�鍚�
+
+ VoiceId string `gorm:"column:voiceId" json:"voiceId"` //浜嬩欢澹伴煶
+}
+
+const (
+ Type_SetType_Batch = "batchTask"
+ Type_SetType_Link = "linkTask"
+ RecordNotFound = "record not found"
+)
+
+func (CameraRuleGroup) TableName() string {
+ return "camera_rule_group"
+}
+
+func (crg *CameraRuleGroup) SelectById(id string) (rows int64, err error) {
+ result := db.Table(crg.TableName()).Where("id = ?", id).First(&crg)
+ if result.Error != nil && result.Error.Error() != RecordNotFound {
+ return 0, result.Error
+ }
+ return result.RowsAffected, nil
+}
+
+func (crg *CameraRuleGroup) FindAll() (list []CameraRuleGroup) {
+ if err := db.Table(crg.TableName()).Scan(&list).Error; err != nil {
+ return nil
+ }
+ return list
+}
+func (crg *CameraRuleGroup) Insert() (bool, error) {
+ if err := db.Table(crg.TableName()).Create(&crg).Error; err != nil {
+ return false, err
+ }
+ return true, nil
+}
+
+func (crg *CameraRuleGroup) FindByCameraId(cameraId string, setType string) (arr []CameraRuleGroup, err error) {
+ sql := "select * from " + crg.TableName() + " where id in (select distinct group_id from " + CameraRuleGroupArg{}.TableName() + " where camera_id='" + cameraId + "')"
+ if setType != "" {
+ sql += " and set_type='batchTask'"
+ }
+ if err := db.Raw(sql).Scan(&arr).Error; err != nil {
+ return nil, err
+ }
+ return arr, nil
+}
+
+func (crg *CameraRuleGroup) FindGroupByPolygonId(polygonId string) (list []CameraRuleGroup) {
+ var rga CameraRuleGroupArg
+ err := db.Raw("select * from "+crg.TableName()+" where id in (select distinct group_id from "+rga.TableName()+" where polygon_id=?)", polygonId).Find(&list).Error
+ if err != nil {
+ return nil
+ }
+ return list
+}
+
+func (crg *CameraRuleGroup) UpdateText(id string, text string) bool {
+ execResult := db.Exec("update "+crg.TableName()+" set group_text=? where id=?", text, id)
+ if execResult.Error != nil {
+ return false
+ }
+ return execResult.RowsAffected > 0
+}
+
+func (crg *CameraRuleGroup) UpdateAlarmLevel(groupId string, alarmLevel int) bool {
+ execResult := db.Exec("update "+crg.TableName()+" set alarm_level=? where id=?", alarmLevel, groupId)
+ if execResult.Error != nil {
+ return false
+ }
+ return execResult.RowsAffected > 0
+}
+
+func (crg *CameraRuleGroup) FindByTimeRuleId(timeRuleId string) (list []CameraRuleGroup, e error) {
+ if err := db.Table(crg.TableName()).Where("time_rule_id=?", timeRuleId).Scan(&list).Error; err != nil {
+ return nil, err
+ }
+ return list, nil
+}
diff --git a/sync-service/models/cameraRuleGroupArg.go b/sync-service/models/cameraRuleGroupArg.go
new file mode 100644
index 0000000..2713785
--- /dev/null
+++ b/sync-service/models/cameraRuleGroupArg.go
@@ -0,0 +1,108 @@
+package models
+
+type CameraRuleBase struct {
+ CameraId string `gorm:"column:camera_id" json:"camera_id"` //鎽勫儚鏈篿d
+ SdkId string `gorm:"column:sdk_id" json:"sdk_id"` //绠楁硶id
+ PolygonId string `gorm:"column:polygon_id" json:"polygon_id"` //澶氳竟褰d
+ SdkSet string `gorm:"column:sdk_set" json:"sdk_set"` //绠楁硶id
+ RuleWithPre string `gorm:"column:rule_with_pre" json:"rule_with_pre"` //涓庝笂涓�鏉¤褰曠殑閫昏緫杩愮畻瑙勫垯锛�&&,||锛�
+ IsSaveAnyhow bool `gorm:"column:is_save_anyhow;default:0;" json:"is_save_anyhow"` //rule_with_pre鏄Е鍙戞椂锛屾槸鍚︽棤璁鸿瑙﹀彂鐨勬潯浠舵弧涓嶆弧瓒筹紝閮戒繚鐣欐暟鎹�
+ GroupId string `gorm:"column:group_id" json:"group_id"` //鍒嗙粍id
+ Sort int `gorm:"column:sort" json:"sort"` //鎺掑簭
+}
+
+type CameraRuleGroupArg struct {
+ Id string `gorm:"column:id;primary_key;type:varchar(50);unique;not null;" json:"id"`
+ CameraRuleBase
+}
+
+func (CameraRuleGroupArg) TableName() string {
+ return "camera_rule_group_arg"
+}
+
+func (rga *CameraRuleGroupArg) InsertByGroup() bool {
+ tx := db.Table(rga.TableName()).Begin()
+
+ if tx.Error != nil {
+ return false
+ }
+
+ if err := tx.Create(&rga).Error; err != nil {
+ tx.Rollback()
+ return false
+ }
+ if tx.Commit().Error == nil {
+ return true
+ }
+ return false
+}
+
+func (rga *CameraRuleGroupArg) FindAll() (args []CameraRuleGroupArg) {
+ if err := db.Table(rga.TableName()).Scan(&args).Error; err != nil {
+ return nil
+ }
+ return args
+}
+
+type DbGroupId struct {
+ GroupId string `json:"group_id"`
+}
+
+
+func (rga *CameraRuleGroupArg) FindGroupIdByCameraId(cameraId string) (groupIds []DbGroupId, err error) {
+ if err := db.Raw("select distinct group_id from "+rga.TableName()+" where camera_id=?", cameraId).Scan(&groupIds).Error; err != nil {
+ return nil, err
+ }
+ return groupIds, nil
+}
+
+//DeleteByGroup 鏍规嵁group_id鍒犻櫎瑙勫垯缁勮缃�
+func (rga CameraRuleGroupArg) DeleteByGroup(groupId string) bool {
+ var crg CameraRuleGroup
+ var err error
+ tx := db.Begin()
+ defer func() {
+ if err != nil && tx != nil {
+ tx.Rollback()
+ }
+ }()
+ if err = tx.Table(rga.TableName()).Where("group_id=?", groupId).Delete(CameraRuleGroupArg{}).Error; err != nil {
+ return false
+ }
+ if err = tx.Table(crg.TableName()).Where("group_id=?", groupId).Delete(crg).Error; err != nil {
+ return false
+ }
+ if err = tx.Commit().Error; err != nil {
+ return false
+ } else {
+ return true
+ }
+}
+
+func (rga CameraRuleGroupArg) FindByGroupId(groupId string) (rags []CameraRuleGroupArg) {
+ if err := db.Table(rga.TableName()).Where("group_id=?", groupId).Find(&rags).Error; err != nil {
+ return nil
+ }
+ return rags
+}
+
+//鍒ゆ柇澶氳竟褰㈡槸鍚﹀湪瑙勫垯璁剧疆涓鍦ㄤ娇鐢�
+func (rga CameraRuleGroupArg) IsPolygonInUse(polygonId string) bool {
+ var rules []CameraRuleGroupArg
+ if err := db.Table(rga.TableName()).Where("polygon_id=?", polygonId).Find(&rules).Error; err != nil {
+ return true
+ }
+ if len(rules) == 0 {
+ return false
+ }
+ return true
+}
+
+func (rga CameraRuleGroupArg) ExistRunningTask(cameraId string) bool {
+ var arr []CameraRuleGroupArg
+ if err = db.Raw("select a.* from "+CameraRuleGroupArg{}.TableName()+" a join "+CameraRuleGroup{}.TableName()+" g on a.group_id=g.id where a.camera_id=? and g.enable=1",cameraId).Scan(&arr).Error;err !=nil{
+ return false
+ }
+ return len(arr) >0
+
+}
\ No newline at end of file
--
Gitblit v1.8.0