优化后台订单列表展示并支持商品标题与SKU规格
This commit is contained in:
@@ -16,6 +16,7 @@ import { listTaskEventsByTaskId } from '../../repositories/task-event-repo.js'
|
||||
import type { JsonRecord } from '../../types/json.js'
|
||||
import {
|
||||
listKuaishouIndustryVouchersByOid,
|
||||
listKuaishouIndustryVouchersByOids,
|
||||
listKuaishouIndustryVouchersByTaskId,
|
||||
} from '../../repositories/kuaishou-industry-voucher-repo.js'
|
||||
import { listCloudtentaclesSources } from '../platforms/cloudtentacles/source-config-service.js'
|
||||
@@ -52,6 +53,7 @@ import {
|
||||
resolveAdminTaskScreenshotUrl,
|
||||
resolveDisplayShopName,
|
||||
resolveOrderItemDeliveryMode,
|
||||
resolveOrderItemSkuNick,
|
||||
resolveOrderItemTitle,
|
||||
} from './admin-read-shared-helpers.js'
|
||||
import { mapAdminOrderListItem, summarizeOrderItems } from './admin-order-read-helpers.js'
|
||||
@@ -96,18 +98,22 @@ export async function getAdminOrders(
|
||||
})
|
||||
|
||||
const orderIds = items.map((item) => item.id)
|
||||
const [orderItems, tasks] = await Promise.all([
|
||||
const oids = items.map((item) => item.platform_order_id).filter(Boolean)
|
||||
const [orderItems, tasks, vouchers] = await Promise.all([
|
||||
listOrderItemsByOrderIds(orderIds),
|
||||
listTasksByOrderIds(orderIds),
|
||||
listKuaishouIndustryVouchersByOids(oids),
|
||||
])
|
||||
const orderItemsByOrderId = groupRowsByOrderId(orderItems)
|
||||
const tasksByOrderId = groupRowsByOrderId(tasks)
|
||||
const vouchersByOid = groupRowsByOid(vouchers)
|
||||
|
||||
return {
|
||||
items: items.map((item) =>
|
||||
mapAdminOrderListItem(item, {
|
||||
orderItems: orderItemsByOrderId.get(item.id) || [],
|
||||
tasks: tasksByOrderId.get(item.id) || [],
|
||||
vouchers: vouchersByOid.get(item.platform_order_id) || [],
|
||||
}),
|
||||
),
|
||||
pagination: { page, pageSize, total },
|
||||
@@ -124,6 +130,16 @@ function groupRowsByOrderId<T extends { order_id: number }>(rows: T[]): Map<numb
|
||||
return grouped
|
||||
}
|
||||
|
||||
function groupRowsByOid<T extends { oid: string }>(rows: T[]): Map<string, T[]> {
|
||||
const grouped = new Map<string, T[]>()
|
||||
for (const row of rows) {
|
||||
const group = grouped.get(row.oid) || []
|
||||
group.push(row)
|
||||
grouped.set(row.oid, group)
|
||||
}
|
||||
return grouped
|
||||
}
|
||||
|
||||
export async function getAdminOrderDetail(
|
||||
orderId: AdminEntityIdInput,
|
||||
session: AdminViewerSessionInput | null = null,
|
||||
@@ -142,7 +158,9 @@ export async function getAdminOrderDetail(
|
||||
listTasksByOrderId(order.id),
|
||||
])
|
||||
const kuaishouIndustryVouchers = await listKuaishouIndustryVouchersByOid(order.platform_order_id)
|
||||
const itemSummary = summarizeOrderItems(items)
|
||||
const itemSummary = summarizeOrderItems(items, order, kuaishouIndustryVouchers)
|
||||
const orderItemTitle = resolveOrderItemTitle(items[0], order, kuaishouIndustryVouchers)
|
||||
const orderSkuNick = resolveOrderItemSkuNick(items[0], order, kuaishouIndustryVouchers)
|
||||
const viewerContext = createAdminViewerContext(session)
|
||||
|
||||
return {
|
||||
@@ -165,6 +183,8 @@ export async function getAdminOrderDetail(
|
||||
createdAt: order.created_at,
|
||||
updatedAt: order.updated_at,
|
||||
itemSummary,
|
||||
itemTitle: orderItemTitle,
|
||||
skuNick: orderSkuNick,
|
||||
rawPayload:
|
||||
order.raw_payload_json && typeof order.raw_payload_json === 'object'
|
||||
? order.raw_payload_json
|
||||
@@ -175,7 +195,8 @@ export async function getAdminOrderDetail(
|
||||
orderItemId: item.id,
|
||||
skuCode: item.sku_code,
|
||||
skuName: item.sku_name,
|
||||
itemTitle: resolveOrderItemTitle(item),
|
||||
itemTitle: resolveOrderItemTitle(item, order, kuaishouIndustryVouchers),
|
||||
skuNick: resolveOrderItemSkuNick(item, order, kuaishouIndustryVouchers),
|
||||
quantity: item.quantity,
|
||||
deliveryMode: resolveOrderItemDeliveryMode(tasks, item.id),
|
||||
spec:
|
||||
|
||||
Reference in New Issue
Block a user