From 64f3a44f835a917c7d4157856ea4a1ede84b26a9 Mon Sep 17 00:00:00 2001
From: 陈昶聿 <chychen@nbjetron.com>
Date: 星期一, 14 九月 2026 14:04:23 +0800
Subject: [PATCH] 【景宁】景宁 只要存在相同诊断、患者的门诊记录则当再次随访处理
---
smartor/src/main/resources/mapper/smartor/ServiceSubtaskMapper.xml | 445 ++++++++++++++++++++++++++++++++++++++-----------------
1 files changed, 304 insertions(+), 141 deletions(-)
diff --git a/smartor/src/main/resources/mapper/smartor/ServiceSubtaskMapper.xml b/smartor/src/main/resources/mapper/smartor/ServiceSubtaskMapper.xml
index 1683cd0..2a087a5 100644
--- a/smartor/src/main/resources/mapper/smartor/ServiceSubtaskMapper.xml
+++ b/smartor/src/main/resources/mapper/smartor/ServiceSubtaskMapper.xml
@@ -358,6 +358,18 @@
#{itemTaskId}
</foreach>
</if>
+ <if test="operationItemIds != null and operationItemIds.size() > 0">
+ AND operation_item_id IN
+ <foreach collection="operationItemIds" item="operationItemIdItem" open="(" separator="," close=")">
+ #{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},
'%')
@@ -373,6 +385,12 @@
</if>
<if test="endSendDateTime != null">
AND date_format(visit_time,'%y%m%d') <= date_format(#{endSendDateTime},'%y%m%d')
+ </if>
+ <if test="finishtimeStart != null">
+ AND date_format(finishtime,'%y%m%d') >= date_format(#{finishtimeStart},'%y%m%d')
+ </if>
+ <if test="finishtimeEnd != null">
+ AND date_format(finishtime,'%y%m%d') <= date_format(#{finishtimeEnd},'%y%m%d')
</if>
<if test="longSendTime != null">
AND date_format(long_send_time,'%y%m%d') <= date_format(#{longSendTime},'%y%m%d')
@@ -396,7 +414,7 @@
</if>
<if test="deptOrDistrict==2">
AND (1=1
- <if test="leavehospitaldistrictcodes != null and leavehospitaldistrictcodes.size() > 0">
+ <if test="leavehospitaldistrictcodes != null">
AND leavehospitaldistrictcode IN
<foreach collection="leavehospitaldistrictcodes" item="leavehospitaldistrictcode" open="("
separator=","
@@ -404,7 +422,7 @@
#{leavehospitaldistrictcode}
</foreach>
</if>
- <if test=" leaveldeptcodes != null and leaveldeptcodes.size()>0">
+ <if test=" leaveldeptcodes != null">
OR deptcode IN
<foreach collection="leaveldeptcodes" item="leaveldeptcode" open="(" separator=","
close=")">
@@ -483,6 +501,7 @@
<if test="libtemplatename != null ">and libtemplatename = #{libtemplatename}</if>
<if test="openid != null ">and openid = #{openid}</if>
<if test="sendstate != null ">and sendstate = #{sendstate}</if>
+ <if test="operationItemId != null ">and operation_item_id = #{operationItemId}</if>
<if test="drname != null and drname != ''">and drname like concat('%', #{drname}, '%')</if>
<if test="taskName != null and taskName != ''">and task_name like concat('%', #{taskName}, '%')</if>
<if test="drcode != null and drcode != ''">and (drcode = #{drcode}</if>
@@ -739,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) <= DATE(ss.finishtime) THEN 1 ELSE 0 END) / COUNT(*) AS finishRate,
+ SUM(CASE WHEN ss.finishtime IS NOT NULL AND DATE(ss.visit_time) <= 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) <= #{rateDay} + COALESCE(cp.compensate_days, 0)
@@ -1780,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 < 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 < 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"
@@ -2953,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>
@@ -3043,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
@@ -3058,37 +3081,177 @@
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 >= #{scoreStart}</if>
+ <if test="scoreEnd != null">AND d.score <= #{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 >= #{scoreStart}</if>
+ <if test="scoreEnd != null">AND d.score <= #{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') >= date_format(#{startOutHospTime},'%y%m%d')
- </if>
+ <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>
GROUP BY
t.taskid,
d.questiontext,
+ d.score,
+ d.targetvalue,
+ d.asrtext,
+ d.value_type
+ ORDER BY
+ d.questiontext,
+ t.taskid
+ </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,
+ 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
+ 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
+ INNER JOIN (
+ SELECT
+ 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 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>
+ <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>
+ <if test="questiontext != null and questiontext != ''">and d.questiontext like concat('%', #{questiontext},
+ '%')
+ </if>
+ AND s.sendstate = 6
+ AND d.del_flag=0
+ 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 >= #{valueType}</if>
+ <if test="scoreStart != null">AND d.score >= #{scoreStart}</if>
+ <if test="scoreEnd != null">AND d.score <= #{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') >= 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>
+ 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 < #{endFinishTime}
+ </if>
+ <if test="startFinishTime != null">
+ AND create_time >= #{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