签到功能加入了总天数记录。

This commit is contained in:
liuwei
2025-09-17 14:26:55 +08:00
parent 012417cdf9
commit 77ae80c06c
3 changed files with 93 additions and 2 deletions

View File

@@ -161,3 +161,62 @@ class SignInDB(BaseDBOperator):
last_sign_date, previous_streak, datetime.now(),
wx_id, group_id)
return self.execute_update(sql, params)
def create_sign_history(self, wx_id: str, group_id: str, sign_date: datetime,
sign_time: datetime, is_makeup: bool, points_earned: int,
streak_count: int) -> bool:
"""创建签到历史记录"""
sql = """
INSERT INTO t_sign_history
(wx_id, group_id, sign_date, sign_time, is_makeup, points_earned, streak_count)
VALUES (%s, %s, %s, %s, %s, %s, %s)
"""
params = (wx_id, group_id, sign_date.date(), sign_time,
1 if is_makeup else 0, points_earned, streak_count)
return self.execute_update(sql, params)
def get_user_sign_history(self, wx_id: str, group_id: str,
start_date: datetime = None,
end_date: datetime = None,
limit: int = 30) -> List[Dict]:
"""获取用户签到历史记录"""
sql = """
SELECT id, wx_id, group_id, sign_date, sign_time,
is_makeup, points_earned, streak_count, create_time
FROM t_sign_history
WHERE wx_id = %s AND group_id = %s
"""
params = [wx_id, group_id]
if start_date:
sql += " AND sign_date >= %s"
params.append(start_date.date())
if end_date:
sql += " AND sign_date <= %s"
params.append(end_date.date())
sql += " ORDER BY sign_date DESC, sign_time DESC LIMIT %s"
params.append(limit)
return self.execute_query(sql, tuple(params))
def get_user_sign_count(self, wx_id: str, group_id: str,
start_date: datetime = None,
end_date: datetime = None) -> int:
"""获取用户签到总次数"""
sql = """
SELECT COUNT(*) as count
FROM t_sign_history
WHERE wx_id = %s AND group_id = %s
"""
params = [wx_id, group_id]
if start_date:
sql += " AND sign_date >= %s"
params.append(start_date.date())
if end_date:
sql += " AND sign_date <= %s"
params.append(end_date.date())
result = self.execute_query(sql, tuple(params), fetch_one=True)
return result['count'] if result else 0

View File

@@ -74,4 +74,24 @@ class SignInRedisDB:
redis_client.delete(key)
return True
except Exception:
return False
return False
def get_user_total_sign_count_key(self, wx_id: str, group_id: str) -> str:
"""获取用户总签到次数的Redis键"""
return f"{self.prefix}sign:total:{wx_id}:{group_id}"
def increment_user_sign_count(self, wx_id: str, group_id: str) -> int:
"""增加用户签到总次数"""
key = self.get_user_total_sign_count_key(wx_id, group_id)
return self.redis.incr(key)
def get_user_total_sign_count(self, wx_id: str, group_id: str) -> int:
"""获取用户签到总次数"""
key = self.get_user_total_sign_count_key(wx_id, group_id)
count = self.redis.get(key)
return int(count) if count else 0
def set_user_total_sign_count(self, wx_id: str, group_id: str, count: int) -> bool:
"""设置用户签到总次数"""
key = self.get_user_total_sign_count_key(wx_id, group_id)
return self.redis.set(key, count)