liusheng
2026-10-12 26d1f59f0266672398975ba0337bb3d8267c2d95
smartor/src/main/resources/mapper/smartor/ServiceSubtaskDetailMapper.xml
@@ -185,6 +185,24 @@
    </select>
    <!--
        异常问题处理情况查询(tracedeallist)的「有效填写数」:
        原来对每个 scriptid 都执行一次 selectServiceSubtaskDetailList(查回全部列再去 size),
        一个问题一次、而且整个接口会被调用两遍,几十上百个问题就是上百次大表扫描;
        这里合并成一条 group by。
        注意:为与原口径完全一致,这里不加 del_flag 条件(原 selectServiceSubtaskDetailList
        虽然 Java 里 setDelFlag("0"),但 SQL 里并没有 del_flag 过滤)。
    -->
    <select id="countDetailByScriptIds" resultType="java.util.Map">
        select scriptid as scriptid, count(*) as cnt
        from service_subtask_detail
        where scriptid in
        <foreach collection="scriptIds" item="scriptId" open="(" separator="," close=")">
            #{scriptId}
        </foreach>
        group by scriptid
    </select>
    <select id="getServiceSubtaskDetails" parameterType="com.smartor.domain.ServiceSubtaskDetailVO"
            resultType="java.util.HashMap">
        select
@@ -265,7 +283,7 @@
        <if test="questiontext != null">and questiontext = #{questiontext}</if>
    </select>
    <select id="isExistServiceSubtaskDetail" resultType="com.smartor.domain.DTO.ServiceSubtaskDetailDTO">
                <select id="isExistServiceSubtaskDetail" resultType="com.smartor.domain.DTO.ServiceSubtaskDetailDTO">
        select id, questiontext, matchedtext, score
        from service_subtask_detail
        where del_flag = 0
@@ -454,7 +472,6 @@
        where id = #{id}
    </update>
    <update id="updateSSDByCondition" parameterType="com.smartor.domain.ServiceSubtaskDetail">
        update service_subtask_detail
        <trim prefix="SET" suffixOverrides=",">
@@ -547,33 +564,4 @@
            service_subtask_detail.matchedtext
    </select>
    <select id="selectRepeatDetailIds" resultType="Long">
        SELECT d1.id
        FROM service_subtask_detail d1
        INNER JOIN (
            SELECT sub_id, questiontext,
                   MAX(create_time) AS max_create_time,
                   MAX(id) AS keep_id
            FROM service_subtask_detail
            WHERE del_flag = 0
            GROUP BY sub_id, questiontext
            HAVING COUNT(*) &gt; 1
        ) d2 ON d1.sub_id = d2.sub_id
            AND d1.questiontext = d2.questiontext
            AND (
                d1.create_time &lt; d2.max_create_time
                OR (d1.create_time = d2.max_create_time AND d1.id &lt; d2.keep_id)
            )
        WHERE d1.del_flag = 0
    </select>
    <update id="deleteRepeatDetailByIds">
        UPDATE service_subtask_detail
        SET del_flag = 1
        WHERE del_flag = 0
        AND id IN
        <foreach collection="ids" item="id" open="(" separator="," close=")">
            #{id}
        </foreach>
    </update>
</mapper>
        </mapper>