From 61c76d09c574cbd308294dae7a2e9115d1ce5004 Mon Sep 17 00:00:00 2001
From: sunty <1172534965@qq.com>
Date: 星期四, 30 五月 2024 13:42:08 +0800
Subject: [PATCH] 调整进出异常过滤 置在数据段

---
 db/repository.go |    1 
 db/elastic.go    |   26 ++++++++++++-
 db/models.go     |    1 
 rule/service.go  |   29 ++++++++++++--
 task/engine.go   |    4 +-
 5 files changed, 51 insertions(+), 10 deletions(-)

diff --git a/db/elastic.go b/db/elastic.go
index de9734d..2f0f9d3 100644
--- a/db/elastic.go
+++ b/db/elastic.go
@@ -34,7 +34,8 @@
 	return captureInfos, nil
 }
 
-func QueryTimesByDocNumberDays(days int, docNumber string) (int, error) {
+func QueryTimesByDocNumberDays(docNumber string, communityId string, cameraIds []string, days int) (int, error) {
+	cameraIdsStr := strings.Replace(strings.Trim(fmt.Sprint(cameraIds), "[]"), " ", "\",\"", -1)
 	esURL := "http://" + config.Elastic.Host + ":" + config.Elastic.Port + "/" + config.Elastic.Index + "/_search"
 	queryDSL := `{
     "query": {
@@ -50,6 +51,16 @@
                 {
                     "term": {
                         "documentNumber": "` + docNumber + `"
+                    }
+                },
+                {
+                    "term": {
+                        "communityId": "` + communityId + `"
+                    }
+                },
+                {
+                    "terms": {
+                        "cameraId": ["` + cameraIdsStr + `"]
                     }
                 }
             ]
@@ -68,7 +79,8 @@
 	return total, nil
 }
 
-func QueryLastIdByDayRange(dayGte, dayLt int) (map[string]string, error) {
+func QueryLastIdByDayRange(communityId string, cameraIds []string, dayGte, dayLt int) (map[string]string, error) {
+	cameraIdsStr := strings.Replace(strings.Trim(fmt.Sprint(cameraIds), "[]"), " ", "\",\"", -1)
 	esURL := "http://" + config.Elastic.Host + ":" + config.Elastic.Port + "/" + config.Elastic.Index + "/_search"
 	queryDSL := `{
     "query": {
@@ -81,6 +93,16 @@
                             "lt": "now-` + strconv.Itoa(dayLt) + `d/d"
                         }
                     }
+                },
+                {
+                    "term": {
+                        "communityId": "` + communityId + `"
+                    }
+                },
+                {
+                    "terms": {
+                        "cameraId": ["` + cameraIdsStr + `"]
+                    }
                 }
             ]
         }
diff --git a/db/models.go b/db/models.go
index 9348dda..d6125f2 100644
--- a/db/models.go
+++ b/db/models.go
@@ -43,6 +43,7 @@
 
 type Device struct {
 	DeviceCode       string       `gorm:"column:deviceCode" json:"deviceCode" example:"J83762"`                                 //璁惧缂栫爜
+	AreaID           string       `json:"areaID" gorm:"index;column:communityID;type:varchar(299);"`                            //甯镐綇灏忓尯 domain unit ID
 	BuildingType     BuildingType `gorm:"column:building_type;type:tinyint(1);not null;default:0" json:"buildingType"`          //妤煎畤绫诲瀷
 	MaxBuildingFloor int          `gorm:"column:max_building_floor;type:tinyint(1);not null;default:0" json:"maxBuildingFloor"` //鏈�楂樻ゼ灞傚彿
 }
diff --git a/db/repository.go b/db/repository.go
index afa5a12..48b4757 100644
--- a/db/repository.go
+++ b/db/repository.go
@@ -28,7 +28,6 @@
 	if result.Error != nil {
 		return nil, result.Error
 	}
-
 	return device, nil
 }
 
