From 5badb0e02901c3ea5570fdb9cf497aec7e48fd65 Mon Sep 17 00:00:00 2001
From: shiyunteng <shiyunteng@example.com>
Date: 星期四, 18 六月 2026 17:00:23 +0800
Subject: [PATCH] feat:新增账龄行业、地区分析账龄分析

---
 platformx-business-finance-biz/src/main/resources/mapper/ContractPaymentScheduleMapper.xml |  201 ++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 200 insertions(+), 1 deletions(-)

diff --git a/platformx-business-finance-biz/src/main/resources/mapper/ContractPaymentScheduleMapper.xml b/platformx-business-finance-biz/src/main/resources/mapper/ContractPaymentScheduleMapper.xml
index 64c9b87..94fd082 100644
--- a/platformx-business-finance-biz/src/main/resources/mapper/ContractPaymentScheduleMapper.xml
+++ b/platformx-business-finance-biz/src/main/resources/mapper/ContractPaymentScheduleMapper.xml
@@ -16,7 +16,7 @@
         <result property="paymentRatio" column="payment_ratio"/>
         <result property="paymentStatus" column="payment_status"/>
         <result property="plannedAmount" column="planned_amount"/>
-        <result property="plannedPaymentDate" column="planned_payment_date"/>
+<!--        <result property="plannedPaymentDate" column="planned_payment_date"/>-->
         <result property="remark" column="remark"/>
         <result property="stageName" column="stage_name"/>
         <result property="stageOrder" column="stage_order"/>
@@ -28,4 +28,203 @@
         <result property="updateTime" column="update_time"/>
         <result property="delFlag" column="del_flag"/>
   </resultMap>
