From bf3924206b359d77e928255328f8625cb986bd72 Mon Sep 17 00:00:00 2001
From: chengf <cgf12138@163.com>
Date: 星期一, 25 八月 2025 20:46:02 +0800
Subject: [PATCH] 修复费用初始化0825
---
java110-db/src/main/resources/mapper/fee/ReportFeeServiceDaoImplMapper.xml | 207 +++++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 205 insertions(+), 2 deletions(-)
diff --git a/java110-db/src/main/resources/mapper/fee/ReportFeeServiceDaoImplMapper.xml b/java110-db/src/main/resources/mapper/fee/ReportFeeServiceDaoImplMapper.xml
index f35f748..737ffb7 100644
--- a/java110-db/src/main/resources/mapper/fee/ReportFeeServiceDaoImplMapper.xml
+++ b/java110-db/src/main/resources/mapper/fee/ReportFeeServiceDaoImplMapper.xml
@@ -175,8 +175,8 @@
row24 as row23,
row25 as row24,
row26 as row25,
- null as row26;
- null as row27;
+ null as row26,
+ null as row27,
row27 as row28,
null as row29,
null as row30
@@ -258,4 +258,207 @@
LIMIT #{pageNum}, #{pageSize}
</if>
</select>
+
+ <select id="sss">
+ WITH year_series AS (
+ -- 鐢熸垚2016-2025骞村簭鍒楋紙鐙珛CTE渚夸簬澶嶇敤锛�
+ SELECT 2016 + n AS year
+ FROM (
+ SELECT 0 AS n UNION SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4
+ UNION SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9
+ ) AS nums
+ ),
+ all_data AS (
+ SELECT
+ pf.fee_id AS 璐圭敤缂栧彿,
+ pfc.fee_name AS 璐圭敤鍚嶇О,
+ ys.year AS 骞翠唤,
+ -- 璁$畻褰撳勾鏈夋晥鏃堕棿鑼冨洿锛�1鏈�1鏃ヨ嚦12鏈�31鏃ワ級
+ STR_TO_DATE(CONCAT(ys.year, '-01-01'), '%Y-%m-%d') AS 褰撳勾璧峰鏃�,
+ STR_TO_DATE(CONCAT(ys.year, '-12-31'), '%Y-%m-%d') AS 褰撳勾鎴鏃�,
+ -- 宸叉敹鍖洪棿锛堜弗鏍奸檺瀹氬湪褰撳勾鑼冨洿鍐咃級
+ CASE
+ -- 璐圭敤璧峰鏃堕棿鏅氫簬褰撳勾骞村簳锛氭棤宸叉敹
+ WHEN pf.start_time > STR_TO_DATE(CONCAT(ys.year, '-12-31'), '%Y-%m-%d') THEN NULL
+ -- 璐圭敤鎴鏃堕棿鏃╀簬褰撳勾骞村垵锛氭棤宸叉敹
+ WHEN pf.end_time < STR_TO_DATE(CONCAT(ys.year, '-01-01'), '%Y-%m-%d') THEN NULL
+ -- 姝e父鎯呭喌锛氬彇閲嶅彔鍖洪棿
+ ELSE GREATEST(pf.start_time, STR_TO_DATE(CONCAT(ys.year, '-01-01'), '%Y-%m-%d'))
+ END AS 褰撳勾宸叉敹璧峰鏃�,
+ CASE
+ WHEN pf.start_time > STR_TO_DATE(CONCAT(ys.year, '-12-31'), '%Y-%m-%d') THEN NULL
+ WHEN pf.end_time < STR_TO_DATE(CONCAT(ys.year, '-01-01'), '%Y-%m-%d') THEN NULL
+ ELSE LEAST(pf.end_time, STR_TO_DATE(CONCAT(ys.year, '-12-31'), '%Y-%m-%d'))
+ END AS 褰撳勾宸叉敹鎴鏃�,
+ -- 鏈敹鍖洪棿锛堜弗鏍奸檺瀹氬湪褰撳勾鑼冨洿鍐咃級
+ CASE
+ -- 搴旂即鎴鏃堕棿鏃╀簬褰撳勾骞村垵锛氭棤鏈敹
+ WHEN STR_TO_DATE(pfa.`value`, '%Y-%m-%d') < STR_TO_DATE(CONCAT(ys.year, '-01-01'), '%Y-%m-%d') THEN NULL
+ -- 璐圭敤鎴鏃堕棿鏅氫簬褰撳勾骞村簳锛氭棤鏈敹
+ WHEN pf.end_time > STR_TO_DATE(CONCAT(ys.year, '-12-31'), '%Y-%m-%d') THEN NULL
+ -- 姝e父鎯呭喌锛氬彇閲嶅彔鍖洪棿
+ ELSE GREATEST(pf.end_time, STR_TO_DATE(CONCAT(ys.year, '-01-01'), '%Y-%m-%d'))
+ END AS 褰撳勾鏈敹璧峰鏃�,
+ CASE
+ WHEN STR_TO_DATE(pfa.`value`, '%Y-%m-%d') < STR_TO_DATE(CONCAT(ys.year, '-01-01'), '%Y-%m-%d') THEN NULL
+ WHEN pf.end_time > STR_TO_DATE(CONCAT(ys.year, '-12-31'), '%Y-%m-%d') THEN NULL
+ ELSE LEAST(STR_TO_DATE(pfa.`value`, '%Y-%m-%d'), STR_TO_DATE(CONCAT(ys.year, '-12-31'), '%Y-%m-%d'))
+ END AS 褰撳勾鏈敹鎴鏃�,
+ -- 宸叉敹鏈堟暟锛堜粎缁熻褰撳勾鐨勬湁鏁堟槑缁嗭級
+ COALESCE(COUNT(DISTINCT CASE
+ WHEN pfdm.detail_year = ys.year AND pfdm.status_cd = '0'
+ THEN CONCAT(pfdm.detail_year, '-', LPAD(pfdm.detail_month, 2, '0'))
+ END), 0) AS 褰撳勾宸叉敹鏈堟暟,
+ -- 搴旀敹鏈堟暟锛堝綋骞村唴鐨勭悊璁哄簲鏀舵湀鏁帮級
+ CASE
+ WHEN GREATEST(pf.start_time, STR_TO_DATE(CONCAT(ys.year, '-01-01'), '%Y-%m-%d')) >
+ LEAST(STR_TO_DATE(pfa.`value`, '%Y-%m-%d'), STR_TO_DATE(CONCAT(ys.year, '-12-31'), '%Y-%m-%d'))
+ THEN 0
+ ELSE TIMESTAMPDIFF(
+ MONTH,
+ GREATEST(pf.start_time, STR_TO_DATE(CONCAT(ys.year, '-01-01'), '%Y-%m-%d')),
+ LEAST(STR_TO_DATE(pfa.`value`, '%Y-%m-%d'), STR_TO_DATE(CONCAT(ys.year, '-12-31'), '%Y-%m-%d'))
+ ) + 1
+ END AS 褰撳勾搴旀敹鏈堟暟,
+ -- 璁$畻姣忔湀璐圭敤锛堝崟浠访楅潰绉級
+ pfc.square_price * br.built_up_area AS 姣忔湀璐圭敤,
+ -- 鎶樻墸閲戦锛堜粎缁熻褰撳勾鐨勬湁鏁堟姌鎵o級
+ COALESCE(SUM(CASE WHEN pfdm.detail_year = ys.year THEN pfdm.discount_amount ELSE 0 END), 0) AS 褰撳勾鎶樻墸閲戦
+ FROM pay_fee pf
+ INNER JOIN pay_fee_config pfc
+ ON pf.config_id = pfc.config_id
+ AND pfc.square_price > 0 -- 纭繚鏈夋湁鏁堝崟浠�
+ INNER JOIN building_room br
+ ON pf.payer_obj_id = br.room_id
+ INNER JOIN pay_fee_attrs pfa
+ ON pf.fee_id = pfa.fee_id
+ AND pfa.spec_cd = '390010' -- 搴旂即鎴鏃ユ湡灞炴��
+ INNER JOIN year_series ys ON 1=1 -- 鍏宠仈骞翠唤搴忓垪
+ LEFT JOIN pay_fee_detail_month pfdm
+ ON pf.fee_id = pfdm.fee_id
+ AND pfdm.obj_id = pf.payer_obj_id
+ AND pfdm.status_cd = '0' -- 鏈夋晥鏄庣粏
+ WHERE pf.payer_obj_id = '752025071562520009'
+ AND pf.fee_type_cd IN ('630000001', '630000002')
+ AND pf.status_cd = '0' -- 鏈夋晥璐圭敤
+ GROUP BY
+ pf.fee_id, pfc.fee_name, ys.year,
+ pf.start_time, pf.end_time, pfa.`value`,
+ pfc.square_price, br.built_up_area
+ ),
+ calculated_data AS (
+ -- 璁$畻閲戦瀛楁锛堝熀浜庡凡鏀�/搴旀敹鏈堟暟锛�
+ SELECT
+ 璐圭敤缂栧彿,
+ 璐圭敤鍚嶇О,
+ 骞翠唤,
+ 褰撳勾宸叉敹璧峰鏃�,
+ 褰撳勾宸叉敹鎴鏃�,
+ 褰撳勾鏈敹璧峰鏃�,
+ 褰撳勾鏈敹鎴鏃�,
+ 褰撳勾宸叉敹鏈堟暟,
+ 褰撳勾搴旀敹鏈堟暟,
+ 姣忔湀璐圭敤,
+ 褰撳勾鎶樻墸閲戦,
+ -- 搴旀敹閲戦=搴旀敹鏈堟暟脳姣忔湀璐圭敤
+ 褰撳勾搴旀敹鏈堟暟 * 姣忔湀璐圭敤 AS 褰撳勾搴旀敹閲戦,
+ -- 瀹炴敹閲戦=宸叉敹鏈堟暟脳姣忔湀璐圭敤-鎶樻墸閲戦
+ (褰撳勾宸叉敹鏈堟暟 * 姣忔湀璐圭敤) - 褰撳勾鎶樻墸閲戦 AS 褰撳勾瀹炴敹閲戦
+ FROM all_data
+ ),
+ grouped_data AS (
+ -- 鍚勫勾浠芥暟鎹�
+ SELECT
+ 璐圭敤缂栧彿,
+ 璐圭敤鍚嶇О,
+ CONCAT(骞翠唤, '骞�') AS 缁熻缁村害,
+ 骞翠唤 AS 鎺掑簭杈呭姪,
+ 褰撳勾宸叉敹鏈堟暟 AS 宸叉敹鏈堟暟,
+ -- 宸叉敹鍖洪棿锛堜粎鏄剧ず鏈夋晥鍖洪棿锛�
+ CASE
+ WHEN 褰撳勾宸叉敹璧峰鏃� IS NOT NULL AND 褰撳勾宸叉敹鎴鏃� IS NOT NULL
+ THEN CONCAT(DATE_FORMAT(褰撳勾宸叉敹璧峰鏃�, '%Y-%m-%d'), ' ~ ', DATE_FORMAT(褰撳勾宸叉敹鎴鏃�, '%Y-%m-%d'))
+ ELSE NULL
+ END AS 宸叉敹鍖洪棿,
+ -- 鏈敹鍖洪棿锛堜粎鏄剧ず鏈夋晥鍖洪棿锛�
+ CASE
+ WHEN 褰撳勾鏈敹璧峰鏃� IS NOT NULL AND 褰撳勾鏈敹鎴鏃� IS NOT NULL
+ THEN CONCAT(DATE_FORMAT(褰撳勾鏈敹璧峰鏃�, '%Y-%m-%d'), ' ~ ', DATE_FORMAT(褰撳勾鏈敹鎴鏃�, '%Y-%m-%d'))
+ ELSE NULL
+ END AS 鏈敹鍖洪棿,
+ 褰撳勾搴旀敹閲戦 AS 搴旀敹閲戦,
+ 褰撳勾瀹炴敹閲戦 AS 瀹炴敹閲戦,
+ 褰撳勾鎶樻墸閲戦 AS 鎶樻墸閲戦
+ FROM calculated_data
+ WHERE 骞翠唤 BETWEEN 2016 AND 2025
+
+ UNION ALL
+
+ -- 2020骞村崟鐙粺璁�
+ SELECT
+ 璐圭敤缂栧彿,
+ 璐圭敤鍚嶇О,
+ '2020骞�' AS 缁熻缁村害,
+ 2020 AS 鎺掑簭杈呭姪,
+ SUM(褰撳勾宸叉敹鏈堟暟) AS 宸叉敹鏈堟暟,
+ CASE
+ WHEN MIN(褰撳勾宸叉敹璧峰鏃�) IS NOT NULL AND MAX(褰撳勾宸叉敹鎴鏃�) IS NOT NULL
+ THEN CONCAT(DATE_FORMAT(MIN(褰撳勾宸叉敹璧峰鏃�), '%Y-%m-%d'), ' ~ ', DATE_FORMAT(MAX(褰撳勾宸叉敹鎴鏃�), '%Y-%m-%d'))
+ ELSE NULL
+ END AS 宸叉敹鍖洪棿,
+ CASE
+ WHEN MIN(褰撳勾鏈敹璧峰鏃�) IS NOT NULL AND MAX(褰撳勾鏈敹鎴鏃�) IS NOT NULL
+ THEN CONCAT(DATE_FORMAT(MIN(褰撳勾鏈敹璧峰鏃�), '%Y-%m-%d'), ' ~ ', DATE_FORMAT(MAX(褰撳勾鏈敹鎴鏃�), '%Y-%m-%d'))
+ ELSE NULL
+ END AS 鏈敹鍖洪棿,
+ SUM(褰撳勾搴旀敹閲戦) AS 搴旀敹閲戦,
+ SUM(褰撳勾瀹炴敹閲戦) AS 瀹炴敹閲戦,
+ SUM(褰撳勾鎶樻墸閲戦) AS 鎶樻墸閲戦
+ FROM calculated_data
+ WHERE 骞翠唤 = 2020
+ GROUP BY 璐圭敤缂栧彿, 璐圭敤鍚嶇О, 缁熻缁村害, 鎺掑簭杈呭姪
+
+ UNION ALL
+
+ -- 2016-2025骞村悎璁�
+ SELECT
+ 璐圭敤缂栧彿,
+ 璐圭敤鍚嶇О,
+ '2016-2025骞村悎璁�' AS 缁熻缁村害,
+ 9999 AS 鎺掑簭杈呭姪,
+ SUM(褰撳勾宸叉敹鏈堟暟) AS 宸叉敹鏈堟暟,
+ CASE
+ WHEN MIN(褰撳勾宸叉敹璧峰鏃�) IS NOT NULL AND MAX(褰撳勾宸叉敹鎴鏃�) IS NOT NULL
+ THEN CONCAT(DATE_FORMAT(MIN(褰撳勾宸叉敹璧峰鏃�), '%Y-%m-%d'), ' ~ ', DATE_FORMAT(MAX(褰撳勾宸叉敹鎴鏃�), '%Y-%m-%d'))
+ ELSE NULL
+ END AS 宸叉敹鍖洪棿,
+ CASE
+ WHEN MIN(褰撳勾鏈敹璧峰鏃�) IS NOT NULL AND MAX(褰撳勾鏈敹鎴鏃�) IS NOT NULL
+ THEN CONCAT(DATE_FORMAT(MIN(褰撳勾鏈敹璧峰鏃�), '%Y-%m-%d'), ' ~ ', DATE_FORMAT(MAX(褰撳勾鏈敹鎴鏃�), '%Y-%m-%d'))
+ ELSE NULL
+ END AS 鏈敹鍖洪棿,
+ SUM(褰撳勾搴旀敹閲戦) AS 搴旀敹閲戦,
+ SUM(褰撳勾瀹炴敹閲戦) AS 瀹炴敹閲戦,
+ SUM(褰撳勾鎶樻墸閲戦) AS 鎶樻墸閲戦
+ FROM calculated_data
+ WHERE 骞翠唤 BETWEEN 2016 AND 2025
+ GROUP BY 璐圭敤缂栧彿, 璐圭敤鍚嶇О, 缁熻缁村害, 鎺掑簭杈呭姪
+ )
+-- 鏈�缁堢粨鏋滆緭鍑�
+ SELECT
+ 璐圭敤缂栧彿,
+ 璐圭敤鍚嶇О,
+ 缁熻缁村害,
+ 宸叉敹鏈堟暟,
+ 宸叉敹鍖洪棿,
+ 鏈敹鍖洪棿,
+ 搴旀敹閲戦,
+ 瀹炴敹閲戦,
+ 鎶樻墸閲戦
+ FROM grouped_data where 搴旀敹閲戦 != 0
+ ORDER BY
+ 璐圭敤缂栧彿,
+ 鎺掑簭杈呭姪;
+
+ </select>
</mapper>
\ No newline at end of file
--
Gitblit v1.8.0