抽离后台平台配置领域匹配辅助逻辑

This commit is contained in:
yml
2026-05-04 14:53:37 +08:00
parent 244aa0ed1d
commit 34eb54f906
3 changed files with 341 additions and 129 deletions
@@ -63,7 +63,6 @@ import {
verifyCloudtentaclesLoginCode,
} from '../platforms/cloudtentacles/virtual-number-service.js'
import { runCloudtentaclesFullDebugFlow } from '../platforms/cloudtentacles/debug-flow-service.js'
import { normalizeAgisoMessageTemplate } from '../platforms/agiso/xianyu/message-service.js'
import {
getOrderFulfillmentBindingConfigs,
getOrderFulfillmentBindingsFilePath,
@@ -87,6 +86,14 @@ import {
resolveCloudtentaclesAdminContext,
resolveKuaishouEticketAdminContext,
} from './admin-platform-config-context.js'
import {
applyOptionalStringField,
mapAdminAgisoMessagingDefaults,
mapAdminAgisoShopConfigItem,
mapAdminFulfillmentBindingConfigItem,
mapAdminObservedProductItem,
resolveFulfillmentBindingMatchShopId,
} from './admin-platform-config-domain.js'
import {
mapAdminCloudtentaclesSession,
mapAdminCloudtentaclesSourceConfig,
@@ -233,42 +240,6 @@ export function updateAdminAgisoShopConfigs(payload = /** @type {AdminAgisoShopC
}
}
function mapAdminAgisoMessagingDefaults(defaults = {}) {
return {
messageTemplate: normalizeAgisoMessageTemplate(String(defaults.messageTemplate || '').trim()),
autoDeliveryMessageTemplate: normalizeAgisoMessageTemplate(String(defaults.autoDeliveryMessageTemplate || '').trim()),
}
}
function mapAdminAgisoShopConfigItem(shopId, config = {}) {
return {
shopId,
shopName: String(config.shopName || '').trim(),
accessToken: String(config.accessToken || '').trim(),
accessTokenMasked: maskSecret(config.accessToken),
enabled: typeof config.enabled === 'boolean' ? config.enabled : null,
messageTemplate: normalizeAgisoMessageTemplate(String(config.messageTemplate || '').trim()),
autoDeliveryMessageTemplate: normalizeAgisoMessageTemplate(String(config.autoDeliveryMessageTemplate || '').trim()),
appSecretConfigured: Boolean(String(config.appSecret || '').trim()),
apiVersion: String(config.apiVersion || '').trim(),
sendMessageEndpoint: String(config.sendMessageEndpoint || '').trim(),
}
}
function applyOptionalStringField(target, key, source) {
if (!source || typeof source[key] !== 'string') {
return
}
const value = String(source[key] || '').trim()
if (value) {
target[key] = normalizeAgisoMessageTemplate(value)
return
}
delete target[key]
}
export function getAdminKhhaoSourceConfig() {
const config = getKhhaoSourceConfig()
const syncState = getKhhaoSyncState()
@@ -1094,95 +1065,3 @@ async function validateAdminFulfillmentBindingConfigs(bindings = []) {
return normalizedBindings
}
function mapAdminFulfillmentBindingConfigItem(item) {
const match = item?.match || {}
return {
provider: String(item?.provider || '').trim(),
platform: String(item?.platform || '').trim(),
shopId: String(item?.shopId || '').trim(),
shopName: String(item?.shopName || '').trim(),
khhaoShopId: String(item?.khhaoShopId || '').trim(),
skuCode: String(item?.skuCode || '').trim(),
skuName: String(item?.skuName || '').trim(),
profileKey: String(item?.profileKey || '').trim(),
enabled: item?.enabled !== false,
priority: Number(item?.priority || 100),
config: item?.config || {},
match: {
externalSkuCode: String(match.externalSkuCode || '').trim(),
externalItemId: String(match.externalItemId || '').trim(),
externalSkuName: String(match.externalSkuName || '').trim(),
config: match.config || {},
},
}
}
function resolveFulfillmentBindingMatchShopId({
provider = '',
platform = '',
shopId = '',
khhaoShopId = '',
} = {}) {
if (String(provider || '').trim() === 'khhao' && String(platform || '').trim() === 'kuaishou') {
return String(khhaoShopId || shopId || '').trim()
}
return String(shopId || '').trim()
}
function matchesObservedProduct(binding, observed) {
const provider = String(binding?.provider || '').trim()
const platform = String(binding?.platform || '').trim()
const shopId = String(binding?.shopId || '').trim()
const match = binding?.match || {}
const externalSkuCode = String(match.externalSkuCode || '').trim()
const externalItemId = String(match.externalItemId || '').trim()
const externalSkuName = String(match.externalSkuName || '').trim()
if (provider && provider !== String(observed?.provider || '').trim()) {
return false
}
if (platform && platform !== String(observed?.platform || '').trim()) {
return false
}
if (shopId && shopId !== String(observed?.shopId || '').trim()) {
return false
}
return (
(externalSkuCode && externalSkuCode === String(observed?.externalSkuCode || '').trim())
|| (externalItemId && externalItemId === String(observed?.externalItemId || '').trim())
|| (externalSkuName && externalSkuName === String(observed?.externalSkuName || '').trim())
)
}
function mapAdminObservedProductItem(item, bindings = []) {
const matchedBinding = findMatchingObservedBinding(bindings, item)
return {
provider: String(item?.provider || '').trim(),
platform: String(item?.platform || '').trim(),
shopId: String(item?.shopId || '').trim(),
shopName: String(item?.shopName || '').trim(),
externalItemId: String(item?.externalItemId || '').trim(),
externalSkuCode: String(item?.externalSkuCode || '').trim(),
externalSkuName: String(item?.externalSkuName || '').trim(),
latestSeenAt: item?.latestSeenAt || null,
orderItemCount: Number(item?.orderItemCount || 0),
configured: Boolean(matchedBinding),
matchedBinding: matchedBinding
? {
skuCode: String(matchedBinding.skuCode || '').trim(),
skuName: String(matchedBinding.skuName || '').trim(),
profileKey: String(matchedBinding.profileKey || '').trim(),
}
: null,
}
}
function findMatchingObservedBinding(bindings, observed) {
return (Array.isArray(bindings) ? bindings : []).find((binding) => matchesObservedProduct(binding, observed)) || null
}