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