|  | @@ -0,0 +1,181 @@
 | 
	
		
			
				|  |  | +import { CloudObject } from "src/lib/ncloud";
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +// 鸟类测试数据
 | 
	
		
			
				|  |  | +const testBirds = [
 | 
	
		
			
				|  |  | +    {
 | 
	
		
			
				|  |  | +        commonName: "红腹锦鸡",
 | 
	
		
			
				|  |  | +        scientificName: "Chrysolophus pictus",
 | 
	
		
			
				|  |  | +        description: "又名金鸡,中型鸡类,体长59-110厘米。尾特长,约38-42厘米。雄鸟羽色华丽,头具金黄色丝状羽冠,上体除上背浓绿色外,其余为金黄色,后颈被有橙棕色而缀有黑边的扇状羽,形成披肩状。下体深红色,尾羽黑褐色,满缀以桂黄色斑点。",
 | 
	
		
			
				|  |  | +        conservationStatus: "无危",
 | 
	
		
			
				|  |  | +        avgWeight: 0.8,
 | 
	
		
			
				|  |  | +        avgLength: 90,
 | 
	
		
			
				|  |  | +        wingspan: 65,
 | 
	
		
			
				|  |  | +        lifespan: 10,
 | 
	
		
			
				|  |  | +        diet: "杂食性,主要以植物的叶、芽、花、果实和种子为食,也吃小麦、大豆、玉米、四季豆等农作物。此外也吃甲虫、蠕虫、双翅目和鳞翅目昆虫等动物性食物。",
 | 
	
		
			
				|  |  | +        habitat: "常栖息于海拔500-2500米的阔叶林、针阔叶混交林和林缘疏林灌丛地带",
 | 
	
		
			
				|  |  | +        migrationPattern: "留鸟",
 | 
	
		
			
				|  |  | +        breedingSeason: "4-6月",
 | 
	
		
			
				|  |  | +        clutchSize: 8,
 | 
	
		
			
				|  |  | +        incubationPeriod: 22,
 | 
	
		
			
				|  |  | +        vocalization: "繁殖期间雄鸟常发出'cha、cha'的叫声和'cha-cha-cha'的连续叫声",
 | 
	
		
			
				|  |  | +        identificationTips: "雄鸟羽色艳丽,具有金色羽冠和红色腹部;雌鸟通体棕黄,密布黑褐色虫蠹状斑",
 | 
	
		
			
				|  |  | +        behaviorNotes: "白天多活动,尤以早晨和下午活动较多,中午多在隐蔽处休息,晚上栖息于树冠隐蔽处",
 | 
	
		
			
				|  |  | +        distributionRange: "中国中部和西部山区",
 | 
	
		
			
				|  |  | +        similarSpecies: ["白腹锦鸡"],
 | 
	
		
			
				|  |  | +        isEndangered: false,
 | 
	
		
			
				|  |  | +        isExtinct: false,
 | 
	
		
			
				|  |  | +        featured: true
 | 
	
		
			
				|  |  | +    },
 | 
	
		
			
				|  |  | +    {
 | 
	
		
			
				|  |  | +        commonName: "丹顶鹤",
 | 
	
		
			
				|  |  | +        scientificName: "Grus japonensis",
 | 
	
		
			
				|  |  | +        description: "大型涉禽,体长120-160厘米。颈、脚较长,通体大多白色,头顶鲜红色,喉和颈黑色,耳至头枕白色,脚黑色,站立时颈、尾部飞羽和脚黑色,头顶红色,其余全为白色。",
 | 
	
		
			
				|  |  | +        conservationStatus: "濒危",
 | 
	
		
			
				|  |  | +        avgWeight: 7.5,
 | 
	
		
			
				|  |  | +        avgLength: 150,
 | 
	
		
			
				|  |  | +        wingspan: 220,
 | 
	
		
			
				|  |  | +        lifespan: 30,
 | 
	
		
			
				|  |  | +        diet: "杂食性,主要以鱼、虾、水生昆虫、软体动物、蝌蚪、沙蚕、蛤蜊、钉螺以及水生植物的茎、叶、块根、球茎和果实为食。",
 | 
	
		
			
				|  |  | +        habitat: "栖息于开阔平原、沼泽、湖泊、草地、海边滩涂、芦苇、沼泽以及河岸沼泽地带",
 | 
	
		
			
				|  |  | +        migrationPattern: "部分迁徙,部分留鸟",
 | 
	
		
			
				|  |  | +        breedingSeason: "4-6月",
 | 
	
		
			
				|  |  | +        clutchSize: 2,
 | 
	
		
			
				|  |  | +        incubationPeriod: 31,
 | 
	
		
			
				|  |  | +        vocalization: "高亢宏亮的鸣叫声",
 | 
	
		
			
				|  |  | +        identificationTips: "头顶红色,身体白色,颈部黑色",
 | 
	
		
			
				|  |  | +        behaviorNotes: "常成对或成家族群和小群活动。迁徙季节和冬季,常由数个或数十个家族群结成较大的群体。",
 | 
	
		
			
				|  |  | +        distributionRange: "东亚地区",
 | 
	
		
			
				|  |  | +        similarSpecies: ["白鹤", "灰鹤"],
 | 
	
		
			
				|  |  | +        isEndangered: true,
 | 
	
		
			
				|  |  | +        isExtinct: false,
 | 
	
		
			
				|  |  | +        featured: true
 | 
	
		
			
				|  |  | +    },
 | 
	
		
			
				|  |  | +    // 更多鸟类数据...
 | 
	
		
			
				|  |  | +];
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +// 分类学测试数据
 | 
	
		
			
				|  |  | +const testTaxonomies = [
 | 
	
		
			
				|  |  | +    {
 | 
	
		
			
				|  |  | +        kingdom: "动物界",
 | 
	
		
			
				|  |  | +        phylum: "脊索动物门",
 | 
	
		
			
				|  |  | +        class: "鸟纲",
 | 
	
		
			
				|  |  | +        order: "鸡形目",
 | 
	
		
			
				|  |  | +        family: "雉科",
 | 
	
		
			
				|  |  | +        genus: "锦鸡属",
 | 
	
		
			
				|  |  | +        species: "红腹锦鸡",
 | 
	
		
			
				|  |  | +        scientificName: "Chrysolophus pictus",
 | 
	
		
			
				|  |  | +        description: "锦鸡属鸟类特征描述...",
 | 
	
		
			
				|  |  | +        characteristics: ["鲜艳羽毛", "性二态性明显", "陆禽"],
 | 
	
		
			
				|  |  | +        evolutionaryHistory: "起源于亚洲东部山区"
 | 
	
		
			
				|  |  | +    },
 | 
	
		
			
				|  |  | +    {
 | 
	
		
			
				|  |  | +        kingdom: "动物界",
 | 
	
		
			
				|  |  | +        phylum: "脊索动物门",
 | 
	
		
			
				|  |  | +        class: "鸟纲",
 | 
	
		
			
				|  |  | +        order: "鹤形目",
 | 
	
		
			
				|  |  | +        family: "鹤科",
 | 
	
		
			
				|  |  | +        genus: "鹤属",
 | 
	
		
			
				|  |  | +        species: "丹顶鹤",
 | 
	
		
			
				|  |  | +        scientificName: "Grus japonensis",
 | 
	
		
			
				|  |  | +        description: "鹤属鸟类特征描述...",
 | 
	
		
			
				|  |  | +        characteristics: ["长腿", "长颈", "大型涉禽"],
 | 
	
		
			
				|  |  | +        evolutionaryHistory: "古老物种,化石记录可追溯到中新世"
 | 
	
		
			
				|  |  | +    },
 | 
	
		
			
				|  |  | +    // 更多分类数据...
 | 
	
		
			
				|  |  | +];
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +// 专业知识测试数据
 | 
	
		
			
				|  |  | +const testExpertise = [
 | 
	
		
			
				|  |  | +    {
 | 
	
		
			
				|  |  | +        title: "如何观察红腹锦鸡",
 | 
	
		
			
				|  |  | +        content: "观察红腹锦鸡的最佳时间是清晨和傍晚...详细观察技巧...",
 | 
	
		
			
				|  |  | +        author: "张观鸟",
 | 
	
		
			
				|  |  | +        experienceLevel: "中级",
 | 
	
		
			
				|  |  | +        applicationScenarios: ["野外考察", "生态摄影", "生物多样性调查"],
 | 
	
		
			
				|  |  | +        bestPractices: "穿着迷彩服,保持安静,使用望远镜远距离观察",
 | 
	
		
			
				|  |  | +        equipmentRecommendations: ["8-10倍双筒望远镜", "400mm以上长焦镜头", "迷彩伪装"],
 | 
	
		
			
				|  |  | +        seasonalityTips: "春季繁殖期雄鸟羽毛最艳丽,行为活跃",
 | 
	
		
			
				|  |  | +        locationTips: "四川、甘肃、陕西等地的山区阔叶林",
 | 
	
		
			
				|  |  | +        isVerified: true,
 | 
	
		
			
				|  |  | +        references: ["《中国鸟类野外手册》", "《中国雉类》"]
 | 
	
		
			
				|  |  | +    },
 | 
	
		
			
				|  |  | +    // 更多专业知识数据...
 | 
	
		
			
				|  |  | +];
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +// 导入鸟类数据
 | 
	
		
			
				|  |  | +async function importBirds(birds: any[]) {
 | 
	
		
			
				|  |  | +    const results = [];
 | 
	
		
			
				|  |  | +    for (const birdData of birds) {
 | 
	
		
			
				|  |  | +        const bird = new CloudObject('Bird');
 | 
	
		
			
				|  |  | +        bird.set(birdData);
 | 
	
		
			
				|  |  | +        await bird.save();
 | 
	
		
			
				|  |  | +        results.push(bird);
 | 
	
		
			
				|  |  | +        console.log(`导入鸟类: ${bird.get('commonName')} (ID: ${bird.id})`);
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +    return results;
 | 
	
		
			
				|  |  | +}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +// 导入分类数据
 | 
	
		
			
				|  |  | +async function importTaxonomies(taxonomies: any[]) {
 | 
	
		
			
				|  |  | +    const results = [];
 | 
	
		
			
				|  |  | +    for (const taxData of taxonomies) {
 | 
	
		
			
				|  |  | +        const tax = new CloudObject('Taxonomy');
 | 
	
		
			
				|  |  | +        tax.set(taxData);
 | 
	
		
			
				|  |  | +        await tax.save();
 | 
	
		
			
				|  |  | +        results.push(tax);
 | 
	
		
			
				|  |  | +        console.log(`导入分类: ${tax.get('species')} (ID: ${tax.id})`);
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +    return results;
 | 
	
		
			
				|  |  | +}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +// 导入专业知识数据
 | 
	
		
			
				|  |  | +async function importExpertise(expertiseList: any[], relatedBirds: any[]) {
 | 
	
		
			
				|  |  | +    const results = [];
 | 
	
		
			
				|  |  | +    for (const expData of expertiseList) {
 | 
	
		
			
				|  |  | +        const exp = new CloudObject('BirdExpertise');
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        // 关联鸟类
 | 
	
		
			
				|  |  | +        if (expData.relatedBirds) {
 | 
	
		
			
				|  |  | +            expData.relatedBirds = expData.relatedBirds.map((birdName: string) => {
 | 
	
		
			
				|  |  | +                const bird = relatedBirds.find(b => b.get('commonName') === birdName);
 | 
	
		
			
				|  |  | +                return bird ? bird.toPointer() : null;
 | 
	
		
			
				|  |  | +            }).filter((b: any) => b !== null);
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        exp.set(expData);
 | 
	
		
			
				|  |  | +        await exp.save();
 | 
	
		
			
				|  |  | +        results.push(exp);
 | 
	
		
			
				|  |  | +        console.log(`导入专业知识: ${exp.get('title')} (ID: ${exp.id})`);
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +    return results;
 | 
	
		
			
				|  |  | +}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +// 完整导入流程
 | 
	
		
			
				|  |  | +export async function importAllData() {
 | 
	
		
			
				|  |  | +    try {
 | 
	
		
			
				|  |  | +        console.log('开始导入分类数据...');
 | 
	
		
			
				|  |  | +        const taxonomies = await importTaxonomies(testTaxonomies);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        console.log('\n开始导入鸟类数据...');
 | 
	
		
			
				|  |  | +        const birds = await importBirds(testBirds);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        // 建立鸟类和分类的关联
 | 
	
		
			
				|  |  | +        for (const bird of birds) {
 | 
	
		
			
				|  |  | +            const scientificName = bird.get('scientificName');
 | 
	
		
			
				|  |  | +            const taxonomy = taxonomies.find(t => t.get('scientificName') === scientificName);
 | 
	
		
			
				|  |  | +            if (taxonomy) {
 | 
	
		
			
				|  |  | +                bird.set({ taxonomy: taxonomy.toPointer() });
 | 
	
		
			
				|  |  | +                await bird.save();
 | 
	
		
			
				|  |  | +                console.log(`关联 ${bird.get('commonName')} 与分类 ${taxonomy.get('species')}`);
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        console.log('\n开始导入专业知识数据...');
 | 
	
		
			
				|  |  | +        await importExpertise(testExpertise, birds);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        console.log('\n所有数据导入完成!');
 | 
	
		
			
				|  |  | +    } catch (error) {
 | 
	
		
			
				|  |  | +        console.error('导入过程中出错:', error);
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +}
 |