Files
nxxmdata/backend/examples/smart-eartag-alert-usage.js
2025-09-22 19:09:45 +08:00

329 lines
8.6 KiB
JavaScript

/**
* 智能耳标预警API使用示例
* @file smart-eartag-alert-usage.js
* @description 展示如何在其他程序中调用智能耳标预警API
*/
const axios = require('axios');
// 配置API基础URL
const API_BASE_URL = 'http://localhost:5350/api/smart-alerts/public';
// 创建API客户端类
class SmartEartagAlertClient {
constructor(baseURL = API_BASE_URL) {
this.client = axios.create({
baseURL,
timeout: 10000,
headers: {
'Content-Type': 'application/json'
}
});
}
/**
* 获取预警统计
*/
async getAlertStats() {
try {
const response = await this.client.get('/eartag/stats');
return response.data;
} catch (error) {
console.error('获取预警统计失败:', error.message);
throw error;
}
}
/**
* 获取预警列表
* @param {Object} options - 查询选项
*/
async getAlerts(options = {}) {
try {
const params = {
page: options.page || 1,
limit: options.limit || 10,
search: options.search,
alertType: options.alertType,
alertLevel: options.alertLevel,
status: options.status,
startDate: options.startDate,
endDate: options.endDate
};
const response = await this.client.get('/eartag', { params });
return response.data;
} catch (error) {
console.error('获取预警列表失败:', error.message);
throw error;
}
}
/**
* 获取预警详情
* @param {string} alertId - 预警ID
*/
async getAlertById(alertId) {
try {
const response = await this.client.get(`/eartag/${alertId}`);
return response.data;
} catch (error) {
console.error('获取预警详情失败:', error.message);
throw error;
}
}
/**
* 处理预警
* @param {string} alertId - 预警ID
* @param {Object} data - 处理数据
*/
async handleAlert(alertId, data = {}) {
try {
const response = await this.client.post(`/eartag/${alertId}/handle`, data);
return response.data;
} catch (error) {
console.error('处理预警失败:', error.message);
throw error;
}
}
/**
* 批量处理预警
* @param {Array} alertIds - 预警ID列表
* @param {Object} data - 处理数据
*/
async batchHandleAlerts(alertIds, data = {}) {
try {
const requestData = {
alertIds,
...data
};
const response = await this.client.post('/eartag/batch-handle', requestData);
return response.data;
} catch (error) {
console.error('批量处理预警失败:', error.message);
throw error;
}
}
/**
* 导出预警数据
* @param {Object} options - 导出选项
*/
async exportAlerts(options = {}) {
try {
const params = {
search: options.search,
alertType: options.alertType,
alertLevel: options.alertLevel,
startDate: options.startDate,
endDate: options.endDate,
format: options.format || 'json'
};
const response = await this.client.get('/eartag/export', { params });
return response.data;
} catch (error) {
console.error('导出预警数据失败:', error.message);
throw error;
}
}
}
// 使用示例
async function demonstrateUsage() {
console.log('🚀 智能耳标预警API使用示例\n');
const client = new SmartEartagAlertClient();
try {
// 1. 获取预警统计
console.log('1. 获取预警统计...');
const stats = await client.getAlertStats();
console.log('预警统计:', stats.data);
console.log('');
// 2. 获取预警列表
console.log('2. 获取预警列表...');
const alerts = await client.getAlerts({
page: 1,
limit: 5,
alertType: 'battery' // 只获取低电量预警
});
console.log(`找到 ${alerts.total} 条预警,当前页显示 ${alerts.data.length}`);
console.log('');
// 3. 获取预警详情
if (alerts.data.length > 0) {
console.log('3. 获取预警详情...');
const alertId = alerts.data[0].id;
const alertDetail = await client.getAlertById(alertId);
console.log('预警详情:', alertDetail.data);
console.log('');
// 4. 处理预警
console.log('4. 处理预警...');
const handleResult = await client.handleAlert(alertId, {
action: 'acknowledged',
notes: '通过API自动处理',
handler: 'system'
});
console.log('处理结果:', handleResult.data);
console.log('');
}
// 5. 批量处理预警
if (alerts.data.length > 1) {
console.log('5. 批量处理预警...');
const alertIds = alerts.data.slice(0, 2).map(alert => alert.id);
const batchResult = await client.batchHandleAlerts(alertIds, {
action: 'acknowledged',
notes: '批量处理',
handler: 'system'
});
console.log(`批量处理结果: 成功处理 ${batchResult.data.processedCount} 个预警`);
console.log('');
}
// 6. 导出预警数据
console.log('6. 导出预警数据...');
const exportData = await client.exportAlerts({
alertType: 'battery',
format: 'json'
});
console.log(`导出数据: ${exportData.data.length} 条预警记录`);
console.log('');
console.log('✅ 所有示例执行完成!');
} catch (error) {
console.error('❌ 示例执行失败:', error.message);
}
}
// 高级使用示例:监控预警变化
class AlertMonitor {
constructor(client, options = {}) {
this.client = client;
this.interval = options.interval || 30000; // 30秒检查一次
this.lastStats = null;
this.callbacks = {
onNewAlert: options.onNewAlert || (() => {}),
onAlertChange: options.onAlertChange || (() => {}),
onError: options.onError || (() => {})
};
}
start() {
console.log('🔍 开始监控预警变化...');
this.monitorInterval = setInterval(() => {
this.checkAlerts();
}, this.interval);
}
stop() {
if (this.monitorInterval) {
clearInterval(this.monitorInterval);
console.log('⏹️ 停止监控预警变化');
}
}
async checkAlerts() {
try {
const stats = await this.client.getAlertStats();
if (this.lastStats) {
// 检查是否有新的预警
const newAlerts = stats.data.totalAlerts - this.lastStats.totalAlerts;
if (newAlerts > 0) {
console.log(`🚨 发现 ${newAlerts} 个新预警!`);
this.callbacks.onNewAlert(newAlerts, stats.data);
}
// 检查各类预警数量变化
const changes = this.detectChanges(this.lastStats, stats.data);
if (changes.length > 0) {
console.log('📊 预警统计变化:', changes);
this.callbacks.onAlertChange(changes, stats.data);
}
}
this.lastStats = stats.data;
} catch (error) {
console.error('监控预警失败:', error.message);
this.callbacks.onError(error);
}
}
detectChanges(oldStats, newStats) {
const changes = [];
const fields = ['lowBattery', 'offline', 'highTemperature', 'abnormalMovement'];
fields.forEach(field => {
const oldValue = oldStats[field] || 0;
const newValue = newStats[field] || 0;
const diff = newValue - oldValue;
if (diff !== 0) {
changes.push({
type: field,
oldValue,
newValue,
diff
});
}
});
return changes;
}
}
// 监控示例
async function demonstrateMonitoring() {
console.log('\n🔍 预警监控示例\n');
const client = new SmartEartagAlertClient();
const monitor = new AlertMonitor(client, {
interval: 10000, // 10秒检查一次
onNewAlert: (count, stats) => {
console.log(`🚨 发现 ${count} 个新预警!当前总计: ${stats.totalAlerts}`);
},
onAlertChange: (changes, stats) => {
changes.forEach(change => {
const direction = change.diff > 0 ? '增加' : '减少';
console.log(`📊 ${change.type} 预警${direction} ${Math.abs(change.diff)}`);
});
},
onError: (error) => {
console.error('监控错误:', error.message);
}
});
// 开始监控
monitor.start();
// 30秒后停止监控
setTimeout(() => {
monitor.stop();
console.log('监控示例结束');
}, 30000);
}
// 如果直接运行此文件
if (require.main === module) {
// 运行基本使用示例
demonstrateUsage().then(() => {
// 运行监控示例
return demonstrateMonitoring();
}).catch(console.error);
}
// 导出类和函数
module.exports = {
SmartEartagAlertClient,
AlertMonitor,
demonstrateUsage,
demonstrateMonitoring
};