From dd39847ba992605ef5fe2254140e8bfd8cf04b25 Mon Sep 17 00:00:00 2001
From: zhangzengfei <zhangzengfei@smartai.com>
Date: 星期四, 06 二月 2025 14:39:45 +0800
Subject: [PATCH] 修改托管模型
---
models/disappear.go | 59 ++++++++++++++++++++++++++++++++++++++++-------------------
1 files changed, 40 insertions(+), 19 deletions(-)
diff --git a/models/disappear.go b/models/disappear.go
index e65907f..c82bfcf 100644
--- a/models/disappear.go
+++ b/models/disappear.go
@@ -3,6 +3,7 @@
import (
"errors"
"fmt"
+ "strconv"
"strings"
"time"
@@ -21,7 +22,8 @@
DisappearTime int // 娑堝け鏃堕棿, 鍗曚綅灏忔椂
AlarmInterval int // 鎶ヨ鏃堕棿闂撮殧, 鍗曚綅澶�
LastDirection string // 鏈�鍚庝竴娆℃姄鎷�
- PersonAge int // 骞撮緞
+ MaxAge int // 骞撮緞
+ MinAge int // 骞撮緞
Task *db.ModelTask
}
@@ -52,8 +54,10 @@
}
if v.Alias == "age" {
- if val, ok := v.Value.(float64); ok {
- m.PersonAge = int(val)
+ if val, ok := v.Value.(string); ok {
+ ages := strings.Split(val, ",")
+ m.MinAge, _ = strconv.Atoi(ages[0])
+ m.MaxAge, _ = strconv.Atoi(ages[1])
}
}
@@ -90,35 +94,42 @@
results := make([]*db.ModelTaskResults, 0)
var ageFilter, labelFilter, keyFilter, lastFilter []PersonInfo
- if m.PersonAge > 0 {
+ if m.MinAge > 0 {
err := db.GetDB().Raw(`
SELECT
s.document_number,
s.community_id,
s.org_id,
p.person_name,
- p.id_card ,
+ p.id_card,
s.last_appearance_time,
s.last_direction,
- s.last_location
+ s.last_location
FROM
snapshot_count_summary AS s
JOIN person AS p ON p.id = s.document_number
WHERE
- s.STATUS = 'resident'
- AND p.id_card != ""
+ 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' ),
- CURDATE( ) > ?
- `, m.PersonAge).Scan(&ageFilter).Error
+ CURDATE( )
+ ) >= ?
+ AND TIMESTAMPDIFF(
+ YEAR,
+ 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
if err != nil {
logger.Warnf(err.Error())
}
if len(ageFilter) == 0 {
- return fmt.Errorf("no results found that match the age condition %d", m.PersonAge)
+ return fmt.Errorf("no results found that match the age condition %s - %s", m.MinAge, m.MaxAge)
}
+
+ logger.Debugf("match age result %d", len(ageFilter))
}
if m.PersonLabel != "" {
@@ -147,12 +158,14 @@
if len(labelFilter) == 0 {
return fmt.Errorf("no results found that match the label condition %s", m.PersonLabel)
}
+
+ logger.Debugf("match label result %d", len(labelFilter))
}
// 鍚堝苟涓�涓嬫潯浠�
- if m.PersonAge > 0 && m.PersonLabel != "" {
+ if m.MinAge > 0 && m.PersonLabel != "" {
lastFilter = intersectPersonInfo(ageFilter, labelFilter)
- } else if m.PersonAge > 0 {
+ } else if m.MinAge > 0 {
lastFilter = ageFilter
} else if m.PersonLabel != "" {
lastFilter = labelFilter
@@ -182,14 +195,17 @@
if err != nil {
logger.Warnf(err.Error())
}
+
+ logger.Debugf("match key person result %d", len(keyFilter))
+
+ if len(lastFilter) > 0 {
+ lastFilter = intersectPersonInfo(lastFilter, keyFilter)
+ } else {
+ lastFilter = keyFilter
+ }
}
- if len(lastFilter) > 0 {
- lastFilter = intersectPersonInfo(lastFilter, keyFilter)
- } else {
- lastFilter = keyFilter
- }
-
+ logger.Debugf("last result %d", len(lastFilter))
for _, p := range lastFilter {
if len(m.AreaIds) > 0 {
_, o1 := m.AreaIds[p.CommunityId]
@@ -226,6 +242,11 @@
return service.SaveTaskResults(results)
}
+func (m *DisappearModel) KeepAlive() error {
+ db.GetDB().Model(m.Task).Where("id = ?", m.Task.ID).Update("last_run_time", time.Now())
+ return nil
+}
+
func (m *DisappearModel) Shutdown() error {
// 娓呯悊璧勬簮
fmt.Println("Shutting down Disappear Model")
--
Gitblit v1.8.0