From 278a56025b6e64e49a3453f0b9be84832de96066 Mon Sep 17 00:00:00 2001
From: liusheng <337615773@qq.com>
Date: 星期一, 28 九月 2026 10:01:07 +0800
Subject: [PATCH] 1.代码提交
---
smartor/src/main/resources/mapper/smartor/ServiceSubtaskMapper.xml | 128 +++++++++++++++++++++++++++++++++++++-----
1 files changed, 112 insertions(+), 16 deletions(-)
diff --git a/smartor/src/main/resources/mapper/smartor/ServiceSubtaskMapper.xml b/smartor/src/main/resources/mapper/smartor/ServiceSubtaskMapper.xml
index 1603d17..71d8a36 100644
--- a/smartor/src/main/resources/mapper/smartor/ServiceSubtaskMapper.xml
+++ b/smartor/src/main/resources/mapper/smartor/ServiceSubtaskMapper.xml
@@ -2584,6 +2584,8 @@
SUM(CASE WHEN sendstate != 4 THEN 1 ELSE 0 END) AS xsf,
SUM(CASE WHEN (sendstate = 1 OR sendstate = 2 OR sendstate = 3 OR sendstate = 5 OR sendstate = 7 ) THEN 1 ELSE 0
END) AS dsf,
+ SUM(CASE WHEN sendstate != 2 THEN 1 ELSE 0 END) AS yfs,
+ SUM(CASE WHEN sendstate = 2 THEN 1 ELSE 0 END) AS wfs,
SUM(CASE WHEN sendstate = 6 THEN 1 ELSE 0 END) AS ywc,
SUM(CASE WHEN excep IS NOT NULL AND excep = '1' THEN 1 ELSE 0 END) AS yc,
SUM(CASE WHEN excep IS NOT NULL AND excep = '2' THEN 1 ELSE 0 END) AS jg,
@@ -3258,6 +3260,13 @@
#{taskId}
</foreach>
</if>
+ <!-- 浼犱簡 subtaskIds 鍙粺璁¤繖鎵瑰瓙浠诲姟锛堟湰娆″鍑虹殑鎮h�咃級 -->
+ <if test="subtaskIds != null and subtaskIds.size() > 0">
+ AND s.id IN
+ <foreach collection="subtaskIds" item="subtaskId" open="(" separator="," close=")">
+ #{subtaskId}
+ </foreach>
+ </if>
<if test="valueType != null">AND d.value_type = #{valueType}</if>
<if test="scoreStart != null">AND d.score >= #{scoreStart}</if>
<if test="scoreEnd != null">AND d.score <= #{scoreEnd}</if>
@@ -3266,6 +3275,19 @@
</if>
and s.sendstate=6
and d.del_flag=0
+ <!-- 鍒嗘瘝蹇呴』鍜屾槑缁嗙敤鍚屼竴濂楁椂闂存潯浠讹紝鍚﹀垯閫変簡鏃堕棿鑼冨洿鍚庢瘮渚嬩細鎸夊叏閲忓巻鍙茶绋�閲� -->
+ <if test="startOutHospTime != null">
+ AND date_format(s.endtime,'%y%m%d') >= date_format(#{startOutHospTime},'%y%m%d')
+ </if>
+ <if test="endOutHospTime != null">
+ AND date_format(s.endtime,'%y%m%d') <= date_format(#{endOutHospTime},'%y%m%d')
+ </if>
+ <if test="startFinishTime != null">
+ AND date_format(s.finishtime,'%y%m%d') >= date_format(#{startFinishTime},'%y%m%d')
+ </if>
+ <if test="endFinishTime != null">
+ AND date_format(s.finishtime,'%y%m%d') <= date_format(#{endFinishTime},'%y%m%d')
+ </if>
GROUP BY
t.taskid,
d.questiontext
@@ -3275,6 +3297,12 @@
AND t.taskid IN
<foreach collection="taskIds" item="taskId" open="(" separator="," close=")">
#{taskId}
+ </foreach>
+ </if>
+ <if test="subtaskIds != null and subtaskIds.size() > 0">
+ AND s.id IN
+ <foreach collection="subtaskIds" item="subtaskId" open="(" separator="," close=")">
+ #{subtaskId}
</foreach>
</if>
<if test="valueType != null">AND d.value_type = #{valueType}</if>
@@ -3309,18 +3337,77 @@
t.taskid
</select>
+ <!--
+ 瀵煎嚭銆岄棶棰樿鎯呭崰姣斻�嶄笓鐢ㄧ粺璁★紙鍙粺璁℃湰娆″鍑虹殑杩欐壒鎮h�咃級
+ 鏁伴噺 = 閫夋嫨璇ラ�夐」鐨勬偅鑰呮暟锛圕OUNT(DISTINCT s.id)锛屽苟鐢� MAX(id) 淇濊瘉鍚屼竴鎮h�呭悓涓�棰樺彧绠楁渶鏂颁竴鏉★級
+ 鍒嗘暟 = 璇ラ�夐」鏄庣粏鐨� score 涔嬪拰
+ 姣斾緥 = 鏁伴噺 / 璇ラ浣滅瓟鎮h�呮暟锛屽湪 Java 渚х粺涓�璁$畻锛屽洜姝ゃ�屽崟棰樺悇閫夐」鏁伴噺涔嬪拰 = 璇ラ浣滅瓟鎮h�呮暟銆�
+ -->
+ <select id="statMydQuestionOptionForExport" resultType="com.smartor.domain.DTO.ServiceSubtaskOptionStatDTO">
+ SELECT
+ t.taskid AS taskid,
+ t.task_name AS taskName,
+ d.questiontext AS questiontext,
+ d.asrtext AS optionresult,
+ d.targetvalue AS targetvalue,
+ d.value_type AS valueType,
+ COUNT(DISTINCT s.id) AS patientCount,
+ SUM(COALESCE(CAST(d.score AS DECIMAL(18,2)), 0)) AS scoreSum
+ 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 1=1
+ AND s.del_flag = '0'
+ AND d.del_flag = 0
+ <if test="subtaskIds != null and subtaskIds.size() > 0">
+ AND s.id IN
+ <foreach collection="subtaskIds" item="subtaskId" open="(" separator="," close=")">
+ #{subtaskId}
+ </foreach>
+ </if>
+ <!-- 涓嶄紶瀛愪换鍔℃椂鐩存帴鏌ヤ笉鍒版暟鎹紝閬垮厤璇粺璁″叏閲� -->
+ <if test="subtaskIds == null or subtaskIds.size() == 0">
+ AND 1 = 0
+ </if>
+ <if test="questiontext != null and questiontext != ''">
+ AND d.questiontext LIKE CONCAT('%', #{questiontext}, '%')
+ </if>
+ <!-- 鍚屼竴鎮h�呭悓涓�棰樼洰鍙繚鐣欐渶鏂颁竴鏉★紝閲嶇瓟涓嶉噸澶嶈鍏ユ暟閲� -->
+ AND d.id = (
+ SELECT MAX(d2.id)
+ FROM service_subtask_detail d2
+ WHERE d2.sub_id = d.sub_id
+ AND d2.questiontext <=> d.questiontext
+ AND d2.del_flag = '0'
+ )
+ GROUP BY
+ t.taskid,
+ t.task_name,
+ d.questiontext,
+ d.asrtext,
+ d.targetvalue,
+ d.value_type
+ <!-- 鎸変换鍔″悕绉板垎缁勫睍绀猴細鍏堜换鍔″悕绉般�佸啀浠诲姟缂栧彿锛屽悓涓�浠诲姟鐨勯鐩�/閫夐」杩炵画鎺掑垪 -->
+ ORDER BY
+ t.task_name,
+ t.taskid,
+ d.questiontext
+ </select>
+
<!-- 鏂版柟娉曪細鏍规嵁瀛愪换鍔� ID 缁熻闂閫夐」鐧惧垎姣� (鐢ㄤ簬婊℃剰搴︾粺璁� serviceType=6) -->
<select id="statQuestionOptionBySubtaskIds" resultType="com.smartor.domain.ServiceSubtaskDetailRatioExport">
SELECT
d.questiontext AS questiontext,
- t.taskid AS taskid,
- t.task_name AS taskName,
+ <!-- 鏄庣粏宸叉寜銆岄鐩� + 閫夐」銆嶆眹鎬伙紝浠诲姟/绉戝/鐥呭尯鍙槸闄勫甫淇℃伅锛屽繀椤荤敤鑱氬悎鍑芥暟鍙栧�硷紙MySQL ONLY_FULL_GROUP_BY锛� -->
+ MAX(t.taskid) AS taskid,
+ MAX(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,
+ MAX(s.deptcode) AS deptcode,
+ MAX(s.deptname) AS deptname,
+ MAX(s.leavehospitaldistrictcode) AS leavehospitaldistrictcode,
+ MAX(s.leavehospitaldistrictname) AS leavehospitaldistrictname,
d.targetvalue AS targetvalue,
d.value_type AS valueType,
COUNT(*) AS count,
@@ -3338,9 +3425,15 @@
AND d2.del_flag = '0'
)
INNER JOIN (
+ <!-- 鍒嗘瘝 = 璇ラ鍚勯�夐」椤规暟涔嬪拰锛堟湭浣滅瓟鐨勭┖ asrtext 涓嶈繘鍒嗘瘝锛夛紝杩欐牱涓�閬撻鍚勯�夐」姣斾緥鍚堣鎵嶆槸 100% -->
+ SELECT
+ x.questiontext AS questiontext,
+ SUM(x.option_count) AS total_count
+ FROM (
SELECT
d.questiontext,
- COUNT(*) AS total_count
+ d.asrtext,
+ COUNT(*) AS option_count
FROM
service_task t
INNER JOIN service_subtask s ON s.taskid = t.taskid
@@ -3381,7 +3474,11 @@
<if test="endFinishTime != null">
AND date_format(s.finishtime,'%y%m%d') <= date_format(#{endFinishTime},'%y%m%d')
</if>
- GROUP BY d.questiontext
+ <!-- 鏈綔绛旓紙asrtext 涓虹┖锛夌殑鏄庣粏涓嶈鍏ュ垎姣� -->
+ AND d.asrtext IS NOT NULL AND TRIM(d.asrtext) <> ''
+ GROUP BY d.questiontext, d.asrtext
+ ) x
+ GROUP BY x.questiontext
) t2 ON t2.questiontext = d.questiontext
WHERE 1=1
<!-- 鍘婚噸锛氭槑缁嗚鍚屼竴瀛愪换鍔″悓涓�棰樼洰鍙繚鐣欐渶鏂颁竴鏉★紝閲嶇瓟涓嶉噸澶嶈鍏ラ」鏁� -->
@@ -3400,6 +3497,8 @@
</if>
AND s.sendstate = 6
AND d.del_flag=0
+ <!-- 鏈綔绛旓紙asrtext 涓虹┖锛変笉绠椾换浣曢�夐」锛屾槑缁嗛噷鐩存帴鎺掗櫎锛岄伩鍏嶅嚭鐜扮┖閫夐」琛� -->
+ AND d.asrtext IS NOT NULL AND TRIM(d.asrtext) <> ''
<if test="valueType != null">AND d.value_type >= #{valueType}</if>
<if test="scoreStart != null">AND d.score >= #{scoreStart}</if>
<if test="scoreEnd != null">AND d.score <= #{scoreEnd}</if>
@@ -3418,21 +3517,17 @@
<if test="endFinishTime != null">
AND date_format(s.finishtime,'%y%m%d') <= date_format(#{endFinishTime},'%y%m%d')
</if>
+ <!-- 鍙寜銆岄鐩� + 閫夐」銆嶆眹鎬伙細鍘熸潵 GROUP BY 甯︿笂 taskid/绉戝/鐥呭尯锛屽悓涓�涓�夐」琚媶鎴愬琛屻�佹瘡琛屾暟閲忛兘鏄� 1锛�
+ 鍓嶇/瀵煎嚭鎷垮埌鐨勩�屾暟閲忋�嶅氨姘歌繙鍋氫笉浜嗙疮鍔� -->
GROUP BY
- t.taskid,
d.questiontext,
+ d.asrtext,
d.score,
d.targetvalue,
- d.asrtext,
- t.task_name,
- s.deptcode,
- s.deptname,
- s.leavehospitaldistrictcode,
- s.leavehospitaldistrictname,
d.value_type
ORDER BY
d.questiontext,
- t.taskid
+ MIN(t.taskid)
</select>
<select id="statQuestionOptionByKsOrBq" resultType="com.smartor.domain.DTO.QuestionCountKsOrBqDTO"
@@ -3593,5 +3688,6 @@
</select>
+
</mapper>
--
Gitblit v1.9.3