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