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