From 22b0761897d0959d0a3dc34c68efc27705b17526 Mon Sep 17 00:00:00 2001 From: eight <641137800@qq.com> Date: 星期三, 09 十月 2024 17:10:00 +0800 Subject: [PATCH] 1. 根据检查类型,配置 准备中 人数 2. 医生入座,才允许 患者 进入 准备中 --- jh-module-ecg/jh-module-ecg-biz/src/main/java/cn/lihu/jh/module/ecg/service/queue/QueueServiceTxFunctions.java | 55 ++++++++++++++++++++++++++----------------------------- 1 files changed, 26 insertions(+), 29 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 e378814..15bfd80 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 @@ -2,16 +2,8 @@ import cn.lihu.jh.framework.common.exception.ErrorCode; import cn.lihu.jh.framework.common.exception.enums.GlobalErrorCodeConstants; -import cn.lihu.jh.framework.common.pojo.CommonResult; -import cn.lihu.jh.framework.common.pojo.PageResult; import cn.lihu.jh.framework.common.util.object.BeanUtils; -import cn.lihu.jh.module.ecg.controller.admin.queue.vo.PatientStatisticVO; -import cn.lihu.jh.module.ecg.controller.admin.queue.vo.QueuePageReqVO; -import cn.lihu.jh.module.ecg.controller.admin.queue.vo.QueueSaveReqVO; import cn.lihu.jh.module.ecg.controller.admin.room.vo.MonitorInfoVO; -import cn.lihu.jh.module.ecg.controller.admin.room.vo.RoomRespVO; -import cn.lihu.jh.module.ecg.dal.dataobject.devrent.DevRentDO; -import cn.lihu.jh.module.ecg.dal.dataobject.queue.BedQueueStatisticDO; 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; @@ -20,25 +12,22 @@ import cn.lihu.jh.module.ecg.dal.mysql.queue.queueMapper; import cn.lihu.jh.module.ecg.dal.mysql.room.RoomMapper; import cn.lihu.jh.module.ecg.enums.BedStatusEnum; -import cn.lihu.jh.module.ecg.enums.DevRentStateEnum; import cn.lihu.jh.module.ecg.enums.QueueStatusEnum; import cn.lihu.jh.module.system.api.oauth2.OAuth2TokenApi; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Component; -import org.springframework.stereotype.Service; -import org.springframework.transaction.annotation.Transactional; import org.springframework.validation.annotation.Validated; import javax.annotation.Resource; import java.util.ArrayList; import java.util.List; +import java.util.Map; import java.util.Optional; import java.util.concurrent.*; import java.util.concurrent.atomic.AtomicInteger; import static cn.lihu.jh.framework.common.exception.util.ServiceExceptionUtil.exception; import static cn.lihu.jh.framework.common.pojo.CommonResult.error; -import static cn.lihu.jh.framework.common.pojo.CommonResult.success; import static cn.lihu.jh.module.ecg.enums.ErrorCodeConstants.*; /** @@ -72,7 +61,7 @@ PriorityBlockingQueue<BedQueueBO> priorityQueue = new PriorityBlockingQueue<>(); ConcurrentHashMap<String, BedQueueBO > mapBedVsQueue = new ConcurrentHashMap<>(); - Integer queueReadyMax = 0; + Map<Integer, Integer> mapCheckTypeVsReadyMax = null; /** * 宸插叧闂� 鎴栬�� 鍏抽棴涓紝鍙互寮�閫氬伐浣� @@ -105,10 +94,9 @@ bedQueueBO.setRoomId(roomId); bedQueueBO.setRoomName(roomName); bedQueueBO.setBedNo(bedNo); - bedQueueBO.setMaxQueueNum(queueReadyMax); + bedQueueBO.setMaxQueueNum(getBedReadyMax(roomId, bedNo)); bedQueueBO.setQueueNum(new AtomicInteger(queueDOList.size())); bedQueueBO.setStatus(BedStatusEnum.OPENING.getStatus()); - priorityQueue.offer(bedQueueBO); mapBedVsQueue.put(String.format("%09d%s", roomId, bedNo), bedQueueBO); return GlobalErrorCodeConstants.SUCCESS; @@ -215,6 +203,13 @@ } bedQueueBO.setStatus(BedStatusEnum.DOCTOR_ON.getStatus()); + if (!priorityQueue.contains(bedQueueBO)) { + priorityQueue.offer(bedQueueBO); + } else { + log.error("bedDoctorOn priorityQueue still exist!. " + roomId + " " + bedNo); + return ECG_INNER_ERROR; + } + return GlobalErrorCodeConstants.SUCCESS; } @@ -235,15 +230,7 @@ return ROOM_INVALID_STATUS; } - // 濡傛灉鏄湪 PAUSE 鐘舵�佺搴х殑锛岄渶瑕侀噸鏂板姞鍥� 浼樺厛闃熷垪 - if (bedQueueBO.getStatus().equals(BedStatusEnum.PAUSE.getStatus())) { - if (!priorityQueue.contains(bedQueueBO)) { - priorityQueue.offer(bedQueueBO); - } else { - log.error("bedDoctorResume priorityQueue still exist!. " + roomId + " " + bedNo); - return ECG_INNER_ERROR; - } - } + priorityQueue.remove(bedQueueBO); bedQueueBO.setStatus(BedStatusEnum.OPENING.getStatus()); return GlobalErrorCodeConstants.SUCCESS; @@ -294,15 +281,15 @@ List<QueueStatisticDO> queueStatisticDOList = queueMapper.queueStatistic(queueStatusList); bedQueueBOList.forEach(item -> { - item.maxQueueNum = queueReadyMax; + item.maxQueueNum = getBedReadyMax(item.roomId, item.bedNo); Optional<QueueStatisticDO> queueStatisticDOOptional = queueStatisticDOList.stream().filter(it->it.getRoomId()==item.roomId && it.getBedNo().equals(item.getBedNo())).findFirst(); int queueNum = queueStatisticDOOptional.isPresent() ? queueStatisticDOOptional.get().getTotalInStatus() : 0; - if ( queueReadyMax < queueNum ) + if ( item.maxQueueNum < queueNum ) throw new RuntimeException("init: exceed max queue number!"); item.queueNum.set( queueNum ); mapBedVsQueue.put(String.format("%09d%s", item.roomId, item.bedNo), item); - if (BedStatusEnum.PAUSE.getStatus() != item.getStatus()) { + if (BedStatusEnum.DOCTOR_ON.getStatus() == item.getStatus()) { priorityQueue.offer(item); } }); @@ -406,8 +393,8 @@ openingFlag.set(flag); } - public void setQueueReadyMax(Integer max) { - queueReadyMax = max; + public void setCheckTypeReadyMax(Map<Integer, Integer> max) { + mapCheckTypeVsReadyMax = max; } public BedQueueBO getBedQueueBO(Long roomId, String bedNo) { @@ -427,4 +414,14 @@ + " opening " + openingFlag.get()); } + private Integer getBedReadyMax(Long roomId, String bedNo) { + RoomDO roomDO = roomMapper.getRoom(roomId, bedNo); + Integer[] checkTypes = roomDO.getCheckTypes(); + Integer ret = 0; + for (int i=0; i<checkTypes.length; i++) { + Integer tmp = mapCheckTypeVsReadyMax.get(checkTypes[i]); + ret = ret < tmp ? tmp : ret; //鍙栧ぇ鍊� + } + return ret; + } } -- Gitblit v1.9.3