签到功能加入了总天数记录。
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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)
|
||||
Reference in New Issue
Block a user