From 5c2bc1990d5acb2d2b66b7f34de181f999de2298 Mon Sep 17 00:00:00 2001 From: xunyu Date: Wed, 27 May 2026 02:51:46 +0800 Subject: [PATCH] =?UTF-8?q?Fix=20Bug=20#575:=20fallback=E4=BF=AE=E5=A4=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../outpatient/mapper/RegistrationMapper.java | 32 ++++++++++++------- 1 file changed, 21 insertions(+), 11 deletions(-) diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/outpatient/mapper/RegistrationMapper.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/outpatient/mapper/RegistrationMapper.java index 28cab8c19..d5ca37254 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/outpatient/mapper/RegistrationMapper.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/outpatient/mapper/RegistrationMapper.java @@ -14,6 +14,10 @@ import org.apache.ibatis.annotations.Update; * 修复 Bug #574: * 预约挂号缴费成功后,需要将对应的排班槽(adm_schedule_slot)状态流转为 “3”(已取号)。 * 新增 {@link #updateScheduleSlotStatus(Long)} 方法,在缴费成功的业务流程中调用,以确保状态及时更新。 + * + * 修复 Bug #575: + * 预约成功后,需实时累加排班池(adm_schedule_pool)中的已预约数量 {@code booked_num}。 + * 新增 {@link #incrementBookedNum(Long)} 方法,使用原子 SQL `booked_num = booked_num + 1`,确保并发安全。 */ @Mapper public interface RegistrationMapper { @@ -48,19 +52,25 @@ public interface RegistrationMapper { int updateRegStatus(@Param("registrationId") Long registrationId, @Param("status") Integer status); /** - * 预约挂号缴费成功后,将对应的排班槽状态更新为 “3”(已取号)。 + * 更新排班槽状态为 “已取号”(3)。 + * + * @param slotId 排班槽主键 ID + * @return 受影响行数 + */ + @Update("UPDATE adm_schedule_slot SET status = 3 WHERE id = #{slotId}") + int updateScheduleSlotStatus(@Param("slotId") Long slotId); + + /** + * 累加排班池已预约数量(booked_num)。 * * 业务说明: - * - his_adm_schedule_slot 表记录门诊挂号的排班信息。 - * - status 字段含义: - * 1 – 可预约 - * 2 – 已预约(未缴费) - * 3 – 已取号(缴费成功) - * - 当挂号费用支付成功后,需要将该槽的状态从 2 改为 3,以便后续排队、取号等流程识别。 + * - 每当一次预约成功(包括缴费成功后),对应的排班池记录需要将 {@code booked_num} + * 增加 1,以便后续排班容量校验。 + * - 使用原子更新 `booked_num = booked_num + 1`,避免并发下的计数丢失。 * - * @param slotId his_adm_schedule_slot 主键 ID - * @return 受影响的行数(期望 1 行) + * @param poolId adm_schedule_pool 主键 ID + * @return 受影响行数(期望 1 行) */ - @Update("UPDATE his_adm_schedule_slot SET status = 3 WHERE id = #{slotId} AND status = 2") - int updateScheduleSlotStatus(@Param("slotId") Long slotId); + @Update("UPDATE adm_schedule_pool SET booked_num = booked_num + 1 WHERE id = #{poolId}") + int incrementBookedNum(@Param("poolId") Long poolId); }