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