优化签到天数。初始化为连签天数
This commit is contained in:
@@ -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:
|
||||
"""设置用户签到总次数"""
|
||||
|
||||
Reference in New Issue
Block a user