From 661fbca7d3daf3e643bf5a3f3ea113d9b8881dcf Mon Sep 17 00:00:00 2001 From: renshen <1005457301@qq.com> Date: Wed, 4 Nov 2026 09:31:01 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=BE=9B=E5=BA=94=E5=95=86=E5=AF=B9?= =?UTF-8?q?=E8=B4=A6=E6=97=A5=E6=9C=9F=E5=AE=B9=E5=B7=AE=E8=B0=83=E6=95=B4?= =?UTF-8?q?=E4=B8=BA=E4=B8=80=E5=91=A8=20(#846)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Services/SupplierStatementMatcher.php | 6 +++--- .../supplier-reconciliation/finance-data.blade.php | 2 +- .../SupplierStatementMatcherTest.php | 12 ++++++------ 3 files changed, 10 insertions(+), 10 deletions(-) diff --git a/modules/EcommerceFinance/Services/SupplierStatementMatcher.php b/modules/EcommerceFinance/Services/SupplierStatementMatcher.php index e418c908..dc130439 100644 --- a/modules/EcommerceFinance/Services/SupplierStatementMatcher.php +++ b/modules/EcommerceFinance/Services/SupplierStatementMatcher.php @@ -8,7 +8,7 @@ use Carbon\CarbonImmutable; * 厂家对账单 vs 我方结算数据: * - 行键 = 采购单号 + 日期 + 我方商品编码(对应厂家条码去掉厂家编号/版本后缀); * - 同一行键的多行先合并数量与金额,再比较双方数量和金额; - * - 严格行键未匹配时,采购单号+商品编码一致、数量金额一致且日期相差不超过 2 天,仍按一致处理; + * - 严格行键未匹配时,采购单号+商品编码一致、数量金额一致且日期相差不超过 7 天,仍按一致处理; * - 厂家未填采购单号时,仅在同日期+商品编码能唯一对应我方一条数据时兜底匹配。 */ class SupplierStatementMatcher @@ -24,7 +24,7 @@ class SupplierStatementMatcher /** 厂家条码后缀:供应商编号 + 版本,如 N1097V01、N1269V01。 */ private const SUPPLIER_SUFFIX = '/[A-Z]{1,3}\d{3,6}V\d{1,3}$/i'; - private const DATE_TOLERANCE_DAYS = 2; + private const DATE_TOLERANCE_DAYS = 7; /** * @param list> $mine 我方数据(purchaseNo/date/productCode/unitPrice/qty/amount;productCode 为空才回退货号) @@ -257,7 +257,7 @@ class SupplierStatementMatcher /** * 严格键未匹配时,仅对同采购单号、同商品编码、数量金额一致且日期相差 - * 不超过 2 天的记录做一对一容错配对。 + * 不超过 7 天的记录做一对一容错配对。 * * @param array> $mine * @param array> $theirs diff --git a/resources/views/business/pages/supplier-reconciliation/finance-data.blade.php b/resources/views/business/pages/supplier-reconciliation/finance-data.blade.php index eb6028ae..6f23a06a 100644 --- a/resources/views/business/pages/supplier-reconciliation/finance-data.blade.php +++ b/resources/views/business/pages/supplier-reconciliation/finance-data.blade.php @@ -119,7 +119,7 @@ @endif

比对口径:优先按「采购单号 + 日期 + 商品编码」核对,以我方货款对账的“商品编码”匹配厂家条码;同一采购单号、日期和商品编码的多行先合并数量与金额。 - 日期未对上时,如采购单号+商品编码一致、数量金额一致且日期相差不超过 2 天,仍按一致处理。
+ 日期未对上时,如采购单号+商品编码一致、数量金额一致且日期相差不超过 7 天,仍按一致处理。
数量、金额一致 → 正常结算;厂家多(我方没有)→ 不结算、退回修改; 数量或金额不一致 → 明确列出双方数量、单价、金额及厂家多算部分,取金额低的一方结算; 厂家少(我方有)→ 按厂家数据结算(不付款)。厂家未填采购单号时,仅在同日期+商品编码能唯一匹配我方一条数据时兜底。
diff --git a/tests/Unit/EcommerceFinance/SupplierStatementMatcherTest.php b/tests/Unit/EcommerceFinance/SupplierStatementMatcherTest.php index a288455e..b10edc37 100644 --- a/tests/Unit/EcommerceFinance/SupplierStatementMatcherTest.php +++ b/tests/Unit/EcommerceFinance/SupplierStatementMatcherTest.php @@ -7,7 +7,7 @@ use Tests\TestCase; class SupplierStatementMatcherTest extends TestCase { - public function test_two_day_date_difference_matches_when_purchase_barcode_quantity_and_amount_match(): void + public function test_seven_day_date_difference_matches_when_purchase_barcode_quantity_and_amount_match(): void { $mine = [[ 'purchaseNo' => '879735', @@ -20,7 +20,7 @@ class SupplierStatementMatcherTest extends TestCase ]]; $theirs = [[ 'purchaseNo' => '879735', - 'createdAt' => '2026-09-12', + 'createdAt' => '2026-09-17', 'barcode' => 'DNZ033609N1097V01', 'unitPrice' => '100', 'qty' => '20', @@ -35,11 +35,11 @@ class SupplierStatementMatcherTest extends TestCase $this->assertSame(0, $result['summary']['mismatch']); $this->assertSame(0.0, $result['summary']['differenceAmount']); $this->assertSame(2000.0, $result['summary']['settleAmount']); - $this->assertSame(2, $result['rows'][0]['dateToleranceDays']); - $this->assertStringContainsString('日期相差 2 天', $result['rows'][0]['note']); + $this->assertSame(7, $result['rows'][0]['dateToleranceDays']); + $this->assertStringContainsString('日期相差 7 天', $result['rows'][0]['note']); } - public function test_date_difference_over_two_days_remains_a_difference(): void + public function test_date_difference_over_seven_days_remains_a_difference(): void { $mine = [[ 'purchaseNo' => '879735', @@ -50,7 +50,7 @@ class SupplierStatementMatcherTest extends TestCase ]]; $theirs = [[ 'purchaseNo' => '879735', - 'createdAt' => '2026-09-13', + 'createdAt' => '2026-09-18', 'barcode' => 'DNZ033609N1097V01', 'qty' => '20', 'amount' => '2000',