diff --git a/config/upstream_mirrors.php b/config/upstream_mirrors.php index b978027e..9d98f91b 100644 --- a/config/upstream_mirrors.php +++ b/config/upstream_mirrors.php @@ -422,6 +422,7 @@ return [ 'wide_strings' => true, 'indexes' => [ ['undefined8', 'undefined7'], + ['undefined1'], ['undefined2'], ['undefined10'], ], diff --git a/modules/EcommerceFinance/Repositories/GoodsProfitAfsRepository.php b/modules/EcommerceFinance/Repositories/GoodsProfitAfsRepository.php index 198e4fcc..0106d199 100644 --- a/modules/EcommerceFinance/Repositories/GoodsProfitAfsRepository.php +++ b/modules/EcommerceFinance/Repositories/GoodsProfitAfsRepository.php @@ -95,7 +95,7 @@ class GoodsProfitAfsRepository // 单号查询走各自列的索引,避免 undefined2 OR undefined1 触发全表扫描。 if ($orderNo !== '') { - foreach (['online_order_no', 'internal_order_no'] as $field) { + foreach ($this->orderNumberFields($orderNo) as $field) { if (! isset($columns[$field])) { continue; } @@ -183,7 +183,7 @@ class GoodsProfitAfsRepository $records = []; $cap = max($limit * 4, 400); - foreach (['online_order_no', 'internal_order_no'] as $field) { + foreach ($this->orderNumberFields($orderNo) as $field) { if (! isset($columns[$field])) { continue; } @@ -345,4 +345,17 @@ class GoodsProfitAfsRepository return trim($label); } + + /** + * 线上订单号和内部订单号长度差很多(19 位 vs 7~8 位)。长单号只查线上订单号, + * 避免用内部订单号列做 `like '长单号%'` 的全表扫描。 + * + * @return list + */ + private function orderNumberFields(string $orderNo): array + { + return mb_strlen($orderNo) >= 12 + ? ['online_order_no'] + : ['online_order_no', 'internal_order_no']; + } }