From 93078044580c2781cb8cf3ac18d2ab90513267de Mon Sep 17 00:00:00 2001
From: liusheng <337615773@qq.com>
Date: 星期一, 28 九月 2026 17:13:36 +0800
Subject: [PATCH] 处理患者再入院状态代码提交

---
 smartor/src/main/resources/mapper/smartor/ServiceSubtaskDetailMapper.xml |  235 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 235 insertions(+), 0 deletions(-)

diff --git a/smartor/src/main/resources/mapper/smartor/ServiceSubtaskDetailMapper.xml b/smartor/src/main/resources/mapper/smartor/ServiceSubtaskDetailMapper.xml
index 1a09422..fe90a21 100644
--- a/smartor/src/main/resources/mapper/smartor/ServiceSubtaskDetailMapper.xml
+++ b/smartor/src/main/resources/mapper/smartor/ServiceSubtaskDetailMapper.xml
@@ -18,6 +18,8 @@
         <result property="assigntime" column="assigntime"/>
         <result property="starttime" column="starttime"/>
         <result property="answertime" column="answertime"/>
+        <result property="dimension" column="lib_templateid"/>
+        <result property="isMydException" column="is_myd_exception"/>
 
         <result property="silent" column="silent"/>
         <result property="dtmfKey" column="dtmf_key"/>
@@ -70,6 +72,8 @@
     <sql id="selectServiceSubtaskDetailVo">
         select id,
                sub_id,
+               is_myd_exception,
+               dimension,
                lib_templateid,
                targetid,
                answerps,
@@ -129,6 +133,8 @@
         <include refid="selectServiceSubtaskDetailVo"/>
         where 1=1
         <if test="subId != null">and sub_id = #{subId}</if>
+        <if test="isMydException != null">and is_myd_exception = #{isMydException}</if>
+        <if test="dimension != null">and dimension = #{dimension}</if>
         <if test="templateType != null">and template_type = #{templateType}</if>
         <if test="libTemplateid != null">and lib_templateid = #{libTemplateid}</if>
         <if test="targetid != null">and targetid = #{targetid}</if>
@@ -179,6 +185,70 @@
 
     </select>
 
+    <select id="getServiceSubtaskDetails" parameterType="com.smartor.domain.ServiceSubtaskDetailVO"
+            resultType="java.util.HashMap">
+        select
+            ssd.sub_id,
+            ssd.is_myd_exception,
+            ssd.dimension,
+            ssd.taskid,
+            ssd.patid,
+            sd.sendname,
+            ssd.questiontext,
+            ssd.matchedtext,
+            ssd.asrtext,
+            ssd.scriptid,
+            ssd.targetid,
+            ssd.template_type,
+            ssd.lib_templateid,
+            sd.deptcode,
+            sd.deptname,
+            sd.leavehospitaldistrictcode,
+            sd.leavehospitaldistrictname
+        from service_subtask_detail ssd
+        inner join service_subtask sd on ssd.sub_id = sd.id
+        where ssd.del_flag = '0'
+        and sd.del_flag = '0'
+        <if test="orgid != null and orgid != ''">and ssd.orgid = #{orgid}</if>
+        <if test="subId != null">and ssd.sub_id = #{subId}</if>
+        <if test="taskid != null">and ssd.taskid = #{taskid}</if>
+        <if test="questiontext != null and questiontext != ''">and ssd.questiontext = #{questiontext}</if>
+        <if test="isMydException != null">and ssd.is_myd_exception = #{isMydException}</if>
+        <if test="dimension != null">and ssd.dimension = #{dimension}</if>
+        <if test="matchedtext != null and matchedtext != ''">and ssd.matchedtext = #{matchedtext}</if>
+        <if test="asrtext != null and asrtext != ''">and ssd.asrtext = #{asrtext}</if>
+        <if test="scriptid != null">and ssd.scriptid = #{scriptid}</if>
+        <if test="patid != null">and ssd.patid = #{patid}</if>
+        <if test="templateType != null">and ssd.template_type = #{templateType}</if>
+        <if test="libTemplateid != null">and ssd.lib_templateid = #{libTemplateid}</if>
+        <if test="targetid != null">and ssd.targetid = #{targetid}</if>
+        <if test="leavehospitaldistrictcodes != null and leavehospitaldistrictcodes.size() > 0">
+            and sd.leavehospitaldistrictcode in
+            <foreach collection="leavehospitaldistrictcodes" item="leavehospitaldistrictcode" open="(" separator="," close=")">
+                #{leavehospitaldistrictcode}
+            </foreach>
+        </if>
+        <if test="leaveldeptcodes != null and leaveldeptcodes.size() > 0">
+            and sd.deptcode in
+            <foreach collection="leaveldeptcodes" item="leaveldeptcode" open="(" separator="," close=")">
+                #{leaveldeptcode}
+            </foreach>
+        </if>
+        <if test="scriptIds != null and scriptIds.size() > 0">
+            and ssd.scriptid in
+            <foreach collection="scriptIds" item="scriptId" open="(" separator="," close=")">
+                #{scriptId}
+            </foreach>
+        </if>
+        <if test="isFilled != null and isFilled != '0'">
+            AND IFNULL(ssd.matchedtext,ssd.asrtext) is not null
+            AND IFNULL(ssd.matchedtext,ssd.asrtext) != ''
+        </if>
+        <if test="configValue != null and configValue != ''">
+            AND ssd.categoryid IN (${configValue})
+        </if>
+        order by ssd.sub_id desc, ssd.id desc
+    </select>
     <select id="selectServiceSubtaskDetailByCalldetailid" parameterType="String" resultMap="ServiceSubtaskDetailResult">
         <include refid="selectServiceSubtaskDetailVo"/>
         where id = #{id}
