zhangzengfei
2025-02-07 a251c983447e24b2f8e1ecab74fcaf8c43902b9b
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)
}