From a251c983447e24b2f8e1ecab74fcaf8c43902b9b Mon Sep 17 00:00:00 2001
From: zhangzengfei <zhangzengfei@smartai.com>
Date: 星期五, 07 二月 2025 16:33:54 +0800
Subject: [PATCH] 托管添加事件名称

---
 models/disappear.go |   52 ++++++++++++++++++++++++++++++++++++++++++----------
 1 files changed, 42 insertions(+), 10 deletions(-)

diff --git a/models/disappear.go b/models/disappear.go
index da3bd39..f4ca22b 100644
--- a/models/disappear.go
+++ b/models/disappear.go
@@ -24,6 +24,7 @@
 	LastDirection string // 鏈�鍚庝竴娆℃姄鎷�
 	MaxAge        int    // 骞撮緞
 	MinAge        int    // 骞撮緞
+	StartTime     int64  // 璧峰鏃堕棿
 	Task          *db.ModelTask
 }
 
@@ -39,6 +40,7 @@
 	m.AlarmType = task.AlarmType
 	m.KeyPersonType = task.PersonType
 	m.PersonLabel = task.PersonLabel
+	m.StartTime = task.BeginTime.Unix()
 
 	for _, v := range task.Rules {
 		if v.Alias == "disappearTime" {
@@ -102,14 +104,15 @@
 			s.org_id,
 			p.person_name,
 			p.id_card,
-			p.last_appearance_time,
+			s.last_appearance_time,
 			s.last_direction,
 			s.last_location 
 		FROM
 			snapshot_count_summary AS s
 			JOIN person AS p ON p.id = s.document_number 
 		WHERE
-			p.id_card != "" 
+			s.last_appearance_time > ?
+			AND	p.id_card != "" 
 			AND TIMESTAMPDIFF(
 				YEAR,
 				STR_TO_DATE( CASE WHEN LENGTH( id_card ) = 18 THEN SUBSTRING( id_card, 7, 8 ) ELSE NULL END, '%Y%m%d' ),
@@ -120,7 +123,7 @@
 				STR_TO_DATE( CASE WHEN LENGTH( id_card ) = 18 THEN SUBSTRING( id_card, 7, 8 ) ELSE NULL END, '%Y%m%d' ),
 			CURDATE( ) 
 			) <= ?
-		`, m.MinAge, m.MaxAge).Scan(&ageFilter).Error
+		`, m.StartTime, m.MinAge, m.MaxAge).Scan(&ageFilter).Error
 		if err != nil {
 			logger.Warnf(err.Error())
 		}
@@ -141,7 +144,7 @@
 			s.org_id,
 			p.person_name,
 			p.id_card,
-			p.last_appearance_time,
+			s.last_appearance_time,
 			s.last_direction,
 			s.last_location 
 		FROM
@@ -149,8 +152,9 @@
 			JOIN person AS p ON p.id = s.document_number
 			JOIN person_label AS l ON p.id = l.person_id 
 		WHERE
-			l.label_id IN ?
-		`, labels).Scan(&labelFilter).Error
+			s.last_appearance_time > ?
+			AND	l.label_id IN ?
+		`, m.StartTime, labels).Scan(&labelFilter).Error
 		if err != nil {
 			logger.Warnf(err.Error())
 		}
@@ -180,7 +184,7 @@
 			s.org_id,
 			p.person_name,
 			p.id_card,
-			p.last_appearance_time,
+			s.last_appearance_time,
 			s.last_direction,
 			s.last_location 
 		FROM
@@ -188,10 +192,11 @@
 			JOIN person AS p ON p.id = s.document_number
 			JOIN key_person AS k ON k.id_card = p.id_card 
 		WHERE
-			s.key_status = 1 
+			s.last_appearance_time > ?
+			AND s.key_status = 1 
 			AND p.id_card != "" 
 			AND k.person_type IN ?
-		`, keyTypes).Scan(&keyFilter).Error
+		`, m.StartTime, keyTypes).Scan(&keyFilter).Error
 		if err != nil {
 			logger.Warnf(err.Error())
 		}
@@ -226,7 +231,7 @@
 		if isOlderThanGivenHours(p.LastAppearanceTime, m.DisappearTime) {
 			result := &db.ModelTaskResults{
 				Title:         m.Task.Name,
-				Event:         m.Task.Name,
+				Event:         eventFormat(p.LastAppearanceTime, p.LastDirection),
 				ModelID:       m.Task.ModelID,
 				ModelTaskID:   m.Task.ID,
 				CommunityId:   p.CommunityId,
@@ -299,3 +304,30 @@
 	// 鍒ゆ柇鏃堕棿鎴虫槸鍚︽棭浜庤鏃堕棿
 	return timestampTime.Before(timeThreshold)
 }
+
+func eventFormat(lastAppearTime int64, lastDirection string) string {
+	lastTime := time.Unix(lastAppearTime, 0)
+	currentTime := time.Now()
+
+	duration := currentTime.Sub(lastTime)
+
+	// 杈撳嚭鏃堕棿宸殑灏忔椂鏁�
+	var durationStr = "灏忔椂"
+	hours := duration.Hours()
+	if hours > 24 {
+		hours = hours / 24
+		durationStr = "澶�"
+	}
+
+	var direction string
+	var reverse = "鏈嚭鐜�"
+	if lastDirection == "in" {
+		direction = "杩�"
+		reverse = "鏈嚭"
+	} else if lastDirection == "out" {
+		direction = "鍑�"
+		reverse = "鏈綊"
+	}
+
+	return fmt.Sprintf("%s%s,鎸佺画%.1f%s%s", lastTime.Format("2006-01-02 15:04:05"), direction, hours, durationStr, reverse)
+}

--
Gitblit v1.8.0