From fcb98e4558897945a316d04555923355b8e60605 Mon Sep 17 00:00:00 2001
From: 陈昶聿 <chychen@nbjetron.com>
Date: 星期二, 21 七月 2026 10:16:56 +0800
Subject: [PATCH] Merge branch 'master' into master-任务组

---
 smartor/src/main/resources/mapper/smartor/ServiceSubtaskMapper.xml |  271 ++++++++++++++++++++++++++++++++++++++++++++++++++++-
 1 files changed, 262 insertions(+), 9 deletions(-)

diff --git a/smartor/src/main/resources/mapper/smartor/ServiceSubtaskMapper.xml b/smartor/src/main/resources/mapper/smartor/ServiceSubtaskMapper.xml
index b77ca33..d19b011 100644
--- a/smartor/src/main/resources/mapper/smartor/ServiceSubtaskMapper.xml
+++ b/smartor/src/main/resources/mapper/smartor/ServiceSubtaskMapper.xml
@@ -52,6 +52,7 @@
         <result property="wechat" column="wechat"/>
         <result property="leaveicd10code" column="leaveicd10code"/>
         <result property="leavediagname" column="leavediagname"/>
+        <result property="diagname" column="diagname"/>
         <result property="deptname" column="deptname"/>
         <result property="admindate" column="admindate"/>
         <result property="roomno" column="roomno"/>
@@ -93,6 +94,10 @@
         <result property="continueCount" column="continue_count"/>
         <result property="continueTimeNext" column="continue_time_next"/>
         <result property="operationItemId" column="operation_item_id"/>
+        <result property="scheduleId" column="schedule_id"/>
+        <result property="scheduleDetailId" column="schedule_detail_id"/>
+        <result property="scheduleSeq" column="schedule_seq"/>
+        <result property="loopCount" column="loop_count"/>
     </resultMap>
 
     <resultMap type="com.smartor.domain.ServiceSubtaskCount" id="ServiceSubtaskResult2">
@@ -147,6 +152,7 @@
         select id,
                hosp_type,
                task_guid,
+               diagname,
                patfrom,
                management_doctor,
                management_doctor_code,
@@ -236,6 +242,10 @@
                continue_count,
                continue_time_next,
                operation_item_id,
+               schedule_id,
+               schedule_detail_id,
+               schedule_seq,
+               loop_count,
                task_situation
         from service_subtask
     </sql>
@@ -269,12 +279,36 @@
         <include refid="selectServiceSubtaskVo"/>
         where 1=1
         and del_flag = 0
+        and sendstate != 5
         <if test="orgid != null and orgid != ''">
             and orgid = #{orgid}
