| | |
| | | import cn.lihu.jh.module.ecg.enums.QueueStatusEnum; |
| | | import cn.lihu.jh.module.system.api.oauth2.OAuth2TokenApi; |
| | | import lombok.extern.slf4j.Slf4j; |
| | | import org.apache.ibatis.annotations.Param; |
| | | import org.springframework.stereotype.Component; |
| | | import org.springframework.validation.annotation.Validated; |
| | | |
| | |
| | | |
| | | ConcurrentHashMap<String, BedQueueBO > mapBedVsQueue = new ConcurrentHashMap<>(); |
| | | |
| | | //PriorityBlockingQueue<BedQueueBO> priorityQueue = new PriorityBlockingQueue<>(); |
| | | Map<Integer, PriorityBlockingQueue<BedQueueBO>> mapCheckTypeVsPriorityQueue = new HashMap(); |
| | | // 基于类型的, 检查或装机的优先队列 |
| | | Map<Integer, PriorityBlockingQueue<BedQueueBO>> mapCheckPriorityQueue = new HashMap(); |
| | | |
| | | // 基于类型的, 装机准备的优先队列 |
| | | Map<Integer, PriorityBlockingQueue<BedQueueBO>> mapReadyPriorityQueue = new HashMap(); |
| | | |
| | | Map<Integer, Integer> mapCheckTypeVsReadyMax = null; |
| | | |
| | |
| | | * 2. 服务运维重启时 |
| | | */ |
| | | public ErrorCode bedReload() { |
| | | mapCheckTypeVsPriorityQueue.clear(); |
| | | mapCheckPriorityQueue.clear(); |
| | | mapBedVsQueue.clear(); |
| | | |
| | | // 清除非当天的排队人员 |
| | |
| | | |
| | | public void hurryupOneCheckType(Integer checkType) { |
| | | |
| | | PriorityBlockingQueue<BedQueueBO> priorityQueue = mapCheckTypeVsPriorityQueue.get(checkType); |
| | | PriorityBlockingQueue<BedQueueBO> priorityQueue = mapCheckPriorityQueue.get(checkType); |
| | | if (null == priorityQueue) |
| | | return; |
| | | |
| | |
| | | public MonitorInfoVO getMonitorInfo() { |
| | | MonitorInfoVO monitorInfoVO = new MonitorInfoVO(); |
| | | monitorInfoVO.setOpeningFlag( openingFlag.get() ); |
| | | String[] arrStatInfo = roomBedStatistic(); |
| | | monitorInfoVO.setOpeningInfo(arrStatInfo[0]); |
| | | monitorInfoVO.setOperatingInfo(arrStatInfo[1]); |
| | | roomBedStatistic(monitorInfoVO); |
| | | |
| | | return monitorInfoVO; |
| | | } |
| | | |
| | | public void monitorInfo() { |
| | | String[] arrStatInfo = roomBedStatistic(); |
| | | log.info(" opening " + openingFlag.get() + " openingInfo " + arrStatInfo[0] + " operatingInfo " + arrStatInfo[1] ); |
| | | MonitorInfoVO monitorInfoVO = new MonitorInfoVO(); |
| | | roomBedStatistic(monitorInfoVO); |
| | | log.info(" opening " + openingFlag.get() + " " + monitorInfoVO.getQueueNum() + " " + monitorInfoVO.getActiveQueueNum() + " " + monitorInfoVO.getCheckTypeBedInfo().toString() ); |
| | | } |
| | | |
| | | private Integer getBedReadyMax(Long roomId, String bedNo) { |
| | |
| | | private void addPriorityQueue(BedQueueBO bedQueueBO) { |
| | | Integer[] checkTypes = bedQueueBO.getCheckTypes(); |
| | | Arrays.stream(checkTypes).forEach(checkType -> { |
| | | PriorityBlockingQueue<BedQueueBO> priorityQueue = mapCheckTypeVsPriorityQueue.get(checkType); |
| | | PriorityBlockingQueue<BedQueueBO> priorityQueue = mapCheckPriorityQueue.get(checkType); |
| | | if (!priorityQueue.contains(bedQueueBO)) { |
| | | priorityQueue.offer(bedQueueBO); |
| | | } else { |
| | |
| | | private void removePriorityQueue(BedQueueBO bedQueueBO) { |
| | | Integer[] checkTypes = bedQueueBO.getCheckTypes(); |
| | | Arrays.stream(checkTypes).forEach(checkType -> { |
| | | PriorityBlockingQueue<BedQueueBO> priorityBlockingQueue = mapCheckTypeVsPriorityQueue.get(checkType); |
| | | PriorityBlockingQueue<BedQueueBO> priorityBlockingQueue = mapCheckPriorityQueue.get(checkType); |
| | | if (null != priorityBlockingQueue) |
| | | priorityBlockingQueue.remove(bedQueueBO); |
| | | }); |
| | |
| | | private void refreshPriorityQueue(BedQueueBO bedQueueBO) { |
| | | Integer[] checkTypes = bedQueueBO.getCheckTypes(); |
| | | Arrays.stream(checkTypes).forEach(checkType -> { |
| | | PriorityBlockingQueue<BedQueueBO> priorityQueue = mapCheckTypeVsPriorityQueue.get(checkType); |
| | | PriorityBlockingQueue<BedQueueBO> priorityQueue = mapCheckPriorityQueue.get(checkType); |
| | | priorityQueue.remove(bedQueueBO); |
| | | priorityQueue.offer(bedQueueBO); |
| | | }); |
| | | } |
| | | |
| | | private String[] roomBedStatistic() { |
| | | private void roomBedStatistic(MonitorInfoVO monitorInfoVO) { |
| | | Map<Integer, Integer> mapOpeningCheckBedStatInfo = new HashMap<>(); |
| | | Map<Integer, Integer> mapOpeningReadyBedStatInfo = new HashMap<>(); |
| | | Map<Integer, Integer> mapOperatingCheckBedStatInfo = new HashMap<>(); |
| | |
| | | }); |
| | | }); |
| | | |
| | | String openingBedInfo = "总数:" + mapBedVsQueue.size() + " 检查工位数: " + mapOpeningCheckBedStatInfo.toString() + " 领用工位数: " + mapOpeningReadyBedStatInfo.toString(); |
| | | |
| | | //运营中工位统计 |
| | | HashSet<BedQueueBO> hashSetOperatingBedQueue = new HashSet<>(); |
| | | mapCheckTypeVsPriorityQueue.values().forEach(priorityQueue->{ |
| | | mapCheckPriorityQueue.values().forEach(priorityQueue->{ |
| | | priorityQueue.stream().forEach(bedQueueBO -> hashSetOperatingBedQueue.add(bedQueueBO)); |
| | | }); |
| | | mapReadyPriorityQueue.values().forEach(priorityQueue->{ |
| | | priorityQueue.stream().forEach(bedQueueBO -> hashSetOperatingBedQueue.add(bedQueueBO)); |
| | | }); |
| | | |
| | |
| | | }); |
| | | }); |
| | | |
| | | String operatingBedInfo = "总数:" + hashSetOperatingBedQueue.size() + " 检查工位数: " + mapOperatingCheckBedStatInfo.toString() + " 领用工位数: " + mapOperatingReadyBedStatInfo.toString(); |
| | | Map<Integer, String> mapCheckTypeBedInfo = new HashMap<>(); |
| | | mapCheckTypeVsReadyMax.keySet().forEach( checkType -> { |
| | | String str = mapOpeningCheckBedStatInfo.get(checkType) + " " + |
| | | mapOpeningReadyBedStatInfo.get(checkType) + " " + |
| | | mapOperatingCheckBedStatInfo.get(checkType) + " " + |
| | | mapOperatingReadyBedStatInfo.get(checkType) + " "; |
| | | mapCheckTypeBedInfo.put( checkType, str); |
| | | }); |
| | | |
| | | return new String[]{openingBedInfo, operatingBedInfo}; |
| | | monitorInfoVO.setCheckTypeBedInfo(mapCheckTypeBedInfo); |
| | | monitorInfoVO.setQueueNum(mapBedVsQueue.size()); |
| | | monitorInfoVO.setActiveQueueNum(hashSetOperatingBedQueue.size()); |
| | | } |
| | | |
| | | } |