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 | 204 ++++++++++++++++++++++++++++++++++++++++++-------- 1 files changed, 170 insertions(+), 34 deletions(-) diff --git a/rule/service.go b/rule/service.go index 6294c83..dfcb083 100644 --- a/rule/service.go +++ b/rule/service.go @@ -2,9 +2,16 @@ import ( "basic.com/valib/logger.git" + "encoding/csv" "fmt" + "os" + "ruleModelEngine/cache" + "ruleModelEngine/config" "ruleModelEngine/data" "ruleModelEngine/db" + "ruleModelEngine/task" + "strconv" + "time" ) // @@ -26,6 +33,93 @@ // return true //} +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() + 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) + //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(communityId, cameraIds, days, days-1) + if err != nil { + logger.Error("QueryByDayRange err: ", err) + } + for docNumber, id := range docNumIdMap { + //fmt.Println(docNumber, id) + alarmRules := make([]db.AlarmRule, 0) + 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"}) + } + //fmt.Println("alarmRules: ", id, alarmRules) + addFlag, err := db.AddAlarmRules(alarmRules, id) + if err != nil { + logger.Error("AddAlarmRules err: ", err) + } + if addFlag == true { + logger.Info("AddAlarmRules success: ", id) + } + } +} + // 鎵ц绋嬪簭鍏ュ彛 func ExecuteTask() { //return @@ -34,90 +128,132 @@ 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) //鏌ヨ绀惧尯鍐呬汉鍛樻。妗堬紝鏂逛究鏁版嵁鏇存柊 - personStatus, err := db.GetDBPersonStatusData(communityID) + personStatusList, err := db.QueryPersonStatusWithPagination(communityID, timeThresholdDayZeroTime) if err != nil { - logger.Error("GetDBPersonStatusData Error", err) + logger.Error("QueryPersonStatusWithPagination err: ", err) } - //fmt.Println(labeManage) - //fmt.Println("personStatus: ", personStatus) - //fmt.Println("CcmmunityIDs: ", cmmunityID) - //鎸夌ぞ鍖篿d鏌ヨ杩戜竴涓湀es鏁版嵁 - captureInfos, err := db.Query1MDataByCommunityId(communityID) - //fmt.Println("captureInfos: ", captureInfos) - //residentCount := 0 + + documentNumberIDS := make([]string, 0) + for _, personStatus := range personStatusList { + //fmt.Println("personStatus.LastAppearanceTime: ", personStatus.LastAppearanceTime) + documentNumberIDS = append(documentNumberIDS, personStatus.DocumentNumber) + //涓氬姟閫昏緫 + } + fmt.Println("绀惧尯妗f鎬绘潯鏁帮細", len(documentNumberIDS)) + + captureInfos := make([]db.CaptureInfo, 0) + batchSize := config.Elastic.BatchSize + //fmt.Println(batchSize) + for i := 0; i < len(documentNumberIDS); i += batchSize { + end := i + batchSize + if end > len(documentNumberIDS) { + end = len(documentNumberIDS) + } + batch := documentNumberIDS[i:end] + //fmt.Println("batch: ", batch) + batchCaptureInfos, err := db.QueryByTimeThresholdDataByCommunityId(communityID, batch, config.Api.TimeThreshold) + if err != nil { + logger.Error("Query1MDataByCommunityId Error", err) + } + if len(batchCaptureInfos) == 0 { + continue + } + //fmt.Println("batchCaptureInfos: ", batchCaptureInfos) + captureInfos = append(captureInfos, batchCaptureInfos...) + } + if len(captureInfos) == 0 { + continue + } + fmt.Println("鍏辫鏈夋。妗堟暟鎹潯鏁颁负锛�", len(captureInfos)) + //琛ュ叏鍒嗘瀽鎵�闇�鏁版嵁 for i := range captureInfos { - //fmt.Println(captureInfos[i].DocumentNumber) captureDays, overnightCount := data.CalculateCaptureDays(captureInfos[i].CaptureDetail) captureInfos[i].CaptureDays = captureDays captureInfos[i].OvernightStays = overnightCount - - //if captureInfos[i].CaptureDays <= 10 && captureInfos[i].OvernightStays >= 1 { - // fmt.Println(captureInfos[i].DocumentNumber) - // fmt.Println("璇ヤ汉鍛樺嚭鐜板ぉ鏁颁负", captureInfos[i].CaptureDays) - // fmt.Println("璇ヤ汉鍛樿繃澶滃ぉ鏁颁负", captureInfos[i].OvernightStays) - //} captureInfos[i].Status = data.SetStatus(captureDays, ruleInfo) if captureInfos[i].OvernightStays >= 5 && (captureInfos[i].CaptureDays <= 14 && captureInfos[i].CaptureDays >= 5) { captureInfos[i].Status = "resident" } - //if captureInfos[i].Status == "resident" { - // residentCount++ - //} + //fmt.Println("SetStatus: ", captureInfos[i].Status) age, err := db.QueryAgeById(captureInfos[i].DocumentNumber) if err != nil { logger.Error("QueryAgeById ERROR", err) } captureInfos[i].Age = age - data.SetFrequentAddress(&captureInfos[i]) - //fmt.Println("captureInfos[i].Age: ", captureInfos[i].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) - if err != nil { - logger.Error("MatchAllTargets Error", err) - } - if len(captureInfos) == 0 { - continue - } //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 - //fmt.Println("captureInfos: ", captureInfos) - postCaptureInfos := data.ProcessData(captureInfos, personStatus, ruleInfo, communityID) - //fmt.Println("postCaptureInfos: ", postCaptureInfos) - //fmt.Println("鍏辫繃婊ゆ潯鏁帮細", len(captureInfos)-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) if UpdatePersonInfoErr != nil { logger.Error("MatchPermanentResidentTargets Error: ", UpdatePersonInfoErr) -- Gitblit v1.8.0