| | |
| | | @Update("update lihu.queue_sequence set queue_vip_no = queue_vip_no + 1 where check_type=#{checkType} and time_slot=#{timeslot} and queue_vip_no=#{curQueueVipNo} and queue_vip_no < queue_vip_full; ") |
| | | Integer updateGivenCheckTypeTimeslotVipSeqNo(@Param("checkType") Integer checkType, @Param("timeslot") Integer timeslot, @Param("curQueueVipNo") Integer curQueueVipNo); |
| | | |
| | | @Update("UPDATE lihu.queue_sequence SET queue_no=queue_set,queue_vip_no=queue_vip_set WHERE deleted=0; ") |
| | | @Update("UPDATE lihu.queue_sequence SET queue_no=COALESCE(queue_set, 0), queue_vip_no=COALESCE(queue_vip_set, 0) WHERE deleted=0; ") |
| | | Integer initNumber(); |
| | | |
| | | // ========================================================================= |
| | | // 【本需求】按时段预约三级取号:本段普通号 → 本段预留号 → 总预留池(time_slot=0) |
| | | // |
| | | // 号段约定(普通在前、预留紧跟其后、下一段起点 = 上一段 queue_vip_full): |
| | | // 普通号: queue_set+1 … queue_full |
| | | // 预留号: queue_full+1 … queue_vip_full |
| | | // 总预留池: 号段放在当天所有时段之后,且**不设上限** |
| | | // ========================================================================= |
| | | |
| | | /** 取某时段整行(拿到 queue_set/queue_full/queue_vip_set/queue_vip_full 边界) */ |
| | | @Select("select * from lihu.queue_sequence where check_type=#{checkType} and time_slot=#{timeslot} and deleted=0 limit 1") |
| | | QueueSequenceDO selectSegByCheckTypeAndTimeSlot(@Param("checkType") Integer checkType, |
| | | @Param("timeslot") Integer timeslot); |
| | | |
| | | /** 取该检查类型的「总预留池」行(time_slot = 0) */ |
| | | @Select("select * from lihu.queue_sequence where check_type=#{checkType} and time_slot=0 and deleted=0 limit 1") |
| | | QueueSequenceDO selectTotalPool(@Param("checkType") Integer checkType); |
| | | |
| | | /** 该检查类型当天所有时段的**最大预留号上限**(用于给总预留池定位号段起点) */ |
| | | @Select("select COALESCE(MAX(queue_vip_full), 0) from lihu.queue_sequence " |
| | | + " where check_type=#{checkType} and time_slot<>0 and deleted=0") |
| | | Integer selectMaxVipFullOfCheckType(@Param("checkType") Integer checkType); |
| | | |
| | | /** |
| | | * 总预留池发号:**不设上限**。 |
| | | * <p> |
| | | * 语义与其它号池保持一致({@code queue_vip_full} = 当前最大可发号): |
| | | * 号 +1 的同时把 {@code queue_vip_full} 顶上来,因此永远不会出现"总池已满、签不上"。 |
| | | */ |
| | | @Update("update lihu.queue_sequence " |
| | | + " set queue_vip_no = queue_vip_no + 1, " |
| | | + " queue_vip_full = GREATEST(queue_vip_full, queue_vip_no + 1) " |
| | | + " where check_type=#{checkType} and time_slot=0 and deleted=0") |
| | | Integer advanceTotalPoolVipNo(@Param("checkType") Integer checkType); |
| | | |
| | | /** 读回总预留池当前已发号(必须与推进在同一事务内) */ |
| | | @Select("select queue_vip_no from lihu.queue_sequence where check_type=#{checkType} and time_slot=0 and deleted=0") |
| | | Integer selectTotalPoolVipNo(@Param("checkType") Integer checkType); |
| | | |
| | | /** |
| | | * 【修复「时段不全/已满导致没法签到」】判断指定 (检查类型, 时段) 是否**还有可取号**。 |
| | | * <p> |