From 75aac2e5aa095929fa06984fa30a5a47970e94f5 Mon Sep 17 00:00:00 2001
From: renshen <1005457301@qq.com>
Date: Tue, 20 Oct 2026 10:50:08 +0800
Subject: [PATCH] =?UTF-8?q?=E4=BE=9B=E5=BA=94=E5=95=86=E5=AF=B9=E8=B4=A6?=
=?UTF-8?q?=EF=BC=9A=E5=8E=82=E5=AE=B6=E7=AB=AF=E9=80=80=E8=B4=A7=E6=B1=87?=
=?UTF-8?q?=E6=80=BB=E6=94=B9=E4=B8=BA=E4=BB=B6=E6=95=B0=E4=B8=8E=E9=87=91?=
=?UTF-8?q?=E9=A2=9D=20(#401)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
内部厂家端和厂家门户改为大号退货件数、退货金额及确认状态卡片,汇总不再显示行数。
---
.../View/SupplierReconciliationPageData.php | 12 ++++
.../supplier-data.blade.php | 66 ++++++++++++++----
.../supplier-reconciliation/index.blade.php | 59 +++++++++++++---
.../Business/SupplierReconciliationTest.php | 68 +++++++++++++++++--
4 files changed, 178 insertions(+), 27 deletions(-)
diff --git a/modules/EcommerceFinance/View/SupplierReconciliationPageData.php b/modules/EcommerceFinance/View/SupplierReconciliationPageData.php
index 066fd6b0..e39e037d 100644
--- a/modules/EcommerceFinance/View/SupplierReconciliationPageData.php
+++ b/modules/EcommerceFinance/View/SupplierReconciliationPageData.php
@@ -346,6 +346,9 @@ class SupplierReconciliationPageData
$total = 0.0;
$confirmedAmount = 0.0;
$disputedAmount = 0.0;
+ $returnQuantity = 0.0;
+ $confirmedQuantity = 0.0;
+ $disputedQuantity = 0.0;
$disputedCount = 0;
$confirmedCount = 0;
@@ -356,14 +359,18 @@ class SupplierReconciliationPageData
$deduction = $row['_accounting_target'] === '不记账'
? 0.0
: (float) $row['_supplier_amount'];
+ $quantity = (float) $row['_supplier_qty'];
$status = (string) ($row['_status'] ?? '');
$total += $deduction;
+ $returnQuantity += $quantity;
if ($status === SupplierReturnConfirmation::STATUS_CONFIRMED) {
$confirmedAmount += $deduction;
+ $confirmedQuantity += $quantity;
$confirmedCount++;
} elseif ($status === SupplierReturnConfirmation::STATUS_DISPUTED) {
$disputedAmount += $deduction;
+ $disputedQuantity += $quantity;
$disputedCount++;
}
@@ -386,6 +393,11 @@ class SupplierReconciliationPageData
'total_rows' => count($returnRows),
'all_rows' => $allRows,
'total_amount' => round($total, 2),
+ 'return_qty' => round($returnQuantity, 2),
+ 'confirmed_qty' => round($confirmedQuantity, 2),
+ 'disputed_qty' => round($disputedQuantity, 2),
+ 'pending_qty' => round(max($returnQuantity - $confirmedQuantity - $disputedQuantity, 0), 2),
+ 'pending_amount' => round(max($total - $confirmedAmount - $disputedAmount, 0), 2),
'confirmed_count' => $confirmedCount,
'confirmed_amount' => round($confirmedAmount, 2),
'disputed_count' => $disputedCount,
diff --git a/resources/views/business/pages/supplier-reconciliation/supplier-data.blade.php b/resources/views/business/pages/supplier-reconciliation/supplier-data.blade.php
index a0593552..76c88000 100644
--- a/resources/views/business/pages/supplier-reconciliation/supplier-data.blade.php
+++ b/resources/views/business/pages/supplier-reconciliation/supplier-data.blade.php
@@ -1,4 +1,11 @@
+ @php
+ $formatReturnQty = static function (mixed $value): string {
+ $quantity = (float) $value;
+
+ return number_format($quantity, abs($quantity - round($quantity)) < 0.00001 ? 0 : 2);
+ };
+ @endphp
@@ -80,7 +96,8 @@
@else
当前还没有上传过对账单。
@endif
- 退货明细:共 {{ number_format($returnPanel['total_rows']) }} 行
+ 退货件数:{{ $formatReturnQty($returnPanel['return_qty']) }} 件
+ 退货金额:¥{{ number_format($returnPanel['total_amount'], 2) }}
@@ -89,17 +106,39 @@
这里展示本厂家的全部退货数据(包含待确认、已确认和异议中),按导入顺序排列。
@if ($returnPanel['is_filtered'])
- 当前筛选出 {{ number_format($returnPanel['total_rows']) }} 行。
+ 当前筛选结果:{{ $formatReturnQty($returnPanel['return_qty']) }} 件,退货金额 ¥{{ number_format($returnPanel['total_amount'], 2) }}。
@endif
-
-
退货合计 {{ number_format($returnPanel['total_rows']) }} 行
-
扣减合计 ¥{{ number_format($returnPanel['total_amount'], 2) }}
-
已确认 {{ $returnPanel['confirmed_count'] }} 行(¥{{ number_format($returnPanel['confirmed_amount'], 2) }})
-
异议 {{ $returnPanel['disputed_count'] }} 行(暂不扣减 ¥{{ number_format($returnPanel['disputed_amount'], 2) }})
-
待确认 {{ max($returnPanel['total_rows'] - $returnPanel['confirmed_count'] - $returnPanel['disputed_count'], 0) }} 行
+
+
+ 退货件数
+ {{ $formatReturnQty($returnPanel['return_qty']) }}件
+
+
+ 退货金额
+ ¥{{ number_format($returnPanel['total_amount'], 2) }}
+
+
+ 已确认
+ {{ $formatReturnQty($returnPanel['confirmed_qty']) }}件
+ ¥{{ number_format($returnPanel['confirmed_amount'], 2) }}
+
+
+ 异议中
+ {{ $formatReturnQty($returnPanel['disputed_qty']) }}件
+ ¥{{ number_format($returnPanel['disputed_amount'], 2) }}
+
+
+ 待确认
+ {{ $formatReturnQty($returnPanel['pending_qty']) }}件
+ ¥{{ number_format($returnPanel['pending_amount'], 2) }}
+
@if ($returnPanel['accounting_summary']['logistics_rows'] > 0)
-
转物流记账 {{ $returnPanel['accounting_summary']['logistics_rows'] }} 行,{{ number_format($returnPanel['accounting_summary']['logistics_qty'], 2) }} 件(¥{{ number_format($returnPanel['accounting_summary']['logistics_amount'], 2) }})
+
+ 转物流记账
+ {{ $formatReturnQty($returnPanel['accounting_summary']['logistics_qty']) }}件
+ ¥{{ number_format($returnPanel['accounting_summary']['logistics_amount'], 2) }}
+
@endif
@@ -140,7 +179,7 @@
重置
- 导出当前筛选结果({{ number_format($returnPanel['total_rows']) }} 行)
+ 导出当前筛选结果
diff --git a/tests/Feature/Business/SupplierReconciliationTest.php b/tests/Feature/Business/SupplierReconciliationTest.php
index aecb1b36..d76ac10b 100644
--- a/tests/Feature/Business/SupplierReconciliationTest.php
+++ b/tests/Feature/Business/SupplierReconciliationTest.php
@@ -132,7 +132,7 @@ class SupplierReconciliationTest extends FeatureTestCase
->assertSeeText('厂家对账单 · 上传与实时数据')
->assertSeeText('上传记录')
->assertSeeText('退货扣减确认')
- ->assertSeeText('合计扣减')
+ ->assertSeeText('退货金额')
->assertSeeText('全部确认无异议')
->assertSeeText('待确认')
->assertSeeText('条形码')
@@ -525,11 +525,11 @@ class SupplierReconciliationTest extends FeatureTestCase
$this->loginAs()->get(route('business.pages.show', $filters))
->assertOk()
- ->assertSeeText('筛选出 19 行,全部 21 行')
+ ->assertSeeText('当前筛选 19 件,退货金额 ¥1,900.00')
->assertSeeText('MATCH-01')
->assertDontSeeText('MATCH-20')
->assertDontSeeText('OTHER-01')
- ->assertSeeText('导出当前筛选结果(19 行)');
+ ->assertSeeText('导出当前筛选结果');
$this->loginAs()->get(route('business.pages.show', $filters + ['return_page' => 2]))
->assertOk()
@@ -539,6 +539,66 @@ class SupplierReconciliationTest extends FeatureTestCase
->assertSee('return_status=pending', false);
}
+ public function test_return_summary_uses_quantity_and_amount_without_row_counts(): void
+ {
+ $store = app(SupplierPayableOverrideStore::class);
+ $companyId = (int) $this->company->id;
+ $rows = [
+ 'summary:1' => ['qty' => '2', 'amount' => '200'],
+ 'summary:2' => ['qty' => '3', 'amount' => '300'],
+ 'summary:3' => ['qty' => '1', 'amount' => '50'],
+ 'summary:4' => ['qty' => '4', 'amount' => '400'],
+ ];
+ foreach ($rows as $key => $values) {
+ $store->save('final:supplier:return-reconciliation', $key, $values + [
+ 'summary_month' => '2026-09',
+ 'send_time' => '2026-09-20',
+ 'supplier' => '晨丰',
+ 'barcode' => strtoupper($key),
+ 'unit_price' => '100',
+ ], $companyId, null);
+ }
+
+ $confirmations = app(\Modules\EcommerceFinance\Services\SupplierReturnConfirmation::class);
+ $confirmations->mark('晨丰', 'summary:1', 'confirmed', $companyId, null);
+ $confirmations->mark('晨丰', 'summary:3', 'disputed', $companyId, null);
+
+ $vendor = $this->createVendorPortalUser('晨丰');
+ $portal = $this->loginAs($vendor)->get(route('portal.supplier-reconciliation.index', [
+ 'company_id' => $companyId,
+ ]));
+ $portal->assertOk()
+ ->assertSeeText('退货件数')
+ ->assertSeeText('退货金额')
+ ->assertSee('10件', false)
+ ->assertSeeText('¥950.00')
+ ->assertSee('2件', false)
+ ->assertSeeText('¥200.00')
+ ->assertSee('1件', false)
+ ->assertSeeText('¥50.00')
+ ->assertSee('7件', false)
+ ->assertSeeText('¥700.00')
+ ->assertDontSeeText('退货合计')
+ ->assertDontSeeText('扣减合计')
+ ->assertDontSeeText('已确认 2 行')
+ ->assertDontSeeText('异议 1 行')
+ ->assertDontSeeText('待确认 3 行');
+
+ $this->loginAs()->get(route('business.pages.show', [
+ 'company_id' => $companyId,
+ 'section' => 'supplier-reconciliation',
+ 'page' => 'supplier-data',
+ 'supplier' => '晨丰',
+ ]))
+ ->assertOk()
+ ->assertSeeText('退货件数')
+ ->assertSeeText('退货金额')
+ ->assertSee('10件', false)
+ ->assertSeeText('¥950.00')
+ ->assertDontSeeText('退货合计')
+ ->assertDontSeeText('扣减合计');
+ }
+
public function test_confirm_all_only_applies_to_the_current_return_filter(): void
{
$store = app(SupplierPayableOverrideStore::class);
@@ -655,7 +715,7 @@ class SupplierReconciliationTest extends FeatureTestCase
'supplier' => '晨丰',
]))->assertOk();
- $page()->assertSeeText('合计扣减 ¥2,653.00');
+ $page()->assertSeeText('退货金额')->assertSeeText('¥2,653.00');
$this->loginAs()
->post(route('business.supplier-reconciliation.return.confirm'), ['supplier' => '晨丰', 'key' => 'return:1'])