Files
order_site/apps/backend/src/services/bootstrap/fulfillment-bootstrap-service.ts
T
yml2213 3284fed7a1 新增 affiliate_dash 履约配置与商品映射(阶段 3)
- bootstrap CORE_PROFILES + routing ROUTABLE/DEFAULT_PRIORITY 接入 affiliate_dash
- planner 上下文 affiliateDash 块 + resolveDynamicAffiliateDashProfile
- product-resolution: 91 productNo→sku 映射匹配(skuMapping) + snapshot.affiliateDash
- prepare 前余额预检(getAffiliateDashWallet)
- AFFILIATE_DASH_SKU_MAPPING_JSON env 注入
- admin 后端接口(GET/POST 配置、match、products、wallet)+ 前端 Tabs 面板
- 联调:模拟 91 进单命中 affiliate_dash 路由, 未命中回退;前后端 typecheck + 212 测试通过
2026-08-05 15:08:41 +08:00

93 lines
2.4 KiB
TypeScript

import type { JsonObject } from '../../types/json.js'
import {
listFulfillmentProfileRequirements,
replaceFulfillmentProfileRequirements,
upsertFulfillmentProfile,
type FulfillmentProfileRequirementInput,
} from '../../repositories/fulfillment-profile-repo.js'
import { nowIso } from '../../utils/time.js'
type CoreProfile = {
profileKey: string
name: string
executorKey: string
requiresClaim: boolean
autoDispatch: boolean
inventoryStrategy: string
requirements: FulfillmentProfileRequirementInput[]
}
const CORE_PROFILES: CoreProfile[] = [
{
profileKey: 'manual_review',
name: '人工发货',
executorKey: 'manual_dispatch',
requiresClaim: false,
autoDispatch: false,
inventoryStrategy: 'static_pool',
requirements: [],
},
{
profileKey: 'kuaishou_ct_assisted',
name: 'kuaishou-lewan 履约',
executorKey: 'kuaishou_ct_assisted',
requiresClaim: false,
autoDispatch: false,
inventoryStrategy: 'external_platform',
requirements: [],
},
{
profileKey: 'kuaishou_feifei',
name: 'kuaishou-feifei 履约',
executorKey: 'kuaishou_feifei',
requiresClaim: true,
autoDispatch: false,
inventoryStrategy: 'external_platform',
requirements: [],
},
{
profileKey: 'affiliate_dash',
name: 'affiliate-dash 履约',
executorKey: 'affiliate_dash',
requiresClaim: true,
autoDispatch: false,
inventoryStrategy: 'external_platform',
requirements: [],
},
]
export async function ensureFulfillmentCatalogBootstrapped() {
await ensureCoreProfiles()
}
async function ensureCoreProfiles() {
const timestamp = nowIso()
const profileMap: JsonObject = {}
for (const profile of CORE_PROFILES) {
const saved = await upsertFulfillmentProfile({
profileKey: profile.profileKey,
name: profile.name,
executorKey: profile.executorKey,
requiresClaim: profile.requiresClaim,
autoDispatch: profile.autoDispatch,
inventoryStrategy: profile.inventoryStrategy,
configJson: '{}',
createdAt: timestamp,
updatedAt: timestamp,
})
if (!saved) {
continue
}
profileMap[profile.profileKey] = saved
const currentRequirements = await listFulfillmentProfileRequirements(saved.id)
if (currentRequirements.length !== profile.requirements.length) {
await replaceFulfillmentProfileRequirements(saved.id, profile.requirements, timestamp)
}
}
return profileMap
}