优化签到天数。初始化为连签天数

This commit is contained in:
liuwei
2025-09-19 10:00:05 +08:00
parent 162a0aac43
commit 6eb6b70591
2 changed files with 32 additions and 7 deletions

View File

@@ -81,19 +81,44 @@ class SignInRedisDB:
"""获取用户总签到次数的Redis键"""
return f"{self.prefix}user_total:{wx_id}:{group_id}"
def increment_user_sign_count(self, wx_id: str, group_id: str) -> int:
def increment_user_sign_count(self, wx_id: str, group_id: str, sign_in_db=None) -> int:
"""增加用户签到总次数"""
key = self.get_user_total_sign_count_key(wx_id, group_id)
with self.get_redis_connection() as redis_client:
# 先检查是否存在,如果不存在则初始化
if not redis_client.exists(key) and sign_in_db:
user_record = sign_in_db.get_user_record(wx_id, group_id)
if user_record and user_record.get('signin_streak', 0) > 0:
# 使用连签天数作为初始值
initial_count = user_record['signin_streak']
redis_client.set(key, initial_count)
# 然后增加1
count = redis_client.incr(key)
return count
# 如果已存在或初始化失败,直接增加
count = redis_client.incr(key)
return count
def get_user_total_sign_count(self, wx_id: str, group_id: str) -> int:
"""获取用户签到总次数"""
def get_user_total_sign_count(self, wx_id: str, group_id: str, sign_in_db=None) -> int:
"""获取用户签到总次数如果Redis中没有数据则使用连签天数初始化"""
key = self.get_user_total_sign_count_key(wx_id, group_id)
with self.get_redis_connection() as redis_client:
count = redis_client.get(key)
return int(count) if count else 0
if count:
return int(count)
# Redis中没有数据尝试从数据库初始化
if sign_in_db:
user_record = sign_in_db.get_user_record(wx_id, group_id)
if user_record and user_record.get('signin_streak', 0) > 0:
# 使用连签天数作为初始总签到次数
initial_count = user_record['signin_streak']
redis_client.set(key, initial_count)
return initial_count
# 如果数据库也没有记录返回0
return 0
def set_user_total_sign_count(self, wx_id: str, group_id: str, count: int) -> bool:
"""设置用户签到总次数"""