TreeMapper.xml 2.56 KB
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.zteits.urbanops.module.garden.dal.mysql.tree.TreeMapper">

    <!--
        一般情况下,尽可能使用 Mapper 进行 CRUD 增删改查即可。
        无法满足的场景,例如说多表关联查询,才使用 XML 编写 SQL。
        代码生成器暂时只生成 Mapper XML 文件本身,更多推荐 MybatisX 快速开发插件来生成查询。
        文档可见:https://www.iocoder.cn/MyBatis/x-plugins/
     -->

    <resultMap id="CompanyDeptRoadMap" type="com.zteits.urbanops.module.garden.controller.admin.tree.vo.CompanyDeptRoadVO">
        <id property="companyId" column="companyId"/>
        <result property="companyName" column="companyName"/>
        <collection property="depts" ofType="com.zteits.urbanops.module.garden.controller.admin.tree.vo.CompanyDeptRoadVO$DeptVO">
            <id property="deptId" column="deptId"/>
            <result property="deptName" column="deptName"/>
            <collection property="roads" ofType="com.zteits.urbanops.module.garden.controller.admin.tree.vo.CompanyDeptRoadVO$RoadVO">
                <id property="roadId" column="roadId"/>
                <result property="roadName" column="roadName"/>
                <result property="treeCount" column="treeCount"/>
                <result property="recordedCount" column="recordedCount"/>
                <result property="startRemark" column="startRemark"/>
                <result property="endRemark" column="endRemark"/>
            </collection>
        </collection>
    </resultMap>

    <select id="selectCompanyDeptRoadTreeData" resultMap="CompanyDeptRoadMap">
        SELECT r.company_id AS companyId,
        d.id AS deptId,
        d.name AS deptName,
        r.id AS roadId,
        r.road_name AS roadName,
        r.starting_remark AS startRemark,
        r.end_remark AS endRemark,
        COALESCE(r.tree_area, 0) AS treeCount,
        COUNT(t.id) AS recordedCount
        FROM garden_road r
        LEFT JOIN garden_tree t ON t.road = r.id
        LEFT JOIN system_dept d ON r.dept_id = d.id AND d.status = 0
        WHERE r.company_id = #{belongCompanyId}
        and d.id is not null
        <if test="roadName != null and roadName != ''">
            AND r.road_name LIKE CONCAT('%', #{roadName}, '%')
        </if>
        GROUP BY r.company_id, d.id, d.name, r.id, r.road_name, r.starting_remark, r.end_remark, r.tree_area
        ORDER BY treeCount DESC, recordedCount DESC
    </select>
</mapper>