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