From 279366f14d6e1361b6caf7c05b74f0cea4227a36 Mon Sep 17 00:00:00 2001
From: wujianwei <wjw@11.com>
Date: 星期五, 27 三月 2026 10:53:28 +0800
Subject: [PATCH] 新增推送
---
service/src/main/resources/mapper/cwgl/ReceivableBillManagementMapper.xml | 275 ++++++++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 271 insertions(+), 4 deletions(-)
diff --git a/service/src/main/resources/mapper/cwgl/ReceivableBillManagementMapper.xml b/service/src/main/resources/mapper/cwgl/ReceivableBillManagementMapper.xml
index 412abee..69350f7 100644
--- a/service/src/main/resources/mapper/cwgl/ReceivableBillManagementMapper.xml
+++ b/service/src/main/resources/mapper/cwgl/ReceivableBillManagementMapper.xml
@@ -33,6 +33,12 @@
<result property="billGenerateDate" column="bill_generate_date" />
<result property="billSendDate" column="bill_send_date" />
<result property="billDueDate" column="bill_due_date" />
+ <result property="settlementCategory" column="settlement_category" />
+ <result property="settlementPeriod" column="settlement_period" />
+ <result property="ncSettlementDate" column="nc_settlement_date" />
+ <result property="ncSettlementAmount" column="nc_settlement_amount" />
+ <result property="accountRemark" column="account_remark" />
+ <result property="overdueInterest" column="overdue_interest" />
<result property="status" column="status" />
<result property="remark" column="remark" />
<result property="createBy" column="create_by" />
@@ -42,8 +48,41 @@
<result property="deleted" column="deleted" />
</resultMap>
+ <resultMap type="com.ruoyi.cwgl.domain.vo.ReceivableBillAgingAnalysisVo" id="ReceivableBillAgingAnalysisVoResult">
+ <result property="id" column="id" />
+ <result property="systemNo" column="system_no" />
+ <result property="billName" column="bill_name" />
+ <result property="customerName" column="customer_name" />
+
+ <result property="responsiblePerson" column="responsible_person" />
+ <result property="responsibleLeader" column="responsible_leader" />
+ <result property="settlementMethod" column="settlement_method" />
+ <result property="businessType" column="business_type" />
+ <result property="promotionRequirement" column="promotion_requirement" />
+ <result property="totalAmount" column="total_amount" />
+ <result property="currency" column="currency" />
+ <result property="receivedAmount" column="received_amount" />
+ <result property="pendingAmount" column="pending_amount" />
+
+
+ <result property="billingStartDate" column="billing_start_date" />
+ <result property="billingEndDate" column="billing_end_date" />
+
+ <result property="billDueDate" column="bill_due_date" />
+
+ <result property="dueIn30Days" column="due_in_30_days" />
+
+ <result property="overdue1To30Days" column="overdue_1_to_30_days" />
+ <result property="overdue31To60Days" column="overdue_31_to_60_days" />
+ <result property="overdue61To90Days" column="overdue_61_to_90_days" />
+ <result property="overdue91To180Days" column="overdue_91_to_180_days" />
+ <result property="overdue181To365Days" column="overdue_181_to_365_days" />
+ <result property="overdueOver1Year" column="overdue_over_1_year" />
+ <result property="overdueDays" column="overdue_days" />
+ </resultMap>
+
<sql id="selectReceivableBillManagementVo">
- select thisTab.id, thisTab.system_no, thisTab.bill_name, thisTab.customer_name, thisTab.payee, thisTab.responsible_person, thisTab.responsible_leader, thisTab.settlement_method, thisTab.business_type, thisTab.promotion_requirement, thisTab.is_internal_settlement, thisTab.internal_settlement_unit, thisTab.document_count, thisTab.total_amount, thisTab.currency, thisTab.discount_amount, thisTab.received_amount, thisTab.pending_amount, thisTab.exchange_rate, thisTab.cny_amount, thisTab.period_type, thisTab.business_start_date, thisTab.business_end_date, thisTab.billing_start_date, thisTab.billing_end_date, thisTab.bill_generate_date, thisTab.bill_send_date, thisTab.bill_due_date, thisTab.status, thisTab.remark, thisTab.create_by, thisTab.create_time, thisTab.update_by, thisTab.update_time, thisTab.deleted from receivable_bill_management AS thisTab
+ select thisTab.id, thisTab.system_no, thisTab.bill_name, thisTab.customer_name, thisTab.payee, thisTab.responsible_person, thisTab.responsible_leader, thisTab.settlement_method, thisTab.business_type, thisTab.promotion_requirement, thisTab.is_internal_settlement, thisTab.internal_settlement_unit, thisTab.document_count, thisTab.total_amount, thisTab.currency, thisTab.discount_amount, thisTab.received_amount, thisTab.pending_amount, thisTab.exchange_rate, thisTab.cny_amount, thisTab.period_type, thisTab.business_start_date, thisTab.business_end_date, thisTab.billing_start_date, thisTab.billing_end_date, thisTab.bill_generate_date, thisTab.bill_send_date, thisTab.bill_due_date, thisTab.due_in_30_days, thisTab.overdue_amount, thisTab.overdue_1_to_30_days, thisTab.overdue_31_to_60_days, thisTab.overdue_61_to_90_days, thisTab.overdue_91_to_180_days, thisTab.overdue_181_to_365_days, thisTab.overdue_over_1_year, thisTab.overdue_days, thisTab.settlement_category, thisTab.settlement_period, thisTab.nc_settlement_date, thisTab.nc_settlement_amount, thisTab.account_remark, thisTab.overdue_interest, thisTab.status, thisTab.remark, thisTab.create_by, thisTab.create_time, thisTab.update_by, thisTab.update_time, thisTab.deleted from receivable_bill_management AS thisTab
</sql>
<sql id="selectReceivableBillManagementVoCount">
select count(0) from receivable_bill_management as thisTab
@@ -77,6 +116,12 @@
<if test="billGenerateDate != null "> and thisTab.bill_generate_date = #{billGenerateDate}</if>
<if test="billSendDate != null "> and thisTab.bill_send_date = #{billSendDate}</if>
<if test="billDueDate != null "> and thisTab.bill_due_date = #{billDueDate}</if>
+ <if test="settlementCategory != null and settlementCategory != ''"> and thisTab.settlement_category = #{settlementCategory}</if>
+ <if test="settlementPeriod != null and settlementPeriod != ''"> and thisTab.settlement_period = #{settlementPeriod}</if>
+ <if test="ncSettlementDate != null "> and thisTab.nc_settlement_date = #{ncSettlementDate}</if>
+ <if test="ncSettlementAmount != null "> and thisTab.nc_settlement_amount = #{ncSettlementAmount}</if>
+ <if test="accountRemark != null and accountRemark != ''"> and thisTab.account_remark like concat('%', #{accountRemark}, '%')</if>
+ <if test="overdueInterest != null "> and thisTab.overdue_interest = #{overdueInterest}</if>
<if test="status != null and status != ''">
<choose>
<when test="status == -1">
@@ -147,6 +192,12 @@
<if test="billGenerateDate != null">bill_generate_date,</if>
<if test="billSendDate != null">bill_send_date,</if>
<if test="billDueDate != null">bill_due_date,</if>
+ <if test="settlementCategory != null and settlementCategory != ''">settlement_category,</if>
+ <if test="settlementPeriod != null and settlementPeriod != ''">settlement_period,</if>
+ <if test="ncSettlementDate != null">nc_settlement_date,</if>
+ <if test="ncSettlementAmount != null">nc_settlement_amount,</if>
+ <if test="accountRemark != null and accountRemark != ''">account_remark,</if>
+ <if test="overdueInterest != null">overdue_interest,</if>
<if test="status != null">status,</if>
<if test="remark != null">remark,</if>
<if test="createBy != null">create_by,</if>
@@ -183,6 +234,12 @@
<if test="billGenerateDate != null">#{billGenerateDate},</if>
<if test="billSendDate != null">#{billSendDate},</if>
<if test="billDueDate != null">#{billDueDate},</if>
+ <if test="settlementCategory != null and settlementCategory != ''">#{settlementCategory},</if>
+ <if test="settlementPeriod != null and settlementPeriod != ''">#{settlementPeriod},</if>
+ <if test="ncSettlementDate != null">#{ncSettlementDate},</if>
+ <if test="ncSettlementAmount != null">#{ncSettlementAmount},</if>
+ <if test="accountRemark != null and accountRemark != ''">#{accountRemark},</if>
+ <if test="overdueInterest != null">#{overdueInterest},</if>
<if test="status != null">#{status},</if>
<if test="remark != null">#{remark},</if>
<if test="createBy != null">#{createBy},</if>
@@ -196,11 +253,11 @@
<insert id="insertReceivableBillManagementBatch" parameterType="java.util.List" useGeneratedKeys="true" keyProperty="id">
insert into receivable_bill_management
<trim prefix="(" suffix=") values" suffixOverrides=",">
- system_no,bill_name,customer_name,payee,responsible_person,responsible_leader,settlement_method,business_type,promotion_requirement,is_internal_settlement,internal_settlement_unit,document_count,total_amount,currency,discount_amount,received_amount,pending_amount,exchange_rate,cny_amount,period_type,business_start_date,business_end_date,billing_start_date,billing_end_date,bill_generate_date,bill_send_date,bill_due_date,status,remark,create_by,create_time,update_by,update_time,deleted,
+ system_no,bill_name,customer_name,payee,responsible_person,responsible_leader,settlement_method,business_type,promotion_requirement,is_internal_settlement,internal_settlement_unit,document_count,total_amount,currency,discount_amount,received_amount,pending_amount,exchange_rate,cny_amount,period_type,business_start_date,business_end_date,billing_start_date,billing_end_date,bill_generate_date,bill_send_date,bill_due_date,settlement_category,settlement_period,nc_settlement_date,nc_settlement_amount,account_remark,overdue_interest,status,remark,create_by,create_time,update_by,update_time,deleted,
</trim>
<foreach item="item" index="index" collection="list" separator=",">
<trim prefix="(" suffix=") " suffixOverrides=",">
- #{item.systemNo},#{item.billName},#{item.customerName},#{item.payee},#{item.responsiblePerson},#{item.responsibleLeader},#{item.settlementMethod},#{item.businessType},#{item.promotionRequirement},#{item.isInternalSettlement},#{item.internalSettlementUnit},#{item.documentCount},#{item.totalAmount},#{item.currency},#{item.discountAmount},#{item.receivedAmount},#{item.pendingAmount},#{item.exchangeRate},#{item.cnyAmount},#{item.periodType},#{item.businessStartDate},#{item.businessEndDate},#{item.billingStartDate},#{item.billingEndDate},#{item.billGenerateDate},#{item.billSendDate},#{item.billDueDate},#{item.status},#{item.remark},#{item.createBy},#{item.createTime},#{item.updateBy},#{item.updateTime},#{item.deleted},
+ #{item.systemNo},#{item.billName},#{item.customerName},#{item.payee},#{item.responsiblePerson},#{item.responsibleLeader},#{item.settlementMethod},#{item.businessType},#{item.promotionRequirement},#{item.isInternalSettlement},#{item.internalSettlementUnit},#{item.documentCount},#{item.totalAmount},#{item.currency},#{item.discountAmount},#{item.receivedAmount},#{item.pendingAmount},#{item.exchangeRate},#{item.cnyAmount},#{item.periodType},#{item.businessStartDate},#{item.businessEndDate},#{item.billingStartDate},#{item.billingEndDate},#{item.billGenerateDate},#{item.billSendDate},#{item.billDueDate},#{item.settlementCategory},#{item.settlementPeriod},#{item.ncSettlementDate},#{item.ncSettlementAmount},#{item.accountRemark},#{item.overdueInterest},#{item.status},#{item.remark},#{item.createBy},#{item.createTime},#{item.updateBy},#{item.updateTime},#{item.deleted},
</trim>
</foreach>
</insert>
@@ -236,6 +293,12 @@
<if test="billGenerateDate != null">bill_generate_date = #{billGenerateDate},</if>
<if test="billSendDate != null">bill_send_date = #{billSendDate},</if>
<if test="billDueDate != null">bill_due_date = #{billDueDate},</if>
+ <if test="settlementCategory != null and settlementCategory != ''">settlement_category = #{settlementCategory},</if>
+ <if test="settlementPeriod != null and settlementPeriod != ''">settlement_period = #{settlementPeriod},</if>
+ <if test="ncSettlementDate != null">nc_settlement_date = #{ncSettlementDate},</if>
+ <if test="ncSettlementAmount != null">nc_settlement_amount = #{ncSettlementAmount},</if>
+ <if test="accountRemark != null and accountRemark != ''">account_remark = #{accountRemark},</if>
+ <if test="overdueInterest != null">overdue_interest = #{overdueInterest},</if>
<if test="status != null">status = #{status},</if>
<if test="remark != null">remark = #{remark},</if>
<if test="createBy != null">create_by = #{createBy},</if>
@@ -278,6 +341,12 @@
<if test="item.billGenerateDate != null">bill_generate_date = #{item.billGenerateDate},</if>
<if test="item.billSendDate != null">bill_send_date = #{item.billSendDate},</if>
<if test="item.billDueDate != null">bill_due_date = #{item.billDueDate},</if>
+ <if test="item.settlementCategory != null and item.settlementCategory != ''">settlement_category = #{item.settlementCategory},</if>
+ <if test="item.settlementPeriod != null and item.settlementPeriod != ''">settlement_period = #{item.settlementPeriod},</if>
+ <if test="item.ncSettlementDate != null">nc_settlement_date = #{item.ncSettlementDate},</if>
+ <if test="item.ncSettlementAmount != null">nc_settlement_amount = #{item.ncSettlementAmount},</if>
+ <if test="item.accountRemark != null and item.accountRemark != ''">account_remark = #{item.accountRemark},</if>
+ <if test="item.overdueInterest != null">overdue_interest = #{item.overdueInterest},</if>
<if test="item.status != null">status = #{item.status},</if>
<if test="item.remark != null">remark = #{item.remark},</if>
<if test="item.createBy != null">create_by = #{item.createBy},</if>
@@ -310,10 +379,208 @@
SUM(pending_amount) as totalPendingAmount
FROM receivable_bill_management
<where>
- <include refid="whereCondition"/>
+ <if test="customerName != null and customerName != ''"> and customer_name like concat('%', #{customerName}, '%')</if>
+
</where>
GROUP BY customer_name
ORDER BY customer_name
</select>
+ <!-- 鏌ヨ搴旀敹璐﹀崟璐﹂緞鍒嗘瀽鍒楄〃 -->
+ <select id="selectReceivableBillAgingAnalysisList" parameterType="com.ruoyi.cwgl.domain.ReceivableBillManagement" resultMap="ReceivableBillAgingAnalysisVoResult">
+ SELECT
+ thisTab.*,
+ rib_latest.latest_invoice_time as latestInvoiceTime,
+ COALESCE(rib_total.total_invoice_amount, 0) as totalInvoiceAmount,
+ CASE
+ WHEN thisTab.pending_amount > COALESCE(rib_total.total_invoice_amount, 0)
+ THEN thisTab.pending_amount - COALESCE(rib_total.total_invoice_amount, 0)
+ ELSE 0
+ END as unInvoicedAmount
+ FROM receivable_bill_management thisTab
+
+ -- 鑾峰彇鏈�鏂板紑绁ㄦ棩鏈�
+ LEFT JOIN (
+ SELECT head_id, MAX(invoice_time) as latest_invoice_time
+ FROM receivable_invoice_business
+ WHERE status = 1
+ GROUP BY head_id
+ ) rib_latest ON thisTab.id = rib_latest.head_id
+
+ -- 鑾峰彇寮�绁ㄦ�婚噾棰�
+ LEFT JOIN (
+ SELECT head_id, SUM(invoicing_amount) as total_invoice_amount
+ FROM receivable_invoice_business
+ WHERE status = 1
+ GROUP BY head_id
+ ) rib_total ON thisTab.id = rib_total.head_id
+
+ <where>
+ <if test="systemNo != null and systemNo != ''"> and thisTab.system_no = #{systemNo}</if>
+ <if test="customerName != null and customerName != ''"> and thisTab.customer_name like concat('%', #{customerName}, '%')</if>
+
+ </where>
+ ORDER BY customer_name, bill_due_date
+ </select>
+
+ <!-- 鎵归噺鏇存柊搴旀敹璐﹀崟璐﹂緞鍒嗘瀽鏁版嵁 -->
+ <update id="batchUpdateAgingAnalysisData">
+ UPDATE receivable_bill_management
+ SET
+
+ due_in_30_days = CASE
+ WHEN pending_amount > 0 AND bill_due_date IS NOT NULL
+ AND bill_due_date > CURDATE()
+ AND DATEDIFF(bill_due_date, CURDATE()) <= 30
+ THEN pending_amount
+ ELSE due_in_30_days
+ END,
+ overdue_amount = CASE
+ WHEN pending_amount > 0 AND bill_due_date IS NOT NULL
+ AND bill_due_date <= CURDATE()
+ THEN pending_amount
+ ELSE overdue_amount
+ END,
+
+ overdue_1_to_30_days = CASE
+ WHEN pending_amount > 0 AND bill_due_date IS NOT NULL
+ AND bill_due_date <= CURDATE()
+ AND DATEDIFF(CURDATE(), bill_due_date) BETWEEN 1 AND 30
+ THEN pending_amount
+ ELSE overdue_1_to_30_days
+ END,
+ overdue_31_to_60_days = CASE
+ WHEN pending_amount > 0 AND bill_due_date IS NOT NULL
+ AND bill_due_date <= CURDATE()
+ AND DATEDIFF(CURDATE(), bill_due_date) BETWEEN 31 AND 60
+ THEN pending_amount
+ ELSE overdue_31_to_60_days
+ END,
+ overdue_61_to_90_days = CASE
+ WHEN pending_amount > 0 AND bill_due_date IS NOT NULL
+ AND bill_due_date <= CURDATE()
+ AND DATEDIFF(CURDATE(), bill_due_date) BETWEEN 61 AND 90
+ THEN pending_amount
+ ELSE overdue_61_to_90_days
+ END,
+ overdue_91_to_180_days = CASE
+ WHEN pending_amount > 0 AND bill_due_date IS NOT NULL
+ AND bill_due_date <= CURDATE()
+ AND DATEDIFF(CURDATE(), bill_due_date) BETWEEN 91 AND 180
+ THEN pending_amount
+ ELSE overdue_91_to_180_days
+ END,
+ overdue_181_to_365_days = CASE
+ WHEN pending_amount > 0 AND bill_due_date IS NOT NULL
+ AND bill_due_date <= CURDATE()
+ AND DATEDIFF(CURDATE(), bill_due_date) BETWEEN 181 AND 365
+ THEN pending_amount
+ ELSE overdue_181_to_365_days
+ END,
+ overdue_over_1_year = CASE
+ WHEN pending_amount > 0 AND bill_due_date IS NOT NULL
+ AND bill_due_date <= CURDATE()
+ AND DATEDIFF(CURDATE(), bill_due_date) > 365
+ THEN pending_amount
+ ELSE overdue_over_1_year
+ END,
+ overdue_days = CASE
+ WHEN pending_amount > 0 AND bill_due_date IS NOT NULL
+ AND bill_due_date <= CURDATE()
+ THEN DATEDIFF(CURDATE(), bill_due_date)
+ ELSE overdue_days
+ END,
+ update_time = NOW()
+ WHERE pending_amount > 0
+ </update>
+
+ <!-- 鏌ヨ搴旀敹璐﹀崟璐︽鍒嗘瀽鍒楄〃 -->
+ <select id="selectReceivableBillAccountAnalysisList" parameterType="com.ruoyi.cwgl.domain.ReceivableBillManagement" resultType="com.ruoyi.cwgl.domain.vo.ReceivableBillAccountAnalysisVo">
+ SELECT
+ thisTab.id,
+ thisTab.system_no as systemNo,
+ thisTab.bill_name as billName,
+ thisTab.customer_name as customerName,
+ thisTab.payee,
+ thisTab.responsible_person as responsiblePerson,
+ thisTab.responsible_leader as responsibleLeader,
+ thisTab.settlement_method as settlementMethod,
+ thisTab.business_type as businessType,
+ thisTab.promotion_requirement as promotionRequirement,
+ thisTab.settlement_category as settlementCategory,
+ thisTab.settlement_period as settlementPeriod,
+ thisTab.total_amount as totalAmount,
+ thisTab.received_amount as receivedAmount,
+ thisTab.pending_amount as pendingAmount,
+ thisTab.nc_settlement_date as ncSettlementDate,
+ thisTab.nc_settlement_amount as ncSettlementAmount,
+ thisTab.account_remark as accountRemark,
+ thisTab.overdue_interest as overdueInterest,
+ thisTab.bill_due_date as billDueDate,
+ thisTab.overdue_days as overdueDays,
+ thisTab.status,
+ thisTab.create_time as createTime,
+ thisTab.update_time as updateTime,
+
+ -- 寮�绁ㄧ浉鍏冲瓧娈�
+ rib_latest.invoice_time as latestInvoiceTime,
+ COALESCE(rib_total.total_invoice_amount, 0) as totalInvoiceAmount,
+ CASE
+ WHEN thisTab.total_amount > COALESCE(rib_total.total_invoice_amount, 0)
+ THEN thisTab.total_amount - COALESCE(rib_total.total_invoice_amount, 0)
+ ELSE 0
+ END as unInvoicedAmount,
+
+ -- 杩樻鐩稿叧瀛楁
+ rbsd_latest.latest_repayment_date as latestRepaymentDate,
+ COALESCE(rbsd_latest.latest_repayment_amount, 0) as latestRepaymentAmount
+
+ FROM receivable_bill_management thisTab
+
+ -- 鑾峰彇鏈�鏂板紑绁ㄦ棩鏈�
+ LEFT JOIN (
+ SELECT head_id, MAX(invoice_time) as invoice_time
+ FROM receivable_invoice_business
+ WHERE status = 1
+ GROUP BY head_id
+ ) rib_latest ON thisTab.id = rib_latest.head_id
+
+ -- 鑾峰彇寮�绁ㄦ�婚噾棰�
+ LEFT JOIN (
+ SELECT head_id, SUM(invoicing_amount) as total_invoice_amount
+ FROM receivable_invoice_business
+ WHERE status = 1
+ GROUP BY head_id
+ ) rib_total ON thisTab.id = rib_total.head_id
+
+ -- 鑾峰彇鏈�鏂拌繕娆句俊鎭�
+ LEFT JOIN (
+ SELECT
+ r1.bill_id,
+ r1.receipt_date as latest_repayment_date,
+ r1.receipt_amount as latest_repayment_amount
+ FROM receivable_bill_settlement_detail r1
+ INNER JOIN (
+ SELECT bill_id, MAX(receipt_date) as max_receipt_date
+ FROM receivable_bill_settlement_detail
+ WHERE deleted = 0
+ GROUP BY bill_id
+ ) r2 ON r1.bill_id = r2.bill_id AND r1.receipt_date = r2.max_receipt_date
+ WHERE r1.deleted = 0
+ -- 濡傛灉鍚屼竴澶╂湁澶氭潯璁板綍锛屽彇閲戦鏈�澶х殑閭f潯
+ AND r1.receipt_amount = (
+ SELECT MAX(receipt_amount)
+ FROM receivable_bill_settlement_detail r3
+ WHERE r3.bill_id = r1.bill_id AND r3.receipt_date = r1.receipt_date AND r3.deleted = 0
+ )
+ ) rbsd_latest ON thisTab.id = rbsd_latest.bill_id
+
+ <where>
+ <if test="systemNo != null and systemNo != ''"> and thisTab.system_no = #{systemNo}</if>
+ <if test="customerName != null and customerName != ''"> and thisTab.customer_name like concat('%', #{customerName}, '%')</if>
+
+ </where>
+ ORDER BY thisTab.customer_name, thisTab.bill_due_date
+ </select>
+
</mapper>
\ No newline at end of file
--
Gitblit v1.8.0