支持 khhao 快手双店铺ID匹配

This commit is contained in:
yml
2026-05-04 18:52:23 +08:00
parent 42979d9581
commit c0431a6379
14 changed files with 251 additions and 53 deletions
@@ -120,55 +120,60 @@ export async function syncConfiguredFulfillmentBindings(profileMap = {}) {
continue
}
const matchShopId = resolveBindingMatchShopId(binding)
const bindingConfig = resolveBindingRuntimeConfig(binding)
await upsertSkuFulfillmentBinding({
skuCode: binding.skuCode,
provider: binding.provider,
platform: binding.platform,
shopId: matchShopId,
profileId: profile.id,
enabled: binding.enabled,
priority: binding.priority,
configJson: JSON.stringify(bindingConfig),
createdAt: timestamp,
updatedAt: timestamp,
})
const matchShopIds = resolveBindingMatchShopIds(binding)
const match = binding.match || {}
const externalSkuName = String(match.externalSkuName || '').trim()
const externalItemId = String(match.externalItemId || '').trim()
const externalSkuCode = String(match.externalSkuCode || '').trim()
if (!externalSkuName && !externalItemId && !externalSkuCode) {
continue
}
for (const matchShopId of matchShopIds) {
await upsertSkuFulfillmentBinding({
skuCode: binding.skuCode,
provider: binding.provider,
platform: binding.platform,
shopId: matchShopId,
profileId: profile.id,
enabled: binding.enabled,
priority: binding.priority,
configJson: JSON.stringify(bindingConfig),
createdAt: timestamp,
updatedAt: timestamp,
})
await upsertProductMatchRule({
provider: binding.provider,
platform: binding.platform,
shopId: matchShopId,
externalItemId,
externalSkuCode,
externalSkuName,
externalSkuNameNormalized: normalizeProductName(externalSkuName),
resolvedSkuCode: binding.skuCode,
enabled: binding.enabled,
priority: binding.priority,
configJson: JSON.stringify(match.config || {}),
createdAt: timestamp,
updatedAt: timestamp,
})
if (!externalSkuName && !externalItemId && !externalSkuCode) {
continue
}
await upsertProductMatchRule({
provider: binding.provider,
platform: binding.platform,
shopId: matchShopId,
externalItemId,
externalSkuCode,
externalSkuName,
externalSkuNameNormalized: normalizeProductName(externalSkuName),
resolvedSkuCode: binding.skuCode,
enabled: binding.enabled,
priority: binding.priority,
configJson: JSON.stringify(match.config || {}),
createdAt: timestamp,
updatedAt: timestamp,
})
}
}
}
function resolveBindingMatchShopId(binding = {}) {
export function resolveBindingMatchShopIds(binding = {}) {
if (String(binding.provider || '').trim() === 'khhao' && String(binding.platform || '').trim() === 'kuaishou') {
return String(binding.khhaoShopId || binding.shopId || '').trim()
const candidates = [...new Set([
String(binding.khhaoShopId || '').trim(),
String(binding.shopId || '').trim(),
].filter(Boolean))]
return candidates.length > 0 ? candidates : ['']
}
return String(binding.shopId || '').trim()
return [String(binding.shopId || '').trim()]
}
function resolveBindingRuntimeConfig(binding = {}) {
@@ -0,0 +1,27 @@
import test from 'node:test'
import assert from 'node:assert/strict'
import { resolveBindingMatchShopIds } from './fulfillment-bootstrap-service.js'
test('resolveBindingMatchShopIds returns dual shop ids for khhao kuaishou bindings', () => {
assert.deepEqual(
resolveBindingMatchShopIds({
provider: 'khhao',
platform: 'kuaishou',
shopId: '4269276762',
khhaoShopId: '10',
}),
['10', '4269276762'],
)
})
test('resolveBindingMatchShopIds preserves wildcard rules for empty shop id', () => {
assert.deepEqual(
resolveBindingMatchShopIds({
provider: 'agiso',
platform: 'xianyu',
shopId: '',
}),
[''],
)
})