From fb3845ec64a91cea29793e5ea26987bd3f7cb7e7 Mon Sep 17 00:00:00 2001 From: renshen <1005457301@qq.com> Date: Mon, 26 Oct 2026 11:27:29 +0800 Subject: [PATCH] =?UTF-8?q?=E9=95=BF=E5=8D=95=E5=8F=B7=E8=B7=B3=E8=BF=87?= =?UTF-8?q?=E5=86=85=E9=83=A8=E5=8D=95=E5=8F=B7=E7=B4=A2=E5=BC=95=20(#581)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 避免长线上单号误扫整月内部单号索引 --- .../AfterSalesCostRowRepository.php | 25 +++++++++++++++++-- 1 file changed, 23 insertions(+), 2 deletions(-) diff --git a/modules/EcommerceFinance/Repositories/AfterSalesCostRowRepository.php b/modules/EcommerceFinance/Repositories/AfterSalesCostRowRepository.php index 2c64e266..76a8664b 100644 --- a/modules/EcommerceFinance/Repositories/AfterSalesCostRowRepository.php +++ b/modules/EcommerceFinance/Repositories/AfterSalesCostRowRepository.php @@ -16,6 +16,7 @@ use Illuminate\Support\Facades\Schema; class AfterSalesCostRowRepository { private const TABLE = 'ops_after_sales_cost_rows'; + private const INTERNAL_ORDER_MAX_PREFIX_LENGTH = 11; private ?bool $available = null; @@ -316,7 +317,12 @@ class AfterSalesCostRowRepository $ids = []; foreach (['online_order_no', 'internal_order_no'] as $field) { - $query = $this->orderNumberBranch($baseFilters, $field, $values) + $fieldValues = self::orderValuesForField($field, $values); + if ($fieldValues === []) { + continue; + } + + $query = $this->orderNumberBranch($baseFilters, $field, $fieldValues) ->select('id') ->limit($cap); @@ -358,7 +364,9 @@ class AfterSalesCostRowRepository $baseFilters = array_replace($filters, ['order_no' => '']); foreach (['online_order_no', 'internal_order_no'] as $field) { - if ($this->orderNumberBranch($baseFilters, $field, $values)->limit(1)->exists()) { + $fieldValues = self::orderValuesForField($field, $values); + if ($fieldValues !== [] + && $this->orderNumberBranch($baseFilters, $field, $fieldValues)->limit(1)->exists()) { return true; } } @@ -496,6 +504,19 @@ class AfterSalesCostRowRepository return str_replace(['!', '%', '_'], ['!!', '!%', '!_'], trim($value)) . '%'; } + /** @param list $values @return list */ + private static function orderValuesForField(string $field, array $values): array + { + if ($field !== 'internal_order_no') { + return $values; + } + + return array_values(array_filter( + $values, + static fn (string $value): bool => mb_strlen($value) <= self::INTERNAL_ORDER_MAX_PREFIX_LENGTH, + )); + } + /** @return list */ private static function batchValues(string $value): array {