jh-module-ecg/jh-module-ecg-biz/src/main/java/cn/lihu/jh/module/ecg/controller/admin/appointment/AppointmentController.java
@@ -176,8 +176,8 @@ queueSaveReqVO.setPassed((byte)0); queueSaveReqVO.setExpired((byte)0); queueSaveReqVO.setRoomNum("-"); queueSaveReqVO.setBedNum("-"); queueSaveReqVO.setRoomName("-"); queueSaveReqVO.setBedNo("-"); queueService.createqueue(queueSaveReqVO); } jh-module-ecg/jh-module-ecg-biz/src/main/java/cn/lihu/jh/module/ecg/controller/admin/queue/queueController.java
@@ -92,4 +92,12 @@ BeanUtils.toBean(list, QueueRespVO.class)); } @GetMapping("/opening-setting") @Operation(summary = "开诊设置") @PreAuthorize("@ss.hasPermission('ecg:queue:setting')") public CommonResult<Integer> openingSetting() { queueService.initQueue(); queueService.hurryup(); return success(0); } } jh-module-ecg/jh-module-ecg-biz/src/main/java/cn/lihu/jh/module/ecg/controller/admin/queue/vo/queuePageReqVO.java
@@ -42,10 +42,13 @@ private Boolean expired; @Schema(description = "诊室编号") private String roomNum; private Long roomId; @Schema(description = "诊室名称") private String roomName; @Schema(description = "诊疗床编号") private String bedNum; private String bedNo; @Schema(description = "创建时间") @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) jh-module-ecg/jh-module-ecg-biz/src/main/java/cn/lihu/jh/module/ecg/controller/admin/queue/vo/queueRespVO.java
@@ -53,11 +53,15 @@ @Schema(description = "诊室编号") @ExcelProperty("诊室编号") private String roomNum; private Long roomId; @Schema(description = "诊室名称") @ExcelProperty("诊室名称") private String roomName; @Schema(description = "诊疗床编号") @ExcelProperty("诊疗床编号") private String bedNum; private String bedNo; @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED) @ExcelProperty("创建时间") jh-module-ecg/jh-module-ecg-biz/src/main/java/cn/lihu/jh/module/ecg/controller/admin/queue/vo/queueSaveReqVO.java
@@ -49,9 +49,12 @@ private Byte expired; @Schema(description = "诊室编号") private String roomNum; private Long roomId; @Schema(description = "诊室名称") private String roomName; @Schema(description = "诊疗床编号") private String bedNum; private String bedNo; } jh-module-ecg/jh-module-ecg-biz/src/main/java/cn/lihu/jh/module/ecg/dal/dataobject/queue/QueueStatisticDO.java
@@ -14,7 +14,9 @@ @Data public class QueueStatisticDO { private Byte status; private Long roomId; private String bedNo; private Integer totalInStatus; } jh-module-ecg/jh-module-ecg-biz/src/main/java/cn/lihu/jh/module/ecg/dal/dataobject/queue/queueDO.java
@@ -63,10 +63,14 @@ /** * 诊室编号 */ private String roomNum; private Long roomId; /** * 诊室名称 */ private String roomName; /** * 诊疗床编号 */ private String bedNum; private String bedNo; } jh-module-ecg/jh-module-ecg-biz/src/main/java/cn/lihu/jh/module/ecg/dal/mysql/queue/queueMapper.java
@@ -32,21 +32,21 @@ .eqIfPresent(QueueDO::getStatus, reqVO.getStatus()) .eqIfPresent(QueueDO::getPassed, reqVO.getPassed()) .eqIfPresent(QueueDO::getExpired, reqVO.getExpired()) .eqIfPresent(QueueDO::getRoomNum, reqVO.getRoomNum()) .eqIfPresent(QueueDO::getBedNum, reqVO.getBedNum()) .eqIfPresent(QueueDO::getRoomId, reqVO.getRoomId()) .eqIfPresent(QueueDO::getBedNo, reqVO.getBedNo()) .betweenIfPresent(QueueDO::getCreateTime, reqVO.getCreateTime()) .orderByDesc(QueueDO::getId)); } @Select("SELECT max(seq_num) FROM lihu.queue") Integer getMaxSeqNum(); @Select("<script>" + "SELECT status, count(1) as total_in_status FROM lihu.queue where status in (" + "SELECT room_id, bed_no, count(1) as total_in_status FROM lihu.queue where status in (" + " <foreach collection='statusList' separator=',' item='status'>" + " #{status} " + " </foreach> )" + " group by status; " " group by room_id, bed_no; " +"</script>") List<QueueStatisticDO> queueStatistic(@Param("statusList")List<Byte> statusList); @Select("SELECT max(seq_num) FROM lihu.queue") int getMaxSeqNum(); } jh-module-ecg/jh-module-ecg-biz/src/main/java/cn/lihu/jh/module/ecg/service/queue/BedQueueBO.java
@@ -13,6 +13,6 @@ @Override public int compareTo(@NotNull BedQueueBO o) { return Integer.compare(o.queueNum, this.queueNum); return Integer.compare(this.queueNum, o.queueNum); } } jh-module-ecg/jh-module-ecg-biz/src/main/java/cn/lihu/jh/module/ecg/service/queue/queueService.java
@@ -61,4 +61,14 @@ * @param queueSaveReqVO */ void queue(QueueSaveReqVO queueSaveReqVO); /** * */ void initQueue(); /** * */ void hurryup(); } jh-module-ecg/jh-module-ecg-biz/src/main/java/cn/lihu/jh/module/ecg/service/queue/queueServiceImpl.java
@@ -20,9 +20,7 @@ import javax.annotation.PostConstruct; import javax.annotation.Resource; import java.util.HashMap; import java.util.List; import java.util.PriorityQueue; import java.util.*; import static cn.lihu.jh.framework.common.exception.util.ServiceExceptionUtil.exception; import static cn.lihu.jh.module.ecg.enums.ErrorCodeConstants.*; @@ -98,32 +96,57 @@ @Override public void queue(QueueSaveReqVO queueSaveReqVO) { BedQueueBO bedQueueBO = priorityQueue.peek(); if (null == bedQueueBO) return; if (bedQueueBO.queueNum == bedQueueBO.maxQueueNum) { queueSaveReqVO.setStatus(QueueStatusEnum.WAITING.getStatus()); //排队中 QueueDO queue = BeanUtils.toBean(queueSaveReqVO, QueueDO.class); queueMapper.insert(queue); // queue.getId(); } else if (bedQueueBO.queueNum < bedQueueBO.maxQueueNum) { queueSaveReqVO.setStatus(QueueStatusEnum.READY.getStatus()); //候诊准备中 queueSaveReqVO.setRoomNum(bedQueueBO.getRoomName()); queueSaveReqVO.setBedNum(bedQueueBO.getBedNo()); queueSaveReqVO.setSeqNum(curSeqNum++); queueSaveReqVO.setRoomId(bedQueueBO.getRoomId()); queueSaveReqVO.setRoomName(bedQueueBO.getRoomName()); queueSaveReqVO.setBedNo(bedQueueBO.getBedNo()); queueSaveReqVO.setSeqNum(curSeqNum); QueueDO queue = BeanUtils.toBean(queueSaveReqVO, QueueDO.class); queueMapper.insert(queue); // queue.getId(); curSeqNum++; bedQueueBO.queueNum++; BedQueueBO bedQueueBO2 = priorityQueue.poll(); priorityQueue.offer(bedQueueBO2); } } @PostConstruct private void initQueue() { public void initQueue() { priorityQueue.clear(); List<RoomDO> roomDOList = roomMapper.simpleRoomList(); List<BedQueueBO> bedQueueBOList = roomDOList.stream().map(item -> BeanUtils.toBean(item, BedQueueBO.class)).toList(); List<Byte> queueStatusList = new ArrayList<>(); queueStatusList.add(QueueStatusEnum.READY.getStatus()); List<QueueStatisticDO> queueStatisticDOList = queueMapper.queueStatistic(queueStatusList); bedQueueBOList.forEach(item -> { item.maxQueueNum = MAX_QUEUE_NUM; item.queueNum = 0; priorityQueue.add(item); Optional<QueueStatisticDO> queueStatisticDOOptional = queueStatisticDOList.stream().filter(it->it.getRoomId()==item.roomId && it.getBedNo().equals(item.getBedNo())).findFirst(); item.queueNum = queueStatisticDOOptional.isPresent() ? queueStatisticDOOptional.get().getTotalInStatus() : 0; priorityQueue.offer(item); }); curSeqNum = queueMapper.getMaxSeqNum(); } curSeqNum = null == curSeqNum ? 1 : ++curSeqNum; } /** * TODO 新开队列时,需要把排队中的人 转到 就诊准备 状态 * 等到取下一个 排队中人员 的逻辑完成后,再回来不错 */ public void hurryup() { } } sql/mysql/jh.sql
@@ -49,12 +49,13 @@ `pat_gender` tinyint(1) DEFAULT NULL COMMENT '患者性别', `book_timeslot` int NOT NULL COMMENT '预约时间段', `book_check_type` tinyint(1) DEFAULT NULL COMMENT '预约检查类型', `seq_num` int NOT NULL COMMENT '排队序号', `seq_num` int DEFAULT NULL COMMENT '排队序号', `status` tinyint(1) NOT NULL COMMENT '10:排队中 20:候诊准备 30:就诊中 40:就诊完成 50:过号 60:过期', `passed` tinyint(1) NOT NULL COMMENT '过号标记', `expired` tinyint(1) NOT NULL COMMENT '预约过期标记', `room_num` varchar(10) DEFAULT NULL COMMENT '诊室编号', `bed_num` varchar(10) DEFAULT NULL COMMENT '诊疗床编号', `passed` tinyint(1) DEFAULT 0 COMMENT '过号标记', `expired` tinyint(1) DEFAULT 0 COMMENT '预约过期标记', `room_id` BIGINT DEFAULT 0 COMMENT '诊室编号', `room_name` varchar(10) DEFAULT "" COMMENT '诊室名称', `bed_no` varchar(10) DEFAULT "" COMMENT '诊疗床编号', `tenant_id` int NOT NULL COMMENT '租户编号', `creator` varchar(10) DEFAULT '' COMMENT '创建者', `create_time` datetime NOT NULL COMMENT '创建时间',