fix(#575): 预约成功后 booked_num 未实时累加

根因:booked_num 只在签到时累加,预约成功后没有更新。
业务上预约成功就占了号源,booked_num 应立即反映。

修复:
- TicketServiceImpl: 预约成功后 booked_num +1(与 locked_num 同步)
- SchedulePoolMapper: 签到时不再改 booked_num(预约时已加)
- SchedulePoolMapper: refreshPoolStats 统计 booked_num 包含 LOCKED+BOOKED+CHECKED_IN
- SlotStatus: 更新状态流转注释
This commit is contained in:
2026-06-02 10:42:05 +08:00
parent 87b637ed49
commit 74de40f94f
3 changed files with 7 additions and 8 deletions

View File

@@ -8,10 +8,10 @@ import lombok.Getter;
* *
* <pre> * <pre>
* 状态流转: * 状态流转:
* 预约 → 0→2 (锁定), locked_num+1 * 预约 → 0→2 (锁定), locked_num+1, booked_num+1
* 取消预约 → 2→0 (释放), locked_num-1 * 取消预约 → 2→0 (释放), refreshPoolStats 重算
* 签到 → 2→1 (已), locked_num-1, booked_num+1 * 签到 → 2→3 (已签到), locked_num-1
* 退号 → 1→0 (释放), booked_num-1 * 退号 → →0 (释放), refreshPoolStats 重算
* 停诊 → 任意→4 (已取消) * 停诊 → 任意→4 (已取消)
* </pre> * </pre>
* *

View File

@@ -24,7 +24,7 @@ public interface SchedulePoolMapper extends BaseMapper<SchedulePool> {
FROM adm_schedule_slot s FROM adm_schedule_slot s
WHERE s.pool_id = p.id WHERE s.pool_id = p.id
AND s.delete_flag = '0' AND s.delete_flag = '0'
AND (s.status = #{bookedStatus} OR s.status = 3) AND s.status IN (#{bookedStatus}, #{lockedStatus}, 3)
), 0), ), 0),
locked_num = COALESCE(( locked_num = COALESCE((
SELECT COUNT(1) SELECT COUNT(1)
@@ -42,7 +42,7 @@ public interface SchedulePoolMapper extends BaseMapper<SchedulePool> {
@Param("lockedStatus") Integer lockedStatus); @Param("lockedStatus") Integer lockedStatus);
/** /**
* 签到时更新号源池统计:锁定数-1,已约数+1 * 签到时更新号源池统计:锁定数-1booked_num 在预约时已累加)
* *
* @param poolId 号源池ID * @param poolId 号源池ID
* @return 结果 * @return 结果
@@ -50,7 +50,6 @@ public interface SchedulePoolMapper extends BaseMapper<SchedulePool> {
@Update(""" @Update("""
UPDATE adm_schedule_pool UPDATE adm_schedule_pool
SET locked_num = locked_num - 1, SET locked_num = locked_num - 1,
booked_num = booked_num + 1,
update_time = NOW() update_time = NOW()
WHERE id = #{poolId} WHERE id = #{poolId}
AND locked_num > 0 AND locked_num > 0

View File

@@ -267,7 +267,7 @@ public class TicketServiceImpl extends ServiceImpl<TicketMapper, Ticket> impleme
if (poolId != null) { if (poolId != null) {
schedulePoolMapper.update(null, schedulePoolMapper.update(null,
new LambdaUpdateWrapper<SchedulePool>() new LambdaUpdateWrapper<SchedulePool>()
.setSql("locked_num = locked_num + 1, version = version + 1") .setSql("locked_num = locked_num + 1, booked_num = booked_num + 1, version = version + 1")
.set(SchedulePool::getUpdateTime, new Date()) .set(SchedulePool::getUpdateTime, new Date())
.eq(SchedulePool::getId, poolId)); .eq(SchedulePool::getId, poolId));
} }