From 6b59a711b9af0825858c408cdba95102b8b51cb3 Mon Sep 17 00:00:00 2001
From: zhangqian <zhangqian@123.com>
Date: 星期五, 13 十二月 2024 15:46:44 +0800
Subject: [PATCH] 结果表增加联合唯一索引,防止重复报警
---
service/task_results.go | 14 ++++++-
models/gather_model.go | 27 ++++++++-----
db/task_results.go | 55 ++++++++++++++++++++++-----
3 files changed, 72 insertions(+), 24 deletions(-)
diff --git a/db/task_results.go b/db/task_results.go
index e94c98a..ae4367d 100644
--- a/db/task_results.go
+++ b/db/task_results.go
@@ -8,17 +8,19 @@
type ModelTaskResults struct {
BaseModel
- Title string `json:"name" gorm:"type:varchar(255)"` //棰勮鍚嶇О,鏆傛椂鐢ㄤ换鍔″悕绉�
- Event string `json:"event" gorm:"type:varchar(255)"` //棰勮浜嬩欢
- ModelID string `json:"modelID" gorm:"type:varchar(255)"` //妯″瀷ID
- ModelTaskID string `json:"modelTaskID" gorm:"type:varchar(255)"` //妯″瀷浠诲姟ID
- OrgID string `json:"orgID" gorm:"index;column:org_id;type:varchar(299);not null;"` //娲惧嚭鎵� domain unit ID
- CommunityId string `json:"communityID" gorm:"index;column:community_id;type:varchar(299);not null;"` //灏忓尯ID
- ObjectIds string `json:"objectIds" gorm:"type:text"` //浜嬩欢瀵硅薄锛屽彲浠ユ槸浜猴紝澶氫釜鐢ㄩ�楀彿鍒嗛殧
- Location string `json:"location" gorm:"type:varchar(255)"` //鍙戠敓鍦扮偣
- Building string `json:"building" gorm:"type:varchar(255);"` //妤兼爧
- Floor string `json:"floor" gorm:"type:varchar(255);"` //妤煎眰
- PicDate string `json:"picDate" gorm:"type:varchar(255);"` //鎶撴媿鏃堕棿
+ Title string `json:"name" gorm:"type:varchar(255)"` //棰勮鍚嶇О,鏆傛椂鐢ㄤ换鍔″悕绉�
+ Event string `json:"event" gorm:"type:varchar(255)"` //棰勮浜嬩欢
+ ModelID string `json:"modelID" gorm:"type:varchar(255)"` //妯″瀷ID
+ ModelTaskID string `json:"modelTaskID" gorm:"type:varchar(255)"` //妯″瀷浠诲姟ID
+ OrgID string `json:"orgID" gorm:"index;column:org_id;type:varchar(299);not null;"` //娲惧嚭鎵� domain unit ID
+ CommunityId string `json:"communityID" gorm:"index;column:community_id;type:varchar(299);not null;"` //灏忓尯ID
+ PicDate string `json:"picDate" gorm:"uniqueIndex:pic_date_first_person_id;type:varchar(255);"` //鎶撴媿鏃堕棿
+ FirstPersonID string `json:"-" gorm:"uniqueIndex:pic_date_first_person_id;type:varchar(255);"` //绗竴涓汉鐨処D
+ ObjectIds string `json:"objectIds" gorm:"type:text"` //浜嬩欢瀵硅薄锛屽彲浠ユ槸浜猴紝澶氫釜鐢ㄩ�楀彿鍒嗛殧
+ Location string `json:"location" gorm:"type:varchar(255)"` //鍙戠敓鍦扮偣
+ Building string `json:"building" gorm:"type:varchar(255);"` //妤兼爧
+ Floor string `json:"floor" gorm:"type:varchar(255);"` //妤煎眰
+
}
func (m *ModelTaskResults) TableName() string {
@@ -67,6 +69,16 @@
return slf
}
+func (slf *ModelTaskResultsSearch) SetFirstPersonId(firstId string) *ModelTaskResultsSearch {
+ slf.FirstPersonID = firstId
+ return slf
+}
+
+func (slf *ModelTaskResultsSearch) SetPicDate(picDate string) *ModelTaskResultsSearch {
+ slf.PicDate = picDate
+ return slf
+}
+
func (slf *ModelTaskResultsSearch) build() *gorm.DB {
var db = slf.Orm.Table(slf.TableName())
if slf.Order != "" {
@@ -75,6 +87,14 @@
if slf.ID != "" {
db = db.Where("id = ?", slf.ID)
+ }
+
+ if slf.PicDate != "" {
+ db = db.Where("pic_date = ?", slf.PicDate)
+ }
+
+ if slf.FirstPersonID != "" {
+ db = db.Where("first_person_id = ?", slf.FirstPersonID)
}
if slf.Keyword != "" {
@@ -163,6 +183,19 @@
return nil
}
+func (slf *ModelTaskResultsSearch) FirstOrCreate(record *ModelTaskResults) error {
+ var db = slf.build()
+ var exists ModelTaskResults
+ if err := db.First(&exists).Error; err == nil {
+ return nil
+ }
+ if err2 := slf.Orm.Table(slf.TableName()).Create(record).Error; err2 != nil {
+ return fmt.Errorf("FirstOrCreate err: %v, record: %+v", err2, record)
+ }
+
+ return nil
+}
+
func (slf *ModelTaskResultsSearch) Save(record *ModelTaskResults) error {
var db = slf.build()
record.UpdatedAt = time.Now()
diff --git a/models/gather_model.go b/models/gather_model.go
index 050065d..59187ce 100644
--- a/models/gather_model.go
+++ b/models/gather_model.go
@@ -133,18 +133,23 @@
}
event := strings.Join(typeNames, ",")
for lt, persons := range aggregation {
+ if persons.Size() == 0 {
+ continue
+ }
+ personIds := persons.Elements()
result := &db.ModelTaskResults{
- Title: m.Task.Name,
- Event: fmt.Sprintf("%s/%d浜�", event, len(persons)),
- ModelID: m.Task.ModelID,
- ModelTaskID: m.Task.ID,
- CommunityId: lt.CommunityId,
- OrgID: lt.OrgId,
- ObjectIds: strings.Join(persons.Elements(), ","),
- Location: lt.Location,
- Building: lt.Building,
- Floor: lt.Floor,
- PicDate: lt.Time,
+ Title: m.Task.Name,
+ Event: fmt.Sprintf("%s/%d浜�", event, len(persons)),
+ ModelID: m.Task.ModelID,
+ ModelTaskID: m.Task.ID,
+ CommunityId: lt.CommunityId,
+ OrgID: lt.OrgId,
+ ObjectIds: strings.Join(personIds, ","),
+ Location: lt.Location,
+ Building: lt.Building,
+ Floor: lt.Floor,
+ PicDate: lt.Time,
+ FirstPersonID: personIds[0],
}
results = append(results, result)
}
diff --git a/service/task_results.go b/service/task_results.go
index bdeef8f..56e3ce8 100644
--- a/service/task_results.go
+++ b/service/task_results.go
@@ -1,7 +1,17 @@
package service
-import "model-engine/db"
+import (
+ "model-engine/db"
+ "model-engine/pkg/logger"
+)
func SaveTaskResults(results []*db.ModelTaskResults) error {
- return db.NewModelTaskResultsSearch().BatchCreate(results)
+ for _, v := range results {
+ err := db.NewModelTaskResultsSearch().SetPicDate(v.PicDate).SetFirstPersonId(v.FirstPersonID).FirstOrCreate(v)
+ if err != nil {
+ logger.Errorf("save task result err:%v", err)
+ return err
+ }
+ }
+ return nil
}
--
Gitblit v1.8.0