Files
nxxmdata/backend/verify-farms-import.js
2025-08-25 15:00:46 +08:00

110 lines
3.7 KiB
JavaScript
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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.

const { Farm } = require('./models');
/**
* 验证farms数据导入结果
*/
async function verifyFarmsImport() {
try {
console.log('验证farms数据导入结果...');
// 获取所有farms数据
const farms = await Farm.findAll({
order: [['id', 'ASC']]
});
console.log(`\n✅ 数据库中共有 ${farms.length} 个农场`);
// 验证API静态数据前3个
const apiStaticFarms = farms.slice(0, 3);
console.log('\n📊 API静态数据验证:');
apiStaticFarms.forEach(farm => {
console.log(` ID: ${farm.id}, Name: ${farm.name}, Type: ${farm.type}, Address: ${farm.address}`);
});
// 验证种子数据后8个
const seedFarms = farms.slice(3);
console.log('\n🌱 种子数据验证:');
seedFarms.forEach(farm => {
console.log(` ID: ${farm.id}, Name: ${farm.name}, Type: ${farm.type}, Address: ${farm.address}`);
});
// 验证数据完整性
console.log('\n🔍 数据完整性检查:');
const missingFields = [];
farms.forEach(farm => {
if (!farm.name) missingFields.push(`Farm ${farm.id}: 缺少name字段`);
if (!farm.type) missingFields.push(`Farm ${farm.id}: 缺少type字段`);
if (!farm.location) missingFields.push(`Farm ${farm.id}: 缺少location字段`);
if (!farm.status) missingFields.push(`Farm ${farm.id}: 缺少status字段`);
});
if (missingFields.length === 0) {
console.log(' ✅ 所有农场数据字段完整');
} else {
console.log(' ❌ 发现缺失字段:');
missingFields.forEach(field => console.log(` ${field}`));
}
// 验证ID连续性
const ids = farms.map(farm => farm.id);
const expectedIds = Array.from({length: farms.length}, (_, i) => i + 1);
const idsMatch = JSON.stringify(ids) === JSON.stringify(expectedIds);
if (idsMatch) {
console.log(' ✅ ID序列连续 (1 到 ' + farms.length + ')');
} else {
console.log(' ❌ ID序列不连续');
console.log(` 实际ID: [${ids.join(', ')}]`);
console.log(` 期望ID: [${expectedIds.join(', ')}]`);
}
// 统计农场类型
const typeStats = {};
farms.forEach(farm => {
typeStats[farm.type] = (typeStats[farm.type] || 0) + 1;
});
console.log('\n📈 农场类型统计:');
Object.entries(typeStats).forEach(([type, count]) => {
console.log(` ${type}: ${count}`);
});
// 验证地理位置数据
console.log('\n🗺 地理位置数据验证:');
const locationErrors = [];
farms.forEach(farm => {
try {
if (typeof farm.location === 'string') {
const location = JSON.parse(farm.location);
if (!location.lat || !location.lng) {
locationErrors.push(`Farm ${farm.id} (${farm.name}): 缺少经纬度信息`);
}
} else if (typeof farm.location === 'object') {
if (!farm.location.lat || !farm.location.lng) {
locationErrors.push(`Farm ${farm.id} (${farm.name}): 缺少经纬度信息`);
}
} else {
locationErrors.push(`Farm ${farm.id} (${farm.name}): location字段格式错误`);
}
} catch (error) {
locationErrors.push(`Farm ${farm.id} (${farm.name}): location JSON解析失败`);
}
});
if (locationErrors.length === 0) {
console.log(' ✅ 所有农场地理位置数据有效');
} else {
console.log(' ❌ 发现地理位置数据问题:');
locationErrors.forEach(error => console.log(` ${error}`));
}
console.log('\n🎉 farms数据导入验证完成!');
} catch (error) {
console.error('❌ 验证失败:', error.message);
}
}
// 执行验证
verifyFarmsImport();