liusheng
10 天以前 274d8e2950e79e73b14783e497cdaf97f7dbb8d3
smartor/src/main/resources/mapper/smartor/ServiceSubtaskMapper.xml
@@ -396,7 +396,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 +404,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=")">
@@ -506,10 +506,10 @@
        <if test="isVisitAgain != null">and is_visit_again = #{isVisitAgain}</if>
        <if test="visitCount != null and visitCount > 1 and visitDeptCodes != null and visitDeptCodes.size() > 0">
            AND visit_dept_code IN
            <foreach collection="visitDeptCodes" item="visitDeptCodes" open="("
            <foreach collection="visitDeptCodes" item="visitDeptCode" open="("
                     separator=","
                     close=")">
                #{visitDeptCodes}
                #{visitDeptCode}
            </foreach>
        </if>
        <if test="sort != null  and sort==0">order by endtime asc</if>
@@ -1817,7 +1817,8 @@
            continue_content,
            continue_count,
            continue_time_next,
            task_situation
            task_situation,
            remark
            from service_subtask
            where 1=1
            and del_flag = 0
@@ -2559,8 +2560,9 @@
            </if>
        </if>
        <if test="deptOrDistrict==2">
            AND (1=1
            <if test="leavehospitaldistrictcodes != null and leavehospitaldistrictcodes.size() > 0">
                AND (leavehospitaldistrictcode IN
                AND leavehospitaldistrictcode IN
                <foreach collection="leavehospitaldistrictcodes" item="leavehospitaldistrictcode" open="("
                         separator=","
                         close=")">
@@ -2570,17 +2572,18 @@
            <if test=" leaveldeptcodes != null and leaveldeptcodes.size()>0">
                OR deptcode IN
                <foreach collection="leaveldeptcodes" item="leaveldeptcode" open="(" separator=","
                         close="))">
                         close=")">
                    #{leaveldeptcode}
                </foreach>
            </if>
            )
        </if>
        <if test="visitCount != null and visitCount > 1 and visitDeptCodes != null and visitDeptCodes.size() > 0">
            AND visit_dept_code IN
            <foreach collection="visitDeptCodes" item="visitDeptCodes" open="("
            <foreach collection="visitDeptCodes" item="visitDeptCode" open="("
                     separator=","
                     close=")">
                #{visitDeptCodes}
                #{visitDeptCode}
            </foreach>
        </if>
        <if test="leavehospitaldistrictname != null and leavehospitaldistrictname != ''">
@@ -2994,7 +2997,8 @@
        continue_content,
        continue_count,
        continue_time_next,
        task_situation
        task_situation,
        remark
        from service_subtask
        where 1=1
        and del_flag = 0
@@ -3037,6 +3041,7 @@
        SELECT
        d.questiontext AS questiontext,
        t.taskid AS taskid,
        t.task_name AS taskName,
        d.asrtext AS optionresult,
        COUNT(*) AS count,
        CONCAT(ROUND(COUNT(*) * 100.0 / t2.total_count, 2), '%') AS ratio
@@ -3084,5 +3089,64 @@
        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,
        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 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>
        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="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>
    <select id="selectServiceSubtaskListDeadLine" parameterType="com.smartor.domain.entity.ServiceSubtaskEntity"
            resultMap="ServiceSubtaskResult">
        <include refid="selectServiceSubtaskVo"/>
        where 1=1
        and del_flag = 0
        and visit_count = 1
        and endtime
    </select>
</mapper>