eight
2025-04-01 b63358eeefeb4c7d0078cffe5dbba0380a740afc
update 亲和功能
已修改4个文件
35 ■■■■ 文件已修改
README.md 5 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
jh-module-ecg/jh-module-ecg-biz/src/main/java/cn/lihu/jh/module/ecg/service/devrent/DevRentServiceImpl.java 12 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
jh-module-ecg/jh-module-ecg-biz/src/main/java/cn/lihu/jh/module/ecg/service/queue/QueueServiceImpl.java 11 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
jh-module-ecg/jh-module-ecg-biz/src/main/java/cn/lihu/jh/module/ecg/service/queue/QueueServiceTxFunctions.java 7 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
README.md
@@ -12,4 +12,7 @@
3. HurryUP 从 该工位支持的所有检查项目 + 预约时间最早 的【排队中】患者 抓到 该工位 变成 【就诊准备】
4. 常规检查叫下一位、领用叫下一位 从 工位上 第一位【就诊准备】患者 变成 【就诊中】,由于 就诊准备 人数变少,启动 HurryUP 
5. 预约确认、加急 也会启动 HurryUP,尝试 分流到 诊室 + 分配内部 seqNum
6.
6. 亲和:患者的多个检查项目可以在工位上一并做,避免多次排队,比如动态心电、动态血压
7. 亲和项:是依附者,依附到已分流到诊室的检查项目,也就说有工位和内部序号
7. 召回,更新内部序号
8.
jh-module-ecg/jh-module-ecg-biz/src/main/java/cn/lihu/jh/module/ecg/service/devrent/DevRentServiceImpl.java
@@ -846,10 +846,15 @@
        }
    }
    /**
     * 领用完成,主动寻求依附
     */
    private void procAffinityWhenReadyFinish(/*IN,OUT*/QueueDO bedOnStageQueueItem, Integer[] affinityCheckTypes) {
        // 如果存在 [安装中] 亲和项,则跟随其中一个亲和项
        List<QueueDO> affinityInstallingItems = queueMapper.getCurPatGivenCheckTypesAndStatus(
                bedOnStageQueueItem.getPatId(), affinityCheckTypes, QueueStatusEnum.INSTALLING.getStatus());
        // 如果存在 [安装中] [安装过号] [安装召回] 能被依附的检查项,则依附到其中一个检查项
        List<QueueDO> affinityInstallingItems = queueMapper.getCurPatGivenCheckTypesAndStatusList(
                bedOnStageQueueItem.getPatId(), affinityCheckTypes,
                List.of(QueueStatusEnum.INSTALLING.getStatus(), QueueStatusEnum.PASSED_INSTALL.getStatus(),
                        QueueStatusEnum.RECALLED_INSTALL.getStatus()));
        if (!affinityInstallingItems.isEmpty()) {
            QueueDO affinityInstallingItem = affinityInstallingItems.get(0);
            bedOnStageQueueItem.setStatus(QueueStatusEnum.AFFINITY_RECEIVED.getStatus()); // 亲和-领用
@@ -867,6 +872,7 @@
        }
    }
    // 如果存在 [亲和-领用] 亲和项,则选择 其中一个亲和项 接替其 处于 [安装中]
    private void procAffinityWhenInstallFinish(QueueDO bedInstallingQueueItem, Integer[] affinityCheckTypes) {
        List<QueueDO> affinityAffinityReceivedItems = queueMapper.getCurPatGivenCheckTypesAndStatus(
                bedInstallingQueueItem.getPatId(), affinityCheckTypes, QueueStatusEnum.AFFINITY_RECEIVED.getStatus());
jh-module-ecg/jh-module-ecg-biz/src/main/java/cn/lihu/jh/module/ecg/service/queue/QueueServiceImpl.java
@@ -664,6 +664,9 @@
        return roomDO;
    }
    /**
     * 装机召回,是抢占式的,会改变装机工位
     */
    private void procAffinityWhenInstallRecall(String patId, Integer[] affinityCheckTypes, Long roomId_operator, String bedNo_operator) {
        List<QueueDO> affinityItems = queueMapper.getCurPatGivenCheckTypesAndStatus(
                        patId, affinityCheckTypes, QueueStatusEnum.AFFINITY_RECEIVED.getStatus());
@@ -676,11 +679,15 @@
        }
    }
    /**
     * 预约确认后,主动寻求依附
     */
    private void procAffinityWhenQueue(/*IN, OUT*/QueueSaveReqVO queueSaveReqVO, Integer[] affinityCheckTypes) {
        // 如果存在 处于 [就诊准备中] | [就诊中] 的亲和项,则跟随其中一个亲和项
        // 如果存在 [就诊准备] [就诊中] [过号] [已召回] 能被依附的检查项,则依附到其中一个
        List<QueueDO> affinityItems = queueMapper.getCurPatGivenCheckTypesAndStatusList(
                queueSaveReqVO.getPatId(), affinityCheckTypes,
                List.of(QueueStatusEnum.READY.getStatus(), QueueStatusEnum.ONSTAGE.getStatus()));
                List.of(QueueStatusEnum.READY.getStatus(), QueueStatusEnum.ONSTAGE.getStatus(),
                        QueueStatusEnum.PASSED.getStatus(), QueueStatusEnum.RECALLED.getStatus()));
        if (!affinityItems.isEmpty()) {
            QueueDO queueItem = affinityItems.get(0);
            queueSaveReqVO.setStatus(QueueStatusEnum.AFFINITY_WAITING.getStatus()); // [亲和-排队] 状态
jh-module-ecg/jh-module-ecg-biz/src/main/java/cn/lihu/jh/module/ecg/service/queue/QueueServiceTxFunctions.java
@@ -548,6 +548,9 @@
        refreshPriorityQueue(bedQueueBO);
    }
    /**
     * 有检查项分流到诊室后,也就是进入[就诊准备]后,拉 [排队中] + 具有亲和性的 检查项 来依附该检查项
     */
    private void procAffinityWhenPreempt(QueueDO preemptQueueItem, Integer[] affinityCheckTypes) {
        List<QueueDO> affinityItems = queueMapper.getCurPatGivenCheckTypesAndStatus(
                preemptQueueItem.getPatId(), affinityCheckTypes, QueueStatusEnum.WAITING.getStatus());
@@ -626,8 +629,10 @@
        });
    }
    /**
     * 检查项进入到 [安装中] 时,拉 [已领用] + 具有亲和性的 检查项 来依附该检查项
     */
    private void procAffinityWhenSomeOneEntryInstalling(String patId, Long roomId_operator, String bedNo_operator, Integer[] affinityCheckTypes) {
        // 对于 刚进入到 [安装中]的项,  如果存在 [已领用] 的亲和项,则需要其跟随
        List<QueueDO> affinityItems = queueMapper.getCurPatGivenCheckTypesAndStatus(
                                patId, affinityCheckTypes, QueueStatusEnum.RECEIVED.getStatus());
        for (int i = 0; i < affinityItems.size(); i++) {