chengf
2025-08-18 c7ea3633e49e501c33f668fc08fab2ffc0e3c38c
java110-db/src/main/resources/mapper/fee/ReportFeeServiceDaoImplMapper.xml
@@ -4,23 +4,78 @@
<mapper namespace="reportFeeServiceDaoImpl">
    <select id="repostInFee" resultType="java.util.Map">
        SELECT
        pfd.community_id as communityId,
        td.name AS feeTypeName,
        pf.fee_type_cd AS feeTypeCode,
        <foreach collection="yearList" item="year" separator=",">
            SUM(
            CASE
            WHEN pfd.start_time &lt; #{year}+1 AND pfd.end_time &gt;= #{year}
            THEN pfd.received_amount *
            DATEDIFF(
            LEAST(pfd.end_time, #{year}-12-31),
            GREATEST(pfd.start_time, #{year}-01-01)
            ) / DATEDIFF(pfd.end_time, pfd.start_time)
            ELSE 0
            END
            ) AS 'amount${year}'
        </foreach>
        SUM(pfd.received_amount) AS totalAmount
        pfd.community_id,
        td.name AS '费用类型名称',
        YEAR(pfd.create_time),
        pf.fee_type_cd AS '费用类型编码',
        -- 计算各年份的收费金额(按天数比例分配)
        SUM(
        CASE
        WHEN pfd.start_time &lt; '2021-01-01' AND pfd.end_time >= '2020-01-01'
        THEN pfd.received_amount *
        DATEDIFF(
        LEAST(pfd.end_time, '2020-12-31'),
        GREATEST(pfd.start_time, '2020-01-01')
        ) / DATEDIFF(pfd.end_time, pfd.start_time)
        ELSE 0
        END
        ) AS '2020年收费金额(元)',
        SUM(
        CASE
        WHEN pfd.start_time &lt; '2022-01-01' AND pfd.end_time >= '2021-01-01'
        THEN pfd.received_amount *
        DATEDIFF(
        LEAST(pfd.end_time, '2021-12-31'),
        GREATEST(pfd.start_time, '2021-01-01')
        ) / DATEDIFF(pfd.end_time, pfd.start_time)
        ELSE 0
        END
        ) AS '2021年收费金额(元)',
        SUM(
        CASE
        WHEN pfd.start_time &lt; '2023-01-01' AND pfd.end_time >= '2022-01-01'
        THEN pfd.received_amount *
        DATEDIFF(
        LEAST(pfd.end_time, '2022-12-31'),
        GREATEST(pfd.start_time, '2022-01-01')
        ) / DATEDIFF(pfd.end_time, pfd.start_time)
        ELSE 0
        END
        ) AS '2022年收费金额(元)',
        SUM(
        CASE
        WHEN pfd.start_time &lt; '2024-01-01' AND pfd.end_time >= '2023-01-01'
        THEN pfd.received_amount *
        DATEDIFF(
        LEAST(pfd.end_time, '2023-12-31'),
        GREATEST(pfd.start_time, '2023-01-01')
        ) / DATEDIFF(pfd.end_time, pfd.start_time)
        ELSE 0
        END
        ) AS '2023年收费金额(元)',
        SUM(
        CASE
        WHEN pfd.start_time &lt; '2025-01-01' AND pfd.end_time >= '2024-01-01'
        THEN pfd.received_amount *
        DATEDIFF(
        LEAST(pfd.end_time, '2024-12-31'),
        GREATEST(pfd.start_time, '2024-01-01')
        ) / DATEDIFF(pfd.end_time, pfd.start_time)
        ELSE 0
        END
        ) AS '2024年收费金额(元)',
        SUM(
        CASE
        WHEN pfd.start_time &lt; '2026-01-01' AND pfd.end_time >= '2025-01-01'
        THEN pfd.received_amount *
        DATEDIFF(
        LEAST(pfd.end_time, '2025-12-31'),
        GREATEST(pfd.start_time, '2025-01-01')
        ) / DATEDIFF(pfd.end_time, pfd.start_time)
        ELSE 0
        END
        ) AS '2025年收费金额(元)',
        SUM(pfd.received_amount) AS '总收费金额(元)'
        FROM
        pay_fee_detail pfd
        LEFT JOIN pay_fee pf ON pf.fee_id = pfd.fee_id
@@ -29,15 +84,10 @@
        AND td.status_cd = pf.fee_type_cd
        WHERE
        pfd.status_cd = '0' AND
        pfd.community_id = #{params.communityId}
        AND (
        <foreach collection="yearList" item="year" separator="OR">
            (pfd.start_time &lt; #{year}+1 AND pfd.end_time &gt;= #{year})
        </foreach>
        )
        pfd.community_id = '2025081537770016'
        GROUP BY
        td.name, pf.fee_type_cd, pfd.community_id
        td.name, pf.fee_type_cd, pfd.community_id,YEAR(pfd.create_time)
        ORDER BY
        td.name
        td.name;
    </select>
</mapper>