feat(M10-A): 完成统一通知中心与投递闭环
This commit is contained in:
@@ -173,6 +173,16 @@ export class PricingRepository {
|
||||
input.actor?.source === 'ADMIN' ? 'Order created on behalf' : 'Room hold created',
|
||||
input.actor?.traceId ?? `order-created-${orderId}`, input.userId]
|
||||
);
|
||||
await connection.execute(
|
||||
`INSERT IGNORE INTO qipai_outbox_events
|
||||
(tenant_id, aggregate_type, aggregate_id, event_type, idempotency_key, payload)
|
||||
VALUES (?, 'ORDER', ?, 'ORDER_CREATED', ?, JSON_OBJECT(
|
||||
'storeId', ?, 'roomId', ?, 'orderId', ?, 'orderNo', ?,
|
||||
'customerId', ?, 'status', 'PENDING_PAYMENT', 'source', ?))`,
|
||||
[input.tenantId, orderId, `order:${orderId}:created:notification`,
|
||||
String(room.storeId), input.roomId, orderId, orderNo, input.userId,
|
||||
input.actor?.source ?? 'APP']
|
||||
);
|
||||
if (input.actor?.source === 'ADMIN') {
|
||||
await connection.execute(
|
||||
`INSERT INTO qipai_audit_logs
|
||||
@@ -241,6 +251,20 @@ export class PricingRepository {
|
||||
WHERE ${filters.join(' AND ')}`,
|
||||
params
|
||||
);
|
||||
await connection.execute<ResultSetHeader>(
|
||||
`INSERT IGNORE INTO qipai_outbox_events
|
||||
(tenant_id, aggregate_type, aggregate_id, event_type, idempotency_key, payload)
|
||||
SELECT o.tenant_id, 'ORDER', CAST(o.id AS CHAR), 'ORDER_EXPIRED',
|
||||
CONCAT('order:', o.id, ':expired:notification'),
|
||||
JSON_OBJECT('storeId', o.store_id, 'roomId', o.room_id, 'orderId', o.id,
|
||||
'customerId', (SELECT a.user_id FROM qipai_order_user_access a
|
||||
WHERE a.tenant_id = o.tenant_id AND a.order_id = o.id ORDER BY a.user_id LIMIT 1),
|
||||
'status', 'CLOSED')
|
||||
FROM qipai_room_reservations r
|
||||
INNER JOIN qipai_orders o ON o.id = r.order_id AND o.tenant_id = r.tenant_id
|
||||
WHERE ${filters.join(' AND ')}`,
|
||||
params
|
||||
);
|
||||
await connection.execute<ResultSetHeader>(
|
||||
`UPDATE qipai_room_reservations r
|
||||
INNER JOIN qipai_orders o
|
||||
|
||||
Reference in New Issue
Block a user