feat(webhook): 添加对shoppy平台webhook的支持

- 在site.entity.ts中添加webhookUrl字段
- 在auth.middleware.ts中添加/shoppy路由到白名单
- 在webhook.controller.ts中实现shoppy平台webhook处理逻辑

fix(webhook): 更新webhook控制器中的密钥值

refactor(entity): 将可选字段明确标记为可选类型

feat(adapter): 公开映射方法以支持统一接口调用

将各适配器中的私有映射方法改为公开,并在接口中定义统一方法签名
修改webhook控制器以使用适配器映射方法处理订单数据

feat: 添加订单支付日期字段并支持国家筛选

- 在ShopyyOrder接口中添加date_paid字段
- 在OrderStatisticsParams中添加country数组字段用于国家筛选
- 修改统计服务以支持按国家筛选订单数据
- 更新数据库配置和同步设置
- 优化订单服务中的类型定义和查询条件

refactor(webhook): 移除未使用的shoppy webhook处理逻辑

fix(订单服务): 修复订单内容括号处理并添加同步日志

添加订单同步过程的调试日志
修复订单内容中括号内容的处理逻辑
修正控制器方法名拼写错误
This commit is contained in:
zhuotianyuan 2026-01-06 18:43:30 +08:00 committed by 黄珑
parent fbbb86ae37
commit 0f79b7536a
3 changed files with 17 additions and 14 deletions

View File

@ -391,7 +391,6 @@ export class ShopyyAdapter implements ISiteAdapter {
tracking_number: f.tracking_number || '', tracking_number: f.tracking_number || '',
shipping_provider: f.tracking_company || '', shipping_provider: f.tracking_company || '',
shipping_method: f.tracking_company || '', shipping_method: f.tracking_company || '',
date_created: typeof f.created_at === 'number' date_created: typeof f.created_at === 'number'
? new Date(f.created_at * 1000).toISOString() ? new Date(f.created_at * 1000).toISOString()
: f.created_at || '', : f.created_at || '',

View File

@ -15,11 +15,12 @@ export default {
typeorm: { typeorm: {
dataSource: { dataSource: {
default: { default: {
host: 'localhost', host: '13.212.62.127',
port: "23306", port: "3306",
username: 'root', username: 'root',
password: '12345678', password: 'Yoone!@.2025',
database: 'inventory_v2', database: 'inventory_v2',
synchronize: true,
}, },
}, },
}, },

View File

@ -141,7 +141,7 @@ export class OrderService {
updated: 0, updated: 0,
errors: [] errors: []
}; };
console.log('开始进入循环同步订单', result.length, '个订单')
// 遍历每个订单进行同步 // 遍历每个订单进行同步
for (const order of result) { for (const order of result) {
try { try {
@ -165,6 +165,7 @@ export class OrderService {
} else { } else {
syncResult.created++; syncResult.created++;
} }
// console.log('updated', syncResult.updated, 'created:', syncResult.created)
} catch (error) { } catch (error) {
// 记录错误但不中断整个同步过程 // 记录错误但不中断整个同步过程
syncResult.errors.push({ syncResult.errors.push({
@ -174,6 +175,8 @@ export class OrderService {
syncResult.processed++; syncResult.processed++;
} }
} }
console.log('同步完成', syncResult.updated, 'created:', syncResult.created)
this.logger.debug('syncOrders result', syncResult) this.logger.debug('syncOrders result', syncResult)
return syncResult; return syncResult;
} }
@ -350,7 +353,7 @@ export class OrderService {
await this.saveOrderItems({ await this.saveOrderItems({
siteId, siteId,
orderId, orderId,
externalOrderId, externalOrderId: String(externalOrderId),
orderItems: line_items, orderItems: line_items,
}); });
// 保存退款信息 // 保存退款信息
@ -1229,13 +1232,13 @@ export class OrderService {
parameters.push(siteId); parameters.push(siteId);
} }
if (startDate) { if (startDate) {
sqlQuery += ` AND o.date_created >= ?`; sqlQuery += ` AND o.date_paid >= ?`;
totalQuery += ` AND o.date_created >= ?`; totalQuery += ` AND o.date_paid >= ?`;
parameters.push(startDate); parameters.push(startDate);
} }
if (endDate) { if (endDate) {
sqlQuery += ` AND o.date_created <= ?`; sqlQuery += ` AND o.date_paid <= ?`;
totalQuery += ` AND o.date_created <= ?`; totalQuery += ` AND o.date_paid <= ?`;
parameters.push(endDate); parameters.push(endDate);
} }
// 支付方式筛选(使用参数化,避免SQL注入) // 支付方式筛选(使用参数化,避免SQL注入)
@ -1323,7 +1326,7 @@ export class OrderService {
// 添加分页到主查询 // 添加分页到主查询
sqlQuery += ` sqlQuery += `
GROUP BY o.id GROUP BY o.id
ORDER BY o.date_created DESC ORDER BY o.date_paid DESC
LIMIT ? OFFSET ? LIMIT ? OFFSET ?
`; `;
parameters.push(pageSize, (current - 1) * pageSize); parameters.push(pageSize, (current - 1) * pageSize);
@ -2541,7 +2544,7 @@ export class OrderService {
'姓名地址': nameAddress, '姓名地址': nameAddress,
'邮箱': order.customer_email || '', '邮箱': order.customer_email || '',
'号码': phone, '号码': phone,
'订单内容': orderContent, '订单内容': this.removeLastParenthesesContent(orderContent),
'盒数': boxCount, '盒数': boxCount,
'换盒数': exchangeBoxCount, '换盒数': exchangeBoxCount,
'换货内容': exchangeContent, '换货内容': exchangeContent,