+        </if>
+        <if test="subId != null">
+            AND id = #{subId}
         </if>
         <if test="taskid != null ">and taskid = #{taskid}</if>
         <if test="visitTime != null">
             AND date_format(visit_time,'%y%m%d') &lt;= date_format(#{visitTime},'%y%m%d')
+        </if>
+        <if test="sendstate != null ">and sendstate = #{sendstate}</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}</if>
+        UNION ALL
+        <include refid="selectServiceSubtaskVo"/>
+        where 1=1
+        and del_flag = 0
+        and sendstate = 5
+        <if test="orgid != null and orgid != ''">
+            and orgid = #{orgid}
+        </if>
+        <if test="subId != null">
+            AND id = #{subId}
+        </if>
+        <if test="taskid != null ">and taskid = #{taskid}</if>
+        <if test="visitTime != null">
+            AND date_format(visit_time,'%y%m%d') &lt;= date_format(DATE_ADD(#{visitTime}, INTERVAL 1 DAY),'%y%m%d')
         </if>
         <if test="sendstate != null ">and sendstate = #{sendstate}</if>
         <if test="continueFlag != null ">and continue_flag = #{continueFlag}</if>
@@ -329,6 +363,12 @@
                 #{state}
             </foreach>
         </if>
+        <if test="subIdList != null  and subIdList.size() > 0">
+            AND id IN
+            <foreach collection="subIdList" item="subId" open="(" separator="," close=")">
+                #{subId}
+            </foreach>
+        </if>
         <!-- taskIds绛涢�� -->
         <if test="taskIds != null and taskIds.size() > 0">
             AND taskid IN
@@ -353,7 +393,6 @@
         <if test="endSendDateTime != null">
             AND date_format(visit_time,'%y%m%d') &lt;= date_format(#{endSendDateTime},'%y%m%d')
         </if>
-
         <if test="longSendTime != null">
             AND date_format(long_send_time,'%y%m%d') &lt;= date_format(#{longSendTime},'%y%m%d')
         </if>
@@ -390,7 +429,8 @@
                          close=")">
                     #{leaveldeptcode}
                 </foreach>
-            </if>)
+            </if>
+            )
         </if>
         <if test="deptOrDistrict==3">
             AND (1=1
@@ -411,7 +451,6 @@
             </if>
             )
         </if>
-
         <if test="deptOrDistrict==4">
             AND (1=1
             <if test="leavehospitaldistrictcodes != null and leavehospitaldistrictcodes.size() > 0">
@@ -431,7 +470,6 @@
             </if>
             )
         </if>
-
         <if test="visitTime != null">
             AND date_format(visit_time,'%y%m%d') = date_format(#{visitTime},'%y%m%d')
         </if>
@@ -462,7 +500,6 @@
         <if test="libtemplateid != null ">and libtemplateid = #{libtemplateid}</if>
         <if test="libtemplatename != null ">and libtemplatename = #{libtemplatename}</if>
         <if test="openid != null ">and openid = #{openid}</if>
-        <if test="longSendTime != null ">and long_send_time = #{longSendTime}</if>
         <if test="sendstate != null ">and sendstate = #{sendstate}</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>
@@ -543,11 +580,33 @@
             resultMap="ServiceSubtaskResult">
         <include refid="selectServiceSubtaskVo"/>
         where del_flag = 0
+        and sendstate != 5
         <if test="orgid != null and orgid != ''">
             and orgid = #{orgid}
         </if>
         <if test="visitTime != null">
             AND date_format(visit_time,'%y%m%d') &lt;= date_format(#{visitTime},'%y%m%d')
+        </if>
+        <if test="subId != null">
+            AND id = #{subId}
+        </if>
+        <if test="sendstate != null ">and sendstate = #{sendstate}</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}</if>
+        UNION ALL
+        <include refid="selectServiceSubtaskVo"/>
+        where del_flag = 0
+        and sendstate = 5
+        <if test="orgid != null and orgid != ''">
+            and orgid = #{orgid}
+        </if>
+        <if test="visitTime != null">
+            AND date_format(visit_time,'%y%m%d') &lt;= date_format(DATE_ADD(#{visitTime}, INTERVAL 1 DAY),'%y%m%d')
+        </if>
+        <if test="subId != null">
+            AND id = #{subId}
         </if>
         <if test="sendstate != null ">and sendstate = #{sendstate}</if>
         <if test="continueFlag != null ">and continue_flag = #{continueFlag}</if>
@@ -804,6 +863,12 @@
         <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}</if>
+        <if test="startOutHospTime != null">
+            AND date_format(endtime,'%y%m%d') &gt;= date_format(#{startOutHospTime},'%y%m%d')
+        </if>
+        <if test="endOutHospTime != null">
+            AND date_format(endtime,'%y%m%d') &lt;= date_format(#{endOutHospTime},'%y%m%d')
+        </if>
         GROUP BY sendname,sendstate,starttime,endtime,nurse_name,phone,sex,task_name,leavediagname,visit_time
         ORDER BY sendname,visit_time
         <if test="pageSize != null  and pageNum != null">limit ${pageSize} OFFSET ${pageNum}</if>
@@ -903,6 +968,10 @@
             <if test="continueTimeNext != null ">continue_time_next,</if>
             <if test="continueContent != null ">continue_content,</if>
             <if test="operationItemId != null ">operation_item_id,</if>
+            <if test="scheduleId != null ">schedule_id,</if>
+            <if test="scheduleDetailId != null ">schedule_detail_id,</if>
+            <if test="scheduleSeq != null ">schedule_seq,</if>
+            <if test="loopCount != null ">loop_count,</if>
         </trim>
         <trim prefix="values (" suffix=")" suffixOverrides=",">
             <if test="sendname != null">#{sendname},</if>
@@ -995,6 +1064,10 @@
             <if test="continueTimeNext != null ">#{continueTimeNext,jdbcType=TIMESTAMP},</if>
             <if test="continueContent != null ">#{continueContent},</if>
             <if test="operationItemId != null ">#{operationItemId},</if>
+            <if test="scheduleId != null ">#{scheduleId},</if>
+            <if test="scheduleDetailId != null ">#{scheduleDetailId},</if>
+            <if test="scheduleSeq != null ">#{scheduleSeq},</if>
+            <if test="loopCount != null ">#{loopCount},</if>
         </trim>
     </insert>
 
@@ -1092,6 +1165,10 @@
             <if test="continueTimeNext != null ">continue_time_next = #{continueTimeNext,jdbcType=TIMESTAMP},</if>
             <if test="continueContent != null ">continue_content = #{continueContent},</if>
             <if test="operationItemId != null ">operation_item_id = #{operationItemId},</if>
+            <if test="scheduleId != null ">schedule_id = #{scheduleId},</if>
+            <if test="scheduleDetailId != null ">schedule_detail_id = #{scheduleDetailId},</if>
+            <if test="scheduleSeq != null ">schedule_seq = #{scheduleSeq},</if>
+            <if test="loopCount != null ">loop_count = #{loopCount},</if>
         </trim>
         where id = #{id}
     </update>
@@ -1292,7 +1369,13 @@
             <if test="continueTimeNext != null ">continue_time_next = #{continueTimeNext,jdbcType=TIMESTAMP},</if>
             <if test="continueContent != null ">continue_content = #{continueContent},</if>
         </trim>
-        where patid = #{patid} and taskid = #{taskid}
+        where
+        <if test="patid != null ">
+            patid = #{patid}
+        </if>
+        <if test="taskid != null ">
+            and taskid = #{taskid}
+        </if>
         <if test="id != null ">
             and id = #{id}
         </if>
@@ -1482,6 +1565,10 @@
             AND visit_time >= DATE(#{startTime})
             AND visit_time &lt; DATE_ADD(DATE(#{endTime}), INTERVAL 1 DAY)
         </if>
+        <if test="hospitalStartTime != null and hospitalEndTime!=null">
+            AND endtime >= DATE(#{hospitalStartTime})
+            AND endtime &lt; DATE_ADD(DATE(#{hospitalEndTime}), 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>
@@ -1661,6 +1748,10 @@
             AND visit_time >= DATE(#{startTime})
             AND visit_time &lt; DATE_ADD(DATE(#{endTime}), INTERVAL 1 DAY)
         </if>
+        <if test="hospitalStartTime != null and hospitalEndTime!=null">
+            AND endtime >= DATE(#{hospitalStartTime})
+            AND endtime &lt; DATE_ADD(DATE(#{hospitalEndTime}), 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>
@@ -1809,6 +1900,7 @@
             <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>
@@ -2430,14 +2522,17 @@
         SUM(CASE WHEN sendstate != 4 AND sendstate != 2 THEN 1 ELSE 0 END) AS ysf,
         SUM(CASE WHEN sendstate = 5 THEN 1 ELSE 0 END) AS fssb,
         SUM(CASE WHEN sendstate >= 3 OR sendstate = 1 THEN 1 ELSE 0 END) AS yfs,
-        SUM(CASE WHEN sendstate = 2 THEN 1 ELSE 0 END) AS dsf,
         SUM(CASE WHEN sendstate = 1 THEN 1 ELSE 0 END) AS blq,
+        SUM(CASE WHEN sendstate = 4 THEN 1 ELSE 0 END) AS wxsf,
+        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 = 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,
         COUNT(1) as total
         FROM service_subtask
-        where 1=1
-        and del_flag = 0
+        where del_flag = 0
+        <if test="continueFlag != null ">and continue_flag = #{continueFlag}</if>
         <if test="sendname != null and sendname != ''">
             AND sendname LIKE CONCAT('%', #{sendname}, '%')
         </if>
@@ -2608,6 +2703,9 @@
         </if>
         <if test="visitCount != null and visitCount > 1">
             AND visit_count > 1
+        </if>
+        <if test="drname != null  and drname != ''">
+            AND drname like concat('%', #{drname}, '%')
         </if>
     </select>
 
@@ -2797,6 +2895,15 @@
         FROM service_subtask
         WHERE del_flag = 0
         AND service_type = 4
+        <if test="orgid != null and orgid != ''">
+            and orgid = #{orgid}
+        </if>
+        <if test="sendstate != null">
+            AND sendstate = #{sendstate}
+        </if>
+        <if test="isFinished != null and isFinished == '1'">
+            AND finishtime is not null
+        </if>
         <if test="starttime != null">AND starttime &gt;= #{starttime}</if>
         <if test="endtime != null">AND endtime &lt;= #{endtime}</if>
         <if test="visittime != null">AND DATE(visit_time) = DATE(#{visittime})</if>
@@ -2824,5 +2931,151 @@
         </choose>
     </select>
 
+    <!-- 浠诲姟缁勶紙appltype=5锛夋粴鍔ㄨ皟搴︾敤锛氭湰杞粛鍦ㄨ窇鐨勬暟閲� -->
+    <select id="countActiveByScheduleIdAndLoop" resultType="int">
+        select count(1)
+        from service_subtask
+        where schedule_id = #{scheduleId}
+          and loop_count = #{loopCount}
+          and (del_flag is null or del_flag = '0')
+          and sendstate in (1, 2, 3)
+    </select>
+
+    <!-- 浠诲姟缁勶紙appltype=5锛夋粴鍔ㄨ皟搴︾敤锛氭媺鏈疆鍏ㄩ噺 subtask锛屼綔涓轰笅涓�杞殑鍏嬮殕妯℃澘 -->
+    <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')
+        order by schedule_seq asc, id asc
+    </select>
+
+    <select id="gethelibraryCountHyperlink" 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
+        from service_subtask
+        where 1=1
+        and del_flag = 0
+        AND service_type = 4
+        <if test="orgid != null and orgid != ''">
+            and orgid = #{orgid}
+        </if>
+        <if test="sendstate != null">
+            AND sendstate = #{sendstate}
+        </if>
+        <if test="isFinished != null and isFinished == '1'">
+            AND finishtime is not null
+        </if>
+        <if test="hospitaldistrictcodes != null and hospitaldistrictcodes.size() > 0">
+            AND leavehospitaldistrictcode IN
+            <foreach collection="hospitaldistrictcodes" item="hospitaldistrictcode" open="(" separator=","
+                     close=")">
+                #{hospitaldistrictcode}
+            </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="starttime != null">AND starttime &gt;= #{starttime}</if>
+        <if test="endtime != null">AND endtime &lt;= #{endtime}</if>
+        <if test="visittime != null">AND DATE(visit_time) = DATE(#{visittime})</if>
+        <if test="finishtime != null">AND DATE(finishtime) = DATE(#{finishtime})</if>
+        <if test="hospType != null and hospType != ''">AND hosp_type = #{hospType}</if>
+        order by endtime desc
+        <if test="pageSize != null  and pageNum != null">
+            limit ${pageSize} OFFSET ${pageNum}
+        </if>
+    </select>
+
+    <select id="statQuestionOption" resultType="com.smartor.domain.ServiceSubtaskDetailRatioExport">
+        SELECT
+        d.questiontext AS questiontext,
+        t.taskid AS taskid,
+        d.asrtext AS optionresult,
+        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
+        t.taskid,
+        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 t.taskid IN
+        <foreach collection="taskIds" item="taskId" open="(" separator="," close=")">
+            #{taskId}
+        </foreach>
+        and s.sendstate=6
+        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>
+        AND s.sendstate = 6
+      <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
+        ORDER BY
+        d.questiontext,
+        t.taskid
+    </select>
+
 </mapper>
 

--
Gitblit v1.9.3