From 8286117e3435781401bc6d722095fa033c0704b2 Mon Sep 17 00:00:00 2001
From: sunty <1172534965@qq.com>
Date: 星期四, 05 九月 2024 13:39:33 +0800
Subject: [PATCH] 补充地址计算规则
---
data/prepare.go | 85 +++++++++++++++++++++-------
rule/service.go | 40 +++++++++++++
2 files changed, 104 insertions(+), 21 deletions(-)
diff --git a/data/prepare.go b/data/prepare.go
index 4b5d837..600949c 100644
--- a/data/prepare.go
+++ b/data/prepare.go
@@ -70,10 +70,14 @@
func getfrAddress(pointAddress map[string]int) string {
maxCount := 0
maxCountAddress := ""
- re, _ := regexp.Compile(`\b1F\b`)
+ re1F, _ := regexp.Compile(`\b1F\b`)
+ reNoF, _ := regexp.Compile(`^[^F]*$`)
+ reNegF := regexp.MustCompile(`-`)
for address, count := range pointAddress {
- matchFlag := re.MatchString(address)
- if address == "" || matchFlag == true {
+ matchFlag1F := re1F.MatchString(address)
+ matchFlagNoF := reNoF.MatchString(address)
+ matchFlagNegF := reNegF.MatchString(address)
+ if address == "" || matchFlag1F || matchFlagNoF || matchFlagNegF {
continue
}
if count > maxCount {
@@ -87,70 +91,109 @@
// SetFrequentAddress 鏂规硶璁$畻鍑虹幇鏈�棰戠箒鐨勫嚭琛屽湴鍧�骞惰缃负甯哥敤鍦板潃
func GetFrequentAddress(captureDetail []db.CaptureDetail) string {
// 缁熻姣忎釜鍑鸿鍦板潃鐨勫嚭鐜版鏁�
+ //pointDate 闈舵爣鏃ユ湡锛宲ointAddress闈舵爣鍦板潃
pointDate := ""
pointAddress := make(map[string]int, 0)
+ //dateAddress 鎸夋棩鏈熸眹鎬诲崟鏃ュ父鐢ㄥ湴鍧�
dateAddress := make(map[string]string, 0)
+ //floor1Address 鍚庡鍦板潃锛屼负1妤煎湴鍧�
floor1Address := ""
+ //captureDays 鎸夋棩鏈熷幓閲嶇粺璁℃�绘姄鎷嶅ぉ鏁�
captureDays := make(map[string]int, 0)
+ //frequentAddress 鏈�缁堣缃殑甯哥敤鍦板潃
var frequentAddress string
- re, _ := regexp.Compile(`\b1F\b`)
+ //姝e垯 鍒ゆ柇鍦板潃鏄惁鍖呭惈1F瀛楁牱锛屽畬鍏ㄥ尮閰�
+ re1F, _ := regexp.Compile(`\b1F\b`)
+ reNoF, _ := regexp.Compile(`^[^F]*$`)
+ // 閬嶅巻鎵�鏈夋姄鎷嶆暟鎹�
for index, detail := range captureDetail {
//fmt.Println("鎶撴媿鍦板潃锛�", detail.CaptureAddress)
//fmt.Println("鎶撴媿鏃ユ湡锛�", detail.CaptureDate)
+ //dateStr鎴彇鐨勬棩鏈燂紝涓篩YYY-MM-DD
dateStr := strings.Split(detail.CaptureDate, " ")[0]
+ //鍘婚噸缁熻鎶撴媿澶╂暟 captureDays
captureDays[dateStr]++
- matchFlag := re.MatchString(detail.CaptureAddress)
- if matchFlag {
+ //鍖归厤鏄惁鏄�1F
+ matchFlag1F := re1F.MatchString(detail.CaptureAddress)
+ matchFlagNoF := reNoF.MatchString(detail.CaptureAddress)
+ if matchFlag1F {
+ //濡傛灉鏄紝 鎻愬墠璁剧疆濂藉鐢ㄥ湴鍧� floor1Address = detail.CaptureAddress
floor1Address = detail.CaptureAddress
}
- //鍒ゆ柇鏃ユ湡鏍囨槸鍚︽弧瓒虫潯浠�
+ if matchFlagNoF && floor1Address != "" {
+ //濡傛灉鏄紝 鎻愬墠璁剧疆濂藉鐢ㄥ湴鍧� floor1Address = detail.CaptureAddress
+ floor1Address = detail.CaptureAddress
+ }
+ //鍒ゆ柇鏃ユ湡鏍囨槸鍚︽弧瓒虫潯浠� 鍒ゆ柇鏃ユ湡鏍囨槸鍚︿负绌猴紝鑻ヤ负绌鸿〃绀烘槸绗竴涓厓绱狅紝鍒濆鍖栨棩鏈熼澏鏍�
if pointDate == "" {
+ //鍒濆鍖栨棩鏈熼澏鏍囦负褰撳墠鏃ユ湡
pointDate = dateStr
+ //鎶婂綋鍓嶆棩鏈熺殑
pointAddress[detail.CaptureAddress]++
- //鑻ヤ负鏈�鍚庝竴鏉″垯璁$畻甯哥敤鍦板潃
+ //鑻ヤ负鏈�鍚庝竴鏉″垯璁$畻鍗曟棩甯哥敤鍦板潃
if index == len(captureDetail)-1 {
- //fmt.Println("澶勭悊鍓峱ointAddress琛細", pointAddress)
+ fmt.Println("澶勭悊鍓峱ointAddress琛細", pointAddress)
+ //杩欎唬琛ㄤ粎鏈変竴鏉℃暟鎹紝灏嗕細鐩存帴鎶婂綋鍓嶅湴鍧�鍔犲叆dateAddress 鏃ユ湡姹囨�诲崟鏃ュ父鐢ㄥ湴鍧�琛ㄥ唴 涓嬫柟continue浼氱洿鎺ョ粨鏉熷惊鐜�
+ //鍚﹀垯浼氬垵濮嬪寲pointDate鍜宲ointAddress
dateAddress[pointDate] = detail.CaptureAddress
}
continue
}
- //鑻ユ棩鏈熸爣鐩哥瓑鍒欎负鍚屼竴澶╋紝鍦板潃鏍囨暟缁勬ゼ灞傝鏁�+1
+ //鑻ユ棩鏈熸爣鐩哥瓑鍒欎负鍚屼竴澶�
if pointDate == dateStr {
+ //pointAddress闈舵爣鏃ユ湡鏁扮粍瀵瑰簲妤煎眰鍦板潃鏁�+1
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)
+ fmt.Println("澶勭悊鍓峱ointAddress琛細", pointAddress)
+ //璁$畻鍗曟棩甯哥敤鍦板潃 鑻ュ湴鍧�鍐呴兘涓�1F鎴栬�呯┖鍦板潃锛屼細杩斿洖绌哄湴鍧�
dateAddress[pointDate] = getfrAddress(pointAddress)
continue
}
+ //涓嶇浉绛夊垯涓烘柊鐨勬棩鏈燂紝棣栧厛璁$畻鍑哄綋鏃ョ殑甯哥敤鍦板潃锛岀劧鍚庨噸鏂板垵濮嬪寲鏃ユ湡鏍囧拰鍦板潃鏍囨暟缁�
+ } else {
+ //鑻ヤ负鏈�鍚庝竴鏉″垯璁$畻鍗曟棩甯哥敤鍦板潃
+ if index == len(captureDetail)-1 {
+ //鎶婂綋鍓嶆渶鍚庝竴鏉″姞鍏� pointAddress闈舵爣鍦板潃
+ pointAddress[detail.CaptureAddress]++
+ //
+ fmt.Println("澶勭悊鍓峱ointAddress琛細", pointAddress)
+ //璁$畻鍗曟棩甯哥敤鍦板潃 鑻ュ湴鍧�鍐呴兘涓�1F鎴栬�呯┖鍦板潃锛屼細杩斿洖绌哄湴鍧�
+ dateAddress[pointDate] = getfrAddress(pointAddress)
+ continue
+ }
+ //涓嶄负鏈�鍚庝竴鏉¤〃绀鸿繖鏄柊鐨勪竴澶╃殑鎶撴媿鍦板潃鏁版嵁锛岄渶瑕佽绠椾箣鍓嶄竴澶╃殑鍗曟棩甯哥敤鍦板潃
dateAddress[pointDate] = getfrAddress(pointAddress)
+ //鍒濆鍖栨柊鐨勪竴澶╃殑闈舵爣鏃ユ湡鍜宲ointAddress 闈舵爣鍦板潃鏁扮粍
pointDate = dateStr
pointAddress = make(map[string]int, 0)
}
}
- //fmt.Println("鎶撴媿鍦板潃寰呭鐞嗙粨鏋勮〃锛�", dateAddress)
- //fmt.Println("dareAddress len: ", len(dateAddress))
+ fmt.Println("鎶撴媿鍦板潃寰呭鐞嗙粨鏋勮〃锛�", dateAddress)
+ fmt.Println("dareAddress len: ", len(dateAddress))
+ //鍒ゆ柇鎶撴媿鐨勯潪1妤奸潪绌虹殑澶╂暟鍗犳瘮鎬诲ぉ鏁�
if float64(len(dateAddress))/float64(len(captureDays))*100 >= 50 {
+ fmt.Println("闈�1妤奸潪绌烘姄鎷嶅崰姣�: ", float64(len(dateAddress))/float64(len(captureDays))*100)
+ //鍒濆鍖栧湴鍧�鍒楄〃锛屾寜鍦板潃璁℃暟
addressCount := make(map[string]int)
+ //閬嶅巻涔嬪墠姹囨�荤殑鍗曟棩甯哥敤鍦板潃鍒楄〃
for _, address := range dateAddress {
+ //瀵瑰簲鍦板潃鏁�+1
addressCount[address]++
}
+ //澶嶅埗甯哥敤鍦板潃缁欐渶缁堢粨鏋滐紝鑻ュ湴鍧�鍐呴兘涓�1F鎴栬�呯┖鍦板潃锛屼細杩斿洖绌哄湴鍧�
frequentAddress = getfrAddress(addressCount)
} else {
+ //鑻ヤ笉婊¤冻闈�1妤奸潪绌烘姄鎷嶅崰姣旓紝鍒欑洿鎺ユ妸澶囩敤鍦板潃锛�1F锛夎祴鍊肩粰鏈�缁堢粨鏋�
frequentAddress = floor1Address
}
+ //鑻ュ瓨鍦ㄦ弧瓒抽潪1妤奸潪绌烘姄鎷嶅崰姣旓紝浣嗘槸鏈�缁堢粨鏋滄槸绌哄湴鍧�锛屽垯璧嬪�煎鐢ㄥ湴鍧�锛�1F锛変负鏈�缁堢粨鏋�
if frequentAddress == "" {
frequentAddress = floor1Address
}
//fmt.Println("in address: ", inAddressCounts)
//fmt.Println("out address: ", outAddressCounts)
- //fmt.Println("final address: ", frequentAddress)
+ fmt.Println("final address: ", frequentAddress)
return frequentAddress
}
diff --git a/rule/service.go b/rule/service.go
index ebd6e0d..0b45822 100644
--- a/rule/service.go
+++ b/rule/service.go
@@ -2,7 +2,9 @@
import (
"basic.com/valib/logger.git"
+ "encoding/csv"
"fmt"
+ "os"
"ruleModelEngine/cache"
"ruleModelEngine/config"
"ruleModelEngine/data"
@@ -30,6 +32,39 @@
// }
// 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) {
//杩涘嚭寮傚父甯冩帶浠诲姟锛屾殏鏃跺綊绫诲埌鏍囩璁$畻閮ㄥ垎
@@ -170,8 +205,13 @@
}
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)
--
Gitblit v1.8.0