From f4c288c55d08c04cd026508b358beebfcdce5fc2 Mon Sep 17 00:00:00 2001
From: liding <756868258@qq.com>
Date: 星期五, 22 五月 2026 09:29:09 +0800
Subject: [PATCH] feat(product): 添加产品型号向下复制功能并优化生产报工重量计算 - 在ProductController中新增downCopy接口实现产品型号批量复制功能 - 将ProductionProductMainDto中的bomInputQty字段重命名为inputWeight - 在ProductionProductMainServiceImpl中添加JSON解析逻辑支持从otherData中提取投入重量 - 新增resolveInputWeight、findParameterValue、findFieldValue等工具方法处理复杂参数解析 - 为ProductModelDto添加targetProductId字段用于指定复制目标 - 修复销售台账按调度员ID和姓名分组的SQL查询问题 - 优化库存服务中剩余数量计算的空值处理逻辑 - 完善生产投料数量为空时的默认值处理机制

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

diff --git a/src/main/resources/mapper/purchase/PurchaseLedgerMapper.xml b/src/main/resources/mapper/purchase/PurchaseLedgerMapper.xml
index 98c2675..f501849 100644
--- a/src/main/resources/mapper/purchase/PurchaseLedgerMapper.xml
+++ b/src/main/resources/mapper/purchase/PurchaseLedgerMapper.xml
@@ -9,17 +9,18 @@
         SET contract_amount = #{totalTaxInclusiveAmount}
         WHERE id = #{id}
     </update>
+
     <select id="selectPurchaseLedgerListPage" resultType="com.ruoyi.purchase.dto.PurchaseLedgerDto">
-        select
+        SELECT
         pl.id,
-        pl.purchase_contract_number ,
+        pl.purchase_contract_number,
         pl.sales_contract_no,
         pl.supplier_id,
         pl.supplier_name,
         pl.project_name,
         pl.contract_amount,
-        IFNULL(sum(tr.invoice_amount),0) as receipt_payment_amount,
-        pl.contract_amount-IFNULL(sum(tr.invoice_amount),0) AS unReceipt_payment_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,
@@ -30,42 +31,41 @@
         pl.approval_status,
         pl.payment_method,
         pl.remarks
-        from purchase_ledger pl
-        left join sales_ledger_product slp on slp.sales_ledger_id = pl.id and slp.type=2
-        left join product_record pr on pl.id = pr.purchase_ledger_id
-        left join ticket_registration tr on tr.id = pr.ticket_registration_id
-        left join supplier_manage sm on pl.supplier_id = sm.id
+        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>
-            1 = 1
             <if test="c.purchaseContractNumber != null and c.purchaseContractNumber != ''">
-               and pl.purchase_contract_number like concat('%',#{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}
+                AND pl.approval_status = #{c.approvalStatus}
             </if>
             <if test="c.supplierName != null and c.supplierName != ''">
-                and pl.supplier_name like concat('%',#{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},'%')
+                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},'%')
+                AND pl.project_name LIKE CONCAT('%', #{c.projectName}, '%')
             </if>
-            <if test="c.entryDateStart != null and c.entryDateStart != '' ">
-                AND pl.entry_date &gt;= DATE_FORMAT(#{c.entryDateStart},'%Y-%m-%d')
+            <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;= DATE_FORMAT(#{c.entryDateEnd},'%Y-%m-%d')
+            <if test="c.entryDateEnd != null and c.entryDateEnd != ''">
+                AND pl.entry_date &lt;= #{c.entryDateEnd}
             </if>
         </where>
-        group by pl.id, pl.purchase_contract_number, pl.sales_contract_no, pl.supplier_name,
-        pl.project_name,pl.entry_date,
-        pl.recorder_name,
-        pl.contract_amount
-        order by pl.entry_date desc
-
+        ORDER BY pl.entry_date DESC
     </select>
+
     <select id="getPaymentRegistrationDtoById" resultType="com.ruoyi.purchase.dto.PaymentRegistrationDto">
         SELECT
             T1.id,

--
Gitblit v1.9.3