Compare commits

..

2 Commits

Author SHA1 Message Date
tikkhun 1bdae88c11 fix(订单服务): 修复关联订单列表去重逻辑并优化查询结果
确保关联订单列表中的条目不会重复,通过使用Set来跟踪已处理的外部ID
移除不必要的orders数组填充,简化返回数据结构
2025-11-21 11:58:13 +08:00
tikkhun 27935f113d feat(订单服务): 添加订阅相关字段到订单查询
在订单查询结果中添加 isSubscription 标志和 related 订阅信息字段,以便前端展示订单的订阅状态和关联订阅详情
2025-11-21 11:48:13 +08:00
1 changed files with 47 additions and 10 deletions

View File

@ -643,6 +643,37 @@ export class OrderService {
o.payment_method as payment_method,
cs.order_count as order_count,
cs.total_spent as total_spent,
CASE WHEN EXISTS (
SELECT 1 FROM subscription s
WHERE s.siteId = o.siteId AND s.parent_id = o.externalOrderId
) THEN 1 ELSE 0 END AS isSubscription,
(
SELECT COALESCE(
JSON_ARRAYAGG(
JSON_OBJECT(
'id', s.id,
'externalSubscriptionId', s.externalSubscriptionId,
'status', s.status,
'currency', s.currency,
'total', s.total,
'billing_period', s.billing_period,
'billing_interval', s.billing_interval,
'customer_id', s.customer_id,
'customer_email', s.customer_email,
'parent_id', s.parent_id,
'start_date', s.start_date,
'trial_end', s.trial_end,
'next_payment_date', s.next_payment_date,
'end_date', s.end_date,
'line_items', s.line_items,
'meta_data', s.meta_data
)
),
JSON_ARRAY()
)
FROM subscription s
WHERE s.siteId = o.siteId AND s.parent_id = o.externalOrderId
) AS related,
COALESCE(
JSON_ARRAYAGG(
CASE WHEN s.id IS NOT NULL THEN JSON_OBJECT(
@ -1299,10 +1330,21 @@ export class OrderService {
let relatedList: any[] = [];
try {
const related = await this.getRelatedByOrder(id);
relatedList = [
...(Array.isArray(related?.subscriptions) ? related.subscriptions : []),
...(Array.isArray(related?.orders) ? related.orders : []),
];
const subs = Array.isArray(related?.subscriptions) ? related.subscriptions : [];
const ords = Array.isArray(related?.orders) ? related.orders : [];
const seen = new Set<string>();
const merge = [...subs, ...ords];
for (const it of merge) {
const key = it?.externalSubscriptionId
? `sub:${it.externalSubscriptionId}`
: it?.externalOrderId
? `ord:${it.externalOrderId}`
: `id:${it?.id}`;
if (!seen.has(key)) {
seen.add(key);
relatedList.push(it);
}
}
} catch (error) {
// 关联查询失败不影响详情返回
}
@ -1329,15 +1371,10 @@ export class OrderService {
WHERE s.siteId = ? AND s.parent_id = ?
`;
const subscriptions = await this.orderModel.query(subSql, [siteId, order.externalOrderId]);
const allOrdersMap = new Map<number, any>();
subscriptions.forEach(o => allOrdersMap.set(o.id, o));
return {
order,
subscriptions,
orders: Array.from(allOrdersMap.values()),
orders: [],
};
}