From ff225eded880cea74563368c8c18483efc85ab28 Mon Sep 17 00:00:00 2001
From: shiyunteng <shiyunteng@example.com>
Date: 星期五, 22 五月 2026 17:29:36 +0800
Subject: [PATCH] feat:统计相关接口

---
 platformx-business-finance-biz/src/main/resources/mapper/ContractMapper.xml |  711 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 711 insertions(+), 0 deletions(-)

diff --git a/platformx-business-finance-biz/src/main/resources/mapper/ContractMapper.xml b/platformx-business-finance-biz/src/main/resources/mapper/ContractMapper.xml
index 4409166..5d870b5 100644
--- a/platformx-business-finance-biz/src/main/resources/mapper/ContractMapper.xml
+++ b/platformx-business-finance-biz/src/main/resources/mapper/ContractMapper.xml
@@ -4,6 +4,9 @@
 
 <mapper namespace="com.by4cloud.platformx.business.mapper.ContractMapper">
 
+	<update id="setSession">
+		SET SESSION sql_mode = 'STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION';
+	</update>
     <select id="pageByCredit" resultType="com.by4cloud.platformx.business.vo.ContractCreditSalesPageVo">
 		SELECT
 		id,
@@ -100,4 +103,712 @@
 			</otherwise>
 		</choose>
 	</select>
