修复签到bug

This commit is contained in:
liuwei
2025-04-11 12:17:32 +08:00
parent 6938216136
commit 277d4ae6a6
3 changed files with 125 additions and 35 deletions

View File

@@ -117,3 +117,28 @@ CREATE TABLE IF NOT EXISTS message_archive.tasks
)
comment '机器人定时任务表';
-- 修改签到表,添加必要字段
ALTER TABLE t_sign_record ADD COLUMN last_continuous_days INT DEFAULT 0 COMMENT '历史最长连续签到天数';
ALTER TABLE t_sign_record ADD COLUMN total_sign_days INT DEFAULT 0 COMMENT '总签到天数';
ALTER TABLE t_sign_record ADD COLUMN last_sign_date DATETIME NULL COMMENT '上一次签到日期';
ALTER TABLE t_sign_record ADD COLUMN streak_start_sign_date DATETIME NULL COMMENT '连续签到第一天日期';
-- 添加断签前连签天数字段
ALTER TABLE t_sign_record ADD COLUMN previous_streak INT DEFAULT 0 COMMENT '断签前的连签天数';
-- 创建签到历史记录表
CREATE TABLE IF NOT EXISTS message_archive.t_sign_history (
id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '历史记录ID',
wx_id VARCHAR(100) NOT NULL COMMENT '用户微信ID',
group_id VARCHAR(100) NOT NULL COMMENT '群聊ID',
sign_date DATE NOT NULL COMMENT '签到日期',
sign_time DATETIME NOT NULL COMMENT '签到时间',
is_makeup TINYINT(1) DEFAULT 0 COMMENT '是否为补签',
points_earned INT DEFAULT 0 COMMENT '获得的积分',
streak_count INT DEFAULT 1 COMMENT '当时的连签天数',
create_time DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '记录创建时间',
INDEX idx_user_group (wx_id, group_id),
INDEX idx_sign_date (sign_date)
) COMMENT '用户签到历史记录表';

View File

@@ -109,3 +109,20 @@ class SignInDB(BaseDBOperator):
wx_id, group_id
)
self.execute_update(sql, params)
def update_sign_record_with_previous_streak(self, wx_id: str, group_id: str, wx_nick_name: str,
points_to_add: int, sign_time: datetime, streak: int,
last_sign_date: datetime, previous_streak: int) -> bool:
"""更新签到记录,包括上次签到日期和断签前连签天数"""
sql = """
UPDATE t_sign_record
SET wx_nick_name = %s, points = points + %s,
sign_stat = %s, signin_streak = %s,
last_sign_date = %s, previous_streak = %s, update_time = %s
WHERE wx_id = %s AND group_id = %s
"""
params = (wx_nick_name, points_to_add,
sign_time, streak,
last_sign_date, previous_streak, datetime.now(),
wx_id, group_id)
return self.execute_update(sql, params)