From 16b34c939d6790fe6ebe61f8f0e85fe80ee52224 Mon Sep 17 00:00:00 2001 From: sunty <1172534965@qq.com> Date: 星期三, 29 五月 2024 14:44:16 +0800 Subject: [PATCH] 修改准备数据流程,适应较大数据量的操作 --- data/prepare.go | 64 ++++++++++++++++++++------------ 1 files changed, 40 insertions(+), 24 deletions(-) diff --git a/data/prepare.go b/data/prepare.go index ac6cf9a..1d38dd2 100644 --- a/data/prepare.go +++ b/data/prepare.go @@ -7,10 +7,14 @@ ) // 璁$畻鎶撴媿澶╂暟 -func CalculateCaptureDays(details []db.CaptureDetail) int { +func CalculateCaptureDays(details []db.CaptureDetail) (int, int) { // 浣跨敤 map 鏉ュ瓨鍌ㄦ瘡澶╂槸鍚︽湁鎶撴媿璁板綍 captureMap := make(map[string]bool) - for _, detail := range details { + //pointDate := "" + //pointTime := "" + //pointDirection := "" + overnightCount := 0 + for i, detail := range details { // 瑙f瀽鎶撴媿鏃ユ湡 layout := "2006-01-02 15:04:05" captureTime, err := time.Parse(layout, detail.CaptureDate) @@ -18,10 +22,27 @@ fmt.Println("瑙f瀽鎶撴媿鏃ユ湡鏃跺嚭閿�:", err) continue } + //fmt.Println(captureTime, detail.Direction) // 鑾峰彇鏃ユ湡閮ㄥ垎 date := captureTime.Format("2006-01-02") + //time := captureTime.Format("15:04:05") // 鍦� map 涓爣璁拌繖涓�澶╂湁鎶撴媿璁板綍 captureMap[date] = true + if i == len(details)-1 { + break + } + + // 绗竴涓獙璇佹潯浠讹細褰撳墠涓� in锛屾椂闂村湪涓嬪崍 16 鐐逛互鍚� + currTime, _ := time.Parse("2006-01-02 15:04:05", detail.CaptureDate) + if detail.Direction == "in" && currTime.Hour() >= 16 { + // 绗簩涓獙璇佹潯浠讹細涓嬩竴涓负 out锛屾椂闂村湪涓婂崍 5 鐐逛箣鍚� 12 鐐逛箣鍓� + nextDetail := details[i+1] + nextTime, _ := time.Parse("2006-01-02 15:04:05", nextDetail.CaptureDate) + nextDay := nextTime.AddDate(0, 0, -1).Format("2006-01-02") + if nextDetail.Direction == "out" && nextTime.Hour() >= 5 && nextTime.Hour() < 12 && nextDay == detail.CaptureDate[:10] { + overnightCount++ + } + } } // 缁熻鏈夋姄鎷嶈褰曠殑澶╂暟 @@ -30,7 +51,7 @@ captureDays++ } - return captureDays + return captureDays, overnightCount } // 璁剧疆鐘舵�� @@ -44,11 +65,11 @@ } // SetFrequentAddress 鏂规硶璁$畻鍑虹幇鏈�棰戠箒鐨勫嚭琛屽湴鍧�骞惰缃负甯哥敤鍦板潃 -func SetFrequentAddress(c *db.CaptureInfo) { +func GetFrequentAddress(captureDetail []db.CaptureDetail) string { outAddressCounts := make(map[string]int) inAddressCounts := make(map[string]int) // 缁熻姣忎釜鍑鸿鍦板潃鐨勫嚭鐜版鏁� - for _, detail := range c.CaptureDetail { + for _, detail := range captureDetail { if detail.Direction == "out" { outAddressCounts[detail.CaptureAddress]++ } @@ -75,12 +96,11 @@ } } } - // 灏嗗嚭鐜版鏁版渶澶氱殑鍑鸿鍦板潃璁剧疆涓哄父鐢ㄥ湴鍧� - c.FrequentAddress = frequentAddress + return frequentAddress } // processData 鍑芥暟澶勭悊鏁版嵁锛屾牴鎹姹傝繃婊ゆ帀鏁版嵁骞舵牴鎹鍒欐洿鏂扮姸鎬� -func ProcessData(captureInfos []db.CaptureInfo, personStatus []db.PersonStatus, ruleInfos []db.PersonnelStatusRule, communityID string) []db.PersonStatus { +func ProcessData(captureInfos []db.CaptureInfo, personStatus []*db.PersonStatus, ruleInfos []db.PersonnelStatusRule, communityID string) []db.PersonStatus { filteredInfos := make([]db.PersonStatus, 0) // 鏋勫缓蹇�熸煡鎵剧储寮曪紝鏂逛究鏌ユ壘瀵瑰簲鐨勪汉鍛樼姸鎬佸拰瑙勫垯 @@ -88,35 +108,31 @@ ruleIndex := make(map[string]db.PersonnelStatusRule) for _, person := range personStatus { - statusIndex[person.DocumentNumber] = person + statusIndex[person.DocumentNumber] = *person } for _, rule := range ruleInfos { ruleIndex[rule.Name] = rule } - + //fmt.Println("statusIndex: ", statusIndex) + //fmt.Println("ruleIndex: ", ruleIndex) // 澶勭悊姣忎釜鎶撴媿淇℃伅 for _, info := range captureInfos { //fmt.Println("info", info.DocumentNumber, info.Status, info.FrequentAddress) //fmt.Println("person", statusIndex[info.DocumentNumber].DocumentNumber, statusIndex[info.DocumentNumber].Status, statusIndex[info.DocumentNumber].FrequentAddress) // 妫�鏌ユ槸鍚﹀瓨鍦ㄥ搴旂殑浜哄憳鐘舵�� - person, ok := statusIndex[info.DocumentNumber] - if !ok { - // 涓嶅瓨鍦ㄥ搴旂殑浜哄憳鐘舵�佷负鏂版暟鎹� - filteredInfos = append(filteredInfos, db.PersonStatus{CommunityID: communityID, DocumentNumber: info.DocumentNumber, Status: info.Status, FrequentAddress: info.FrequentAddress}) - continue - } - + person := statusIndex[info.DocumentNumber] + //fmt.Println("person: ", person.DocumentNumber, person.Status, person.FrequentAddress, person.LastAppearanceTime, person.LastAppearanceStatusTime) // 鍒ゆ柇鐘舵�佸拰甯哥敤鍦板潃鏄惁鐩哥瓑锛屽鏋滅浉绛夊垯蹇界暐 - if (info.Status == person.Status || info.CaptureDays <= ruleIndex[person.DocumentNumber].DetectionDaysEnd) && - info.FrequentAddress == person.FrequentAddress { - continue - } - + //if (info.Status == person.Status || info.CaptureDays <= ruleIndex[person.DocumentNumber].DetectionDaysEnd) && + // info.FrequentAddress == person.FrequentAddress { + // continue + //} // 鏇存柊杩囨护鍚庣殑淇℃伅鍒楄〃 - filteredInfos = append(filteredInfos, db.PersonStatus{CommunityID: communityID, DocumentNumber: info.DocumentNumber, Status: info.Status, FrequentAddress: info.FrequentAddress}) + //fmt.Println("LastAppearanceTime: ", person.LastAppearanceTime) + filteredInfos = append(filteredInfos, db.PersonStatus{CommunityID: communityID, DocumentNumber: info.DocumentNumber, Status: info.Status, FrequentAddress: info.FrequentAddress, LastAppearanceStatusTime: person.LastAppearanceTime}) } - + //fmt.Println("filteredInfos: ", filteredInfos) return filteredInfos } -- Gitblit v1.8.0