From 2ef2f0039bbabcebab2099cd9ee2ffb0147bef54 Mon Sep 17 00:00:00 2001
From: 陈昶聿 <chychen@nbjetron.com>
Date: 星期一, 05 一月 2026 14:01:13 +0800
Subject: [PATCH] 【市一】随访满意度明细调整

---
 smartor/src/main/java/com/smartor/domain/ServiceSubtaskCategoryCount.java |   47 +++++++++++
 smartor/src/main/resources/mapper/smartor/ServiceSubtaskMapper.xml        |  181 +++++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 228 insertions(+), 0 deletions(-)

diff --git a/smartor/src/main/java/com/smartor/domain/ServiceSubtaskCategoryCount.java b/smartor/src/main/java/com/smartor/domain/ServiceSubtaskCategoryCount.java
new file mode 100644
index 0000000..1f35604
--- /dev/null
+++ b/smartor/src/main/java/com/smartor/domain/ServiceSubtaskCategoryCount.java
@@ -0,0 +1,47 @@
+package com.smartor.domain;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * 鍚勭瀹ゅ畬鎴愰噺缁熻缁撴灉
+ *
+ * @author ruoyi
+ * @date 2024-02-02
+ */
+@ApiModel(value = "ServiceSubtaskCount", description = "鍚勭瀹ゅ畬鎴愰噺缁熻缁撴灉")
+@Data
+public class ServiceSubtaskCategoryCount {
+    private static final long serialVersionUID = 1L;
+
+    @ApiModelProperty(value = "瀛愪换鍔D")
+    private Long subTaskId;
+
+    @ApiModelProperty(value = "鏈嶅姟绫诲瀷")
+    private Long serviceType;
+
+    @ApiModelProperty(value = "骞存湀")
+    private String month;
+
+    @ApiModelProperty(value = "鏁伴噺")
+    private Long count;
+
+    @ApiModelProperty(value = "濉啓鏁伴噺")
+    private Integer completedCount;
+
+    @ApiModelProperty(value = "鎵�鏈夋暟閲�")
+    private Integer allCount;
+
+    @ApiModelProperty(value = "濉啓姣斾緥")
+    private String completedPercent;
+
+    @ApiModelProperty(value = "鍚嶇О")
+    private String name;
+
+    public ServiceSubtaskCategoryCount(String month, Long serviceType, Long count) {
+        this.serviceType = serviceType;
+        this.month = month;
+        this.count = count;
+    }
+}
diff --git a/smartor/src/main/resources/mapper/smartor/ServiceSubtaskMapper.xml b/smartor/src/main/resources/mapper/smartor/ServiceSubtaskMapper.xml
index 4a7b06d..62fce89 100644
--- a/smartor/src/main/resources/mapper/smartor/ServiceSubtaskMapper.xml
+++ b/smartor/src/main/resources/mapper/smartor/ServiceSubtaskMapper.xml
@@ -100,6 +100,16 @@
 
     </resultMap>
 
+    <resultMap type="com.smartor.domain.ServiceSubtaskCategoryCount" id="ServiceSubtaskCategoryCountResult">
+        <result property="month" column="month"/>
+        <result property="serviceType" column="service_type"/>
+        <result property="subTaskId" column="subTaskId"/>
+        <result property="completedCount" column="completed_count"/>
+        <result property="allCount" column="all_count"/>
+        <result property="completedPercent" column="completed_percent"/>
+        <result property="name" column="name"/>
+    </resultMap>
+
     <sql id="selectServiceSubtaskVo">
         select id,
                hosp_type,
@@ -1285,6 +1295,177 @@
         )a1
     </select>
 
