feat: 实现服务层核心功能与文档更新

refactor(ProductService): 修复createProduct方法和其他方法错误
fix(InventoryAgingService): 修复AGING_THRESHOLD_DAYS引用问题
fix(InventoryService): 修复predictSKUDemand方法
refactor(ChatBotController): 从tsoa风格改为Express风格
fix(CommandCenterController): 修复类型问题
fix(AdAutoService): 修复stock可能为undefined的问题
docs: 更新SERVICE_MAP、DOMAIN_MODEL等架构文档
chore: 启动前端服务(运行在http://localhost:8000)
This commit is contained in:
2026-03-18 12:35:52 +08:00
parent 2ad40da777
commit 5cfd0c4c89
55 changed files with 6077 additions and 1733 deletions

View File

@@ -0,0 +1,20 @@
import { logger } from '../../utils/logger';
/**
* [CORE_AI_19] 自动类目映射服务
* @description 提供商品类目和属性的智能映射功能
*/
export class SchemaMappingService {
/**
* 获取或创建类目映射
*/
static async getOrCreateMapping(sourcePlatform: string, sourceCategory: string, targetPlatform: string): Promise<any> {
logger.info(`[SchemaMappingService] Creating mapping from ${sourcePlatform}:${sourceCategory} to ${targetPlatform}`);
// 模拟映射结果
return {
targetCategory: sourceCategory, // 实际业务中应根据平台规则进行映射
attributeMapping: {}
};
}
}

View File

@@ -9,6 +9,9 @@ export interface PlatformProduct {
currency: string;
images: string[];
skus: any[];
platform?: string;
category?: string;
attributes?: Record<string, any>;
// [CORE_INT_04] 独立站特有属性 (Independent Station Specifics)
seo?: {
title?: string;

View File

@@ -1,7 +1,7 @@
import { logger } from '../../utils/logger';
import { FeatureGovernanceService } from '../governance/FeatureGovernanceService';
import db from '../../config/database';
import { RedisService } from '../../services/RedisService';
import RedisService from '../../services/RedisService';
export interface QuotaStatus {
tenantId: string;

View File

@@ -79,7 +79,7 @@ export class PipelineEngine {
/**
* 执行单个步骤 (含 AI 自愈逻辑)
*/
private static async executeStep(instanceId: string, stepRecord: any, context: PipelineContext) {
private static async executeStep(instanceId: string, stepRecord: any, context: PipelineContext): Promise<void> {
logger.info(`[Pipeline] Executing step ${stepRecord.id} (${stepRecord.type})`);
// 1. 更新状态为 RUNNING

View File

@@ -40,7 +40,9 @@ import { DataComplianceService } from '../../services/DataComplianceService';
import { DeadlockAdvisor } from '../../services/DeadlockAdvisor';
import { DisputeResolverService } from '../../services/DisputeResolverService';
import { DynamicPricingService } from '../../services/DynamicPricingService';
import { FinanceReconciliationService } from '../../services/FinanceReconciliationService';
import { FraudSharedService } from '../../services/FraudSharedService';
import { MediaAssetService } from '../../services/MediaAssetService';
import { OmniStockService } from '../../services/OmniStockService';
import { OrderProfitService } from '../../services/OrderProfitService';
import { PredictiveHealthService } from '../../services/PredictiveHealthService';
@@ -48,6 +50,12 @@ import { PricingAuditService } from '../../services/PricingAuditService';
import { ProductHealthService } from '../../services/ProductHealthService';
import { QuotaCircuitBreakerService } from '../../services/QuotaCircuitBreakerService';
import { RedTeamingService } from '../../services/RedTeamingService';
import { ReportService } from '../../services/ReportService';
import { RBACService } from '../../services/RBACService';
import { FeatureActivationService } from '../../services/FeatureActivationService';
import { MerchantSettlementService } from '../../services/MerchantSettlementService';
import { MerchantProductOrderService } from '../../services/MerchantProductOrderService';
import { BillingService } from '../../services/BillingService';
import { ReviewService } from '../../services/ReviewService';
import { SemanticLogService } from '../../services/SemanticLogService';
import { SovereignReputationV2Service } from '../../services/SovereignReputationV2Service';
@@ -995,6 +1003,41 @@ export class DomainBootstrap {
priority: DomainRegistry.Priority.BIZ_DOMAIN,
init: () => SupplierService.initTable()
});
DomainRegistry.register({
name: 'MediaAssetService',
priority: DomainRegistry.Priority.BIZ_DOMAIN,
init: () => MediaAssetService.initTable()
});
DomainRegistry.register({
name: 'FinanceReconciliationService',
priority: DomainRegistry.Priority.BIZ_DOMAIN,
init: () => FinanceReconciliationService.initTable()
});
DomainRegistry.register({
name: 'ReportService',
priority: DomainRegistry.Priority.BIZ_DOMAIN,
init: () => ReportService.initTable()
});
DomainRegistry.register({
name: 'RBACService',
priority: DomainRegistry.Priority.CORE_INFRA,
init: () => RBACService.initTable()
});
DomainRegistry.register({
name: 'FeatureActivationService',
priority: DomainRegistry.Priority.BIZ_DOMAIN,
init: () => FeatureActivationService.initTable()
});
DomainRegistry.register({
name: 'MerchantSettlementService',
priority: DomainRegistry.Priority.BIZ_DOMAIN,
init: () => MerchantSettlementService.initTable()
});
DomainRegistry.register({
name: 'MerchantProductOrderService',
priority: DomainRegistry.Priority.BIZ_DOMAIN,
init: () => MerchantProductOrderService.initTable()
});
// 执行全量 Bootstrap
await DomainRegistry.bootstrap();

View File

@@ -41,6 +41,22 @@ export class WorkerHub {
this.dispatch();
}
/**
* 静态方法:添加任务(兼容旧调用)
*/
static async addJob(queueName: string, jobData: any, options?: any): Promise<{ id: string }> {
const taskId = jobData.retryCount ? `job-${Date.now()}-${jobData.retryCount}` : `job-${Date.now()}`;
const workerTask: WorkerTask = {
id: taskId,
type: jobData.syncType || 'unknown',
payload: jobData,
priority: 5,
tenantId: jobData.syncOptions?.tenantId || 'unknown'
};
await this.submitTask(workerTask);
return { id: taskId };
}
/**
* 任务调度与负载均衡 (Dispatch)
*/