From 68ff33beff11310e830b0615b5a81f83fad0f683 Mon Sep 17 00:00:00 2001
From: yxh <172933527@qq.com>
Date: 星期日, 08 十一月 2026 23:33:14 +0800
Subject: [PATCH] ai优化

---
 jh-module-ecg/jh-module-ecg-biz/src/main/java/cn/lihu/jh/module/ecg/service/room/RoomService.java |  133 ++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 133 insertions(+), 0 deletions(-)

diff --git a/jh-module-ecg/jh-module-ecg-biz/src/main/java/cn/lihu/jh/module/ecg/service/room/RoomService.java b/jh-module-ecg/jh-module-ecg-biz/src/main/java/cn/lihu/jh/module/ecg/service/room/RoomService.java
index b42fa27..f214eed 100644
--- a/jh-module-ecg/jh-module-ecg-biz/src/main/java/cn/lihu/jh/module/ecg/service/room/RoomService.java
+++ b/jh-module-ecg/jh-module-ecg-biz/src/main/java/cn/lihu/jh/module/ecg/service/room/RoomService.java
@@ -6,6 +6,8 @@
 import cn.lihu.jh.module.ecg.controller.admin.room.vo.MonitorInfoVO;
 import cn.lihu.jh.module.ecg.controller.admin.room.vo.RoomPageReqVO;
 import cn.lihu.jh.module.ecg.controller.admin.room.vo.RoomSaveReqVO;
+import cn.lihu.jh.module.ecg.controller.admin.room.vo.RoomSeatRespVO;
+import cn.lihu.jh.module.ecg.controller.admin.room.vo.RoomSelectBedRespVO;
 import cn.lihu.jh.module.ecg.dal.dataobject.room.RoomDO;
 import cn.lihu.jh.module.ecg.dal.dataobject.room.RoomProfile;
 
