From e743e68c542c4f3fac4e085df830aa74fd34fd49 Mon Sep 17 00:00:00 2001
From: eight <641137800@qq.com>
Date: 星期二, 20 八月 2024 18:04:20 +0800
Subject: [PATCH] 医生叫号 初步实现
---
jh-module-ecg/jh-module-ecg-biz/src/main/java/cn/lihu/jh/module/ecg/controller/admin/queue/queueController.java | 10 ++
jh-module-ecg/jh-module-ecg-biz/src/main/java/cn/lihu/jh/module/ecg/controller/admin/doctor/DoctorController.java | 66 ++++++++++------
jh-module-ecg/jh-module-ecg-biz/src/main/java/cn/lihu/jh/module/ecg/controller/admin/queue/vo/queueRespVO.java | 2
jh-module-ecg/jh-module-ecg-biz/src/main/java/cn/lihu/jh/module/ecg/service/queue/queueServiceImpl.java | 85 +++++++++++----------
jh-module-ecg/jh-module-ecg-biz/src/main/java/cn/lihu/jh/module/ecg/dal/mysql/queue/queueMapper.java | 11 ++
jh-module-ecg/jh-module-ecg-biz/src/main/java/cn/lihu/jh/module/ecg/service/queue/queueService.java | 9 +
6 files changed, 113 insertions(+), 70 deletions(-)
diff --git a/jh-module-ecg/jh-module-ecg-biz/src/main/java/cn/lihu/jh/module/ecg/controller/admin/doctor/DoctorController.java b/jh-module-ecg/jh-module-ecg-biz/src/main/java/cn/lihu/jh/module/ecg/controller/admin/doctor/DoctorController.java
index 785b45e..c444d26 100644
--- a/jh-module-ecg/jh-module-ecg-biz/src/main/java/cn/lihu/jh/module/ecg/controller/admin/doctor/DoctorController.java
+++ b/jh-module-ecg/jh-module-ecg-biz/src/main/java/cn/lihu/jh/module/ecg/controller/admin/doctor/DoctorController.java
@@ -38,35 +38,16 @@
@Resource
private QueueService queueService;
- @GetMapping("/finishpatient")
- @Operation(summary = "涓嬩竴浣嶆偅鑰�")
- @Parameter(name = "roomId", description = "璇婂缂栧彿", required = true, example = "116")
- @Parameter(name = "bedNo", description = "宸ヤ綅缂栧彿", required = true, example = "B2")
- @PreAuthorize("@ss.hasPermission('ecg:doctor:finishpatient')")
- public CommonResult<List<QueueRespVO>> finishPatient(
- @RequestParam("roomId") Long roomId,
- @RequestParam("bedNo") String bedNo)
- {
- queueService.finishPatient(roomId, bedNo);
-
- List<Byte> queueStatusList = new ArrayList<>();
- queueStatusList.add(QueueStatusEnum.READY.getStatus());
- queueStatusList.add(QueueStatusEnum.ONSTAGE.getStatus());
- queueStatusList.add(QueueStatusEnum.PASSED.getStatus());
- List<QueueDO> queueDOList = queueService.getDoctorQueueByStatus(roomId, bedNo, queueStatusList);
- return success(BeanUtils.toBean(queueDOList, QueueRespVO.class));
- }
-
- @GetMapping("/nextpatient")
- @Operation(summary = "涓嬩竴浣嶆偅鑰�")
+ @GetMapping("/finish-next-patient")
+ @Operation(summary = "瀹屾垚銆佷笅涓�浣嶆偅鑰�")
@Parameter(name = "roomId", description = "璇婂缂栧彿", required = true, example = "116")
@Parameter(name = "bedNo", description = "宸ヤ綅缂栧彿", required = true, example = "B2")
@PreAuthorize("@ss.hasPermission('ecg:doctor:nextpatient')")
- public CommonResult<List<QueueRespVO>> nextPatient(
+ public CommonResult<List<QueueRespVO>> finishNextPatient(
@RequestParam("roomId") Long roomId,
@RequestParam("bedNo") String bedNo)
{
- queueService.nextPatient(roomId, bedNo);
+ queueService.finishNextPatient(roomId, bedNo);
List<Byte> queueStatusList = new ArrayList<>();
queueStatusList.add(QueueStatusEnum.READY.getStatus());
@@ -75,4 +56,41 @@
List<QueueDO> queueDOList = queueService.getDoctorQueueByStatus(roomId, bedNo, queueStatusList);
return success(BeanUtils.toBean(queueDOList, QueueRespVO.class));
}
-}
\ No newline at end of file
+
+ @GetMapping("/pass-next-patient")
+ @Operation(summary = "杩囧彿銆佷笅涓�浣嶆偅鑰�")
+ @Parameter(name = "roomId", description = "璇婂缂栧彿", required = true, example = "116")
+ @Parameter(name = "bedNo", description = "宸ヤ綅缂栧彿", required = true, example = "B2")
+ @PreAuthorize("@ss.hasPermission('ecg:doctor:nextpatient')")
+ public CommonResult<List<QueueRespVO>> passNextPatient(
+ @RequestParam("roomId") Long roomId,
+ @RequestParam("bedNo") String bedNo)
+ {
+ queueService.passNextPatient(roomId, bedNo);
+
+ List<Byte> queueStatusList = new ArrayList<>();
+ queueStatusList.add(QueueStatusEnum.READY.getStatus());
+ queueStatusList.add(QueueStatusEnum.ONSTAGE.getStatus());
+ queueStatusList.add(QueueStatusEnum.PASSED.getStatus());
+ List<QueueDO> queueDOList = queueService.getDoctorQueueByStatus(roomId, bedNo, queueStatusList);
+ return success(BeanUtils.toBean(queueDOList, QueueRespVO.class));
+ }
+
+ @GetMapping("/get-patient-list")
+ @Operation(summary = "鍙栨偅鑰呭垪琛�")
+ @Parameter(name = "roomId", description = "璇婂缂栧彿", required = true, example = "116")
+ @Parameter(name = "bedNo", description = "宸ヤ綅缂栧彿", required = true, example = "B2")
+ @PreAuthorize("@ss.hasPermission('ecg:doctor:patientlist')")
+ public CommonResult<List<QueueRespVO>> getPatientList(
+ @RequestParam("roomId") Long roomId,
+ @RequestParam("bedNo") String bedNo)
+ {
+ List<Byte> queueStatusList = new ArrayList<>();
+ queueStatusList.add(QueueStatusEnum.READY.getStatus());
+ queueStatusList.add(QueueStatusEnum.ONSTAGE.getStatus());
+ queueStatusList.add(QueueStatusEnum.PASSED.getStatus());
+ List<QueueDO> queueDOList = queueService.getDoctorQueueByStatus(roomId, bedNo, queueStatusList);
+ return success(BeanUtils.toBean(queueDOList, QueueRespVO.class));
+ }
+
+}
diff --git a/jh-module-ecg/jh-module-ecg-biz/src/main/java/cn/lihu/jh/module/ecg/controller/admin/queue/queueController.java b/jh-module-ecg/jh-module-ecg-biz/src/main/java/cn/lihu/jh/module/ecg/controller/admin/queue/queueController.java
index e206c24..88f81ef 100644
--- a/jh-module-ecg/jh-module-ecg-biz/src/main/java/cn/lihu/jh/module/ecg/controller/admin/queue/queueController.java
+++ b/jh-module-ecg/jh-module-ecg-biz/src/main/java/cn/lihu/jh/module/ecg/controller/admin/queue/queueController.java
@@ -97,7 +97,15 @@
@PreAuthorize("@ss.hasPermission('ecg:queue:setting')")
public CommonResult<Integer> openingSetting() {
queueService.initQueue();
- queueService.hurryup();
return success(0);
}
+
+ @GetMapping("/reorder")
+ @Operation(summary = "寮�璇婂墠涓�鍒伙紝瀵瑰氨璇婂噯澶囩殑浜哄憳閲嶆柊鎺掑簭")
+ @PreAuthorize("@ss.hasPermission('ecg:queue:setting')")
+ public CommonResult<Integer> queueReorder() {
+ queueService.reorderQueue();
+ return success(0);
+ }
+
}
\ No newline at end of file
diff --git a/jh-module-ecg/jh-module-ecg-biz/src/main/java/cn/lihu/jh/module/ecg/controller/admin/queue/vo/queueRespVO.java b/jh-module-ecg/jh-module-ecg-biz/src/main/java/cn/lihu/jh/module/ecg/controller/admin/queue/vo/queueRespVO.java
index e3a11be..666f44c 100644
--- a/jh-module-ecg/jh-module-ecg-biz/src/main/java/cn/lihu/jh/module/ecg/controller/admin/queue/vo/queueRespVO.java
+++ b/jh-module-ecg/jh-module-ecg-biz/src/main/java/cn/lihu/jh/module/ecg/controller/admin/queue/vo/queueRespVO.java
@@ -25,7 +25,7 @@
@Schema(description = "鎮h�呮�у埆")
@ExcelProperty("鎮h�呮�у埆")
- private Boolean patGender;
+ private Byte patGender;
@Schema(description = "棰勭害鏃堕棿娈�", requiredMode = Schema.RequiredMode.REQUIRED)
@ExcelProperty("棰勭害鏃堕棿娈�")
diff --git a/jh-module-ecg/jh-module-ecg-biz/src/main/java/cn/lihu/jh/module/ecg/dal/mysql/queue/queueMapper.java b/jh-module-ecg/jh-module-ecg-biz/src/main/java/cn/lihu/jh/module/ecg/dal/mysql/queue/queueMapper.java
index 1e4e097..eb6ac45 100644
--- a/jh-module-ecg/jh-module-ecg-biz/src/main/java/cn/lihu/jh/module/ecg/dal/mysql/queue/queueMapper.java
+++ b/jh-module-ecg/jh-module-ecg-biz/src/main/java/cn/lihu/jh/module/ecg/dal/mysql/queue/queueMapper.java
@@ -51,6 +51,15 @@
+"</script>")
List<QueueStatisticDO> queueStatistic(@Param("statusList")List<Byte> statusList);
+ @Select("<script>" +
+ "SELECT * FROM lihu.queue where status in (" +
+ " <foreach collection='statusList' separator=',' item='status'>" +
+ " #{status} " +
+ " </foreach> )" +
+ " order by book_timeslot, create_time " +
+ "</script>")
+ List<QueueDO> getOrderedQueue(@Param("statusList")List<Byte> statusList);
+
//@Update("update lihu.queue set status = #{newStatus} where pat_id = #{patId} ans status = #{curStatus} ")
@Update("update lihu.queue set status = #{newStatus} where seq_num = \n" +
@@ -67,7 +76,7 @@
" <foreach collection='statusList' separator=',' item='status'>" +
" #{status} " +
" </foreach> )" +
- " order by status desc" +
+ " order by seq_num" +
"</script>")
List<QueueDO> getDoctorQueueByStatus(@Param("roomId")Long roomId, @Param("bedNo")String bedNo, @Param("statusList")List<Byte> statusList);
}
diff --git a/jh-module-ecg/jh-module-ecg-biz/src/main/java/cn/lihu/jh/module/ecg/service/queue/queueService.java b/jh-module-ecg/jh-module-ecg-biz/src/main/java/cn/lihu/jh/module/ecg/service/queue/queueService.java
index 62a03c5..a4d4204 100644
--- a/jh-module-ecg/jh-module-ecg-biz/src/main/java/cn/lihu/jh/module/ecg/service/queue/queueService.java
+++ b/jh-module-ecg/jh-module-ecg-biz/src/main/java/cn/lihu/jh/module/ecg/service/queue/queueService.java
@@ -68,6 +68,11 @@
void initQueue();
/**
+ * 寮�璇婂墠涓�鍒伙紝瀵� 灏辫瘖鍑嗗鐨� 浜哄憳 閲嶆柊鎺掑簭
+ */
+ void reorderQueue();
+
+ /**
* 鎶婂尰鐢熷�欒瘖鐨勯槦鍒楀婊�
*/
void hurryup();
@@ -75,12 +80,12 @@
/**
* 鍖荤敓鍙笅涓�浣嶆偅鑰�
*/
- void nextPatient(Long roomId, String bedNo);
+ void finishNextPatient(Long roomId, String bedNo);
/**
* 鍖荤敓鐪嬪畬鎮h��
*/
- void finishPatient(Long roomId, String bedNo);
+ void passNextPatient(Long roomId, String bedNo);
List<QueueDO> getDoctorQueueByStatus(Long roomId, String bedNo, List<Byte> statusList);
}
diff --git a/jh-module-ecg/jh-module-ecg-biz/src/main/java/cn/lihu/jh/module/ecg/service/queue/queueServiceImpl.java b/jh-module-ecg/jh-module-ecg-biz/src/main/java/cn/lihu/jh/module/ecg/service/queue/queueServiceImpl.java
index 6ce69e2..dd6ba85 100644
--- a/jh-module-ecg/jh-module-ecg-biz/src/main/java/cn/lihu/jh/module/ecg/service/queue/queueServiceImpl.java
+++ b/jh-module-ecg/jh-module-ecg-biz/src/main/java/cn/lihu/jh/module/ecg/service/queue/queueServiceImpl.java
@@ -2,11 +2,8 @@
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;
@@ -17,13 +14,13 @@
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.*;
@@ -97,34 +94,6 @@
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();
@@ -133,7 +102,7 @@
List<RoomDO> roomDOList = roomMapper.simpleRoomList();
List<BedQueueBO> bedQueueBOList = roomDOList.stream().map(item -> BeanUtils.toBean(item, BedQueueBO.class)).toList();
- // 浠嶥B 鑾峰彇 闃熷垪涓� 灏辫瘖鍑嗗涓汉鍛� 鍒楄〃
+ // 浠嶥B 鑾峰彇 闃熷垪涓� 灏辫瘖鍑嗗涓汉鍛樼粺璁� 鍒楄〃
List<Byte> queueStatusList = new ArrayList<>();
queueStatusList.add(QueueStatusEnum.READY.getStatus());
List<QueueStatisticDO> queueStatisticDOList = queueMapper.queueStatistic(queueStatusList);
@@ -150,6 +119,21 @@
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() );
}
/**
@@ -183,16 +167,16 @@
}
}
- 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());
@@ -206,8 +190,27 @@
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;
}
+
}
--
Gitblit v1.9.3