From 066e23c438ec762c522d39817b513a13ec6b3767 Mon Sep 17 00:00:00 2001
From: 陈昶聿 <chychen@nbjetron.com>
Date: 星期一, 14 九月 2026 14:03:38 +0800
Subject: [PATCH] 【景宁】景宁 只要存在相同诊断、患者的门诊记录则当再次随访处理

---
 smartor/src/main/resources/mapper/smartor/ServiceSubtaskMapper.xml |  420 +++++++++++++++++++++++++++++++++++++----------------------
 1 files changed, 263 insertions(+), 157 deletions(-)

diff --git a/smartor/src/main/resources/mapper/smartor/ServiceSubtaskMapper.xml b/smartor/src/main/resources/mapper/smartor/ServiceSubtaskMapper.xml
index 4910e68..2a087a5 100644
--- a/smartor/src/main/resources/mapper/smartor/ServiceSubtaskMapper.xml
+++ b/smartor/src/main/resources/mapper/smartor/ServiceSubtaskMapper.xml
@@ -364,6 +364,12 @@
                 #{operationItemIdItem}
             </foreach>
         </if>
+        <if test="inhospids != null and inhospids.size() > 0">
+            AND inhospid IN
+            <foreach collection="inhospids" item="inhospidItem" open="(" separator="," close=")">
+                #{inhospidItem}
+            </foreach>
+        </if>
         <if test="templateid != null  and templateid != ''">and templateid = #{templateid}</if>
         <if test="templatename != null  and templatename != ''">and templatename like concat('%', #{templatename},
             '%')
