From 3737ab3dd0cc753be986638316c96cb3114601e4 Mon Sep 17 00:00:00 2001
From: zhangzengfei <zhangzengfei@smartai.com>
Date: 星期日, 29 九月 2024 16:20:46 +0800
Subject: [PATCH] fix db column

---
 rule/service.go |  115 ++++++++++++++++++++++++++++++++++++++++++++++++---------
 1 files changed, 96 insertions(+), 19 deletions(-)

diff --git a/rule/service.go b/rule/service.go
index 2a476d2..dfcb083 100644
--- a/rule/service.go
+++ b/rule/service.go
@@ -2,12 +2,16 @@
 
 import (
 	"basic.com/valib/logger.git"
+	"encoding/csv"
 	"fmt"
+	"os"
+	"ruleModelEngine/cache"
 	"ruleModelEngine/config"
 	"ruleModelEngine/data"
 	"ruleModelEngine/db"
 	"ruleModelEngine/task"
 	"strconv"
+	"time"
 )
 
 //
@@ -29,8 +33,40 @@
 //	return true
 //}
 
-// 鎵ц绋嬪簭鍏ュ彛
-func ExecuteTask() {
+func writeCSV(filename string, data []db.CaptureInfo) error {
+	file, err := os.Create(filename)
+	if err != nil {
+		return err
+	}
+	defer file.Close()
+
+	writer := csv.NewWriter(file)
+	defer writer.Flush()
+
+	// Write header
+	header := []string{"妗f缂栧彿", "鎶撴媿澶╂暟", "杩囧澶╂暟", "鍒嗙被", "甯哥敤鍦板潃"}
+	if err := writer.Write(header); err != nil {
+		return err
+	}
+
+	// Write data
+	for _, info := range data {
+		record := []string{
+			info.DocumentNumber,
+			strconv.Itoa(info.CaptureDays),
+			strconv.Itoa(info.OvernightStays),
+			info.Status,
+			info.FrequentAddress,
+		}
+		if err := writer.Write(record); err != nil {
+			return err
+		}
+	}
+
+	return nil
+}
+
+func executeEnteringButNotLeaving(communityId string) {
 	//杩涘嚭寮傚父甯冩帶浠诲姟锛屾殏鏃跺綊绫诲埌鏍囩璁$畻閮ㄥ垎
 	//fmt.Println("杩涘嚭寮傚父寮�濮嬪叆鍙o紒锛侊紒锛侊紒锛�")
 	tasks, err := db.GetAllTaskData()
@@ -44,17 +80,32 @@
 			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.CommunityID == 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,35 +118,48 @@
 			logger.Info("AddAlarmRules success: ", id)
 		}
 	}
+}
 
