forked from yoone/API
refactor: 统一从数据库获取站点信息替代硬编码配置
This commit is contained in:
parent
a59d5a7b75
commit
927857a795
|
|
@ -33,7 +33,7 @@ export class WebhookController {
|
||||||
@Inject()
|
@Inject()
|
||||||
private readonly siteService: SiteService;
|
private readonly siteService: SiteService;
|
||||||
|
|
||||||
// 中文注释:移除配置中的站点数组,来源统一改为数据库
|
// 移除配置中的站点数组,来源统一改为数据库
|
||||||
|
|
||||||
@Get('/')
|
@Get('/')
|
||||||
async test() {
|
async test() {
|
||||||
|
|
@ -49,7 +49,7 @@ export class WebhookController {
|
||||||
const signature = header['x-wc-webhook-signature'];
|
const signature = header['x-wc-webhook-signature'];
|
||||||
const topic = header['x-wc-webhook-topic'];
|
const topic = header['x-wc-webhook-topic'];
|
||||||
const source = header['x-wc-webhook-source'];
|
const source = header['x-wc-webhook-source'];
|
||||||
// 中文注释:从数据库获取站点配置
|
// 从数据库获取站点配置
|
||||||
const site = await this.siteService.get(Number(siteId), true);
|
const site = await this.siteService.get(Number(siteId), true);
|
||||||
|
|
||||||
if (!site || !source.includes(site.apiUrl)) {
|
if (!site || !source.includes(site.apiUrl)) {
|
||||||
|
|
|
||||||
|
|
@ -25,7 +25,7 @@ import {
|
||||||
} from '../dto/reponse.dto';
|
} from '../dto/reponse.dto';
|
||||||
@Controller('/wp_product')
|
@Controller('/wp_product')
|
||||||
export class WpProductController {
|
export class WpProductController {
|
||||||
// 中文注释:移除控制器内的配置站点引用,统一由服务层处理站点数据
|
// 移除控制器内的配置站点引用,统一由服务层处理站点数据
|
||||||
|
|
||||||
@Inject()
|
@Inject()
|
||||||
private readonly wpProductService: WpProductService;
|
private readonly wpProductService: WpProductService;
|
||||||
|
|
|
||||||
|
|
@ -558,7 +558,7 @@ export class LogisticsService {
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
// 中文注释:从数据库批量获取站点信息,构建映射以避免 N+1 查询
|
// 从数据库批量获取站点信息,构建映射以避免 N+1 查询
|
||||||
const siteIds = Array.from(new Set(orders.map(o => o.siteId).filter(Boolean)));
|
const siteIds = Array.from(new Set(orders.map(o => o.siteId).filter(Boolean)));
|
||||||
const { items: sites } = await this.siteService.list({ current: 1, pageSize: 1000, ids: siteIds.join(',') }, false);
|
const { items: sites } = await this.siteService.list({ current: 1, pageSize: 1000, ids: siteIds.join(',') }, false);
|
||||||
const siteMap = new Map(sites.map((s: any) => [String(s.id), s.siteName]));
|
const siteMap = new Map(sites.map((s: any) => [String(s.id), s.siteName]));
|
||||||
|
|
|
||||||
|
|
@ -130,7 +130,7 @@ export class OrderService {
|
||||||
}
|
}
|
||||||
try {
|
try {
|
||||||
const site = await this.siteService.get(siteId);
|
const site = await this.siteService.get(siteId);
|
||||||
// 中文注释:将订单状态同步到 WooCommerce,然后切换至下一状态
|
// 将订单状态同步到 WooCommerce,然后切换至下一状态
|
||||||
await this.wpService.updateOrder(site, String(order.id), { status: order.status });
|
await this.wpService.updateOrder(site, String(order.id), { status: order.status });
|
||||||
order.status = this.orderAutoNextStatusMap[originStatus];
|
order.status = this.orderAutoNextStatusMap[originStatus];
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
|
|
@ -1351,7 +1351,7 @@ export class OrderService {
|
||||||
return {
|
return {
|
||||||
...order,
|
...order,
|
||||||
siteName: site?.siteName,
|
siteName: site?.siteName,
|
||||||
// 中文注释:Site 实体无邮箱字段,这里返回空字符串保持兼容
|
// Site 实体无邮箱字段,这里返回空字符串保持兼容
|
||||||
email: '',
|
email: '',
|
||||||
items,
|
items,
|
||||||
sales,
|
sales,
|
||||||
|
|
@ -1415,7 +1415,7 @@ export class OrderService {
|
||||||
]),
|
]),
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
// 中文注释:批量获取订单涉及的站点名称,避免使用配置文件
|
// 批量获取订单涉及的站点名称,避免使用配置文件
|
||||||
const siteIds = Array.from(new Set(orders.map(o => o.siteId).filter(Boolean)));
|
const siteIds = Array.from(new Set(orders.map(o => o.siteId).filter(Boolean)));
|
||||||
const { items: sites } = await this.siteService.list({ current: 1, pageSize: 1000, ids: siteIds.join(',') }, false);
|
const { items: sites } = await this.siteService.list({ current: 1, pageSize: 1000, ids: siteIds.join(',') }, false);
|
||||||
const siteMap = new Map(sites.map((s: any) => [String(s.id), s.siteName]));
|
const siteMap = new Map(sites.map((s: any) => [String(s.id), s.siteName]));
|
||||||
|
|
|
||||||
|
|
@ -15,7 +15,7 @@ import { SiteService } from './site.service';
|
||||||
|
|
||||||
@Provide()
|
@Provide()
|
||||||
export class WpProductService {
|
export class WpProductService {
|
||||||
// 中文注释:移除配置中的站点数组,统一从数据库获取站点信息
|
// 移除配置中的站点数组,统一从数据库获取站点信息
|
||||||
|
|
||||||
@Inject()
|
@Inject()
|
||||||
private readonly wpApiService: WPService;
|
private readonly wpApiService: WPService;
|
||||||
|
|
@ -31,7 +31,7 @@ export class WpProductService {
|
||||||
|
|
||||||
|
|
||||||
async syncAllSites() {
|
async syncAllSites() {
|
||||||
// 中文注释:从数据库获取所有启用的站点,并逐站点同步产品与变体
|
// 从数据库获取所有启用的站点,并逐站点同步产品与变体
|
||||||
const { items: sites } = await this.siteService.list({ current: 1, pageSize: Infinity, isDisabled: false }, true);
|
const { items: sites } = await this.siteService.list({ current: 1, pageSize: Infinity, isDisabled: false }, true);
|
||||||
for (const site of sites) {
|
for (const site of sites) {
|
||||||
const products = await this.wpApiService.getProducts(site);
|
const products = await this.wpApiService.getProducts(site);
|
||||||
|
|
@ -46,7 +46,7 @@ export class WpProductService {
|
||||||
}
|
}
|
||||||
// 同步一个网站
|
// 同步一个网站
|
||||||
async syncSite(siteId: string) {
|
async syncSite(siteId: string) {
|
||||||
// 中文注释:通过数据库获取站点并转换为 WpSite,用于后续 WooCommerce 同步
|
// 通过数据库获取站点并转换为 WpSite,用于后续 WooCommerce 同步
|
||||||
const site = await this.siteService.get(Number(siteId), true);
|
const site = await this.siteService.get(Number(siteId), true);
|
||||||
const externalProductIds = this.wpProductModel.createQueryBuilder('wp_product')
|
const externalProductIds = this.wpProductModel.createQueryBuilder('wp_product')
|
||||||
.select([
|
.select([
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue