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