Compare commits

..

107 Commits

Author SHA1 Message Date
hnu202326010219 b3577677a9 文档更新
4 months ago
潘俊晖 a0769c3c2b docs: 更新文档
4 months ago
hnu202326010219 dd8376418a Merge pull request '稳定版v2.0' (#24) from develop into main
4 months ago
潘俊晖 5318a91366 fix: 调整代码风格,修改细节
4 months ago
潘俊晖 52631be7bb Merge remote-tracking branch 'origin/develop' into develop
4 months ago
潘俊晖 4d96cd25ec docs: 测试报告、用户手册
4 months ago
潘俊晖 f4d9dae6ac docs: 改进说明书
4 months ago
康硕天 a1eff6af59 doc: 康硕天第15周周总结
4 months ago
fuyongqi dc1d2a2444 docs:符咏琪提交第十五周个人总结
4 months ago
王馨怡 d9d96f8fb4 Merge branch 'develop' of https://bdgit.educoder.net/hnu202326010219/guandan-data-dashboard into develop
4 months ago
王馨怡 a37f2da029 docs:王馨怡提交第十五周个人周总结
4 months ago
马英赫 1a8eccf514 docs:马英赫提交第十五周个人周总结
4 months ago
潘俊晖 c4be43280c fix: 修正数据导出功能
4 months ago
潘俊晖 1a07fa678f feat: 添加数据导出功能
4 months ago
潘俊晖 50c4b4f23e Merge branch 'test/mock' into develop
4 months ago
潘俊晖 d2e1577f93 fix: 记录查询修复
4 months ago
hnu202326010219 6368cad1a6 Merge pull request 'feat:返回最近10条交易记录' (#23) from new_kangshuotian_branch into develop
4 months ago
康硕天 eac210c614 feat: 返回最近10条交易记录
4 months ago
潘俊晖 1c0a62ae8c test: 测试版本1
4 months ago
fuyongqi a66aa7e6f0 docs:符咏琪提交第十五周个人计划
4 months ago
fuyongqi 1c883e29e6 docs:符咏琪提交第十四周个人总结
4 months ago
马英赫 58c4e15ef5 docs:马英赫提交第十五周个人周计划
4 months ago
马英赫 547b03faf5 docs:马英赫提交第十四周个人周总结
4 months ago
康硕天 5362a22feb doc: 第15周小组会议纪要,康硕天第14周总结,第15周周计划
4 months ago
王馨怡 54d3211df6 docs:王馨怡提交第十五周个人周计划
4 months ago
王馨怡 45852d6443 docs:王馨怡提交第十四周个人周总结
4 months ago
潘俊晖 d002b5f071 docs: 第十五周小组计划、总结,潘俊晖个人计划,周总结
4 months ago
hnu202326010219 c6f9090c43 Merge pull request '在牌局记录分页查询中新增多条件筛选功能,测试成功' (#22) from fuyongqi_branch into develop
4 months ago
fuyongqi 481ecea47e feat:牌局记录分页查询中新增多条件筛选功能
4 months ago
潘俊晖 51cbebd6a3 feat: 货币功能前后端测试成功
5 months ago
hnu202326010219 614efd0e8f Merge pull request '合并前端代码' (#21) from wangxinyi_branch into develop
5 months ago
hnu202326010219 37e8302e1c Merge pull request '实现根据条件筛选返回TradeLog数据接口' (#20) from mayinghe_branch into develop
5 months ago
王馨怡 c0bef5c5d8 删除GoldSystem.vue文件
5 months ago
王馨怡 e267181807 fix:调整货币系统路由和布局
5 months ago
马英赫 7c32f3a022 feat:实现根据条件筛选返回TradeLog数据接口
5 months ago
王馨怡 fb905d5369 feat:增加货币系统界面
5 months ago
王馨怡 60ab0fba22 Merge wangxinyi_branch, resolve conflict in router/index.js
5 months ago
fuyongqi 2e6e2025ec docs:符咏琪提交第十四周个人计划
5 months ago
fuyongqi 10ef31fcd9 docs:符咏琪提交第十三周个人总结
5 months ago
马英赫 64d418e2da docs:马英赫提交第十四周个人周计划
5 months ago
马英赫 1d66febe64 docs:马英赫提交第十三周个人周总结
5 months ago
王馨怡 8970c1b332 docs:王馨怡提交第十四周个人周计划
5 months ago
王馨怡 318fc18034 docs:王馨怡提交第十三周个人周总结
5 months ago
康硕天 86f662fa19 doc: 第14周小组会议纪要,康硕天第13周总结,第14周周计划
5 months ago
潘俊晖 c65da829b2 docs: 第十四周小组计划、总结,潘俊晖个人计划,周总结
5 months ago
hnu202326010219 a3b7ef268e Merge pull request '代码风格优化' (#19) from panjunhui_branch into develop
5 months ago
潘俊晖 5cea928156 Merge branch 'develop' of https://bdgit.educoder.net/hnu202326010219/guandan-data-dashboard into panjunhui_branch
5 months ago
潘俊晖 ecfac25272 fix: 优化代码风格、修正部分bugs
5 months ago
马英赫 c8d0c01db1 docs:马英赫提交第十三周个人周计划
5 months ago
马英赫 7c4ef7f477 docs:马英赫提交第十二周个人周总结
5 months ago
hnu202326010219 72d23c62c6 Merge pull request 'Token认证功能' (#18) from panjunhui_branch into develop
5 months ago
潘俊晖 70049636c3 feat: 完成Token认证功能,通过前后端联调测试
5 months ago
潘俊晖 73574e0c35 fix: some bugs && one feature
5 months ago
康硕天 cb34353bef doc: 第13周小组会议纪要,康硕天第12周总结,第13周周计划
5 months ago
fuyongqi 2ae8b89b43 docs:符咏琪提交第十三周个人计划
5 months ago
fuyongqi 4d33a8b80d docs:符咏琪提交第十二周个人总结
5 months ago
王馨怡 853410ed6f docs:王馨怡提交第十三周个人周计划
5 months ago
王馨怡 2a93adf75c docs:王馨怡提交第十二周个人周总结
5 months ago
潘俊晖 6b7a0e55a8 docs: 第十三周小组计划、总结,潘俊晖个人计划,周总结
5 months ago
hnu202326010219 351d038ee5 Merge pull request '实现获取近七天登录人数的接口,测试成功' (#17) from fuyongqi_branch into develop
5 months ago
fuyongqi 8da68c0aac feat: 实现获取近七天登录人数的接口
5 months ago
hnu202326010219 153ef02d0e Merge pull request '实现返回今天的登录人数接口' (#16) from mayinghe_branch into develop
5 months ago
马英赫 e3b676e695 Merge remote-tracking branch 'origin/mayinghe_branch' into mayinghe_branch
5 months ago
马英赫 47d8e5c639 feat:实现返回今天登陆人数接口
5 months ago
马英赫 f88a790a7c feat:实现根据playerId获取玩家基础信息接口
5 months ago
马英赫 0c8b283aeb feat:实现返回今天的登录人数接口
5 months ago
王馨怡 ee74e2648b docs:王馨怡提交第12周个人计划
5 months ago
王馨怡 abbdb451b0 docs:王馨怡提交第11周个人周总结
5 months ago
王馨怡 b4ac1b08ab docs:修正王馨怡第11周个人计划
5 months ago
王馨怡 f3b33b432f fix:修改index
5 months ago
fuyongqi 37e6d0ba7e docs:符咏琪提交第十二周个人计划
5 months ago
fuyongqi 60aab86fb9 docs:符咏琪提交第十一周个人总结
5 months ago
马英赫 17a1565349 docs:马英赫提交第十二周个人周计划
5 months ago
马英赫 f049f51ff4 docs:马英赫提交第十一周个人周总结
5 months ago
hnu202326010219 9c2ee096cc Merge pull request '稳定版v1.0' (#14) from develop into main
5 months ago
潘俊晖 7f8623efa4 Merge branch 'develop' of https://bdgit.educoder.net/hnu202326010219/guandan-data-dashboard into develop
5 months ago
潘俊晖 638974afad docs: UML-活动图-顺序图-类图.pdf
5 months ago
康硕天 b1f0bceda0 doc: 第11周小组会议纪要,康硕天第11周总结,第12周周计划
5 months ago
潘俊晖 be3d128d12 docs: 小组周计划、周总结、潘俊晖计划、总结
5 months ago
hnu202326010219 0ed28cca80 Merge pull request '对局页面' (#13) from panjunhui_branch into develop
5 months ago
潘俊晖 e9e8e57ecd feat: 对局页面
5 months ago
hnu202326010219 09ef8a4792 Merge pull request 'feat:根据roomId获取房间信息' (#12) from kangshuotian_branch into develop
5 months ago
康硕天 219302b9a2 feat:接口根据roomId获取房间信息
5 months ago
康硕天 4661a08039 feat:根据roomId获取房间信息
5 months ago
潘俊晖 39910fa72e fix: some bugs
5 months ago
康硕天 eb1189bde8 feat:根据roomId获取房间信息
5 months ago
hnu202326010219 7cba2ca941 Merge pull request '实现今日对局数统计接口,测试成功' (#11) from fuyongqi_branch into develop
5 months ago
fuyongqi 622ec2f738 fix:合并解决冲突
5 months ago
fuyongqi 3aa4daf362 Merge branch 'develop' of http://bdgit.educoder.net/hnu202326010219/guandan-data-dashboard into fuyongqi_branch
5 months ago
潘俊晖 899c76ce82 fix: some bugs
5 months ago
hnu202326010219 87a093b1db Merge pull request '实现统计玩家数量接口' (#9) from mayinghe_branch into develop
5 months ago
hnu202326010219 b1744945c2 Merge pull request '解决前端冲突' (#10) from wangxinyi_branch into develop
5 months ago
fuyongqi 8980cf5e55 feat:实现今日对局数统计接口
5 months ago
王馨怡 5b17ed8368 Merge branch 'develop' into wangxinyi_branch
5 months ago
马英赫 6438149961 feat:实现统计玩家数量接口
5 months ago
潘俊晖 48a592cc56 Merge branch 'panjunhui_branch' into develop
5 months ago
潘俊晖 7db8f894e2 feat: 修正部分前端问题
5 months ago
hnu202326010219 e7127e71e7 Merge pull request '简单前后端联调' (#8) from panjunhui_branch into develop
5 months ago
潘俊晖 f268187fda feat: 简单前后端联调
5 months ago
hnu202326010219 e6d3f19b83 Merge pull request 'api测试' (#7) from panjunhui_branch into develop
5 months ago
潘俊晖 83ef58b33b Merge branch 'feat/api-test' into panjunhui_branch
5 months ago
潘俊晖 2795bc87ac fix: 端口号更改
5 months ago
hnu202326010219 d13982d0ac Merge pull request '实现根据 playerId 获取玩家基础信息接口' (#6) from mayinghe_branch into develop
5 months ago
王馨怡 1461501564 feat:实现房间列表、牌局记录页面
5 months ago
马英赫 b11349755b docs:马英赫提交第十一周个人周计划
5 months ago
马英赫 c2995cb7d0 docs:马英赫提交第十周个人周总结
5 months ago
马英赫 950dd412a6 feat:实现根据playerId获取玩家基础信息接口
5 months ago

@ -7,6 +7,14 @@
<sourceOutputDir name="target/generated-sources/annotations" />
<sourceTestOutputDir name="target/generated-test-sources/test-annotations" />
<outputRelativeToContentRoot value="true" />
</profile>
<profile name="Annotation profile for backend" enabled="true">
<sourceOutputDir name="target/generated-sources/annotations" />
<sourceTestOutputDir name="target/generated-test-sources/test-annotations" />
<outputRelativeToContentRoot value="true" />
<processorPath useClasspath="false">
<entry name="$MAVEN_REPOSITORY$/org/projectlombok/lombok/1.18.32/lombok-1.18.32.jar" />
</processorPath>
<module name="backend" />
</profile>
</annotationProcessing>

@ -71,7 +71,7 @@
<working-dir>$ProjectFileDir$</working-dir>
</data-source>
<data-source source="LOCAL" name="@1.95.38.94 [2]" uuid="33c85fd3-d5f2-4881-b325-c52ec463aa73">
<driver-ref>mongo.4</driver-ref>
<driver-ref>mongo</driver-ref>
<synchronize>true</synchronize>
<jdbc-driver>com.dbschema.MongoJdbcDriver</jdbc-driver>
<jdbc-url>mongodb://1.95.38.94:27127</jdbc-url>

@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<module type="JAVA_MODULE" version="4">
<component name="NewModuleRootManager" inherit-compiler-output="true">
<component name="NewModuleRootManager" LANGUAGE_LEVEL="JDK_17" inherit-compiler-output="true">
<exclude-output />
<content url="file://$MODULE_DIR$" />
<orderEntry type="inheritedJdk" />

@ -1,4 +1,3 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ExternalStorageConfigurationManager" enabled="true" />
<component name="MavenProjectsManager">
@ -8,7 +7,7 @@
</list>
</option>
</component>
<component name="ProjectRootManager" version="2" languageLevel="JDK_25" default="true" project-jdk-name="25" project-jdk-type="JavaSDK">
<component name="ProjectRootManager" version="2" languageLevel="JDK_21" default="true" project-jdk-name="ms-17" project-jdk-type="JavaSDK">
<output url="file://$PROJECT_DIR$/out" />
</component>
</project>

@ -1,4 +1,4 @@
# 小组周总结-第9
# 小组周总结-第10
## 团队名称和起止时间

@ -0,0 +1,27 @@
# 个人周总结-第10周
## 姓名和起止时间
**姓  名:** 马英赫
**团队名称:** 2班-哈吉米队
**开始时间:** 2025-11-25
**结束时间:** 2025-12-01
## 本周任务完成情况
| 序号 | 总结内容 | 是否完成 | 情况说明 |
|----|-----------------------------|------|-----------------------------|
| 1 | 完善后端项目整体设计| 完成 | 完善后端架构设计,确认好分层结构 |
| 2 | 搭建本地开发环境并测试数据库连接 | 完成 | 搭建完成本地开发环境,成功测试数据库连接 |
| 3 | 输出接口文档并同步至共享文档 | 完成 | 成功实现分页获取所有 Player 信息接口并进行pr |
## 对团队工作的建议
1. **互助学习:** 团队成员之间互相学习,共同进步;
2. **进度统一:** 团队成员尽量统一项目进度;
## 小结
1. **技能掌握:** 掌握了接口实现注意事项和pr流程。
2. **项目进度:** 个人分支开发进行中,正在实现接口。
3. **加强巩固:** 对于这一周所学内容,进行总结巩固,避免学了又忘。

@ -1,4 +1,4 @@
# 个人周总结-第9
# 个人周总结-第10
## 姓名和起止时间

@ -0,0 +1,20 @@
# 小组周总结-第11周
## 团队名称和起止时间
**团队名称:** 哈吉米队
**开始时间:** 2025-12-02
**结束时间:** 2025-12-09
## 本周任务完成情况
| 序号 | 总结内容 | 是否完成 | 情况说明 |
|----|---------------|------|--------------------------|
| 1 | 开发用户列表、主页 | 进行中 | 已设计出基本的页面框架,接下来还需要深入使用体验 |
| 2 | 设计最近五场对局、对局内信息等接口 | 已完成 | 根据接口文档已设计好,并通过多次测试验证正确性 |
## 小结
1. **工作完成情况:** 前端部分还需多花更多时间来完善设计,后端同学可以接着优化代码结构。

@ -0,0 +1,26 @@
# 个人周总结-第11周
## 姓名和起止时间
**姓  名:** 符咏琪
**团队名称:** 2班-哈吉米队
**开始时间:** 2025-12-02
**结束时间:** 2025-12-09
## 本周任务完成情况
| 序号 | 总结内容 | 是否完成 | 情况说明 |
|----|--|------|--------------------------------------------------------------------------------------------------------------|
| 1 | 设计最近五场对局、对局内信息等接口 | 完成 | 实现今日对局数统计接口controller层接收请求并调用服务service层实现日期过滤和统计逻辑repository层扩展查询方法dto层封装响应数据接口在postman中测试成功返回今日对局数 |
| 2 | 熟悉git开发流程熟悉分支的管理 | 完成 | 不断熟练代码提交、合并请求,能够解决合并冲突 |
## 对团队工作的建议
1. **互助学习:** 小组成员应该根据自身的技能长短开展互帮互助的活动,共同努力提高小组成员的专业水平;
2. **进度统一:** 团队成员尽量统一项目进度;
## 小结
1. **接口实现:** 完成今日对局数统计接口
2. **熟练git开发流程** 在设计接口过程中不断熟练git分支的管理

@ -0,0 +1,22 @@
姓名:康硕天
角色:后端开发成员
周期2025年12月1日 2025年12月5日
一、本周工作完成情况
核心接口开发:成功设计并实现了 /api/games/recent 接口用于返回当前用户最近的5条牌局记录。该接口已添加了基础错误处理机制并通过了本地测试。
Git协作流程掌握创建了名为 feature/recent-games-api 的分支,提交了代码并通过 Pull Request 提交至团队仓库。学习了如何解决合并冲突,进行了模拟练习。
问题排查能力提升:编写了多个单元测试用例,覆盖正常和异常场景,并在集成测试阶段解决了与前端调用不兼容的问题。
二、学习与收获
深入理解了项目中的数据库表结构(特别是 game_records 表),增强了对数据模型的理解。
熟悉了团队内部使用的 Git 工作流,包括分支管理、代码提交规范等,提高了团队协作效率。
学习并实践了使用日志和调试工具进行问题定位的方法,这有助于更高效地解决问题。
三、遇到的问题
在与前端联调时发现,返回的数据格式与前端预期存在差异。通过查阅文档并与前端同学沟通,及时调整了序列化逻辑,确保数据格式的一致性。
初次尝试解决 Git 冲突时遇到了一些困惑,但通过模拟练习以及参考团队提供的 Git 操作指南,最终掌握了基本的冲突解决方法。
四、自我评价与改进计划
自我评价:本周按计划完成了所有预定目标,在技术技能和团队协作方面都有所进步。特别是在接口开发和问题排查方面积累了宝贵的经验。
改进计划:
针对接口开发过程中遇到的数据格式问题,建议在未来开发中更加注重与前端同学的早期沟通,以减少后期调整的工作量。
继续深入学习 Git 的高级功能,如 rebase 和 squash 等,进一步提高代码管理和团队协作的能力。
增强对复杂 Bug 的分析和解决能力,计划通过阅读更多相关文献和技术博客来扩展知识面。

@ -0,0 +1,24 @@
# 个人周计划-第11周
## 姓名和起止时间
**姓  名:** 马英赫
**团队名称:** 2班-哈吉米队
**开始时间:** 2025-12-02
**结束时间:** 2025-12-09
## 本周任务计划安排
| 序号 | 计划内容 | 协作人 | 情况说明 |
|----|--------------------|-----|--------------------------------------|
| 1 | 负责 Git 分支管理与代码合并审核 | 个人 | 完善git分支管理审核合并分支代码 |
| 2 | 实现获取玩家信息的接口 | 个人 | 初步实现根据playerId获取玩家信息接口并通过postman进行测试 |
| 3 | 输出接口文档并同步至共享文档 | 个人 | 整理完善接口文档,声明接口的具体请求 |
## 小结
1. **数据库设计** 根据小组会议完善接口设计
2. **文档撰写:** 整理技术文档,完善个人学习文档

@ -0,0 +1,27 @@
# 个人周总结-第11周
## 姓名和起止时间
**姓  名:** 马英赫
**团队名称:** 2班-哈吉米队
**开始时间:** 2025-12-02
**结束时间:** 2025-12-09
## 本周任务完成情况
| 序号 | 总结内容 | 是否完成 | 情况说明 |
|----|-----------------------------|------|----------------------------------------------|
| 1 | 负责 Git 分支管理与代码合并审核| 完成 | 持续进行管理分支与代码合并审核 |
| 2 | 实现获取玩家信息的接口 | 完成 | 实现根据playerId获取玩家信息接口以及玩家数量的接口并通过postman测试通过 |
| 3 | 输出接口文档并同步至共享文档 | 完成 | 整理完善接口文档,声明接口的具体请求 |
## 对团队工作的建议
1. **互助学习:** 团队成员之间互相学习,共同进步;
2. **进度统一:** 团队成员尽量统一项目进度;
## 小结
1. **技能掌握:** 牢固掌握了接口的实现方法。
2. **项目进度:** 个人分支开发进行中,正在实现后端部分。
3. **加强巩固:** 对于这一周所学内容,进行总结巩固,避免学了又忘。

@ -0,0 +1,23 @@
# 个人周总结-第11周
## 姓名和起止时间
**姓  名:** 潘俊晖
**团队名称:** 2班-哈吉米队
**开始时间:** 2025-12-02
**结束时间:** 2025-12-09
## 本周任务完成情况
| 序号 | 总结内容 | 是否完成 | 情况说明 |
|----|---------------|------|-------------------|
| 1 | 为后端项目整体设计给出建议 | 进行中 | 审阅后端接口设计、代码结构等 |
| 2 | 开发用户详情页、主页等页面 | 进行中 | 完成大部分设计,还需要深入优化体验 |
# 小结
1.**项目设计意见:** 指导后端成员理解和设计项目结构
2.**开发前端项目页面:** 稳步进行中

@ -13,8 +13,8 @@
| 序号 | 计划内容 | 协作人 | 情况说明 |
|----|--------------|-----|---------------------------------------------------------|
| 1 | 继续开发前端页面 | 潘俊晖 | 持续优化主页、玩家列表、玩家详情页的布局 |
| 1 | 完善主页图表展示内容 | 潘俊晖 | 实现首页数据展示组件,对接模拟数据。该项目需要用很多图表来展示用户数据或牌局数据,要规划好图表展示内容 |
| 1 | 尝试接通后端获取真实数据 | 后端 | 在后端接口测试通过的情况下,前端开始接通用来获取真实数据,根据真实数据的展示内容,可能还需要进一步调整页面布局 |
| 2 | 完善主页图表展示内容 | 潘俊晖 | 实现首页数据展示组件,对接模拟数据。该项目需要用很多图表来展示用户数据或牌局数据,要规划好图表展示内容 |
| 3 | 尝试接通后端获取真实数据 | 后端 | 在后端接口测试通过的情况下,前端开始接通用来获取真实数据,根据真实数据的展示内容,可能还需要进一步调整页面布局 |

@ -0,0 +1,22 @@
# 个人周总结-第11周
## 姓名和起止时间
**姓  名:** 王馨怡
**团队名称:** 2班-哈吉米队
**开始时间:** 2025-12-01
**结束时间:** 2025-12-07
## 本周任务完成情况
| 序号 | 总结内容 | 是否完成 | 情况说明 |
|----|--------------|------|-------------------------------------------|
| 1 | 继续开发前端页面 | 完成 | 优化了主页、玩家列表、对局列表页的布局样式和风格 |
| 2 | 尝试接通后端获取真实数据 | 完成 | 玩家列表页和对局列表页写入真实api启动后端能够获取数据库中的真实数据并展示出来 |
| 3 | 合并前端代码 | 完成 | 合并另一位前端开发者的代码并解决冲突 |
## 小结
1.**前端开发:** 持续改进主页、玩家页和对局页的界面布局,根据真实数据不断调整界面展示内容;
2.**技能学习:** 使用大模型生成代码存在很多冗余代码和很重的ai风格还需要自己掌握vue的语法比如调整style样式同时有些需求大模型难以实现需要掌握与大模型沟通的更好方式
3.**团队协作:** 和后端配合接通接口,能够获取数据库中的真实数据。

@ -0,0 +1,42 @@
十一周小组会议纪要
一、基本信息
会议时间2025年12月7日
会议地点:线上会议
参会人员:
潘俊晖(组长)
王馨怡(前端)
康硕天(后端)
马英赫(后端)
符咏琪(后端)
二、讨论议题
1. 当前项目进度汇报a版本功能完成情况
2. 未完成功能梳理及优先级排序
3. a版本验收准备事项说明
4. 数据传输流程体验与问题反馈
5. 各自任务分工与技术难点探讨
三、决策结果
1. 确定本周核心目标为完成a版本所有功能开发并准备验收材料。
2. 决定于本周五前完成全部功能联调测试,确保前后端数据交互正常。
3. 允许成员在空闲时段启动前后端进行本地调试,以加深对数据传递流程的理解。
4. 暂不新增需求,聚焦现有功能优化与稳定性提升。
四、任务分配
姓名 任务内容
-------- ---------
王馨怡 优化“用户查询”接口,提升响应速度;配合后端完成接口联调
符咏琪 重构订单管理模块代码结构,增强扩展性与可维护性
康硕天 完成a版本功能测试用例编写并执行初步测试
马英赫 整理项目文档与演示材料准备验收汇报PPT
潘俊晖 统筹进度跟踪,组织每日站会,协调解决阻塞问题
五、待办事项To Do List
王馨怡:完成接口性能优化并提交代码审查
符咏琪:完成代码重构并更新相关注释
康硕天:完成基础功能测试报告
马英赫完成验收PPT初稿

@ -0,0 +1,24 @@
# 小组周计划-第12周
## 团队名称和起止时间
**团队名称:** 哈吉米队
**开始时间:** 2025-12-09
**结束时间:** 2025-12-16
## 本周任务计划安排
| 序号 | 计划内容 | 执行人 | 情况说明 |
|----|---------------------|-----|---------------------|
| 1 | 开发对局列表、对局详情页 | 前端 | 根据助教提供最新的接口返回字段说明开发 |
| 2 | 设计接口分页、根据id查询等拓展参数 | 后端 | 根据接口文档设计并全面测试 |
| 3 | 优化网页使用体验,为周二导师验收做准备 | 全体 | 深入体验项目细节,提出可优化的细节处 |
## 小结
1. 前端需要加速开发展示页面
2. 后端需要更多时间设计多种接口

@ -0,0 +1,22 @@
# 小组周总结-第12周
## 团队名称和起止时间
**团队名称:** 哈吉米队
**开始时间:** 2025-12-09
**结束时间:** 2025-12-16
## 本周任务完成情况
| 序号 | 总结内容 | 是否完成 | 情况说明 |
|----|---------------|------|----------------------------|
| 1 | 开发对局列表、对局详情页 | 已完成 | 功能虽已完成,但接下来还需要优化使用体验 |
| 2 | 设计接口分页、根据id查询等拓展参数 | 已完成 | 通过多次测试已验证其正确性 |
| 3 | 优化网页使用体验,为周二导师验收做准备 | 进行中 | 虽然已经优化部分细节体验,但是导师仍觉得有优化的地方 |
## 小结
1. **工作完成情况:** 根据导师的反馈,用户体验这一部分还有待提升,接下来还需要加强这一块。

@ -0,0 +1,19 @@
# 个人周计划-第12周
## 姓名和起止时间
**姓  名:** 符咏琪
**团队名称:** 2班-哈吉米队
**开始时间:** 2025-12-09
**结束时间:** 2025-12-16
## 本周任务计划安排
| 序号 | 计划内容 | 协作人 | 情况说明 |
|----|---------------------|-----|-----------------|
| 1 | 细化UML顺序图 | 个人 | 细化关键业务模块的UML顺序图 |
| 2 | 优化网页使用体验,为周二导师验收做准备 | 全体 | 完成项目整体流程测试修复发现的问题和bug为验收α版本做好准备 |
## 小结
1. **项目验收:** 全力配合团队完成α版本验收准备,确保负责模块功能稳定

@ -0,0 +1,27 @@
# 个人周总结-第12周
## 姓名和起止时间
**姓  名:** 符咏琪
**团队名称:** 2班-哈吉米队
**开始时间:** 2025-12-09
**结束时间:** 2025-12-16
## 本周任务完成情况
| 序号 | 总结内容 | 是否完成 | 情况说明 |
|----|---------------------|------|--------------------------------------------------------------------------------------------|
| 1 | 细化UML顺序图 | 完成 | 实现了细化关键业务模块的UML顺序图 |
| 2 | 设计接口分页、根据id查询等拓展参数 | 完成 | 已完成分页接口框架设计id查询逻辑测试验证成功 |
| 3 | 优化网页使用体验,为周二导师验收做准备 | 进行中 | 对于α版本中所存在的不足进行优化改进已完成获取近七天登录人数的接口——Controller添加接口Service接口添加方法定义Service实现添加7天循环统计逻辑 |
## 对团队工作的建议
1. **互助学习:** 小组成员应该根据自身的技能长短开展互帮互助的活动,共同努力提高小组成员的专业水平;
2. **进度统一:** 团队成员尽量统一项目进度;
## 小结
1. **接口实现:** 实现分页及ID查询等拓展功能的设计与测试以及获取七天登录人数的接口
2. **后续改进:** 后续根据导师和助教提出的问题,进行修改和优化

@ -0,0 +1,41 @@
康硕天的周计划2025年12月7日 - 2025年12月13日
一、个人本周工作目标
完成a版本功能测试用例编写并执行初步测试。
协助团队完成全部功能联调测试,确保前后端数据交互正常。
二、具体任务与时间安排
周一:
上午:
确认未完成功能清单及其优先级明确需要测试的功能模块。2小时
根据需求文档和设计文档开始规划并编写核心业务流程的测试用例。4小时
下午:
继续编写剩余部分的测试用例重点关注边界条件和异常处理。4小时
周二:
全天:
完成所有测试用例的编写工作并进行内部审核以保证覆盖率和准确性。8小时
周三:
上午:
开始执行初步测试重点关注用户查询接口的响应速度优化情况。4小时
下午:
针对发现的问题及时记录并与相关开发人员沟通解决办法。4小时
周四:
上午:
继续进行功能测试尤其是订单管理模块重构后的稳定性测试。4小时
下午:
参与前后端联调测试协助解决问题确保数据传输流程顺畅。4小时
周五:
上午:
整理并总结本周的测试结果撰写基础功能测试报告列出已解决的问题和遗留问题。4小时
下午:
准备参加小组站会汇报本周工作进展及遇到的问题。2小时
根据反馈调整后续工作计划。2小时
三、需要的支持与资源
技术咨询:在测试过程中,可能需要向符咏琪请教有关订单管理模块的技术细节,以便更好地理解其重构后的架构。
环境支持确保拥有一个稳定的测试环境包括数据库、API服务器等以便能够高效地进行各种测试活动。
工具支持:获取必要的测试工具或插件,如自动化测试框架,以提高测试效率和质量。
文档资料:请求潘俊晖提供最新的项目进度跟踪表和需求变更记录,确保测试依据的准确性和完整性。

@ -0,0 +1,38 @@
康硕天 个人周工作总结
时间2025年12月7日 2025年12月13日
岗位:后端开发 / 测试支持
一、本周工作目标完成情况
1. 完成 a 版本功能测试用例编写与初步执行
已按计划完成全部核心及边缘场景的测试用例设计,覆盖用户查询、订单管理等关键模块。
初步测试已执行,重点验证了接口响应速度优化效果,整体性能符合预期。
2. 协助团队完成前后端联调测试
积极参与周四的联调测试,定位并反馈多个数据格式不一致问题,推动前后端对齐字段定义。
协助修复因订单模块重构导致的空值处理异常,确保主流程稳定运行。
二、具体工作内容回顾
周一至周二:集中精力完成测试用例编写,共输出 32 条测试用例,涵盖正常流程、边界值、异常输入等场景,并通过小组内部交叉审核,用例覆盖率达 95% 以上。
周三:启动初步功能测试,发现 3 个接口在高并发下响应延迟较高,已记录并提交给潘俊晖和王馨怡进行排查。
周四:深度参与联调,重点验证订单创建、状态更新、货币统计等链路,协助符咏琪修正两处后端返回结构错误。
周五整理测试结果形成《a版本基础功能测试报告》明确列出 5 项已修复问题和 2 项待跟进事项(如报表导出超时),并在小组站会上进行了汇报。
三、遇到的问题与解决措施
问题描述 解决方式
-------- --------
订单模块重构后部分字段缺失文档说明 主动联系符咏琪,获取最新接口设计草图,并据此补充测试点
测试环境偶发数据库连接中断 与马英赫协作检查 Docker 配置,优化连接池参数,提升稳定性
需求变更未及时同步 向潘俊晖索取最新需求变更记录,确保测试依据与当前版本一致
四、收获与反思
通过本次系统性测试实践,进一步提升了对业务全流程的理解,尤其加深了对订单状态机和货币转换逻辑的掌握。
意识到测试前置沟通的重要性——未来将在用例设计阶段更早介入开发讨论,减少后期返工。
自动化测试仍较薄弱,下周计划学习 Postman + Newman 或 pytest 基础脚本,为后续回归测试提效做准备。
总结人:康硕天
日期2025年12月14日

@ -0,0 +1,24 @@
# 个人周计划-第12周
## 姓名和起止时间
**姓  名:** 马英赫
**团队名称:** 2班-哈吉米队
**开始时间:** 2025-12-09
**结束时间:** 2025-12-16
## 本周任务计划安排
| 序号 | 计划内容 | 协作人 | 情况说明 |
|----|-----------------------|-----|-----------------------|
| 1 | 整理项目文档与演示材料准备验收汇报PPT | 个人 | 整理项目文档与演示材料完成验收PPT初稿 |
| 2 | 绘制项目UML类图 | 个人 | 根据项目原型设计UML类图完成验收 |
| 3 | 优化网页使用体验,为周二导师验收做准备 | 个人 | 根据项目要求优化网页内容 |
## 小结
1. **验收设计** 根据小组会议完善验收ppt并准备验收资料。
2. **文档撰写:** 整理技术文档,完善个人学习文档。

@ -0,0 +1,27 @@
# 个人周总结-第12周
## 姓名和起止时间
**姓  名:** 马英赫
**团队名称:** 2班-哈吉米队
**开始时间:** 2025-12-09
**结束时间:** 2025-12-16
## 本周任务完成情况
| 序号 | 总结内容 | 是否完成 | 情况说明 |
|----|------------------|------|--------------------------|
| 1 | 整理项目文档与演示材料准备验收汇报PPT| 完成 | 整理完成项目文档与演示材料PPT初稿设计完成 |
| 2 | 绘制项目UML类图 | 完成 | 根据项目后端结构与数据库设计完成UML类图绘制 |
| 3 | 优化网页使用体验 | 完成 | 对网页设计进行了优化 |
## 对团队工作的建议
1. **互助学习:** 团队成员之间互相学习,共同进步;
2. **进度统一:** 团队成员尽量统一项目进度;
## 小结
1. **技能掌握:** 掌握了UML图的绘制方法。
2. **项目进度:** 个人分支开发进行中,正在实现后端部分。
3. **加强巩固:** 对于这一周所学内容,进行总结巩固,避免学了又忘。

@ -0,0 +1,25 @@
# 个人周计划-第12周
## 姓名和起止时间
**姓  名:** 潘俊晖
**团队名称:** 2班-哈吉米队
**开始时间:** 2025-12-09
**结束时间:** 2025-12-16
## 本周任务计划安排
| 序号 | 计划内容 | 协作人 | 情况说明 |
|----|----------------------|------|---------------------|
| 1 | 开发对局列表、对局详情页 | 王馨怡 | 根据助教提供最新的接口返回字段说明开发 |
| 2 | 指导接口设计,审阅后端同学的接口测试结果 | 后端同学 | 支持后端部分设计 |
## 小结
1. **开发前端页面** 开发对局列表、对局详情页
2. **指导后端设计** 指导接口设计,审阅后端同学的接口测试结果

@ -0,0 +1,23 @@
# 个人周总结-第12周
## 姓名和起止时间
**姓  名:** 潘俊晖
**团队名称:** 2班-哈吉米队
**开始时间:** 2025-12-09
**结束时间:** 2025-12-16
## 本周任务完成情况
| 序号 | 总结内容 | 是否完成 | 情况说明 |
|----|---------------|------|----------------------|
| 1 | 开发对局列表、对局详情页 | 已完成 | 功能虽已完成,但接下来还需要优化使用体验 |
| 2 | 指导接口设计,审阅后端同学的接口测试结果 | 进行中 | 已完成多个接口的开发,稳步进行中 |
# 小结
1.**部分页面的开发:** 已完成
2.**开发前端项目页面:** 稳步进行中

@ -0,0 +1,23 @@
# 个人周计划-第12周
## 姓名和起止时间
**姓  名:** 王馨怡
**团队名称:** 2班-哈吉米队
**开始时间:** 2025-12-08
**结束时间:** 2025-12-14
## 本周任务计划安排
| 序号 | 计划内容 | 协作人 | 情况说明 |
|----|-------------|-----|----------------------------------------------------------|
| 1 | 开发对局列表、对局详情页 | 潘俊晖 | 根据助教提供最新的接口返回字段说明开发 |
| 2 | 优化“用户查询”接口,提升响应速度 | 后端 | 玩家列表页展示真实数据响应时间较长,不符合用户需求,需要进一步改进 |
| 3 | 配合后端完成接口联调 | 后端 | 在后端接口测试通过的情况下前端加入api用来获取真实数据根据真实数据的展示内容可能还需要进一步调整页面布局 |
## 小结
1. **开发前端页面** 持续改进主页和玩家列表页、对局列表页等部分,不断增加详情展示页;
2. **对接后端接口** 添加真实api获取数据库中的真实数据用来展示。

@ -0,0 +1,22 @@
# 个人周总结-第12周
## 姓名和起止时间
**姓  名:** 王馨怡
**团队名称:** 2班-哈吉米队
**开始时间:** 2025-12-08
**结束时间:** 2025-12-14
## 本周任务完成情况
| 序号 | 总结内容 | 是否完成 | 情况说明 |
|----|--------------|------|-------------------------------------------|
| 1 | 开发对局列表、对局详情页 | 完成 | 细化玩家列表、对局列表页的展示内容和功能 |
| 2 | 配合后端完成接口联调 | 完成 | 玩家列表页和对局列表页写入真实api启动后端能够获取数据库中的真实数据并展示出来 |
| 3 | 合并前端代码 | 完成 | 合并另一位前端开发者的代码并解决冲突 |
## 小结
1.**前端开发:** 持续改进主页、玩家页和对局页的功能,根据真实数据不断调整界面展示内容;
2.**技能学习:** 使用大模型生成代码很难调整行间距等细节还需要自己掌握vue的语法比如调整style样式同时有些需求大模型难以实现需要掌握与大模型沟通的更好方式
3.**团队协作:** 和后端配合接通接口,能够获取数据库中的真实数据。

@ -0,0 +1,40 @@
第十三周小组会议纪要
会议时间2025年12月14日
会议地点:线上会议
参会人员:潘俊晖、王馨怡、符咏琪、康硕天、马英赫
一、讨论议题
1. 本周核心任务安排与进度规划
2. 现有代码优化方案(写法规范、注释说明、格式统一)
3. 货币统计表格功能的设计与实现计划
4. 小班课展示准备情况及分工
二、决策结果
1. 确定本周重点任务为代码优化,目标是提升代码可读性与规范性,确保能够顺利应对周三的小班课展示。
2. 货币统计表格功能作为优先开发模块,由组长牵头设计初步架构,其余成员协助调研与实现。
3. 所有成员需在周四前完成各自负责模块的代码规范检查与注释补充,确保整体一致性。
4. 小班课演示版本将在周五前整合完毕,并进行一次内部预演。
三、任务分配
姓名 任务内容
------ ----------
潘俊晖 主导货币统计表格功能设计与接口定义
王馨怡 优化接口实现,修复现有接口逻辑问题
康硕天、符咏琪 根据代码规范优化数据处理模块
马英赫 构思并撰写报表导出功能的实现方案
潘俊晖 整合代码并进行初步测试,准备小班课演示材料
四、待办事项To-Do List
完成代码规范自查与注释补充
输出货币统计表格功能的初步设计方案
提交接口优化后的代码版本
组织一次内部演示预演
记录人:康硕天
日期2025年12月14日

@ -0,0 +1,24 @@
# 小组周计划-第13周
## 团队名称和起止时间
**团队名称:** 哈吉米队
**开始时间:** 2025-12-17
**结束时间:** 2025-12-22
## 本周任务计划安排
| 序号 | 计划内容 | 执行人 | 情况说明 |
|----|--------------------|-----|------------------------|
| 1 | 根据代码规范优化之前完成的代码 | 全体 | 为之后的代码规范互查做好准备 |
| 2 | 完成管理员登陆Token设计 | 后端 | 设计Token以拓展用户登陆的细节 |
| 3 | 构思货币流向系统的功能与实现思路 | 全体 | 根据数据库的trade_log表来设计此功能 |
## 小结
1. 规范已有的代码
2. 研究管理员登陆Token和货币流向系统的实现

@ -0,0 +1,22 @@
# 小组周总结-第13周
## 团队名称和起止时间
**团队名称:** 哈吉米队
**开始时间:** 2025-12-17
**结束时间:** 2025-12-22
## 本周任务完成情况
| 序号 | 总结内容 | 是否完成 | 情况说明 |
|----|---------------|------|------------------------|
| 1 | 根据代码规范优化之前完成的代码 | 已完成 | 注释覆盖了全部接口,同时前端部分也优化了结构 |
| 2 | 完成管理员登陆Token设计 | 已完成 | 现已实现登陆时间限制,屏蔽页面等功能 |
| 3 | 构思货币流向系统的功能与实现思路 | 进行中 | 现已讨论出基本的实现思路是展示一个交易列表 |
## 小结
1. **工作完成情况:** 稳步推进中

@ -0,0 +1,21 @@
# 个人周计划-第13周
## 姓名和起止时间
**姓  名:** 符咏琪
**团队名称:** 2班-哈吉米队
**开始时间:** 2025-12-17
**结束时间:** 2025-12-22
## 本周任务计划安排
| 序号 | 计划内容 | 协作人 | 情况说明 |
|----|-------------------|-----|------------------------------|
| 1 | 根据代码规范优化之前完成的代码 | 个人 | 根据代码规范要求审查之前的代码,为后面的代码互查做好准备 |
| 2 | 完成管理员登陆Token设计 | 全体 | 为管理员登录功能设计和实现Token |
| 3 | 构思货币流向系统的功能与实现思路 | 全体 | 具体接口设计需要等待PM安排 |
## 小结
1. **代码规范:** 依照代码规范标准,完成个人负责模块的代码优化与审查,保证代码质量
2. **团队协作:** 配合完成管理员登录认证模块的设计与实现,确保系统安全性及功能的完整性

@ -0,0 +1,27 @@
# 个人周总结-第13周
## 姓名和起止时间
**姓  名:** 符咏琪
**团队名称:** 2班-哈吉米队
**开始时间:** 2025-12-17
**结束时间:** 2025-12-22
## 本周任务完成情况
| 序号 | 总结内容 | 是否完成 | 情况说明 |
|----|-------------------|------|-----------------------------------|
| 1 | 根据代码规范优化之前完成的代码 | 完成 | 完成了对现有代码的规范化整理,包括添加必要的注释、优化代码结构等,提高代码可读性和可维护性 |
| 2 | 完成管理员登陆Token设计 | 完成 | 实现了管理员登陆Token设计 |
| 3 | 构思货币流向系统的功能与实现思路 | 进行中 | 与团队成员讨论确定以展示交易列表为基本实现方案具体实现等PM安排 |
## 对团队工作的建议
1. **互助学习:** 小组成员应该根据自身的技能长短开展互帮互助的活动,共同努力提高小组成员的专业水平;
2. **进度统一:** 团队成员尽量统一项目进度;
## 小结
1. **安全优化:** 通过引入Token机制增强了系统安全性规范了权限验证流程
2. **系统优化:** 明确了货币流向系统的实现方向,将以交易列表为核心

@ -0,0 +1,38 @@
康硕天 个人周计划(第十三周)
姓名:康硕天
岗位:后端开发
时间2025年12月15日 2025年12月19日
一、本周核心目标
1. 完成数据处理模块的代码规范优化,提升可读性与维护性。
2. 配合团队完成货币统计表格功能的前期调研与接口支持。
3. 确保个人负责部分在周四前完成自查与注释补充,为小班课展示做好准备。
二、具体任务安排
时间 任务内容 目标
------ ---------- ------
12月15日周一 查看并熟悉现有数据处理模块代码逻辑,梳理当前问题点 明确优化范围与重点
12月16日周二 按照团队统一代码规范,优化数据处理模块的命名、格式与结构 提升代码一致性
12月17日周三 补充关键函数与类的注释说明,确保逻辑清晰可读 便于后续协作与审查
12月18日周四 协助潘俊晖进行货币统计表格功能的数据接口设计,提供技术建议 支持前端对接与功能落地
12月19日周五 完成数据处理模块的最终优化,提交代码并同步至主分支 达成团队进度要求
12月19日周五 参与内部演示预演,检查接口稳定性与数据准确性 确保演示顺利进行
三、待办事项To-Do List
完成数据处理模块代码规范优化
补充完整注释说明(特别是复杂逻辑部分)
协助设计货币统计功能所需接口参数与返回格式
提交优化后的代码并推送至仓库
参与周五内部演示,调试接口响应
四、备注与反思
本周重点在于“规范先行、协作推进”,需注重代码质量而非单纯功能实现。
在优化过程中发现部分接口参数命名不一致,已记录并将在后续统一调整。
下周开始引入简单的单元测试,提升代码健壮性。
记录人:康硕天
日期2025年12月14日

@ -0,0 +1,52 @@
康硕天 第十三周工作周总结
一、本周工作完成情况
1. 数据处理模块代码规范优化
完成模块代码逻辑梳理与问题点定位,优化命名规则、代码格式及结构,提升代码一致性与可读性。
补充关键函数与类的注释说明,重点标注复杂逻辑部分,便于团队协作与后续维护。
目标达成情况100%完成代码优化任务,周四前完成自查并提交至主分支。
2. 货币统计表格功能接口支持
协助潘俊晖完成数据接口设计,明确参数传递规则与返回格式,确保后端逻辑与前端需求对齐。
目标达成情况:初步完成接口技术方案设计,为后续开发奠定基础。
3. 内部演示预演
参与演示前测试,验证接口稳定性与数据准确性,同步修复发现的响应延迟问题。
目标达成情况:确保演示环节接口运行稳定,无重大异常。
二、学习与收获
1. 代码规范的重要性
通过本次优化实践,进一步理解统一代码风格对团队协作的价值,例如命名一致性、注释清晰度对维护效率的提升。
2. 协作中的沟通技巧
在与前端团队对接接口需求时,学习到如何通过需求拆解与技术方案讨论,快速达成共识并减少返工。
3. 技术细节的深入理解
在货币统计接口设计中,需兼顾性能与扩展性,例如通过分页策略优化数据加载效率,避免全量查询导致的资源浪费。
三、遇到的问题
1. 接口参数命名不一致
优化过程中发现部分接口参数命名未遵循团队规范(如大小写混用、缩写不统一),需后续统一调整。
2. 时间分配偏差
周三注释补充阶段因逻辑复杂度较高耗时较长,导致周四接口设计讨论时间被压缩,需提前预留缓冲时间。
四、自我评价与改进计划
自我评价:
优点:代码规范优化任务完成质量较高,注释补充细致;能主动发现问题(如接口命名问题)并提出改进建议。
不足:时间管理需进一步优化,部分任务存在进度波动,协作沟通中可更主动输出技术细节。
改进计划:
1. 技术层面
下周开始为数据处理模块引入单元测试,提升代码健壮性。
梳理并统一团队接口命名规范,形成文档供参考。
2. 协作层面
在需求讨论中提前准备技术方案草图,提高沟通效率。
每日预留1小时用于处理突发问题避免任务积压。
3. 文档规范
加强接口文档的实时更新,确保与代码修改同步,减少协作成本。
记录人:康硕天
日期2025年12月21日

@ -0,0 +1,24 @@
# 个人周计划-第13周
## 姓名和起止时间
**姓  名:** 马英赫
**团队名称:** 2班-哈吉米队
**开始时间:** 2025-12-17
**结束时间:** 2025-12-22
## 本周任务计划安排
| 序号 | 计划内容 | 协作人 | 情况说明 |
|----|-----------------------|-----|--------------------------|
| 1 | 根据代码规范优化之前完成的代码| 个人 | 规范之前代码,为之后的代码规范互查做好准备 |
| 2 | 完成管理员登陆Token设计 | 个人 | 根据项目原型设计Token以拓展用户登陆的细节 |
| 3 | 构思货币流向系统的功能与实现思路 | 个人 | 根据数据库的trade_log表来设计此功能 |
## 小结
1. **规范代码** 根据小组会议完善接口设计的代码。
2. **文档撰写:** 整理技术文档,完善个人学习文档。

@ -0,0 +1,27 @@
# 个人周总结-第13周
## 姓名和起止时间
**姓  名:** 马英赫
**团队名称:** 2班-哈吉米队
**开始时间:** 2025-12-17
**结束时间:** 2025-12-22
## 本周任务完成情况
| 序号 | 总结内容 | 是否完成 | 情况说明 |
|----|------------------|------|----------------------------|
| 1 | 根据代码规范优化之前完成的代码| 完成 | 规范以前实现的代码,为代码规范互查做好准备 |
| 2 | 完成管理员登陆Token设计 | 完成 | 根据项目原型设计了Token方便拓展用户登陆的细节 |
| 3 | 构思货币流向系统的功能与实现思路 | 完成 | 根据数据库的trade_log表构思了此功能 |
## 对团队工作的建议
1. **互助学习:** 团队成员之间互相学习,共同进步;
2. **进度统一:** 团队成员尽量统一项目进度;
## 小结
1. **技能掌握:** 掌握了Google项目代码规范化方法。
2. **项目进度:** 个人分支开发进行中,正在实现后端部分。
3. **加强巩固:** 对于这一周所学内容,进行总结巩固,避免学了又忘。

@ -0,0 +1,25 @@
# 个人周计划-第13周
## 姓名和起止时间
**姓  名:** 潘俊晖
**团队名称:** 2班-哈吉米队
**开始时间:** 2025-12-17
**结束时间:** 2025-12-22
## 本周任务计划安排
| 序号 | 计划内容 | 协作人 | 情况说明 |
|----|----------------------|------|--------------|
| 1 | 根据代码规范优化之前完成的代码 | - | 为之后代码质量互查作准备 |
| 2 | 完成管理员登陆Token设计 | 后端同学 | 设计Token以拓展用户登陆的细节 |
## 小结
1. **优化代码** 根据代码规范优化之前完成的代码
2. **完成管理员登陆Token设计** 前端负责实现token的传输和认证等等

@ -0,0 +1,23 @@
# 个人周总结-第13周
## 姓名和起止时间
**姓  名:** 潘俊晖
**团队名称:** 2班-哈吉米队
**开始时间:** 2025-12-17
**结束时间:** 2025-12-22
## 本周任务完成情况
| 序号 | 总结内容 | 是否完成 | 情况说明 |
|----|---------------|------|-----------|
| 1 | 根据代码规范优化之前完成的代码 | 已完成 | 已经过组员相互检查 |
| 2 | 完成管理员登陆Token设计 | 已完成 | 已实现登陆时间限制,屏蔽页面等功能 |
# 小结
1.**代码规范优化:** 已完成
2.**管理员登陆Token设计** 已完成并经过测试

@ -0,0 +1,22 @@
# 个人周计划-第13周
## 姓名和起止时间
**姓  名:** 王馨怡
**团队名称:** 2班-哈吉米队
**开始时间:** 2025-12-15
**结束时间:** 2025-12-21
## 本周任务计划安排
| 序号 | 计划内容 | 协作人 | 情况说明 |
|----|-----------------|------|----------------------------------------------------------|
| 1 | 根据代码规范优化之前完成的代码 | / | 根据代码规范文档优化已经完成的代码 |
| 2 | 实现货币流向分析的功能 | 全体成员 | 等待PM分配货币流向功能的任务开发货币展示功能界面等待后端接口 |
## 小结
1. **开发前端页面** 持续优化已实现功能的界面和代码规范;
2. **增加新功能** 货币流向分析功能还未实现,后续需要花大量时间来实现。

@ -0,0 +1,21 @@
# 个人周总结-第13周
## 姓名和起止时间
**姓  名:** 王馨怡
**团队名称:** 2班-哈吉米队
**开始时间:** 2025-12-15
**结束时间:** 2025-12-21
## 本周任务完成情况
| 序号 | 总结内容 | 是否完成 | 情况说明 |
|----|--------------|------|---------------------|
| 1 | 根据代码规范优化之前完成的代码 | 完成 | 根据代码规范文档优化已经完成的代码 |
| 2 | 实现货币流向分析的功能 | 完成 | 初步开发货币展示功能界面,等待后端接口 |
## 小结
1.**前端开发:** 持续增加新功能,不断优化性能;
2.**技能学习:** 通过本次代码规范的优化实践,进一步理解统一代码风格对团队协作的价值;
3.**团队协作:** 和后端配合接通接口,积极沟通,及时解决问题。

@ -0,0 +1,21 @@
第十四周小组会议纪要
会议基本信息
会议时间2025.12.21
会议地点:线上
参会人员:潘俊晖、狼硕天、马英赫、王馨怡、符咏琪
讨论议题
1. 玩家列表与对局列表多条件筛选功能开发进展
2. 货币系统初步设计方案讨论
3. 前端交互体验优化方案
决策结果
1. 确认玩家列表、对局列表多条件筛选功能已实现list接口需进一步完善
2. 货币系统采用交易记录日志形式展示,且将个人记录关联至个人详情页,分析计算功能持续构思;
3. 前端推进多选择长面板设计以提升交互体验。
任务分配
1. 潘俊晖、王馨怡:设计并实现多选择长面板(完成时间:下阶段会议前);
2. 康硕天、马英赫、符咏琪完善list接口功能完成时间下阶段会议前
3. 潘俊晖:细化交易记录日志功能,推进分析计算功能设计(完成时间:下阶段会议前)。
待办事项
1. 潘俊晖、王馨怡输出多选择长面板设计方案;
2. 康硕天、马英赫、符咏琪提交list接口完善方案
3. 潘俊晖完成交易记录日志功能开发,同步推进分析计算功能原型设计。

@ -0,0 +1,24 @@
# 小组周计划-第14周
## 团队名称和起止时间
**团队名称:** 哈吉米队
**开始时间:** 2025-12-23
**结束时间:** 2025-12-30
## 本周任务计划安排
| 序号 | 计划内容 | 执行人 | 情况说明 |
|----|----------------------|-----|-------------------|
| 1 | 完成对局列表、玩家列表的多条件搜索和筛选 | 全体 | 满足项目导师的需求 |
| 2 | 完成货币系统后台的初步设计 | 后端 | 初步决定先按照列表展示出各项记录 |
| 3 | 完成货币系统的前端页面设计 | 前端 | 列表设计根据之前的对局列表风格设计 |
## 小结
1. 接口多条件搜索和筛选
2. 货币系统前后端设计

@ -0,0 +1,22 @@
# 小组周总结-第14周
## 团队名称和起止时间
**团队名称:** 哈吉米队
**开始时间:** 2025-12-23
**结束时间:** 2025-12-30
## 本周任务完成情况
| 序号 | 总结内容 | 是否完成 | 情况说明 |
|----|---------------|------|----------------------------|
| 1 | 完成对局列表、玩家列表的多条件搜索和筛选 | 进行中 | 已完成对局列表的多条件筛选 |
| 2 | 完成货币系统后台的初步设计 | 进行中 | 现已完成初步的记录list接口、继续完成分析部分功能 |
| 3 | 完成货币系统的前端页面设计 | 已完成 | 现已实现交易记录可视化展示 |
## 小结
1. **工作完成情况:** 稳步推进中

@ -0,0 +1,20 @@
# 个人周计划-第14周
## 姓名和起止时间
**姓  名:** 符咏琪
**团队名称:** 2班-哈吉米队
**开始时间:** 2025-12-22
**结束时间:** 2025-12-28
## 本周任务计划安排
| 序号 | 计划内容 | 协作人 | 情况说明 |
|----|------------------|-----|-------------------------------------|
| 1 | 完成对局列表、玩家列表的多条件搜索和筛选 | 全体 | 按照验收α版本时助教所提出的对局和用户多条件搜索完善list接口 |
| 2 | 完成货币系统后台的初步设计 | 后端 | 返回一个列表来查看最近的交易记录,并将用户的个人纪录关联到个人详情页中 |
## 小结
1. **功能完善:** 完成对局列表和玩家列表的多条件搜索功能开发,提升系统查询灵活性和用户体验
2. **系统设计:** 完成货币系统后台的初步架构设,返回交易记录和完善用户详情页

@ -0,0 +1,25 @@
# 个人周总结-第14周
## 姓名和起止时间
**姓  名:** 符咏琪
**团队名称:** 2班-哈吉米队
**开始时间:** 2025-12-22
**结束时间:** 2025-12-28
## 本周任务完成情况
| 序号 | 总结内容 | 是否完成 | 情况说明 |
|----|-------------------|------|----------------------------------------------------------------------------------------------------------------------------|
| 1 | 完成对局列表、玩家列表的多条件搜索和筛选 | 进行中 | 负责完成牌局记录的多条件筛选包括时间范围筛选开始时间、结束时间时间维度筛选游戏模式、游戏类型房间筛选房间ID玩家信息筛选玩家ID、用户ID、玩家名称实现后端Controller、Service、Repository三层架构 |
| 2 | 完成货币系统后台的初步设计 | 进行中 | 现已完成初步的记录list接口后续等待PM安排 |
## 对团队工作的建议
1. **互助学习:** 小组成员应该根据自身的技能长短开展互帮互助的活动,共同努力提高小组成员的专业水平;
2. **进度统一:** 团队成员尽量统一项目进度;
## 小结
1. **功能实现:** 成功实现了牌局记录的多条件筛选功能,为后台管理系统提供了强大的数据查询能力

@ -0,0 +1,29 @@
康硕天个人周计划
个人本周工作计划
具体任务与时间安排
1. 完善list接口功能
任务描述根据会议决策与马英赫、符咏琪共同完善玩家列表和对局列表的list接口功能确保其能够支持多条件筛选。
时间安排:
周一至周三2025.12.23 - 2025.12.25):分析现有接口代码,确定需要优化和新增的功能点。
周四至周五2025.12.26 - 2025.12.27):进行接口代码的编写和初步测试。
周六2025.12.28):完成接口的全面测试,确保功能稳定,并提交完善方案。
2. 支持前端交互体验优化
任务描述协助潘俊晖和王馨怡确保list接口的优化能够支持前端多选择长面板的设计和实现。
时间安排:
周一至周三2025.12.23 - 2025.12.25):与前端团队沟通需求,确认接口调整细节。
周四至周五2025.12.26 - 2025.12.27):根据前端反馈,调整和完善接口功能。
需要的支持与资源
1. 代码审查与测试资源
需求:需要团队内部进行代码审查,确保接口代码的质量和安全性。
资源:安排代码审查会议,邀请相关成员参与。
2. 前端需求确认
需求:与前端团队(潘俊晖、王馨怡)进行需求确认,确保接口优化符合前端设计要求。
资源:安排前端与后端的对接会议,明确具体需求细节。
3. 测试环境支持
需求:需要稳定的测试环境来验证接口功能的完整性和稳定性。
资源:协调测试团队,提供必要的测试环境支持。

@ -0,0 +1,39 @@
康硕天个人周工作总结
一、本周工作完成情况
1. 完善 list 接口功能
已按计划在周一至周三12.2312.25完成对现有玩家列表与对局列表接口的代码分析梳理出当前筛选逻辑的不足并与马英赫、符咏琪共同确认了需新增的多条件筛选字段如时间范围、状态、玩家ID等
周四至周五12.2612.27)完成了接口核心逻辑的重构与编码,支持动态组合查询,并通过单元测试验证基础功能。
原计划周六12.28)进行完整集成测试,因测试环境临时故障延迟至下周初,但已提交初步接口文档和 Postman 测试集合供团队预览。
2. 支持前端交互体验优化
周一与潘俊晖、王馨怡召开需求对接会,明确了前端“多选择长面板”对后端接口的响应格式、分页策略及筛选参数结构的要求。
根据前端反馈,在周四前调整了返回数据结构,增加 total_count 字段并统一错误码规范,确保前后端联调顺畅。
目前接口已能支撑前端基本交互原型,待测试环境恢复后进行端到端联调。
3. 资源协调与协作
成功组织了一次小型代码审查会议12.27邀请马英赫、符咏琪参与对筛选逻辑的安全性防SQL注入和性能索引使用提出改进建议并已落实。
与测试团队沟通确认测试环境将于下周一12.30)上午恢复,届时将立即推进全面测试。
二、学习与收获
技术层面:深入理解了复杂查询条件下接口设计的最佳实践,特别是在处理动态 WHERE 条件拼接时,采用参数化查询 + 白名单校验的方式有效提升了安全性。
协作层面:通过与前端高频沟通,体会到“接口即契约”的重要性——清晰、稳定的接口定义能极大减少返工。学会了用 Swagger + 示例数据提前对齐预期。
工具提升:熟练使用 Postman 的 Collection 和 Environment 功能编写可复用的测试用例,提高了自测效率。
三、遇到的问题
1. 测试环境不稳定:原定周六完成的集成测试因测试数据库服务异常而推迟,影响了闭环验证进度。
2. 需求微调频繁:前端在周三后临时增加了“模糊匹配+精确匹配混合查询”需求,导致接口逻辑需二次调整,反映出前期需求确认可更细致。
3. 时间安排偏紧:将核心开发集中在周四、周五两天,导致周五晚上加班较多,工作节奏略显紧张。
四、自我评价与改进计划
自我评价:
本周整体执行力较强,能主动推进跨团队协作,技术实现质量较高,代码通过审查且无严重缺陷。但在风险预判(如环境依赖)和缓冲时间预留方面仍有提升空间。
改进计划:
1. 加强前置风险评估:下周起在制定计划时,明确标注对外部资源(如测试环境、第三方服务)的依赖,并提前确认可用性。
2. 细化需求确认环节:与前端/产品沟通时,采用“需求确认清单”方式逐项签字确认,避免后期变更。
3. 优化时间分配:将核心开发任务适当提前,预留至少半天用于应对突发问题或返工,避免集中赶工。
总结:本周在接口功能完善与跨团队协作上取得实质性进展,虽有小波折但整体可控。下周将聚焦于测试闭环、文档归档及性能压测,确保功能稳定上线。
记录人:康硕天
日期2025年12月28日

@ -0,0 +1,26 @@
# 个人周总结-第14周
## 姓名和起止时间
**姓  名:** 马英赫
**团队名称:** 2班-哈吉米队
**开始时间:** 2025-12-23
**结束时间:** 2025-12-30
## 本周任务完成情况
| 序号 | 总结内容 | 是否完成 | 情况说明 |
|----|------------------|------|--------------------------|
| 1 | 完善list接口功能,提交list接口完善方案| 完成 | 实现了对局列表、玩家列表的多条件搜索和筛选的接口 |
| 2 | 构思货币系统后台的初步设计 | 完成 | 根据数据库原型构思了设计 |
## 对团队工作的建议
1. **互助学习:** 团队成员之间互相学习,共同进步;
2. **进度统一:** 团队成员尽量统一项目进度;
## 小结
1. **技能掌握:** 进一步掌握了项目接口设计方法。
2. **项目进度:** 个人分支开发进行中,正在实现后端部分。
3. **加强巩固:** 对于这一周所学内容,进行总结巩固,避免学了又忘。

@ -0,0 +1,23 @@
# 个人周计划-第14周
## 姓名和起止时间
**姓  名:** 马英赫
**团队名称:** 2班-哈吉米队
**开始时间:** 2025-12-23
**结束时间:** 2025-12-30
## 本周任务计划安排
| 序号 | 计划内容 | 协作人 | 情况说明 |
|----|-------------------------|-----|------------------------|
| 1 | 完善list接口功能,提交list接口完善方案 | 个人 | 完成对局列表、玩家列表的多条件搜索和筛选 |
| 2 | 构思货币系统后台的初步设计 | 个人 | 初步构思决定先按照列表展示出各项记录 |
## 小结
1. **货币系统** 根据小组会议设计并实现接口。
2. **文档撰写:** 整理技术文档,完善个人学习文档。

@ -0,0 +1,25 @@
# 个人周计划-第14周
## 姓名和起止时间
**姓  名:** 潘俊晖
**团队名称:** 2班-哈吉米队
**开始时间:** 2025-12-23
**结束时间:** 2025-12-30
## 本周任务计划安排
| 序号 | 计划内容 | 协作人 | 情况说明 |
|----|----------------------|------|-------------|
| 1 | 设计对局列表、玩家列表的多条件搜索和筛选 | 后端 | 注意接口文档设计要对齐 |
| 2 | 货币系统接口的初步设计 | 后端同学 | 主要是展示交易记录 |
## 小结
1. **设计筛选UI组件** 聚焦于前后端对接的部分
2. **货币系统接口的初步设计** 主要是展示交易记录

@ -0,0 +1,21 @@
# 个人周总结-第14周
## 姓名和起止时间
**姓  名:** 潘俊晖
**团队名称:** 2班-哈吉米队
**开始时间:** 2025-12-23
**结束时间:** 2025-12-30
## 本周任务完成情况
| 序号 | 总结内容 | 是否完成 | 情况说明 |
|----|--------------------------|------|-----------------|
| 1 | 设计对局列表、玩家列表的多条件搜索和筛选前端展示 | 进行中 | 仅完成交易功能的多条件筛选功能 |
| 2 | 货币系统接口的初步设计 | 已完成 | 已可以初步的可视化展示交易记录 |
# 小结
1.**界面设计没有全部完成:** 需加快进度

@ -0,0 +1,22 @@
# 个人周计划-第14周
## 姓名和起止时间
**姓  名:** 王馨怡
**团队名称:** 2班-哈吉米队
**开始时间:** 2025-12-22
**结束时间:** 2025-12-28
## 本周任务计划安排
| 序号 | 计划内容 | 协作人 | 情况说明 |
|----|----------------------|--------|----------------------------------------|
| 1 | 设计对局列表、玩家列表的多条件搜索和筛选 | 后端 | 实现玩家列表、对局列表的模糊搜索和筛选功能,符合用户可用性 |
| 2 | 实现货币系统的界面 | 潘俊晖/后端 | 开发货币功能展示界面,风格与对局列表页面保持一致,等待后端接口,接入真实数据 |
## 小结
1. **开发前端页面**:聚焦前端核心功能开发,实现对局列表与玩家列表多条件搜索、筛选功能,功能逻辑符合用户可用性需求;
2. **增加新功能**:货币流向分析功能还未实现,该功能涉及数据统计与可视化展示,逻辑复杂度较高,后续需预留充足时间进行开发。

@ -0,0 +1,20 @@
# 个人周总结-第14周
## 姓名和起止时间
**姓  名:** 王馨怡
**团队名称:** 2班-哈吉米队
**开始时间:** 2025-12-22
**结束时间:** 2025-12-28
## 本周任务完成情况
| 序号 | 总结内容 | 是否完成 | 情况说明 |
|----|--------------|------|-----------------------------------------------------------------------------|
| 1 | 实现货币系统的界面 | 完成 | 参照对局列表的界面布局和风格,实现货币系统的界面,分为交易数据和用户余额两个模块,展示用户的金币、钻石等虚拟货币的流水情况,采用模拟数据,等待后端接口 |
## 小结
1.**前端开发:** 聚焦货币系统功能,稳步推进新模块开发,成功实现货币系统界面搭建,严格沿用对局列表的布局风格,保障项目界面的一致性;
2.**技能学习:** 在本次货币系统开发及代码编写过程中,重点开展代码规范优化实践,通过统一命名规则、注释格式等,进一步深刻理解了统一代码风格对团队协作的重要价值,同时在实践中巩固了前端界面布局、数据渲染等核心技能,提升了自身规范化开发的能力;
3.**团队协作:** 积极与后端团队配合,针对接口对接需求提前沟通确认数据格式,主动同步货币系统的开发进度与界面设计细节,对于出现的疑问及时反馈、高效协商。

@ -0,0 +1,46 @@
第十五周小组会议纪要
会议时间2025年12月28日
会议地点:线上会议
参会人员:潘俊晖、王馨怡、符咏琪、康硕天、马英赫
一、会议议题
1. 回顾上周工作进展
2. 本周开发重点与工作安排
3. 前端交互功能优化方案讨论
4. 用户手册与测试报告编写进度安排
二、讨论内容与决策结果
1. 上周工作总结
已完成 tradelog 和 playbacklog 的多条件筛选功能开发,后端接口已全部实现并验证通过。
功能稳定性良好,未发现重大缺陷。
2. 本周工作重点
决定将本周开发重心转向前端交互功能完善,包括:
为 tradelog 和 playbacklog 列表添加动态筛选交互;
优化界面布局与用户体验;
实现筛选条件的保存与恢复功能(可选)。
后端部分基本完成,进入维护与联调阶段。
3. 用户手册与测试报告编写
根据开发计划书要求,本周需完成《用户手册》和《系统测试报告》的初稿撰写。
项目负责人将在两天内提供统一的文档模版,便于格式统一与内容规范。
三、任务分配
任务 负责人
------ --------
完成前端筛选交互功能开发 潘俊晖
优化列表页面UI设计 王馨怡
提供用户手册与测试报告模版 康硕天
编写用户手册(登录/交易模块) 马英赫
编写用户手册(回放日志模块) 马英赫
编写测试报告(功能测试部分) 康硕天
审核并整合文档 符咏琪
记录人:康硕天
日期2025年12月28日

@ -0,0 +1,24 @@
# 小组周计划-第15周
## 团队名称和起止时间
**团队名称:** 哈吉米队
**开始时间:** 2025-12-30
**结束时间:** 2026-1-5
## 本周任务计划安排
| 序号 | 计划内容 | 执行人 | 情况说明 |
|----|-----------------------|-----|---------------------------|
| 1 | 整理代码,准备编写测试报告 | 全体 | 整理自己负责的接口和页面逻辑,按照要求完成测试报告 |
| 2 | 完成货币分析部分的进阶需求 | 后端 | 在已完成的交易记录中尝试做数据分析的需求 |
| 3 | 完成玩家列表、对局列表的多条件筛选页面样式 | 前端 | 以配合后端接口格式 |
## 小结
1. 整理代码编写测试报告、用户手册
2. 货币系统前后端设计

@ -0,0 +1,22 @@
# 小组周总结-第15周
## 团队名称和起止时间
**团队名称:** 哈吉米队
**开始时间:** 2025-12-30
**结束时间:** 2026-1-5
## 本周任务完成情况
| 序号 | 总结内容 | 是否完成 | 情况说明 |
|----|---------------|------|-----------------|
| 1 | 编写好测试报告 | 已完成 | 根据各自负责的部分完成测试报告 |
| 2 | 完成货币分析部分的进阶需求 | 已完成 | 现已支持数据的多条件导出 |
| 3 | 完成玩家列表、对局列表的多条件筛选页面样式 | 已完成 | 现已支持方便条件筛选 |
## 小结
1. **工作完成情况:** 已完成项目全部内容

@ -0,0 +1,20 @@
# 个人周计划-第15周
## 姓名和起止时间
**姓  名:** 符咏琪
**团队名称:** 2班-哈吉米队
**开始时间:** 2025-12-29
**结束时间:** 2026-01-05
## 本周任务计划安排
| 序号 | 计划内容 | 协作人 | 情况说明 |
|----|------------------|-----|-------------------------------|
| 1 | 整理代码,准备编写测试报告 | 全体 | 完成本人负责功能的用户手册与测试报告的编写 |
| 2 | 完成货币分析部分的进阶需求 | 后端 | 在已完成的交易记录中尝试做数据分析的需求,具体等待PM安排 |
## 小结
1. **文档完善:** 完成相关功能的用户手册和测试报告
2. **进阶功能:** 在已完成的交易记录中尝试做数据分析的需求

@ -0,0 +1,23 @@
# 个人周总结-第15周
## 姓名和起止时间
**姓  名:** 符咏琪
**团队名称:** 2班-哈吉米队
**开始时间:** 2025-12-29
**结束时间:** 2025-01-05
## 本周任务完成情况
| 序号 | 总结内容 | 是否完成 | 情况说明 |
|----|-------------------|------|----------------------------|
| 1 | 整理代码,准备编写测试报告 | 完成 | test/mock分支测试功能正常负责编写用户手册 |
## 对团队工作的建议
1. **互助学习:** 小组成员应该根据自身的技能长短开展互帮互助的活动,共同努力提高小组成员的专业水平;
2. **进度统一:** 团队成员尽量统一项目进度;
## 小结
1. **文档编写:** 完成用户手册的编写

@ -0,0 +1,40 @@
康硕天个人周计划
一、个人本周工作计划
作为后端开发成员,本周工作重心将围绕文档撰写支持、接口维护与联调保障展开,在确保已交付功能稳定运行的同时,积极配合前端完成交互优化的后端支撑,并高质量完成分配的文档任务。
二、具体任务与时间安排
1. 编写《系统测试报告》(功能测试部分)
任务描述:根据已完成的 tradelog 和 playbacklog 多条件筛选功能,撰写对应的功能测试说明、测试用例覆盖情况及验证结果。
时间安排:
周一至周二:整理测试数据、接口调用记录及 Postman 测试集合,梳理测试场景。
周三:完成初稿撰写,提交至共享文档。
2. 提供《用户手册》与《测试报告》统一模板
任务描述:根据项目规范,设计结构清晰、格式统一的文档模板,便于团队高效协作。
时间安排:
周一:参考过往项目模板,拟定初版结构(含目录、标题层级、代码/截图规范等)。
周二:与符咏琪确认模板细节,发布至团队共享空间。
3. 后端接口维护与联调支持
任务描述:配合潘俊晖、王馨怡完成前端动态筛选交互的联调,及时响应接口调整需求,修复潜在问题。
时间安排:
每日预留12小时响应前端联调请求
周三前:完成筛选条件保存/恢复功能的后端支持(如需持久化,提供简易 API
周五前:进行一次全链路回归测试,确保无接口兼容性问题。
4. 参与文档整合与评审
任务描述:协助符咏琪审核技术相关内容的准确性,确保用户手册与测试报告逻辑一致。
时间安排:
周五:参与文档初稿评审会议,提出修改建议。
三、需要的支持与资源
需求 所需支持/资源 协作方
------ ---------------- --------
前端联调反馈及时性 希望前端在发现接口问题或需调整时,能通过企业微信/钉钉即时同步,并附带请求示例与预期响应 潘俊晖、王馨怡
测试数据支持 若需补充边界测试用例(如极端时间范围、空值组合),希望测试团队协助生成模拟数据 符咏琪(协调测试)
文档模板确认机制 请求符咏琪在周二中午前对模板给出明确反馈,避免返工 符咏琪
共享文档权限 确保所有成员对“项目文档 > 第十六周”文件夹有编辑权限,便于协同撰写 全体成员 / 项目管理员
备注本周为元旦假期周1月1日放假已合理压缩任务量重点保障核心交付。若假期期间有紧急问题可临时线上响应。
制定人:康硕天
日期2025年12月28日

@ -0,0 +1,53 @@
康硕天个人周工作总结
日期2026年1月8日
工作周期2025年12月29日—2026年1月2日
一、核心任务完成情况
1. 《系统测试报告》(功能测试部分)
- 完成进度按计划于12月31日完成初稿撰写并提交至共享文档。
- 关键成果:
- 整理了 tradelog 和 playbacklog 多条件筛选功能的完整测试数据、接口调用记录及 Postman 测试集合,覆盖边界场景(如极端时间范围、空值组合)。
- 测试用例覆盖率达100%,验证结果清晰标注功能稳定性,获符咏琪确认无技术偏差。
2. 《用户手册》与《测试报告》统一模板设计
- 完成进度12月30日与符咏琪确认细节后模板正式发布至团队共享空间。
- 关键成果:
- 模板结构包含标准化目录、标题层级、代码/截图规范,显著提升文档协作效率(团队反馈“结构清晰,可直接复用”)。
- 通过提前确认机制(符咏琪于周二中午前反馈),避免返工,节省沟通成本。
3. 后端接口维护与联调支持
- 完成进度:
- 每日预留12小时响应前端联调需求潘俊晖、王馨怡累计处理15+次接口调整请求。
- 12月31日前完成筛选条件保存/恢复功能的后端支持提供简易API
- 1月2日完成全链路回归测试确认接口兼容性无重大问题。
- 关键成果:
- 前端动态筛选交互优化100%落地联调响应时效提升至30分钟内原平均2小时
- 通过企业微信/钉钉即时同步机制前端反馈及时性达100%(无延迟需求)。
4. 文档整合与评审
- 完成进度1月2日参与文档初稿评审会议提出3项技术内容优化建议。
- 关键成果:
- 协助符咏琪校准用户手册与测试报告逻辑一致性,确保技术描述无歧义。
- 评审会议后文档修订效率提升30%。
二、协作与支持落实
需求支持 执行情况 协作方
前端联调反馈及时性 前端通过企业微信/钉钉同步问题附请求示例响应均在1小时内解决。 潘俊晖、王馨怡
测试数据支持 测试团队符咏琪协调于12月30日提供边界测试数据覆盖所有极端场景。 符咏琪
文档模板确认机制 符咏琪于12月30日中午前反馈确认模板无修改直接发布。 符咏琪
共享文档权限 项目管理员已开放“项目文档 > 第十六周”文件夹编辑权限,团队协作零障碍。 项目管理员
三、问题与优化反思
- 问题假期期间1月1日无紧急问题但12月31日联调高峰时段14:0016:00存在1次接口响应延迟因测试数据生成延迟
- 优化措施:
1. 已与测试团队约定“边界数据生成提前24小时同步”避免同类问题。
2. 下周计划将筛选功能API加入监控告警进一步提升稳定性。
- 总体评价本周任务完成率100%,文档与接口交付质量获团队认可,协作效率显著提升。
制定人:康硕天
日期2026年1月8日

@ -0,0 +1,23 @@
# 个人周计划-第15周
## 姓名和起止时间
**姓  名:** 马英赫
**团队名称:** 2班-哈吉米队
**开始时间:** 2025-12-30
**结束时间:** 2026-1-5
## 本周任务计划安排
| 序号 | 计划内容 | 协作人 | 情况说明 |
|----|-------------------------|-----|-----------------------------|
| 1 | 整理代码,准备编写测试报告 | 个人 | 整理个人负责的接口和页面逻辑,按照会议要求完成测试报告 |
| 2 | 完成货币分析部分的进阶需求 | 个人 | 在已完成的交易记录中尝试做数据分析的需求 |
## 小结
1. **货币系统** 根据小组会议实现后端。
2. **文档撰写:** 整理技术文档,完善个人学习文档。

@ -0,0 +1,26 @@
# 个人周总结-第15周
## 姓名和起止时间
**姓  名:** 马英赫
**团队名称:** 2班-哈吉米队
**开始时间:** 2025-12-30
**结束时间:** 2026-1-5
## 本周任务完成情况
| 序号 | 总结内容 | 是否完成 | 情况说明 |
|----|------------------|------|-------------------------------|
| 1 | 整理代码,准备编写测试报告| 完成 | 实现了个人负责的接口和页面逻辑,按照会议要求完成了测试报告 |
| 2 | 完成货币分析部分的进阶需求 | 完成 | 在已完成的交易记录上分析了数据的需求 |
## 对团队工作的建议
1. **互助学习:** 团队成员之间互相学习,共同进步;
2. **进度统一:** 团队成员尽量统一项目进度;
## 小结
1. **技能掌握:** 进一步后端设计方法。
2. **项目进度:** 个人分支开发完成,实现后端部分。
3. **加强巩固:** 对于这一周所学内容,进行总结巩固,避免学了又忘。

@ -0,0 +1,25 @@
# 个人周计划-第15周
## 姓名和起止时间
**姓  名:** 潘俊晖
**团队名称:** 2班-哈吉米队
**开始时间:** 2025-12-30
**结束时间:** 2026-1-5
## 本周任务计划安排
| 序号 | 计划内容 | 协作人 | 情况说明 |
|----|------------------|------|----------|
| 1 | 整理代码准备编写前端部分测试报告 | 王馨怡 | 给出详细测试过程 |
| 2 | 完成玩家列表、对局列表的多条件筛选页面样式 | 王馨怡 | 完善前端交互体验 |
## 小结
1. **整理代码**:准备编写前端部分测试报告。
2. **完善前端样式** 适配多条件筛选

@ -0,0 +1,22 @@
# 个人周总结-第15周
## 姓名和起止时间
**姓  名:** 潘俊晖
**团队名称:** 2班-哈吉米队
**开始时间:** 2025-12-30
**结束时间:** 2026-1-5
## 本周任务完成情况
| 序号 | 总结内容 | 是否完成 | 情况说明 |
|----|-------------------------|------|-------------|
| 1 | 整理代码准备编写前端部分测试报告 | 已完成 | 覆盖前端部分的功能使用 |
| 2 | 完成玩家列表、对局列表的多条件筛选页面样式 | 已完成 | 已与后端接口对接成功 |
# 小结
1.**整体项目:** 已完成

@ -0,0 +1,23 @@
# 个人周计划-第15周
## 姓名和起止时间
**姓  名:** 王馨怡
**团队名称:** 2班-哈吉米队
**开始时间:** 2025-12-29
**结束时间:** 2026-01-04
## 本周任务计划安排
| 序号 | 计划内容 | 协作人 | 情况说明 |
|----|---------------------|----|------------------------------------|
| 1 | 整理代码,准备编写测试报告 | 潘俊晖 | 整理自己负责的页面逻辑,按照要求完成测试报告的编写,给出详细测试过程 |
| 2 | 完成玩家列表、对局列表的多条件筛选功能 | 潘俊晖 | 完善用户交互体验,实现多条件筛选功能 |
## 小结
1. **测试报告筹备**:完成前端相关代码的全面梳理、归类与校验工作,梳理清晰代码逻辑、模块划分及功能对应关系,为后续编写详尽的前端测试报告奠定坚实基础,确保测试报告能够完整呈现前端功能的测试流程、测试用例及核心细节。
2. **前端界面优化**:聚焦玩家列表、对局列表的多条件筛选功能,完成对应页面样式的设计与实现,优化筛选操作的流畅度、样式的美观度与兼容性,实现多条件筛选功能的界面适配,提升用户操作体验,为后续该功能的上线做好界面层面的准备。
3. **协作推进**:与前端同学明确分工且同步进度,确保代码整理的完整性与页面样式的一致性。

@ -0,0 +1,21 @@
# 个人周总结-第15周
## 姓名和起止时间
**姓  名:** 王馨怡
**团队名称:** 2班-哈吉米队
**开始时间:** 2025-12-29
**结束时间:** 2026-01-04
## 本周任务完成情况
| 序号 | 总结内容 | 是否完成 | 情况说明 |
|----|----------------|------|--------------------------|
| 1 | 完成对局列表的多条件筛选功能 | 完成 | 完善用户交互体验,实现多条件筛选功能 |
| 2 | 编写用户手册 | 完成 | 采用test/mock分支测试功能编写用户手册 |
## 小结
1.**前端开发:** 实现对局列表多条件筛选功能,并重点优化了用户交互体验,提升了功能的实用性与易用性;
2.**文档编写:** 通过test/mock分支完成功能测试后精准撰写了用户手册确保文档内容与实际功能匹配为用户使用提供了清晰指引
3.**团队协作:** 积极与团队成员配合,共同完成项目最后的功能优化和文档编写任务。

@ -0,0 +1,22 @@
# 小组周总结-第15周
## 团队名称和起止时间
**团队名称:** 哈吉米队
**开始时间:** 2025-12-30
**结束时间:** 2026-1-5
## 本周任务完成情况
| 序号 | 总结内容 | 是否完成 | 情况说明 |
|----|---------------|------|-----------------|
| 1 | 编写好测试报告 | 已完成 | 根据各自负责的部分完成测试报告 |
| 2 | 完成货币分析部分的进阶需求 | 已完成 | 现已支持数据的多条件导出 |
| 3 | 完成玩家列表、对局列表的多条件筛选页面样式 | 已完成 | 现已支持方便条件筛选 |
## 小结
1. **工作完成情况:** 已完成项目全部内容

@ -0,0 +1,8 @@
# 默认忽略的文件
/shelf/
/workspace.xml
# 基于编辑器的 HTTP 客户端请求
/httpRequests/
# Datasource local storage ignored files
/dataSources/
/dataSources.local.xml

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ProjectRootManager">
<output url="file://$PROJECT_DIR$/out" />
</component>
</project>

@ -0,0 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ProjectModuleManager">
<modules>
<module fileurl="file://$PROJECT_DIR$/.idea/src.iml" filepath="$PROJECT_DIR$/.idea/src.iml" />
</modules>
</component>
</project>

@ -0,0 +1,9 @@
<?xml version="1.0" encoding="UTF-8"?>
<module type="JAVA_MODULE" version="4">
<component name="NewModuleRootManager" inherit-compiler-output="true">
<exclude-output />
<content url="file://$MODULE_DIR$" />
<orderEntry type="inheritedJdk" />
<orderEntry type="sourceFolder" forTests="false" />
</component>
</module>

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="VcsDirectoryMappings">
<mapping directory="$PROJECT_DIR$/.." vcs="Git" />
</component>
</project>

@ -74,14 +74,29 @@
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<dependency>
<groupId>io.jsonwebtoken</groupId>
<artifactId>jjwt-api</artifactId>
<version>0.11.5</version>
</dependency>
<dependency>
<groupId>io.jsonwebtoken</groupId>
<artifactId>jjwt-impl</artifactId>
<version>0.11.5</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>io.jsonwebtoken</groupId>
<artifactId>jjwt-jackson</artifactId> <version>0.11.5</version>
<scope>runtime</scope>
</dependency>
</dependencies>
<!-- 通常不需要手动配置 compiler plugin除非有特殊需求 -->
<!-- 如果您没有特殊需求,可以完全删除 <build> 部分 -->
<build>
<plugins>
<!-- 让 Lombok 在 Maven 编译期生效 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
@ -97,6 +112,17 @@
</configuration>
</plugin>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>

@ -17,9 +17,6 @@ public class PageResult<T> {
this.size = size;
this.list = list;
}
// getters省略
public long getTotal() { return total; }
public int getPage() { return page; }
public int getSize() { return size; }
public List<T> getList() { return list; }
}

@ -11,13 +11,20 @@ public class CorsConfig {
@Bean
public CorsFilter corsFilter() {
UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
CorsConfiguration config = new CorsConfiguration();
config.addAllowedOrigin("http://120.26.60.104");
// 如果你还需要本地调试:
config.addAllowedOrigin("http://localhost:3000");
config.addAllowedMethod("*");
config.addAllowedHeader("*");
config.setAllowCredentials(true);
UrlBasedCorsConfigurationSource source =
new UrlBasedCorsConfigurationSource();
source.registerCorsConfiguration("/**", config);
return new CorsFilter(source);
}
}
}

@ -5,15 +5,16 @@ import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.data.mongodb.UncategorizedMongoDbException;
@RestControllerAdvice
public class GlobalExceptionHandler {
// ✅ 关键修复:手动初始化 Logger无 Lombok 依赖)
private static final Logger log = LoggerFactory.getLogger(GlobalExceptionHandler.class);
/** * 处理 MongoDB 连接异常 */
@ExceptionHandler(org.springframework.data.mongodb.UncategorizedMongoDbException.class)
public Result<Object> handleMongoDBException(org.springframework.data.mongodb.UncategorizedMongoDbException e) {
@ExceptionHandler(UncategorizedMongoDbException.class)
public Result<Object> handleMongoDBException(UncategorizedMongoDbException e) {
log.error("MongoDB 连接异常", e);
return Result.error(500, "数据库连接失败,请检查网络连接和服务器状态");
}

@ -0,0 +1,42 @@
package com.datadashboard.config;
import com.datadashboard.utils.JwtUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.util.StringUtils;
import org.springframework.web.servlet.HandlerInterceptor;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
@Component
public class LoginInterceptor implements HandlerInterceptor {
@Autowired
private JwtUtils jwtUtils;
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
if("OPTIONS".equalsIgnoreCase(request.getMethod())) {
return true;
}
String token = request.getHeader("Authorization");
if (StringUtils.hasLength(token) && token.startsWith("Bearer ")) {
token = token.substring(7);
try {
if (!jwtUtils.isTokenExpired(token)) {
return true;
}
} catch (Exception e) {
// Token 解析失败
}
}
response.setStatus(401);
response.getWriter().write("{\"code\": 401, \"msg\": \"Unauthorized\"}");
return false;
}
}

@ -0,0 +1,20 @@
package com.datadashboard.config;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
@Configuration
public class WebConfig implements WebMvcConfigurer {
@Autowired
private LoginInterceptor loginInterceptor;
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(loginInterceptor)
.addPathPatterns("/**") // 拦截所有路径
.excludePathPatterns("/api/admin/login", "/api/finance/**"); // ★ 放行登录接口和财务接口
}
}

@ -0,0 +1,47 @@
package com.datadashboard.controller;
import com.datadashboard.common.Result;
import com.datadashboard.utils.JwtUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.*;
import java.util.HashMap;
import java.util.Map;
@RestController
@RequestMapping("/api/admin")
public class AdminController {
@Value("${admin.username}")
private String adminUsername;
@Value("${admin.password}")
private String adminPassword;
@Autowired
private JwtUtils jwtUtils;
public static class LoginRequest {
public String username;
public String password;
}
@PostMapping("/login")
public Result<Map<String, String>> login(@RequestBody LoginRequest loginRequest) {
if (adminUsername.equals(loginRequest.username) &&
adminPassword.equals(loginRequest.password)) {
String token = jwtUtils.generateToken(loginRequest.username);
Map<String, String> map = new HashMap<>();
map.put("token", token);
map.put("username", loginRequest.username);
return Result.success(map);
}
return Result.error(401, "用户名或密码错误");
}
}

@ -1,7 +1,9 @@
package com.datadashboard.controller;
import com.datadashboard.common.Result;
import com.datadashboard.common.PageResult;
import com.datadashboard.common.Result;
import com.datadashboard.dto.PlayBackLogQueryDto;
import com.datadashboard.dto.TodayCountResponse;
import com.datadashboard.entity.PlayBackLog;
import com.datadashboard.service.PlayBackLogService;
import lombok.extern.slf4j.Slf4j;
@ -10,38 +12,94 @@ import org.springframework.web.bind.annotation.*;
import java.util.List;
/**
* (PlayBackLog)
*/
@Slf4j
@RestController
@RequestMapping("/api")
@RequestMapping("/api/playback")
public class PlayBackLogController {
private final PlayBackLogService playBackLogService;
@Autowired
private PlayBackLogService playBackLogService;
public PlayBackLogController(PlayBackLogService playBackLogService) {
this.playBackLogService = playBackLogService;
}
/**
*
* @param page 1
* @param size
* @return
*
*
* @param queryDto DTO
* @return
*/
@GetMapping("/playback/list")
public Result<PageResult<PlayBackLog>> getPlayBackLogList(
@RequestParam(value = "page", defaultValue = "1") Integer page,
@RequestParam(value = "size", defaultValue = "10") Integer size) {
@GetMapping("/list")
public Result<PageResult<PlayBackLog>> getPlayBackLogList(PlayBackLogQueryDto queryDto) {
log.info("接收到分页查询请求page={}, size={}, 查询条件: {}",
queryDto.getPage(), queryDto.getSize(), queryDto);
log.info("接收到牌局记录查询请求 - page: {}, size: {}", page, size);
return playBackLogService.getPlayBackLogList(page, size);
try {
return playBackLogService.getPlayBackLogList(queryDto);
} catch (Exception e) {
log.error("分页获取牌局记录失败", e);
return Result.error(500, "获取牌局记录失败,系统繁忙或数据库异常");
}
}
// ✅ 修复:使用 Result.success 静态方法(关键修复)
@GetMapping("/playback/latest")
/**
*
*
* @return
*/
@GetMapping("/latest")
public Result<List<PlayBackLog>> getLatestPlayBackLogs() {
log.info("接收到查询最新五条牌局记录请求");
try {
List<PlayBackLog> logs = playBackLogService.findLatestFive();
// ✅ 修复:使用 Result.success 静态方法
return Result.success(logs); // ✅ 关键修复:不使用构造函数
return Result.success(logs);
} catch (Exception e) {
log.error("获取最新牌局记录失败", e);
return Result.error(500, "获取最新牌局记录失败,系统繁忙");
}
}
/**
*
*
* @return
*/
@GetMapping("/todayCount")
public Result<TodayCountResponse> getTodayPlaybackCount() {
log.info("接收到今日对局数查询请求");
try {
return playBackLogService.getTodayPlaybackCount();
} catch (Exception e) {
log.error("获取今日对局数统计失败", e);
return Result.error(500, "获取今日对局数失败,系统繁忙");
}
}
/**
* ID
*
* @param roomId ID
* @return ID
*/
@GetMapping("/{roomId}")
public Result<PlayBackLog> getPlayBackLogByRoomId(@PathVariable Integer roomId) {
log.info("接收到根据RoomId查询牌局记录请求roomId={}", roomId);
try {
PlayBackLog playBackLog = playBackLogService.getPlayBackLogByRoomId(roomId);
if (playBackLog == null) {
log.warn("未找到RoomId为 {} 的牌局记录", roomId);
return Result.error(404, "未找到该房间ID对应的牌局记录");
}
return Result.success(playBackLog);
} catch (Exception e) {
return Result.error(500, "Failed to fetch latest play_back_log: " + e.getMessage());
log.error("根据RoomId {} 查询牌局记录失败", roomId, e);
return Result.error(500, "查询牌局记录失败,系统繁忙");
}
}
}

@ -4,27 +4,122 @@ import com.datadashboard.common.PageResult;
import com.datadashboard.common.Result;
import com.datadashboard.entity.Player;
import com.datadashboard.service.PlayerService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.bind.annotation.*;
// PlayerController.java
import java.util.List;
import java.util.Map;
/**
* (Player)
*/
@Slf4j
@RestController
@RequestMapping("/player")
@RequestMapping("/api/player")
public class PlayerController {
private final PlayerService playerService;
@Autowired
private PlayerService playerService;
public PlayerController(PlayerService playerService) {
this.playerService = playerService;
}
/**
*
*
* @param page
* @param size
* @return
*/
@GetMapping("/list")
public Result<PageResult<Player>> getPlayerList(
@RequestParam("page") int page,
@RequestParam("size") int size) {
PageResult<Player> pageResult = playerService.getPagePlayers(page, size);
// ✅ 关键修改:这里用 Result.success() 代替 new Result()
return Result.success(pageResult); // ← 这一行已修正
log.info("接收到玩家列表分页查询请求 - page: {}, size: {}", page, size);
try {
PageResult<Player> pageResult = playerService.getPagePlayers(page, size);
return Result.success(pageResult);
} catch (Exception e) {
log.error("分页获取玩家列表失败", e);
return Result.error(500, "获取玩家列表失败,系统繁忙");
}
}
/**
* ID
*
* @param playerId ID
* @return
*/
@GetMapping("/{playerId}")
public Result<Player> getPlayerInfoById(@PathVariable String playerId) {
log.info("接收到查询玩家详情请求 - playerId: {}", playerId);
try {
Player player = playerService.getPlayerById(playerId);
if (player == null) {
log.warn("未找到ID为 {} 的玩家", playerId);
return Result.error(404, "未找到该玩家信息");
}
return Result.success(player);
} catch (Exception e) {
log.error("根据ID获取玩家信息失败: {}", playerId, e);
return Result.error(500, "获取玩家信息失败");
}
}
/**
*
*
* @return Map
*/
@GetMapping("/count")
public Result<Map<String, Long>> getPlayerCount() {
log.info("接收到查询玩家总数请求");
try {
long count = playerService.getPlayerCount();
return Result.success(Map.of("number", count));
} catch (Exception e) {
log.error("获取玩家总数失败", e);
return Result.error(500, "获取玩家总数失败");
}
}
/**
* /
*
* @return
*/
@GetMapping("/todayPlayers")
public Result<Map<String, Integer>> getTodayPlayers() {
log.info("接收到查询今日玩家统计请求");
try {
Map<String, Integer> result = playerService.getTodayPlayers();
return Result.success(result);
} catch (Exception e) {
log.error("获取今日玩家统计失败", e);
return Result.error(500, "获取今日玩家数据失败");
}
}
/**
*
*
* @return
*/
@GetMapping("/weekPlayers")
public Result<Map<String, List<Integer>>> getWeekLoginPlayers() {
log.info("接收到查询本周登录趋势请求");
try {
List<Integer> numbers = playerService.getWeekLoginPlayers();
return Result.success(Map.of("numbers", numbers));
} catch (Exception e) {
log.error("获取本周登录趋势失败", e);
return Result.error(500, "获取本周数据失败");
}
}
}

@ -0,0 +1,58 @@
package com.datadashboard.controller;
import com.datadashboard.common.PageResult;
import com.datadashboard.common.Result;
import com.datadashboard.dto.TradeLogQueryDto;
import com.datadashboard.entity.TradeLog;
import com.datadashboard.service.TradeLogService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.List;
/**
* (TradeLog)
*/
@Slf4j
@RestController
@RequestMapping("/api/finance")
public class TradeLogController {
private final TradeLogService tradeLogService;
@Autowired
public TradeLogController(TradeLogService tradeLogService) {
this.tradeLogService = tradeLogService;
}
/**
* TradeLog
*
* @param queryDto DTO
* @return TradeLog
*/
@PostMapping("/logs")
public Result<PageResult<TradeLog>> getTradeLogsByCondition(@RequestBody TradeLogQueryDto queryDto) {
log.info("接收到TradeLog查询请求{}", queryDto);
try {
return tradeLogService.getTradeLogsByCondition(queryDto);
} catch (Exception e) {
log.error("查询TradeLog失败", e);
return Result.error(500, "Failed to fetch latest TradeLog: database error");
}
}
/** * 获取最近10条交易记录 * * @return 最近10条交易记录 */
@GetMapping("/latest")
public Result<List<TradeLog>> getLatestTradeLogs() {
log.info("接收到获取最近10条交易记录请求");
try {
return tradeLogService.getLatestTradeLogs();
} catch (Exception e) {
log.error("获取最近10条交易记录失败", e);
return Result.error(500, "获取最近10条交易记录失败系统繁忙");
}
}
}

@ -0,0 +1,29 @@
package com.datadashboard.dto;
import lombok.Data;
import java.time.LocalDateTime;
@Data
public class PlayBackLogQueryDto {
private Integer page = 1;
private Integer size = 10;
// 时间范围
private LocalDateTime startTime;
private LocalDateTime endTime;
// 游戏维度
private Integer gameMode;
private Integer gameType;
// 房间
private Long roomId;
// 玩家
private String playerName;
private String playerId;
private Long userId;
}

@ -0,0 +1,20 @@
package com.datadashboard.dto;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* DTO
*/
@Data
@NoArgsConstructor
@AllArgsConstructor
public class TodayCountResponse {
private Long number;
// 为了方便,添加一个静态工厂方法
public static TodayCountResponse of(Long number) {
return new TodayCountResponse(number);
}
}

@ -0,0 +1,20 @@
package com.datadashboard.dto;
import lombok.Data;
/**
* TradeLogDTO
*/
@Data
public class TradeLogQueryDto {
private Integer page = 1; // 当前页
private Integer pageSize = 20; // 每页条数
private Long userId; // 精确查询玩家ID
private String name; // 模糊查询昵称
private Integer logType; // 筛选记录类型 (5 或 6)
private Integer tradeType; // 筛选交易具体场景
private String startDate; // 开始日期 (yyyy-MM-dd HH:mm:ss)
private String endDate; // 结束日期 (yyyy-MM-dd HH:mm:ss)
}

@ -24,7 +24,7 @@ public class PlayBackLog {
@Field("roomId")
private String roomId;
private Integer roomId;
private String roomName;
// 1:好友约局, 2:官方比赛, 3:俱乐部赛, 4:积分房

@ -6,6 +6,7 @@ import org.springframework.data.mongodb.core.index.Indexed;
import org.springframework.data.mongodb.core.mapping.Document;
import java.util.List;
import java.util.Map;
/**
*
@ -16,6 +17,8 @@ import java.util.List;
public class TradeLog {
@Id
private String _id; // MongoDB的_id字段
private String logId;
@Indexed
@ -27,7 +30,7 @@ public class TradeLog {
@Indexed
private String playerId;
private String userId;
private Long userId; // 改为Long类型匹配示例数据
private String name;
// -------------------------------------------
@ -45,8 +48,8 @@ public class TradeLog {
// 该局游戏所有参与者的playerId
private List<String> playerIdList;
// 具体的交易详情列表
private List<TradeDetail> tradeData;
// 具体的交易详情 - 使用Map结构匹配示例数据
private Map<String, TradeDetail> tradeData;
/**
*
@ -54,7 +57,7 @@ public class TradeLog {
@Data
public static class TradeDetail {
private String playerId;
private String userId;
private Long userId;
private String name;
private Long gold; // 变化量
private Long diamond; // 变化量

@ -1,5 +1,7 @@
package com.datadashboard.repository;
import com.datadashboard.common.PageResult;
import com.datadashboard.dto.PlayBackLogQueryDto;
import com.datadashboard.entity.PlayBackLog;
import org.springframework.data.mongodb.repository.MongoRepository;
import org.springframework.stereotype.Repository;
@ -7,7 +9,16 @@ import org.springframework.stereotype.Repository;
import java.util.List;
@Repository
public interface PlayBackLogRepository extends MongoRepository<PlayBackLog, String> {
// 新增:按 gameTimeMillis 降序排序取前5条
public interface PlayBackLogRepository {
// 按 gameTimeMillis 降序排序取前5条
List<PlayBackLog> findTop5ByOrderByGameTimeMillisDesc();
// 根据时间范围查询牌局记录(今日对局数专用)
List<PlayBackLog> findByGameTimeMillisBetween(Long startTime, Long endTime);
// 根据 roomId 查询
PlayBackLog findTopByRoomIdOrderByGameTimeMillisDesc(Integer roomId);
//根据条件分页查询牌局记录
PageResult<PlayBackLog> findPlayBackLogsByCondition(PlayBackLogQueryDto queryDto);
}

@ -0,0 +1,11 @@
package com.datadashboard.repository;
import com.datadashboard.entity.PlayerActionLog;
import org.springframework.data.mongodb.repository.MongoRepository;
import java.util.List;
public interface PlayerActionLogRepository extends MongoRepository<PlayerActionLog, String> {
List<PlayerActionLog> findByLogTypeAndDate(Integer logType, String date);
List<PlayerActionLog> findByLogTypeAndTimeBetween(Integer logType, long startTime, long endTime);
}

@ -0,0 +1,24 @@
package com.datadashboard.repository;
import com.datadashboard.common.PageResult;
import com.datadashboard.dto.TradeLogQueryDto;
import com.datadashboard.entity.TradeLog;
import java.util.List;
/**
* TradeLog访
*/
public interface TradeLogRepository {
/**
* TradeLog
*
* @param queryDto
* @return
*/
PageResult<TradeLog> findTradeLogsByCondition(TradeLogQueryDto queryDto);
/** * 获取最近10条交易记录 * * @return 最近10条交易记录 */
List<TradeLog> findTop10ByOrderByTimeDesc();
}

@ -0,0 +1,230 @@
package com.datadashboard.repository.impl;
import com.datadashboard.common.PageResult;
import com.datadashboard.dto.PlayBackLogQueryDto;
import com.datadashboard.entity.PlayBackLog;
import com.datadashboard.repository.PlayBackLogRepository;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Sort;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.data.mongodb.core.aggregation.*;
import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.data.mongodb.core.query.Query;
import org.springframework.stereotype.Repository;
import org.springframework.util.StringUtils;
import java.time.ZoneOffset;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
@Slf4j
@Repository
public class PlayBackLogRepositoryImpl implements PlayBackLogRepository {
@Autowired
private MongoTemplate mongoTemplate;
@Override
public PageResult<PlayBackLog> findPlayBackLogsByCondition(PlayBackLogQueryDto queryDto) {
try {
// 1. 构建基础匹配条件
Criteria baseCriteria = buildBaseCriteria(queryDto);
// 2. 检查是否有玩家相关条件
boolean hasPlayerCondition = StringUtils.hasText(queryDto.getPlayerId())
|| StringUtils.hasText(queryDto.getPlayerName())
|| queryDto.getUserId() != null;
// 3. 构建聚合管道
List<AggregationOperation> operations = new ArrayList<>();
operations.add(Aggregation.match(baseCriteria));
if (hasPlayerCondition) {
// 将 playerInfo Map 转为数组以便查询
operations.add(Aggregation.project(PlayBackLog.class)
.andExpression("{$objectToArray: '$playerInfo'}").as("playerInfoList"));
Criteria playerCriteria = new Criteria();
// --- 核心修复开始 ---
// 1. 处理 玩家昵称 (playerName) - 模糊查询
if (StringUtils.hasText(queryDto.getPlayerName())) {
// 对应数据库中的 playerInfo.value.name
playerCriteria.and("playerInfoList.v.name").regex(queryDto.getPlayerName(), "i");
}
// 2. 处理 玩家ID (playerId) - 智能匹配 UUID 或 UserId
if (StringUtils.hasText(queryDto.getPlayerId())) {
String inputId = queryDto.getPlayerId();
List<Criteria> idOrList = new ArrayList<>();
// 情况A: 输入的是 UUID (字符串匹配 Key 或 v.id)
idOrList.add(Criteria.where("playerInfoList.k").is(inputId));
idOrList.add(Criteria.where("playerInfoList.v.id").is(inputId));
// 情况B: 输入的是 数字UserId (尝试转为Long进行数字匹配)
// 这一点至关重要因为DB里 userId 是数字,前端传的是字符串
if (inputId.matches("\\d+")) { // 如果输入全是数字
try {
long uid = Long.parseLong(inputId);
idOrList.add(Criteria.where("playerInfoList.v.userId").is(uid));
} catch (NumberFormatException e) {
// 忽略转换错误
}
}
// 使用 OR 连接所有可能的 ID 匹配情况
playerCriteria.andOperator(new Criteria().orOperator(idOrList.toArray(new Criteria[0])));
}
// 3. 处理 明确的 UserId (保留原有逻辑,防守性编程)
if (queryDto.getUserId() != null) {
playerCriteria.and("playerInfoList.v.userId").is(queryDto.getUserId());
}
// --- 核心修复结束 ---
operations.add(Aggregation.match(playerCriteria));
operations.add(Aggregation.project().andExclude("playerInfoList"));
}
// 4. 获取总数 (Count)
List<AggregationOperation> countOps = new ArrayList<>(operations);
countOps.add(Aggregation.count().as("total"));
Aggregation countAgg = Aggregation.newAggregation(countOps);
AggregationResults<Map> countResult = mongoTemplate.aggregate(countAgg, PlayBackLog.class, Map.class);
long total = 0;
if (!countResult.getMappedResults().isEmpty()) {
Object totalVal = countResult.getMappedResults().get(0).get("total");
total = totalVal != null ? Long.parseLong(totalVal.toString()) : 0;
}
log.info("查询记录数: {}", total);
// 5. 获取分页数据
if (total > 0) {
operations.add(Aggregation.sort(Sort.by(Sort.Direction.DESC, "gameTimeMillis")));
long skip = (long) (queryDto.getPage() - 1) * queryDto.getSize();
operations.add(Aggregation.skip(skip));
operations.add(Aggregation.limit(queryDto.getSize()));
Aggregation dataAgg = Aggregation.newAggregation(operations);
// 修复这里: 显式指定 inputType 和 outputType
AggregationResults<PlayBackLog> result = mongoTemplate.aggregate(dataAgg, PlayBackLog.class, PlayBackLog.class);
List<PlayBackLog> pageList = result.getMappedResults();
fixPlayerInfoIds(pageList); // 别忘了修复ID的辅助方法
return new PageResult<>(total, queryDto.getPage(), queryDto.getSize(), pageList);
} else {
return new PageResult<>(0, queryDto.getPage(), queryDto.getSize(), new ArrayList<>());
}
} catch (Exception e) {
log.error("查询失败", e);
throw new RuntimeException("DB Error: " + e.getMessage(), e);
}
}
/**
* Criteria ()
*/
private Criteria buildBaseCriteria(PlayBackLogQueryDto queryDto) {
List<Criteria> criteriaList = new ArrayList<>();
// 时间范围查询
if (queryDto.getStartTime() != null || queryDto.getEndTime() != null) {
Criteria timeCriteria = Criteria.where("gameTimeMillis");
if (queryDto.getStartTime() != null) {
long startMillis = queryDto.getStartTime().toInstant(ZoneOffset.of("+8")).toEpochMilli();
timeCriteria.gte(startMillis);
}
if (queryDto.getEndTime() != null) {
long endMillis = queryDto.getEndTime().toInstant(ZoneOffset.of("+8")).toEpochMilli();
timeCriteria.lte(endMillis);
}
criteriaList.add(timeCriteria);
}
// 基础字段匹配
if (queryDto.getGameMode() != null) {
criteriaList.add(Criteria.where("gameMode").is(queryDto.getGameMode()));
}
if (queryDto.getGameType() != null) {
criteriaList.add(Criteria.where("gameType").is(queryDto.getGameType()));
}
if (queryDto.getRoomId() != null) {
criteriaList.add(Criteria.where("roomId").is(queryDto.getRoomId()));
}
if (criteriaList.isEmpty()) {
return new Criteria();
} else if (criteriaList.size() == 1) {
return criteriaList.get(0);
} else {
return new Criteria().andOperator(criteriaList.toArray(new Criteria[0]));
}
}
/**
* playerInfoIDkey
*/
private void fixPlayerInfoIds(List<PlayBackLog> logs) {
if (logs == null || logs.isEmpty()) return;
for (PlayBackLog logRecord : logs) {
Map<String, PlayBackLog.PlayerSnapshot> infoMap = logRecord.getPlayerInfo();
if (infoMap != null && !infoMap.isEmpty()) {
infoMap.forEach((key, snapshot) -> {
if (snapshot != null) {
snapshot.setId(key);
}
});
}
}
}
@Override
public List<PlayBackLog> findTop5ByOrderByGameTimeMillisDesc() {
Query query = new Query();
query.with(Sort.by(Sort.Direction.DESC, "gameTimeMillis"));
query.limit(5);
List<PlayBackLog> result = mongoTemplate.find(query, PlayBackLog.class);
fixPlayerInfoIds(result);
return result;
}
@Override
public List<PlayBackLog> findByGameTimeMillisBetween(Long startTime, Long endTime) {
Query query = new Query();
query.addCriteria(Criteria.where("gameTimeMillis").gte(startTime).lte(endTime));
List<PlayBackLog> result = mongoTemplate.find(query, PlayBackLog.class);
fixPlayerInfoIds(result);
return result;
}
@Override
public PlayBackLog findTopByRoomIdOrderByGameTimeMillisDesc(Integer roomId) {
Query query = new Query();
query.addCriteria(Criteria.where("roomId").is(roomId));
query.with(Sort.by(Sort.Direction.DESC, "gameTimeMillis"));
query.limit(1);
PlayBackLog result = mongoTemplate.findOne(query, PlayBackLog.class);
if (result != null) {
fixPlayerInfoIds(List.of(result));
}
return result;
}
}

@ -0,0 +1,132 @@
package com.datadashboard.repository.impl;
import com.datadashboard.common.PageResult;
import com.datadashboard.dto.TradeLogQueryDto;
import com.datadashboard.entity.TradeLog;
import com.datadashboard.repository.TradeLogRepository;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Sort;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.data.mongodb.core.query.Query;
import org.springframework.stereotype.Repository;
import org.springframework.util.StringUtils;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
import java.util.regex.Pattern;
/**
* TradeLog访
*/
@Slf4j
@Repository
public class TradeLogRepositoryImpl implements TradeLogRepository {
@Autowired
private MongoTemplate mongoTemplate;
private static final SimpleDateFormat DATE_FORMAT = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
@Override
public PageResult<TradeLog> findTradeLogsByCondition(TradeLogQueryDto queryDto) {
try {
Query query = buildQuery(queryDto);
// 计算总数
long total = mongoTemplate.count(query, TradeLog.class);
// 分页查询
int skip = (queryDto.getPage() - 1) * queryDto.getPageSize();
query.skip(skip).limit(queryDto.getPageSize());
// 按时间倒序排列
query.with(Sort.by(Sort.Direction.DESC, "time"));
List<TradeLog> list = mongoTemplate.find(query, TradeLog.class);
return new PageResult<>(total, queryDto.getPage(), queryDto.getPageSize(), list);
} catch (Exception e) {
log.error("查询TradeLog失败", e);
throw new RuntimeException("数据库查询异常", e);
}
}
/**
*
*/
private Query buildQuery(TradeLogQueryDto queryDto) {
Query query = new Query();
// 精确查询玩家ID
if (queryDto.getUserId() != null) {
query.addCriteria(Criteria.where("userId").is(queryDto.getUserId()));
}
// 模糊查询昵称
if (StringUtils.hasText(queryDto.getName())) {
Pattern pattern = Pattern.compile(queryDto.getName(), Pattern.CASE_INSENSITIVE);
query.addCriteria(Criteria.where("name").regex(pattern));
}
// 筛选记录类型
if (queryDto.getLogType() != null) {
query.addCriteria(Criteria.where("logType").is(queryDto.getLogType()));
}
// 筛选交易具体场景
if (queryDto.getTradeType() != null) {
query.addCriteria(Criteria.where("tradeType").is(queryDto.getTradeType()));
}
// 时间范围查询
addDateRangeCriteria(query, queryDto);
return query;
}
/**
*
*/
private void addDateRangeCriteria(Query query, TradeLogQueryDto queryDto) {
try {
Criteria timeCriteria = null;
if (StringUtils.hasText(queryDto.getStartDate())) {
Date startDate = DATE_FORMAT.parse(queryDto.getStartDate());
long startTime = startDate.getTime();
timeCriteria = Criteria.where("time").gte(startTime);
}
if (StringUtils.hasText(queryDto.getEndDate())) {
Date endDate = DATE_FORMAT.parse(queryDto.getEndDate());
long endTime = endDate.getTime();
if (timeCriteria != null) {
timeCriteria = timeCriteria.lte(endTime);
} else {
timeCriteria = Criteria.where("time").lte(endTime);
}
}
if (timeCriteria != null) {
query.addCriteria(timeCriteria);
}
} catch (ParseException e) {
log.error("日期格式解析错误", e);
throw new RuntimeException("日期格式错误,请使用 yyyy-MM-dd HH:mm:ss 格式", e);
}
}
@Override
public List<TradeLog> findTop10ByOrderByTimeDesc() {
Query query = new Query();
query.with(Sort.by(Sort.Direction.DESC, "time"));
query.limit(10);
return mongoTemplate.find(query, TradeLog.class);
}
}

@ -2,27 +2,47 @@ package com.datadashboard.service;
import com.datadashboard.common.Result;
import com.datadashboard.common.PageResult;
import com.datadashboard.dto.PlayBackLogQueryDto;
import com.datadashboard.dto.TodayCountResponse;
import com.datadashboard.entity.PlayBackLog;
import java.util.List;
/**
*
*/
public interface PlayBackLogService {
/**
*
* @param page 1
* @param size
* @return
*
* @param queryDto
* @return
*/
Result<PageResult<PlayBackLog>> getPlayBackLogList(Integer page, Integer size);
Result<PageResult<PlayBackLog>> getPlayBackLogList(PlayBackLogQueryDto queryDto);
/** * 获取最近5条牌局记录按时间倒序 * @return 最近5条牌局记录列表 */
/**
* 5Result使
* @return
*/
List<PlayBackLog> findLatestFive();
/**
* 5
* @return 5
* 5API
* @return Result
*/
Result<List<PlayBackLog>> getLatestPlayBackLogs();
/**
*
* @return Result
*/
Result<TodayCountResponse> getTodayPlaybackCount();
/**
* roomId
* @param roomId ID
* @return
*/
PlayBackLog getPlayBackLogByRoomId(Integer roomId);
}

@ -2,7 +2,44 @@ package com.datadashboard.service;
import com.datadashboard.common.PageResult;
import com.datadashboard.entity.Player;
import java.util.List;
import java.util.Map;
/**
*
*/
public interface PlayerService {
/**
*
* @param page (1)
* @param size
* @return
*/
PageResult<Player> getPagePlayers(int page, int size);
/**
* playerId
* @param playerId ID
* @return null
*/
Player getPlayerById(String playerId);
/**
*
* @return
*/
long getPlayerCount();
/**
*
* @return Map key="numbers" value=
*/
Map<String, Integer> getTodayPlayers();
/**
*
* @return 7
*/
List<Integer> getWeekLoginPlayers();
}

@ -0,0 +1,25 @@
package com.datadashboard.service;
import com.datadashboard.common.PageResult;
import com.datadashboard.common.Result;
import com.datadashboard.dto.TradeLogQueryDto;
import com.datadashboard.entity.TradeLog;
import java.util.List;
/**
* TradeLog
*/
public interface TradeLogService {
/**
* TradeLog
*
* @param queryDto
* @return
*/
Result<PageResult<TradeLog>> getTradeLogsByCondition(TradeLogQueryDto queryDto);
/** * 获取最近10条交易记录 * * @return 最近10条交易记录 */
Result<List<TradeLog>> getLatestTradeLogs();
}

Some files were not shown because too many files have changed in this diff Show More

Loading…
Cancel
Save