增加平台持久化

This commit is contained in:
yml2213
2026-05-02 18:26:01 +08:00
parent 8829652e9a
commit e94fff95fb
16 changed files with 988 additions and 29 deletions
@@ -11,6 +11,8 @@ import {
import { enrichAgisoXianyuTradeOrder } from '../platforms/agiso/xianyu/order-detail-service.js'
import { mapKhhaoOrderPreviewList } from '../platforms/khhao/order-mapper-service.js'
import { queryKhhaoOrderList } from '../platforms/khhao/order-query-service.js'
import { syncKhhaoOrders } from '../platforms/khhao/order-sync-service.js'
import { getKhhaoSourceConfig, getKhhaoSourcesFilePath, saveKhhaoSourceConfig } from '../platforms/khhao/source-config-service.js'
import { loginKhhaoSession } from '../platforms/khhao/session-service.js'
import { normalizeAgisoMessageTemplate } from '../platforms/agiso/xianyu/message-service.js'
import {
@@ -26,6 +28,7 @@ import { normalizeProductName } from '../order/product-match-service.js'
import { resolveDisplayShopName } from './admin-read-shared-helpers.js'
/** @typedef {import('../../types/admin-write-inputs.js').AdminAgisoShopConfigSaveInput} AdminAgisoShopConfigSaveInput */
/** @typedef {import('../../types/admin-write-inputs.js').AdminKhhaoSourceConfigInput} AdminKhhaoSourceConfigInput */
/** @typedef {import('../../types/admin-write-inputs.js').AdminKhhaoOrderQueryInput} AdminKhhaoOrderQueryInput */
/** @typedef {import('../../types/admin-write-inputs.js').AdminKhhaoTestLoginInput} AdminKhhaoTestLoginInput */
/** @typedef {import('../../types/admin-write-inputs.js').AdminFulfillmentBindingConfigSaveInput} AdminFulfillmentBindingConfigSaveInput */
@@ -181,15 +184,53 @@ function applyOptionalStringField(target, key, source) {
delete target[key]
}
export function getAdminKhhaoSourceConfig() {
const config = getKhhaoSourceConfig()
return {
filePath: getKhhaoSourcesFilePath(),
source: {
enabled: config.enabled !== false,
baseUrl: String(config.baseUrl || '').trim(),
username: String(config.username || '').trim(),
password: String(config.password || '').trim(),
maxCaptchaAttempts: Number(config.maxCaptchaAttempts || 3) || 3,
},
}
}
/** @param {AdminKhhaoSourceConfigInput} [payload] */
export function updateAdminKhhaoSourceConfig(payload = /** @type {AdminKhhaoSourceConfigInput} */ ({})) {
const saved = saveKhhaoSourceConfig({
enabled: payload.enabled !== false,
baseUrl: String(payload.baseUrl || '').trim() || 'https://admin.khhao.com',
username: String(payload.username || '').trim(),
password: String(payload.password || '').trim(),
maxCaptchaAttempts: Number(payload.maxCaptchaAttempts || 3) || 3,
})
return {
filePath: getKhhaoSourcesFilePath(),
source: {
enabled: saved.enabled !== false,
baseUrl: String(saved.baseUrl || '').trim(),
username: String(saved.username || '').trim(),
password: String(saved.password || '').trim(),
maxCaptchaAttempts: Number(saved.maxCaptchaAttempts || 3) || 3,
},
}
}
/** @param {AdminKhhaoTestLoginInput} [payload] */
export async function testAdminKhhaoLogin(payload = /** @type {AdminKhhaoTestLoginInput} */ ({})) {
const savedSource = getKhhaoSourceConfig()
const session = await loginKhhaoSession({
baseUrl: payload.baseUrl,
username: payload.username,
password: payload.password,
maxCaptchaAttempts: payload.maxCaptchaAttempts,
baseUrl: String(payload.baseUrl || savedSource.baseUrl || '').trim(),
username: String(payload.username || savedSource.username || '').trim(),
password: String(payload.password || savedSource.password || '').trim(),
maxCaptchaAttempts: payload.maxCaptchaAttempts || savedSource.maxCaptchaAttempts,
includeImageBase64: payload.includeImageBase64,
requestId: `admin-khhao-test-login:${String(payload.username || '').trim() || 'anonymous'}`,
requestId: `admin-khhao-test-login:${String(payload.username || savedSource.username || '').trim() || 'anonymous'}`,
})
return {
@@ -212,16 +253,17 @@ export async function testAdminKhhaoLogin(payload = /** @type {AdminKhhaoTestLog
/** @param {AdminKhhaoOrderQueryInput} [payload] */
export async function queryAdminKhhaoOrders(payload = /** @type {AdminKhhaoOrderQueryInput} */ ({})) {
const savedSource = getKhhaoSourceConfig()
const session = await loginKhhaoSession({
baseUrl: payload.baseUrl,
username: payload.username,
password: payload.password,
maxCaptchaAttempts: payload.maxCaptchaAttempts,
requestId: `admin-khhao-query-orders:${String(payload.username || '').trim() || 'anonymous'}`,
baseUrl: String(payload.baseUrl || savedSource.baseUrl || '').trim(),
username: String(payload.username || savedSource.username || '').trim(),
password: String(payload.password || savedSource.password || '').trim(),
maxCaptchaAttempts: payload.maxCaptchaAttempts || savedSource.maxCaptchaAttempts,
requestId: `admin-khhao-query-orders:${String(payload.username || savedSource.username || '').trim() || 'anonymous'}`,
})
const result = await queryKhhaoOrderList({
baseUrl: payload.baseUrl,
baseUrl: String(payload.baseUrl || savedSource.baseUrl || '').trim(),
page: payload.page,
limit: payload.limit,
session,
@@ -239,6 +281,18 @@ export async function queryAdminKhhaoOrders(payload = /** @type {AdminKhhaoOrder
}
}
/** @param {AdminKhhaoOrderQueryInput} [payload] */
export async function syncAdminKhhaoOrders(payload = /** @type {AdminKhhaoOrderQueryInput} */ ({})) {
const savedSource = getKhhaoSourceConfig()
return syncKhhaoOrders({
...payload,
baseUrl: String(payload.baseUrl || savedSource.baseUrl || '').trim(),
username: String(payload.username || savedSource.username || '').trim(),
password: String(payload.password || savedSource.password || '').trim(),
maxCaptchaAttempts: payload.maxCaptchaAttempts || savedSource.maxCaptchaAttempts,
})
}
export async function getAdminFulfillmentBindingConfigs() {
const bindings = getOrderFulfillmentBindingConfigs()
const rowsResult = await query(