Files
makemd/server/src/services/CongestionFailoverService.ts

55 lines
1.9 KiB
TypeScript
Raw Normal View History

import db from '../config/database';
import { AuditService } from './AuditService';
import { AIService } from './AIService';
/**
* [BIZ_TRADE_18]
*
*/
export class CongestionFailoverService {
/**
*
*/
static async analyzeAndReroute(tenantId: string, nodeId: string, traceId: string): Promise<void> {
// 1. 获取该节点的实时拥堵度 (模拟调用 AI 流量感知服务)
const congestionLevel = await AIService.getNodeCongestion(nodeId);
// 2. 只有在严重拥堵 (Level > 0.8) 时触发
if (congestionLevel > 0.8) {
const rerouteAdvice = await AIService.generateRerouteAdvice(nodeId);
const delayReduction = rerouteAdvice.estimatedDelayReduction;
await db.transaction(async (trx) => {
// 记录建议
const [id] = await trx('cf_congestion_failover').insert({
tenant_id: tenantId,
node_id: nodeId,
congestion_level: congestionLevel,
reroute_advice: rerouteAdvice.description,
estimated_delay_reduction: delayReduction
});
// 审计记录
await AuditService.log({
tenant_id: tenantId,
action: 'LOGISTICS_CONGESTION_REROUTE',
target_type: 'LOGISTICS_ROUTE',
target_id: nodeId,
trace_id: traceId,
new_data: JSON.stringify({ congestionLevel, delayReduction }),
metadata: JSON.stringify({ rerouteAdvice: rerouteAdvice.description })
});
});
}
}
/**
*
*/
static async getHistory(tenantId: string) {
return await db('cf_congestion_failover')
.where({ tenant_id: tenantId })
.orderBy('created_at', 'desc');
}
}