From b49d23d090bc4cdd5056e206a3b4b21fa1f29212 Mon Sep 17 00:00:00 2001 From: limeng <1131177064@qq.com> Date: Sat, 17 Oct 2026 21:49:09 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BE=9B=E5=BA=94=E5=95=86=E9=85=8D=E4=BB=B6?= =?UTF-8?q?=E8=BF=90=E8=B4=B9=EF=BC=9A=E5=A4=96=E9=87=87=E5=BF=AB=E9=80=92?= =?UTF-8?q?=E4=B8=8D=E6=89=A3=E6=AC=BE=20(#385)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/供应商配件运费扣除.md | 2 +- .../SupplierAccessoryFreightMatcher.php | 13 +++++++++++++ .../accessory-freight-deductions.blade.php | 2 +- tests/Unit/SupplierAccessoryFreightTest.php | 18 ++++++++++++++++++ 4 files changed, 33 insertions(+), 2 deletions(-) diff --git a/docs/供应商配件运费扣除.md b/docs/供应商配件运费扣除.md index 0042bfb6..812374b0 100644 --- a/docs/供应商配件运费扣除.md +++ b/docs/供应商配件运费扣除.md @@ -4,7 +4,7 @@ 按业务月份读取发货数据,仓库固定为“常州简尚家居有限公司”。沿用配件补发扣款的包裹合并及条形码规则:按 `source_id` 合并运费,按明细顺序取第一个逗号前的条形码,删除最后一个 `-` 及其后缀。 -处理后的条形码匹配普通商品资料 `sku_id`,使用商品的 `supplier_name` 精确匹配供应商管理的 `scmname`,读取 `linkerprovience`(联系人省)。山东、山东省统一为山东;河北、河北省统一为河北。只有这两个省份扣除对应包裹全部运费,其他省份不扣,不套用快递扣款比例,也不要求匹配首发快递。 +处理后的条形码匹配普通商品资料 `sku_id`,使用商品的 `supplier_name` 精确匹配供应商管理的 `scmname`,读取 `linkerprovience`(联系人省)。山东、山东省统一为山东;河北、河北省统一为河北。只有这两个省份扣除对应包裹全部运费,快递名称1或快递名称2为“外采快递”时优先不扣款,保留已匹配的供应商资料,说明为“外采快递不扣配件运费”。其他省份不扣,不套用快递扣款比例,也不要求匹配首发快递。 未匹配商品、商品未维护供应商、未匹配供应商档案、联系人省缺失、供应商或省份冲突、运费无效,均列为待核实,扣款额为零。同一条形码的多条商品记录若供应商相同,或同一供应商多份档案的省份经上述归一后一致,只计算一笔运费。零运费列为不扣款。金额按整数分汇总,页面和导出口径一致。 diff --git a/modules/EcommerceFinance/Services/SupplierAccessoryFreightMatcher.php b/modules/EcommerceFinance/Services/SupplierAccessoryFreightMatcher.php index 8d91572e..49ababc5 100644 --- a/modules/EcommerceFinance/Services/SupplierAccessoryFreightMatcher.php +++ b/modules/EcommerceFinance/Services/SupplierAccessoryFreightMatcher.php @@ -7,6 +7,19 @@ class SupplierAccessoryFreightMatcher public const STATES = ['ready' => '可扣款', 'excluded' => '不扣款', 'pending' => '待核实']; public function match(array $row, array $products, array $suppliers): array + { + $result = $this->matchSupplier($row, $products, $suppliers); + foreach (['express_name1', 'express_name2'] as $field) { + if (trim((string) ($row[$field] ?? '')) !== '外采快递') continue; + $result['state'] = 'excluded'; + $result['deduction_cents'] = 0; + $result['reason'] = '外采快递不扣配件运费'; + break; + } + return $result; + } + + private function matchSupplier(array $row, array $products, array $suppliers): array { $barcode = AccessoryReshipMatcher::barcode((string) ($row['barcode'] ?? '')); $row = array_merge($row, ['normalized_barcode' => $barcode, 'product_name' => '', 'supplier_name' => '', diff --git a/resources/views/business/pages/supplier-payables/accessory-freight-deductions.blade.php b/resources/views/business/pages/supplier-payables/accessory-freight-deductions.blade.php index ba44ae5f..c11f253a 100644 --- a/resources/views/business/pages/supplier-payables/accessory-freight-deductions.blade.php +++ b/resources/views/business/pages/supplier-payables/accessory-freight-deductions.blade.php @@ -21,7 +21,7 @@
仅取所选月份仓库为“常州简尚家居有限公司”的发货包裹。取第一个逗号前的条形码,再去掉最后一个“-”及其后缀,用处理后的条形码匹配商品资料条形码,再按商品供应商名称匹配供应商管理。联系人省为山东、山东省、河北、河北省的供应商,扣除对应包裹全部运费。每个发货包裹只计一次;不需要匹配首发单。其他省份不扣,未匹配、资料缺失、供应商或省份冲突、运费异常的记录待核实。此处展示扣除明细,不自动入账。
仅取所选月份仓库为“常州简尚家居有限公司”的发货包裹。取第一个逗号前的条形码,再去掉最后一个“-”及其后缀,用处理后的条形码匹配商品资料条形码,再按商品供应商名称匹配供应商管理。联系人省为山东、山东省、河北、河北省的供应商,扣除对应包裹全部运费。每个发货包裹只计一次;不需要匹配首发单。外采快递不扣运费;其他省份不扣,未匹配、资料缺失、供应商或省份冲突、运费异常的记录待核实。此处展示扣除明细,不自动入账。