增加发货记录查询功能-1

This commit is contained in:
yml2213
2026-05-26 15:01:02 +08:00
parent ab417ca90f
commit 604f1bbf54
16 changed files with 1032 additions and 0 deletions
@@ -28,6 +28,7 @@ import {
useCloudtentaclesSku,
} from "../../../platforms/cloudtentacles/catalog-service.js";
import { getCloudtentaclesKnapsack } from "../../../platforms/cloudtentacles/knapsack-service.js";
import { listCloudtentaclesDeliveryRecords } from "../../../platforms/cloudtentacles/record-service.js";
import {
appointCloudtentaclesVirtualNumber,
backCloudtentaclesVirtualNumber,
@@ -59,6 +60,7 @@ import { createHttpError } from "../../../../utils/http.js";
import type {
AdminCloudtentaclesCatalogQueryInput,
AdminCloudtentaclesDeliveryRecordQueryInput,
AdminCloudtentaclesFullFlowInput,
AdminCloudtentaclesSendSmsCodeInput,
AdminCloudtentaclesSkuBuyInput,
@@ -93,6 +95,26 @@ export function listAdminCloudtentaclesSources() {
};
}
export function listAdminCloudtentaclesRecordSources() {
const list = listCloudtentaclesSources();
const sessions = getAllCloudtentaclesSessionStates();
const sources = Array.isArray(list.sources) ? list.sources : [];
return {
sources: sources.map((source) => {
const key = String(source.key || "").trim();
const session = (sessions.sessions?.[key] || {}) as JsonObject;
return {
key,
label: String(source.label || source.username || key || "未命名账号").trim(),
enabled: source.enabled !== false,
hasToken: Boolean(String(session.token || "").trim()),
loggedInAt: String(session.loggedInAt || "").trim(),
};
}),
};
}
export function updateAdminCloudtentaclesSourceConfig(
payload: AdminCloudtentaclesSourceConfigInput = {}
) {
@@ -286,6 +308,57 @@ export async function getAdminCloudtentaclesKnapsack(
);
}
export async function listAdminCloudtentaclesDeliveryRecords(
payload: AdminCloudtentaclesDeliveryRecordQueryInput = {}
) {
const context = resolveAdminCloudtentaclesSessionPayload(payload);
const query = {
...context,
...pickDefined({
page: payload.page,
size: payload.size,
startDate: payload.startDate,
endDate: payload.endDate,
recordCode: payload.recordCode,
}),
};
const [records, skuList] = await Promise.all([
listCloudtentaclesDeliveryRecords(query),
listCloudtentaclesSku(context),
]);
const skuImageByName = new Map<string, {
skuId: number;
skuName: string;
skuImage: string;
}>();
for (const sku of Array.isArray(skuList.items) ? skuList.items : []) {
const name = normalizeSkuName(sku.name);
const skuImage = String(sku.image || "").trim();
if (!name || !skuImage) {
continue;
}
skuImageByName.set(name, {
skuId: Number(sku.id || 0),
skuName: String(sku.name || "").trim(),
skuImage,
});
}
const recordItems: JsonObject[] = Array.isArray(records.items) ? records.items : [];
return {
...records,
items: recordItems.map((record) => ({
...record,
...(skuImageByName.get(normalizeSkuName(record.name)) || {
skuId: 0,
skuName: "",
skuImage: "",
}),
})),
};
}
export async function listAdminCloudtentaclesVirtualNumbers(
payload: AdminCloudtentaclesVirtualNumberInput = {}
) {
@@ -373,3 +446,13 @@ export async function runAdminCloudtentaclesFullFlow(
vnKey: payload.vnKey,
});
}
function pickDefined(values: JsonObject = {}) {
return Object.fromEntries(
Object.entries(values).filter(([, value]) => typeof value !== "undefined")
);
}
function normalizeSkuName(value: unknown) {
return String(value || "").trim().replace(/\s+/g, "").toLowerCase();
}