+    <select id="getSfStatisticsCategory" parameterType="com.smartor.domain.ServiceSubtaskCountReq"
+            resultMap="ServiceSubtaskResult2">
+        SELECT a.sub_id as subTaskId,
+        <if test="configValue != null and configValue != ''">
+            SUM(CASE WHEN a.categoryid IN(${configValue})
+            THEN 1 ELSE 0 END) AS joyAllCount,
+        </if>
+        COUNT(sub_id) joyCount
+        FROM service_subtask_detail a
+        INNER JOIN service_subtask t ON a.sub_id = t.id
+        <where>
+            a.del_flag=0
+            AND t.del_flag=0
+            <if test="leavehospitaldistrictcodes != null and leavehospitaldistrictcodes.size() > 0">
+                AND t.leavehospitaldistrictcode IN
+                <foreach collection="leavehospitaldistrictcodes" item="leavehospitaldistrictcode" open="(" separator=","
+                         close=")">
+                    #{leavehospitaldistrictcode}
+                </foreach>
+            </if>
+            <if test="deptcodes != null and deptcodes.size() > 0">
+                AND t.deptcode IN
+                <foreach collection="deptcodes" item="deptcode" open="(" separator=","
+                         close=")">
+                    #{deptcode}
+                </foreach>
+            </if>
+            <if test="serviceType != null and serviceType.size() > 0">
+                AND t.service_type IN
+                <foreach collection="serviceType" item="serviceType" open="(" separator=","
+                         close=")">
+                    #{serviceType}
+                </foreach>
+            </if>
+            <if test="startTime != null and endTime!=null">
+                AND date_format(t.visit_time,'%y%m%d') >= date_format(#{startTime},'%y%m%d')
+                AND date_format(t.visit_time,'%y%m%d') &lt;= date_format(#{endTime},'%y%m%d')
+            </if>
+            <if test="visitDeptCode != null">
+                and t.visit_dept_code = #{visitDeptCode}
+            </if>
+            <if test="visitDeptName != null">
+                and t.visit_dept_name = #{visitDeptName}
+            </if>
+            <if test="isabnormal != null">
+                and t.isabnormal = #{isabnormal}
+            </if>
+            <!-- 鐩墠鍙粺璁¤闊冲拰闂嵎 -->
+            <if test="type != null">
+                and t.type = #{type}
+            </if>
+        </where>
+        GROUP BY a.sub_id
+    </select>
+
+    <select id="getSfStatisticsScriptDetails" parameterType="com.smartor.domain.ServiceSubtaskCountReq"
+            resultMap="ServiceSubtaskScriptCountResult">
+        SELECT
+        a.id as scriptid,
+        a.script_content,
+        b.completed_quantity,
+        b.all_quantity,
+        ROUND(b.completed_quantity/b.all_quantity,2) as completed_percentage
+        FROM
+        <if test="type == 1">
+            ivr_task_template_script a
+        </if>
+        <if test="type == 2">
+            svy_task_template_script a
+        </if>
+        INNER JOIN(
+        SELECT
+        ssd.scriptid AS scriptid,
+        SUM(CASE WHEN IFNULL(ssd.matchedtext,ssd.asrtext) IS NOT NULL
+        AND IFNULL(ssd.matchedtext,ssd.asrtext) != '' THEN 1
+        ELSE 0 END) AS completed_quantity,
+        COUNT(*) AS all_quantity
+        FROM
+        service_subtask_detail ssd
+        INNER JOIN service_subtask ss ON ssd.sub_id = ss.id
+        WHERE
+        ss.del_flag=0
+        AND ssd.del_flag = 0
+        <if test="orgid != null and orgid != ''">
+            AND ss.orgid = #{orgid}
+        </if>
+        <if test="leavehospitaldistrictcodes != null and leavehospitaldistrictcodes.size() > 0">
+            AND ss.leavehospitaldistrictcode IN
+            <foreach collection="leavehospitaldistrictcodes" item="leavehospitaldistrictcode" open="(" separator=","
+                     close=")">
+                #{leavehospitaldistrictcode}
+            </foreach>
+        </if>
+        <if test="deptcodes != null and deptcodes.size() > 0">
+            AND ss.deptcode IN
+            <foreach collection="deptcodes" item="deptcode" open="(" separator=","
+                     close=")">
+                #{deptcode}
+            </foreach>
+        </if>
+        <if test="serviceType != null and serviceType.size() > 0">
+            AND ss.service_type IN
+            <foreach collection="serviceType" item="serviceType" open="(" separator=","
+                     close=")">
+                #{serviceType}
+            </foreach>
+        </if>
+        <if test="startTime != null and endTime!=null">
+            AND date_format(ss.visit_time,'%y%m%d') >= date_format(#{startTime},'%y%m%d')
+            AND date_format(ss.visit_time,'%y%m%d') &lt;= date_format(#{endTime},'%y%m%d')
+        </if>
+        <!-- 鐩墠鍙粺璁¤闊冲拰闂嵎 -->
+        <if test="type != null">
+            and ss.type = #{type}
+        </if>
+        <if test="configValue != null and configValue != ''">
+            AND ssd.categoryid IN (${configValue})
+        </if>
+        group by ssd.scriptid) b
+        ON a.id = b.scriptid
+    </select>
+
+    <select id="getSfStatisticsScriptItemDetails" parameterType="com.smartor.domain.ServiceSubtaskCountReq"
+            resultMap="ServiceSubtaskScriptCountResult">
+        SELECT
+        ssd.scriptid,
+        IFNULL(ssd.matchedtext,ssd.asrtext) AS option_text,
+        COUNT(*) AS chosen_quantity
+        FROM
+        service_subtask_detail ssd
+        INNER JOIN service_subtask ss ON ssd.sub_id = ss.id
+        <where>
+            ss.del_flag=0
+            AND IFNULL(ssd.matchedtext,ssd.asrtext) IS NOT NULL
+            AND IFNULL(ssd.matchedtext,ssd.asrtext) != ''
+            <if test="leavehospitaldistrictcodes != null and leavehospitaldistrictcodes.size() > 0">
+                AND ss.leavehospitaldistrictcode IN
+                <foreach collection="leavehospitaldistrictcodes" item="leavehospitaldistrictcode" open="(" separator=","
+                         close=")">
+                    #{leavehospitaldistrictcode}
+                </foreach>
+            </if>
+            <if test="deptcodes != null and deptcodes.size() > 0">
+                AND ss.deptcode IN
+                <foreach collection="deptcodes" item="deptcode" open="(" separator=","
+                         close=")">
+                    #{deptcode}
+                </foreach>
+            </if>
+            <if test="serviceType != null and serviceType.size() > 0">
+                AND ss.service_type IN
+                <foreach collection="serviceType" item="serviceType" open="(" separator=","
+                         close=")">
+                    #{serviceType}
+                </foreach>
+            </if>
+            <if test="startTime != null and endTime!=null">
+                AND date_format(ss.visit_time,'%y%m%d') >= date_format(#{startTime},'%y%m%d')
+                AND date_format(ss.visit_time,'%y%m%d') &lt;= date_format(#{endTime},'%y%m%d')
+            </if>
+            <!-- 鐩墠鍙粺璁¤闊冲拰闂嵎 -->
+            <if test="type != null">
+                and ss.type = #{type}
+            </if>
+            <if test="configValue != null and configValue != ''">
+                AND ssd.categoryid IN (${configValue})
+            </if>
+        </where>
+        group by ssd.scriptid, IFNULL(ssd.matchedtext,ssd.asrtext)
+    </select>
+
     <select id="getDataByTime" resultMap="ServiceSubtaskResult">
 
         select id,

--
Gitblit v1.9.3