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 &lt; 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 &lt; 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') &lt; 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') &lt; 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