zksu
/
API
forked from yoone/API
1
0
Fork 0

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
parent 75056db42c
commit 86fd31ac12
3 changed files with 27 additions and 8 deletions

View File

@ -393,6 +393,7 @@ 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

@ -1211,6 +1211,7 @@ export interface ShopyyOrder {
// 时间戳信息 // 时间戳信息
// ======================================== // ========================================
// 订单创建时间 // 订单创建时间
date_paid?: number | string;
created_at?: number | string; created_at?: number | string;
// 订单添加时间 // 订单添加时间
date_added?: string; date_added?: string;

View File

@ -142,6 +142,7 @@ export class OrderService {
errors: [] errors: []
}; };
console.log('开始进入循环同步订单', result.length, '个订单') console.log('开始进入循环同步订单', result.length, '个订单')
console.log('开始进入循环同步订单', result.length, '个订单')
// 遍历每个订单进行同步 // 遍历每个订单进行同步
for (const order of result) { for (const order of result) {
try { try {
@ -329,16 +330,33 @@ export class OrderService {
this.logger.debug('订单状态为 AUTO_DRAFT,跳过处理', siteId, order.id) this.logger.debug('订单状态为 AUTO_DRAFT,跳过处理', siteId, order.id)
return; return;
} }
// 这里其实不用过滤不可编辑的行为,而是应在 save 中做判断 // 检查数据库中是否已存在该订单
// if(!order.is_editable && !forceUpdate){ const existingOrder = await this.orderModel.findOne({
// this.logger.debug('订单不可编辑,跳过处理', siteId, order.id) where: { externalOrderId: String(order.id), siteId: siteId },
// return; });
// } // 自动更新订单状态(如果需要)
// 自动转换远程订单的状态(如果需要)
await this.autoUpdateOrderStatus(siteId, order); await this.autoUpdateOrderStatus(siteId, order);
if(existingOrder){
// 矫正数据库中的订单数据
const updateData: any = { status: order.status };
if (this.canUpdateErpStatus(existingOrder.orderStatus)) {
updateData.orderStatus = this.mapOrderStatus(order.status as any);
}
// 更新订单主数据
await this.orderModel.update({ externalOrderId: String(order.id), siteId: siteId }, updateData);
// 更新 fulfillments 数据
await this.saveOrderFulfillments({
siteId,
orderId: existingOrder.id,
externalOrderId:order.id,
fulfillments: fulfillments,
});
}
const externalOrderId = String(order.id);
// 这里的 saveOrder 已经包括了创建订单和更新订单 // 这里的 saveOrder 已经包括了创建订单和更新订单
let orderRecord: Order = await this.saveOrder(siteId, orderData); let orderRecord: Order = await this.saveOrder(siteId, orderData);
// 如果订单从未完成变为完成状态,则更新库存 // 如果订单从未完成变为完成状态,则更新库存
if ( if (
orderRecord && orderRecord &&
orderRecord.orderStatus !== ErpOrderStatus.COMPLETED && orderRecord.orderStatus !== ErpOrderStatus.COMPLETED &&
@ -347,7 +365,6 @@ export class OrderService {
await this.updateStock(orderRecord); await this.updateStock(orderRecord);
// 不再直接返回,继续执行后续的更新操作 // 不再直接返回,继续执行后续的更新操作
} }
const externalOrderId = String(order.id);
const orderId = orderRecord.id; const orderId = orderRecord.id;
// 保存订单项 // 保存订单项
await this.saveOrderItems({ await this.saveOrderItems({