优化履约账号优先级配置

This commit is contained in:
yml2213
2026-05-26 12:44:01 +08:00
parent 2ff320c6ac
commit 6e85002724
26 changed files with 161 additions and 181 deletions
@@ -185,7 +185,7 @@ export async function syncDeliveryTasksForOrderWithDeps(
},
binding: {
prepareStatus: 'pending',
cloudSourceKey: String(cloudtentaclesConfig.cloudSourceKey || 'default').trim() || 'default',
cloudSourceKeys: normalizeStringArray(cloudtentaclesConfig.cloudSourceKeys),
skuId: Number(cloudtentaclesConfig.skuId || 0) || 0,
skuName: String(cloudtentaclesConfig.skuName || '').trim(),
vnKey: '1',
@@ -384,6 +384,16 @@ function parseJsonObject(value: unknown): JsonObject {
}
}
function normalizeStringArray(value: unknown): string[] {
if (!Array.isArray(value)) {
return []
}
return Array.from(
new Set(value.map((item) => String(item || '').trim()).filter(Boolean)),
)
}
function isTaskRow(task: TaskRow | DeliveryTaskRow | null | undefined): task is TaskRow {
return Boolean(task && Number(task.id || 0) > 0)
}
@@ -17,6 +17,7 @@ test('mapKuaishouCloudFulfillmentItemsToBindings maps 91kaquan rules', () => {
externalSkuCode: '952',
externalItemId: '952',
externalSkuName: '测试2',
cloudSourceKeys: ['account_a', 'account_b'],
cloudSkuId: 28,
},
],
@@ -35,8 +36,7 @@ test('mapKuaishouCloudFulfillmentItemsToBindings maps 91kaquan rules', () => {
flowType: 'kuaishou_cloud_fulfillment',
configId: '',
cloudtentacles: {
cloudSourceKey: 'default',
cloudSourceKeyFallbacks: [],
cloudSourceKeys: ['account_a', 'account_b'],
skuId: 28,
skuName: '',
vnKey: '1',
@@ -46,11 +46,7 @@ export function mapKuaishouCloudFulfillmentItemsToBindings(config: JsonObject =
flowType: "kuaishou_cloud_fulfillment",
configId: String(item.id || "").trim(),
cloudtentacles: {
cloudSourceKey:
String(item.cloudSourceKey || "default").trim() || "default",
cloudSourceKeyFallbacks: Array.isArray(item.cloudSourceKeyFallbacks)
? item.cloudSourceKeyFallbacks
: [],
cloudSourceKeys: normalizeStringArray(item.cloudSourceKeys),
skuId: normalizePositiveInteger(item.cloudSkuId),
skuName: String(item.cloudSkuName || "").trim(),
vnKey: "1",
@@ -113,6 +109,7 @@ function normalizeKuaishouCloudFulfillmentItem(rawValue: unknown) {
const internalSkuCode = String(rawValue.internalSkuCode || "").trim();
const cloudSkuId = normalizePositiveInteger(rawValue.cloudSkuId);
const cloudSourceKeys = normalizeStringArray(rawValue.cloudSourceKeys);
const externalSkuCode = String(rawValue.externalSkuCode || "").trim();
const externalItemId = String(rawValue.externalItemId || "").trim();
const externalSkuName = String(rawValue.externalSkuName || "").trim();
@@ -135,6 +132,10 @@ function normalizeKuaishouCloudFulfillmentItem(rawValue: unknown) {
return null;
}
if (cloudSourceKeys.length === 0) {
return null;
}
if (!externalSkuCode && !externalItemId && !externalSkuName) {
return null;
}
@@ -155,11 +156,7 @@ function normalizeKuaishouCloudFulfillmentItem(rawValue: unknown) {
resolvedSkuName: String(
rawValue.resolvedSkuName || rawValue.internalSkuName || ""
).trim(),
cloudSourceKey:
String(rawValue.cloudSourceKey || "default").trim() || "default",
cloudSourceKeyFallbacks: normalizeStringArray(
rawValue.cloudSourceKeyFallbacks
),
cloudSourceKeys,
cloudSkuId,
cloudSkuName: String(rawValue.cloudSkuName || "").trim(),
vnKey: "1",
@@ -204,12 +201,5 @@ function normalizeStringArray(value: unknown) {
if (Array.isArray(value)) {
return value.map((v: unknown) => String(v || "").trim()).filter(Boolean);
}
// 兼容旧格式:字符串用逗号分隔
if (typeof value === "string") {
return value
.split(",")
.map((v: string) => v.trim())
.filter(Boolean);
}
return [];
}