| | |
| | | |
| | | 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.dataobject.room.RoomStatisticsDO; |
| | | import cn.lihu.jh.module.ecg.dal.mysql.room.RoomMapper; |
| | | import cn.lihu.jh.module.ecg.enums.QueueStatusEnum; |
| | | import lombok.Data; |
| | | import org.jetbrains.annotations.NotNull; |
| | | import org.springframework.stereotype.Service; |
| | | import org.springframework.validation.annotation.Validated; |
| | | |
| | |
| | | |
| | | import cn.lihu.jh.module.ecg.dal.mysql.queue.queueMapper; |
| | | |
| | | import javax.annotation.PostConstruct; |
| | | import javax.annotation.Resource; |
| | | |
| | | import java.util.*; |
| | | import java.util.concurrent.ConcurrentHashMap; |
| | | import java.util.concurrent.PriorityBlockingQueue; |
| | | import java.util.concurrent.atomic.AtomicInteger; |
| | | import java.util.concurrent.atomic.AtomicReference; |
| | | |
| | | import static cn.lihu.jh.framework.common.exception.util.ServiceExceptionUtil.exception; |
| | | import static cn.lihu.jh.module.ecg.enums.ErrorCodeConstants.*; |
| | |
| | | return queueMapper.queueStatistic(statusList); |
| | | } |
| | | |
| | | @Override |
| | | public void queue(QueueSaveReqVO queueSaveReqVO) { |
| | | BedQueueBO bedQueueBO = priorityQueue.peek(); |
| | | if (null == bedQueueBO) |
| | | return; |
| | | |
| | | if (bedQueueBO.queueNum.get() == bedQueueBO.maxQueueNum) { |
| | | queueSaveReqVO.setStatus(QueueStatusEnum.WAITING.getStatus()); //排队中 |
| | | QueueDO queue = BeanUtils.toBean(queueSaveReqVO, QueueDO.class); |
| | | queueMapper.insert(queue); // queue.getId(); |
| | | } else if (bedQueueBO.queueNum.get() < bedQueueBO.maxQueueNum) { |
| | | queueSaveReqVO.setStatus(QueueStatusEnum.READY.getStatus()); //候诊准备中 |
| | | queueSaveReqVO.setRoomId(bedQueueBO.getRoomId()); |
| | | queueSaveReqVO.setRoomName(bedQueueBO.getRoomName()); |
| | | queueSaveReqVO.setBedNo(bedQueueBO.getBedNo()); |
| | | queueSaveReqVO.setSeqNum(curSeqNum.get()); |
| | | QueueDO queue = BeanUtils.toBean(queueSaveReqVO, QueueDO.class); |
| | | queueMapper.insert(queue); // queue.getId(); |
| | | |
| | | curSeqNum.getAndIncrement(); |
| | | bedQueueBO.queueNum.getAndIncrement(); |
| | | BedQueueBO bedQueueBO2 = priorityQueue.poll(); |
| | | priorityQueue.offer(bedQueueBO2); |
| | | } |
| | | |
| | | |
| | | } |
| | | |
| | | public void initQueue() { |
| | | priorityQueue.clear(); |
| | | mapBedVsQueue.clear(); |
| | |
| | | List<RoomDO> roomDOList = roomMapper.simpleRoomList(); |
| | | List<BedQueueBO> bedQueueBOList = roomDOList.stream().map(item -> BeanUtils.toBean(item, BedQueueBO.class)).toList(); |
| | | |
| | | // 从DB 获取 队列中 就诊准备中人员 列表 |
| | | // 从DB 获取 队列中 就诊准备中人员统计 列表 |
| | | List<Byte> queueStatusList = new ArrayList<>(); |
| | | queueStatusList.add(QueueStatusEnum.READY.getStatus()); |
| | | List<QueueStatisticDO> queueStatisticDOList = queueMapper.queueStatistic(queueStatusList); |
| | |
| | | curSeqNum = new AtomicInteger(null == num ? 1 : ++num); |
| | | |
| | | hurryup(); |
| | | } |
| | | |
| | | public void reorderQueue() { |
| | | // 根据预约前后,从DB 获取 队列中 就诊准备中人员 列表 |
| | | List<Byte> queueStatusList = new ArrayList<>(); |
| | | queueStatusList.add(QueueStatusEnum.READY.getStatus()); |
| | | List<QueueDO> queueDOList = queueMapper.getOrderedQueue(queueStatusList); |
| | | if (queueDOList.isEmpty()) |
| | | return; |
| | | |
| | | AtomicInteger seqNum = new AtomicInteger(1); |
| | | queueDOList.forEach(item -> {item.setSeqNum(seqNum.getAndIncrement());}); |
| | | queueMapper.updateBatch(queueDOList); |
| | | |
| | | curSeqNum.set( seqNum.get() ); |
| | | } |
| | | |
| | | /** |
| | |
| | | } |
| | | } |
| | | |
| | | public void finishPatient(Long roomId, String bedNo) { |
| | | // 从 DB 把 就诊中的人 设置为就诊完成 |
| | | Integer ret = queueMapper.updateQueueStatus(roomId, bedNo, |
| | | QueueStatusEnum.ONSTAGE.getStatus(), QueueStatusEnum.FINISH.getStatus()); |
| | | System.out.println("完成数量: " + ret); |
| | | @Override |
| | | public void queue(QueueSaveReqVO queueSaveReqVO) { |
| | | queueSaveReqVO.setStatus(QueueStatusEnum.WAITING.getStatus()); //排队中 |
| | | QueueDO queue = BeanUtils.toBean(queueSaveReqVO, QueueDO.class); |
| | | queueMapper.insert(queue); // queue.getId(); |
| | | |
| | | hurryup(); |
| | | } |
| | | |
| | | public void nextPatient(Long roomId, String bedNo) { |
| | | finishPatient(roomId, bedNo); |
| | | |
| | | private void nextPatient(Long roomId, String bedNo) { |
| | | // 从 DB 把 序号最小的 就诊准备中的人 设置为就诊中 |
| | | queueMapper.updateQueueStatus(roomId, bedNo, |
| | | QueueStatusEnum.READY.getStatus(), QueueStatusEnum.ONSTAGE.getStatus()); |
| | |
| | | hurryup(); |
| | | } |
| | | |
| | | public void finishNextPatient(Long roomId, String bedNo) { |
| | | // 从 DB 把 就诊中的人 设置为就诊完成 |
| | | Integer ret = queueMapper.updateQueueStatus(roomId, bedNo, |
| | | QueueStatusEnum.ONSTAGE.getStatus(), QueueStatusEnum.FINISH.getStatus()); |
| | | System.out.println("完成数量: " + ret); |
| | | |
| | | nextPatient(roomId, bedNo); |
| | | } |
| | | |
| | | public void passNextPatient(Long roomId, String bedNo) { |
| | | // 从 DB 把 就诊中的人 设置为过号 |
| | | Integer ret = queueMapper.updateQueueStatus(roomId, bedNo, |
| | | QueueStatusEnum.ONSTAGE.getStatus(), QueueStatusEnum.PASSED.getStatus()); |
| | | System.out.println("完成数量: " + ret); |
| | | |
| | | nextPatient(roomId, bedNo); |
| | | } |
| | | |
| | | public List<QueueDO> getDoctorQueueByStatus(Long roomId, String bedNo, List<Byte> statusList) { |
| | | List<QueueDO> queueDOList = queueMapper.getDoctorQueueByStatus(roomId, bedNo, statusList); |
| | | return queueDOList; |
| | | } |
| | | |
| | | } |