feat: 对订单状态进行自动变更 #26
|
|
@ -31,19 +31,22 @@ export enum StockRecordOperationType {
|
|||
IN = 'in',
|
||||
OUT = 'out',
|
||||
}
|
||||
|
||||
// Order status. Options: pending, processing, on-hold, completed, cancelled, refunded, failed and trash. Default is pending.
|
||||
// 原始订单状态
|
||||
export enum OrderStatus {
|
||||
PENDING = 'pending',
|
||||
PROCESSING = 'processing',
|
||||
COMPLETED = 'completed',
|
||||
ON_HOLD = 'on-hold',
|
||||
CANCEL = 'cancelled',
|
||||
REFUNDED = 'refunded',
|
||||
FAILED = 'failed',
|
||||
DRAFT = 'draft',
|
||||
REFUND_REQUESTED = 'refund_requested', // 已申请退款
|
||||
REFUND_APPROVED = 'refund_approved', // 退款申请已通过
|
||||
REFUND_CANCELLED = 'refund_cancelled', // 已取消退款
|
||||
PENDING = 'pending', // default // 待付款
|
||||
PROCESSING = 'processing', // 正在处理
|
||||
ON_HOLD = 'on-hold', // 保留
|
||||
COMPLETED = 'completed', // 已完成
|
||||
CANCEL = 'cancelled', // 已取消
|
||||
REFUNDED = 'refunded', // 已退款
|
||||
FAILED = 'failed', // 失败订单
|
||||
DRAFT = 'draft', // 草稿
|
||||
// TRASH = 'trash',
|
||||
// refund 也就是退款相关的状态
|
||||
RETURN_REQUESTED = 'return-requested', // 已申请退款
|
||||
RETURN_APPROVED = 'return-approved', // 退款申请已通过
|
||||
RETURN_CANCELLED = 'return-cancelled', // 已取消退款
|
||||
}
|
||||
|
||||
export enum ErpOrderStatus {
|
||||
|
|
@ -56,9 +59,9 @@ export enum ErpOrderStatus {
|
|||
AFTER_SALE_PROCESSING = 'after_sale_pending', // 售后处理中
|
||||
PENDING_RESHIPMENT = 'pending_reshipment', // 待补发
|
||||
PENDING_REFUND = 'pending_refund', // 待退款
|
||||
REFUND_REQUESTED = 'refund_requested', // 已申请退款
|
||||
REFUND_APPROVED = 'refund_approved', // 退款申请已通过
|
||||
REFUND_CANCELLED = 'refund_cancelled', // 已取消退款
|
||||
RETURN_REQUESTED = 'return-requested', // 已申请退款
|
||||
RETURN_APPROVED = 'return-approved', // 退款申请已通过
|
||||
RETURN_CANCELLED = 'return-cancelled', // 已取消退款
|
||||
}
|
||||
|
||||
export enum ShipmentType {
|
||||
|
|
|
|||
|
|
@ -111,7 +111,33 @@ export class OrderService {
|
|||
const order = await this.wPService.getOrder(siteId, orderId);
|
||||
await this.syncSingleOrder(siteId, order, true);
|
||||
}
|
||||
|
||||
// 订单状态切换表
|
||||
orderAutoNextStatusMap = {
|
||||
[OrderStatus.RETURN_APPROVED]: OrderStatus.ON_HOLD, // 退款申请已通过转为 on-hold
|
||||
[OrderStatus.RETURN_CANCELLED]: OrderStatus.REFUNDED // 已取消退款转为 refunded
|
||||
}
|
||||
// 由于 wordpress 订单状态和 我们的订单状态 不一致,需要做转换
|
||||
async autoUpdateOrderStatus(siteId: string, order: any) {
|
||||
console.log('更新订单状态', order)
|
||||
// 其他状态保持不变
|
||||
const originStatus = order.status;
|
||||
// 如果有值就赋值
|
||||
if (!this.orderAutoNextStatusMap[originStatus]) {
|
||||
return
|
||||
}
|
||||
try {
|
||||
const site = this.sites.find(v => v.id === siteId);
|
||||
if (!site) {
|
||||
throw new Error(`更新订单信息,但失败,原因为 ${siteId} 的站点信息不存在`)
|
||||
}
|
||||
// 同步更新回 wordpress 的 order 状态
|
||||
await this.wPService.updateOrder(site, order.id, { status: order.status });
|
||||
order.status = this.orderAutoNextStatusMap[originStatus];
|
||||
} catch (error) {
|
||||
console.error('更新订单状态失败,原因为:', error)
|
||||
}
|
||||
}
|
||||
// wordpress 发来,
|
||||
async syncSingleOrder(siteId: string, order: any, forceUpdate = false) {
|
||||
let {
|
||||
line_items,
|
||||
|
|
@ -121,9 +147,12 @@ export class OrderService {
|
|||
refunds,
|
||||
...orderData
|
||||
} = order;
|
||||
console.log('同步进单个订单', order)
|
||||
const existingOrder = await this.orderModel.findOne({
|
||||
where: { externalOrderId: order.id, siteId: siteId },
|
||||
});
|
||||
// 更新状态
|
||||
await this.autoUpdateOrderStatus(siteId, order);
|
||||
const orderId = (await this.saveOrder(siteId, orderData)).id;
|
||||
const externalOrderId = order.id;
|
||||
if (
|
||||
|
|
@ -263,12 +292,12 @@ export class OrderService {
|
|||
return ErpOrderStatus.REFUNDED;
|
||||
case OrderStatus.FAILED:
|
||||
return ErpOrderStatus.FAILED;
|
||||
case OrderStatus.REFUND_REQUESTED:
|
||||
return ErpOrderStatus.REFUND_REQUESTED;
|
||||
case OrderStatus.REFUND_APPROVED:
|
||||
return ErpOrderStatus.REFUND_APPROVED;
|
||||
case OrderStatus.REFUND_CANCELLED:
|
||||
return ErpOrderStatus.REFUND_CANCELLED;
|
||||
case OrderStatus.RETURN_REQUESTED:
|
||||
return ErpOrderStatus.RETURN_REQUESTED;
|
||||
case OrderStatus.RETURN_APPROVED:
|
||||
return ErpOrderStatus.RETURN_APPROVED;
|
||||
case OrderStatus.RETURN_CANCELLED:
|
||||
return ErpOrderStatus.RETURN_CANCELLED;
|
||||
default:
|
||||
return ErpOrderStatus.PENDING;
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue