mahjong_group/docs/bug/1.0.1_bug文档.md
2026-01-02 15:29:46 +08:00

136 lines
6.5 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 1.0.1 Bug修复文档
## Bug列表
### cs120_10 - 鸽子费审核后组局未自动取消
**状态**: 已验证 ❌
**类型**: 后端逻辑缺陷
**描述**: 签到时有用户未到场,后台通过未到场审核后,该组局没有自动取消
**期望**: 应自动取消该组局
**问题分析**:
- 位置: `server/CoreCms.Net.Web.Admin/Controllers/SQ/SQReservationsController.cs` ApprovePigeonFee方法
- 当前逻辑: 审核通过鸽子费后,只分配费用给已赴约用户,但没有检查是否需要取消组局
- 缺失逻辑: 需要在审核后检查剩余有效参与者数量,如果不足则自动取消组局
**修复方案**: 在鸽子费审核通过后,检查剩余参与者数量是否满足最低要求,不满足则将预约状态设为取消(4)
---
### cs120_11 & cs120_12 - 锁定状态组局无法签到 (合并问题)
**状态**: 已验证 ❌
**类型**: 前端时间验证逻辑缺陷
**描述**: 组局成功锁定后,用户无法进行签到。无论是正常到时间还是后台修改时间,都会出现无法签到的问题
**期望**: 锁定状态的组局在合理时间范围内应该可以签到
**数据库验证结果**:
- 预约ID 2068: 状态1(锁定中)开始时间2025-12-31 23:25:00已过期1478分钟
- 该预约4个参与者人数已满但从未成功签到(check_reservation都为NULL)
**问题分析**:
- **前端验证**: `uniapp/mahjong_group/components/com/page/reservation-item.vue` 第78-111行
- **验证逻辑**: 签到按钮只在以下条件显示:
1. `item.status === 1` (锁定状态) ✅
2. `item.role === 1` (发起者权限) ✅
3. **时间条件**: 开始前10分钟内 OR 开始后结束前 ❌
- **根本原因**: 前端时间验证过于严格,超过结束时间后签到按钮消失
- **后端验证**: `CheckInReservation`方法本身没有时间限制,问题在前端
**具体问题**:
1. **cs120_11**: 正常情况下,如果用户错过了签到时间窗口,签到按钮就消失了
2. **cs120_12**: 后台修改时间后,如果当前时间不在新的时间窗口内,同样无法签到
**修复方案**:
1. **放宽前端时间验证**: 允许锁定状态的组局在更宽松的时间范围内签到
2. **增加管理员权限**: 后台修改时间后应该重置签到时间窗口
3. **或者增加强制签到功能**: 发起者可以在任何时间对锁定状态的组局进行签到
---
### cs120_13 - 进行中组局显示"取消组局"按钮 (新发现)
**状态**: 已修复 ✅
**类型**: 前端按钮显示逻辑缺陷
**描述**: 当组局状态为进行中(status=2)时,点击详情弹窗仍显示"取消组局"按钮,但此时组局已经开始,不应该允许取消
**期望**: 进行中和已结束的组局不应该显示取消按钮
**问题分析**:
- **位置**: `uniapp/mahjong_group/components/com/index/ReservationPopup.vue` 第154-173行
- **当前逻辑**: 只根据用户角色判断按钮显示,没有考虑预约状态
- **缺失逻辑**: 需要结合预约状态判断按钮显示
**修复方案**: ✅ 已实施
1. 新增 `isAddhandleJoin == 4` 状态,专门处理进行中的组局
2. 修改按钮显示逻辑,根据预约状态判断:
- 状态0-1(待开始/锁定中) + 发起者 → 显示"取消组局"
- 状态2(进行中) + 发起者 → 显示"进行中"(橙色,无点击事件)
- 状态3+(已结束/取消) + 发起者 → 只显示"关闭"
- 状态2+(进行中及以后) + 参与者 → 只显示"关闭"
**修复内容**:
- 增加了进行中状态的UI显示
- 完善了状态判断逻辑
- 确保进行中的组局不会显示误导性的操作按钮
## 修复优先级
1. **cs120_11 & cs120_12** (高) - 影响核心业务流程,用户无法正常签到
2. **cs120_14** (高) - 影响核心业务流程,组局卡住无法消失
3. **cs120_13** (中) - 影响用户体验,可能导致误操作
4. **cs120_10** (中) - 影响组局管理,但属于边缘情况
---
### cs120_14 - 只剩发起者一人的组局无法消失
**状态**: ✅ 已修复
**类型**: 后端
**优先级**: 高
**问题描述**:
组2人局签到时选择另一人未到场一直等到结束时间后进入评价牌友阶段因为只剩发起者一人在我的页面点击【牌友评价】按钮会弹出系统提示"暂无评价",该组局信息在我的页面也不会消失、不能解散组局,一直卡在这,只能在后台删除该组局。
**期望行为**:
应在点击【牌友评价】弹出系统提示后,检测到该组局只有发起者一人,自动解散该组局。或到达结束时间后,检测到该组局只有发起者一人,自动解散该组局。
**问题根本原因**:
1. 签到时选择参与者未到场,参与者被标记为`is_arrive=2`(未赴约)和`status=1`(已退出)
2. `GetMyUseReservation`接口查询时没有排除只剩当前用户一人的已结束组局
3. 组局显示在"我的页面",但点击评价时无人可评价
4. 由于没有评价记录,组局不会消失
**修复内容**:
1. **后端查询条件修改** (`server/CoreCms.Net.Web.WebApi/Controllers/SQController.cs`)
- 修改`GetMyUseReservation`接口的SQL查询条件
- 添加条件:对于已结束的组局(status=3),必须存在除当前用户外的其他已赴约参与者
- 查询逻辑:`r.status < 3 OR (r.status = 3 AND 存在其他可评价用户)`
**修复SQL逻辑**:
```sql
AND (
r.status < 3
OR (
r.status = 3
AND (SELECT COUNT(1) FROM SQReservationParticipants p2
WHERE p2.reservation_id = r.id
AND p2.status = 0
AND p2.is_arrive = 1
AND p2.user_id != {userId}) > 0
)
)
```
**修复效果**:
- 未结束的组局(status<3)正常显示
- 已结束的组局(status=3):只有存在其他可评价用户时才显示
- 只剩发起者一人的已结束组局直接不显示自动从"我的页面"消失
**修复时间**: 2025-01-02
**测试状态**: 待测试
**涉及文件**:
- `server/CoreCms.Net.Web.WebApi/Controllers/SQController.cs` (GetMyUseReservation方法)
## 相关文件
- `uniapp/mahjong_group/components/com/page/reservation-item.vue` - 前端签到按钮显示逻辑
- `uniapp/mahjong_group/components/com/index/ReservationPopup.vue` - 详情弹窗按钮显示逻辑
- `server/CoreCms.Net.Web.WebApi/Controllers/SQController.cs` - 后端签到逻辑
- `server/CoreCms.Net.Web.Admin/Controllers/SQ/SQReservationsController.cs` - 鸽子费审核
- `server/CoreCms.Net.Task/SQReservationJob.cs` - 定时任务状态转换