feat: 添加MSW模拟服务和数据源集成
refactor: 重构页面组件移除冗余Layout组件 feat: 实现WebSocket和事件总线系统 feat: 添加队列和调度系统 docs: 更新架构文档和服务映射 style: 清理重复接口定义使用数据源 chore: 更新依赖项配置 feat: 添加运行时系统和领域引导 ci: 配置ESLint边界检查规则 build: 添加Redis和WebSocket依赖 test: 添加MSW浏览器环境入口 perf: 优化数据获取逻辑使用统一数据源 fix: 修复类型定义和状态管理问题
This commit is contained in:
@@ -23,7 +23,7 @@ export class OrderController {
|
||||
|
||||
try {
|
||||
// 1. 根据不同平台解析 Payload (Mapping)
|
||||
const normalizedOrder = this.mapPlatformPayloadToOrder(platform as string, payload, tenantId, shopId);
|
||||
const normalizedOrder = OrderService.mapPlatformPayloadToOrder(platform as string, payload, tenantId, shopId);
|
||||
|
||||
if (!normalizedOrder) {
|
||||
return res.status(400).json({ success: false, error: `Unsupported or invalid payload for platform: ${platform}` });
|
||||
@@ -42,96 +42,7 @@ export class OrderController {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 将各平台原始 Payload 映射为系统统一模型
|
||||
*/
|
||||
private static mapPlatformPayloadToOrder(platform: string, payload: any, tenantId: string, shopId: string): Partial<ConsumerOrder> | null {
|
||||
const upperPlatform = platform.toUpperCase();
|
||||
|
||||
switch (upperPlatform) {
|
||||
case 'SHOPIFY':
|
||||
return {
|
||||
tenant_id: tenantId,
|
||||
shop_id: shopId,
|
||||
platform: 'SHOPIFY',
|
||||
platform_order_id: String(payload.id || payload.name),
|
||||
customer_name: payload.customer?.first_name ? `${payload.customer.first_name} ${payload.customer.last_name}` : 'Unknown',
|
||||
customer_email: payload.customer?.email,
|
||||
shipping_address: payload.shipping_address,
|
||||
items: payload.line_items?.map((item: any) => ({
|
||||
skuId: item.sku,
|
||||
title: item.title,
|
||||
price: Number(item.price),
|
||||
quantity: item.quantity,
|
||||
costPrice: item.cost_price || 0
|
||||
})),
|
||||
total_amount: Number(payload.total_price),
|
||||
currency: payload.currency || 'USD',
|
||||
status: this.mapShopifyStatus(payload.financial_status, payload.fulfillment_status),
|
||||
payment_status: payload.financial_status === 'paid' ? 'COMPLETED' : 'PENDING',
|
||||
fulfillment_status: payload.fulfillment_status === 'fulfilled' ? 'SHIPPED' : 'PENDING',
|
||||
trace_id: `webhook-${Date.now()}`
|
||||
};
|
||||
|
||||
case 'AMAZON':
|
||||
// 模拟 Amazon SP-API 结构
|
||||
return {
|
||||
tenant_id: tenantId,
|
||||
shop_id: shopId,
|
||||
platform: 'AMAZON',
|
||||
platform_order_id: payload.AmazonOrderId,
|
||||
customer_name: payload.BuyerInfo?.BuyerName || 'Amazon Customer',
|
||||
customer_email: payload.BuyerInfo?.BuyerEmail,
|
||||
shipping_address: payload.ShippingAddress,
|
||||
items: payload.OrderItems?.map((item: any) => ({
|
||||
skuId: item.SellerSKU,
|
||||
title: item.Title,
|
||||
price: Number(item.ItemPrice?.Amount || 0),
|
||||
quantity: item.QuantityOrdered,
|
||||
costPrice: 0
|
||||
})),
|
||||
total_amount: Number(payload.OrderTotal?.Amount || 0),
|
||||
currency: payload.OrderTotal?.CurrencyCode || 'USD',
|
||||
status: payload.OrderStatus === 'Shipped' ? 'SHIPPED' : 'PAID',
|
||||
payment_status: 'COMPLETED',
|
||||
fulfillment_status: payload.OrderStatus === 'Shipped' ? 'SHIPPED' : 'PENDING',
|
||||
trace_id: `webhook-${Date.now()}`
|
||||
};
|
||||
|
||||
case 'TIKTOK':
|
||||
// 模拟 TikTok Shop API 结构
|
||||
return {
|
||||
tenant_id: tenantId,
|
||||
shop_id: shopId,
|
||||
platform: 'TIKTOK',
|
||||
platform_order_id: payload.order_id,
|
||||
customer_name: payload.recipient_address?.name || 'TikTok Customer',
|
||||
shipping_address: payload.recipient_address,
|
||||
items: payload.item_list?.map((item: any) => ({
|
||||
skuId: item.sku_id,
|
||||
title: item.product_name,
|
||||
price: Number(item.sku_sale_price),
|
||||
quantity: 1,
|
||||
costPrice: 0
|
||||
})),
|
||||
total_amount: Number(payload.total_amount),
|
||||
currency: payload.currency || 'USD',
|
||||
status: payload.order_status === 100 ? 'PAID' : 'UNPAID',
|
||||
payment_status: payload.order_status >= 100 ? 'COMPLETED' : 'PENDING',
|
||||
fulfillment_status: 'PENDING',
|
||||
trace_id: `webhook-${Date.now()}`
|
||||
};
|
||||
|
||||
default:
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
private static mapShopifyStatus(financial: string, fulfillment: string): 'UNPAID' | 'PAID' | 'SHIPPED' | 'DELIVERED' {
|
||||
if (fulfillment === 'fulfilled') return 'SHIPPED';
|
||||
if (financial === 'paid') return 'PAID';
|
||||
return 'UNPAID';
|
||||
}
|
||||
|
||||
/**
|
||||
* 手动触发同步 (API 入口)
|
||||
|
||||
Reference in New Issue
Block a user