136 lines
6.5 KiB
Markdown
136 lines
6.5 KiB
Markdown
# 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` - 定时任务状态转换 |