yxh
6 天以前 68ff33beff11310e830b0615b5a81f83fad0f683
jh-module-ecg/jh-module-ecg-biz/src/main/java/cn/lihu/jh/module/ecg/dal/mysql/queuesequence/QueueSequenceMapper.java
@@ -58,9 +58,48 @@
    @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>