From 9c31527d8606df99e45438cd0e1fcf47dcfff9cf Mon Sep 17 00:00:00 2001 From: zhangzengfei <zhangzengfei@smartai.com> Date: 星期一, 10 二月 2025 18:46:46 +0800 Subject: [PATCH] 完善规律出行模型逻辑 --- models/accessRegularity.go | 78 ++++++++++++++++++++++++++++++--------- 1 files changed, 60 insertions(+), 18 deletions(-) diff --git a/models/accessRegularity.go b/models/accessRegularity.go index 54d5850..5d1b59b 100644 --- a/models/accessRegularity.go +++ b/models/accessRegularity.go @@ -134,27 +134,25 @@ } // 鏍规嵁鎶撴媿鏃堕棿鍜屽嚭鍏ユ柟鍚戯紝璁$畻绗﹀悎瑙勫垯鍐呯殑鍑哄叆娆℃暟 - hitCount := 0 + hitCount := countValidDays(captures, m.StartHour, m.EndHour, m.LastDirection) - //for _, c := range captures { - // captureTime, err := time.ParseInLocation(time.DateTime, c.PicDate, time.Local) - //} + if hitCount > m.Appearances { + // 鍐欐暟鎹簱 + result := &db.ModelTaskResults{ + Title: m.Task.Name, + Event: fmt.Sprintf("%s %d娆�", m.Task.Name, hitCount), + ModelID: m.Task.ModelID, + ModelTaskID: m.Task.ID, + CommunityId: p.CommunityId, + OrgID: p.OrgId, + ObjectIds: p.DocumentNumber, + Location: p.FrequentAddress, + PicDate: time.Unix(p.LastAppearanceTime, 0).Format(time.DateTime), + FirstPersonID: p.DocumentNumber, + } - // 鍐欐暟鎹簱 - result := &db.ModelTaskResults{ - Title: m.Task.Name, - Event: fmt.Sprintf("%s %d娆�", m.Task.Name, hitCount), - ModelID: m.Task.ModelID, - ModelTaskID: m.Task.ID, - CommunityId: p.CommunityId, - OrgID: p.OrgId, - ObjectIds: p.DocumentNumber, - Location: p.FrequentAddress, - PicDate: time.Unix(p.LastAppearanceTime, 0).Format(time.DateTime), - FirstPersonID: p.DocumentNumber, + results = append(results, result) } - - results = append(results, result) } logger.Debugf("task %s last filter result %d", m.Task.Name, len(results)) @@ -175,3 +173,47 @@ func (m *RegularityModel) eventFormat() string { return "" } + +func countValidDays(records []*service.ESRecordInfo, startHour, endHort int, direction string) int { + layout := "2006-01-02 15:04:05" // 鏃堕棿鏍煎紡 + lastDirectionMap := make(map[string]string) // 璁板綍鏈�鍚庝竴鏉� Direction + lastTimeMap := make(map[string]time.Time) // 璁板綍鏈�鍚庝竴鏉℃椂闂� + + for _, record := range records { + // 瑙f瀽鏃堕棿 + t, err := time.Parse(layout, record.PicDate) + if err != nil { + fmt.Println("瑙f瀽鏃堕棿澶辫触:", err) + continue + } + + // 鑾峰彇灏忔椂 + hour := t.Hour() + var key string + + // 鍒ゆ柇鏃堕棿鑼冨洿锛屽苟褰掑睘鍒版煇涓�澶� + if hour >= startHour { // 21:00-23:59 褰掑睘褰撳ぉ + key = t.Format("2006-01-02") + } else if hour < endHort { // 00:00-02:59 褰掑睘鍓嶄竴澶� + key = t.AddDate(0, 0, -1).Format("2006-01-02") + } else { + continue // 涓嶅湪缁熻鑼冨洿鍐� + } + + // 璁板綍璇ユ椂闂存鍐呯殑鏈�鍚庝竴鏉℃暟鎹� + if lastTime, exists := lastTimeMap[key]; !exists || t.After(lastTime) { + lastTimeMap[key] = t + lastDirectionMap[key] = record.CameraLocation.Direction + } + } + + // 缁熻绗﹀悎鏉′欢 + count := 0 + for _, dir := range lastDirectionMap { + if dir == direction || direction == "" { + count++ + } + } + + return count +} -- Gitblit v1.8.0