@@ -379,6 +385,12 @@
         </if>
         <if test="endSendDateTime != null">
             AND date_format(visit_time,'%y%m%d') &lt;= date_format(#{endSendDateTime},'%y%m%d')
+        </if>
+        <if test="finishtimeStart != null">
+            AND date_format(finishtime,'%y%m%d') &gt;= date_format(#{finishtimeStart},'%y%m%d')
+        </if>
+        <if test="finishtimeEnd != null">
+            AND date_format(finishtime,'%y%m%d') &lt;= date_format(#{finishtimeEnd},'%y%m%d')
         </if>
         <if test="longSendTime != null">
             AND date_format(long_send_time,'%y%m%d') &lt;= date_format(#{longSendTime},'%y%m%d')
@@ -746,7 +758,8 @@
         <if test="groupKey != null and groupKey != ''">
             ss.${groupKey} as groupKey,
         </if>
-        SUM(CASE WHEN ss.finishtime IS NOT NULL AND DATE(ss.visit_time) &lt;= DATE(ss.finishtime) THEN 1 ELSE 0 END) / COUNT(*) AS finishRate,
+        SUM(CASE WHEN ss.finishtime IS NOT NULL AND DATE(ss.visit_time) &lt;= DATE(ss.finishtime) THEN 1 ELSE 0 END) /
+        COUNT(*) AS finishRate,
         <if test="rateDay != null">
             SUM(CASE WHEN ss.finishtime IS NOT NULL
             AND DATEDIFF(ss.finishtime, ss.endtime) &lt;= #{rateDay} + COALESCE(cp.compensate_days, 0)
@@ -1787,132 +1800,132 @@
 
     <select id="getSfStatisticsHyperlink" parameterType="com.smartor.domain.ServiceSubtaskCountReq"
             resultMap="ServiceSubtaskResult">
-            select id,
-            visit_count,
-            is_visit_again,
-            type,
-            orgid,
-            drcode,
-            drname,
-            leavehospitaldistrictcode,
-            leavehospitaldistrictname,
-            deptcode,
-            deptname,
-            sendstate,
-            preachform,
-            current_preachform,
-            excep,
-            nurse_id,
-            nurse_name,
-            taskid,
-            task_name,
-            visit_time,
-            finishtime,
-            endtime,
-            senddate,
-            suggest,
-            result,
-            templateid,
-            templatename,
-            patid,
-            sendname,
-            send_type,
-            recordid,
-            exrecallcount,
-            continue_flag,
-            continue_time_now,
-            continue_content,
-            continue_count,
-            continue_time_next,
-            task_situation,
-            remark
-            from service_subtask
-            where 1=1
-            and del_flag = 0
-            <if test="orgid != null and orgid != ''">
-                and orgid = #{orgid}
+        select id,
+        visit_count,
+        is_visit_again,
+        type,
+        orgid,
+        drcode,
+        drname,
+        leavehospitaldistrictcode,
+        leavehospitaldistrictname,
+        deptcode,
+        deptname,
+        sendstate,
+        preachform,
+        current_preachform,
+        excep,
+        nurse_id,
+        nurse_name,
+        taskid,
+        task_name,
+        visit_time,
+        finishtime,
+        endtime,
+        senddate,
+        suggest,
+        result,
+        templateid,
+        templatename,
+        patid,
+        sendname,
+        send_type,
+        recordid,
+        exrecallcount,
+        continue_flag,
+        continue_time_now,
+        continue_content,
+        continue_count,
+        continue_time_next,
+        task_situation,
+        remark
+        from service_subtask
+        where 1=1
+        and del_flag = 0
+        <if test="orgid != null and orgid != ''">
+            and orgid = #{orgid}
+        </if>
+        <if test="leavehospitaldistrictcodes != null and leavehospitaldistrictcodes.size() > 0">
+            AND leavehospitaldistrictcode IN
+            <foreach collection="leavehospitaldistrictcodes" item="leavehospitaldistrictcode" open="(" separator=","
+                     close=")">
+                #{leavehospitaldistrictcode}
+            </foreach>
+        </if>
+        <if test="deptcodes != null and deptcodes.size() > 0">
+            AND deptcode IN
+            <foreach collection="deptcodes" item="deptcode" open="(" separator=","
+                     close=")">
+                #{deptcode}
+            </foreach>
+        </if>
+        <if test="serviceType != null and serviceType.size() > 0">
+            AND service_type IN
+            <foreach collection="serviceType" item="serviceType" open="(" separator=","
+                     close=")">
+                #{serviceType}
+            </foreach>
+        </if>
+        <if test="startTime != null and endTime!=null">
+            AND visit_time >= DATE(#{startTime})
+            AND visit_time &lt; DATE_ADD(DATE(#{endTime}), INTERVAL 1 DAY)
+        </if>
+        <if test="visitDeptCode != null">and visit_dept_code = #{visitDeptCode}</if>
+        <if test="visitDeptName != null">and visit_dept_name = #{visitDeptName}</if>
+        <if test="isabnormal != null">and isabnormal = #{isabnormal}</if>
+        <if test="continueFlag != null ">and continue_flag = #{continueFlag}</if>
+        <if test="continueTimeNow != null ">and continue_time_now = #{continueTimeNow,jdbcType=TIMESTAMP}</if>
+        <if test="continueCount != null ">and continue_count = #{continueCount}</if>
+        <if test="continueTimeNext != null ">and continue_time_next = #{continueTimeNext,jdbcType=TIMESTAMP}</if>
+        <!-- 鐩墠鍙粺璁¤闊冲拰闂嵎 -->
+        <if test="type != null">
+            and type = #{type}
+        </if>
+        <if test="visitCount != null and visitCount == 1">
+            AND visit_count = 1
+        </if>
+        <if test="visitCount != null and visitCount > 1">
+            AND visit_count > 1
+        </if>
+        <if test="groupKey != null and groupKey != '' and groupKeyList != null and groupKeyList.size>0">
+            AND ${groupKey} IN
+            <foreach collection="groupKeyList" item="key" open="(" separator=","
+                     close=")">
+                #{key}
+            </foreach>
+        </if>
+        AND sendstate IS NOT NULL
+        <if test="sendstates != null and sendstates.size() > 0">
+            AND sendstate IN
+            <foreach collection="sendstates" item="state" open="(" separator="," close=")">
+                #{state}
+            </foreach>
+        </if>
+        <if test="currentPreachform != null">
+            AND current_preachform = #{currentPreachform}
+            <if test="followUpCountStyle != null and followUpCountStyle = '1'">
+                AND sendstate != 4
             </if>
-            <if test="leavehospitaldistrictcodes != null and leavehospitaldistrictcodes.size() > 0">
-                AND leavehospitaldistrictcode IN
-                <foreach collection="leavehospitaldistrictcodes" item="leavehospitaldistrictcode" open="(" separator=","
-                         close=")">
-                    #{leavehospitaldistrictcode}
-                </foreach>
-            </if>
-            <if test="deptcodes != null and deptcodes.size() > 0">
-                AND deptcode IN
-                <foreach collection="deptcodes" item="deptcode" open="(" separator=","
-                         close=")">
-                    #{deptcode}
-                </foreach>
-            </if>
-            <if test="serviceType != null and serviceType.size() > 0">
-                AND service_type IN
-                <foreach collection="serviceType" item="serviceType" open="(" separator=","
-                         close=")">
-                    #{serviceType}
-                </foreach>
-            </if>
-            <if test="startTime != null and endTime!=null">
-                AND visit_time >= DATE(#{startTime})
-                AND visit_time &lt; DATE_ADD(DATE(#{endTime}), INTERVAL 1 DAY)
-            </if>
-            <if test="visitDeptCode != null">and visit_dept_code = #{visitDeptCode}</if>
-            <if test="visitDeptName != null">and visit_dept_name = #{visitDeptName}</if>
-            <if test="isabnormal != null">and isabnormal = #{isabnormal}</if>
-            <if test="continueFlag != null ">and continue_flag = #{continueFlag}</if>
-            <if test="continueTimeNow != null ">and continue_time_now = #{continueTimeNow,jdbcType=TIMESTAMP}</if>
-            <if test="continueCount != null ">and continue_count = #{continueCount}</if>
-            <if test="continueTimeNext != null ">and continue_time_next = #{continueTimeNext,jdbcType=TIMESTAMP}</if>
-            <!-- 鐩墠鍙粺璁¤闊冲拰闂嵎 -->
-            <if test="type != null">
-                and type = #{type}
-            </if>
-            <if test="visitCount != null and visitCount == 1">
-                AND visit_count = 1
-            </if>
-            <if test="visitCount != null and visitCount > 1">
-                AND visit_count > 1
-            </if>
-            <if test="groupKey != null and groupKey != '' and groupKeyList != null and groupKeyList.size>0">
-                AND ${groupKey} IN
-                <foreach collection="groupKeyList" item="key" open="(" separator=","
-                         close=")">
-                    #{key}
-                </foreach>
-            </if>
-            AND sendstate IS NOT NULL
-            <if test="sendstates != null and sendstates.size() > 0">
-                AND sendstate IN
-                <foreach collection="sendstates" item="state" open="(" separator="," close=")">
-                    #{state}
-                </foreach>
-            </if>
-            <if test="currentPreachform != null">
-                AND current_preachform = #{currentPreachform}
-                <if test="followUpCountStyle != null and followUpCountStyle = '1'">
-                    AND sendstate != 4
-                </if>
-            </if>
-            <if test="excep != null and excep != ''">
-                AND excep = #{excep}
-            </if>
-            <if test="taskSituation != null">
-                AND task_situation = #{taskSituation}
-            </if>
-            <if test="drcode != null and drcode != ''">
-                AND drcode = #{drcode}
-            </if>
-            <if test="leavehospitaldistrictcode != null and leavehospitaldistrictcode != ''">
-                AND leavehospitaldistrictcode = #{leavehospitaldistrictcode}
-            </if>
-            <if test="deptcode != null and deptcode != ''">
-                AND deptcode = #{deptcode}
-            </if>
-            order by endtime desc
-            <if test="pageSize != null  and pageNum != null">
-                limit ${pageSize} OFFSET ${pageNum}
-            </if>
+        </if>
+        <if test="excep != null and excep != ''">
+            AND excep = #{excep}
+        </if>
+        <if test="taskSituation != null">
+            AND task_situation = #{taskSituation}
+        </if>
+        <if test="drcode != null and drcode != ''">
+            AND drcode = #{drcode}
+        </if>
+        <if test="leavehospitaldistrictcode != null and leavehospitaldistrictcode != ''">
+            AND leavehospitaldistrictcode = #{leavehospitaldistrictcode}
+        </if>
+        <if test="deptcode != null and deptcode != ''">
+            AND deptcode = #{deptcode}
+        </if>
+        order by endtime desc
+        <if test="pageSize != null  and pageNum != null">
+            limit ${pageSize} OFFSET ${pageNum}
+        </if>
     </select>
 
     <select id="getSfStatisticsJoy" parameterType="com.smartor.domain.ServiceSubtaskCountReq"
@@ -2960,8 +2973,8 @@
     <select id="selectByScheduleIdAndLoop" resultMap="ServiceSubtaskResult">
         <include refid="selectServiceSubtaskVo"/>
         where schedule_id = #{scheduleId}
-          and loop_count = #{loopCount}
-          and (del_flag is null or del_flag = '0')
+        and loop_count = #{loopCount}
+        and (del_flag is null or del_flag = '0')
         order by schedule_seq asc, id asc
     </select>
 
@@ -3050,6 +3063,9 @@
         t.taskid AS taskid,
         t.task_name AS taskName,
         d.asrtext AS optionresult,
+        d.score AS score,
+        d.targetvalue AS targetvalue,
+        d.value_type AS valueType,
         COUNT(*) AS count,
         CONCAT(ROUND(COUNT(*) * 100.0 / t2.total_count, 2), '%') AS ratio
         FROM
@@ -3065,32 +3081,53 @@
         service_task t
         INNER JOIN service_subtask s ON s.taskid = t.taskid
         INNER JOIN service_subtask_detail d ON d.sub_id = s.id
-        WHERE t.taskid IN
-        <foreach collection="taskIds" item="taskId" open="(" separator="," close=")">
-            #{taskId}
-        </foreach>
+        WHERE 1=1
+        <if test="taskIds != null and taskIds.size() > 0">
+            AND t.taskid IN
+            <foreach collection="taskIds" item="taskId" open="(" separator="," close=")">
+                #{taskId}
+            </foreach>
+        </if>
+        <if test="valueType != null">AND d.value_type = #{valueType}</if>
+        <if test="scoreStart != null">AND d.score &gt;= #{scoreStart}</if>
+        <if test="scoreEnd != null">AND d.score &lt;= #{scoreEnd}</if>
+        <if test="questiontext != null  and questiontext != ''">and d.questiontext like concat('%', #{questiontext},
+            '%')
+        </if>
         and s.sendstate=6
         and d.del_flag=0
         GROUP BY
         t.taskid,
         d.questiontext
         ) t2 ON t2.taskid = t.taskid AND t2.questiontext = d.questiontext
-        WHERE t.taskid IN
-        <foreach collection="taskIds" item="taskId" open="(" separator="," close=")">
-            #{taskId}
-        </foreach>
+        WHERE 1=1
+        <if test="taskIds != null and taskIds.size() > 0">
+            AND t.taskid IN
+            <foreach collection="taskIds" item="taskId" open="(" separator="," close=")">
+                #{taskId}
+            </foreach>
+        </if>
+        <if test="valueType != null">AND d.value_type = #{valueType}</if>
+        <if test="scoreStart != null">AND d.score &gt;= #{scoreStart}</if>
+        <if test="scoreEnd != null">AND d.score &lt;= #{scoreEnd}</if>
+        <if test="questiontext != null  and questiontext != ''">and d.questiontext like concat('%', #{questiontext},
+            '%')
+        </if>
         AND s.sendstate = 6
         and d.del_flag=0
-      <if test="startOutHospTime != null">
-        AND date_format(s.endtime,'%y%m%d') &gt;= date_format(#{startOutHospTime},'%y%m%d')
-    </if>
+        <if test="startOutHospTime != null">
+            AND date_format(s.endtime,'%y%m%d') &gt;= date_format(#{startOutHospTime},'%y%m%d')
+        </if>
         <if test="endOutHospTime != null">
             AND date_format(s.endtime,'%y%m%d') &lt;= date_format(#{endOutHospTime},'%y%m%d')
         </if>
         GROUP BY
         t.taskid,
         d.questiontext,
-        d.asrtext
+        d.score,
+        d.targetvalue,
+        d.asrtext,
+        d.value_type
         ORDER BY
         d.questiontext,
         t.taskid
@@ -3103,6 +3140,13 @@
         t.taskid AS taskid,
         t.task_name AS taskName,
         d.asrtext AS optionresult,
+        d.score AS score,
+        s.deptcode AS deptcode,
+        s.deptname AS deptname,
+        s.leavehospitaldistrictcode AS leavehospitaldistrictcode,
+        s.leavehospitaldistrictname AS leavehospitaldistrictname,
+        d.targetvalue AS targetvalue,
+        d.value_type AS valueType,
         COUNT(*) AS count,
         CONCAT(ROUND(COUNT(*) * 100.0 / t2.total_count, 2), '%') AS ratio
         FROM
@@ -3111,41 +3155,103 @@
         INNER JOIN service_subtask_detail d ON d.sub_id = s.id
         INNER JOIN (
         SELECT
-            d.questiontext,
-            COUNT(*) AS total_count
+        d.questiontext,
+        COUNT(*) AS total_count
         FROM
-            service_task t
-            INNER JOIN service_subtask s ON s.taskid = t.taskid
-            INNER JOIN service_subtask_detail d ON d.sub_id = s.id
-            WHERE s.id IN
+        service_task t
+        INNER JOIN service_subtask s ON s.taskid = t.taskid
+        INNER JOIN service_subtask_detail d ON d.sub_id = s.id
+        WHERE 1=1
+        <if test="subtaskIds != null and subtaskIds.size() > 0">
+            AND s.id IN
             <foreach collection="subtaskIds" item="subtaskId" open="(" separator="," close=")">
                 #{subtaskId}
             </foreach>
-            AND s.sendstate = 6
-            AND d.del_flag=0
-            GROUP BY d.questiontext  -- 鈫� 鍏抽敭淇敼锛氭寜棰樼洰鍒嗙粍缁熻姣忎釜棰樼洰鐨勬�绘暟
-        ) t2 ON t2.questiontext = d.questiontext  -- 鈫� 鍏宠仈鍒板綋鍓嶉鐩�
-        WHERE s.id IN
-        <foreach collection="subtaskIds" item="subtaskId" open="(" separator="," close=")">
-            #{subtaskId}
-        </foreach>
+        </if>
+        <if test="valueType != null">AND d.value_type &gt;= #{valueType}</if>
+        <if test="scoreStart != null">AND d.score = #{scoreStart}</if>
+        <if test="scoreEnd != null">AND d.score &lt;= #{scoreEnd}</if>
+        <if test="questiontext != null  and questiontext != ''">and d.questiontext like concat('%', #{questiontext},
+            '%')
+        </if>
         AND s.sendstate = 6
         AND d.del_flag=0
-      <if test="startOutHospTime != null">
-        AND date_format(s.endtime,'%y%m%d') &gt;= date_format(#{startOutHospTime},'%y%m%d')
-    </if>
+        GROUP BY d.questiontext
+        ) t2 ON t2.questiontext = d.questiontext
+        WHERE 1=1
+        <if test="subtaskIds != null and subtaskIds.size() > 0">
+            AND s.id IN
+            <foreach collection="subtaskIds" item="subtaskId" open="(" separator="," close=")">
+                #{subtaskId}
+            </foreach>
+        </if>
+        AND s.sendstate = 6
+        AND d.del_flag=0
+        <if test="valueType != null">AND d.value_type &gt;= #{valueType}</if>
+        <if test="scoreStart != null">AND d.score &gt;= #{scoreStart}</if>
+        <if test="scoreEnd != null">AND d.score &lt;= #{scoreEnd}</if>
+        <if test="questiontext != null  and questiontext != ''">and d.questiontext like concat('%', #{questiontext},
+            '%')
+        </if>
+        <if test="startOutHospTime != null">
+            AND date_format(s.endtime,'%y%m%d') &gt;= date_format(#{startOutHospTime},'%y%m%d')
+        </if>
         <if test="endOutHospTime != null">
             AND date_format(s.endtime,'%y%m%d') &lt;= date_format(#{endOutHospTime},'%y%m%d')
         </if>
         GROUP BY
         t.taskid,
         d.questiontext,
+        d.score,
+        d.targetvalue,
         d.asrtext
         ORDER BY
         d.questiontext,
         t.taskid
     </select>
 
+    <select id="statQuestionOptionByKsOrBq" resultType="com.smartor.domain.DTO.QuestionCountKsOrBqDTO"
+            parameterType="com.smartor.domain.VO.QuestionCountKsOrBqVO">
+        SELECT questiontext,
+        d.taskid,
+        s.deptname,
+        s.leavehospitaldistrictname,
+        d.targetvalue,
+        d.asrtext,
+        COUNT(d.asrtext) AS answercount,
+        SUM(d.score) AS singleScore
+        FROM service_subtask_detail d,
+        service_task s
+        WHERE d.taskid = s.taskid
+        AND deptname IS NOT NULL
+        AND leavehospitaldistrictname IS NOT NULL
+        <if test="endFinishTime != null">
+            AND create_time &lt; #{endFinishTime}
+        </if>
+        <if test="startFinishTime != null">
+            AND create_time &gt;= #{startFinishTime}
+        </if>
+        <if test="leavehospitaldistrictcodes != null and leavehospitaldistrictcodes.size() > 0">
+            AND leavehospitaldistrictcode IN
+            <foreach collection="leavehospitaldistrictcodes" item="leavehospitaldistrictcode" open="("
+                     separator=","
+                     close=")">
+                #{leavehospitaldistrictcode}
+            </foreach>
+        </if>
+        <if test=" leaveldeptcodes != null and leaveldeptcodes.size()>0">
+            AND deptcode IN
+            <foreach collection="leaveldeptcodes" item="leaveldeptcode" open="(" separator=","
+                     close=")">
+                #{leaveldeptcode}
+            </foreach>
+        </if>
+        GROUP BY d.questiontext,
+        d.taskid,
+        d.asrtext
+        ORDER BY d.taskid
+    </select>
+
     <select id="selectServiceSubtaskListDeadLine" parameterType="com.smartor.domain.entity.ServiceSubtaskEntity"
             resultMap="ServiceSubtaskResult">
         <include refid="selectServiceSubtaskVo"/>

--
Gitblit v1.9.3