吉安感知网项目-后端
linwei
2026-04-02 9f09b885f077044eee13a5768baa185a27dc99a4
drone-service/drone-gd/src/main/java/org/sxkj/gd/orderdata/mapper/GdDataObjectionMapper.xml
@@ -30,39 +30,52 @@
    <select id="selectGdDataObjectionPage" resultMap="gdDataObjectionResultMap">
        select
            do.*,
            GROUP_CONCAT(da.attach_name SEPARATOR ',') as attach_names,
            bd.dept_name as create_dept_name
        obj.id,
        /* 建议显式列出 obj 的其他必要字段,或者确保 id 是主键 */
        obj.title,
        obj.objection_status,
        obj.create_dept,
        obj.apply_target_dept_id,
        obj.create_time,
        obj.is_deleted,
        /* 修改点1:修正 string_agg 语法,去掉 SEPARATOR */
        string_agg(da.attach_name::text, ',') as attach_names,
        bd.dept_name as create_dept_name
        from
            ja_gd_data_objection do
        ja_gd_data_objection obj
        left join
                ja_gd_data_objection_attachment da
                on do.id = da.objection_id::VARCHAR and da.is_deleted = 0
        ja_gd_data_objection_attachment da
        /* 修改点2:双向转型对齐 */
        on obj.id::text = da.objection_id::text
        and da.is_deleted = 0
        left join
                blade_dept bd on bd.id = do.create_dept::VARCHAR
        blade_dept bd on bd.id::text = obj.create_dept::text
        <where>
                do.is_deleted = 0
                and da.is_deleted = 0
            obj.is_deleted = 0
            /* 修改点3:da.is_deleted 已移至 ON 条件,此处删除以保证 LEFT JOIN 有效 */
            <if test="param2.title != null and param2.title != ''">
                and do.title like concat('%',#{param2.title},'%')
                and obj.title::text like concat('%',#{param2.title},'%')
            </if>
            <if test="param2.objectionStatus != null and param2.objectionStatus != ''">
                and do.objection_status = #{param2.objectionStatus}
                and obj.objection_status::text = #{param2.objectionStatus}::text
            </if>
            <if test="param2.deptList != null and param2.deptList.size > 0">
                and (
                do.create_dept in
                obj.create_dept::text in
                <foreach collection="param2.deptList" item="deptId" open="(" separator="," close=")">
                    #{deptId}
                    #{deptId}::text
                </foreach>
                or obj.apply_target_dept_id::text in
                <foreach collection="param2.deptList" item="deptId" open="(" separator="," close=")">
                    #{deptId}::text
                </foreach>
                )
                or do.apply_target_dept_id in
                <foreach collection="param2.deptList" item="deptId" open="(" separator="," close=")">
                    #{deptId}
                </foreach>
            </if>
        </where>
        group by do.id
        /* 修改点4:GROUP BY 必须包含 SELECT 中所有非聚合字段 */
        group by
        obj.id, obj.title, obj.objection_status, obj.create_dept,
        obj.apply_target_dept_id, obj.create_time, obj.is_deleted, bd.dept_name
    </select>
@@ -72,20 +85,20 @@
    <select id="getDetail" resultType="org.sxkj.gd.orderdata.vo.GdDataObjectionVO">
        select
            do.*,
            GROUP_CONCAT(da.attach_name SEPARATOR ',') as attach_names ,
            GROUP_CONCAT(da.attach_id SEPARATOR ',') as attach_ids
            obj.*,
        string_agg(da.attach_name SEPARATOR ',') as attach_names ,
        string_agg(da.attach_id SEPARATOR ',') as attach_ids
        from
            ja_gd_data_objection do
            ja_gd_data_objection obj
        left join
                ja_gd_data_objection_attachment da on do.id = da.objection_id::VARCHAR
                ja_gd_data_objection_attachment da on obj.id::VARCHAR = da.objection_id::VARCHAR
        <where>
                and da.is_deleted = 0
            <if test="id != null ">
                and do.id = #{id}
                and obj.id = #{id}
            </if>
        </where>
        group by do.id
        group by obj.id
    </select>
</mapper>