From 620bb4712a31791231c4381581f0f60088f079fe Mon Sep 17 00:00:00 2001
From: 云 <2163098428@qq.com>
Date: 星期三, 27 五月 2026 14:03:45 +0800
Subject: [PATCH] Merge branch 'refs/heads/dev_New_pro' into dev_宁夏_英泽防锈

---
 src/main/resources/mapper/purchase/PurchaseLedgerMapper.xml |  200 +++++++++++++++++++++++++++++---------------------
 1 files changed, 116 insertions(+), 84 deletions(-)

diff --git a/src/main/resources/mapper/purchase/PurchaseLedgerMapper.xml b/src/main/resources/mapper/purchase/PurchaseLedgerMapper.xml
index 1aed9b4..a818160 100644
--- a/src/main/resources/mapper/purchase/PurchaseLedgerMapper.xml
+++ b/src/main/resources/mapper/purchase/PurchaseLedgerMapper.xml
@@ -9,94 +9,126 @@
         SET contract_amount = #{totalTaxInclusiveAmount}
         WHERE id = #{id}
     </update>
-
-    <select id="selectPurchaseLedgerListPage" resultType="com.ruoyi.purchase.dto.PurchaseLedgerDto">
-        SELECT
-        pl.id,
-        pl.purchase_contract_number,
-        pl.sales_contract_no,
-        pl.supplier_id,
-        pl.supplier_name,
-        pl.project_name,
-        pl.contract_amount,
-        IFNULL(tr_sum.total_invoice_amount, 0) AS receipt_payment_amount,
-        pl.contract_amount - IFNULL(tr_sum.total_invoice_amount, 0) AS unReceipt_payment_amount,
-        pl.entry_date,
-        pl.execution_date,
-        pl.recorder_id,
-        pl.recorder_name,
-        pl.template_name,
-        pl.approve_user_ids,
-        sm.is_white,
-        pl.approval_status,
-        pl.payment_method,
-        pl.remarks
-        FROM purchase_ledger pl
-        LEFT JOIN (
-        SELECT
-        purchase_ledger_id,
-        SUM(invoice_amount) AS total_invoice_amount
-        FROM ticket_registration
-        GROUP BY purchase_ledger_id
-        ) tr_sum ON pl.id = tr_sum.purchase_ledger_id
-        LEFT JOIN supplier_manage sm ON pl.supplier_id = sm.id
-        <where>
-            <if test="c.purchaseContractNumber != null and c.purchaseContractNumber != ''">
-                AND pl.purchase_contract_number LIKE CONCAT('%', #{c.purchaseContractNumber}, '%')
-            </if>
-            <if test="c.approvalStatus != null and c.approvalStatus != ''">
-                AND pl.approval_status = #{c.approvalStatus}
-            </if>
-            <if test="c.supplierName != null and c.supplierName != ''">
-                AND pl.supplier_name LIKE CONCAT('%', #{c.supplierName}, '%')
-            </if>
-            <if test="c.salesContractNo != null and c.salesContractNo != ''">
-                AND pl.sales_contract_no LIKE CONCAT('%', #{c.salesContractNo}, '%')
-            </if>
-            <if test="c.projectName != null and c.projectName != ''">
-                AND pl.project_name LIKE CONCAT('%', #{c.projectName}, '%')
-            </if>
-            <if test="c.entryDateStart != null and c.entryDateStart != ''">
-                AND pl.entry_date &gt;= #{c.entryDateStart}
-            </if>
-            <if test="c.entryDateEnd != null and c.entryDateEnd != ''">
-                AND pl.entry_date &lt;= #{c.entryDateEnd}
-            </if>
-            <if test="c.supplierId != null">
-                AND pl.supplier_id = #{c.supplierId}
-            </if>
-            <if test="c.approvalStatus != null">
-                AND pl.approval_status = #{c.approvalStatus}
-            </if>
-        </where>
-        ORDER BY pl.entry_date DESC
-    </select>
-
-    <select id="getPaymentRegistrationDtoById" resultType="com.ruoyi.purchase.dto.PaymentRegistrationDto">
-        SELECT
-            T1.id,
-            T1.payment_date,
-            T2.supplier_name,
-            T1.current_payment_amount,
-            T1.payment_method,
-            T3.nick_name AS registrant,
-            T1.registrationt_date
-        FROM
-            payment_registration T1
-                LEFT JOIN
-            supplier_manage T2 ON T1.supplier_id = T2.id
-                LEFT JOIN
-            sys_user T3 ON T3.user_id = T1.registrant_id
-        WHERE
-            T1.sales_ledger_product_id = #{id}
-    </select>
-
-
     <select id="selectPurchaseStats" resultType="com.ruoyi.home.dto.IncomeExpenseAnalysisDto">
         SELECT DATE_FORMAT(entry_date, #{dateFormat}) as dateStr, IFNULL(SUM(contract_amount), 0) as amount
         FROM purchase_ledger
         WHERE entry_date BETWEEN #{startDate} AND #{endDate}
         GROUP BY dateStr
+    </select>
+
+    <select id="selectPurchaseLedgerListPage" resultType="com.ruoyi.purchase.dto.PurchaseLedgerDto">
+        SELECT result.*
+        FROM (
+            SELECT
+                pl.id,
+                pl.purchase_contract_number,
+                pl.sales_contract_no,
+                pl.supplier_id,
+                pl.supplier_name,
+                pl.project_name,
+                pl.contract_amount,
+                pl.entry_date,
+                pl.execution_date,
+                pl.recorder_id,
+                pl.recorder_name,
+                pl.template_name,
+                pl.approve_user_ids,
+                sm.is_white,
+                pl.approval_status,
+                pl.payment_method,
+                pl.remarks,
+                CASE
+                    WHEN IFNULL(ls.total_product_count, 0) = 0 THEN '寰呭叆搴�'
+                    WHEN IFNULL(ls.full_product_count, 0) &gt;= IFNULL(ls.total_product_count, 0) THEN '瀹屽叏鍏ュ簱'
+                    WHEN IFNULL(ls.approved_product_count, 0) &gt; 0 THEN '鍏ュ簱涓�'
+                    ELSE '寰呭叆搴�'
+                END AS stock_in_status
+            FROM purchase_ledger pl
+            LEFT JOIN supplier_manage sm ON pl.supplier_id = sm.id
+            LEFT JOIN (
+                SELECT
+                    product_status.sales_ledger_id,
+                    COUNT(1) AS total_product_count,
+                    SUM(CASE WHEN product_status.approved_stock_in_num &gt; 0 THEN 1 ELSE 0 END) AS approved_product_count,
+                    SUM(CASE WHEN product_status.approved_stock_in_num &gt;= product_status.product_quantity THEN 1 ELSE 0 END) AS full_product_count
+                FROM (
+                    SELECT
+                        slp.id AS sales_ledger_product_id,
+                        slp.sales_ledger_id,
+                        IFNULL(slp.quantity, 0) AS product_quantity,
+                        IFNULL(approved_qty.approved_stock_in_num, 0) AS approved_stock_in_num
+                    FROM sales_ledger_product slp
+                    LEFT JOIN (
+                        SELECT rel.sales_ledger_product_id,
+                               IFNULL(SUM(rel.stock_in_num), 0) AS approved_stock_in_num
+                        FROM (
+                            SELECT slp.id AS sales_ledger_product_id,
+                                   sir.stock_in_num
+                            FROM stock_in_record sir
+                            INNER JOIN sales_ledger_product slp
+                                ON slp.type = 2
+                                AND TRIM(sir.record_type) = '7'
+                                AND sir.record_id = slp.sales_ledger_id
+                                AND (
+                                    (sir.batch_no IS NOT NULL AND sir.batch_no LIKE CONCAT('%-', slp.id))
+                                    OR (sir.batch_no IS NULL AND sir.product_model_id = slp.product_model_id)
+                                )
+                            WHERE sir.approval_status = 1
+
+                            UNION ALL
+
+                            SELECT slp.id AS sales_ledger_product_id,
+                                   sir.stock_in_num
+                            FROM stock_in_record sir
+                            INNER JOIN quality_inspect qi
+                                ON TRIM(sir.record_type) = '10'
+                                AND sir.record_id = qi.id
+                            INNER JOIN sales_ledger_product slp
+                                ON slp.type = 2
+                                AND slp.sales_ledger_id = qi.purchase_ledger_id
+                                AND slp.product_model_id = qi.product_model_id
+                            WHERE sir.approval_status = 1
+                        ) rel
+                        GROUP BY rel.sales_ledger_product_id
+                    ) approved_qty ON approved_qty.sales_ledger_product_id = slp.id
+                    WHERE slp.type = 2
+                ) product_status
+                GROUP BY product_status.sales_ledger_id
+            ) ls ON ls.sales_ledger_id = pl.id
+            <where>
+                <if test="c.purchaseContractNumber != null and c.purchaseContractNumber != ''">
+                    AND pl.purchase_contract_number LIKE CONCAT('%', #{c.purchaseContractNumber}, '%')
+                </if>
+                <if test="c.approvalStatus != null and c.approvalStatus != ''">
+                    AND pl.approval_status = #{c.approvalStatus}
+                </if>
+                <if test="c.supplierName != null and c.supplierName != ''">
+                    AND pl.supplier_name LIKE CONCAT('%', #{c.supplierName}, '%')
+                </if>
+                <if test="c.salesContractNo != null and c.salesContractNo != ''">
+                    AND pl.sales_contract_no LIKE CONCAT('%', #{c.salesContractNo}, '%')
+                </if>
+                <if test="c.projectName != null and c.projectName != ''">
+                    AND pl.project_name LIKE CONCAT('%', #{c.projectName}, '%')
+                </if>
+                <if test="c.entryDateStart != null and c.entryDateStart != ''">
+                    AND pl.entry_date &gt;= #{c.entryDateStart}
+                </if>
+                <if test="c.entryDateEnd != null and c.entryDateEnd != ''">
+                    AND pl.entry_date &lt;= #{c.entryDateEnd}
+                </if>
+                <if test="c.supplierId != null">
+                    AND pl.supplier_id = #{c.supplierId}
+                </if>
+                <if test="c.approvalStatus != null">
+                    AND pl.approval_status = #{c.approvalStatus}
+                </if>
+            </where>
+        ) result
+        <if test="c.stockInStatus != null and c.stockInStatus != ''">
+            WHERE result.stock_in_status = #{c.stockInStatus}
+        </if>
+        ORDER BY result.entry_date DESC
     </select>
 
     <select id="selectTotalPurchaseAmount" resultType="java.math.BigDecimal">
@@ -111,4 +143,4 @@
             </if>
         </where>
     </select>
-</mapper>
\ No newline at end of file
+</mapper>

--
Gitblit v1.9.3