拆分feifei配置并修复商品查询

This commit is contained in:
yml2213
2026-07-07 14:59:22 +08:00
parent 83d501dc2d
commit 6af2fe2e23
13 changed files with 1317 additions and 221 deletions
@@ -1,4 +1,9 @@
import { getKuaishouFeifeiConfig } from '../../platforms/kuaishou-feifei/config.js'
import {
createKuaishouFeifeiOrder,
listKuaishouFeifeiProducts,
queryKuaishouFeifeiOrder,
} from '../../platforms/kuaishou-feifei/order-service.js'
import { resolveKuaishouFeifeiProductByName } from '../../platforms/kuaishou-feifei/product-rule-service.js'
import {
getKuaishouFeifeiConfigFilePath,
@@ -8,6 +13,7 @@ import {
saveKuaishouFeifeiSourceConfig,
} from '../../platforms/kuaishou-feifei/source-config-service.js'
import { normalizeCloudtentaclesMatchName } from '../../order/cloudtentacles-match-utils.js'
import { createHttpError } from '../../../utils/http.js'
type JsonObject = Record<string, any>
@@ -49,6 +55,70 @@ export function matchAdminKuaishouFeifeiProduct(payload: JsonObject = {}) {
}
}
export async function listAdminKuaishouFeifeiProducts(payload: JsonObject = {}) {
return listKuaishouFeifeiProducts({
page: Number(payload.page || 1) || 1,
perPage: Number(payload.perPage || payload.per_page || 20) || 20,
status: String(payload.status || 'on_sale').trim(),
supplyProductName: String(payload.supplyProductName || payload.supply_product_name || '').trim(),
})
}
export async function createAdminKuaishouFeifeiTestOrder(payload: JsonObject = {}) {
const platformOrderNo = String(payload.platformOrderNo || payload.platform_order_no || '').trim()
const productCode = String(payload.productCode || payload.product_code || '').trim()
if (!platformOrderNo) {
throw createHttpError('测试业务单号不能为空', {
statusCode: 400,
errorCode: 'kuaishou_feifei_missing_platform_order_no',
})
}
if (!productCode) {
throw createHttpError('feifei 商品编码不能为空', {
statusCode: 400,
errorCode: 'kuaishou_feifei_missing_product_code',
})
}
const orderInput: Parameters<typeof createKuaishouFeifeiOrder>[0] = {
platformOrderNo,
productCode,
platformBuyNum: Number(payload.platformBuyNum || payload.platform_buy_num || 1) || 1,
playerAccount: String(payload.playerAccount || payload.player_account || '').trim(),
playerGameRegion: String(payload.playerGameRegion || payload.player_game_region || '').trim(),
playerGameSrv: String(payload.playerGameSrv || payload.player_game_srv || '').trim(),
playerGameRole: String(payload.playerGameRole || payload.player_game_role || '').trim(),
submitPlayer: payload.submitPlayer === true || payload.submit_player === true,
notifyUrl: String(payload.notifyUrl || payload.notify_url || '').trim(),
}
const platformAmount = normalizeOptionalNumber(payload.platformAmount ?? payload.platform_amount)
if (platformAmount !== undefined) {
orderInput.platformAmount = platformAmount
}
return createKuaishouFeifeiOrder(orderInput)
}
export async function queryAdminKuaishouFeifeiTestOrder(payload: JsonObject = {}) {
const platformOrderNo = String(payload.platformOrderNo || payload.platform_order_no || '').trim()
const orderNo = String(payload.orderNo || payload.order_no || '').trim()
if (!platformOrderNo && !orderNo) {
throw createHttpError('请填写 feifei 平台单号或测试业务单号', {
statusCode: 400,
errorCode: 'kuaishou_feifei_missing_order_query',
})
}
return queryKuaishouFeifeiOrder({
platformOrderNo,
orderNo,
})
}
function getAdminEditableKuaishouFeifeiConfig() {
if (hasKuaishouFeifeiConfigFile()) {
return getKuaishouFeifeiSourceConfig()
@@ -68,3 +138,12 @@ function mapEffectiveKuaishouFeifeiConfig(config: ReturnType<typeof getKuaishouF
productRuleCount: config.productRules.length,
}
}
function normalizeOptionalNumber(value: unknown) {
if (value == null || String(value).trim() === '') {
return undefined
}
const numberValue = Number(value)
return Number.isFinite(numberValue) ? numberValue : undefined
}