From fe9fc40569623550c7009e9d7860dfc617d2dabc Mon Sep 17 00:00:00 2001 From: zpc Date: Fri, 2 Jan 2026 15:05:50 +0800 Subject: [PATCH 1/3] 12 --- docs/bug/1.0.1_bug文档.md | 51 ++++++++++++++++++- .../Controllers/SQController.cs | 38 +++++++++++--- .../com/page/reservation-evaluate.vue | 4 ++ 3 files changed, 84 insertions(+), 9 deletions(-) diff --git a/docs/bug/1.0.1_bug文档.md b/docs/bug/1.0.1_bug文档.md index 6f595d0..ac535aa 100644 --- a/docs/bug/1.0.1_bug文档.md +++ b/docs/bug/1.0.1_bug文档.md @@ -73,8 +73,55 @@ ## 修复优先级 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. `GetEvaluateServices`接口查询条件:`p.status=0 and p.is_arrive=1` +3. 只有发起者满足条件,但发起者被排除(不能评价自己) +4. 返回空列表,前端显示"暂无评价" +5. 由于没有评价记录,组局不会从"我的页面"消失 + +**修复内容**: +1. **后端接口修改** (`server/CoreCms.Net.Web.WebApi/Controllers/SQController.cs`) + - 修改`GetEvaluateServices`接口逻辑 + - 当检测到无人可评价时(只剩发起者一人),自动创建一条空评价记录 + - 空评价记录的`to_user_id`指向自己,表示无人可评价 + - 返回消息"暂无可评价的牌友,组局已自动完成" + +2. **前端组件修改** (`uniapp/mahjong_group/components/com/page/reservation-evaluate.vue`) + - 修改`show`方法 + - 当收到空数据时,延迟1.5秒后触发`evaluateSuccess`事件 + - 让"我的页面"刷新数据,组局自动消失 + +**修复逻辑**: +- 用户点击【牌友评价】 +- 后端检测到无人可评价 +- 自动创建空评价记录(标记该用户已处理此组局) +- 前端显示"暂无评价"后触发刷新事件 +- 组局从"我的页面"消失 + +**修复时间**: 2025-01-02 +**测试状态**: 待测试 + +**涉及文件**: +- `server/CoreCms.Net.Web.WebApi/Controllers/SQController.cs` (GetEvaluateServices方法) +- `uniapp/mahjong_group/components/com/page/reservation-evaluate.vue` (show方法) ## 相关文件 - `uniapp/mahjong_group/components/com/page/reservation-item.vue` - 前端签到按钮显示逻辑 diff --git a/server/CoreCms.Net.Web.WebApi/Controllers/SQController.cs b/server/CoreCms.Net.Web.WebApi/Controllers/SQController.cs index a2411b2..2b863da 100644 --- a/server/CoreCms.Net.Web.WebApi/Controllers/SQController.cs +++ b/server/CoreCms.Net.Web.WebApi/Controllers/SQController.cs @@ -268,22 +268,46 @@ 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($"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) { + // 检查是否已经有评价记录,如果没有则创建一条标记记录 + var existingEvaluate = await _sQReservationEvaluateServices.QueryByClauseAsync( + it => it.reservation_id == reId && it.user_id == userId); + + if (existingEvaluate == null) + { + // 创建一条空评价记录,标记该用户已处理过此组局 + var emptyEvaluate = new SQReservationEvaluate() + { + created_at = DateTime.Now, + play_level = 0, + skills_level = 0, + reservation_id = reId, + role = 0, + to_user_id = userId, // 指向自己,表示无人可评价 + user_id = userId, + }; + await _sQReservationEvaluateServices.InsertAsync(emptyEvaluate); + } + return new WebApiDto() { Code = 0, - Data = null + Data = null, + Msg = "暂无可评价的牌友,组局已自动完成" }; } + var userBlack = await _coreCmsUserBlacklistServices.GetUserBlacklists(userId); List obj = new List(); - 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; diff --git a/uniapp/mahjong_group/components/com/page/reservation-evaluate.vue b/uniapp/mahjong_group/components/com/page/reservation-evaluate.vue index 61d84fb..5cae22c 100644 --- a/uniapp/mahjong_group/components/com/page/reservation-evaluate.vue +++ b/uniapp/mahjong_group/components/com/page/reservation-evaluate.vue @@ -76,6 +76,10 @@ const show = async (reservation) => { uni.hideLoading() if (!data || data.length === 0) { uni.showToast({ title: '暂无评价', icon: 'none' }) + // 当没有可评价的用户时,触发刷新事件让组局从页面消失 + setTimeout(() => { + uni.$emit('evaluateSuccess') + }, 1500) return } evaluateList.value = [] From 5e16ceed97ff60b7096f442cac888be682928276 Mon Sep 17 00:00:00 2001 From: zpc Date: Fri, 2 Jan 2026 15:29:46 +0800 Subject: [PATCH 2/3] 32 --- docs/bug/1.0.1_bug文档.md | 49 ++++++++++--------- .../Controllers/SQController.cs | 35 +++++-------- .../com/page/reservation-evaluate.vue | 4 -- 3 files changed, 39 insertions(+), 49 deletions(-) diff --git a/docs/bug/1.0.1_bug文档.md b/docs/bug/1.0.1_bug文档.md index ac535aa..c065984 100644 --- a/docs/bug/1.0.1_bug文档.md +++ b/docs/bug/1.0.1_bug文档.md @@ -81,7 +81,7 @@ ### cs120_14 - 只剩发起者一人的组局无法消失 **状态**: ✅ 已修复 -**类型**: 后端+前端 +**类型**: 后端 **优先级**: 高 **问题描述**: @@ -92,36 +92,41 @@ **问题根本原因**: 1. 签到时选择参与者未到场,参与者被标记为`is_arrive=2`(未赴约)和`status=1`(已退出) -2. `GetEvaluateServices`接口查询条件:`p.status=0 and p.is_arrive=1` -3. 只有发起者满足条件,但发起者被排除(不能评价自己) -4. 返回空列表,前端显示"暂无评价" -5. 由于没有评价记录,组局不会从"我的页面"消失 +2. `GetMyUseReservation`接口查询时没有排除只剩当前用户一人的已结束组局 +3. 组局显示在"我的页面",但点击评价时无人可评价 +4. 由于没有评价记录,组局不会消失 **修复内容**: -1. **后端接口修改** (`server/CoreCms.Net.Web.WebApi/Controllers/SQController.cs`) - - 修改`GetEvaluateServices`接口逻辑 - - 当检测到无人可评价时(只剩发起者一人),自动创建一条空评价记录 - - 空评价记录的`to_user_id`指向自己,表示无人可评价 - - 返回消息"暂无可评价的牌友,组局已自动完成" +1. **后端查询条件修改** (`server/CoreCms.Net.Web.WebApi/Controllers/SQController.cs`) + - 修改`GetMyUseReservation`接口的SQL查询条件 + - 添加条件:对于已结束的组局(status=3),必须存在除当前用户外的其他已赴约参与者 + - 查询逻辑:`r.status < 3 OR (r.status = 3 AND 存在其他可评价用户)` -2. **前端组件修改** (`uniapp/mahjong_group/components/com/page/reservation-evaluate.vue`) - - 修改`show`方法 - - 当收到空数据时,延迟1.5秒后触发`evaluateSuccess`事件 - - 让"我的页面"刷新数据,组局自动消失 +**修复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` (GetEvaluateServices方法) -- `uniapp/mahjong_group/components/com/page/reservation-evaluate.vue` (show方法) +- `server/CoreCms.Net.Web.WebApi/Controllers/SQController.cs` (GetMyUseReservation方法) ## 相关文件 - `uniapp/mahjong_group/components/com/page/reservation-item.vue` - 前端签到按钮显示逻辑 diff --git a/server/CoreCms.Net.Web.WebApi/Controllers/SQController.cs b/server/CoreCms.Net.Web.WebApi/Controllers/SQController.cs index 2b863da..80ca256 100644 --- a/server/CoreCms.Net.Web.WebApi/Controllers/SQController.cs +++ b/server/CoreCms.Net.Web.WebApi/Controllers/SQController.cs @@ -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) @@ -272,35 +283,13 @@ public class SQController : ControllerBase // 过滤掉当前用户自己,只保留可评价的其他用户 var evaluableParticipants = participants?.Where(p => p.user_id != userId).ToList(); - // 如果没有可评价的用户(只剩发起者一人),自动为当前用户创建一条空评价记录 - // 这样该组局就会从"我的页面"消失 if (evaluableParticipants == null || evaluableParticipants.Count == 0) { - // 检查是否已经有评价记录,如果没有则创建一条标记记录 - var existingEvaluate = await _sQReservationEvaluateServices.QueryByClauseAsync( - it => it.reservation_id == reId && it.user_id == userId); - - if (existingEvaluate == null) - { - // 创建一条空评价记录,标记该用户已处理过此组局 - var emptyEvaluate = new SQReservationEvaluate() - { - created_at = DateTime.Now, - play_level = 0, - skills_level = 0, - reservation_id = reId, - role = 0, - to_user_id = userId, // 指向自己,表示无人可评价 - user_id = userId, - }; - await _sQReservationEvaluateServices.InsertAsync(emptyEvaluate); - } - return new WebApiDto() { Code = 0, Data = null, - Msg = "暂无可评价的牌友,组局已自动完成" + Msg = "暂无可评价的牌友" }; } diff --git a/uniapp/mahjong_group/components/com/page/reservation-evaluate.vue b/uniapp/mahjong_group/components/com/page/reservation-evaluate.vue index 5cae22c..61d84fb 100644 --- a/uniapp/mahjong_group/components/com/page/reservation-evaluate.vue +++ b/uniapp/mahjong_group/components/com/page/reservation-evaluate.vue @@ -76,10 +76,6 @@ const show = async (reservation) => { uni.hideLoading() if (!data || data.length === 0) { uni.showToast({ title: '暂无评价', icon: 'none' }) - // 当没有可评价的用户时,触发刷新事件让组局从页面消失 - setTimeout(() => { - uni.$emit('evaluateSuccess') - }, 1500) return } evaluateList.value = [] From 4cdbf82d7748a6db8b3fef837d2e2030a7295b82 Mon Sep 17 00:00:00 2001 From: zpc Date: Fri, 2 Jan 2026 15:32:38 +0800 Subject: [PATCH 3/3] =?UTF-8?q?cs120=5F9=20=E4=BF=AE=E5=A4=8D=E8=AF=B4?= =?UTF-8?q?=E6=98=8E=EF=BC=9A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 问题原因:ApprovePigeonFee 方法中的SQL查询条件 AND p.role != 1 排除了发起者。在2人局中,如果只有发起者到场,查询结果为空,导致鸽子费无法分配给任何人。 修复方案:移除 AND p.role != 1 条件,让发起者也能收到鸽子费分配。现在只要是已到场(is_arrive=1)且状态正常(status=0)的参与者,都能分到未赴约用户的鸽子费。 --- .../Controllers/SQ/SQReservationsController.cs | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/server/CoreCms.Net.Web.Admin/Controllers/SQ/SQReservationsController.cs b/server/CoreCms.Net.Web.Admin/Controllers/SQ/SQReservationsController.cs index 8ffdae7..39b93f3 100644 --- a/server/CoreCms.Net.Web.Admin/Controllers/SQ/SQReservationsController.cs +++ b/server/CoreCms.Net.Web.Admin/Controllers/SQ/SQReservationsController.cs @@ -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)