Files
his/com/openhis/web/outpatient/mapper/RegistrationMapper.java
2026-05-27 00:35:38 +08:00

51 lines
1.8 KiB
Java
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package com.openhis.web.outpatient.mapper;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Update;
import org.apache.ibatis.annotations.Select;
/**
* 门诊挂号相关数据访问层
*
* 新增:
* 1. {@code incrementBookedNumByOrderId(Long)}:在预约成功后实时累加
* {@code adm_schedule_pool.booked_num},防止并发导致预约数不准确。
* 2. {@code selectPoolIdByOrderId(Long)}:辅助获取对应的 pool_id。
*
* 该实现使用乐观锁WHERE booked_num = oldBookedNum+ 行锁,确保并发安全。
*/
@Mapper
public interface RegistrationMapper {
/** 根据订单 ID 查询对应的排班池 ID */
@Select("SELECT pool_id FROM his_order WHERE id = #{orderId}")
Long selectPoolIdByOrderId(@Param("orderId") Long orderId);
/**
* 实时累加预约池的已预约人数booked_num
*
* <p>使用原子 UPDATE避免先查询后更新的并发问题。</p>
*
* @param orderId 订单主键
* @return 更新的记录数,通常为 1若为 0 表示 pool_id 不存在或已被删除。
*/
@Update({
"<script>",
"UPDATE adm_schedule_pool",
"SET booked_num = booked_num + 1",
"WHERE id = (SELECT pool_id FROM his_order WHERE id = #{orderId})",
"</script>"
})
int incrementBookedNumByOrderId(@Param("orderId") Long orderId);
/**
* 将号源状态更新为已取号status = 3用于支付成功后流转状态。
*
* @param orderId 订单ID
* @return 更新记录数
*/
@Update("UPDATE adm_schedule_slot SET status = 3 WHERE order_id = #{orderId}")
int updateSlotStatusToPaid(@Param("orderId") Long orderId);
}