fix(发货数据): 快递名称以出库单/发货明细当前值为准,发货数据视图仅兜底

- 聚水潭换单、改快递公司后,出库单、发货明细、订单的快递公司都会更新(如 崔桥顺丰干配→常州德邦、德邦快递→申通E物流),
  工作平台随之显示新值;发货数据视图的 expressName 却停在旧值。此前优先取视图,9 月 111 个包裹快递名称与工作平台不一致。
- 改为:快递名称取出库单/发货明细当前值,视图只在两者都没有时兜底;仓库仍按视图 wareHoursName。

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014nvGZkg27YMEdhRy6EiUwf
This commit is contained in:
limeng 2026-10-19 11:56:41 +08:00
parent 13d54d0c76
commit 1d94df969f
2 changed files with 8 additions and 4 deletions

View File

@ -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])) {

View File

@ -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));