| | |
| | | <mapper namespace="reportFeeServiceDaoImpl"> |
| | | <select id="repostInFee" resultType="java.util.Map"> |
| | | SELECT |
| | | fee_type_cd AS 'fee_type_cd', |
| | | detail_year, |
| | | ROUND(SUM(CASE WHEN detail_year BETWEEN ${startYear} AND ${endYear} THEN receivable_amount ELSE 0 END), 2) AS '该年应缴总额', |
| | | f.fee_type_cd AS 'fee_type_cd', |
| | | f.detail_year, |
| | | ROUND(SUM(CASE WHEN f.detail_year BETWEEN ${startYear} AND ${endYear} THEN f.receivable_amount ELSE 0 END), 2) AS '该年应缴总额', |
| | | ROUND( |
| | | CASE |
| | | WHEN SUM(CASE WHEN detail_year BETWEEN ${startYear} AND ${endYear} THEN receivable_amount ELSE 0 END) = 0 THEN 0 |
| | | ELSE SUM(CASE WHEN detail_year BETWEEN ${startYear} AND ${endYear} THEN received_amount ELSE 0 END) |
| | | / SUM(CASE WHEN detail_year BETWEEN ${startYear} AND ${endYear} THEN receivable_amount ELSE 0 END) * 100 |
| | | WHEN SUM(CASE WHEN f.detail_year BETWEEN ${startYear} AND ${endYear} THEN f.receivable_amount ELSE 0 END) = 0 THEN 0 |
| | | ELSE SUM(CASE WHEN f.detail_year BETWEEN ${startYear} AND ${endYear} AND f.detail_id != -1 THEN d.received_amount ELSE 0 END) |
| | | / SUM(CASE WHEN f.detail_year BETWEEN ${startYear} AND ${endYear} THEN f.receivable_amount ELSE 0 END) * 100 |
| | | END, 2 |
| | | ) AS '当年收缴率', |
| | | |
| | | ROUND(SUM(CASE WHEN detail_year BETWEEN ${startYear} AND ${endYear} THEN discount_amount ELSE 0 END), 2) AS '折扣金额', |
| | | ROUND(SUM(CASE |
| | | WHEN f.detail_year BETWEEN ${startYear} AND ${endYear} AND f.detail_id != -1 THEN d.discount_amount |
| | | ELSE 0 |
| | | END), 2) AS '折扣金额', |
| | | |
| | | <foreach collection="yearList" item="year" separator=","> |
| | | <if test="year != endYear"> <!-- 排除最后一年,最后一年单独处理为“当年实缴” --> |
| | | ROUND(SUM(CASE WHEN detail_year = ${year} THEN received_amount ELSE 0 END), 2) AS '${year}年实缴' |
| | | ROUND(SUM(CASE |
| | | WHEN YEAR(d.create_time) = ${year} AND f.detail_id != -1 THEN d.received_amount |
| | | ELSE 0 |
| | | END), 2) AS '${year}年实缴' |
| | | </if> |
| | | </foreach>, |
| | | |
| | | ROUND(SUM(CASE WHEN detail_year = ${endYear} THEN receivable_amount ELSE 0 END), 2) AS '当年预算', |
| | | ROUND(SUM(CASE WHEN detail_year = ${endYear} THEN received_amount ELSE 0 END), 2) AS '${endYear}年实缴', |
| | | ROUND(SUM(CASE WHEN detail_year = ${endYear} THEN discount_amount ELSE 0 END), 2) AS '当年折扣总额', |
| | | ROUND(SUM(CASE WHEN detail_year = ${endYear} THEN receivable_amount - received_amount ELSE 0 END), 2) AS '当年欠款', |
| | | ROUND(SUM(CASE WHEN f.detail_year = ${endYear} THEN f.receivable_amount ELSE 0 END), 2) AS '当年预算', |
| | | ROUND(SUM(CASE WHEN YEAR(d.create_time) = ${endYear} AND f.detail_id != -1 THEN d.received_amount ELSE 0 END), 2) AS '${endYear}年实缴', |
| | | ROUND(SUM(CASE WHEN YEAR(d.create_time) = ${endYear} AND f.detail_id != -1 THEN d.discount_amount ELSE 0 END), 2) AS '当年折扣总额', |
| | | ROUND(SUM(CASE WHEN YEAR(d.create_time) = ${endYear} AND f.detail_id != -1 THEN d.receivable_amount ELSE 0 END), 2) AS '当年欠款', |
| | | |
| | | <foreach collection="monthList" item="month" separator=","> |
| | | ROUND(SUM(CASE WHEN detail_year = ${endYear} AND detail_month = ${month} THEN received_amount ELSE 0 END), 2) AS '当年${month}月实缴' |
| | | ROUND(SUM(CASE |
| | | WHEN YEAR(d.create_time) = 2027 AND MONTH(d.create_time) = 1 AND f.detail_id != -1 THEN d.received_amount |
| | | ELSE 0 END), 2) AS '当年${month}月实缴' |
| | | </foreach>, |
| | | |
| | | ROUND(AVG(CASE WHEN detail_year BETWEEN ${startYear} AND ${endYear} THEN receivable_amount ELSE NULL END), 2) AS '每月费用', |
| | | COUNT(DISTINCT CASE WHEN detail_year BETWEEN ${startYear} AND ${endYear} THEN CONCAT(detail_year, '-', detail_month) END) AS '应收月份数', |
| | | ROUND(AVG(CASE WHEN f.detail_year BETWEEN ${startYear} AND ${endYear} THEN f.receivable_amount ELSE NULL END), 2) AS '每月费用', |
| | | COUNT(DISTINCT CASE WHEN f.detail_year BETWEEN ${startYear} AND ${endYear} THEN CONCAT(f.detail_year, '-', f.detail_month) END) AS '应收月份数', |
| | | |
| | | CASE |
| | | WHEN detail_year IS NULL THEN '类型总计' |
| | | ELSE CAST(detail_year AS CHAR) |
| | | WHEN f.detail_year IS NULL THEN '类型总计' |
| | | ELSE CAST(f.detail_year AS CHAR) |
| | | END AS '费用所属年份' |
| | | |
| | | FROM |
| | | pay_fee_detail_month |
| | | pay_fee_detail_month f |
| | | LEFT JOIN pay_fee_detail d on d.detail_id = f.detail_id |
| | | WHERE |
| | | community_id = #{communityId} |
| | | AND detail_year BETWEEN ${startYear} AND ${endYear} <!-- 动态年份过滤 --> |
| | | f.community_id = #{communityId} |
| | | AND f.detail_year BETWEEN ${startYear} AND ${endYear} <!-- 动态年份过滤 --> |
| | | GROUP BY |
| | | fee_type_cd, detail_year |
| | | f.fee_type_cd, f.detail_year |
| | | WITH ROLLUP; |
| | | </select> |
| | | |
| | | <select id="countRepostPaidInFeeByWhiteOrder" parameterType="Map" resultType="Map"> |
| | | WITH RECURSIVE year_ranges AS ( |
| | | -- 基础查询:与原SQL一致,生成初始数据和递归所需字段 |
| | | SELECT |
| | | ROW_NUMBER() OVER () AS row1, |
| | | bc.`name` AS row2, |
| | | ROW_NUMBER() OVER () AS row3, |
| | | pfd.create_time AS row4, |
| | | pw.invoice_receipt_no AS row5, |
| | | br.property_address AS row6, |
| | | br.door_room_num AS row7, |
| | | CONCAT(pfd.start_time, ' 至 ', pfd.end_time) AS row8, |
| | | YEAR(pfd.start_time) AS row9, |
| | | YEAR(pfd.end_time) AS row10, |
| | | pfc.fee_name AS row11, |
| | | pfd.received_amount AS row12, |
| | | pfd.cashier_name AS row13, |
| | | pw.bank_deposit_date AS row14, |
| | | pw.bank_depositor AS row15, |
| | | pw.bank_deposit_amount AS row16, |
| | | pw.split_bank_deposit_amount AS row17, |
| | | pw.check_amount AS row18, |
| | | pw.white_list_archive_no AS row19, |
| | | pw.sheet_count AS row20, |
| | | pw.financial_receiver AS row21, |
| | | pw.input_time AS row22, |
| | | pw.input_person AS row23, |
| | | pw.input_time AS row24, |
| | | YEAR(pw.input_time) AS row25, |
| | | pw.license_plate AS row26, |
| | | pw.category_22 AS row27, |
| | | YEAR(pfd.start_time) AS current_year, -- 递归起始年份 |
| | | YEAR(pfd.end_time) AS end_year, -- 递归终止年份 |
| | | pfd.start_time AS original_start, |
| | | pfd.end_time AS original_end |
| | | FROM pay_fee_detail pfd |
| | | LEFT JOIN s_community bc ON bc.community_id = pfd.community_id |
| | | LEFT JOIN pay_fee pf ON pf.fee_id = pfd.fee_id |
| | | LEFT JOIN building_room br ON br.room_id = pf.payer_obj_id |
| | | LEFT JOIN pay_fee_config pfc ON pf.config_id = pfc.config_id |
| | | LEFT JOIN property_white_list_flow pw |
| | | ON pfd.create_time = pw.input_time |
| | | AND pfd.start_time = pw.charge_start |
| | | AND pfd.cashier_name = pw.charger |
| | | WHERE pfd.state = 1400 |
| | | <if test="communityId != null"> |
| | | AND pfd.community_id = #{communityId} -- 保留原社区筛选条件 |
| | | </if> |
| | | |
| | | UNION ALL |
| | | |
| | | -- 递归查询:与原SQL一致,递增年份生成中间记录 |
| | | SELECT |
| | | row1, |
| | | row2, |
| | | row3, |
| | | row4, |
| | | row5, |
| | | row6, |
| | | row7, |
| | | row8, |
| | | row9, |
| | | row10, |
| | | row11, |
| | | row12, |
| | | row13, |
| | | row14, |
| | | row15, |
| | | row16, |
| | | row17, |
| | | row18, |
| | | row19, |
| | | row20, |
| | | row21, |
| | | row22, |
| | | row23, |
| | | row24, |
| | | row25, |
| | | row26, |
| | | row27, |
| | | current_year + 1 AS current_year, |
| | | end_year, |
| | | original_start, |
| | | original_end |
| | | FROM year_ranges |
| | | WHERE current_year + 1 <= end_year -- 递归终止条件:年份未超过结束年 |
| | | ) |
| | | |
| | | -- 核心:统计递归结果集的总条数 |
| | | SELECT COUNT(*) AS count |
| | | FROM year_ranges; |
| | | </select> |
| | | |
| | | <select id="repostPaidInFeeByWhiteOrder" resultType="java.util.Map"> |
| | | WITH RECURSIVE year_ranges AS ( |
| | | -- 基础查询:获取所有需要的字段并计算起始年份和结束年份 |