From 5a5d8fa90492701d1a8a7142e918f45258845b44 Mon Sep 17 00:00:00 2001 From: zhaoyun Date: Thu, 28 May 2026 23:50:43 +0800 Subject: [PATCH] =?UTF-8?q?fix(#575):=20=E8=AF=B7=E4=BF=AE=E5=A4=8D=20Bug?= =?UTF-8?q?=20#575=EF=BC=9A[=E4=B8=80=E8=88=AC]=20[=E9=97=A8=E8=AF=8A?= =?UTF-8?q?=E9=A2=84=E7=BA=A6=E6=8C=82=E5=8F=B7]=20=E9=A2=84=E7=BA=A6?= =?UTF-8?q?=E6=88=90=E5=8A=9F=E5=90=8E=EF=BC=8C=E6=95=B0=E6=8D=AE=E5=BA=93?= =?UTF-8?q?=E8=A1=A8=20adm=5Fschedule=5Fpool=20=E4=B8=AD=E7=9A=84=20booked?= =?UTF-8?q?=5Fnum=20=E5=AD=97=E6=AE=B5=E6=9C=AA=E5=AE=9E=E6=97=B6=E7=B4=AF?= =?UTF-8?q?=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 根因: - 门诊预约挂号入口 `AppointmentServiceImpl.bookSlot()` 中,只更新了 `adm_schedule_slot`(号源槽)的状态为"已预约",**完全没有操作** `adm_schedule_pool`(号源池),导致 `booked_num` 从未累加。 - ### 全链路数据流确认 - | 环节 | 文件 | 状态 | - |---|---|---| 修复: - | 退号 | `RegistrationController` → `RegistrationCancelServiceImpl.cancelRegistration()` → 正确减 `booked_num` | ✅ | - | 签到缴费 | `AppointmentController.confirm()` → `AppointmentServiceImpl.confirmPaymentAndTake()` → 只涉及 slot 状态流转 | ✅ 不涉及 | - ### 修改文件 - 1. `AppointmentSlotMapper.java`** — 新增 `selectPoolIdBySlotId` 方法,根据 `slotId` 查询关联的 `pool_id` - 2. `AppointmentServiceImpl.java`** — 注入 `SchedulePoolMapper`,在 `bookSlot()` 中: - 更新 slot 状态为已预约后 - 通过 `slotMapper.selectPoolIdBySlotId(slotId)` 获取关联 `poolId` - 调用 `schedulePoolMapper.incrementBookedNum(poolId)` **原子递增** `booked_num` - 原子操作(`SET booked_num = booked_num + 1`)保证并发安全,无竞态条件 - ### 编译验证 - 项目缺少 pom.xml 无法在当前工作树直接编译(代码库为部分导出),两个修改文件的语法和类型引用已验证正确性: - `SchedulePoolMapper.incrementBookedNum` 在 `web/appointment/mapper/SchedulePoolMapper.java:16-17` 已定义 - `selectPoolIdBySlotId` 返回 `Long`,已做 null 检查 --- .../mapper/AppointmentSlotMapper.java | 14 +++++++-- .../service/AppointmentServiceImpl.java | 30 ++++++++++++++++--- 2 files changed, 38 insertions(+), 6 deletions(-) diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/outpatient/mapper/AppointmentSlotMapper.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/outpatient/mapper/AppointmentSlotMapper.java index 7dedadb14..145e900f5 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/outpatient/mapper/AppointmentSlotMapper.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/outpatient/mapper/AppointmentSlotMapper.java @@ -9,8 +9,9 @@ import java.util.Map; /** * 门诊号源预约 Mapper - * 修复 Bug #570:规范号源状态流转,移除“已锁定”状态,确保预约成功后状态正确落库为 2(已预约) + * 修复 Bug #570:规范号源状态流转,移除"已锁定"状态,确保预约成功后状态正确落库为 2(已预约) * 新增:状态流转至已取号(3) 的接口,解决预约签到缴费成功后状态未及时流转的问题(Bug #574) + * 修复 Bug #575:新增 selectPoolIdBySlotId 方法,用于预约时获取 pool_id 以累加 booked_num */ @Mapper public interface AppointmentSlotMapper { @@ -33,9 +34,18 @@ public interface AppointmentSlotMapper { "WHERE id = #{slotId} AND status = 2") int updateSlotToTaken(@Param("slotId") Long slotId); + /** + * 根据号源ID查询关联的号源池ID(用于预约时累加 booked_num) + * + * @param slotId 号源主键 + * @return 关联的号源池ID + */ + @Select("SELECT pool_id FROM adm_schedule_slot WHERE id = #{slotId}") + Long selectPoolIdBySlotId(@Param("slotId") Long slotId); + /** * 根据状态查询号源列表 - * 修复点:支持按 status=2 精确查询,兼容前端“已预约”筛选条件 + * 修复点:支持按 status=2 精确查询,兼容前端"已预约"筛选条件 */ @Select("