API/src/service/site-product.service.ts

103 lines
2.6 KiB
TypeScript

import { Inject, Provide } from '@midwayjs/core';
import { ILogger } from '@midwayjs/logger';
import { InjectEntityModel } from '@midwayjs/typeorm';
import { Repository } from 'typeorm';
import { SiteProduct } from '../entity/site-product.entity';
@Provide()
export class SiteProductService {
@InjectEntityModel(SiteProduct)
siteProductModel: Repository<SiteProduct>;
@Inject()
logger: ILogger;
async getSiteProductList(params: {
current?: number;
pageSize?: number;
siteId?: number;
name?: string;
sku?: string;
}) {
const {
current = 1,
pageSize = 10,
siteId,
name,
sku,
} = params;
const queryBuilder = this.siteProductModel.createQueryBuilder('siteProduct');
// 根据 siteId 筛选
if (siteId) {
queryBuilder.where('siteProduct.siteId = :siteId', { siteId });
}
// 根据 name 或 sku 模糊搜索
if (name || sku) {
queryBuilder.andWhere(
'(siteProduct.name LIKE :keyword OR siteProduct.sku LIKE :keyword)',
{ keyword: `%${name || sku}%` }
);
}
// 计算总数
const total = await queryBuilder.getCount();
// 分页查询
const items = await queryBuilder
.skip((current - 1) * pageSize)
.take(pageSize)
.orderBy('siteProduct.updatedAt', 'DESC')
.getMany();
return {
total,
items,
current,
pageSize,
};
}
async getSiteProductById(id: string) {
return await this.siteProductModel.findOne({ where: { id } });
}
async createSiteProduct(data: Partial<SiteProduct>) {
const siteProduct = this.siteProductModel.create(data);
return await this.siteProductModel.save(siteProduct);
}
async updateSiteProduct(id: string, data: Partial<SiteProduct>) {
await this.siteProductModel.update(id, data);
return await this.getSiteProductById(id);
}
async deleteSiteProduct(id: string) {
await this.siteProductModel.delete(id);
return true;
}
async batchUpdatePrice(siteId: number, productIds: string[], price: number) {
const result = await this.siteProductModel
.createQueryBuilder()
.update()
.set({ price })
.where('siteId = :siteId AND id IN (:...productIds)', { siteId, productIds })
.execute();
return result.affected || 0;
}
async syncSiteProducts(siteId: number) {
// 这里实现同步逻辑,暂时返回成功
// 实际实现时需要调用对应的站点适配器进行同步
this.logger.info(`Syncing products for site ${siteId}`);
return {
success: true,
message: '同步成功',
};
}
}