2025-07-10 10:28:06 +08:00

135 lines
3.6 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import type { DynamicDeviceData, DynamicPageResponse } from './types';
// 示例1处理标准IoTDB数据
export const handleStandardIoTDBData = (response: any): DynamicPageResponse<DynamicDeviceData> => {
// 确保响应格式正确
if (!response || !response.items) {
return { items: [], totalCount: 0 };
}
// 转换数据,确保所有字段都被包含
const items = response.items.map((item: any) => ({
SystemName: item.SystemName || '',
ProjectId: item.ProjectId || '',
ProjectName: item.ProjectName || '',
IoTDataType: item.IoTDataType || '',
DeviceType: item.DeviceType || '',
DeviceId: item.DeviceId || '',
Timestamps: item.Timestamps || '',
APPData: item.APPData || '',
// 包含所有其他字段
...item,
}));
return {
items,
totalCount: response.totalCount || items.length,
};
};
// 示例2处理自定义字段数据
export const handleCustomFieldData = (response: any): DynamicPageResponse<DynamicDeviceData> => {
if (!response || !response.items) {
return { items: [], totalCount: 0 };
}
// 直接使用原始数据,允许任意字段
return {
items: response.items,
totalCount: response.totalCount || response.items.length,
};
};
// 示例3数据验证和清理
export const validateAndCleanData = (data: any[]): DynamicDeviceData[] => {
return data.map(item => {
const cleaned: DynamicDeviceData = {};
// 遍历所有字段,进行类型转换和清理
Object.keys(item).forEach(key => {
const value = item[key];
// 根据字段名进行特殊处理
switch (key) {
case 'Timestamps':
cleaned[key] = value ? String(value) : '';
break;
case 'SystemName':
case 'ProjectName':
case 'DeviceType':
case 'IoTDataType':
cleaned[key] = value ? String(value) : '';
break;
case 'ProjectId':
case 'DeviceId':
cleaned[key] = value ? String(value) : '';
break;
case 'APPData':
// 尝试解析JSON数据
try {
if (typeof value === 'string') {
cleaned[key] = JSON.parse(value);
} else {
cleaned[key] = value;
}
} catch {
cleaned[key] = value;
}
break;
default:
// 对于未知字段,保持原值
cleaned[key] = value;
}
});
return cleaned;
});
};
// 示例4动态字段检测
export const detectDynamicFields = (data: DynamicDeviceData[]): string[] => {
if (!data || data.length === 0) return [];
const allFields = new Set<string>();
data.forEach(item => {
Object.keys(item).forEach(key => {
allFields.add(key);
});
});
return Array.from(allFields);
};
// 示例5字段重要性排序
export const sortFieldsByImportance = (fields: string[]): string[] => {
const importanceOrder = [
'Timestamps',
'SystemName',
'ProjectName',
'DeviceType',
'DeviceId',
'IoTDataType',
'APPData',
];
return fields.sort((a, b) => {
const aIndex = importanceOrder.indexOf(a);
const bIndex = importanceOrder.indexOf(b);
// 如果都在预定义列表中,按列表顺序排序
if (aIndex !== -1 && bIndex !== -1) {
return aIndex - bIndex;
}
// 如果只有a在预定义列表中a排在前面
if (aIndex !== -1) return -1;
// 如果只有b在预定义列表中b排在前面
if (bIndex !== -1) return 1;
// 都不在预定义列表中,按字母顺序排序
return a.localeCompare(b);
});
};