linwe
2024-08-09 8b7258c9427882bb1798f1502eaa35184c6e374e
src/main/java/org/springblade/modules/house/mapper/HouseRentalMapper.xml
@@ -25,25 +25,437 @@
    <resultMap id="houseRentalTenant" type="org.springblade.modules.house.vo.HouseRentalVO"
               autoMapping="true">
        <id property="id" column="id"/>
        <collection property="houseTenantVOList" javaType="java.util.List"
                    ofType="org.springblade.modules.house.vo.HouseTenantVO" autoMapping="true">
        <collection property="householdVOList" javaType="java.util.List"
                    ofType="org.springblade.modules.house.vo.HouseholdVO" autoMapping="true">
            <id property="id" column="tenantId"/>
        </collection>
    </resultMap>
    <select id="selectHouseRentalPage" resultMap="houseRentalResultMap">
        select * from jczz_house_rental where is_deleted = 0
    <sql id="selectHouseRental">
        select
            id,
            house_code,
            tenant_relationship,
            rental_time,
            due_time,
            termination_time,
            house_status,
            rental_use,
            audit_status,
            file_urls,
            create_user,
            create_time,
            update_user,
            update_time,
            remark,
            is_deleted
        from
            jczz_house_rental
    </sql>
    <sql id="filterData">
        <if test="isAdministrator==2">
            <choose>
                <when test="vo.roleName != null and vo.roleName != ''">
                    <if test="vo.roleName=='wgy'">
                        <choose>
                            <when test="gridCodeList !=null and gridCodeList.size()>0">
                                and jh.grid_code in
                                <foreach collection="gridCodeList" item="code" open="(" close=")" separator=",">
                                    #{code}
                                </foreach>
                            </when>
                            <otherwise>
                                and jh.grid_code in ('')
                            </otherwise>
                        </choose>
                    </if>
                    <if test="vo.roleName=='mj'">
                        <choose>
                            <when test="regionChildCodesList !=null and regionChildCodesList.size()>0">
                                and jpag.community_code in
                                <foreach collection="regionChildCodesList" item="code" open="(" close=")" separator=",">
                                    #{code}
                                </foreach>
                            </when>
                            <otherwise>
                                and jpag.community_code in ('')
                            </otherwise>
                        </choose>
                    </if>
                </when>
                <otherwise>
                    <choose>
                        <when test="regionChildCodesList !=null and regionChildCodesList.size()>0">
                            and
                            (
                            jg.grid_code in
                            <foreach collection="regionChildCodesList" item="code" open="(" close=")" separator=",">
                                #{code}
                            </foreach>
                            or
                            jpag.community_code in
                            <foreach collection="regionChildCodesList" item="code" open="(" close=")" separator=",">
                                #{code}
                            </foreach>
                            )
                        </when>
                        <otherwise>
                            and
                            (
                            jg.grid_code in ('') or jpag.community_code in ('')
                            )
                        </otherwise>
                    </choose>
                </otherwise>
            </choose>
        </if>
    </sql>
    <!--自定义列表查询-->
    <select id="selectHouseRentalPage" resultType="org.springblade.modules.house.vo.HouseRentalTenantVO">
        SELECT
        jhr.*,
        jh.address as houseName,
        br.town_name as townStreetName,
        br.name as neiName,
        <if test="vo.tenantInfoFlag != null and vo.tenantInfoFlag != 0">
            b.tenantName,
            b.phone,
        </if>
        concat(jh.district_name," ",jh.building," ",unit," ",room) as address,
        case when TIMESTAMPDIFF( MONTH, jhr.rental_time, jhr.due_time )&gt;= 8 then 1
        when TIMESTAMPDIFF( MONTH, jhr.rental_time, jhr.due_time )&lt;4 then 3
        else 2 end as dldType,
        if(jhr.termination_time is null,if(date_format(jhr.due_time,'%Y-%m-%d') >= date_format(now(),'%Y-%m-%d'),0,1),2)
        as status
        FROM jczz_house_rental jhr
        JOIN jczz_house jh ON jh.house_code = jhr.house_code and jh.is_deleted = 0
        LEFT JOIN jczz_grid jg on jg.grid_code = jh.grid_code and jg.is_deleted = 0
        left join blade_region br on br.code = jg.community_code
        LEFT JOIN jczz_police_affairs_grid jpag on jh.jw_grid_code= jpag.jw_grid_code and jpag.is_deleted = 0
        <if test="vo.tenantInfoFlag != null and vo.tenantInfoFlag != 0">
        LEFT JOIN (
            SELECT jht.housing_rental_id,jht.name as tenantName,jht.phone_number as phone
            FROM jczz_household jht RIGHT JOIN (
                SELECT MAX(ID) as id,housing_rental_id
                FROM jczz_household
                WHERE is_deleted = 0
                <if test="vo.tenantName != null and vo.tenantName != ''">
                    AND name LIKE CONCAT('%',#{vo.tenantName},'%')
                </if>
                and housing_rental_id is not null
                GROUP BY  housing_rental_id
            ) a ON a.id = jht.id and a.housing_rental_id is not null
        ) b ON b.housing_rental_id = jhr.id
        </if>
        WHERE jhr.is_deleted = 0
        <if test="vo.townStreetName!=null and vo.townStreetName!=''">
            and br.town_name like concat('%',#{vo.townStreetName},'%')
        </if>
        <if test="vo.neiName!=null and vo.neiName!=''">
            and br.name like concat('%',#{vo.neiName},'%')
        </if>
        <if test="vo.auditStatus != null and vo.auditStatus != ''">
            <if test="vo.auditStatus ==1">
                AND jhr.audit_status  = 1
            </if>
            <if test="vo.auditStatus ==2">
                AND jhr.audit_status  = 0
            </if>
            <if test="vo.auditStatus ==0">
                AND jhr.audit_status  = 0
            </if>
            <if test="vo.auditStatus ==10">
                AND date_format(jhr.due_time,'%Y-%m-%d')&gt;= date_format(now(),'%Y-%m-%d')
            </if>
            <if test="vo.auditStatus ==20">
                AND TIMESTAMPDIFF( day, now(), jhr.due_time )&lt;30
                AND TIMESTAMPDIFF( day, now(), jhr.due_time )&gt;= 0
            </if>
            <if test="vo.auditStatus ==30">
                AND date_format(jhr.due_time,'%Y-%m-%d')&lt; date_format(now(),'%Y-%m-%d')
            </if>
        </if>
        <if test="vo.tenantName != null and vo.tenantName != ''">
            AND b.tenantName LIKE CONCAT('%',#{vo.tenantName},'%')
        </if>
        <if test="vo.tenantRelationship != null">
            AND jhr.tenant_relationship = #{vo.tenantRelationship}
        </if>
        <if test="vo.houseStatus != null">
            AND jhr.house_status = #{vo.houseStatus}
        </if>
        <if test="vo.rentalUse != null">
            AND jhr.rental_use = #{vo.rentalUse}
        </if>
        <if test="vo.dldType != null">
            <if test="vo.dldType ==1 ">
                AND TIMESTAMPDIFF( MONTH, jhr.rental_time, jhr.due_time )&gt;= 8
            </if>
            <if test="vo.dldType ==2 ">
                AND  4 &lt;= TIMESTAMPDIFF( MONTH, jhr.rental_time, jhr.due_time )
                AND TIMESTAMPDIFF( MONTH, jhr.rental_time, jhr.due_time )&lt;=8
            </if>
            <if test="vo.dldType ==3 ">
                AND TIMESTAMPDIFF( MONTH, jhr.rental_time, jhr.due_time )&lt;4
            </if>
        </if>
        <if test="vo.startTime != null and vo.startTime != '' and vo.endTime != null and vo.endTime != '' ">
            AND jhr.create_time BETWEEN #{vo.startTime} and #{vo.endTime}
        </if>
        <if test="vo.communityCode != null and vo.communityCode != ''">
            AND jpag.community_code = #{vo.communityCode}
        </if>
        <include refid="filterData"/>
        order by jhr.update_time desc
    </select>
    <!--查询房屋出租情况-->
    <select id="getHouseRentalListByCode" resultMap="houseRentalTenant">
        select
            jhr.*,
            jht.id as tenantId,jht.*
        select jhr.*,
               if(termination_time is null,
                  if(date_format(jhr.due_time, '%Y-%m-%d') >= date_format(now(), '%Y-%m-%d'), 0, 1), 2) as status,
               jht.id                                                                                   as tenantId,
               jht.*
        from jczz_house_rental jhr
        left join jczz_house_tenant jht on jhr.id = jht.housing_rental_id
        where 1 = 1 and house_code = #{code}
                 left join jczz_household jht on jhr.id = jht.housing_rental_id and jht.is_deleted = 0
        where 1 = 1
          and jhr.is_deleted = 0
          and jhr.house_code = #{code}
        order by jhr.id desc
    </select>
    <sql id="filterHouseGrid">
        <if test="vo.roleName!=null and vo.roleName!=''">
            <if test="vo.roleName=='网格员'">
                <choose>
                    <when test="list != null and list.size()>0">
                        and jda.address_code in
                        <foreach collection="list" item="houseCode" separator ="," open="("  close=")">
                            #{houseCode}
                        </foreach>
                    </when>
                    <otherwise>
                        and jda.address_code in ('')
                    </otherwise>
                </choose>
            </if>
        </if>
    </sql>
    <select id="getStatistics" resultType="org.springblade.modules.house.vo.HouseRentalStatistics">
        SELECT
        'longTerm' as term,count(1) total,ifnull(sum(num),0) as personNum
        FROM jczz_house_rental jhr
        LEFT JOIN
        (
        select housing_rental_id,count(*) num from jczz_household
        where is_deleted = 0 and housing_rental_id is not null
        GROUP BY housing_rental_id
        ) jht
        ON jht.housing_rental_id = jhr.id
        JOIN jczz_house jh ON jh.house_code = jhr.house_code and jh.is_deleted = 0
        LEFT JOIN jczz_grid jg on jg.grid_code = jh.grid_code and jg.is_deleted = 0
        LEFT JOIN jczz_police_affairs_grid jpag on jh.jw_grid_code= jpag.jw_grid_code and jpag.is_deleted = 0
        WHERE jhr.is_deleted = 0
        AND TIMESTAMPDIFF( MONTH, jhr.rental_time, jhr.due_time )>= 8
        <if test="vo.auditStatus != null and vo.auditStatus != '' or vo.auditStatus == 0 ">
            AND jhr.audit_status = #{vo.auditStatus}
        </if>
        <include refid="filterData"/>
        UNION ALL
        SELECT 'middleTerm' AS term,count(1) total,ifnull(sum(num),0) as personNum
        FROM jczz_house_rental jhr
        LEFT JOIN
        (
        select housing_rental_id,count(*) num from jczz_household
        where is_deleted = 0 and housing_rental_id is not null
        GROUP BY housing_rental_id
        ) jht
        ON jht.housing_rental_id = jhr.id
        JOIN jczz_house jh ON jh.house_code = jhr.house_code and jh.is_deleted = 0
        LEFT JOIN jczz_grid jg on jg.grid_code = jh.grid_code and jg.is_deleted = 0
        LEFT JOIN jczz_police_affairs_grid jpag on jh.jw_grid_code= jpag.jw_grid_code and jpag.is_deleted = 0
        WHERE jhr.is_deleted = 0
        AND 4 &lt;= TIMESTAMPDIFF( MONTH, rental_time, due_time ) AND TIMESTAMPDIFF( MONTH, rental_time, due_time )&lt;=8
        <if test="vo.auditStatus != null and vo.auditStatus != '' or vo.auditStatus == 0 ">
            AND jhr.audit_status = #{vo.auditStatus}
        </if>
        <include refid="filterData"/>
        UNION ALL
        SELECT 'shortTerm' AS term,count(1) total,ifnull(sum(num),0) as personNum
        FROM jczz_house_rental jhr
        LEFT JOIN
        (
        select housing_rental_id,count(*) num from jczz_household
        where is_deleted = 0 and housing_rental_id is not null
        GROUP BY housing_rental_id
        ) jht
        ON jht.housing_rental_id = jhr.id
        JOIN jczz_house jh ON jh.house_code = jhr.house_code and jh.is_deleted = 0
        LEFT JOIN jczz_grid jg on jg.grid_code = jh.grid_code and jg.is_deleted = 0
        LEFT JOIN jczz_police_affairs_grid jpag on jh.jw_grid_code= jpag.jw_grid_code and jpag.is_deleted = 0
        WHERE jhr.is_deleted = 0
        AND TIMESTAMPDIFF( MONTH, rental_time, due_time )&lt;4
        <if test="vo.auditStatus != null and vo.auditStatus != '' or vo.auditStatus == 0 ">
            AND jhr.audit_status  = #{vo.auditStatus}
        </if>
        <include refid="filterData"/>
    </select>
    <!--导出租赁信息-->
    <select id="export" resultType="org.springblade.modules.house.excel.HouseRentalExcel">
        SELECT
        jhr.tenant_relationship,jhr.rental_time,jhr.due_time,jhr.house_status,
        jhr.rental_use,jhr.audit_status,jhr.remark,
        jda.address_name as houseName,b.tenantName,b.phone,
        concat(jh.district_name," ",jh.building," ",unit," ",room) as address,
        case when TIMESTAMPDIFF( MONTH, jhr.rental_time, jhr.due_time )>= 8 then 1
        when TIMESTAMPDIFF( MONTH, jhr.rental_time, jhr.due_time )&lt;4 then 3
        else 2 end as dldType
        FROM jczz_house_rental jhr
        JOIN jczz_doorplate_address jda ON jda.address_code = jhr.house_code
        JOIN jczz_house jh ON jh.house_code = jhr.house_code and jh.is_deleted = 0
        LEFT JOIN (
        SELECT jht.housing_rental_id,jht.name as tenantName,jht.phoneNumber phone
        FROM jczz_household jht RIGHT JOIN (
        SELECT MAX(ID) as id,housing_rental_id
        FROM jczz_household
        WHERE is_deleted = 0 and house_rental_id is not null
        <if test="vo.tenantName != null and vo.tenantName != ''">
            AND name LIKE CONCAT('%',#{vo.tenantName},'%')
        </if>
        GROUP BY  housing_rental_id
        ) a ON a.id = jht.id
        ) b ON b.housing_rental_id = jhr.id
        WHERE jhr.is_deleted = 0
        <if test="vo.auditStatus != null and vo.auditStatus != ''">
            <if test="vo.auditStatus ==1">
                AND jhr.audit_status  = 1
            </if>
            <if test="vo.auditStatus ==2">
                AND jhr.audit_status  = 0
            </if>
            <if test="vo.auditStatus ==10">
                AND date_format(jhr.due_time,'%Y-%m-%d')&gt;= date_format(now(),'%Y-%m-%d')
            </if>
            <if test="vo.auditStatus ==20">
                AND TIMESTAMPDIFF( day, now(), jhr.due_time )&lt;30
            </if>
            <if test="vo.auditStatus ==30">
                AND date_format(jhr.due_time,'%Y-%m-%d')&lt; date_format(now(),'%Y-%m-%d')
            </if>
        </if>
        <if test="vo.tenantName != null and vo.tenantName != ''">
            AND b.tenantName LIKE CONCAT('%',#{vo.tenantName},'%')
        </if>
        <if test="vo.tenantRelationship != null">
            AND jhr.tenant_relationship = #{vo.tenantRelationship}
        </if>
        <if test="vo.houseStatus != null">
            AND jhr.house_status = #{vo.houseStatus}
        </if>
        <if test="vo.rentalUse != null">
            AND jhr.rental_use = #{vo.rentalUse}
        </if>
        <if test="vo.dldType != null">
            <if test="vo.dldType ==1 ">
                AND TIMESTAMPDIFF( MONTH, jhr.rental_time, jhr.due_time )>= 8
            </if>
            <if test="vo.dldType ==2 ">
                AND  4 &lt;= TIMESTAMPDIFF( MONTH, jhr.rental_time, jhr.due_time )
                AND TIMESTAMPDIFF( MONTH, jhr.rental_time, jhr.due_time )&lt;=8
            </if>
            <if test="vo.dldType ==3 ">
                AND TIMESTAMPDIFF( MONTH, jhr.rental_time, jhr.due_time )&lt;4
            </if>
        </if>
        <include refid="filterHouseGrid"/>
    </select>
    <select id="getStatisticsCount" resultType="java.lang.Integer">
        SELECT
        count(1)
        FROM jczz_house_rental jhr
        JOIN jczz_house jh ON jh.house_code = jhr.house_code and jh.is_deleted = 0
        LEFT JOIN jczz_grid jg on jg.grid_code = jh.grid_code and jg.is_deleted = 0
        LEFT JOIN jczz_police_affairs_grid jpag on jh.jw_grid_code= jpag.jw_grid_code and jpag.is_deleted = 0
        LEFT JOIN (
        SELECT jht.housing_rental_id,jht.name as tenantName,jht.phone_number as phone
        FROM jczz_household jht RIGHT JOIN (
        SELECT MAX(ID) as id,housing_rental_id
        FROM jczz_household
        WHERE is_deleted = 0
        <if test="vo.tenantName != null and vo.tenantName != ''">
            AND name LIKE CONCAT('%',#{vo.tenantName},'%')
        </if>
        and housing_rental_id is not null
        GROUP BY  housing_rental_id
        ) a ON a.id = jht.id and a.housing_rental_id is not null
        ) b ON b.housing_rental_id = jhr.id
        WHERE jhr.is_deleted = 0
        <if test="vo.auditStatus != null">
            <if test="vo.auditStatus ==1">
                AND jhr.audit_status  = 1
            </if>
            <if test="vo.auditStatus ==2">
                AND jhr.audit_status  = 0
            </if>
            <if test="vo.auditStatus ==10">
                AND date_format(jhr.due_time,'%Y-%m-%d')&gt;= date_format(now(),'%Y-%m-%d')
            </if>
            <if test="vo.auditStatus ==20">
                AND TIMESTAMPDIFF( day, now(), jhr.due_time )&lt;30
                AND TIMESTAMPDIFF( day, now(), jhr.due_time )&gt;= 0
            </if>
            <if test="vo.auditStatus ==30">
                AND date_format(jhr.due_time,'%Y-%m-%d')&lt; date_format(now(),'%Y-%m-%d')
            </if>
        </if>
        <if test="vo.tenantName != null and vo.tenantName != ''">
            AND b.tenantName LIKE CONCAT('%',#{vo.tenantName},'%')
        </if>
        <if test="vo.tenantRelationship != null">
            AND jhr.tenant_relationship = #{vo.tenantRelationship}
        </if>
        <if test="vo.houseStatus != null">
            AND jhr.house_status = #{vo.houseStatus}
        </if>
        <if test="vo.rentalUse != null">
            AND jhr.rental_use = #{vo.rentalUse}
        </if>
        <if test="vo.dldType != null">
            <if test="vo.dldType ==1 ">
                AND TIMESTAMPDIFF( MONTH, jhr.rental_time, jhr.due_time )&gt;= 8
            </if>
            <if test="vo.dldType ==2 ">
                AND  4 &lt;= TIMESTAMPDIFF( MONTH, jhr.rental_time, jhr.due_time )
                AND TIMESTAMPDIFF( MONTH, jhr.rental_time, jhr.due_time )&lt;=8
            </if>
            <if test="vo.dldType ==3 ">
                AND TIMESTAMPDIFF( MONTH, jhr.rental_time, jhr.due_time )&lt;4
            </if>
        </if>
        <if test="vo.startTime != null and vo.startTime != '' and vo.endTime != null and vo.endTime != '' ">
            AND jhr.create_time BETWEEN #{vo.startTime} and #{vo.endTime}
        </if>
        <if test="vo.communityCode != null and vo.communityCode != ''">
            AND jpag.community_code = #{vo.communityCode}
        </if>
        <include refid="filterData"/>
    </select>