From 8726c0f29ffbe310a84bf6b4f530d5dcdbd246fd Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期五, 25 二月 2022 15:44:24 +0800
Subject: [PATCH] 9462 【BT5】【bt5_1.101.1】【BT6】【yn_1.0.1】【主干】【gt_1.103.1】【后端】定时存档优化(优化协助感谢数据存储:存档前移除7日前未完结数据)

---
 ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerAssist.py |   56 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 ServerPython/CoreServerGroup/GameServer/Script/PyDataManager.py       |    1 +
 2 files changed, 57 insertions(+), 0 deletions(-)

diff --git a/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerAssist.py b/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerAssist.py
index 143f5de..2348d7e 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerAssist.py
+++ b/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerAssist.py
@@ -38,6 +38,62 @@
 AssistType_TeamFB, # 组队副本
 ) = range(3)
 
+def RemoveOutofdateAssistThanks():
+    ## 移除过期的未完结感谢数据
+    
+    timeoutDate = GameWorld.GetDatetimeByDiffDays(-7)
+    assistThanksMgr = PyDataManager.GetPlayerAssistThanksPyManager()
+    maxDoCount = len(assistThanksMgr.allAssistThanksList)
+    syncPlayerIDList = []
+    removeCountTotal, delNoThanksCount, delUnGetThanksCount = 0, 0, 0
+    doCount = 0
+    while doCount < maxDoCount and assistThanksMgr.allAssistThanksList:
+        doCount += 1
+        thanks = assistThanksMgr.allAssistThanksList[0]
+        thanksDate = GameWorld.ChangeStrToDatetime(thanks.TimeStr)
+        if thanksDate > timeoutDate:
+            break
+        
+        removeCountTotal += 1
+        # 移除过期的感谢数据
+        popThanks = assistThanksMgr.allAssistThanksList.pop(0)
+        playerID = popThanks.PlayerID
+        GUID = popThanks.GUID
+        assistPlayerIDList = popThanks.AssistPlayerDict.keys()
+        
+        if playerID in assistThanksMgr.playerThanksDict:
+            playerThanksList = assistThanksMgr.playerThanksDict[playerID]
+            for i, thanks in enumerate(playerThanksList):
+                if GUID == thanks.GUID:
+                    delNoThanksCount += 1
+                    playerThanksList.pop(i)
+                    #GameWorld.DebugLog("    移除未感谢的数据: i=%s,GUID=%s,len=%s" % (i, thanks.GUID, len(playerThanksList)))
+                    break
+                
+        for assistPlayerID in assistPlayerIDList:
+            if assistPlayerID not in assistThanksMgr.assistPlayerThanksDict:
+                continue
+            assistThanksList = assistThanksMgr.assistPlayerThanksDict[assistPlayerID]
+            for i, thanks in enumerate(assistThanksList):
+                if GUID == thanks.GUID:
+                    delUnGetThanksCount += 1
+                    assistThanksList.pop(i)
+                    #GameWorld.DebugLog("    移除未接受感谢的数据: i=%s,GUID=%s,assistPlayerID=%s,len=%s" % (i, thanks.GUID, assistPlayerID, len(assistThanksList)))
+                    if assistPlayerID not in syncPlayerIDList:
+                        syncPlayerIDList.append(assistPlayerID)
+                    break
+                
+    playerMgr = GameWorld.GetPlayerManager()
+    for playerID in syncPlayerIDList:
+        assistPlayer = playerMgr.FindPlayerByID(playerID)
+        if assistPlayer:
+            SyncCanGetAssistThanksGiftCount(assistPlayer, isForce=True)
+            
+    if removeCountTotal:
+        GameWorld.DebugLog("移除过期的未完结感谢数据: doCount=%s,maxDoCount=%s,removeCountTotal=%s,delNoThanksCount=%s,delUnGetThanksCount=%s,remainCount=%s" 
+                           % (doCount, maxDoCount, removeCountTotal, delNoThanksCount, delUnGetThanksCount, len(assistThanksMgr.allAssistThanksList)))
+    return
+
 
 def OnPlayerLogin(curPlayer, isTJ=False):
     ## 玩家上线
diff --git a/ServerPython/CoreServerGroup/GameServer/Script/PyDataManager.py b/ServerPython/CoreServerGroup/GameServer/Script/PyDataManager.py
index 70fb00a..cb3a051 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/PyDataManager.py
+++ b/ServerPython/CoreServerGroup/GameServer/Script/PyDataManager.py
@@ -60,6 +60,7 @@
     
     # 保存数据 存数据库和realtimebackup
     def GetSaveData(self):
+        PlayerAssist.RemoveOutofdateAssistThanks()
         savaData = ""
         cntData = ""
         cnt = 0

--
Gitblit v1.8.0