yxh
8 天以前 68ff33beff11310e830b0615b5a81f83fad0f683
jh-module-ecg/jh-module-ecg-biz/src/main/java/cn/lihu/jh/module/ecg/service/queuesequence/QueueSequenceService.java
@@ -15,6 +15,8 @@
 */
public interface QueueSequenceService {
    void initQueueSequenceTable();
    /**
     * 创建当天序号
     *
@@ -46,6 +48,12 @@
    QueueSequenceDO getQueueSequence(Integer id);
    /**
     * 获得指定检查类型的时间段情况
     *
     */
    List<QueueSequenceDO> selectGivenCheckTypeTimeslot(Integer checkType);
    /**
     * 获得当天序号分页
     *
     * @param pageReqVO 分页查询
@@ -54,4 +62,44 @@
    PageResult<QueueSequenceDO> getQueueSequencePage(QueueSequencePageReqVO pageReqVO);
    void  resetQueueSequence();
    Integer distributeSeqNo(Integer checkType, Integer timeslot);
    Integer distributeVipSeqNo(Integer checkType, Integer timeslot);
    /**
     * 按【检查类型配置的规则】分配排队序号(签到时调用)。
     *
     * <p>规则来自 {@code check_type.seq_rule},取值见
     * {@link cn.lihu.jh.module.ecg.enums.SeqRuleEnum}:
     * <ul>
     *   <li>{@code 0=预约号}   —— 直接用预约系统已下发的号({@code existingSeqNo}),不再分配;</li>
     *   <li>{@code 1=签到序号} —— 当天同检查类型内连续递增,每 9 个号预留 1 个给加急;</li>
     *   <li>{@code 2=时段号}   —— 按预约时段从号池取号(改造前的原有行为,也是未配置时的默认)。</li>
     * </ul>
     *
     * @param checkType     检查类型值({@code check_type.value})
     * @param timeslot      HIS 下发的预约时段(仅规则 2 使用)
     * @param existingSeqNo 预约系统已下发的号(仅规则 0 使用;为 null 时回退到签到序号规则)
     * @param urgent        是否加急({@code jjbz=J})—— 仅规则 1 使用:加急可占用预留号
     * @return 分配给该患者的排队序号(从 1 开始)
     */
    Integer distributeSeqNoByRule(Integer checkType, Integer timeslot,
                                 Integer existingSeqNo, boolean urgent);
    /**
     * 【本需求】同上,但增加「是否 VIP / 临时加号」标记。
     *
     * <p>按时段预约(规则 2)下的两条通道:
     * <ul>
     *   <li>VIP / 加号患者:**直接取本段预留号**;本段预留也满 → 总预留池({@code time_slot=0});</li>
     *   <li>普通患者:本段普通号 → 本段预留号 → 总预留池。</li>
     * </ul>
     * 两条通道最终都能落到「总预留池」,而总预留池**不设上限** ⇒ 不会出现签到失败。
     *
     * @param vip 是否 VIP / 临时加号({@code appointment.is_vip=1} 或 HIS 加急 {@code jjbz=J})
     */
    Integer distributeSeqNoByRule(Integer checkType, Integer timeslot,
                                 Integer existingSeqNo, boolean urgent, boolean vip);
    void initNumber();
}