From d7e3192804fca756d881af360ffd5eea157ef9ad Mon Sep 17 00:00:00 2001
From: 陈昶聿 <chychen@nbjetron.com>
Date: 星期三, 21 十月 2026 15:45:18 +0800
Subject: [PATCH] 【市一】电话挂断服务

---
 smartor/src/main/resources/mapper/smartor/PatMedInhospMapper.xml |  128 ++++++++++++++++++++++++++++++------------
 1 files changed, 91 insertions(+), 37 deletions(-)

diff --git a/smartor/src/main/resources/mapper/smartor/PatMedInhospMapper.xml b/smartor/src/main/resources/mapper/smartor/PatMedInhospMapper.xml
index e9f230f..f241ff6 100644
--- a/smartor/src/main/resources/mapper/smartor/PatMedInhospMapper.xml
+++ b/smartor/src/main/resources/mapper/smartor/PatMedInhospMapper.xml
@@ -247,18 +247,15 @@
         AND b.del_flag = 0
         AND a.idcardno IS NOT NULL
         <if test="inhospid != null">and b.inhospid = #{inhospid}</if>
-        <if test="startOutHospTime != null ">and date_format(b.endtime,'%y%m%d') &gt;=
-            date_format(#{startOutHospTime},'%y%m%d')
-        </if>
-        <if test="endOutHospTime != null ">and date_format(b.endtime,'%y%m%d') &lt;=
-            date_format(#{endOutHospTime},'%y%m%d')
-        </if>
-        <if test="startInHospTime != null ">and date_format(b.starttime,'%y%m%d') &gt;=
-            date_format(#{startInHospTime},'%y%m%d')
-        </if>
-        <if test="endInHospTime != null ">and date_format(b.starttime,'%y%m%d') &lt;=
-            date_format(#{endInHospTime},'%y%m%d')
-        </if>
+        <!--
+          鏃堕棿鑼冨洿涓嶈鍐欐垚 date_format(b.endtime,'%y%m%d') >= date_format(#{...},'%y%m%d')锛�
+          鍒椾笂濂楀嚱鏁颁細璁� endtime / starttime 涓婄殑绱㈠紩褰诲簳澶辨晥锛堣�屼笖 %y 鏄袱浣嶅勾浠斤級銆�
+          杩欓噷鎶婂嚱鏁版尓鍒板弬鏁颁晶锛岃涔夌瓑浠凤細>= 褰撳ぉ 0 鐐癸紝< 娆℃棩 0 鐐广��
+        -->
+        <if test="startOutHospTime != null ">and b.endtime &gt;= date(#{startOutHospTime})</if>
+        <if test="endOutHospTime != null ">and b.endtime &lt; date(#{endOutHospTime}) + interval 1 day</if>
+        <if test="startInHospTime != null ">and b.starttime &gt;= date(#{startInHospTime})</if>
+        <if test="endInHospTime != null ">and b.starttime &lt; date(#{endInHospTime}) + interval 1 day</if>
         <if test="hospitalname != null  and hospitalname != ''">and hospitalname like concat('%', #{hospitalname},
             '%')
         </if>
@@ -274,8 +271,8 @@
         <if test="inhospno != null ">and b.inhospno = #{inhospno}</if>
         <if test="fuflag != null ">and b.fuflag = #{fuflag}</if>
         <if test="orgid != null ">and b.orgid = #{orgid}</if>
+        <if test="campusid != null ">and b.campusid = #{campusid}</if>
         <if test="serialnum != null ">and b.serialnum = #{serialnum}</if>
-        <if test="endtime != null ">and b.endtime = #{endtime}</if>
         <if test="patno != null ">and b.patno = #{patno}</if>
         <if test="nurseId != null ">and b.nurse_id = #{nurseId}</if>
         <if test="nurseName != null and nurseName != ''">and b.nurse_name = #{nurseName}</if>
@@ -293,7 +290,6 @@
         <if test="cry != null and cry == 2 ">and b.inhospstate=2</if>
         <if test="cry != null and cry == 3 ">and b.inhospstate=3</if>
         <if test="inhospstate != null ">and b.inhospstate = #{inhospstate}</if>
-        <if test="campusid != null ">and b.campusid = #{campusid}</if>
         <if test="schemestatus != null ">and b.schemestatus = #{schemestatus}</if>
         <if test="outWayId != null ">and b.out_way_id = #{outWayId}</if>
         <if test="outWayName != null ">and b.out_way_name = #{outWayName}</if>
@@ -353,24 +349,47 @@
         <if test="medicalCode != null and medicalCode != ''">and b.medical_code = #{medicalCode}</if>
         <if test="medicalName != null and medicalName != ''">and b.medical_name = #{medicalName}</if>
         <if test="medicalCompany != null and medicalCompany != ''">and b.medical_company = #{medicalCompany}</if>
-        GROUP BY
-        b.inhospid,
-        a.age,
-        a.age_unit,
-        a.telcode,
-        a.id,
-        a.sex
-        <if test="cry != null and cry==1">
-            order by b.endtime desc
-        </if>
-        <if test="cry != null and cry==2">
-            order by b.endtime desc
-        </if>
-        <if test="cry != null and cry==3">
+        <!--
+          鍘熸潵杩欓噷鏈変竴娈� GROUP BY b.inhospid, a.age, a.age_unit, a.telcode, a.id, a.sex銆�
+          b.inhospid 鏄富閿�乤.id = b.patid 鏄竴瀵逛竴鍏宠仈锛屽垎缁勪笉浼氬悎骞朵换浣曡锛屽彧浼氳 MySQL
+          澶氬缓涓�寮犱复鏃惰〃銆佸苟璁╁垎椤电殑 count 鍙樻垚娲剧敓琛ㄣ�傝繖閲岀洿鎺ュ幓鎺夈��
+        -->
+        <if test="cry != null and (cry == 1 or cry == 2 or cry == 3)">
             order by b.endtime desc
         </if>
         <if test="cry != null and cry==0">
-            order by b.starttime desc , b.bed_no asc
+            <!--
+              鍦ㄩ櫌鎮h�咃細鍙寜鍏ラ櫌搴婁綅姝�/鍊掑簭锛坆edSort=asc 鎴� desc锛夛紝涓嶄紶鏃朵繚鎸侀粯璁ゆ帓搴忥紙鍏ラ櫌鏃堕棿鍊掑簭 + 搴婁綅姝e簭锛夈��
+              搴婁綅鎸夎嚜鐒跺簭鎺掞紙鍙敤 5.7 涔熸敮鎸佺殑 REGEXP/CAST/TRIM/LENGTH锛屼笉渚濊禆 8.0 鐨� REGEXP_REPLACE锛夛細
+                1) 搴婁綅涓虹┖/绌轰覆鐨勬帓鏈�鍚�
+                2) 绾暟瀛楀簥浣嶆帓鍓嶉潰锛屾寜鏁板�煎ぇ灏忥紙2 鍦� 10 鍓嶏級
+                3) 甯﹀瓧姣�/姹夊瓧鐨勫簥浣嶆寜闀垮害 + 瀛楃涓诧紙A2 鍦� A12 鍓嶏級
+                4) inhospid 鍏滃簳锛屼繚璇佺炕椤甸『搴忕ǔ瀹�
+              鍊掑簭鍙弽杞� 2)銆�3) 涓ょ粍鍐呴儴椤哄簭锛氱┖搴婁綅浠嶆帓鏈�鍚庯紝绾暟瀛椾粛鍦ㄥ墠銆�
+            -->
+            <choose>
+                <when test='"asc".equals(bedSort)'>
+                    order by
+                    coalesce(trim(b.bed_no), '') = '' ,
+                    (trim(b.bed_no) regexp '^[0-9]+$') = 0 ,
+                    cast(trim(b.bed_no) as unsigned) asc ,
+                    length(trim(b.bed_no)) asc ,
+                    trim(b.bed_no) asc ,
+                    b.inhospid asc
+                </when>
+                <when test='"desc".equals(bedSort)'>
+                    order by
+                    coalesce(trim(b.bed_no), '') = '' ,
+                    (trim(b.bed_no) regexp '^[0-9]+$') = 0 ,
+                    cast(trim(b.bed_no) as unsigned) desc ,
+                    length(trim(b.bed_no)) desc ,
+                    trim(b.bed_no) desc ,
+                    b.inhospid asc
+                </when>
+                <otherwise>
+                    order by b.starttime desc , b.bed_no asc
+                </otherwise>
+            </choose>
         </if>
     </select>
 
@@ -453,6 +472,9 @@
         <if test="inhospMydFlag != null ">and b.inhosp_myd_flag = #{inhospMydFlag}</if>
         <if test="orgid != null and orgid != ''">
             and orgid = #{orgid}
+        </if>
+        <if test="campusid != null and campusid != ''">
+            and campusid = #{campusid}
         </if>
         <if test="encounterSourceId != null and encounterSourceId != ''">
             and b.encounter_source_id = #{encounterSourceId}
@@ -565,6 +587,9 @@
         <if test="orgid != null and orgid != ''">
             and a.orgid = #{orgid}
         </if>
+        <if test="campusid != null and campusid != ''">
+            and a.campusid = #{campusid}
+        </if>
         <if test="hospitalname != null  and hospitalname != ''">and hospitalname like concat('%', #{hospitalname},
             '%')
         </if>
@@ -580,7 +605,6 @@
         <if test="nurseId != null ">and b.nurse_id = #{nurseId}</if>
         <if test="nurseName != null ">and b.nurse_name = #{nurseName}</if>
         <if test="patno != null ">and b.patno = #{patno}</if>
-        <if test="campusid != null ">and b.campusid = #{campusid}</if>
         <if test="diagcheckFlag != null ">and b.diagcheck_flag = #{diagcheckFlag}</if>
         <if test="deptcheckFlag != null ">and b.deptcheck_flag = #{deptcheckFlag}</if>
         <if test="scheduleCheckFlag != null ">and b.schedulecheck_flag = #{scheduleCheckFlag}</if>
@@ -625,6 +649,19 @@
           AND d.del_flag = 0
     </select>
 
+    <!-- 鎵归噺鏌ユ爣绛撅紝鏇夸唬鍒楄〃閫愯璋冪敤 getTagnameBypatid 鐨� N+1 鏌ヨ -->
+    <select id="selectTagnameByPatids" resultType="com.smartor.domain.PatArchivetag">
+        SELECT d.patid      AS patid,
+               GROUP_CONCAT(d.tagname, ', ') AS tagname
+        FROM pat_archivetag d
+        WHERE d.del_flag = 0
+          AND d.patid IN
+        <foreach collection="patids" item="patid" open="(" separator="," close=")">
+            #{patid}
+        </foreach>
+        GROUP BY d.patid
+    </select>
+
 
     <select id="selectPatMedInhospByInhospid" parameterType="Long" resultMap="PatMedInhospResult">
         <include refid="selectPatMedInhospVo"/>
@@ -652,6 +689,7 @@
         <if test="roomno != null">and roomno = #{roomno}</if>
         <if test="bedNo != null">and bed_no = #{bedNo}</if>
         <if test="orgid != null">and orgid = #{orgid}</if>
+        <if test="campusid != null ">and campusid = #{campusid}</if>
         <if test="updateBy != null">and update_by = #{updateBy}</if>
         <if test="updateTime != null">and update_time = #{updateTime}</if>
         <if test="createBy != null">and create_by = #{createBy}</if>
@@ -701,7 +739,6 @@
         <if test="fuspecialadvice != null ">and fuspecialadvice = #{fuspecialadvice}</if>
         <if test="managementDoctor != null ">and management_doctor = #{managementDoctor}</if>
         <if test="managementDoctorCode != null ">and management_doctor_code = #{managementDoctorCode}</if>
-        <if test="campusid != null ">and campusid = #{campusid}</if>
         <if test="importanceFlagCode != null ">and importance_flag_code = #{importanceFlagCode}</if>
         <if test="emergencyLevelCode != null ">and emergency_level_code = #{emergencyLevelCode}</if>
         <if test="encounterSourceId != null ">and encounter_source_id = #{encounterSourceId}</if>
@@ -731,6 +768,7 @@
             <if test="roomno != null">roomno,</if>
             <if test="bedNo != null">bed_no,</if>
             <if test="orgid != null">orgid,</if>
+            <if test="campusid != null">campusid,</if>
             <if test="delFlag != null and delFlag != ''">del_flag,</if>
             <if test="updateBy != null">update_by,</if>
             <if test="updateTime != null">update_time,</if>
@@ -781,7 +819,6 @@
             <if test="fuspecialadvice != null ">fuspecialadvice,</if>
             <if test="managementDoctor != null ">management_doctor,</if>
             <if test="managementDoctorCode != null ">management_doctor_code,</if>
-            <if test="campusid != null ">campusid,</if>
             <if test="inhospMydFlag != null ">inhosp_myd_flag,</if>
             <if test="importanceFlagCode != null ">importance_flag_code,</if>
             <if test="emergencyLevelCode != null ">emergency_level_code,</if>
@@ -803,8 +840,10 @@
             <if test="deptcode != null">#{deptcode},</if>
             <if test="deptname != null">#{deptname},</if>
             <if test="roomno != null">#{roomno},</if>
-            <if test="bedNo != null">#{bedNo},</if>
+            <!-- 搴婁綅绌轰覆锛圚IS 鏃犲綋鍓嶅簥浣嶏級钀藉簱涓� null锛屼繚鎸�"鏈夊�� or null"涓ょ鐘舵�� -->
+            <if test="bedNo != null">nullif(#{bedNo}, ''),</if>
             <if test="orgid != null">#{orgid},</if>
+            <if test="campusid != null">#{campusid},</if>
             <if test="delFlag != null and delFlag != ''">#{delFlag},</if>
             <if test="updateBy != null">#{updateBy},</if>
             <if test="updateTime != null">#{updateTime},</if>
@@ -855,7 +894,6 @@
             <if test="fuspecialadvice != null ">#{fuspecialadvice},</if>
             <if test="managementDoctor != null ">#{managementDoctor},</if>
             <if test="managementDoctorCode != null ">#{managementDoctorCode},</if>
-            <if test="campusid != null ">#{campusid},</if>
             <if test="importanceFlagCode != null ">#{importanceFlagCode},</if>
             <if test="emergencyLevelCode != null ">#{emergencyLevelCode},</if>
             <if test="encounterSourceId != null ">#{encounterSourceId},</if>
@@ -889,7 +927,7 @@
             #{item.serialnum}, #{item.hospitalname}, #{item.hospitalcode}, #{item.hospitaldistrictcode},
             #{item.hospitaldistrictname},
             #{item.icd10code}, #{item.diagname}, #{item.starttime}, #{item.endtime}, #{item.deptcode}, #{item.deptname},
-            #{item.roomno}, #{item.bedNo},
+            #{item.roomno}, nullif(#{item.bedNo}, ''),
             #{item.orgid}, #{item.delFlag}, #{item.updateBy}, #{item.updateTime}, #{item.createBy}, #{item.createTime},
             #{item.isupload},
             #{item.uploadTime}, #{item.patid}, #{item.leavediagname}, #{item.leaveicd10code}, #{item.drcode},
@@ -914,6 +952,11 @@
     <update id="updatePatMedInhosp" parameterType="com.smartor.domain.PatMedInhosp">
         update pat_med_inhosp
         <trim prefix="SET" suffixOverrides=",">
+            <!--
+              鍏滃簳锛氫笅闈㈠瓧娈靛叏涓虹┖鏃讹紙渚嬪璋冪敤鏂瑰彧浼犱簡 inhospid锛夛紝濡傛灉娌℃湁浠讳綍 SET 椤逛細鐢熸垚
+              "update pat_med_inhosp where inhospid = ?" 杩欑闈炴硶 SQL銆傝繖閲屾斁涓�涓嚜璧嬪�硷紝淇濊瘉 SET 涓嶄负绌轰笖涓嶆敼鏁版嵁銆�
+            -->
+            inhospid = inhospid,
             <if test="serialnum != null">serialnum = #{serialnum},</if>
             <if test="hospitalname != null">hospitalname = #{hospitalname},</if>
             <if test="hospitalcode != null">hospitalcode = #{hospitalcode},</if>
@@ -926,8 +969,14 @@
             <if test="deptcode != null">deptcode = #{deptcode},</if>
             <if test="deptname != null">deptname = #{deptname},</if>
             <if test="roomno != null">roomno = #{roomno},</if>
-            <if test="bedNo != null">bed_no = #{bedNo},</if>
+            <!--
+              搴婁綅锛欻IS 浼犵┖涓蹭唬琛�"褰撳墠娌℃湁搴婁綅"锛堟崲搴娿�佹垨浜哄凡绂婚櫌杩樻病鍔炲嚭闄㈡墜缁級锛岃惤搴撲负 null锛�
+              瀹屽叏涓嶄紶(null)鍒欎笉鏀瑰姩搴婁綅銆傜┖涓蹭笌 null 蹇呴』鍒嗗紑鍒ゆ柇锛屼笉鑳介兘璺宠繃锛屽惁鍒欏簥浣嶄笉浼氳娓呮帀銆�
+            -->
+            <if test='bedNo != null and !"".equals(bedNo)'>bed_no = #{bedNo},</if>
+            <if test='bedNo != null and "".equals(bedNo)'>bed_no = null,</if>
             <if test="orgid != null">orgid = #{orgid},</if>
+            <if test="campusid != null">campusid = #{campusid},</if>
             <if test="delFlag != null and delFlag != ''">del_flag = #{delFlag},</if>
             <if test="updateBy != null">update_by = #{updateBy},</if>
             <if test="updateTime != null">update_time = #{updateTime},</if>
@@ -978,7 +1027,6 @@
             <if test="fuspecialadvice != null ">fuspecialadvice = #{fuspecialadvice},</if>
             <if test="managementDoctor != null ">management_doctor = #{managementDoctor},</if>
             <if test="managementDoctorCode != null ">management_doctor_code = #{managementDoctorCode},</if>
-            <if test="campusid != null ">campusid = #{campusid},</if>
             <if test="inhospMydFlag != null ">inhosp_myd_flag = #{inhospMydFlag},</if>
             <if test="importanceFlagCode != null ">importance_flag_code = #{importanceFlagCode},</if>
             <if test="emergencyLevelCode != null ">emergency_level_code = #{emergencyLevelCode},</if>
@@ -1034,6 +1082,9 @@
         <if test="orgid != null and orgid != ''">
             AND pat_med_inhosp.orgid = #{orgid}
         </if>
+        <if test="campusid != null and campusid != ''">
+            and pat_med_inhosp.campusid = #{campusid}
+        </if>
         AND pat_archive.idcardno IS NOT NULL
         <if test="zy != null">
             AND pat_med_inhosp.inhospstate = 0
@@ -1071,6 +1122,9 @@
         <if test="orgid != null and orgid != ''">
             AND orgid = #{orgid}
         </if>
+        <if test="campusid != null and campusid != ''">
+            and campusid = #{campusid}
+        </if>
         <if test="startDate != null">
             AND visit_time &gt;= #{startDate}
         </if>

--
Gitblit v1.9.3