+// 鎵ц绋嬪簭鍏ュ彛
+func ExecuteTask() {
 	//return
 	ruleInfo, err := db.GetAllData()
 	if err != nil {
 		logger.Error("GetAllData Error", err)
 	}
 	fmt.Println("ruleInfo: ", ruleInfo)
+	statusNo := make(map[string]int)
+	statusNo["stranger"] = db.StatusStranger
+	statusNo["visitor"] = db.StatusVisitor
+	statusNo["resident"] = db.StatusResident
 	communityIDs, err := db.GetCommunityIDs()
-	//fmt.Println("communityIDs:", communityIDs)
+	fmt.Println("communityIDs:", communityIDs)
 	if err != nil {
 		logger.Error("GetCommunityIDs Error", err)
 	}
-	labeManage, err := db.GetLabelManageIdentity(2)
+	labeManage, err := db.GeIdentityLabels()
 	if err != nil {
 		logger.Error("GetDBPersonStatusData Error", err)
 	}
 	//fmt.Println(labeManage)
 	for _, communityID := range communityIDs {
+		executeEnteringButNotLeaving(communityID)
+
 		//涓囧叏绀惧尯
 		//if communityID != "50010101010000001001" {
 		//	continue
 		//}
 		fmt.Println("communityID: ", communityID)
+		//continue
+		now := time.Now()
+		timeThresholdDay := now.AddDate(0, 0, -config.Api.TimeThreshold)
+		timeThresholdDayZeroTime := time.Date(timeThresholdDay.Year(), timeThresholdDay.Month(), timeThresholdDay.Day(), 0, 0, 0, 0, timeThresholdDay.Location()).Unix()
+		fmt.Println("姣斿鏃堕棿鎴筹細", timeThresholdDayZeroTime)
 		//鏌ヨ绀惧尯鍐呬汉鍛樻。妗堬紝鏂逛究鏁版嵁鏇存柊
-		personStatusList, err := db.QueryPersonStatusWithPagination(communityID, 30)
+		personStatusList, err := db.QueryPersonStatusWithPagination(communityID, timeThresholdDayZeroTime)
 		if err != nil {
 			logger.Error("QueryPersonStatusWithPagination err: ", err)
 		}
-		//
 
 		documentNumberIDS := make([]string, 0)
 		for _, personStatus := range personStatusList {
@@ -103,7 +167,8 @@
 			documentNumberIDS = append(documentNumberIDS, personStatus.DocumentNumber)
 			//涓氬姟閫昏緫
 		}
-		//fmt.Println("len(documentNumberIDS)", len(documentNumberIDS))
+		fmt.Println("绀惧尯妗f鎬绘潯鏁帮細", len(documentNumberIDS))
+
 		captureInfos := make([]db.CaptureInfo, 0)
 		batchSize := config.Elastic.BatchSize
 		//fmt.Println(batchSize)
@@ -114,7 +179,7 @@
 			}
 			batch := documentNumberIDS[i:end]
 			//fmt.Println("batch: ", batch)
-			batchCaptureInfos, err := db.Query1MDataByCommunityId(communityID, batch, 30)
+			batchCaptureInfos, err := db.QueryByTimeThresholdDataByCommunityId(communityID, batch, config.Api.TimeThreshold)
 			if err != nil {
 				logger.Error("Query1MDataByCommunityId Error", err)
 			}
@@ -130,7 +195,6 @@
 		fmt.Println("鍏辫鏈夋。妗堟暟鎹潯鏁颁负锛�", len(captureInfos))
 		//琛ュ叏鍒嗘瀽鎵�闇�鏁版嵁
 		for i := range captureInfos {
-
 			captureDays, overnightCount := data.CalculateCaptureDays(captureInfos[i].CaptureDetail)
 			captureInfos[i].CaptureDays = captureDays
 			captureInfos[i].OvernightStays = overnightCount
@@ -146,35 +210,48 @@
 			}
 			captureInfos[i].Age = age
 			captureInfos[i].FrequentAddress = data.GetFrequentAddress(captureInfos[i].CaptureDetail)
+
 			//fmt.Println("CaptureDetail: ", captureInfos[i].DocumentNumber, captureInfos[i].CaptureDays, captureInfos[i].CaptureDetail)
 		}
+		//err1 := writeCSV("report.csv", captureInfos)
+		//if err != nil {
+		//	fmt.Println(err1)
+		//}
+		//continue
 		//fmt.Println("residentCount: ", residentCount)
 		//fmt.Println("captureInfosQ: ", captureInfos)
-
 		for _, identity := range labeManage {
 			switch identity.Name {
 			case "鏈嶅姟浜哄憳":
-				identity, attribute := CreateLinearModel(captureInfos, communityID, 2.68, identity.ValidDays, identity.Id)
+				identity, attribute := CreateLinearModel(captureInfos, communityID, 2.68, identity.ValidDays, identity.ID)
+
 				errIdentity := db.UpdateDBPersonLabel(identity)
 				if errIdentity != nil {
 					logger.Error("UpdateDBPersonLabel Error", errIdentity)
 				}
+
 				captureInfos = attribute
 
 			}
 		}
+
 		identity := CreateProcessModel(captureInfos, 30, communityID, labeManage)
 		errIdentity := db.UpdateDBPersonLabel(identity)
 		if errIdentity != nil {
 			logger.Error("UpdateDBPersonLabel Error", errIdentity)
 		}
+
 		//continue
 
-		postCaptureInfos := data.ProcessData(captureInfos, personStatusList, ruleInfo, communityID)
-		/*for _, inf := range postCaptureInfos {
-			fmt.Println("inf: ", inf.DocumentNumber, inf.Status, inf.FrequentAddress, inf.LastAppearanceStatusTime)
-		}*/
-		//fmt.Println("鍏辨洿鏂版。妗堟暟锛�", len(postCaptureInfos))
+		postCaptureInfos := data.ProcessData(captureInfos, personStatusList, ruleInfo, statusNo, communityID)
+		for _, inf := range postCaptureInfos {
+			fmt.Println("---->pause prepare: capture ", inf.DocumentNumber, inf.Status, inf.FrequentAddress)
+			//return
+			//time.Sleep(time.Second * 10)
+
+			//fmt.Println("inf: ", inf.DocumentNumber, inf.Status, inf.FrequentAddress, inf.LastAppearanceStatusTime)
+		}
+		fmt.Println("鍏辨洿鏂版。妗堟暟锛�", len(postCaptureInfos))
 		//fmt.Println("----->captureInfos: ", len(captureInfos))
 		//continue
 		UpdatePersonInfoErr := db.UpdatePersonInfo(postCaptureInfos, communityID)

--
Gitblit v1.8.0