Merge branch 'main' of http://192.168.195.14:3000/outsource/mahjong_group
This commit is contained in:
commit
097100025c
|
|
@ -73,8 +73,60 @@
|
|||
|
||||
## 修复优先级
|
||||
1. **cs120_11 & cs120_12** (高) - 影响核心业务流程,用户无法正常签到
|
||||
2. **cs120_13** (中) - 影响用户体验,可能导致误操作
|
||||
3. **cs120_10** (中) - 影响组局管理,但属于边缘情况
|
||||
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` - 前端签到按钮显示逻辑
|
||||
|
|
|
|||
|
|
@ -1736,16 +1736,15 @@ namespace CoreCms.Net.Web.Admin.Controllers
|
|||
p => p.reservation_id == request.reservation_id && p.role == 1);
|
||||
var checkTime = initiatorParticipant?.check_reservation;
|
||||
|
||||
// 查询符合条件的已赴约用户(排除发起者和未赴约用户本人)
|
||||
// 条件:is_arrive=1, status=0, join_time < 签到时间, role != 1(排除发起者)
|
||||
// 查询符合条件的已赴约用户(包括发起者,排除未赴约用户本人)
|
||||
// 条件:is_arrive=1, status=0, join_time < 签到时间
|
||||
var eligibleParticipantsSql = $@"
|
||||
SELECT p.*, u.nickName, u.mobile
|
||||
FROM SQReservationParticipants p
|
||||
INNER JOIN CoreCmsUser u ON p.user_id = u.id
|
||||
WHERE p.reservation_id = {request.reservation_id}
|
||||
AND p.is_arrive = 1
|
||||
AND p.status = 0
|
||||
AND p.role != 1";
|
||||
AND p.status = 0";
|
||||
|
||||
// 如果有签到时间,则只选择签到之前加入的参与者
|
||||
if (checkTime.HasValue)
|
||||
|
|
|
|||
|
|
@ -159,6 +159,17 @@ public class SQController : ControllerBase
|
|||
SELECT 1 FROM SQReservationEvaluate e
|
||||
WHERE e.reservation_id = r.id AND e.user_id = {userId}
|
||||
)
|
||||
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
|
||||
)
|
||||
)
|
||||
ORDER BY orderid asc, r.start_time Desc
|
||||
");
|
||||
if (list != null && list.Count > 0)
|
||||
|
|
@ -268,22 +279,24 @@ public class SQController : ControllerBase
|
|||
var userId = _user.ID;
|
||||
var list = await _sQReservationEvaluateServices.QueryListByClauseAsync(it => it.reservation_id == reId && it.user_id == userId);
|
||||
var participants = await _dbBase.Ado.SqlQueryAsync<SQReservationParticipantsApiEavDto>($"select p.id,p.reservation_id,p.status,p.join_time,p.user_id, p.role,u.nickName UserName,u.avatarImage AvatarImage,ISNULL(u.play_level,4) play_level,ISNULL(u.skills_level,4) skills_level from SQReservationParticipants p inner join CoreCmsUser u on p.user_id=u.id where p.status=0 and p.reservation_id ={reId} and p.is_arrive=1 ");
|
||||
if (participants == null || participants.Count == 0)
|
||||
|
||||
// 过滤掉当前用户自己,只保留可评价的其他用户
|
||||
var evaluableParticipants = participants?.Where(p => p.user_id != userId).ToList();
|
||||
|
||||
if (evaluableParticipants == null || evaluableParticipants.Count == 0)
|
||||
{
|
||||
return new WebApiDto()
|
||||
{
|
||||
Code = 0,
|
||||
Data = null
|
||||
Data = null,
|
||||
Msg = "暂无可评价的牌友"
|
||||
};
|
||||
}
|
||||
|
||||
var userBlack = await _coreCmsUserBlacklistServices.GetUserBlacklists(userId);
|
||||
List<object> obj = new List<object>();
|
||||
foreach (var item in participants)
|
||||
foreach (var item in evaluableParticipants)
|
||||
{
|
||||
if (item.user_id == userId)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
var is_evaluate = false;
|
||||
decimal play_level = 0;
|
||||
decimal skills_level = 0;
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user