diff --git a/app/Console/Commands/SyncStoreReceiptProductCost.php b/app/Console/Commands/SyncStoreReceiptProductCost.php index 23ad2683..73092168 100644 --- a/app/Console/Commands/SyncStoreReceiptProductCost.php +++ b/app/Console/Commands/SyncStoreReceiptProductCost.php @@ -275,9 +275,7 @@ class SyncStoreReceiptProductCost extends Command foreach ($billByCore as $core => $bill) { foreach ($this->costLines($lines[$core] ?? []) as $line) { - $short = $shortNames['by_warehouse'][$line['warehouse']] - ?? $shortNames['by_provider'][$line['warehouse']] - ?? ''; + $short = $shortNames['by_provider'][$line['warehouse']] ?? ''; $price = $short !== '' ? ($prices[$short . "\0" . $line['sku']] ?? null) : null; $priceSource = $price === null ? null : self::PRICE_SOURCE_WEIGHTED; // 月加权平均单价按「仓库简称 + 商品编码」匹配不到时,退回线上代发价格(按商品编码)。 @@ -490,7 +488,6 @@ class SyncStoreReceiptProductCost extends Command private function warehouseShortNames(): array { $byProvider = []; - $byWarehouse = []; foreach (DB::table(self::WAREHOUSE_MAPPING_TABLE) ->get(['warehouse_provider', 'warehouse', 'warehouse_short_name']) as $mapping) { $provider = trim((string) $mapping->warehouse_provider); @@ -499,19 +496,24 @@ class SyncStoreReceiptProductCost extends Command if ($short === '') { continue; } - if ($warehouse !== '' && ! isset($byWarehouse[$warehouse])) { - $byWarehouse[$warehouse] = $short; - } if ($provider === '') { continue; } + // 只认「仓储方 + 仓库含主仓」的那条:发货仓库是仓储方级别的名称, + // 次品仓 / 销退仓 / 客退仓这些行的简称(多为「-不看」)不能套到主仓发货上。 $isMain = str_contains($warehouse, '主仓'); - if ($isMain || ! isset($byProvider[$provider])) { + if ($isMain) { + $byProvider[$provider] = $short; + continue; + } + // 映射表没有主仓行时,仅接受「仓库名 = 仓储方名」这种同名仓库(如重庆渝北仓), + // 其余(次品仓、配件单仓等)不再兜底,避免把主仓订单误判成不看仓。 + if ($warehouse === $provider && ! isset($byProvider[$provider])) { $byProvider[$provider] = $short; } } - return ['by_provider' => $byProvider, 'by_warehouse' => $byWarehouse]; + return ['by_provider' => $byProvider]; } /** diff --git a/resources/views/business/pages/financial-operations/product-costs.blade.php b/resources/views/business/pages/financial-operations/product-costs.blade.php index 3949b202..0d6f3239 100644 --- a/resources/views/business/pages/financial-operations/product-costs.blade.php +++ b/resources/views/business/pages/financial-operations/product-costs.blade.php @@ -114,7 +114,8 @@
口径:以「业绩明细」的账单行为基数(发生时间 / 店铺名称 / 线上单号),按「店铺 + 线上订单号」展开订单侧商品行, 只取收入金额有数据且不为 0 的账单行,「种菜金额」有数据(>0)的账单行整条排除、不参与匹配; - 一行 = 一个发货仓库的一个商品;发货仓库取订单的聚水潭仓库名称,仓库简称查仓库映射表, + 一行 = 一个发货仓库的一个商品;发货仓库取订单的聚水潭仓库名称, + 仓库简称按仓库映射表用「仓储方」匹配「仓库名含主仓」的那条取简称(没有主仓行时只认同名仓库), 商品单价按「仓库简称 + 商品编码」取「商品月加权平均单价」里的加权平均价;匹配不到时退回「线上代发价格」 (采购单价优先、其次钉钉代发单价),仍匹配不到时用「普通商品资料」里的商品成本价兜底;商品成本 = 商品数量 × 商品单价。 拆单子单重复列出的同一批商品只算一次,同一单分多仓发货的按子单实际仓库分行;虚拟条码(X0000x)不计入;