From 16b34c939d6790fe6ebe61f8f0e85fe80ee52224 Mon Sep 17 00:00:00 2001 From: sunty <1172534965@qq.com> Date: 星期三, 29 五月 2024 14:44:16 +0800 Subject: [PATCH] 修改准备数据流程,适应较大数据量的操作 --- db/repository.go | 53 +++++++++++++++++++++++------------------------------ 1 files changed, 23 insertions(+), 30 deletions(-) diff --git a/db/repository.go b/db/repository.go index 221b906..afa5a12 100644 --- a/db/repository.go +++ b/db/repository.go @@ -103,6 +103,20 @@ return personStatusList, nil } +// 鏌ヨ灏忓尯妗f琛� (鍘熸煡璇换鍔″睘鎬�) +func QueryPersonStatusWithPagination(community_id string, timeThreshold int64) ([]*PersonStatus, error) { + var db = DB + var personStatusList []*PersonStatus + result := db.Select("document_number, status, frequent_address, last_appearance_time, last_appearance_status_time"). + Where("community_id = ? AND last_appearance_time != last_appearance_status_time AND last_appearance_time > ?", community_id, timeThreshold). + Find(&personStatusList) + if result.Error != nil { + logger.Error(result.Error) + return nil, result.Error + } + return personStatusList, nil +} + // 鏌ヨ浜虹墿骞撮緞 func GetAgeById(id string) (int, error) { var db = DB @@ -276,37 +290,16 @@ var db = DB // 閬嶅巻浜哄憳淇℃伅 for _, person := range persons { - - // 妫�鏌ヨ褰曟槸鍚﹀瓨鍦� - var existingPerson PersonStatus - err := db.Where("document_number = ? AND community_id = ?", person.DocumentNumber, communityID).First(&existingPerson).Error - if err != nil && !errors.Is(err, gorm.ErrRecordNotFound) { - logger.Error("Query person error:", err, person.DocumentNumber, communityID) - //fmt.Println("asdasfasfasf") - continue - //return err + err := db.Model(&PersonStatus{}). + Where("document_number = ? AND community_id = ?", person.DocumentNumber, communityID). + Updates(map[string]interface{}{ + "status": person.Status, + "frequent_address": person.FrequentAddress, + "LastAppearanceStatusTime": person.LastAppearanceStatusTime, + }).Error + if err != nil { + return err } - - // 濡傛灉璁板綍瀛樺湪锛屽垯鏇存柊 - if existingPerson.DocumentNumber != "" { - err := db.Model(&PersonStatus{}). - Where("document_number = ? AND community_id = ?", person.DocumentNumber, communityID). - Updates(map[string]interface{}{ - "status": person.Status, - "frequent_address": person.FrequentAddress, - }).Error - if err != nil { - return err - } - } - //else { - // // 濡傛灉璁板綍涓嶅瓨鍦紝鍒欐彃鍏ユ柊璁板綍 - // err := db.Create(&person).Error - // if err != nil { - // return err - // } - //} - } return nil -- Gitblit v1.8.0