From d6a49ae26c8723d737e36d1ee544b2edafdae501 Mon Sep 17 00:00:00 2001 From: sunty <1172534965@qq.com> Date: 星期日, 26 五月 2024 18:51:15 +0800 Subject: [PATCH] 添加布控模块,合并person_status和snapshot_count_summary数据库等 --- config/config.go | 7 + task/service.go | 61 +++++++++----- api/analysisApi/server.go | 2 db/elasticScriptToId.go | 43 ++++++++++ go.mod | 2 rule/service.go | 41 ++++++++++ main.go | 10 ++ task/engine.go | 35 +++++++- config/app.yaml | 5 + 9 files changed, 170 insertions(+), 36 deletions(-) diff --git a/api/analysisApi/server.go b/api/analysisApi/server.go index 1192088..162c0dd 100644 --- a/api/analysisApi/server.go +++ b/api/analysisApi/server.go @@ -11,6 +11,6 @@ } func (s *Server) GetCodeList(ctx context.Context, params *analysis.SendAnalysisRequest) (*analysis.EmptyResponse, error) { - go task.TaskAnalysisService(params.DocumentNumber) + go task.TaskAnalysisService(params.Id) return &analysis.EmptyResponse{}, nil } diff --git a/config/app.yaml b/config/app.yaml index 222fd03..a5a2c20 100644 --- a/config/app.yaml +++ b/config/app.yaml @@ -26,4 +26,7 @@ maxAge: 15 api: host: 192.168.20.115 - port: 4101 \ No newline at end of file + port: 4101 + csTimes: 10 #climbed stairs times 绐滄ゼ娆℃暟 + csHours: 5 #climbed stairs hours 绐滄ゼ棰勮鏃堕棿 璇sHours鏃堕棿鑼冨洿涔嬪唴 + aInterval: 3 #interval time between anomalies 杩涘嚭寮傚父闂撮殧鏃堕棿 diff --git a/config/config.go b/config/config.go index f6ab35f..29c6c33 100644 --- a/config/config.go +++ b/config/config.go @@ -39,8 +39,11 @@ } type api struct { - Host string `mapstructure: "host"` - Port string `mapstructure: "port"` + Host string `mapstructure: "host"` + Port string `mapstructure: "port"` + CsTimes int `mapstructure:"csTimes"` + CsHours int `mapstructure:"csHours"` + AInterval int `mapstructure:"aInterval"` } var LogConf = &LogConfig{} diff --git a/db/elasticScriptToId.go b/db/elasticScriptToId.go new file mode 100644 index 0000000..48131b1 --- /dev/null +++ b/db/elasticScriptToId.go @@ -0,0 +1,43 @@ +package db + +import ( + "basic.com/pubsub/esutil.git" + "ruleModelEngine/config" + "strconv" +) + +func QueryByDays(days int) ([]string, error) { + esURL := "http://" + config.Elastic.Host + ":" + config.Elastic.Port + "/" + config.Elastic.Index + "/_search" + queryDSL := `{ + "query": { + "bool": { + "filter": [ + { + "range": { + "picDate": { + "gte": "now-` + strconv.Itoa(days) + `d/d" + } + } + } + ] + } + }, + "size":22139, + "_source": [ + "id" + ] +}` + ids := make([]string, 0) + buf, err := esutil.EsReq("POST", esURL, []byte(queryDSL)) + if err != nil { + return nil, err + } + source, err := esutil.Sourcelist(buf) + if err != nil { + return nil, err + } + for _, info := range source { + ids = append(ids, info["id"].(string)) + } + return ids, nil +} diff --git a/go.mod b/go.mod index 54341ae..0d27608 100644 --- a/go.mod +++ b/go.mod @@ -11,7 +11,7 @@ ) require ( - basic.com/CloudAI/protomsg.git v0.0.0-20240523091240-77f661e9c66f // indirect + basic.com/CloudAI/protomsg.git v0.0.0-20240524094225-61cfc0043e88 // indirect basic.com/pubsub/protomsg.git v0.0.0-20230210092337-5f1e6cdae7c3 // indirect filippo.io/edwards25519 v1.1.0 // indirect github.com/fsnotify/fsnotify v1.7.0 // indirect diff --git a/main.go b/main.go index 1fad01b..f2c68d4 100644 --- a/main.go +++ b/main.go @@ -2,12 +2,14 @@ import ( "basic.com/CloudAI/protomsg.git/analysis" + "fmt" "google.golang.org/grpc" "net" "ruleModelEngine/api/analysisApi" "ruleModelEngine/cache" "ruleModelEngine/config" "ruleModelEngine/db" + "ruleModelEngine/task" //"ruleModelEngine/task" @@ -63,8 +65,14 @@ logger.Info("Executing immediately...") rule.ExecuteTask() } + //r, _ := db.QueryByDays(3) + //for _, id := range r { + // task.TaskAnalysisService(id) + //} + //fmt.Println("ids: ", len(r)) + //return //task.TaskAnalysisService("3407b20e-6343-4832-88fa-a8e986552532") - //go initApiServer() + go initApiServer() //return now := time.Now() next := time.Date(now.Year(), now.Month(), now.Day()+1, 1, 0, 0, 0, now.Location()) diff --git a/rule/service.go b/rule/service.go index 6294c83..1323d28 100644 --- a/rule/service.go +++ b/rule/service.go @@ -3,8 +3,11 @@ import ( "basic.com/valib/logger.git" "fmt" + "ruleModelEngine/config" "ruleModelEngine/data" "ruleModelEngine/db" + "ruleModelEngine/task" + "strconv" ) // @@ -28,7 +31,43 @@ // 鎵ц绋嬪簭鍏ュ彛 func ExecuteTask() { - //return + //杩涘嚭寮傚父甯冩帶浠诲姟锛屾殏鏃跺綊绫诲埌鏍囩璁$畻閮ㄥ垎 + fmt.Println("杩涘嚭寮傚父寮�濮嬪叆鍙o紒锛侊紒锛侊紒锛�") + tasks, err := db.GetAllTaskData() + if err != nil { + logger.Error("GetAllTaskData Error", err) + } + var tkInfo db.Task + for _, taskInfo := range tasks { + if taskInfo.Name == "杩涘嚭寮傚父" { + tkInfo.Id = taskInfo.Id + tkInfo.Name = taskInfo.Name + } + } + fmt.Println("tkInfo: ", tkInfo) + days := config.Api.AInterval + docNumIdMap, err := db.QueryLastIdByDayRange(days, days-1) + if err != nil { + logger.Error("QueryByDayRange err: ", err) + } + fmt.Println("docNumIdMap: ", len(docNumIdMap)) + for docNumber, id := range docNumIdMap { + fmt.Println(docNumber, id) + alarmRules := make([]db.AlarmRule, 0) + flag := task.EnteringButNotLeaving(docNumber, id, days) + if flag == true { + alarmRules = append(alarmRules, db.AlarmRule{RuleId: strconv.Itoa(tkInfo.Id), RuleText: tkInfo.Name, AlarmLevel: "0"}) + } + addFlag, err := db.AddAlarmRules(alarmRules, id) + if err != nil { + logger.Error("AddAlarmRules err: ", err) + } + if addFlag == true { + logger.Info("AddAlarmRules success: ", id) + } + } + + return ruleInfo, err := db.GetAllData() if err != nil { logger.Error("GetAllData Error", err) diff --git a/task/engine.go b/task/engine.go index 9ec9330..c6b3d28 100644 --- a/task/engine.go +++ b/task/engine.go @@ -4,9 +4,13 @@ "basic.com/valib/logger.git" "ruleModelEngine/cache" "ruleModelEngine/db" + "time" ) func UnderageClimbingToRooftop(taskPerson db.TaskPerson) bool { + if taskPerson.Floor == "" { + return false + } age, err := db.GetAgeById(taskPerson.DocumentNumber) if err != nil { logger.Error("GetAgeById: ", err) @@ -30,14 +34,33 @@ } return false } -func ClimbingFloorsIllegally(taskPerson db.TaskPerson) bool { - - return true +func ClimbingFloorsIllegally(taskPerson db.TaskPerson, hours int, times int) bool { + layout := "2006-01-02 15:04:05" + picDate, err := time.Parse(layout, taskPerson.PicDate) + startTime := picDate.Add(time.Duration(-hours) * time.Hour).Format(layout) + floors, err := db.QueryCheckDataByDocumentNumber(taskPerson.DocumentNumber, startTime, taskPerson.PicDate) + if err != nil { + logger.Error("QueryCheckDataByDocumentNumber: ", err) + return false + } + if floors >= times { + return true + } + return false } -func EnteringButNotLeaving(taskPerson db.TaskPerson) bool { - return true +func EnteringButNotLeaving(docNumber string, id string, days int) bool { + total, err := db.QueryTimesByDocNumberDays(days-1, docNumber) + if err != nil { + logger.Error("QueryTimesByDocNumberDays err: ", err) + } + if total == 0 { + return true + } + + return false } + func registeredAddressNotMatchActualResidence(taskPerson db.TaskPerson) bool { - return true + return false } diff --git a/task/service.go b/task/service.go index 2f807ad..dbc89b7 100644 --- a/task/service.go +++ b/task/service.go @@ -2,20 +2,16 @@ import ( "basic.com/valib/logger.git" - "fmt" - "ruleModelEngine/cache" + "ruleModelEngine/config" "ruleModelEngine/db" + "strconv" "time" ) -type alarmRule struct { - ruleId int - ruleText string -} - func TaskAnalysisService(id string) { - alarmRules := make([]alarmRule, 0) - time.Sleep(time.Second * 2) + //fmt.Println("甯冩帶鍏ュ彛") + alarmRules := make([]db.AlarmRule, 0) + time.Sleep(time.Millisecond * 1) var taskPerson db.TaskPerson var err error for i := 0; i <= 2; i++ { @@ -26,47 +22,66 @@ if taskPerson.Id != "" { break } - time.Sleep(time.Second * 15) + time.Sleep(time.Second * 1) } - fmt.Println("personInfo: ", taskPerson) - fmt.Println("device: ", cache.Device) + //fmt.Println("personInfo: ", taskPerson) + //fmt.Println("device: ", cache.Device) tasks, err := db.GetAllTaskData() if err != nil { logger.Error("GetAllTaskData Error", err) } - fmt.Println(tasks) + //fmt.Println(tasks) for _, task := range tasks { switch task.Name { case "鏈垚骞村嚭椤舵ゼ": flag := UnderageClimbingToRooftop(taskPerson) if flag == true { - alarmRules = append(alarmRules, alarmRule{ruleId: task.Id, ruleText: task.Name}) + alarmRules = append(alarmRules, db.AlarmRule{RuleId: strconv.Itoa(task.Id), RuleText: task.Name, AlarmLevel: "0"}) } case "鏈垚骞村叆鍟嗕綇妤�": flag := UnderageEnteringCommercialBuilding(taskPerson) if flag == true { - alarmRules = append(alarmRules, alarmRule{ruleId: task.Id, ruleText: task.Name}) + alarmRules = append(alarmRules, db.AlarmRule{RuleId: strconv.Itoa(task.Id), RuleText: task.Name, AlarmLevel: "0"}) } case "绐滄ゼ": - flag := ClimbingFloorsIllegally(taskPerson) + flag := ClimbingFloorsIllegally(taskPerson, config.Api.CsHours, config.Api.CsTimes) if flag == true { - alarmRules = append(alarmRules, alarmRule{ruleId: task.Id, ruleText: task.Name}) + alarmRules = append(alarmRules, db.AlarmRule{RuleId: strconv.Itoa(task.Id), RuleText: task.Name, AlarmLevel: "0"}) } - case "鍙繘涓嶅嚭": - flag := EnteringButNotLeaving(taskPerson) - if flag == true { - alarmRules = append(alarmRules, alarmRule{ruleId: task.Id, ruleText: task.Name}) - } + case "杩涘嚭寮傚父": + continue + //days := config.Api.AInterval + //docNumIdMap, err := db.QueryLastIdByDayRange(days, days-1) + //if err != nil { + // logger.Error("QueryByDayRange err: ", err) + //} + // + //for docNumber, id := range docNumIdMap { + // flag := EnteringButNotLeaving(docNumber, id, days) + // alarmRules = append(alarmRules, db.AlarmRule{RuleId: strconv.Itoa(task.Id), RuleText: task.Name, AlarmLevel: "0"}) + // + // if flag == true { + // alarmRules = append(alarmRules, db.AlarmRule{RuleId: strconv.Itoa(task.Id), RuleText: task.Name, AlarmLevel: "0"}) + // } + //} + case "鐢充綇涓嶄竴": flag := registeredAddressNotMatchActualResidence(taskPerson) if flag == true { - alarmRules = append(alarmRules, alarmRule{ruleId: task.Id, ruleText: task.Name}) + alarmRules = append(alarmRules, db.AlarmRule{RuleId: strconv.Itoa(task.Id), RuleText: task.Name, AlarmLevel: "0"}) } default: continue } } + addFlag, err := db.AddAlarmRules(alarmRules, id) + if err != nil { + logger.Error("AddAlarmRules err: ", err) + } + if addFlag == true { + logger.Info("AddAlarmRules success: ", id) + } } -- Gitblit v1.8.0