+    <select id="contractAmountAnalysis"
+            resultType="com.by4cloud.platformx.business.vo.ContractAmountAnalysisVo">
+		SELECT
+			party_b_name AS 'compName',
+				SUM(m01) AS 'month1',
+				SUM(m02) AS 'month2',
+				SUM(m03) AS 'month3',
+				SUM(m04) AS 'month4',
+				SUM(m05) AS 'month5',
+				SUM(m06) AS 'month6',
+				SUM(m07) AS 'month7',
+				SUM(m08) AS 'month8',
+				SUM(m09) AS 'month9',
+				SUM(m10) AS 'month10',
+				SUM(m11) AS 'month11',
+				SUM(m12) AS 'month12'
+		FROM (
+				 SELECT
+					 COALESCE(party_b, '鏈煡鐢叉柟') AS party_b_name,
+					 SUM(CASE WHEN MONTH(sign_date) = 1 THEN amount ELSE 0 END) AS m01,
+					 SUM(CASE WHEN MONTH(sign_date) = 2 THEN amount ELSE 0 END) AS m02,
+					 SUM(CASE WHEN MONTH(sign_date) = 3 THEN amount ELSE 0 END) AS m03,
+					 SUM(CASE WHEN MONTH(sign_date) = 4 THEN amount ELSE 0 END) AS m04,
+					 SUM(CASE WHEN MONTH(sign_date) = 5 THEN amount ELSE 0 END) AS m05,
+					 SUM(CASE WHEN MONTH(sign_date) = 6 THEN amount ELSE 0 END) AS m06,
+					 SUM(CASE WHEN MONTH(sign_date) = 7 THEN amount ELSE 0 END) AS m07,
+					 SUM(CASE WHEN MONTH(sign_date) = 8 THEN amount ELSE 0 END) AS m08,
+					 SUM(CASE WHEN MONTH(sign_date) = 9 THEN amount ELSE 0 END) AS m09,
+					 SUM(CASE WHEN MONTH(sign_date) = 10 THEN amount ELSE 0 END) AS m10,
+					 SUM(CASE WHEN MONTH(sign_date) = 11 THEN amount ELSE 0 END) AS m11,
+					 SUM(CASE WHEN MONTH(sign_date) = 12 THEN amount ELSE 0 END) AS m12,
+					 SUM(amount) AS total_amt
+				 FROM contract
+				 WHERE
+							 del_flag = '0'
+						 AND amount IS NOT NULL
+						 AND sign_date IS NOT NULL
+						 AND YEAR(sign_date) = #{queryDTO.year}
+						AND	party_b_id IN
+		<foreach collection="compIds" item="id" open="(" close=")" separator=",">
+			#{id}
+		</foreach>
+		GROUP BY party_b_id, party_b
+
+		UNION ALL
+
+		SELECT
+			'鎬昏' AS party_b_name,
+			SUM(CASE WHEN MONTH(sign_date) = 1 THEN amount ELSE 0 END),
+			SUM(CASE WHEN MONTH(sign_date) = 2 THEN amount ELSE 0 END),
+			SUM(CASE WHEN MONTH(sign_date) = 3 THEN amount ELSE 0 END),
+			SUM(CASE WHEN MONTH(sign_date) = 4 THEN amount ELSE 0 END),
+			SUM(CASE WHEN MONTH(sign_date) = 5 THEN amount ELSE 0 END),
+			SUM(CASE WHEN MONTH(sign_date) = 6 THEN amount ELSE 0 END),
+			SUM(CASE WHEN MONTH(sign_date) = 7 THEN amount ELSE 0 END),
+			SUM(CASE WHEN MONTH(sign_date) = 8 THEN amount ELSE 0 END),
+			SUM(CASE WHEN MONTH(sign_date) = 9 THEN amount ELSE 0 END),
+			SUM(CASE WHEN MONTH(sign_date) = 10 THEN amount ELSE 0 END),
+			SUM(CASE WHEN MONTH(sign_date) = 11 THEN amount ELSE 0 END),
+			SUM(CASE WHEN MONTH(sign_date) = 12 THEN amount ELSE 0 END),
+			SUM(amount)
+		FROM contract
+		WHERE
+					del_flag = '0'
+				AND amount IS NOT NULL
+				AND sign_date IS NOT NULL
+				AND YEAR(sign_date) = #{queryDTO.year}
+		AND	party_b_id IN
+		<foreach collection="compIds" item="id" open="(" close=")" separator=",">
+			#{id}
+		</foreach>
+				) AS pivot_table
+			GROUP BY party_b_name
+			ORDER BY
+				CASE WHEN party_b_name = '鎬昏' THEN 1 ELSE 0 END,
+		party_b_name;
+
+	</select>
+	<select id="contractIncomeAnalysis"
+			resultType="com.by4cloud.platformx.business.vo.ContractIncomeAnalysisVo">
+		SELECT
+			compName,
+			SUM(CASE WHEN month_num = 1 THEN total_amount ELSE 0 END) AS 'srMonth1',
+				SUM(CASE WHEN month_num = 1 AND pay_type = 0 THEN total_amount ELSE 0 END) AS 'xhMonth1',
+				SUM(CASE WHEN month_num = 1 AND pay_type = 1 THEN total_amount ELSE 0 END) AS 'cdMonth1',
+				SUM(CASE WHEN month_num = 1 AND pay_type = 2 THEN total_amount ELSE 0 END) AS 'qtMonth1',
+				SUM(CASE WHEN month_num = 2 THEN total_amount ELSE 0 END) AS 'srMonth2',
+				SUM(CASE WHEN month_num = 2 AND pay_type = 0 THEN total_amount ELSE 0 END) AS 'xhMonth2',
+				SUM(CASE WHEN month_num = 2 AND pay_type = 1 THEN total_amount ELSE 0 END) AS 'cdMonth2',
+				SUM(CASE WHEN month_num = 2 AND pay_type = 2 THEN total_amount ELSE 0 END) AS 'qtMonth2',
+				SUM(CASE WHEN month_num = 3 THEN total_amount ELSE 0 END) AS 'srMonth3',
+				SUM(CASE WHEN month_num = 3 AND pay_type = 0 THEN total_amount ELSE 0 END) AS 'xhMonth3',
+				SUM(CASE WHEN month_num = 3 AND pay_type = 1 THEN total_amount ELSE 0 END) AS 'cdMonth3',
+				SUM(CASE WHEN month_num = 3 AND pay_type = 2 THEN total_amount ELSE 0 END) AS 'qtMonth3',
+				SUM(CASE WHEN month_num = 4 THEN total_amount ELSE 0 END) AS 'srMonth4',
+				SUM(CASE WHEN month_num = 4 AND pay_type = 0 THEN total_amount ELSE 0 END) AS 'xhMonth4',
+				SUM(CASE WHEN month_num = 4 AND pay_type = 1 THEN total_amount ELSE 0 END) AS 'cdMonth4',
+				SUM(CASE WHEN month_num = 4 AND pay_type = 2 THEN total_amount ELSE 0 END) AS 'qtMonth4',
+				SUM(CASE WHEN month_num = 5 THEN total_amount ELSE 0 END) AS 'srMonth5',
+				SUM(CASE WHEN month_num = 5 AND pay_type = 0 THEN total_amount ELSE 0 END) AS 'xhMonth5',
+				SUM(CASE WHEN month_num = 5 AND pay_type = 1 THEN total_amount ELSE 0 END) AS 'cdMonth5',
+				SUM(CASE WHEN month_num = 5 AND pay_type = 2 THEN total_amount ELSE 0 END) AS 'qtMonth5',
+				SUM(CASE WHEN month_num = 6 THEN total_amount ELSE 0 END) AS 'srMonth6',
+				SUM(CASE WHEN month_num = 6 AND pay_type = 0 THEN total_amount ELSE 0 END) AS 'xhMonth6',
+				SUM(CASE WHEN month_num = 6 AND pay_type = 1 THEN total_amount ELSE 0 END) AS 'cdMonth6',
+				SUM(CASE WHEN month_num = 6 AND pay_type = 2 THEN total_amount ELSE 0 END) AS 'qtMonth6',
+				SUM(CASE WHEN month_num = 7 THEN total_amount ELSE 0 END) AS 'srMonth7',
+				SUM(CASE WHEN month_num = 7 AND pay_type = 0 THEN total_amount ELSE 0 END) AS 'xhMonth7',
+				SUM(CASE WHEN month_num = 7 AND pay_type = 1 THEN total_amount ELSE 0 END) AS 'cdMonth7',
+				SUM(CASE WHEN month_num = 7 AND pay_type = 2 THEN total_amount ELSE 0 END) AS 'qtMonth7',
+				SUM(CASE WHEN month_num = 8 THEN total_amount ELSE 0 END) AS 'srMonth8',
+				SUM(CASE WHEN month_num = 8 AND pay_type = 0 THEN total_amount ELSE 0 END) AS 'xhMonth8',
+				SUM(CASE WHEN month_num = 8 AND pay_type = 1 THEN total_amount ELSE 0 END) AS 'cdMonth8',
+				SUM(CASE WHEN month_num = 8 AND pay_type = 2 THEN total_amount ELSE 0 END) AS 'qtMonth8',
+				SUM(CASE WHEN month_num = 9 THEN total_amount ELSE 0 END) AS 'srMonth9',
+				SUM(CASE WHEN month_num = 9 AND pay_type = 0 THEN total_amount ELSE 0 END) AS 'xhMonth9',
+				SUM(CASE WHEN month_num = 9 AND pay_type = 1 THEN total_amount ELSE 0 END) AS 'cdMonth9',
+				SUM(CASE WHEN month_num = 9 AND pay_type = 2 THEN total_amount ELSE 0 END) AS 'qtMonth9',
+				SUM(CASE WHEN month_num = 10 THEN total_amount ELSE 0 END) AS 'srMonth10',
+				SUM(CASE WHEN month_num = 10 AND pay_type = 0 THEN total_amount ELSE 0 END) AS 'xhMonth10',
+				SUM(CASE WHEN month_num = 10 AND pay_type = 1 THEN total_amount ELSE 0 END) AS 'cdMonth10',
+				SUM(CASE WHEN month_num = 10 AND pay_type = 2 THEN total_amount ELSE 0 END) AS 'qtMonth10',
+				SUM(CASE WHEN month_num = 11 THEN total_amount ELSE 0 END) AS 'srMonth11',
+				SUM(CASE WHEN month_num = 11 AND pay_type = 0 THEN total_amount ELSE 0 END) AS 'xhMonth11',
+				SUM(CASE WHEN month_num = 11 AND pay_type = 1 THEN total_amount ELSE 0 END) AS 'cdMonth11',
+				SUM(CASE WHEN month_num = 11 AND pay_type = 2 THEN total_amount ELSE 0 END) AS 'qtMonth11',
+				SUM(CASE WHEN month_num = 12 THEN total_amount ELSE 0 END) AS 'srMonth12',
+				SUM(CASE WHEN month_num = 12 AND pay_type = 0 THEN total_amount ELSE 0 END) AS 'xhMonth12',
+				SUM(CASE WHEN month_num = 12 AND pay_type = 1 THEN total_amount ELSE 0 END) AS 'cdMonth12',
+				SUM(CASE WHEN month_num = 12 AND pay_type = 2 THEN total_amount ELSE 0 END) AS 'qtMonth12'
+		FROM (
+				 SELECT
+					 COALESCE(c.party_b, '鏈煡鍗曚綅') AS compName,
+					 MONTH(confirm_time) AS month_num,
+					 pay_type,
+					 COALESCE(transation_amount, 0) AS total_amount
+				 FROM payment_confirm pc,contract c
+				 WHERE
+
+					 pc.del_flag = '0'
+				   And c.del_flag = '0'
+				   AND pc.contract_id = c.id
+				   AND confirm_time IS NOT NULL
+				   AND transation_amount IS NOT NULL
+				   AND YEAR(confirm_time) = #{queryDTO.year}
+		AND	party_b_id IN
+		<foreach collection="compIds" item="id" open="(" close=")" separator=",">
+			#{id}
+		</foreach>
+			 ) AS source_data
+		GROUP BY compName
+
+	</select>
+	<select id="contractIncomeAnalysisByComp"
+			resultType="com.by4cloud.platformx.business.vo.ContractIncomeAnalysisCompVo">
+		SELECT
+			months.yf,
+			COALESCE ( SUM( transation_amount ), 0 ) AS sr,
+			COALESCE ( SUM( CASE WHEN pay_type = 0 THEN COALESCE ( transation_amount, 0 ) ELSE 0 END ), 0 ) AS xh,
+			COALESCE ( SUM( CASE WHEN pay_type = 1 THEN COALESCE ( transation_amount, 0 ) ELSE 0 END ), 0 ) AS cd,
+			COALESCE ( SUM( CASE WHEN pay_type = 2 THEN COALESCE ( transation_amount, 0 ) ELSE 0 END ), 0 ) AS qt
+		FROM
+			(
+				SELECT
+					'1鏈�' AS yf UNION ALL
+				SELECT
+					'2鏈�' UNION ALL
+				SELECT
+					'3鏈�' UNION ALL
+				SELECT
+					'4鏈�' UNION ALL
+				SELECT
+					'5鏈�' UNION ALL
+				SELECT
+					'6鏈�' UNION ALL
+				SELECT
+					'7鏈�' UNION ALL
+				SELECT
+					'8鏈�' UNION ALL
+				SELECT
+					'9鏈�' UNION ALL
+				SELECT
+					'10鏈�' UNION ALL
+				SELECT
+					'11鏈�' UNION ALL
+				SELECT
+					'12鏈�'
+			) AS months
+				LEFT JOIN payment_confirm pc ON months.yf = CONCAT( MONTH ( pc.confirm_time ), '鏈�' )
+				AND pc.del_flag = '0'
+				AND pc.confirm_time IS NOT NULL
+				AND pc.transation_amount IS NOT NULL
+				AND YEAR ( pc.confirm_time ) = #{queryDTO.year}
+				AND pc.comp_id = #{compId}
+		WHERE
+			1 = 1
+		GROUP BY
+			months.yf
+	</select>
+	<select id="contractAmountAnalysisByArea"
+			resultType="com.by4cloud.platformx.business.vo.ContractIncomeAnalysisAreaVo">
+		SELECT
+			b.area_id,
+			SUM( CASE WHEN c.party_b_id = #{sgbCompId} THEN c.amount ELSE 0 END ) AS sgbze,
+			ROUND(
+							SUM( CASE WHEN c.party_b_id = #{sgbCompId} THEN c.amount ELSE 0 END ) / (
+							SELECT
+								SUM( amount )
+							FROM
+								contract
+							WHERE
+								party_b_id IN
+							<foreach collection="compIds" item="id" open="(" close=")" separator=",">
+								#{id}
+							</foreach>
+			    ) * 100,
+							0
+				) AS zgbzb,
+			SUM( CASE WHEN c.party_b_id = #{jxcCompId} THEN c.amount ELSE 0 END ) AS jxcze,
+			ROUND(
+							SUM( CASE WHEN c.party_b_id = #{jxcCompId} THEN c.amount ELSE 0 END ) / (
+							SELECT
+								SUM( amount )
+							FROM
+								contract
+							WHERE
+								party_b_id IN
+		<foreach collection="compIds" item="id" open="(" close=")" separator=",">
+			#{id}
+		</foreach>
+			    ) * 100,
+							0
+				) AS jxczb ,
+			SUM( CASE WHEN c.party_b_id = #{smjCompId} THEN c.amount ELSE 0 END ) AS smjze,
+			ROUND(
+							SUM( CASE WHEN c.party_b_id = #{smjCompId} THEN c.amount ELSE 0 END ) / (
+							SELECT
+								SUM( amount )
+							FROM
+								contract
+							WHERE
+								party_b_id IN
+		<foreach collection="compIds" item="id" open="(" close=")" separator=",">
+			#{id}
+		</foreach>
+			    ) * 100,
+							0
+				) AS smjzb ,
+			SUM( CASE WHEN c.party_b_id = #{ymjCompId} THEN c.amount ELSE 0 END ) AS ymjze,
+			ROUND(
+							SUM( CASE WHEN c.party_b_id = #{ymjCompId} THEN c.amount ELSE 0 END ) / (
+							SELECT
+								SUM( amount )
+							FROM
+								contract
+							WHERE
+								party_b_id IN
+		<foreach collection="compIds" item="id" open="(" close=")" separator=",">
+			#{id}
+		</foreach>
+			    ) * 100,
+							0
+				) AS ymjzb ,
+			SUM( CASE WHEN c.party_b_id = #{tfCompId} THEN c.amount ELSE 0 END ) AS tfze,
+			ROUND(
+							SUM( CASE WHEN c.party_b_id = #{tfCompId} THEN c.amount ELSE 0 END ) / (
+							SELECT
+								SUM( amount )
+							FROM
+								contract
+							WHERE
+								party_b_id IN
+		<foreach collection="compIds" item="id" open="(" close=")" separator=",">
+			#{id}
+		</foreach>
+			    ) * 100,
+							0
+				) AS tfzb
+		FROM
+			contract c
+				JOIN business_customer b ON c.party_a_id = b.id
+		WHERE
+			b.area_id IS NOT NULL
+		AND YEAR ( sign_date ) = #{queryDTO.year}
+		GROUP BY
+			b.area_id
+
+	</select>
+	<select id="contractAmountAnalysisByIndustry"
+			resultType="com.by4cloud.platformx.business.vo.ContractIncomeAnalysisAreaVo">
+		SELECT
+		b.industry_id area_id,
+		SUM( CASE WHEN c.party_b_id = #{sgbCompId} THEN c.amount ELSE 0 END ) AS sgbze,
+		ROUND(
+		SUM( CASE WHEN c.party_b_id = #{sgbCompId} THEN c.amount ELSE 0 END ) / (
+		SELECT
+		SUM( amount )
+		FROM
+		contract
+		WHERE
+		party_b_id IN
+		<foreach collection="compIds" item="id" open="(" close=")" separator=",">
+			#{id}
+		</foreach>
+		) * 100,
+		0
+		) AS zgbzb,
+		SUM( CASE WHEN c.party_b_id = #{jxcCompId} THEN c.amount ELSE 0 END ) AS jxcze,
+		ROUND(
+		SUM( CASE WHEN c.party_b_id = #{jxcCompId} THEN c.amount ELSE 0 END ) / (
+		SELECT
+		SUM( amount )
+		FROM
+		contract
+		WHERE
+		party_b_id IN
+		<foreach collection="compIds" item="id" open="(" close=")" separator=",">
+			#{id}
+		</foreach>
+		) * 100,
+		0
+		) AS jxczb ,
+		SUM( CASE WHEN c.party_b_id = #{smjCompId} THEN c.amount ELSE 0 END ) AS smjze,
+		ROUND(
+		SUM( CASE WHEN c.party_b_id = #{smjCompId} THEN c.amount ELSE 0 END ) / (
+		SELECT
+		SUM( amount )
+		FROM
+		contract
+		WHERE
+		party_b_id IN
+		<foreach collection="compIds" item="id" open="(" close=")" separator=",">
+			#{id}
+		</foreach>
+		) * 100,
+		0
+		) AS smjzb ,
+		SUM( CASE WHEN c.party_b_id = #{ymjCompId} THEN c.amount ELSE 0 END ) AS ymjze,
+		ROUND(
+		SUM( CASE WHEN c.party_b_id = #{ymjCompId} THEN c.amount ELSE 0 END ) / (
+		SELECT
+		SUM( amount )
+		FROM
+		contract
+		WHERE
+		party_b_id IN
+		<foreach collection="compIds" item="id" open="(" close=")" separator=",">
+			#{id}
+		</foreach>
+		) * 100,
+		0
+		) AS ymjzb ,
+		SUM( CASE WHEN c.party_b_id = #{tfCompId} THEN c.amount ELSE 0 END ) AS tfze,
+		ROUND(
+		SUM( CASE WHEN c.party_b_id = #{tfCompId} THEN c.amount ELSE 0 END ) / (
+		SELECT
+		SUM( amount )
+		FROM
+		contract
+		WHERE
+		party_b_id IN
+		<foreach collection="compIds" item="id" open="(" close=")" separator=",">
+			#{id}
+		</foreach>
+		) * 100,
+		0
+		) AS tfzb
+		FROM
+		contract c
+		JOIN business_customer b ON c.party_a_id = b.id
+		WHERE
+		b.industry_id IS NOT NULL
+		AND YEAR ( sign_date ) = #{queryDTO.year}
+		GROUP BY
+		b.industry_id
+
+	</select>
+	<select id="contractAmountAnalysisByMarket"
+			resultType="com.by4cloud.platformx.business.vo.ContractIncomeAnalysisAreaVo">
+		SELECT
+		b.class_id area_id,
+		SUM( CASE WHEN c.party_b_id = #{sgbCompId} THEN c.amount ELSE 0 END ) AS sgbze,
+		ROUND(
+		SUM( CASE WHEN c.party_b_id = #{sgbCompId} THEN c.amount ELSE 0 END ) / (
+		SELECT
+		SUM( amount )
+		FROM
+		contract
+		WHERE
+		party_b_id IN
+		<foreach collection="compIds" item="id" open="(" close=")" separator=",">
+			#{id}
+		</foreach>
+		) * 100,
+		0
+		) AS zgbzb,
+		SUM( CASE WHEN c.party_b_id = #{jxcCompId} THEN c.amount ELSE 0 END ) AS jxcze,
+		ROUND(
+		SUM( CASE WHEN c.party_b_id = #{jxcCompId} THEN c.amount ELSE 0 END ) / (
+		SELECT
+		SUM( amount )
+		FROM
+		contract
+		WHERE
+		party_b_id IN
+		<foreach collection="compIds" item="id" open="(" close=")" separator=",">
+			#{id}
+		</foreach>
+		) * 100,
+		0
+		) AS jxczb ,
+		SUM( CASE WHEN c.party_b_id = #{smjCompId} THEN c.amount ELSE 0 END ) AS smjze,
+		ROUND(
+		SUM( CASE WHEN c.party_b_id = #{smjCompId} THEN c.amount ELSE 0 END ) / (
+		SELECT
+		SUM( amount )
+		FROM
+		contract
+		WHERE
+		party_b_id IN
+		<foreach collection="compIds" item="id" open="(" close=")" separator=",">
+			#{id}
+		</foreach>
+		) * 100,
+		0
+		) AS smjzb ,
+		SUM( CASE WHEN c.party_b_id = #{ymjCompId} THEN c.amount ELSE 0 END ) AS ymjze,
+		ROUND(
+		SUM( CASE WHEN c.party_b_id = #{ymjCompId} THEN c.amount ELSE 0 END ) / (
+		SELECT
+		SUM( amount )
+		FROM
+		contract
+		WHERE
+		party_b_id IN
+		<foreach collection="compIds" item="id" open="(" close=")" separator=",">
+			#{id}
+		</foreach>
+		) * 100,
+		0
+		) AS ymjzb ,
+		SUM( CASE WHEN c.party_b_id = #{tfCompId} THEN c.amount ELSE 0 END ) AS tfze,
+		ROUND(
+		SUM( CASE WHEN c.party_b_id = #{tfCompId} THEN c.amount ELSE 0 END ) / (
+		SELECT
+		SUM( amount )
+		FROM
+		contract
+		WHERE
+		party_b_id IN
+		<foreach collection="compIds" item="id" open="(" close=")" separator=",">
+			#{id}
+		</foreach>
+		) * 100,
+		0
+		) AS tfzb
+		FROM
+		contract c
+		JOIN business_customer b ON c.party_a_id = b.id
+		WHERE
+		b.class_id IS NOT NULL
+		AND YEAR ( sign_date ) = #{queryDTO.year}
+		GROUP BY
+		b.class_id
+
+
+	</select>
+	<select id="contractAmountAnalysisByExportBus"
+			resultType="com.by4cloud.platformx.business.vo.ContractIncomeAnalysisAreaVo">
+		SELECT
+		b.export_service_attr area_id,
+		SUM( CASE WHEN c.party_b_id = #{sgbCompId} THEN c.amount ELSE 0 END ) AS sgbze,
+		ROUND(
+		SUM( CASE WHEN c.party_b_id = #{sgbCompId} THEN c.amount ELSE 0 END ) / (
+		SELECT
+		SUM( amount )
+		FROM
+		contract
+		WHERE
+		party_b_id IN
+		<foreach collection="compIds" item="id" open="(" close=")" separator=",">
+			#{id}
+		</foreach>
+		) * 100,
+		0
+		) AS zgbzb,
+		SUM( CASE WHEN c.party_b_id = #{jxcCompId} THEN c.amount ELSE 0 END ) AS jxcze,
+		ROUND(
+		SUM( CASE WHEN c.party_b_id = #{jxcCompId} THEN c.amount ELSE 0 END ) / (
+		SELECT
+		SUM( amount )
+		FROM
+		contract
+		WHERE
+		party_b_id IN
+		<foreach collection="compIds" item="id" open="(" close=")" separator=",">
+			#{id}
+		</foreach>
+		) * 100,
+		0
+		) AS jxczb ,
+		SUM( CASE WHEN c.party_b_id = #{smjCompId} THEN c.amount ELSE 0 END ) AS smjze,
+		ROUND(
+		SUM( CASE WHEN c.party_b_id = #{smjCompId} THEN c.amount ELSE 0 END ) / (
+		SELECT
+		SUM( amount )
+		FROM
+		contract
+		WHERE
+		party_b_id IN
+		<foreach collection="compIds" item="id" open="(" close=")" separator=",">
+			#{id}
+		</foreach>
+		) * 100,
+		0
+		) AS smjzb ,
+		SUM( CASE WHEN c.party_b_id = #{ymjCompId} THEN c.amount ELSE 0 END ) AS ymjze,
+		ROUND(
+		SUM( CASE WHEN c.party_b_id = #{ymjCompId} THEN c.amount ELSE 0 END ) / (
+		SELECT
+		SUM( amount )
+		FROM
+		contract
+		WHERE
+		party_b_id IN
+		<foreach collection="compIds" item="id" open="(" close=")" separator=",">
+			#{id}
+		</foreach>
+		) * 100,
+		0
+		) AS ymjzb ,
+		SUM( CASE WHEN c.party_b_id = #{tfCompId} THEN c.amount ELSE 0 END ) AS tfze,
+		ROUND(
+		SUM( CASE WHEN c.party_b_id = #{tfCompId} THEN c.amount ELSE 0 END ) / (
+		SELECT
+		SUM( amount )
+		FROM
+		contract
+		WHERE
+		party_b_id IN
+		<foreach collection="compIds" item="id" open="(" close=")" separator=",">
+			#{id}
+		</foreach>
+		) * 100,
+		0
+		) AS tfzb
+		FROM
+		contract c
+		JOIN business_customer b ON c.party_a_id = b.id
+		WHERE
+		b.export_service_attr IS NOT NULL
+		AND YEAR ( sign_date ) = #{queryDTO.year}
+		GROUP BY
+		b.export_service_attr
+
+	</select>
+	<select id="contractAmountAnalysisBySpcBus"
+			resultType="com.by4cloud.platformx.business.vo.ContractIncomeAnalysisAreaVo">
+		SELECT
+		c.supply_attribute area_id,
+		SUM( CASE WHEN c.party_b_id = #{sgbCompId} THEN c.amount ELSE 0 END ) AS sgbze,
+		ROUND(
+		SUM( CASE WHEN c.party_b_id = #{sgbCompId} THEN c.amount ELSE 0 END ) / (
+		SELECT
+		SUM( amount )
+		FROM
+		contract
+		WHERE
+		party_b_id IN
+		<foreach collection="compIds" item="id" open="(" close=")" separator=",">
+			#{id}
+		</foreach>
+		) * 100,
+		0
+		) AS zgbzb,
+		SUM( CASE WHEN c.party_b_id = #{jxcCompId} THEN c.amount ELSE 0 END ) AS jxcze,
+		ROUND(
+		SUM( CASE WHEN c.party_b_id = #{jxcCompId} THEN c.amount ELSE 0 END ) / (
+		SELECT
+		SUM( amount )
+		FROM
+		contract
+		WHERE
+		party_b_id IN
+		<foreach collection="compIds" item="id" open="(" close=")" separator=",">
+			#{id}
+		</foreach>
+		) * 100,
+		0
+		) AS jxczb ,
+		SUM( CASE WHEN c.party_b_id = #{smjCompId} THEN c.amount ELSE 0 END ) AS smjze,
+		ROUND(
+		SUM( CASE WHEN c.party_b_id = #{smjCompId} THEN c.amount ELSE 0 END ) / (
+		SELECT
+		SUM( amount )
+		FROM
+		contract
+		WHERE
+		party_b_id IN
+		<foreach collection="compIds" item="id" open="(" close=")" separator=",">
+			#{id}
+		</foreach>
+		) * 100,
+		0
+		) AS smjzb ,
+		SUM( CASE WHEN c.party_b_id = #{ymjCompId} THEN c.amount ELSE 0 END ) AS ymjze,
+		ROUND(
+		SUM( CASE WHEN c.party_b_id = #{ymjCompId} THEN c.amount ELSE 0 END ) / (
+		SELECT
+		SUM( amount )
+		FROM
+		contract
+		WHERE
+		party_b_id IN
+		<foreach collection="compIds" item="id" open="(" close=")" separator=",">
+			#{id}
+		</foreach>
+		) * 100,
+		0
+		) AS ymjzb ,
+		SUM( CASE WHEN c.party_b_id = #{tfCompId} THEN c.amount ELSE 0 END ) AS tfze,
+		ROUND(
+		SUM( CASE WHEN c.party_b_id = #{tfCompId} THEN c.amount ELSE 0 END ) / (
+		SELECT
+		SUM( amount )
+		FROM
+		contract
+		WHERE
+		party_b_id IN
+		<foreach collection="compIds" item="id" open="(" close=")" separator=",">
+			#{id}
+		</foreach>
+		) * 100,
+		0
+		) AS tfzb
+		FROM
+		contract c
+		WHERE
+		c.supply_attribute IS NOT NULL
+		AND YEAR ( sign_date ) = #{queryDTO.year}
+		GROUP BY
+		c.supply_attribute
+
+	</select>
+	<select id="contractAmountAnalysisByComp"
+			resultType="com.by4cloud.platformx.business.vo.ContractAmountAnalysisCompVo">
+		SELECT
+			m.stat_month AS yf,
+			COALESCE(curr.total_amount, 0) AS je,
+			CASE
+				WHEN prev.total_amount IS NULL OR prev.total_amount = 0 THEN NULL
+				ELSE ROUND(
+								(COALESCE(curr.total_amount, 0) - prev.total_amount) / prev.total_amount * 100,
+								2
+					)
+				END AS hb,
+			CASE
+				WHEN last_year.total_amount IS NULL OR last_year.total_amount = 0 THEN NULL
+				ELSE ROUND(
+								(COALESCE(curr.total_amount, 0) - last_year.total_amount) / last_year.total_amount * 100,
+								2
+					)
+				END AS tb
+		FROM (
+				 SELECT DATE_FORMAT(MAKEDATE(${queryDTO.year}, 1), '%Y-%m') AS stat_month, 1 AS month_num
+				 UNION ALL SELECT DATE_FORMAT(DATE_ADD(MAKEDATE(${queryDTO.year}, 1), INTERVAL 1 MONTH), '%Y-%m'), 2
+				 UNION ALL SELECT DATE_FORMAT(DATE_ADD(MAKEDATE(${queryDTO.year}, 1), INTERVAL 2 MONTH), '%Y-%m'), 3
+				 UNION ALL SELECT DATE_FORMAT(DATE_ADD(MAKEDATE(${queryDTO.year}, 1), INTERVAL 3 MONTH), '%Y-%m'), 4
+				 UNION ALL SELECT DATE_FORMAT(DATE_ADD(MAKEDATE(${queryDTO.year}, 1), INTERVAL 4 MONTH), '%Y-%m'), 5
+				 UNION ALL SELECT DATE_FORMAT(DATE_ADD(MAKEDATE(${queryDTO.year}, 1), INTERVAL 5 MONTH), '%Y-%m'), 6
+				 UNION ALL SELECT DATE_FORMAT(DATE_ADD(MAKEDATE(${queryDTO.year}, 1), INTERVAL 6 MONTH), '%Y-%m'), 7
+				 UNION ALL SELECT DATE_FORMAT(DATE_ADD(MAKEDATE(${queryDTO.year}, 1), INTERVAL 7 MONTH), '%Y-%m'), 8
+				 UNION ALL SELECT DATE_FORMAT(DATE_ADD(MAKEDATE(${queryDTO.year}, 1), INTERVAL 8 MONTH), '%Y-%m'), 9
+				 UNION ALL SELECT DATE_FORMAT(DATE_ADD(MAKEDATE(${queryDTO.year}, 1), INTERVAL 9 MONTH), '%Y-%m'), 10
+				 UNION ALL SELECT DATE_FORMAT(DATE_ADD(MAKEDATE(${queryDTO.year}, 1), INTERVAL 10 MONTH), '%Y-%m'), 11
+				 UNION ALL SELECT DATE_FORMAT(DATE_ADD(MAKEDATE(${queryDTO.year}, 1), INTERVAL 11 MONTH), '%Y-%m'), 12
+			 ) m
+				 LEFT JOIN (
+			SELECT
+				DATE_FORMAT(sign_date, '%Y-%m') AS stat_month,
+				SUM(amount) AS total_amount
+			FROM contract
+			WHERE YEAR(sign_date) = #{queryDTO.year}
+				 AND party_b_id = #{compId}
+			GROUP BY DATE_FORMAT(sign_date, '%Y-%m')
+		) curr ON m.stat_month = curr.stat_month
+				 LEFT JOIN (
+			SELECT
+				DATE_FORMAT(sign_date, '%Y-%m') AS stat_month,
+				MONTH(sign_date) AS month_num,
+				SUM(amount) AS total_amount
+			FROM contract
+			WHERE YEAR(sign_date) = YEAR(CURDATE())
+	  		AND party_b_id = #{compId}
+			GROUP BY DATE_FORMAT(sign_date, '%Y-%m'), MONTH(sign_date)
+		) prev ON m.month_num = prev.month_num + 1
+				 LEFT JOIN (
+			SELECT
+				MONTH(sign_date) AS month_num,
+				SUM(amount) AS total_amount
+			FROM contract
+			WHERE YEAR(sign_date) = YEAR(CURDATE()) - 1
+			AND party_b_id = #{compId}
+			GROUP BY MONTH(sign_date)
+		) last_year ON m.month_num = last_year.month_num
+		ORDER BY m.month_num
+
+	</select>
 </mapper>
\ No newline at end of file

--
Gitblit v1.9.1