@@ -50,6 +52,137 @@
     RoomProfile getRoomByIP(String ip, Long roomId);
 
     /**
+     * 銆岄�夋嫨宸ヤ綅妯″紡銆�- 鎸夋湰鏈篒P鍖归厤宸ヤ綅锛氳繑鍥炶IP涓嬬殑鍊欓�夊伐浣嶏紙鏈汉宸插崰鐢� 鈫� 绌洪棽 鈫� 琚粬浜哄崰鐢級銆�
+     * <p>浠呮煡璇€�佷笉鏀瑰彉浠讳綍鐘舵�侊紱鑷姩鍏ュ骇鐢卞墠绔嬁鍒扮粨鏋滃悗娌跨敤鍘熸湁鐨� bedDoctorOn 娴佺▼瀹屾垚銆�</p>
+     *
+     * @param ip    鏉ヨIP
+     * @param docId 褰撳墠鐧诲綍浜篒D锛堝彲鑳戒负绌猴級
+     */
+    List<RoomSelectBedRespVO.RoomSelectBedItem> matchBedsByIp(String ip, Long docId);
+
+    /**
+     * 銆岄�夋嫨宸ヤ綅妯″紡銆�- 鎶婃湰鏈篒P鍐欏埌鎸囧畾宸ヤ綅锛堝彧鏀� clinic_room.ip 涓�涓瓧娈碉級銆�
+     *
+     * @param id 宸ヤ綅涓婚敭
+     * @param ip 鏉ヨIP
+     * @return 鍙楀奖鍝嶈鏁�
+     */
+    Integer bindIpToBed(Integer id, String ip);
+
+    /**
+     * 璇P鏄惁宸茬粡缁戝湪鍒殑宸ヤ綅涓婏紙鍐茬獊妫�娴嬶紝渚涘墠绔脊纭鍚庡啀瑕嗙洊锛夈��
+     *
+     * @param ip        寰呯粦瀹欼P
+     * @param excludeId 鎺掗櫎鐨勫伐浣嶄富閿紝鍙负绌�
+     */
+    List<RoomDO> listIpBindings(String ip, Integer excludeId);
+
+    /**
+     * 銆岄�夋嫨宸ヤ綅妯″紡銆�- 涓�閿嚜鍔ㄥ叆搴э細鎸夋潵璁� IP 鍖归厤宸ヤ綅骞�**鐩存帴钀藉骇**锛堟ā寮� 1/3 鐢級銆�
+     *
+     * <p>涓轰粈涔堣鏈夎繖涓帴鍙o細鍓嶇鍘熸潵鎶娿�寋@code get-ip-bed} 鍖归厤 鈫� {@code bind-ip} 鍐� IP 鈫�
+     * {@code bed-doctor-on} 鍏ュ骇銆嶆媶鎴愪笁涓姹傝嚜宸辨嫾锛屼换涓�姝ュけ璐ラ兘鍙兘鍥炶惤鍒�"鎵嬮�夊伐浣�"锛�
+     * 鐜板満琛ㄧ幇灏辨槸"鐧诲綍鍚庢病鏈夎嚜鍔ㄥ叆搴�"涓旂湅涓嶅嚭鍘熷洜銆傝繖閲屾敹鏁涙垚涓�娆¤皟鐢紝骞惰繑鍥�**璇嗗埆鍒扮殑 IP**
+     * 涓�**鏈叆搴у師鍥�**锛坕p_invalid / nomatch / multi / occupied / error锛夈��
+     *
+     * <p>绛栫暐涓庡師鏈夊墠绔�昏緫淇濇寔涓�鑷达細
+     * 鈶� 宸叉槸鎴戠殑宸ヤ綅 鈫� 骞傜瓑鎭㈠锛涒憽 **鎭板ソ涓�涓�**绌洪棽宸ヤ綅 鈫� 鍗犵敤锛涒憿 澶氫釜绌洪棽 鈫� 涓嶆搮鑷叆搴э紙multi锛夛紱
+     * 鈶� 鍏ㄨ浠栦汉鍗犵敤 鈫� 涓嶆尋鎺夛紙occupied + 鍗犵敤浜哄鍚嶏級銆�
+     *
+     * @param ip      鏉ヨ IP锛堣皟鐢ㄦ柟宸茬敤 {@code IpUtils.normalize} 瑙勮寖鍖栵級
+     * @param docId   褰撳墠鐧诲綍浜�
+     * @param docName 褰撳墠鐧诲綍浜哄鍚�
+     */
+    RoomSeatRespVO autoSeatByIp(String ip, Long docId, String docName);
+
+    /**
+     * 鏌ヨ褰撳墠鐧诲綍浜�**宸插叆搴�**鐨勫伐浣嶏紙缁欑郴缁熼《鏍忔樉绀�"褰撳墠宸ヤ綅"鐢級銆�
+     *
+     * @param docId 褰撳墠鐧诲綍浜�
+     * @return 鏈叆搴ф椂杩斿洖 {@code seated=false} 鐨勭┖缁撴灉
+     */
+    RoomSeatRespVO getMySeat(Long docId);
+
+    /**
+     * 銆愭湰闇�姹偮蜂竴浜哄宸ヤ綅銆戞煡璇㈠綋鍓嶇櫥褰曚汉**鍗犳嵁鐨勫叏閮ㄥ伐浣�**锛堣妭鍋囨棩鍊肩彮澶氬矖浣嶏級銆�
+     *
+     * <p>杩斿洖銆屽尰鐢熷湪搴� / 鍖荤敓鏆傚仠銆嶇姸鎬佺殑宸ヤ綅锛屾寜 roomId + bedNo 鍗囧簭锛�
+     * 鏈崰浠讳綍宸ヤ綅鏃惰繑鍥炵┖鍒楄〃锛堝墠绔嵁姝ゆ樉绀�"鏈叆搴�"锛夈��
+     *
+     * @param docId 褰撳墠鐧诲綍浜�
+     */
+    List<RoomSeatRespVO> getMySeats(Long docId);
+
+    /**
+     * 銆愭湰闇�姹偮锋帴鐝嚜鍔╂帴绠°�戞妸鎸囧畾宸ヤ綅浠�"鍒汉鍗犵敤"鏀逛负"褰撳墠鐧诲綍浜哄崰鐢�"銆�
+     *
+     * <p>浣跨敤鍦烘櫙锛氫笂涓�鐝尰鐢熶笅鐝湭鐐广�岀搴с�嶏紝涓嬩竴鐝尰鐢熷湪鍚屼竴鍙扮數鑴�/鍚屼竴宸ヤ綅鎺ョ彮銆�
+     * 琛屼负锛�
+     * <ol>
+     *   <li>宸ヤ綅涓嶅瓨鍦� 鈫� 鎶ラ敊锛�</li>
+     *   <li>宸ヤ綅绌洪棽锛屾垨鏈潵灏卞睘浜庡綋鍓嶇櫥褰曚汉 鈫� **骞傜瓑鎴愬姛**锛堜笉鎶ラ敊锛夛紱</li>
+     *   <li>琚粬浜哄崰鐢� 鈫� 璁板綍瀹¤鏃ュ織锛堝伐浣嶃�佸師鍗犵敤浜恒�佹搷浣滀汉锛夆啋 寮哄埗娓呯┖鍘熷崰鐢ㄤ汉 鈫� **绔嬪嵆璁╁綋鍓嶇櫥褰曚汉鍏ュ骇**銆�</li>
+     * </ol>
+     *
+     * @param roomId 璇婂缂栧彿
+     * @param bedNo  宸ヤ綅缂栧彿
+     */
+    void takeOverBed(Long roomId, String bedNo);
+
+    /**
+     * 鏍¢獙銆屽綋鍓嶇櫥褰曚汉蹇呴』鏄宸ヤ綅鐨勪富浜恒�嶏紝鍚﹀垯鎶�
+     * {@link cn.lihu.jh.module.ecg.enums.ErrorCodeConstants#ROOM_NOT_OWNER}銆�
+     *
+     * <p>鐢ㄤ簬"涓�/鍥磋"妯″瀷鐨勫啓鎿嶄綔閴存潈锛氬洿瑙備汉鍙兘鐪嬶紝涓嶈兘鏀规暟鎹��
+     * {@code @RequireBedOwner} 鍒囬潰浼氳皟鐢ㄥ畠锛涘彧甯� rentId 涔嬬被鐨勬帴鍙i渶瑕佽嚜琛岃皟鐢ㄣ��
+     *
+     * @param roomId 璇婂缂栧彿
+     * @param bedNo  宸ヤ綅鍙�
+     */
+    void assertBedOwner(Long roomId, String bedNo);
+
+    /**
+     * 鍚屼笂锛屼絾**鎸夋偅鑰呭弽鏌ュ伐浣�**锛氱敤浜庡彧甯︽偅鑰呬俊鎭�佹病鏈� roomId/bedNo 鐨勫啓鎺ュ彛
+     * 锛堟斁寮冩鏌� / 鏀惧純棰嗙敤 / 鏀惧純瑁呮満锛夈��
+     *
+     * <p>鍙嶆煡渚濇嵁锛歿@code queue} 琛ㄥ綋鍓嶈鎮h�� + 妫�鏌ラ」鐩殑閭d竴琛屼笂鐨� room_id / bed_no銆�
+     * 鏌ヤ笉鍒板伐浣嶆椂**鎷掔粷**锛堝畞鍙嫆缁濅篃涓嶆斁琛岋級銆�
+     */
+    void assertBedOwnerByPatient(String patId, Integer checkType);
+
+    /**
+     * 鍚屼笂锛屼絾鏌ヤ笉鍒板伐浣嶆椂**璁拌鍛婃斁琛�**銆�
+     *
+     * <p>鐢ㄤ簬纭垂/鍙栨秷纭垂锛氳繖涓ゆ甯稿湪娴佺▼鏈璋冪敤锛屾偅鑰呭彲鑳藉凡缁忎笉鍦ㄥ伐浣嶉槦鍒椾笂锛�
+     * 涓�寰嬫嫆缁濅細鎶婃甯镐笟鍔℃尅鎺夛紝鏁呰繖閲屽彧璁拌鍛婏紙鍓嶇鍦ㄥ洿瑙傛ā寮忎笅宸茬鐢ㄦ寜閽級銆�
+     */
+    void assertBedOwnerByPatientSoft(String patId, Integer checkType);
+
+    /**
+     * 鏍¢獙銆岃宸ヤ綅褰撳墠鐨勪富浜哄氨鏄� ownerDocId銆嶃��
+     *
+     * <p>鐢ㄤ簬鍥磋浜烘煡鐪�**宸ヤ綅涓讳汉鐨勫凡瀹屾垚妫�鏌ヨ褰�**锛氫笉瑕佹眰璋冪敤鑰呭叆搴э紙鍥磋鏈潵灏辨槸涓嶅叆搴т篃鑳界湅锛夛紝
+     * 浣嗗繀椤荤‘璁よ繖涓� docId 纭疄鏄宸ヤ綅鐜板湪鐨勪富浜猴紝閬垮厤琚綋鎴�"浠绘剰鏌ュ埆浜鸿褰�"鐨勫叆鍙c��
+     *
+     * @param roomId     璇婂缂栧彿
+     * @param bedNo      宸ヤ綅鍙�
+     * @param ownerDocId 鏈熸湜鐨勫伐浣嶄富浜�
+     */
+    void assertBedOwnerIs(Long roomId, String bedNo, Long ownerDocId);
+
+    /**
+     * 宸ヤ綅鐘舵�佽瘖鏂紙鎺掓煡"鍏ュ骇鎶ョ姸鎬佸紓甯�/鎵句笉鍒板伐浣�"锛夈��
+     *
+     * <p>鎶婂簱閲岀殑**鍘熷琛�**鎽婂紑锛歚id / room_id / bed_no(鍚暱搴︿笌 HEX锛岀敤浜庡彂鐜扮粨灏剧┖鏍�/鍏ㄨ) /
+     * status / doc_id / doc_name / deleted / update_time`锛屽苟缁欏嚭涓�鍙ョ粨璁恒��
+     *
+     * @param id     宸ヤ綅涓婚敭锛堜紭鍏堬紝鍚凡鍒犻櫎琛岋級
+     * @param roomId 璇婂缂栧彿锛坕d 涓虹┖鏃剁敤锛�
+     * @param bedNo  宸ヤ綅鍙凤紙id 涓虹┖鏃剁敤锛屾寜 TRIM 瀹芥澗鍖归厤锛�
+     */
+    Map<String, Object> diagnoseBed(Integer id, Long roomId, String bedNo);
+
+    /**
      * 鑾峰緱璇婂鍜岃瘖鐤楀簥鍒嗛〉
      *
      * @param pageReqVO 鍒嗛〉鏌ヨ

--
Gitblit v1.9.3