diff --git a/rule/service.go b/rule/service.go
index 2a476d2..5fac3c6 100644
--- a/rule/service.go
+++ b/rule/service.go
@@ -3,6 +3,7 @@
 import (
 	"basic.com/valib/logger.git"
 	"fmt"
+	"ruleModelEngine/cache"
 	"ruleModelEngine/config"
 	"ruleModelEngine/data"
 	"ruleModelEngine/db"
@@ -29,8 +30,7 @@
 //	return true
 //}
 
-// 鎵ц绋嬪簭鍏ュ彛
-func ExecuteTask() {
+func executeEnteringButNotLeaving(communityId string) {
 	//杩涘嚭寮傚父甯冩帶浠诲姟锛屾殏鏃跺綊绫诲埌鏍囩璁$畻閮ㄥ垎
 	//fmt.Println("杩涘嚭寮傚父寮�濮嬪叆鍙o紒锛侊紒锛侊紒锛�")
 	tasks, err := db.GetAllTaskData()
@@ -44,17 +44,31 @@
 			tkInfo.Name = taskInfo.Name
 		}
 	}
+
 	//fmt.Println("tkInfo: ", tkInfo)
+	//fmt.Println("docNumIdMap: ", len(docNumIdMap))
+	//鑾峰彇鍟嗕綇妤糲ameraid
+
+	cameraIds := make([]string, 0)
+	for _, deviceInfo := range cache.Device {
+		if deviceInfo.AreaID == communityId && deviceInfo.BuildingType == db.BuildingTypeMixedUse {
+			cameraIds = append(cameraIds, deviceInfo.DeviceCode)
+		}
+	}
+	if len(cameraIds) == 0 {
+		logger.Info("涓嶅瓨鍦ㄥ晢浣忔ゼ璁惧锛�", cameraIds)
+		return
+	}
+	//鏌ヨ寰呭垽鏂繘鍑哄紓甯搁璀︽。妗�
 	days := config.Api.AInterval
-	docNumIdMap, err := db.QueryLastIdByDayRange(days, days-1)
+	docNumIdMap, err := db.QueryLastIdByDayRange(communityId, cameraIds, 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, days)
+		flag := task.EnteringButNotLeaving(docNumber, communityId, cameraIds, days)
 		if flag == true {
 			alarmRules = append(alarmRules, db.AlarmRule{RuleId: strconv.Itoa(tkInfo.Id), RuleText: tkInfo.Name, AlarmLevel: "0"})
 		}
@@ -67,7 +81,10 @@
 			logger.Info("AddAlarmRules success: ", id)
 		}
 	}
+}
 
+// 鎵ц绋嬪簭鍏ュ彛
+func ExecuteTask() {
 	//return
 	ruleInfo, err := db.GetAllData()
 	if err != nil {
@@ -85,11 +102,13 @@
 	}
 	//fmt.Println(labeManage)
 	for _, communityID := range communityIDs {
+		executeEnteringButNotLeaving(communityID)
 		//涓囧叏绀惧尯
 		//if communityID != "50010101010000001001" {
 		//	continue
 		//}
 		fmt.Println("communityID: ", communityID)
+		//continue
 		//鏌ヨ绀惧尯鍐呬汉鍛樻。妗堬紝鏂逛究鏁版嵁鏇存柊
 		personStatusList, err := db.QueryPersonStatusWithPagination(communityID, 30)
 		if err != nil {
diff --git a/task/engine.go b/task/engine.go
index 53c59c2..c3b1452 100644
--- a/task/engine.go
+++ b/task/engine.go
@@ -49,8 +49,8 @@
 	return false
 }
 
-func EnteringButNotLeaving(docNumber string, days int) bool {
-	total, err := db.QueryTimesByDocNumberDays(days-1, docNumber)
+func EnteringButNotLeaving(docNumber string, communityId string, cameraIds []string, days int) bool {
+	total, err := db.QueryTimesByDocNumberDays(docNumber, communityId, cameraIds, days-1)
 	if err != nil {
 		logger.Error("QueryTimesByDocNumberDays err: ", err)
 	}

--
Gitblit v1.8.0