From 0f79b7536a00e0fc1e2f39de8b6f86c28a04620c Mon Sep 17 00:00:00 2001 From: zhuotianyuan Date: Tue, 6 Jan 2026 18:43:30 +0800 Subject: [PATCH] =?UTF-8?q?feat(webhook):=20=E6=B7=BB=E5=8A=A0=E5=AF=B9sho?= =?UTF-8?q?ppy=E5=B9=B3=E5=8F=B0webhook=E7=9A=84=E6=94=AF=E6=8C=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 在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(订单服务): 修复订单内容括号处理并添加同步日志 添加订单同步过程的调试日志 修复订单内容中括号内容的处理逻辑 修正控制器方法名拼写错误 --- src/adapter/shopyy.adapter.ts | 1 - src/config/config.local.ts | 9 +++++---- src/service/order.service.ts | 21 ++++++++++++--------- 3 files changed, 17 insertions(+), 14 deletions(-) diff --git a/src/adapter/shopyy.adapter.ts b/src/adapter/shopyy.adapter.ts index 48d1014..d50e5b2 100644 --- a/src/adapter/shopyy.adapter.ts +++ b/src/adapter/shopyy.adapter.ts @@ -391,7 +391,6 @@ export class ShopyyAdapter implements ISiteAdapter { tracking_number: f.tracking_number || '', shipping_provider: f.tracking_company || '', shipping_method: f.tracking_company || '', - date_created: typeof f.created_at === 'number' ? new Date(f.created_at * 1000).toISOString() : f.created_at || '', diff --git a/src/config/config.local.ts b/src/config/config.local.ts index b02f922..67785b5 100644 --- a/src/config/config.local.ts +++ b/src/config/config.local.ts @@ -12,14 +12,15 @@ export default { // }, // }, // }, - typeorm: { + typeorm: { dataSource: { default: { - host: 'localhost', - port: "23306", + host: '13.212.62.127', + port: "3306", username: 'root', - password: '12345678', + password: 'Yoone!@.2025', database: 'inventory_v2', + synchronize: true, }, }, }, diff --git a/src/service/order.service.ts b/src/service/order.service.ts index 586dc42..282c093 100644 --- a/src/service/order.service.ts +++ b/src/service/order.service.ts @@ -141,7 +141,7 @@ export class OrderService { updated: 0, errors: [] }; - + console.log('开始进入循环同步订单', result.length, '个订单') // 遍历每个订单进行同步 for (const order of result) { try { @@ -165,6 +165,7 @@ export class OrderService { } else { syncResult.created++; } + // console.log('updated', syncResult.updated, 'created:', syncResult.created) } catch (error) { // 记录错误但不中断整个同步过程 syncResult.errors.push({ @@ -174,6 +175,8 @@ export class OrderService { syncResult.processed++; } } + console.log('同步完成', syncResult.updated, 'created:', syncResult.created) + this.logger.debug('syncOrders result', syncResult) return syncResult; } @@ -350,14 +353,14 @@ export class OrderService { await this.saveOrderItems({ siteId, orderId, - externalOrderId, + externalOrderId: String(externalOrderId), orderItems: line_items, }); // 保存退款信息 await this.saveOrderRefunds({ siteId, orderId, - externalOrderId, + externalOrderId , refunds, }); // 保存费用信息 @@ -1229,13 +1232,13 @@ export class OrderService { parameters.push(siteId); } if (startDate) { - sqlQuery += ` AND o.date_created >= ?`; - totalQuery += ` AND o.date_created >= ?`; + sqlQuery += ` AND o.date_paid >= ?`; + totalQuery += ` AND o.date_paid >= ?`; parameters.push(startDate); } if (endDate) { - sqlQuery += ` AND o.date_created <= ?`; - totalQuery += ` AND o.date_created <= ?`; + sqlQuery += ` AND o.date_paid <= ?`; + totalQuery += ` AND o.date_paid <= ?`; parameters.push(endDate); } // 支付方式筛选(使用参数化,避免SQL注入) @@ -1323,7 +1326,7 @@ export class OrderService { // 添加分页到主查询 sqlQuery += ` GROUP BY o.id - ORDER BY o.date_created DESC + ORDER BY o.date_paid DESC LIMIT ? OFFSET ? `; parameters.push(pageSize, (current - 1) * pageSize); @@ -2541,7 +2544,7 @@ export class OrderService { '姓名地址': nameAddress, '邮箱': order.customer_email || '', '号码': phone, - '订单内容': orderContent, + '订单内容': this.removeLastParenthesesContent(orderContent), '盒数': boxCount, '换盒数': exchangeBoxCount, '换货内容': exchangeContent,