@@ -193,6 +263,133 @@
             #{subid}
         </foreach>
         <if test="questiontext != null">and questiontext = #{questiontext}</if>
+    </select>
+
+    <!--
+        婊℃剰搴︽煴鐘跺浘锛氫竴娆℃�х粺璁℃湰娆¤姹傚叏閮ㄦā鏉跨殑濉姤閲忋��
+        绛変环浜庡姣忎釜妯℃澘鎵ц queryFillCount(subids, questiontext)锛屽尯鍒槸锛�
+          1) 鐢� join service_subtask 浠f浛鍏堟妸鍏ㄩ儴 sub_id 鏌ュ洖 Java 鍐嶆嫾 IN(...)锛�
+          2) 鎸� libtemplateid + questiontext + score 鍒嗙粍锛屽彧鍥炰紶鍒嗗�间笌鏉℃暟锛�
+          3) visit_time 鏀规垚鍙蛋绱㈠紩鐨勮寖鍥存潯浠躲��
+        娉ㄦ剰锛氳繖閲屽埢鎰忎笉鍦� SQL 閲岃繃婊� questiontext锛岀敱 Java 鎸夊師 queryFillCount 鐨�
+        銆宷uestiontext 涓� null 鏃朵笉鎷艰鏉′欢銆嶈涔夊仛鍖归厤锛屼繚璇佺粨鏋滃彛寰勫畬鍏ㄤ竴鑷淬��
+    -->
+    <select id="selectSatisfactionFillStat" parameterType="com.smartor.domain.entity.SatisfactionStatQuery"
+            resultType="java.util.Map">
+        select ss.libtemplateid as libtemplateid,
+               ssd.questiontext as questiontext,
+               ssd.score as score,
+               count(*) as cnt
+        from service_subtask_detail ssd
+        join service_subtask ss on ss.id = ssd.sub_id
+        where ssd.del_flag = 0
+        and ss.del_flag = 0
+        <if test="orgid != null and orgid != ''">
+            and ss.orgid = #{orgid}
+        </if>
+        <if test="campusid != null and campusid != ''">
+            and ss.campusid = #{campusid}
+        </if>
+        <if test="type != null and type != ''">and ss.type = #{type}</if>
+        <if test="startTime != null">
+            and ss.visit_time &gt;= #{startTime}
+        </if>
+        <if test="endTime != null">
+            and ss.visit_time &lt; date_add(#{endTime}, interval 1 day)
+        </if>
+        <if test="libTemplateIds != null and libTemplateIds.size() > 0">
+            and ss.libtemplateid IN
+            <foreach collection="libTemplateIds" item="libTemplateId" open="(" separator="," close=")">
+                #{libTemplateId}
+            </foreach>
+        </if>
+        <if test="(hospitaldistrictcodes != null and hospitaldistrictcodes.size() > 0) or (deptcodes != null and deptcodes.size() > 0)">
+            AND (
+            <if test="hospitaldistrictcodes != null and hospitaldistrictcodes.size() > 0">
+                ss.leavehospitaldistrictcode IN
+                <foreach collection="hospitaldistrictcodes" item="hospitaldistrictcode" open="("
+                         separator=","
+                         close=")">
+                    #{hospitaldistrictcode}
+                </foreach>
+            </if>
+            <if test="hospitaldistrictcodes != null and hospitaldistrictcodes.size() > 0 and deptcodes != null and deptcodes.size() > 0">
+                OR
+            </if>
+            <if test="deptcodes != null and deptcodes.size() > 0">
+                ss.deptcode IN
+                <foreach collection="deptcodes" item="deptcode" open="(" separator="," close=")">
+                    #{deptcode}
+                </foreach>
+            </if>
+            )
+        </if>
+        group by ss.libtemplateid, ssd.questiontext, ssd.score
+    </select>
+
+    <!--
+        婊℃剰搴︾粺璁★紙statistics / statisticsByDimension锛夛細涓�娆℃�х粺璁℃湰娆¤姹傚叏閮ㄩ棶棰樼殑濉姤閲忋��
+        绛変环浜庡姣忎釜闂鎵ц queryFillCount(subids, questiontext)锛屽尯鍒槸锛�
+          1) 鐢� join service_subtask 浠f浛鍏堟妸鍏ㄩ儴 sub_id 鏌ュ洖 Java 鍐嶆嫾 IN(...)锛�
+          2) 鎸� 妯℃澘+闂+matchedtext+score 鍒嗙粍锛屽彧鍥炰紶閫夐」/鍒嗗�间笌鏉℃暟锛�
+          3) targetvalue 鐢� min() 鍙栬闂鐨勪竴涓潪绌洪�夐」涓诧紙鍚屼竴涓棶棰樿鍊间竴鑷达級锛�
+          4) visit_time 鏀规垚鍙蛋绱㈠紩鐨勮寖鍥存潯浠躲��
+        娉ㄦ剰锛氳繖閲屽埢鎰忎笉鍦� SQL 閲岃繃婊� questiontext锛岀敱 Java 鎸夊師 queryFillCount 鐨�
+        銆宷uestiontext 涓� null 鏃朵笉鎷艰鏉′欢銆嶈涔夊仛鍖归厤锛屼繚璇佺粨鏋滃彛寰勫畬鍏ㄤ竴鑷淬��
+    -->
+    <select id="selectSatisfactionFillStatByMatchedtext" parameterType="com.smartor.domain.entity.SatisfactionStatQuery"
+            resultType="java.util.Map">
+        select ss.libtemplateid as libtemplateid,
+               ssd.questiontext as questiontext,
+               ssd.matchedtext as matchedtext,
+               ssd.score as score,
+               count(*) as cnt,
+               min(ssd.targetvalue) as targetvalue
+        from service_subtask_detail ssd
+        join service_subtask ss on ss.id = ssd.sub_id
+        where ssd.del_flag = 0
+        and ss.del_flag = 0
+        <if test="orgid != null and orgid != ''">
+            and ss.orgid = #{orgid}
+        </if>
+        <if test="campusid != null and campusid != ''">
+            and ss.campusid = #{campusid}
+        </if>
+        <if test="type != null and type != ''">and ss.type = #{type}</if>
+        <if test="startTime != null">
+            and ss.visit_time &gt;= #{startTime}
+        </if>
+        <if test="endTime != null">
+            and ss.visit_time &lt; date_add(#{endTime}, interval 1 day)
+        </if>
+        <if test="libTemplateIds != null and libTemplateIds.size() > 0">
+            and ss.libtemplateid IN
+            <foreach collection="libTemplateIds" item="libTemplateId" open="(" separator="," close=")">
+                #{libTemplateId}
+            </foreach>
+        </if>
+        <if test="(hospitaldistrictcodes != null and hospitaldistrictcodes.size() > 0) or (deptcodes != null and deptcodes.size() > 0)">
+            AND (
+            <if test="hospitaldistrictcodes != null and hospitaldistrictcodes.size() > 0">
+                ss.leavehospitaldistrictcode IN
+                <foreach collection="hospitaldistrictcodes" item="hospitaldistrictcode" open="("
+                         separator=","
+                         close=")">
+                    #{hospitaldistrictcode}
+                </foreach>
+            </if>
+            <if test="hospitaldistrictcodes != null and hospitaldistrictcodes.size() > 0 and deptcodes != null and deptcodes.size() > 0">
+                OR
+            </if>
+            <if test="deptcodes != null and deptcodes.size() > 0">
+                ss.deptcode IN
+                <foreach collection="deptcodes" item="deptcode" open="(" separator="," close=")">
+                    #{deptcode}
+                </foreach>
+            </if>
+            )
+        </if>
+        group by ss.libtemplateid, ssd.questiontext, ssd.matchedtext, ssd.score
     </select>
 
     <select id="isExistServiceSubtaskDetail" resultType="com.smartor.domain.DTO.ServiceSubtaskDetailDTO">
@@ -261,6 +458,8 @@
             <if test="templateType != null">template_type,</if>
             <if test="libTemplateid != null">lib_templateid,</if>
             <if test="score != null">score,</if>
+            <if test="isMydException != null">is_myd_exception,</if>
+            <if test="dimension != null">dimension,</if>
         </trim>
         <trim prefix="values (" suffix=")" suffixOverrides=",">
             <if test="id != null">#{id},</if>
@@ -316,12 +515,16 @@
             <if test="templateType != null">#{templateType},</if>
             <if test="libTemplateid != null">#{libTemplateid},</if>
             <if test="score != null">#{score},</if>
+            <if test="isMydException != null">#{isMydException},</if>
+            <if test="dimension != null">#{dimension},</if>
         </trim>
     </insert>
 
     <update id="updateServiceSubtaskDetail" parameterType="com.smartor.domain.ServiceSubtaskDetail">
         update service_subtask_detail
         <trim prefix="SET" suffixOverrides=",">
+            <if test="isMydException != null">is_myd_exception = #{isMydException},</if>
+            <if test="dimension != null">dimension = #{dimension},</if>
             <if test="subId != null">sub_id = #{subId},</if>
             <if test="taskid != null">taskid = #{taskid},</if>
             <if test="targetid != null">targetid = #{targetid},</if>
@@ -434,6 +637,8 @@
             <if test="templateType != null">template_type = #{templateType},</if>
             <if test="libTemplateid != null">lib_templateid = #{libTemplateid},</if>
             <if test="score != null">score = #{score},</if>
+            <if test="isMydException != null">is_myd_exception = #{isMydException},</if>
+            <if test="dimension != null">dimension = #{dimension},</if>
         </trim>
         where patid = #{patid} and scriptid = #{scriptid} and sub_id = #{subId}
     </update>
@@ -468,4 +673,34 @@
             ivr_liba_target.targetname,
             service_subtask_detail.matchedtext
     </select>
+
+    <select id="selectRepeatDetailIds" resultType="Long">
+        SELECT d1.id
+        FROM service_subtask_detail d1
+        INNER JOIN (
+            SELECT sub_id, questiontext,
+                   MAX(create_time) AS max_create_time,
+                   MAX(id) AS keep_id
+            FROM service_subtask_detail
+            WHERE del_flag = 0
+            GROUP BY sub_id, questiontext
+            HAVING COUNT(*) &gt; 1
+        ) d2 ON d1.sub_id = d2.sub_id
+            AND d1.questiontext = d2.questiontext
+            AND (
+                d1.create_time &lt; d2.max_create_time
+                OR (d1.create_time = d2.max_create_time AND d1.id &lt; d2.keep_id)
+            )
+        WHERE d1.del_flag = 0
+    </select>
+
+    <update id="deleteRepeatDetailByIds">
+        UPDATE service_subtask_detail
+        SET del_flag = 1
+        WHERE del_flag = 0
+        AND id IN
+        <foreach collection="ids" item="id" open="(" separator="," close=")">
+            #{id}
+        </foreach>
+    </update>
 </mapper>

--
Gitblit v1.9.3