feat(cost-center): 人工 SKU 配置自动同步商品与订单
This commit is contained in:
@@ -28,6 +28,8 @@ test(
|
||||
switchChannelForOrderItems,
|
||||
upsertChannelRule,
|
||||
} = await import('./channel-assign-service.js')
|
||||
const { saveManualFulfillmentConfig } =
|
||||
await import('../cost-center/manual-fulfillment-config-service.js')
|
||||
const { runAffiliateFallback } = await import('./affiliate-fallback-service.js')
|
||||
const {
|
||||
deleteInternalSkuMapping,
|
||||
@@ -44,6 +46,7 @@ test(
|
||||
const voucherSku = `集成测试卡券-${suffix}`
|
||||
const triggerSku = `集成测试规范-${suffix}`
|
||||
const fallbackSku = `集成测试兜底-${suffix}`
|
||||
const autoManualSku = `集成测试自动人工-${suffix}`
|
||||
const orderIds: number[] = []
|
||||
const orderItemIds: number[] = []
|
||||
const crossShopSku = `集成测试跨店-${suffix}`
|
||||
@@ -54,8 +57,10 @@ test(
|
||||
crossShopSku,
|
||||
triggerSku,
|
||||
fallbackSku,
|
||||
autoManualSku,
|
||||
]
|
||||
let generatedVoucherProductId: number | null = null
|
||||
let autoManualProductId: number | null = null
|
||||
let fallbackProfileId: number | null = null
|
||||
|
||||
async function createPendingOrderItem(
|
||||
@@ -248,6 +253,39 @@ test(
|
||||
assert.equal(pendingItem.rows[0]?.fulfillment_channel, null)
|
||||
assert.equal(pendingItem.rows[0]?.fulfillment_pending_reason, 'no_carrier')
|
||||
|
||||
const autoManualItemId = await createPendingOrderItem(autoManualSku)
|
||||
const missingManual = await assignChannelByInternalSku({
|
||||
internalSku: autoManualSku,
|
||||
channel: 'manual',
|
||||
adminUserId: null,
|
||||
note: '集成测试缺人工配置',
|
||||
})
|
||||
assert.equal(missingManual.updated, 0)
|
||||
assert.equal(missingManual.carrierFailed, 1)
|
||||
const savedManual = await saveManualFulfillmentConfig({
|
||||
skuKey: autoManualSku,
|
||||
platformKey: 'fund_cash',
|
||||
creditQuantity: 69,
|
||||
note: '集成测试一次配置',
|
||||
})
|
||||
autoManualProductId = Number(savedManual.canonicalProductId || 0) || null
|
||||
assert.ok(autoManualProductId)
|
||||
assert.ok(savedManual.syncSummary.pendingAssigned >= 1)
|
||||
const autoManualItem = await query<{
|
||||
fulfillment_status: string
|
||||
fulfillment_channel: string
|
||||
fulfillment_config_id: number | null
|
||||
canonical_product_id: number | null
|
||||
}>(
|
||||
`SELECT fulfillment_status, fulfillment_channel, fulfillment_config_id, canonical_product_id
|
||||
FROM order_items WHERE id = $1`,
|
||||
[autoManualItemId],
|
||||
)
|
||||
assert.equal(autoManualItem.rows[0]?.fulfillment_status, 'assigned')
|
||||
assert.equal(autoManualItem.rows[0]?.fulfillment_channel, 'manual')
|
||||
assert.ok(Number(autoManualItem.rows[0]?.fulfillment_config_id) > 0)
|
||||
assert.equal(Number(autoManualItem.rows[0]?.canonical_product_id), autoManualProductId)
|
||||
|
||||
const crossShopA = `it-routing-a-${suffix}`
|
||||
const crossShopB = `it-routing-b-${suffix}`
|
||||
await createPendingOrderItem(crossShopSku, { shopId: crossShopA })
|
||||
@@ -460,6 +498,15 @@ test(
|
||||
`tpv:${manualSku}`,
|
||||
])
|
||||
}
|
||||
if (autoManualProductId) {
|
||||
await query(`DELETE FROM sales_daily_facts WHERE canonical_product_id = $1`, [
|
||||
autoManualProductId,
|
||||
])
|
||||
await query(`DELETE FROM cost_versions WHERE canonical_product_id = $1`, [
|
||||
autoManualProductId,
|
||||
])
|
||||
await query(`DELETE FROM product_catalog WHERE id = $1`, [autoManualProductId])
|
||||
}
|
||||
if (fallbackProfileId) {
|
||||
await query(`DELETE FROM fulfillment_profiles WHERE id = $1`, [fallbackProfileId])
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user