| | |
| | | return error(ROOM_NOT_SIT); |
| | | } |
| | | |
| | | BedQueueBO bedQueueBO = queueServiceTxFunctions.getBedQueueBO(roomId, bedNo); |
| | | if (null == bedQueueBO) { |
| | | BedBO bedBO = queueServiceTxFunctions.getBedQueueBO(roomId, bedNo); |
| | | if (null == bedBO) { |
| | | log.error("getRoom mapBedVsQueue DONOT existed. " + roomId + " " + bedNo); |
| | | return error(QUEUE_BED_NOT_EXIST); |
| | | } |
| | |
| | | queueSaveReqVO.setStatus(QueueStatusEnum.WAITING.getStatus()); |
| | | |
| | | // 处理 检查项目.亲和性 逻辑 |
| | | // 如果存在 处于 [就诊准备中] | [就诊中] 的亲和项,则跟随其中一个亲和项 |
| | | CheckTypeDO checkTypeDO = queueServiceTxFunctions.getCheckTypeItem( queueSaveReqVO.getBookCheckType() ); |
| | | if ( checkTypeDO.getAffinityCheckTypes().length > 0) { |
| | | List<QueueDO> affinityItems = queueMapper.getCurPatGivenCheckTypesAndStatusList( queueSaveReqVO.getPatId(), checkTypeDO.getAffinityCheckTypes(), |
| | | List.of(QueueStatusEnum.READY.getStatus(), QueueStatusEnum.ONSTAGE.getStatus())); |
| | | if (!affinityItems.isEmpty()) { |
| | | QueueDO queueItem = affinityItems.get(0); |
| | | queueSaveReqVO.setStatus(QueueStatusEnum.AFFINITY_WAITING.getStatus()); // [亲和-排队] 状态 |
| | | queueSaveReqVO.setRoomId(queueItem.getRoomId()); |
| | | queueSaveReqVO.setRoomName(queueItem.getRoomName()); |
| | | queueSaveReqVO.setBedNo(queueItem.getBedNo()); |
| | | queueSaveReqVO.setSeqNum(queueItem.getSeqNum()); |
| | | } |
| | | procAffinityWhenQueue(/*IN,OUT*/queueSaveReqVO, checkTypeDO.getAffinityCheckTypes()); |
| | | } |
| | | |
| | | QueueDO queue = BeanUtils.toBean(queueSaveReqVO, QueueDO.class); |
| | | queueMapper.insert(queue); |
| | | |
| | | DevRentDO devRent = BeanUtils.toBean(queueSaveReqVO, DevRentDO.class); |
| | | devRent.setApplyNo( queueSaveReqVO.getApplyNo() ); |
| | | devRent.setEpisodeId( queueSaveReqVO.getEpisodeId() ); |
| | | devRent.setState( DevRentStateEnum.FREE.getState() ); |
| | | devRent.setPatDetails( queueSaveReqVO.getPatDetails() ); |
| | | devRent.setCheckType( queueSaveReqVO.getBookCheckType() ); |
| | | devRentMapper.insert(devRent); |
| | | |
| | | startHurryUpOneCheckType( queue.getBookCheckType() ); |
| | | } |
| | | |
| | | @Override |
| | | public List<QueueDO> selectBookSeqNumByAppointIdList(List<Long> appointIdList) { |
| | | return queueMapper.selectBookSeqNumByAppointIdList( appointIdList ); |
| | | } |
| | | |
| | | // 常规检查 叫号 |
| | |
| | | return; |
| | | |
| | | startNextInstallPatient(roomId, bedNo); |
| | | } |
| | | |
| | | @Override |
| | | public void passWaitingPatient(String patId, Integer bookCheckType) { |
| | | // 从 DB 把 排队中的人 设置为 过号-排队中 |
| | | Integer ret = queueMapper.updatePatientQueueStatus(patId, bookCheckType, |
| | | QueueStatusEnum.WAITING.getStatus(), QueueStatusEnum.PASSED_WAITING.getStatus()); |
| | | } |
| | | |
| | | public void passNextPatient(Long roomId, String bedNo) { |
| | |
| | | return patientStatisticVO; |
| | | } |
| | | |
| | | @Override |
| | | public Integer recallPassWaitingPatient(String patId, Integer bookCheckType) { |
| | | // 从 DB 把 过号-排队中的人 设置为 排队中 |
| | | Integer ret = queueMapper.updatePatientQueueStatus(patId, bookCheckType, |
| | | QueueStatusEnum.PASSED_WAITING.getStatus(), QueueStatusEnum.WAITING.getStatus()); |
| | | |
| | | return ret; |
| | | } |
| | | |
| | | public PatientStatisticVO getBedDevReadyStatistic(Long roomId, String bedNo) { |
| | | PatientStatisticVO patientStatisticVO = new PatientStatisticVO(); |
| | | List<BedQueueStatisticDO> bedQueueStatisticDOList = queueMapper.bedQueueStatistic(roomId, bedNo); |
| | |
| | | } |
| | | |
| | | @Override |
| | | public Integer recallInstallPatient(Long roomId, String bedNo, String patId, Integer checkType, String bedNo_operator) { |
| | | public Integer recallInstallPatient(Long roomId, String bedNo, String patId, Integer checkType, Long roomId_operator, String bedNo_operator) { |
| | | Integer updateNum = queueMapper.recallPassedInstallPatient(roomId, bedNo_operator, patId, checkType, |
| | | QueueStatusEnum.PASSED_INSTALL.getStatus(), QueueStatusEnum.RECALLED_INSTALL.getStatus()); |
| | | |
| | | // 检查项目.亲和性 处理 |
| | | if (null != updateNum && 1 == updateNum) { |
| | | updateAffinityItemsWhenInstallRecall(patId, checkType, bedNo_operator); |
| | | CheckTypeDO checkTypeDO = queueServiceTxFunctions.getCheckTypeItem( checkType ); |
| | | if ( checkTypeDO.getAffinityCheckTypes().length > 0) { |
| | | procAffinityWhenInstallRecall(patId, checkTypeDO.getAffinityCheckTypes(), roomId_operator, bedNo_operator); |
| | | } |
| | | } |
| | | |
| | | // 安装工位 不涉及 优先队列 |
| | |
| | | return updateNum; |
| | | } |
| | | |
| | | /** |
| | | * 加急 |
| | | * @param patId |
| | | * @param jumped |
| | | * @return |
| | | */ |
| | | @Override |
| | | public Integer patientJump(String patId, Byte jumped) { |
| | | Integer updateNum = queueMapper.queueJump(patId, QueueStatusEnum.WAITING.getStatus(), jumped); |
| | | public Integer patientJump(String patId, Integer bookCheckType, Byte jumped) { |
| | | Integer updateNum = queueMapper.queueJump(patId, bookCheckType, QueueStatusEnum.WAITING.getStatus(), jumped); |
| | | |
| | | QueueDO queueDO = queueMapper.getQueueByPatId(patId); |
| | | QueueDO queueDO = queueMapper.getQueueByPatId(patId, bookCheckType); |
| | | startHurryUpOneCheckType(Integer.valueOf(queueDO.getBookCheckType())); |
| | | return updateNum; |
| | | } |
| | | |
| | | @Override |
| | | public RoomDO getDocRoomInfo(Long docId) { |
| | | public List<RoomDO> getDocRoomInfo(Long docId) { |
| | | return roomMapper.getRoomByDocId(docId); |
| | | } |
| | | |
| | | /** |
| | | * 获取 指定工位 待检查|待领用的人 |
| | | * 获取 指定工位 【检查|领用】相关的患者 |
| | | * @param roomId |
| | | * @param bedNo |
| | | * @return |
| | | */ |
| | | @Override |
| | | public List<QueueDO> getToBeCheckedPatient(Long roomId, String bedNo) { |
| | | public List<QueueDO> getCheckRelatedPatient(Long roomId, String bedNo) { |
| | | List<Integer> queueStatusList = new ArrayList<>(); |
| | | queueStatusList.add(QueueStatusEnum.RECALLED.getStatus()); |
| | | queueStatusList.add(QueueStatusEnum.READY.getStatus()); |
| | | queueStatusList.add(QueueStatusEnum.ONSTAGE.getStatus()); |
| | | queueStatusList.add(QueueStatusEnum.PASSED.getStatus()); |
| | | queueStatusList.add(QueueStatusEnum.AFFINITY_WAITING.getStatus()); |
| | | queueStatusList.add(QueueStatusEnum.AFFINITY.getStatus()); |
| | | List<QueueDO> queueDOList = getBedQueueByStatus(roomId, bedNo, queueStatusList); |
| | | |
| | | //把 [亲和的] 挪到主项后面 |
| | |
| | | ListIterator<QueueDO> iterator = queueDOList.listIterator(); |
| | | while (iterator.hasNext()) { |
| | | QueueDO item = iterator.next(); |
| | | if (item.getStatus() == QueueStatusEnum.AFFINITY_WAITING.getStatus()) { |
| | | if (item.getStatus() == QueueStatusEnum.AFFINITY.getStatus()) { |
| | | iterator.remove(); |
| | | affinityWaitingList.add(item); |
| | | } |
| | |
| | | return queueDOList; |
| | | } |
| | | |
| | | /** |
| | | * 获取 指定工位 【安装】相关的患者 |
| | | * @param roomId |
| | | * @param bedNo |
| | | * @return |
| | | */ |
| | | @Override |
| | | public List<QueueDO> getToBeInstalledPatient(Long roomId, String bedNo) { |
| | | public List<QueueDO> getInstallRelatedPatient(Long roomId, String bedNo) { |
| | | List<Integer> queueStatusList = new ArrayList<>(); |
| | | queueStatusList.add(QueueStatusEnum.RECEIVED.getStatus()); |
| | | queueStatusList.add(QueueStatusEnum.PASSED_INSTALL.getStatus()); |
| | | queueStatusList.add(QueueStatusEnum.AFFINITY_RECEIVED.getStatus()); |
| | | List<QueueDO> queueDOList = getRoomQueueByStatus(roomId, queueStatusList); |
| | | queueStatusList.add(QueueStatusEnum.AFFINITY_INSTALL.getStatus()); |
| | | List<QueueDO> queueDOList = getRoomQueueByStatus(roomId, queueStatusList); // 可以看到本诊室 待安装的患者 |
| | | |
| | | queueStatusList.clear(); |
| | | queueStatusList.add(QueueStatusEnum.INSTALLING.getStatus()); |
| | | queueStatusList.add(QueueStatusEnum.RECALLED_INSTALL.getStatus()); |
| | | queueDOList.addAll(0, getBedQueueByStatus(roomId, bedNo, queueStatusList) ); |
| | | queueDOList.addAll(0, getBedQueueByStatus(roomId, bedNo, queueStatusList) ); // 当前工位的 |
| | | |
| | | //把 [亲和的] 挪到主项后面 |
| | | List<QueueDO> affinityReceivedList = new ArrayList<>(); |
| | | ListIterator<QueueDO> iterator = queueDOList.listIterator(); |
| | | while (iterator.hasNext()) { |
| | | QueueDO item = iterator.next(); |
| | | if (item.getStatus() == QueueStatusEnum.AFFINITY_RECEIVED.getStatus()) { |
| | | if (item.getStatus() == QueueStatusEnum.AFFINITY_INSTALL.getStatus()) { |
| | | iterator.remove(); |
| | | affinityReceivedList.add(item); |
| | | } |
| | |
| | | return roomDO; |
| | | } |
| | | |
| | | private void updateAffinityItemsWhenInstallRecall(String patId, Integer checkType, String bedNo_operator) { |
| | | CheckTypeDO checkTypeDO = queueServiceTxFunctions.getCheckTypeItem( checkType ); |
| | | if ( checkTypeDO.getAffinityCheckTypes().length > 0) { |
| | | List<QueueDO> affinityItems = queueMapper.getCurPatGivenCheckTypesAndStatus(patId, |
| | | checkTypeDO.getAffinityCheckTypes(), QueueStatusEnum.AFFINITY_RECEIVED.getStatus()); |
| | | for (int i = 0; i < affinityItems.size(); i++) { |
| | | QueueDO queueItem = affinityItems.get(i); |
| | | queueItem.setBedNo( bedNo_operator ); |
| | | //queueItem.setSeqNum( preemptQueueItem.getSeqNum() ); // 装机时 内部序号不变 |
| | | queueMapper.updateById(queueItem); |
| | | } |
| | | /** |
| | | * 装机召回,是抢占式的,会改变装机工位 |
| | | */ |
| | | private void procAffinityWhenInstallRecall(String patId, Integer[] affinityCheckTypes, Long roomId_operator, String bedNo_operator) { |
| | | List<QueueDO> affinityItems = queueMapper.getCurPatGivenCheckTypesAndStatus( |
| | | patId, affinityCheckTypes, QueueStatusEnum.AFFINITY_INSTALL.getStatus()); |
| | | for (int i = 0; i < affinityItems.size(); i++) { |
| | | QueueDO queueItem = affinityItems.get(i); |
| | | queueItem.setRoomId( roomId_operator ); |
| | | queueItem.setBedNo( bedNo_operator ); |
| | | //queueItem.setSeqNum( preemptQueueItem.getSeqNum() ); // 装机时 内部序号不变 故不需更新 |
| | | queueMapper.updateById(queueItem); |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * 预约确认后,主动寻求依附 |
| | | */ |
| | | 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(), |
| | | QueueStatusEnum.PASSED.getStatus(), QueueStatusEnum.RECALLED.getStatus())); |
| | | if (!affinityItems.isEmpty()) { |
| | | QueueDO queueItem = affinityItems.get(0); |
| | | queueSaveReqVO.setStatus(QueueStatusEnum.AFFINITY.getStatus()); // [亲和-排队] 状态 |
| | | queueSaveReqVO.setAffinityItem( 1 ); |
| | | queueSaveReqVO.setRoomId(queueItem.getRoomId()); |
| | | queueSaveReqVO.setRoomName(queueItem.getRoomName()); |
| | | queueSaveReqVO.setBedNo(queueItem.getBedNo()); |
| | | queueSaveReqVO.setSeqNum(queueItem.getSeqNum()); |
| | | } |
| | | } |
| | | |
| | | } |