diff --git a/modules/EcommerceFinance/Repositories/OrderDataMirrorRepository.php b/modules/EcommerceFinance/Repositories/OrderDataMirrorRepository.php index 4c37ecf1..7de8c475 100644 --- a/modules/EcommerceFinance/Repositories/OrderDataMirrorRepository.php +++ b/modules/EcommerceFinance/Repositories/OrderDataMirrorRepository.php @@ -495,7 +495,8 @@ class OrderDataMirrorRepository $shopNames = $this->selectedShopNames($filters); if ($shopNames !== []) { - $known = (array) Cache::get(self::SHOP_NAMES_CACHE_KEY, []); + // A release clears the complete cache; the small shop directory remains valid. + $known = $this->shopNames(); if (! empty($filters['shop_names_exact']) && array_diff($shopNames, $known) === []) { $query->whereIn('o.shop_name', $shopNames); } else { diff --git a/tests/Unit/EcommerceFinance/OrderDataMirrorRepositoryTest.php b/tests/Unit/EcommerceFinance/OrderDataMirrorRepositoryTest.php index 25c52e14..451ff867 100644 --- a/tests/Unit/EcommerceFinance/OrderDataMirrorRepositoryTest.php +++ b/tests/Unit/EcommerceFinance/OrderDataMirrorRepositoryTest.php @@ -141,6 +141,16 @@ class OrderDataMirrorRepositoryTest extends TestCase $selected = $repository->afterSales(array_replace($base, ['shop_names' => ['拼多多-甲店'], 'shop_names_exact' => true]), 1, 25); $this->assertSame(['拼多多-甲店'], $this->sortedShops($selected['rows'])); $this->assertDoesNotMatchRegularExpression('/shop_name\s+LIKE/i', collect($db->getQueryLog())->pluck('query')->implode("\n")); + + Cache::forget(OrderDataMirrorRepository::SHOP_NAMES_CACHE_KEY); + $db->table('ops_jst_shop_info')->insert(['shop_id' => 1, 'shop_name' => '拼多多-甲店']); + $db->flushQueryLog(); + $selected = $repository->afterSales(array_replace($base, ['shop_names' => ['拼多多-甲店'], 'shop_names_exact' => true]), 1, 25); + $this->assertSame(['拼多多-甲店'], $this->sortedShops($selected['rows'])); + $this->assertDoesNotMatchRegularExpression('/shop_name\s+LIKE/i', collect($db->getQueryLog())->pluck('query')->implode("\n")); + // Array inputs containing partial names still retain the original contains semantics. + $partial = $repository->afterSales(array_replace($base, ['shop_names' => ['甲店'], 'shop_names_exact' => true]), 1, 25); + $this->assertSame(['拼多多-甲店'], $this->sortedShops($partial['rows'])); } public function test_shop_names_lists_distinct_shops_from_the_order_mirror(): void