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/dal/mysql/room/RoomMapper.java | 207 +++++++++++++++++++++++++++++++++++++++++++++++++--
1 files changed, 197 insertions(+), 10 deletions(-)
diff --git a/jh-module-ecg/jh-module-ecg-biz/src/main/java/cn/lihu/jh/module/ecg/dal/mysql/room/RoomMapper.java b/jh-module-ecg/jh-module-ecg-biz/src/main/java/cn/lihu/jh/module/ecg/dal/mysql/room/RoomMapper.java
index cb951c8..1bc582b 100644
--- a/jh-module-ecg/jh-module-ecg-biz/src/main/java/cn/lihu/jh/module/ecg/dal/mysql/room/RoomMapper.java
+++ b/jh-module-ecg/jh-module-ecg-biz/src/main/java/cn/lihu/jh/module/ecg/dal/mysql/room/RoomMapper.java
@@ -19,16 +19,64 @@
@Mapper
public interface RoomMapper extends BaseMapperX<RoomDO> {
+ /**
+ * 璇婂宸ヤ綅鍒嗛〉锛堣瘖瀹ょ鐞嗗垪琛� / 瀵煎嚭鍏辩敤锛夈��
+ *
+ * <p>鎺掑簭锛堟湰闇�姹傦級锛�**璇婂缂栧彿鍗囧簭 鈫� 宸ヤ綅鍙峰崌搴�**锛屽悓涓�璇婂鏈夊涓伐浣嶆椂椤哄簭绋冲畾銆�
+ * 鍘熷疄鐜版槸 {@code orderByDesc(id)}锛堝悗鍔犵殑鎺掓渶鍓嶏級锛屼笌"鎸夎瘖瀹ょ紪鍙风湅"鐨勭幇鍦轰範鎯笉绗︺��
+ */
default PageResult<RoomDO> selectPage(RoomPageReqVO reqVO) {
return selectPage(reqVO, new LambdaQueryWrapperX<RoomDO>()
.eqIfPresent(RoomDO::getRoomId, reqVO.getRoomId())
.eqIfPresent(RoomDO::getBedNo, reqVO.getBedNo())
.betweenIfPresent(RoomDO::getCreateTime, reqVO.getCreateTime())
- .orderByDesc(RoomDO::getId));
+ .orderByAsc(RoomDO::getRoomId)
+ .orderByAsc(RoomDO::getBedNo));
}
- @Select("select * from lihu.clinic_room where ip = #{ip}")
+ /**
+ * 鎸� IP 鏌ヨ IP 涓�**鍙敤**鐨勫伐浣嶏紙渚�"鎸塈P鑷姩鍖归厤宸ヤ綅"浣跨敤锛夈��
+ *
+ * <p>涓夋潯杩囨护缂轰竴涓嶅彲锛�
+ * <ul>
+ * <li>{@code deleted = 0}锛氬師瀹炵幇鏄8鏌ワ紝宸插垹闄ょ殑宸ヤ綅涔熶細琚尮閰嶅埌鈥斺��
+ * 涓�鏃︽煇 IP 琚洖鏀跺啀鍒嗛厤缁欐柊宸ヤ綅锛屽氨浼氳嚜鍔ㄥ叆搴у埌鍘嗗彶鑴忓伐浣嶄笂锛�</li>
+ * <li>{@code status != 0(宸插叧闂�)}锛氬凡鍏抽棴鐨勫伐浣嶄笉璇ヨ鑷姩鍏ュ骇锛堝惁鍒欎汉鍧愪笂鍘诲嵈娌℃湁鍊欒瘖闃熷垪锛岀湅鐫�鍍�"娌$梾浜�"锛夛紱</li>
+ * <li>{@code ip <> ''}锛氱┖ IP 涓嶅仛鍖归厤锛堥伩鍏嶅巻鍙茬┖鍊艰琚壂鍒帮級銆�</li>
+ * </ul>
+ * 鐘舵�佸彇鍊艰 {@link cn.lihu.jh.module.ecg.enums.BedStatusEnum}锛�0宸插叧闂� / 10宸插紑閫� / 20鏈夊尰鐢� / 30鏆傚仠銆�</p>
+ */
+ @Select("select * from lihu.clinic_room " +
+ " where ip = #{ip} and deleted = 0 and coalesce(status, 0) <> 0")
+ @Results({
+ @Result(property = "checkTypes", column = "check_types", typeHandler = com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler.class)
+ })
List<RoomDO> queueByIp(@Param("ip") String ip);
+
+ /**
+ * 璇� IP 鏄惁宸茬粦瀹氬湪**鍒殑**宸ヤ綅涓婏紙鐢ㄤ簬"閫夋嫨宸ヤ綅妯″紡"閲屽啓 IP 鍓嶇殑鍐茬獊妫�娴嬶級銆�
+ * <p>涓�涓伐浣嶅彧鏈変竴涓� ip 瀛楁锛岃嫢涓ゅ彴鐢佃剳璧板悓涓�鍑哄彛 IP锛屽悗缁戝畾鐨勪細鎶婂墠闈㈢殑鎶㈣蛋锛�
+ * 鎵�浠ヨ鐩栧墠瑕佸厛璁╃敤鎴风‘璁わ紙鍓嶇鎷垮埌鍐茬獊宸ヤ綅鍚庡脊纭锛屽啀甯� force 閲嶈皟锛夈��</p>
+ *
+ * @param ip 寰呯粦瀹氱殑 IP
+ * @param excludeId 鎺掗櫎鐨勫伐浣嶄富閿紙閫氬父鏄湰娆¤缁戝畾鐨勯偅涓級锛屽彲涓虹┖
+ */
+ @Select("<script> " +
+ "SELECT * FROM lihu.clinic_room " +
+ " WHERE deleted = 0 AND ip = #{ip} " +
+ " <if test='excludeId != null'> AND id != #{excludeId} </if> " +
+ " ORDER BY id" +
+ "</script>")
+ @Results({
+ @Result(property = "checkTypes", column = "check_types", typeHandler = com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler.class)
+ })
+ List<RoomDO> listByIpExcludeId(@Param("ip") String ip, @Param("excludeId") Integer excludeId);
+
+ /**
+ * 鎶婃湰鏈� IP 鍐欏埌鎸囧畾宸ヤ綅锛堝彧鏀� ip 涓�涓瓧娈碉紝渚�"閫夋嫨宸ヤ綅妯″紡 2/3"浣跨敤锛夈��
+ */
+ @Update("update lihu.clinic_room set ip = #{ip} where id = #{id} and deleted = 0")
+ Integer updateIpById(@Param("id") Integer id, @Param("ip") String ip);
@Update("<script> " +
"update lihu.clinic_room set status=#{newStatus}, doc_id=null, doc_name=null " +
@@ -61,6 +109,38 @@
@Select("SELECT * FROM lihu.clinic_room where doc_id=#{docId}")
List<RoomDO> getRoomByDocId(@Param("docId")Long docId);
+
+ /**
+ * 銆愭湰闇�姹偮蜂竴浜哄宸ヤ綅銆戣鍖荤敓**褰撳墠鏈夋晥**鍗犵敤鐨勫叏閮ㄥ伐浣嶃��
+ *
+ * <p>姣� {@link #getRoomByDocId} 澶氫簡涓や釜杩囨护锛�
+ * <ul>
+ * <li>{@code deleted = 0}锛氭帓闄ゅ巻鍙查�昏緫鍒犻櫎琛岋紙鍘� SQL 娌℃湁锛屽彲鑳借繑鍥炶剰琛岋級锛�</li>
+ * <li>{@code status in (20,30)}锛氬彧鍙栥�屽尰鐢熷湪搴�(DOCTOR_ON) / 鍖荤敓鏆傚仠(DOCTOR_PAUSE)銆嶏紝
+ * 鎺掗櫎鏁版嵁涓嶄竴鑷存畫鐣欑殑"doc_id 杩樺湪浣嗙姸鎬佸凡鍥炵┖闂�"銆備袱涓�间互甯搁噺浼犲叆锛岄伩鍏嶇‖缂栫爜銆�</li>
+ * </ul>
+ */
+ @Select("<script> " +
+ "SELECT * FROM lihu.clinic_room where doc_id = #{docId} and deleted = 0 " +
+ " and status in ( " +
+ " <foreach collection='statusList' separator=',' item='st'>#{st}</foreach> " +
+ " ) order by room_id, bed_no " +
+ "</script>")
+ List<RoomDO> getMyActiveBeds(@Param("docId") Long docId, @Param("statusList") List<Integer> statusList);
+
+ /**
+ * 銆愭湰闇�姹偮风粺璁℃寜浜哄悎骞躲�戝綋鍓�**鍦ㄥ骇鍖荤敓鏁�**锛堟寜 doc_id 鍘婚噸锛夈��
+ *
+ * <p>涓�浜哄宸ヤ綅鍚庯紝"鍦ㄥ骇宸ヤ綅鏁�"浼氭寜宸ヤ綅绱锛堟暟鍊兼湰韬纭級锛�
+ * 浣嗙洃鎺ч〉杩橀渶瑕�"鍒板簳鍑犱釜鍖荤敓鍦ㄥ矖"锛岀敤瀹冭ˉ涓�涓寚鏍囥��
+ */
+ @Select("<script> " +
+ "select count(distinct doc_id) from lihu.clinic_room " +
+ " where doc_id is not null and deleted = 0 and status in ( " +
+ " <foreach collection='statusList' separator=',' item='st'>#{st}</foreach> " +
+ " ) " +
+ "</script>")
+ Integer countSeatedDoctors(@Param("statusList") List<Integer> statusList);
@Update("<script> " +
"update lihu.clinic_room set status=#{newStatus.status} " +
@@ -103,23 +183,130 @@
Integer setBedStopReady(@Param("roomId")Long roomId, @Param("bedNo")String bedNo,
@Param("stopReady")Integer stopReady);
+ /**
+ * 鍏ュ骇锛氭妸璇ュ伐浣嶇殑**涓讳汉**璁句负鎴戯紙鎸� room_id + bed_no 瀹氫綅锛夈��
+ *
+ * <p>銆愭湰娆℃斁瀹� + 淇銆�
+ * <ul>
+ * <li>鍙叆搴ф潯浠剁粺涓�涓猴細<b>锛堟棤涓讳汉 鎴� 涓讳汉鏄垜锛変笖 鐘舵�� 鈭� claimableStatusList</b>銆�
+ * 鐘舵�侀泦鍚堢敱璋冪敤鏂逛紶 {宸插紑閫�, 鏈夊尰鐢�, 鏆傚仠}锛�**鎺掗櫎"宸插叧闂�"**锛夈��<br>
+ * 鍘熸潵"鏃犱富浜�"鏃跺彧璁�"宸插紑閫�"锛氫竴鏃︽暟鎹噷鍑虹幇"doc_id 涓虹┖浣嗙姸鎬佷粛鏄湁鍖荤敓/鏆傚仠"
+ * 杩欑涓嶄竴鑷达紝鍖荤敓绔欏湪宸ヤ綅鍓嶅嵈濮嬬粓鍧愪笉涓婏紝鍙姤"鐘舵�佸紓甯�"锛岀幇鍦烘棤浠庡鐞嗐��</li>
+ * <li>涓讳汉鏄垜鏃跺悓鏍锋斁琛� 鈫� 涓婃娌℃甯哥搴э紙鍏虫祻瑙堝櫒/瓒呮椂锛変篃鑳藉潗鍥炶嚜宸辩殑宸ヤ綅銆�</li>
+ * <li>涓讳汉鏄�**鍒汉**鏃舵洿鏂� 0 琛岋紝璋冪敤鏂规嵁姝ゆ嫆缁濓紙涓嶆尋鎺夋鍦ㄦ搷浣滅殑浜猴級銆�</li>
+ * </ul>
+ */
@Update("<script> " +
- "update lihu.clinic_room set status=#{newStatus.status}, doc_id=#{docId}, doc_name=#{docName} " +
- "where room_id=#{roomId} and bed_no=#{bedNo} and isNull(doc_id)" +
- "and status in ( " +
- " <foreach collection='curStatusList' separator=',' item='curStatus'>" +
- " #{curStatus.status} " +
- " </foreach> );" +
+ "update lihu.clinic_room set status=#{newStatus.status}, doc_id=#{docId}, doc_name=#{docName}, update_time=NOW() " +
+ "where room_id=#{roomId} and bed_no=#{bedNo} and deleted = 0 " +
+ " and ( isNull(doc_id) or doc_id = #{docId} ) " +
+ " and status in ( " +
+ " <foreach collection='claimableStatusList' separator=',' item='curStatus'>#{curStatus.status}</foreach> );" +
"</script>")
- Integer setBedDoctorOn(@Param("roomId")Long roomId, @Param("bedNo")String bedNo, @Param("docId")Long docId, @Param("docName")String docName, @Param("newStatus") BedStatusEnum newStatus, @Param("curStatusList") List<BedStatusEnum> curStatusList);
+ Integer setBedDoctorOn(@Param("roomId")Long roomId, @Param("bedNo")String bedNo, @Param("docId")Long docId, @Param("docName")String docName,
+ @Param("newStatus") BedStatusEnum newStatus,
+ @Param("claimableStatusList") List<BedStatusEnum> claimableStatusList);
+
+ /**
+ * 鍏ュ骇锛氬悓涓婏紝浣嗘寜**涓婚敭 id** 瀹氫綅銆�
+ *
+ * <p>銆愭湰娆′慨澶嶃�戠幇鍦哄嚭鐜拌繃"宸ヤ綅鍦ㄥ簱閲屾槑鏄庢槸绌洪棽鐨勶紝鍏ュ骇鍗存洿鏂� 0 琛� 鈫� 鎶ョ姸鎬佸紓甯�"銆�
+ * 宸茬‘璁や笉鏄鍗犵敤锛涘墿涓嬬殑鍙兘鏄� {@code bed_no} 涓庤姹傚�煎瓨鍦ㄨ倝鐪奸毦杈ㄧ殑宸紓
+ * 锛堢粨灏剧┖鏍笺�佸ぇ灏忓啓銆佸叏瑙掔瓑 鈥斺�� JSON 涓庡鍒剁矘璐撮兘鐪嬩笉鍑烘潵锛夈��
+ * 鍓嶇璇锋眰閲屾湰鏉ュ氨甯� {@code id}锛屽洜姝や紭鍏堟寜涓婚敭鏇存柊锛屽交搴曠粫寮�杩欑被闂銆�
+ */
+ @Update("<script> " +
+ "update lihu.clinic_room set status=#{newStatus.status}, doc_id=#{docId}, doc_name=#{docName}, update_time=NOW() " +
+ "where id=#{id} and deleted = 0 " +
+ " and ( isNull(doc_id) or doc_id = #{docId} ) " +
+ " and status in ( " +
+ " <foreach collection='claimableStatusList' separator=',' item='curStatus'>#{curStatus.status}</foreach> );" +
+ "</script>")
+ Integer setBedDoctorOnById(@Param("id")Integer id, @Param("docId")Long docId, @Param("docName")String docName,
+ @Param("newStatus") BedStatusEnum newStatus,
+ @Param("claimableStatusList") List<BedStatusEnum> claimableStatusList);
+
+ /**
+ * 璇婃柇鐢細鍙栧伐浣�**鍘熷琛�**锛堝惈 {@code bed_no} 鐨勯暱搴︿笌鍗佸叚杩涘埗锛岀敤浜庡彂鐜扮粨灏剧┖鏍�/鍏ㄨ宸紓锛夈��
+ *
+ * <p>浼犲叆 id 鏃舵寜 id 鏌ワ紙鍚凡鍒犻櫎琛岋級锛涘惁鍒欐寜 room_id + {@code TRIM(bed_no)} 瀹芥澗鏌ャ��
+ * 杩斿洖 Map 鑰屼笉鏄� DO锛氳繖閲岃鎶� {@code deleted}銆侀暱搴︺�丠EX 杩欎簺"闈炲疄浣撳瓧娈�"涓�璧峰甫鍑烘潵銆�
+ */
+ @Select("<script>" +
+ "select id, room_id, room_name, bed_no," +
+ " CHAR_LENGTH(bed_no) as bed_no_len, HEX(bed_no) as bed_no_hex," +
+ " ip, status, doc_id, doc_name, op_type, deleted, update_time" +
+ " from lihu.clinic_room" +
+ " where 1 = 1" +
+ " <if test='id != null'> and id = #{id} </if>" +
+ " <if test='id == null'> and room_id = #{roomId} and TRIM(bed_no) = TRIM(#{bedNo}) </if>" +
+ " order by deleted, id" +
+ "</script>")
+ List<Map<String, Object>> selectBedRawState(@Param("id") Integer id, @Param("roomId") Long roomId, @Param("bedNo") String bedNo);
+
+ /**
+ * 銆愭湰闇�姹傘�戜竴涓敤鎴峰彧鍏佽鍗犱竴涓伐浣嶏細鍏ュ骇鎴愬姛鍚庯紝鎶�**鎴戠殑鍏跺畠宸ヤ綅**閲婃斁鎺夈��
+ *
+ * <p>鍙竻 {@code doc_id/doc_name} 骞舵妸鐘舵�佺疆鍥�"宸插紑閫�"锛屼笉鍔� check_types / ip / stop_ready锛�
+ * 鐢� {@code not (room_id = ? and bed_no = ?)} 鎺掗櫎鏈鍏ュ骇鐨勫伐浣嶏紝閬垮厤鎶婅嚜宸卞垰鍧愪笂鐨勪篃娓呮帀銆�
+ *
+ * @param keepRoomId 鏈鍏ュ骇鐨勮瘖瀹ょ紪鍙凤紙淇濈暀涓嶅姩锛�
+ * @param keepBedNo 鏈鍏ュ骇鐨勫伐浣嶅彿锛堜繚鐣欎笉鍔級
+ */
+ @Update("<script> " +
+ "update lihu.clinic_room set status=#{newStatus.status}, doc_id=null, doc_name=null, update_time=NOW() " +
+ "where doc_id=#{docId} and deleted = 0 " +
+ "<if test='keepRoomId != null and keepBedNo != null'>" +
+ " and not (room_id = #{keepRoomId} and bed_no = #{keepBedNo}) " +
+ "</if>" +
+ "</script>")
+ Integer releaseOtherBedsOfDoc(@Param("docId")Long docId, @Param("keepRoomId")Long keepRoomId,
+ @Param("keepBedNo")String keepBedNo, @Param("newStatus") BedStatusEnum newStatus);
@Update("<script> " +
"update lihu.clinic_room set status=#{newStatus.status}, doc_id=null, doc_name=null " +
- "where room_id=#{roomId} and bed_no=#{bedNo} " +
+ "where room_id=#{roomId} and bed_no=#{bedNo} and doc_id=#{docId} " +
"and status in ( " +
" <foreach collection='curStatusList' separator=',' item='curStatus'>" +
" #{curStatus.status} " +
" </foreach> );" +
"</script>")
Integer setBedDoctorOff(@Param("roomId")Long roomId, @Param("bedNo")String bedNo, @Param("docId")Long docId, @Param("newStatus") BedStatusEnum newStatus, @Param("curStatusList") List<BedStatusEnum> curStatusList);
+
+ /**
+ * 銆愭湰娆¢渶姹傘�戦棴璇婃椂娓呯┖**鎵�鏈夎鍖荤敓鍗犵敤**鐨勫伐浣嶏紙doc_id 闈炵┖锛屼笖鐘舵�佷负銆屽尰鐢熷湪宀� / 鏆傚仠銆嶏級銆�
+ * <p>
+ * 鑳屾櫙锛氬伐浣嶄笉鍐嶅洜銆岀┖闂茶秴鏃� / 浠ょ墝澶辨晥 / 鍒锋柊椤甸潰銆嶈閲婃斁锛堥伩鍏嶅尰鐢熺寮�涓�浼氬効灏变涪宸ヤ綅锛夛紝
+ * 鍥犳闇�瑕佷竴涓厹搴曪紝闃叉鍖荤敓涓嬬彮蹇樼搴у鑷村伐浣嶉暱鏈熻鍗犵敤 鈥斺�� 闂瘖鏃剁粺涓�娓呯┖褰撶彮宸ヤ綅銆�
+ *
+ * @param newStatus 娓呯┖鍚庣疆涓虹殑鐘舵�侊紙绌洪棽 / 宸插紑閫氾級
+ * @param curStatusList 鍏佽琚竻绌虹殑褰撳墠鐘舵�侀泦鍚�
+ */
+ @Update("<script> " +
+ "update lihu.clinic_room set status=#{newStatus.status}, doc_id=null, doc_name=null, update_time=NOW() " +
+ "where deleted = 0 and doc_id is not null " +
+ "and status in ( " +
+ " <foreach collection='curStatusList' separator=',' item='curStatus'>" +
+ " #{curStatus.status} " +
+ " </foreach> )" +
+ "</script>")
+ Integer clearAllBedDoctors(@Param("newStatus") BedStatusEnum newStatus, @Param("curStatusList") List<BedStatusEnum> curStatusList);
+
+ /**
+ * 銆愭湰娆¢渶姹傘�戠鐞嗗憳寮哄埗娓呯┖鏌愪釜宸ヤ綅銆�
+ * <p>
+ * 涓� {@link #setBedDoctorOff} 鐨勫敮涓�鍖哄埆锛�**涓嶅甫 `doc_id = ?` 鏉′欢**锛�
+ * 鍥犳鍙互鎶�"鍒汉鍗犵敤涓�"鐨勫伐浣嶆竻鎺夛紙鍖荤敓涓嬬彮蹇樼搴с�佹崲浜轰娇鐢ㄥ悓涓�宸ヤ綅鏃剁敤锛夈��
+ * 浠嶇劧瑕佹眰褰撳墠鐘舵�佹槸銆屽尰鐢熷湪宀� / 鏆傚仠銆嶄笖 doc_id 闈炵┖锛岄伩鍏嶈娓呯┖闂插伐浣嶃��
+ */
+ @Update("<script> " +
+ "update lihu.clinic_room set status=#{newStatus.status}, doc_id=null, doc_name=null, update_time=NOW() " +
+ "where room_id=#{roomId} and bed_no=#{bedNo} and doc_id is not null " +
+ "and status in ( " +
+ " <foreach collection='curStatusList' separator=',' item='curStatus'>" +
+ " #{curStatus.status} " +
+ " </foreach> )" +
+ "</script>")
+ Integer setBedDoctorOffAdmin(@Param("roomId")Long roomId, @Param("bedNo")String bedNo,
+ @Param("newStatus") BedStatusEnum newStatus, @Param("curStatusList") List<BedStatusEnum> curStatusList);
}
--
Gitblit v1.9.3