商品成本:支持 MKH 组合装拆分 (#466)
This commit is contained in:
parent
acab9b2905
commit
ee9205dca7
@ -37,6 +37,9 @@ class SyncStoreReceiptProductCost extends Command
|
||||
/** 套餐 / 服务占位编码:不是实物商品,商品成本不取数。 */
|
||||
private const EXCLUDED_SKUS = ['TCXJ', 'FUWU', 'AZF'];
|
||||
|
||||
/** 组合装条码前缀;条码结构为「前缀-组件条码-数量-组件条码-数量」。 */
|
||||
private const COMBO_PREFIXES = ['ZH-', 'MKH-'];
|
||||
|
||||
/**
|
||||
* 发货仓库黑名单:这些仓不是实际销售发货仓,整仓不参与商品成本;
|
||||
* 例外:常州简尚家居有限公司里商品编码以 DF- 开头的行保留。
|
||||
@ -247,7 +250,7 @@ class SyncStoreReceiptProductCost extends Command
|
||||
}
|
||||
}
|
||||
|
||||
// 组合装条码(ZH-条码-数量-条码-数量)按子订单拆成组件行:
|
||||
// 组合装条码(ZH-/MKH-条码-数量-条码-数量)按子订单拆成组件行:
|
||||
// 一个订单有几个发货仓库、商品编码、数量就分开列,组件数量 = 明细数量 × 组件倍数。
|
||||
// 解析不了的组合条码(条码被截断等)保持原样,避免丢行。
|
||||
foreach (self::expandComboSku($sku, $qty) as [$code, $codeQty, $isComponent]) {
|
||||
@ -487,6 +490,7 @@ class SyncStoreReceiptProductCost extends Command
|
||||
/**
|
||||
* 组合装条码拆组件:聚水潭的组合装 sku 形如
|
||||
* ZH-<条码>-<数量>[-<条码>-<数量>...]
|
||||
* MKH-<条码>-<数量>[-<条码>-<数量>...]
|
||||
* 条码本身含横杠,所以按「纯数字段」识别数量,再按组件展开。
|
||||
*
|
||||
* 返回 [条码, 数量, 是否组件];非组合装或解析失败时返回原条码 / 原数量。
|
||||
@ -495,11 +499,18 @@ class SyncStoreReceiptProductCost extends Command
|
||||
*/
|
||||
private static function expandComboSku(string $sku, float $quantity): array
|
||||
{
|
||||
if (! str_starts_with(mb_strtoupper($sku), 'ZH-')) {
|
||||
$prefix = null;
|
||||
foreach (self::COMBO_PREFIXES as $candidate) {
|
||||
if (str_starts_with(mb_strtoupper($sku), $candidate)) {
|
||||
$prefix = $candidate;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if ($prefix === null) {
|
||||
return [[$sku, $quantity, false]];
|
||||
}
|
||||
|
||||
$parts = explode('-', substr($sku, 3));
|
||||
$parts = explode('-', substr($sku, strlen($prefix)));
|
||||
$components = [];
|
||||
$buffer = [];
|
||||
foreach ($parts as $part) {
|
||||
|
||||
@ -113,6 +113,7 @@
|
||||
(采购单价优先、其次钉钉代发单价),仍匹配不到时用「普通商品资料」里的商品成本价兜底;商品成本 = 商品数量 × 商品单价。
|
||||
拆单只取最末级订单行(没有任何下级的叶子行),主单和中间汇总层不参与、避免重复计数;
|
||||
同一单分多仓发货的按末级实际仓库分行;虚拟条码(X0000x)不计入;
|
||||
ZH-、MKH- 开头的组合装按「组件条码 + 数量」拆分,无法解析的组合装保留原编码;
|
||||
套餐/服务占位编码 TCXJ、FUWU、AZF 不取数(组合装里拆出的这些编码同样剔除)。
|
||||
发货仓库默认排除「常州简尚家居有限公司」「简尚-苏州福利品仓」「简尚-自动发货仓」,
|
||||
其中常州简尚家居有限公司的「DF-」商品行例外保留;先排除 TCXJ/FU WU/AZF,再执行仓库过滤。
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user