| | |
| | | LastDirection string // 最后一次抓拍 |
| | | MaxAge int // 年龄 |
| | | MinAge int // 年龄 |
| | | StartTime int64 // 起始时间 |
| | | Task *db.ModelTask |
| | | } |
| | | |
| | |
| | | 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" { |
| | |
| | | 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' ), |
| | |
| | | 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()) |
| | | } |
| | |
| | | s.org_id, |
| | | p.person_name, |
| | | p.id_card, |
| | | p.last_appearance_time, |
| | | s.last_appearance_time, |
| | | s.last_direction, |
| | | s.last_location |
| | | FROM |
| | |
| | | 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()) |
| | | } |
| | |
| | | s.org_id, |
| | | p.person_name, |
| | | p.id_card, |
| | | p.last_appearance_time, |
| | | s.last_appearance_time, |
| | | s.last_direction, |
| | | s.last_location |
| | | FROM |
| | |
| | | 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()) |
| | | } |
| | |
| | | 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, |
| | |
| | | // 判断时间戳是否早于该时间 |
| | | 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) |
| | | } |