第4篇Scrum冲刺博客
每日Scrum报告
日期: [2025.11.29]
会议时间: [21:00]
1. 当日站立式会议记录
会议照片

成员同步内容
成员:齐思贤
- 昨天已完成的工作:
-
- 设计JWT payload结构(包含user_id/role/exp);
-
- 集成jwt-cpp依赖,实现Token生成逻辑;
-
- 开发用户登录接口(校验student_id+加密密码)
-
- 编写Drogon全局鉴权Filter(拦截需登录接口,验证Token有效性);2. 处理Token过期/无效返回401错误;5
-
- 测试登录+鉴权流程
-
- 今天计划完成的工作:
-
- 开发个人资料查询接口(GET /api/v1/users/me),返回用户详情(含review_count/collection_count);
-
- 设计collection表(id/user_id/merchant_id/collected_at字段)
-
- 开发个人资料修改接口(PUT /api/v1/users/me),支持修改nickname/avatar;
-
- 编写collection表索引(user_id+merchant_id唯一索引,防止重复收藏)
-
- 工作中遇到的困难:
- 未来需要修改API但需保持向后兼容
- 用户量大时,collections表可能过大
成员:阿里亚
- 昨天已完成的工作:
-
- 协助开发登录接口(编写Token验证逻辑,解析user_id/role);
-
- 编写用户模块单元测试框架(基于gtest)
-
- 测试全局鉴权Filter(覆盖未登录/Token过期/无效Token场景);
-
- 协助排查登录接口异常(如密码校验失败)
-
- 今天计划完成的工作:
-
- 协助开发个人资料接口(编写用户信息组装逻辑,计算review_count/collection_count);
-
- 设计collection表索引优化方案
-
- 编写收藏表数据操作工具类(CRUD封装);
-
- 测试资料修改接口(覆盖昵称长度限制/头像URL格式校验)
-
- 工作中遇到的困难:
- 昵称敏感词/头像URL格式校验繁琐,统计更新后缓存未及时清理
成员:林旭坚
- 昨天已完成的工作:
-
- 实现商户创建接口(POST /api/v1/merchants),参数校验(名称/地址不能为空、分类合法);
-
- 初始状态设为10(待审核),生成merchant_id(雪花算法)
-
- 开发商户列表查询接口(GET /api/v1/merchants),支持category_id/campus筛选;
-
- 编写筛选逻辑(仅返回status=20的商户)
-
- 今天计划完成的工作:
-
- 实现商户详情查询接口(GET /api/v1/merchants/{id}),返回完整信息(含tags/images/avg_score);
-
- 集成Redis ZSET维护平均评分(avg_score),初始值0
-
- 开发商户标签管理逻辑(添加/删除标签,去重);
-
- 测试商户详情接口(覆盖已审核/未审核/不存在商户场景)
-
- 工作中遇到的困难:
- 多请求同时修改标签导致数据错乱,Redis与DB评分数据不一致问题
成员:谢嘉骏
- 昨天已完成的工作:
-
- 实现点评发布接口(POST /api/v1/reviews),参数校验(score1-5分、content非空(可选?按文档需确认,此处按必填处理)、商户存在且已审核);
-
- 支持匿名发布(anonymous=true隐藏用户信息)
-
- 同步商户点评数和平均评分(更新merchant表review_count/avg_score,同步Redis ZSET)
-
- 测试点评发布流程(正常发布/参数错误/商户未审核)
-
- 今天计划完成的工作:
-
- 实现商户点评列表查询接口(GET /api/v1/merchants/{id}/reviews),支持分页、排序(latest/最热/评分优先);
-
- 编写排序逻辑(最热=like_count+reply_count加权)
-
- 开发点评点赞接口(POST /api/v1/reviews/{id}/like),Redis INCR计数,防止重复点赞;
-
- 测试点赞功能(点赞/取消点赞/重复点赞)
-
- 工作中遇到的困难:
- 高并发下用户重复操作边界条件处理,多字段加权计算+分页查询慢
成员:袁镇清
- 昨天已完成的工作:
-
- 协助开发点评发布接口(编写评分范围校验/图片数量限制逻辑)
-
- 编写商户评分同步工具类(封装avg_score计算和Redis更新)
-
- 测试点评发布接口(覆盖匿名/非匿名、多图/无图场景
-
- 排查评分同步异常(如小数精度问题)
-
- 今天计划完成的工作:
-
- 协助开发商户点评列表接口(编写分页工具类,支持page/size参数
-
- 测试排序逻辑(验证latest/最热/评分优先结果正确性)
-
- 协助开发点赞接口(编写重复点赞校验逻辑,基于review_like表+Redis)
-
- 编写点赞定时落库脚本
-
- 工作中遇到的困难:
- 多维度排序(最新/最热/评分)需复合索引,设计复杂
成员:彭文昊
- 昨天已完成的工作:
-
- 对接后端登录接口(POST /api/v1/users/login),实现登录功能
-
- 实现“记住密码”功能(localStorage存储学号+加密密码,有效期7天)
-
- 开发注册页UI(表单布局、密码确认校验)
-
- 编写注册表单校验逻辑(两次密码一致、昵称长度限制)
-
- 今天计划完成的工作:
-
- 对接后端注册接口(POST /api/v1/users/register),实现注册功能
-
- 注册成功后自动登录,跳转首页
-
- 开发个人中心UI(头像+昵称展示、功能入口布局、底部设置入口)
-
- 对接个人资料查询接口(GET /api/v1/users/me),展示用户信息
-
- 工作中遇到的困难:
- 注册成功到自动登录状态同步存在延迟,页面跳转时用户状态未就绪
成员:张嘉铭
- 昨天已完成的工作:
-
- 对接热门商户推荐接口(GET /api/v1/search/merchants),展示热门商户列表;
-
- 开发首页轮播图功能(展示系统公告,支持点击跳转)
-
- 开发分类列表页UI(分类标题、筛选栏(校区+排序)、商户卡片列表)
-
- 封装筛选组件(校区下拉选择、排序下拉选择)
-
- 今天计划完成的工作:
-
- 对接商户列表查询接口(GET /api/v1/merchants),实现分类筛选和排序功能
-
- 开发分类列表页分页加载
-
- 开发商户详情页UI(基础信息区域、标签区域、图片轮播、评分分布图表、点评列表区域、收藏按钮、写点评按钮)
-
- 工作中遇到的困难:
- 后端返回评分分布数据格式与前端图表库适配问题
2. 项目燃尽图发布

3. 每人的代码/文档签入记录
齐思贤
- 签入记录对应的Issue内容与链接:
- 用户个人资料模块开发 - 核心功能模块:实现个人资料查询接口(GET /api/v1/users/me)、修改功能(PUT /api/v1/users/me)和收藏系统设计
- 说明:
- 包含JWT鉴权验证、数据库CRUD操作、Redis缓存集成,确保用户数据安全性和高性能访问
- 代码必须每天可执行,支持单元测试和接口测试覆盖
阿里亚
- 签入记录对应的Issue内容与链接:
- 个人资料模块性能优化- 系统优化模块:优化统计查询性能,实现收藏防重复机制,设计collection表索引优化方案
- 说明:
- 通过Redis缓存策略提升查询效率,唯一索引+分布式锁防止并发问题,保证数据一致性
- 代码必须每天可执行,包含性能压测脚本和监控指标
林旭坚
- 签入记录对应的Issue内容与链接:
- 商户详情接口开发 - 商户核心模块:实现商户详情查询、Redis ZSET动态评分维护和标签管理系统
- 说明:
- 集成Redis实现实时评分计算,支持商户标签的增删改查,包含完整的API文档和错误处理机制
- 代码必须每天可执行,覆盖各种边界条件测试
谢嘉骏
- 签入记录对应的Issue内容与链接:
- 点评列表与点赞功能 - 社交互动模块:实现点评列表查询、多维度排序和点赞系统
- 说明:
- 支持latest/最热/评分优先三种排序算法,点赞功能使用Redis计数器防止重复操作,提升用户体验
- 代码必须每天可执行,包含并发测试和数据一致性验证
袁镇清
- 签入记录对应的Issue内容与链接:
- 点评系统辅助功能开发 - 基础设施模块:开发通用分页工具类、点赞校验逻辑和定时数据同步脚本
- 说明:
- 提供可复用的分页组件,基于数据库+Redis的双重校验机制,定时脚本确保数据最终一致性
- 代码必须每天可执行,包含完整的错误日志和监控告警
彭文昊
- 签入记录对应的Issue内容与链接:
- 前端注册和个人中心功能 - 前端用户模块:实现用户注册、自动登录状态管理和个人中心UI组件
- 说明:
- 采用响应式设计,支持表单验证、错误提示、加载状态等用户体验优化,确保前后端数据同步
- 代码必须每天可执行,包含组件单元测试和端到端测试
张嘉铭
- 签入记录对应的Issue内容与链接:
- 商户列表和详情页前端开发 - 前端展示模块:实现商户列表筛选、分页加载和详情页完整UI开发
- 说明:
- 包含图片轮播、评分分布图表、标签展示等交互组件,支持多校区筛选和实时数据更新
- 代码必须每天可执行,优化加载性能和用户交互体验
4. Code Review的更新
- 今日无代码规范文档更新。
5. 项目程序/模块最新截图
最新模块代码截图(含注释)
1. 用户认证模块 (UserController.h + UserService.h)
// UserController.h - 用户控制器,处理HTTP请求
namespace dianping {
namespace controller {
class UserController : public drogon::HttpController<UserController> {
private:
std::shared_ptr<service::UserService> userService_;
public:
// 发送验证码 - POST /user/code?phone=13800138000
ADD_METHOD_TO(UserController::sendCode, "/user/code", drogon::Post);
// 用户登录 - POST /user/login
// Body: {"phone": "13800138000", "code": "123456"}
ADD_METHOD_TO(UserController::login, "/user/login", drogon::Post);
// JWT Token认证 - GET /user/me
ADD_METHOD_TO(UserController::me, "/user/me", drogon::Get);
};
// UserService.h - 用户业务逻辑服务
class UserService {
private:
std::shared_ptr<mapper::UserMapper> userMapper_;
std::shared_ptr<utils::RedisClient> redis_;
public:
// 发送验证码:存储到Redis,5分钟过期
dto::Result sendCode(const std::string& phone);
// 用户登录:验证码校验 + JWT Token生成
dto::Result login(const dto::LoginFormDTO& loginForm);
// Token刷新:延长Redis中用户信息有效期
bool refreshToken(const std::string& token);
};
2. Redis缓存模块 (CacheClient.h)
// CacheClient.h - 缓存客户端,解决缓存穿透/雪崩/击穿
namespace dianping {
namespace utils {
class CacheClient {
private:
std::shared_ptr<RedisClient> redis_;
public:
// 获取缓存,支持空值缓存防止穿透
template<typename T>
std::optional<T> get(const std::string& key);
// 设置缓存,随机过期时间防止雪崩
template<typename T>
bool set(const std::string& key, const T& value, int ttl = 0);
// 互斥锁获取,防止缓存击穿
bool tryLock(const std::string& lockKey, int expireTime = 10);
// 删除缓存,保证数据库和缓存一致性
bool deleteKey(const std::string& key);
// Cache Aside模式实现
template<typename T>
std::optional<T> getWithFallback(
const std::string& key,
std::function<std::optional<T>()> dbLoader,
int ttl = 1800
);
};
3. 秒杀系统模块 (VoucherOrderService.h)
// VoucherOrderService.h - 秒杀订单服务
namespace dianping {
namespace service {
class VoucherOrderService {
private:
std::shared_ptr<mapper::VoucherMapper> voucherMapper_;
std::shared_ptr<mapper::VoucherOrderMapper> orderMapper_;
std::shared_ptr<utils::RedisClient> redis_;
std::shared_ptr<utils::RedisIdWorker> idWorker_;
public:
// 秒杀下单:分布式锁 + 库存校验 + 一人一单
dto::Result createSeckillOrder(long userId, long voucherId);
// 预检查库存:Redis原子操作,避免无效请求
bool preCheckStock(long voucherId);
// 检查是否重复下单:使用Redis Set防止一人多单
bool checkOrdered(long userId, long voucherId);
private:
// Redis分布式锁实现
bool acquireLock(const std::string& lockKey, const std::string& requestId);
void releaseLock(const std::string& lockKey, const std::string& requestId);
// Lua脚本保证原子性
static const std::string STOCK_DECREASE_SCRIPT;
};
4. 应用程序启动模块 (main.cpp)
// main.cpp - 应用程序入口,系统集成
int main(int argc, char* argv[]) {
// 1. 加载YAML配置文件
auto config = loadConfig("config/application.yaml");
// 2. 初始化日志系统
initLogger(config);
spdlog::info("点评系统 C++ 版本启动中...");
// 3. 初始化数据库连接池 (20个连接)
auto dbPool = initDatabase(config);
// 4. 初始化Redis客户端 (连接池30个)
auto redis = initRedis(config);
// 5. 配置Drogon Web服务器
drogon::app()
.addListener("0.0.0.0", 8081) // 监听端口
.setThreadNum(4) // 4个工作线程
.setLogLevel(trantor::Logger::kInfo);
// 6. 注册所有路由和中间件
registerRoutes(dbPool, redis, config);
// 7. 启动HTTP服务器
spdlog::info("服务器启动成功,端口: 8081");
drogon::app().run();
return 0;
}
5. 数据库连接池模块 (DBConnectionPool.h)
// DBConnectionPool.h - 数据库连接池实现
namespace dianping {
namespace mapper {
class DBConnectionPool {
private:
std::queue<std::unique_ptr<sql::Connection>> available_;
std::set<sql::Connection*> used_;
std::mutex mutex_;
std::condition_variable condition_;
std::string connectionString_;
std::string user_;
std::string password_;
std::string database_;
int maxConnections_;
public:
// 获取连接 (支持超时等待)
std::unique_ptr<ConnectionWrapper> getConnection(int timeoutMs = 5000);
// 归还连接 (自动调用)
void returnConnection(sql::Connection* conn);
// 连接池状态监控
int getAvailableCount() const;
int getUsedCount() const;
private:
// 创建新连接
sql::Connection* createConnection();
// 维护连接池大小
void maintainPool();
};
6. 每日每人总结
齐思贤
- 今日总结与反馈:
- 完成了用户个人资料模块的开发,包含查询接口、修改功能和收藏系统,实现了完整的用户个人信息管理能力。
阿里亚
- 今日总结与反馈:
- 完成个人资料模块开发,包含查询/修改接口和收藏系统。解决了统计查询性能瓶颈(通过缓存优化),防止了重复收藏(唯一索引+锁机制),确保了数据一致性(事务+异步更新)。
林旭坚
- 今日总结与反馈:
- 已实现商户详情查询接口,返回完整信息并集成Redis ZSET维护动态平均评分,确保高性能读取。商户标签管理系统支持增删去重,接口测试覆盖已审核、未审核及不存在等全部场景,功能稳定可用。
谢嘉骏
- 今日总结与反馈:
- 已实现商户点评列表查询接口,支持分页及多维度排序,其中“最热”采用like_count+reply_count加权算法。同时开发了点评点赞接口,基于Redis INCR计数并防止重复点赞,完成点赞/取消/重复等多种场景测试,功能完整且性能稳定。
袁镇清
- 今日总结与反馈:
- 协助完成商户点评列表接口:开发了通用分页工具类支持page/size参数,并验证了latest/最热/评分优先三种排序结果的正确性。协助实现点赞接口,基于review_like表与Redis结合的双重校验逻辑防止重复点赞。额外编写了定时落库脚本,确保Redis点赞计数定期同步至数据库。
彭文昊
- 今日总结与反馈:
- 已完成注册功能对接:实现用户注册,成功后自动登录并跳转首页。个人中心UI已完成,包含头像昵称展示、功能入口布局及底部设置。已对接个人资料查询接口,正常展示用户信息,整体流程顺畅。
张嘉铭
- 今日总结与反馈:
- 已对接商户列表接口,支持分类筛选、排序及分页加载。商户详情页UI已完成开发,包含基础信息、标签、图片轮播、评分图表、点评列表、收藏和写点评按钮等功能区域,交互流畅。
浙公网安备 33010602011771号