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