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; @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) { const siteProduct = this.siteProductModel.create(data); return await this.siteProductModel.save(siteProduct); } async updateSiteProduct(id: string, data: Partial) { 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: '同步成功', }; } }