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:
20
server/src/core/ai/SchemaMappingService.ts
Normal file
20
server/src/core/ai/SchemaMappingService.ts
Normal 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: {}
|
||||
};
|
||||
}
|
||||
}
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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)
|
||||
*/
|
||||
|
||||
Reference in New Issue
Block a user