From b88f052edf3c6921aa7a52f53144c202af266957 Mon Sep 17 00:00:00 2001
From: sunty <1172534965@qq.com>
Date: 星期三, 04 九月 2024 17:56:41 +0800
Subject: [PATCH] 修改地址计算策略

---
 data/prepare.go |  113 +++++++++++++++++++++++++++++++++++---------------------
 rule/service.go |    1 
 2 files changed, 72 insertions(+), 42 deletions(-)

diff --git a/data/prepare.go b/data/prepare.go
index 415c0c1..4b5d837 100644
--- a/data/prepare.go
+++ b/data/prepare.go
@@ -4,6 +4,7 @@
 	"fmt"
 	"regexp"
 	"ruleModelEngine/db"
+	"strings"
 	"time"
 )
 
@@ -65,59 +66,87 @@
 	return rules[1].Name
 }
 
+// 鑾峰彇甯哥敤鍦板潃
+func getfrAddress(pointAddress map[string]int) string {
+	maxCount := 0
+	maxCountAddress := ""
+	re, _ := regexp.Compile(`\b1F\b`)
+	for address, count := range pointAddress {
+		matchFlag := re.MatchString(address)
+		if address == "" || matchFlag == true {
+			continue
+		}
+		if count > maxCount {
+			maxCount = count
+			maxCountAddress = address
+		}
+	}
+	return maxCountAddress
+}
+
 // SetFrequentAddress 鏂规硶璁$畻鍑虹幇鏈�棰戠箒鐨勫嚭琛屽湴鍧�骞惰缃负甯哥敤鍦板潃
 func GetFrequentAddress(captureDetail []db.CaptureDetail) string {
-	outAddressCounts := make(map[string]int)
-	inAddressCounts := make(map[string]int)
 	// 缁熻姣忎釜鍑鸿鍦板潃鐨勫嚭鐜版鏁�
-	for _, detail := range captureDetail {
-		if detail.Direction == "out" {
-			outAddressCounts[detail.CaptureAddress]++
-		}
-		if detail.Direction == "in" {
-			inAddressCounts[detail.CaptureAddress]++
-		}
-	}
-
-	// 鎵惧埌鍑虹幇娆℃暟鏈�澶氱殑鍑鸿鍦板潃
-	maxOutCount := 0
-	maxTotalCount := 0
-	var frequentAddress string
-	floor1AddressCount := 0
+	pointDate := ""
+	pointAddress := make(map[string]int, 0)
+	dateAddress := make(map[string]string, 0)
 	floor1Address := ""
-	for address, count := range outAddressCounts {
-		maxTotalCount = maxTotalCount + count
-		re, _ := regexp.Compile(`\b1F\b`)
-		if re.MatchString(address) {
-			if count > floor1AddressCount {
-				floor1Address = address
-				floor1AddressCount = count
+	captureDays := make(map[string]int, 0)
+	var frequentAddress string
+	re, _ := regexp.Compile(`\b1F\b`)
+	for index, detail := range captureDetail {
+		//fmt.Println("鎶撴媿鍦板潃锛�", detail.CaptureAddress)
+		//fmt.Println("鎶撴媿鏃ユ湡锛�", detail.CaptureDate)
+		dateStr := strings.Split(detail.CaptureDate, " ")[0]
+		captureDays[dateStr]++
+		matchFlag := re.MatchString(detail.CaptureAddress)
+		if matchFlag {
+			floor1Address = detail.CaptureAddress
+		}
+		//鍒ゆ柇鏃ユ湡鏍囨槸鍚︽弧瓒虫潯浠�
+		if pointDate == "" {
+			pointDate = dateStr
+			pointAddress[detail.CaptureAddress]++
+			//鑻ヤ负鏈�鍚庝竴鏉″垯璁$畻甯哥敤鍦板潃
+			if index == len(captureDetail)-1 {
+				//fmt.Println("澶勭悊鍓峱ointAddress琛細", pointAddress)
+				dateAddress[pointDate] = detail.CaptureAddress
+			}
+			continue
+		}
+		//鑻ユ棩鏈熸爣鐩哥瓑鍒欎负鍚屼竴澶╋紝鍦板潃鏍囨暟缁勬ゼ灞傝鏁�+1
+		if pointDate == dateStr {
+			pointAddress[detail.CaptureAddress]++
+			if index == len(captureDetail)-1 {
+				//fmt.Println("澶勭悊鍓峱ointAddress琛細", pointAddress)
+				dateAddress[pointDate] = getfrAddress(pointAddress)
+			}
+			//涓嶇浉绛夊垯涓烘柊鐨勬棩鏈燂紝棣栧厛璁$畻鍑哄綋鏃ョ殑甯哥敤鍦板潃锛岀劧鍚庨噸鏂板垵濮嬪寲鏃ユ湡鏍囧拰鍦板潃鏍囨暟缁�
+		} else {
+			if index == len(captureDetail)-1 {
+				pointAddress[detail.CaptureAddress]++
+				//fmt.Println("澶勭悊鍓峱ointAddress琛細", pointAddress)
+				dateAddress[pointDate] = getfrAddress(pointAddress)
 				continue
 			}
-		}
-		if count > maxOutCount {
-			maxOutCount = count
-			frequentAddress = address
+			dateAddress[pointDate] = getfrAddress(pointAddress)
+			pointDate = dateStr
+			pointAddress = make(map[string]int, 0)
 		}
 	}
-
-	if frequentAddress == "" && floor1Address != "" {
+	//fmt.Println("鎶撴媿鍦板潃寰呭鐞嗙粨鏋勮〃锛�", dateAddress)
+	//fmt.Println("dareAddress len: ", len(dateAddress))
+	if float64(len(dateAddress))/float64(len(captureDays))*100 >= 50 {
+		addressCount := make(map[string]int)
+		for _, address := range dateAddress {
+			addressCount[address]++
+		}
+		frequentAddress = getfrAddress(addressCount)
+	} else {
 		frequentAddress = floor1Address
 	}
-	if frequentAddress != "" && floor1Address != "" {
-		if (float64(floor1AddressCount)/float64(maxTotalCount))*100 > 90 {
-			frequentAddress = floor1Address
-		}
-	}
-
 	if frequentAddress == "" {
-		maxInCount := 0
-		for address, count := range inAddressCounts {
-			if count > maxInCount {
-				maxInCount = count
-				frequentAddress = address
-			}
-		}
+		frequentAddress = floor1Address
 	}
 	//fmt.Println("in address: ", inAddressCounts)
 	//fmt.Println("out address: ", outAddressCounts)
diff --git a/rule/service.go b/rule/service.go
index eb9fcbe..ebd6e0d 100644
--- a/rule/service.go
+++ b/rule/service.go
@@ -172,6 +172,7 @@
 			captureInfos[i].FrequentAddress = data.GetFrequentAddress(captureInfos[i].CaptureDetail)
 			//fmt.Println("CaptureDetail: ", captureInfos[i].DocumentNumber, captureInfos[i].CaptureDays, captureInfos[i].CaptureDetail)
 		}
+		//continue
 		//fmt.Println("residentCount: ", residentCount)
 		//fmt.Println("captureInfosQ: ", captureInfos)
 		for _, identity := range labeManage {

--
Gitblit v1.8.0