diff --git a/app/Console/Commands/SyncStoreReceiptProductCost.php b/app/Console/Commands/SyncStoreReceiptProductCost.php index 499ba0f8..6241ec7d 100644 --- a/app/Console/Commands/SyncStoreReceiptProductCost.php +++ b/app/Console/Commands/SyncStoreReceiptProductCost.php @@ -34,6 +34,9 @@ class SyncStoreReceiptProductCost extends Command /** 虚拟条码(信誉订单/虚拟订单)不是真实商品,不计入商品成本。 */ private const VIRTUAL_SKU_PREFIX = 'X0000'; + /** 套餐 / 服务占位编码:不是实物商品,商品成本不取数。 */ + private const EXCLUDED_SKUS = ['TCXJ', 'FUWU']; + private const REMARK_NO_WAREHOUSE = '未匹配仓库简称'; private const REMARK_NO_PRICE = '未匹配商品单价'; @@ -171,6 +174,7 @@ class SyncStoreReceiptProductCost extends Command /** @var array> $lines */ $lines = []; + $excludedSkuSql = "'" . implode("','", self::EXCLUDED_SKUS) . "'"; foreach (self::SOURCES as $source) { try { $rows = $mirror->select( @@ -184,7 +188,8 @@ class SyncStoreReceiptProductCost extends Command STRAIGHT_JOIN {$source['orders']} o ON o.so_id = t.no STRAIGHT_JOIN {$source['items']} i ON i.o_id = o.o_id LEFT JOIN ops_jst_warehouse_info wh ON wh.wms_co_id = o.wms_co_id - WHERE COALESCE(i.sku_id, '') NOT LIKE 'X0000%'" + WHERE COALESCE(i.sku_id, '') NOT LIKE 'X0000%' + AND UPPER(TRIM(COALESCE(i.sku_id, ''))) NOT IN ({$excludedSkuSql})" ); } catch (Throwable $exception) { $this->error('订单明细查询失败(' . $source['items'] . '):' . $exception->getMessage()); @@ -459,10 +464,14 @@ class SyncStoreReceiptProductCost extends Command $expanded = []; foreach ($components as [$code, $multiplier]) { + // 组合装里如果拆出套餐/服务占位编码,同样不取数。 + if (in_array(mb_strtoupper(trim($code)), self::EXCLUDED_SKUS, true)) { + continue; + } $expanded[] = [$code, $quantity * $multiplier, true]; } - return $expanded; + return $expanded === [] ? [] : $expanded; } /** 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 0c7d3377..e2326cab 100644 --- a/resources/views/business/pages/financial-operations/product-costs.blade.php +++ b/resources/views/business/pages/financial-operations/product-costs.blade.php @@ -116,7 +116,8 @@ 只取收入金额有数据且不为 0 的账单行,一行 = 一个发货仓库的一个商品;发货仓库取订单的聚水潭仓库名称,仓库简称查仓库映射表, 商品单价按「仓库简称 + 商品编码」取「商品月加权平均单价」里的加权平均价;匹配不到时退回「线上代发价格」 (采购单价优先、其次钉钉代发单价),仍匹配不到时用「普通商品资料」里的商品成本价兜底;商品成本 = 商品数量 × 商品单价。 - 拆单子单重复列出的同一批商品只算一次,同一单分多仓发货的按子单实际仓库分行;虚拟条码(X0000x)不计入。 + 拆单子单重复列出的同一批商品只算一次,同一单分多仓发货的按子单实际仓库分行;虚拟条码(X0000x)不计入; + 套餐/服务占位编码 TCXJ、FUWU 不取数(组合装里拆出的这两个编码同样剔除)。 定制配件这类明细行,聚水潭把配件件数写进了「商品数量」(例如数量 9524、金额 2000.04,实际单价 0.21), 乘成品的月加权/代发单价会放大几百倍;成本单价高于该行明细单价 3 倍时判为「数量与单价口径不一致」,成本留空、不计入合计。 仓库映射表里标记为「-不看」的仓库(次品 / 销退 / 虚拟 / 信誉订单 / 京东云仓等)默认不展示,