From 8ed1e960d5b13822385ecb9fcbdd18807de701e4 Mon Sep 17 00:00:00 2001
From: zhangzengfei <zhangzengfei@smartai.com>
Date: 星期一, 10 二月 2025 16:36:23 +0800
Subject: [PATCH] 完善出行规律模型内容

---
 models/accessRegularity.go |   72 +++++++++++++++++++++++++++++++++---
 1 files changed, 66 insertions(+), 6 deletions(-)

diff --git a/models/accessRegularity.go b/models/accessRegularity.go
index 8e2d123..78274b8 100644
--- a/models/accessRegularity.go
+++ b/models/accessRegularity.go
@@ -15,16 +15,17 @@
 type RegularityModel struct {
 	OrgIds        []interface{} `json:"-"`
 	AreaIds       []interface{} `json:"-"`
-	IdentityType  string        // 浜哄憳韬唤绫诲瀷 闄岀敓浜�, 璁垮, 浣忔埛
+	IdentityType  []string      // 浜哄憳韬唤绫诲瀷 闄岀敓浜�, 璁垮, 浣忔埛
 	KeyPersonType string        // 閲嶇偣浜哄憳绫诲瀷
 	PersonLabel   string        // 浜哄憳韬唤鏍囩
 	Task          *db.ModelTask
 	AlarmType     db.AlarmType // 棰勮鏂瑰紡
 
-	Appearances int // 鍑虹幇娆℃暟
-	Duration    int // 鏃堕棿鑼冨洿, 鍗曚綅澶�
-	StartHour   int // 寮�濮嬭绠楃殑鏃堕棿 閰嶇疆涓哄皬鏃� 23 - 02 琛ㄧず绗竴澶�23鐐� - 绗簩澶╃殑2鐐�
-	EndHour     int // 缁撴潫鏃堕棿
+	Appearances   int    // 鍑虹幇娆℃暟
+	Duration      int    // 鏃堕棿鑼冨洿, 鍗曚綅澶�
+	LastDirection string // 鏈�鍚庝竴娆″嚭琛岀殑鏂瑰悜
+	StartHour     int    // 寮�濮嬭绠楃殑鏃堕棿 閰嶇疆涓哄皬鏃� 23 - 02 琛ㄧず绗竴澶�23鐐� - 绗簩澶╃殑2鐐�
+	EndHour       int    // 缁撴潫鏃堕棿
 }
 
 func (m *RegularityModel) Init(task *db.ModelTask) error {
@@ -42,7 +43,19 @@
 	m.AlarmType = task.AlarmType
 	m.KeyPersonType = task.PersonType
 	m.PersonLabel = task.PersonLabel
-	m.IdentityType = task.IdentityType
+	m.LastDirection = "out"
+	if task.IdentityType != "" {
+		for _, t := range strings.Split(task.IdentityType, ",") {
+			if t == "all" {
+				m.IdentityType = []string{"stranger", "visitor", "resident"}
+				break
+			} else {
+				m.IdentityType = append(m.IdentityType, t)
+			}
+		}
+	} else {
+		m.IdentityType = []string{"stranger", "visitor", "resident"}
+	}
 
 	for _, v := range task.Rules {
 		if v.Alias == "timeRange" {
@@ -64,6 +77,12 @@
 				m.Duration = int(val)
 			}
 		}
+
+		if v.Alias == "direction" {
+			if val, ok := v.Value.(string); ok {
+				m.LastDirection = val
+			}
+		}
 	}
 
 	// 榛樿璁$畻30澶╃殑鏁版嵁
@@ -82,6 +101,47 @@
 
 func (m *RegularityModel) Run() error {
 	results := make([]*db.ModelTaskResults, 0)
+	baseFilter := make([]PersonInfo, 0)
+
+	// 鏌ユ壘鎸囧畾鏃堕棿鑼冨洿鍐呭嚭琛岃繃鐨勬。妗堢紪鍙�
+	now := time.Now()
+	startDate := time.Date(now.Year(), now.Month(), now.Day(), 0, 0, 0, 0, now.Location()).AddDate(0, 0, -m.Duration).Unix()
+	err := db.GetDB().Raw(`
+		SELECT
+			document_number,
+			frequent_address,
+		FROM
+			snapshot_count_summary
+		WHERE
+			last_appearance_time > ? "" 
+			AND (p.community_id IN ?
+			OR p.org_id IN ?)
+			AND p.status IN ?
+		`, startDate, m.AreaIds, m.OrgIds, m.IdentityType).Scan(&baseFilter).Error
+	if err != nil {
+		logger.Warnf(err.Error())
+	}
+
+	for _, p := range baseFilter {
+		// 璋冪敤es鍒嗘瀽姝や汉鐨勫嚭琛岃寰嬫槸鍚︾鍚堟潯浠讹紝 杩斿洖绗﹀悎鏉′欢鐨勬鏁板拰鏈�鍚庝竴娆$鍚堟潯浠剁殑鏃堕棿
+
+		// 鍐欐暟鎹簱
+		var hitCount int
+		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("2006-01-02 15:04:05"),
+			FirstPersonID: p.DocumentNumber,
+		}
+
+		results = append(results, result)
+	}
 
 	logger.Debugf("task %s last filter result %d", m.Task.Name, len(results))
 	return service.SaveTaskResults(results)

--
Gitblit v1.8.0