| | |
| | | 3. HurryUP 从 该工位支持的所有检查项目 + 预约时间最早 的【排队中】患者 抓到 该工位 变成 【就诊准备】 |
| | | 4. 常规检查叫下一位、领用叫下一位 从 工位上 第一位【就诊准备】患者 变成 【就诊中】,由于 就诊准备 人数变少,启动 HurryUP |
| | | 5. 预约确认、加急 也会启动 HurryUP,尝试 分流到 诊室 + 分配内部 seqNum |
| | | 6. |
| | | 6. 亲和:患者的多个检查项目可以在工位上一并做,避免多次排队,比如动态心电、动态血压 |
| | | 7. 亲和项:是依附者,依附到已分流到诊室的检查项目,也就说有工位和内部序号 |
| | | 7. 召回,更新内部序号 |
| | | 8. |
| | |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * 领用完成,主动寻求依附 |
| | | */ |
| | | 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()); // 亲和-领用 |
| | |
| | | } |
| | | } |
| | | |
| | | // 如果存在 [亲和-领用] 亲和项,则选择 其中一个亲和项 接替其 处于 [安装中] |
| | | private void procAffinityWhenInstallFinish(QueueDO bedInstallingQueueItem, Integer[] affinityCheckTypes) { |
| | | List<QueueDO> affinityAffinityReceivedItems = queueMapper.getCurPatGivenCheckTypesAndStatus( |
| | | bedInstallingQueueItem.getPatId(), affinityCheckTypes, QueueStatusEnum.AFFINITY_RECEIVED.getStatus()); |
| | |
| | | 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()); |
| | |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * 预约确认后,主动寻求依附 |
| | | */ |
| | | 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()); // [亲和-排队] 状态 |
| | |
| | | refreshPriorityQueue(bedQueueBO); |
| | | } |
| | | |
| | | /** |
| | | * 有检查项分流到诊室后,也就是进入[就诊准备]后,拉 [排队中] + 具有亲和性的 检查项 来依附该检查项 |
| | | */ |
| | | private void procAffinityWhenPreempt(QueueDO preemptQueueItem, Integer[] affinityCheckTypes) { |
| | | List<QueueDO> affinityItems = queueMapper.getCurPatGivenCheckTypesAndStatus( |
| | | preemptQueueItem.getPatId(), affinityCheckTypes, QueueStatusEnum.WAITING.getStatus()); |
| | |
| | | }); |
| | | } |
| | | |
| | | /** |
| | | * 检查项进入到 [安装中] 时,拉 [已领用] + 具有亲和性的 检查项 来依附该检查项 |
| | | */ |
| | | 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++) { |