+    <select id="selectAgingCompany" resultType="com.by4cloud.platformx.business.vo.AgingCompanyVo">
+		SELECT
+		c.party_a_id companyId,
+		cps.comp_id
+		FROM
+		contract_payment_schedule cps,
+		contract c
+		WHERE
+		cps.contract_id = c.id
+		AND cps.del_flag = '0'
+		AND c.del_flag = '0'
+	    AND cps.effective_end_date is not null
+		AND cps.effective_end_date &lt; current_date
+		AND DATEDIFF(current_date, cps.effective_end_date)>0
+		AND cps.payment_status &lt;&gt; '2'
+		AND cps.payment_status &lt;&gt; 3
+		GROUP BY
+		c.party_a_id,
+		cps.comp_id
+	</select>
+	<select id="selectAgingTotal" resultType="com.by4cloud.platformx.business.vo.AgingVo">
+		SELECT
+		ranges.overdue_range,
+		COALESCE(SUM(
+		CASE
+		WHEN cps.payment_status = '0' THEN
+		cps.planned_amount
+		WHEN cps.payment_status = '1' THEN
+		cps.planned_amount - cps.actual_amount ELSE 0
+		END
+		), 0) AS total_amount
+		FROM
+		(
+		SELECT '0-30澶�' AS overdue_range, 0 AS min_days, 30 AS max_days UNION ALL
+		SELECT '31-60澶�', 31, 60 UNION ALL
+		SELECT '61-90澶�', 61, 90 UNION ALL
+		SELECT '91-180澶�', 91, 180 UNION ALL
+		SELECT '181-365澶�', 181, 365 UNION ALL
+		SELECT '1骞翠互涓�', 366, 999999
+		) AS ranges
+		LEFT JOIN
+		contract_payment_schedule cps ON
+		cps.del_flag = '0'
+		AND cps.payment_status NOT IN ('2', '3')
+		AND cps.effective_end_date &lt; current_date
+		AND DATEDIFF(current_date, cps.effective_end_date) BETWEEN ranges.min_days AND ranges.max_days
+		LEFT JOIN
+		contract c ON cps.contract_id = c.id
+		LEFT JOIN
+		business_customer bc ON c.party_a_id = bc.id
+		 where
+		 c.del_flag = '0'
+		<if test="queryDTO.companyId !=null">
+			and c.party_a_id = #{queryDTO.companyId}
+		</if>
+		<if test="queryDTO.areaId !=null">
+			and bc.area_id = #{queryDTO.areaId}
+		</if>
+		<if test="queryDTO.industryId !=null">
+			and bc.industry_id = #{queryDTO.industryId}
+		</if>
+		GROUP BY
+		ranges.overdue_range,
+		ranges.min_days
+		ORDER BY
+		ranges.min_days;
+	</select>
+	<select id="selectAgingCompanyShip" resultType="com.by4cloud.platformx.business.vo.AgingCompanyVo">
+		SELECT
+			c.party_a_id companyId,
+		    c.comp_id
+		FROM
+			contract c
+		WHERE
+			c.del_flag = '0'
+		  AND c.amount > c.paid_amount
+		  AND EXISTS ( SELECT 1 FROM contract_out_bound cob WHERE cob.del_flag = '0' AND cob.contract_id = c.id )
+		GROUP BY
+			c.party_a_id,
+			c.comp_id;
+	</select>
+	<select id="selectAgingCompanyInvoice" resultType="com.by4cloud.platformx.business.vo.AgingCompanyVo">
+		SELECT
+			c.party_a_id companyId,
+			c.comp_id
+		FROM
+			contract c
+		WHERE
+			c.del_flag = '0'
+		  AND c.amount > c.paid_amount
+		  AND EXISTS ( SELECT 1 FROM contract_invoice ci WHERE ci.del_flag = '0' AND ci.contract_id = c.id )
+		GROUP BY
+			c.party_a_id,
+			c.comp_id;
+	</select>
+	<select id="selectAgingTotalShip" resultType="com.by4cloud.platformx.business.vo.AgingVo">
+		SELECT
+			ranges.overdue_range,
+			COALESCE (
+					sum(amount-paid_amount),
+					0
+				) AS total_amount
+		FROM
+			(
+				SELECT
+					'0-30澶�' AS overdue_range,
+					0 AS min_days,
+					30 AS max_days UNION ALL
+				SELECT
+					'31-60澶�',
+					31,
+					60 UNION ALL
+				SELECT
+					'61-90澶�',
+					61,
+					90 UNION ALL
+				SELECT
+					'91-180澶�',
+					91,
+					180 UNION ALL
+				SELECT
+					'181-365澶�',
+					181,
+					365 UNION ALL
+				SELECT
+					'1骞翠互涓�',
+					366,
+					999999
+			) ranges
+				LEFT JOIN contract c ON c.del_flag = '0'
+				AND DATEDIFF(
+							CURRENT_DATE,
+							( SELECT max( out_bound_time ) FROM contract_out_bound cob WHERE cob.del_flag = '0' AND cob.contract_id = c.id ORDER BY out_bound_time ASC )) BETWEEN ranges.min_days
+				AND ranges.max_days
+		WHERE
+			c.del_flag = '0'
+		  AND c.amount > c.paid_amount
+		<if test="queryDTO.companyId !=null">
+			and c.party_a_id = #{queryDTO.companyId}
+		</if>
+		  AND EXISTS ( SELECT 1 FROM contract_out_bound cob WHERE cob.del_flag = '0' AND cob.contract_id = c.id )
+		GROUP BY
+			ranges.overdue_range,
+			ranges.min_days
+		ORDER BY
+			ranges.min_days;
+	</select>
+	<select id="selectAgingTotalInvoice" resultType="com.by4cloud.platformx.business.vo.AgingVo">
+		SELECT
+			ranges.overdue_range,
+			COALESCE (
+					sum(amount-paid_amount),
+					0
+				) AS total_amount
+		FROM
+			(
+				SELECT
+					'0-30澶�' AS overdue_range,
+					0 AS min_days,
+					30 AS max_days UNION ALL
+				SELECT
+					'31-60澶�',
+					31,
+					60 UNION ALL
+				SELECT
+					'61-90澶�',
+					61,
+					90 UNION ALL
+				SELECT
+					'91-180澶�',
+					91,
+					180 UNION ALL
+				SELECT
+					'181-365澶�',
+					181,
+					365 UNION ALL
+				SELECT
+					'1骞翠互涓�',
+					366,
+					999999
+			) ranges
+				LEFT JOIN contract c ON c.del_flag = '0'
+				AND DATEDIFF(
+														CURRENT_DATE,
+														( SELECT max( out_bound_time ) FROM contract_out_bound cob WHERE cob.del_flag = '0' AND cob.contract_id = c.id ORDER BY out_bound_time ASC )) BETWEEN ranges.min_days
+											AND ranges.max_days
+		WHERE
+			c.del_flag = '0'
+		  AND c.amount > c.paid_amount
+		<if test="queryDTO.companyId !=null">
+			and c.party_a_id = #{queryDTO.companyId}
+		</if>
+		  AND EXISTS ( SELECT 1 FROM contract_invoice ci WHERE ci.del_flag = '0' AND ci.contract_id = c.id)
+		GROUP BY
+			ranges.overdue_range,
+			ranges.min_days
+		ORDER BY
+			ranges.min_days;
+	</select>
 </mapper>
\ No newline at end of file

--
Gitblit v1.9.1