From a21055c644b56fc44b56ed7e2bfe77a82e1b739d Mon Sep 17 00:00:00 2001 From: eight <641137800@qq.com> Date: 星期四, 10 十月 2024 18:25:23 +0800 Subject: [PATCH] 检查类型 从 字典 换成 DB 表 --- jh-module-ecg/jh-module-ecg-biz/src/main/java/cn/lihu/jh/module/ecg/service/queue/QueueServiceTxFunctions.java | 66 +++++++++++++++++++++----------- 1 files changed, 43 insertions(+), 23 deletions(-) diff --git a/jh-module-ecg/jh-module-ecg-biz/src/main/java/cn/lihu/jh/module/ecg/service/queue/QueueServiceTxFunctions.java b/jh-module-ecg/jh-module-ecg-biz/src/main/java/cn/lihu/jh/module/ecg/service/queue/QueueServiceTxFunctions.java index 2c13a09..7d4f6d3 100644 --- a/jh-module-ecg/jh-module-ecg-biz/src/main/java/cn/lihu/jh/module/ecg/service/queue/QueueServiceTxFunctions.java +++ b/jh-module-ecg/jh-module-ecg-biz/src/main/java/cn/lihu/jh/module/ecg/service/queue/QueueServiceTxFunctions.java @@ -4,10 +4,12 @@ import cn.lihu.jh.framework.common.exception.enums.GlobalErrorCodeConstants; import cn.lihu.jh.framework.common.util.object.BeanUtils; import cn.lihu.jh.module.ecg.controller.admin.room.vo.MonitorInfoVO; +import cn.lihu.jh.module.ecg.dal.dataobject.checktype.CheckTypeDO; import cn.lihu.jh.module.ecg.dal.dataobject.queue.QueueDO; import cn.lihu.jh.module.ecg.dal.dataobject.queue.QueueStatisticDO; import cn.lihu.jh.module.ecg.dal.dataobject.room.RoomDO; import cn.lihu.jh.module.ecg.dal.mysql.call.CallMapper; +import cn.lihu.jh.module.ecg.dal.mysql.checktype.CheckTypeMapper; import cn.lihu.jh.module.ecg.dal.mysql.devrent.DevRentMapper; import cn.lihu.jh.module.ecg.dal.mysql.queue.queueMapper; import cn.lihu.jh.module.ecg.dal.mysql.room.RoomMapper; @@ -15,7 +17,6 @@ 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; @@ -23,6 +24,7 @@ import java.util.*; import java.util.concurrent.*; import java.util.concurrent.atomic.AtomicInteger; +import java.util.stream.Collectors; import static cn.lihu.jh.framework.common.exception.util.ServiceExceptionUtil.exception; import static cn.lihu.jh.framework.common.pojo.CommonResult.error; @@ -53,15 +55,22 @@ @Resource private DevRentMapper devRentMapper; + @Resource + private CheckTypeMapper checkTypeMapper; + + AtomicInteger openingFlag = new AtomicInteger(0); AtomicInteger curSeqNum = new AtomicInteger(0); 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, Integer> mapCheckTypeVsReadyMax = null; + // 鍩轰簬绫诲瀷鐨�, 瑁呮満鍑嗗鐨勪紭鍏堥槦鍒� + Map<Integer, PriorityBlockingQueue<BedQueueBO>> mapReadyPriorityQueue = new HashMap(); + + Map<Integer, CheckTypeDO> mapCheckTypeVsReadyMax = null; /** * 宸插叧闂� 鎴栬�� 鍏抽棴涓紝鍙互寮�閫氬伐浣� @@ -250,7 +259,7 @@ * 2. 鏈嶅姟杩愮淮閲嶅惎鏃� */ public ErrorCode bedReload() { - mapCheckTypeVsPriorityQueue.clear(); + mapCheckPriorityQueue.clear(); mapBedVsQueue.clear(); // 娓呴櫎闈炲綋澶╃殑鎺掗槦浜哄憳 @@ -351,7 +360,7 @@ public void hurryupOneCheckType(Integer checkType) { - PriorityBlockingQueue<BedQueueBO> priorityQueue = mapCheckTypeVsPriorityQueue.get(checkType); + PriorityBlockingQueue<BedQueueBO> priorityQueue = mapCheckPriorityQueue.get(checkType); if (null == priorityQueue) return; @@ -400,8 +409,9 @@ openingFlag.set(flag); } - public void setCheckTypeReadyMax(Map<Integer, Integer> max) { - mapCheckTypeVsReadyMax = max; + public void initCheckType() { + List<CheckTypeDO> checkTypeDOList = checkTypeMapper.simpleCheckTypeList(); + mapCheckTypeVsReadyMax = checkTypeDOList.stream().collect(Collectors.toMap(CheckTypeDO::getValue, checkType -> checkType)); } public BedQueueBO getBedQueueBO(Long roomId, String bedNo) { @@ -411,16 +421,15 @@ 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) { @@ -428,7 +437,8 @@ Integer[] checkTypes = roomDO.getCheckTypes(); Integer ret = 0; for (int i=0; i<checkTypes.length; i++) { - Integer tmp = mapCheckTypeVsReadyMax.get(checkTypes[i]); + CheckTypeDO checkTypeDO = mapCheckTypeVsReadyMax.get(checkTypes[i]); + Integer tmp = checkTypeDO.getReadyNum(); ret = ret < tmp ? tmp : ret; //鍙栧ぇ鍊� } return ret; @@ -437,7 +447,7 @@ 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 { @@ -449,7 +459,7 @@ 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); }); @@ -458,13 +468,13 @@ 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<>(); @@ -487,11 +497,12 @@ }); }); - 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)); }); @@ -505,9 +516,18 @@ }); }); - 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()); } } -- Gitblit v1.9.3