From 1d94df969f512941b722a4062e20409b0dec706b Mon Sep 17 00:00:00 2001 From: limeng <1131177064@qq.com> Date: Mon, 19 Oct 2026 11:56:41 +0800 Subject: [PATCH] =?UTF-8?q?fix(=E5=8F=91=E8=B4=A7=E6=95=B0=E6=8D=AE):=20?= =?UTF-8?q?=E5=BF=AB=E9=80=92=E5=90=8D=E7=A7=B0=E4=BB=A5=E5=87=BA=E5=BA=93?= =?UTF-8?q?=E5=8D=95/=E5=8F=91=E8=B4=A7=E6=98=8E=E7=BB=86=E5=BD=93?= =?UTF-8?q?=E5=89=8D=E5=80=BC=E4=B8=BA=E5=87=86=EF=BC=8C=E5=8F=91=E8=B4=A7?= =?UTF-8?q?=E6=95=B0=E6=8D=AE=E8=A7=86=E5=9B=BE=E4=BB=85=E5=85=9C=E5=BA=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 聚水潭换单、改快递公司后,出库单、发货明细、订单的快递公司都会更新(如 崔桥顺丰干配→常州德邦、德邦快递→申通E物流), 工作平台随之显示新值;发货数据视图的 expressName 却停在旧值。此前优先取视图,9 月 111 个包裹快递名称与工作平台不一致。 - 改为:快递名称取出库单/发货明细当前值,视图只在两者都没有时兜底;仓库仍按视图 wareHoursName。 Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_014nvGZkg27YMEdhRy6EiUwf --- .../Services/Jushuitan/ShippingReplicaSynchronizer.php | 7 ++++--- .../EcommerceFinance/ShippingReplicaSynchronizerTest.php | 5 ++++- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/modules/EcommerceFinance/Services/Jushuitan/ShippingReplicaSynchronizer.php b/modules/EcommerceFinance/Services/Jushuitan/ShippingReplicaSynchronizer.php index 097a0e9b..f55fdfe8 100644 --- a/modules/EcommerceFinance/Services/Jushuitan/ShippingReplicaSynchronizer.php +++ b/modules/EcommerceFinance/Services/Jushuitan/ShippingReplicaSynchronizer.php @@ -1292,15 +1292,16 @@ class ShippingReplicaSynchronizer } /** - * 工作平台的快递名称/仓库即发货数据视图的 expressName / wareHoursName(抽样 14/14 一致): - * 视图有值时以视图为准;视图无该出库单时保留出库单/发货明细推断的值。 + * 仓库以发货数据视图的 wareHoursName 为准(工作平台口径);快递名称以出库单/发货明细当前值为准,视图仅兜底。 */ private function withViewCarrier(string $io, array $pkg, int $pkgId): array { if ($io === '') { return $pkg; } - if (! empty($this->ioExpress[$io])) { + // 快递名称以出库单/发货明细的当前值为准:聚水潭换单、改快递公司后出库单与发货明细会更新,工作平台跟着变, + // 发货数据视图的 expressName 却停在旧值(如 崔桥顺丰干配→常州德邦)。视图只在出库单/发货明细没有快递名称时兜底。 + if (trim((string) ($pkg['express_name1'] ?? '')) === '' && ! empty($this->ioExpress[$io])) { $pkg['express_name1'] = $this->ioExpress[$io]; } if (! empty($this->ioWare[$io])) { diff --git a/tests/Unit/EcommerceFinance/ShippingReplicaSynchronizerTest.php b/tests/Unit/EcommerceFinance/ShippingReplicaSynchronizerTest.php index 9fd60ebe..41fafcc6 100644 --- a/tests/Unit/EcommerceFinance/ShippingReplicaSynchronizerTest.php +++ b/tests/Unit/EcommerceFinance/ShippingReplicaSynchronizerTest.php @@ -1300,8 +1300,11 @@ class ShippingReplicaSynchronizerTest extends TestCase $carrier->setAccessible(true); // 视图有值:快递名称、仓库按视图(工作平台口径),不再按发货主体回填 + // 快递名称:出库单/发货明细已有当前值(换单后)时不被视图旧值覆盖;没有时用视图兜底 $pkg = $carrier->invoke($sync, '12', ['express_name1' => '崔桥顺丰干配', 'warehouse_name' => '工厂-河北浩浦代发仓'], 1); - $this->assertSame('常州德邦', $pkg['express_name1']); + $this->assertSame('崔桥顺丰干配', $pkg['express_name1']); + $blank = $carrier->invoke($sync, '12', ['express_name1' => '', 'warehouse_name' => ''], 5); + $this->assertSame('常州德邦', $blank['express_name1']); $this->assertSame('工厂-河南千优代发仓', $pkg['warehouse_name']); $this->assertArrayNotHasKey(1, $pending->getValue($sync));