const http = require('http'); // 测试配置 const API_BASE_URL = 'http://localhost:5351'; let authToken = ''; // 辅助函数:发送HTTP请求 function makeRequest(options, data = null) { return new Promise((resolve, reject) => { const req = http.request(options, (res) => { let responseData = ''; res.on('data', (chunk) => { responseData += chunk; }); res.on('end', () => { try { const result = { statusCode: res.statusCode, headers: res.headers, data: responseData ? JSON.parse(responseData) : null }; resolve(result); } catch (error) { reject(new Error(`解析响应失败: ${error.message}`)); } }); }); req.on('error', (error) => { reject(error); }); if (data) { req.write(JSON.stringify(data)); } req.end(); }); } // 登录获取认证令牌 async function login() { console.log('🔐 正在登录...'); const options = { hostname: 'localhost', port: 5351, path: '/api/auth/login', method: 'POST', headers: { 'Content-Type': 'application/json' } }; const loginData = { username: 'admin', password: 'Admin123456' }; try { const response = await makeRequest(options, loginData); if (response.statusCode === 200 && response.data.success) { authToken = response.data.data.token; console.log('✅ 登录成功'); return true; } else { console.error('❌ 登录失败:', response.data.message); return false; } } catch (error) { console.error('❌ 登录请求失败:', error.message); return false; } } // 测试获取项目列表 async function testGetProjects() { console.log('\n📋 测试获取项目列表...'); const options = { hostname: 'localhost', port: 5351, path: '/api/projects', method: 'GET', headers: { 'Authorization': `Bearer ${authToken}`, 'Content-Type': 'application/json' } }; try { const response = await makeRequest(options); if (response.statusCode === 200 && response.data.success) { console.log('✅ 获取项目列表成功'); console.log(` 项目数量: ${response.data.data.projects.length}`); console.log(` 总数量: ${response.data.data.pagination.total}`); // 显示前3个项目的基本信息 const projects = response.data.data.projects.slice(0, 3); projects.forEach((project, index) => { console.log(` 项目${index + 1}: ${project.name} (${project.status}) - ${project.farmName}`); }); return true; } else { console.error('❌ 获取项目列表失败:', response.data.message); return false; } } catch (error) { console.error('❌ 获取项目列表请求失败:', error.message); return false; } } // 测试获取项目统计 async function testGetProjectStats() { console.log('\n📊 测试获取项目统计...'); const options = { hostname: 'localhost', port: 5351, path: '/api/projects/stats', method: 'GET', headers: { 'Authorization': `Bearer ${authToken}`, 'Content-Type': 'application/json' } }; try { const response = await makeRequest(options); if (response.statusCode === 200 && response.data.success) { console.log('✅ 获取项目统计成功'); const stats = response.data.data; console.log(` 总项目数: ${stats.total}`); console.log(` 监管中: ${stats.supervision}`); console.log(` 已结项: ${stats.completed}`); console.log(` 总监管金额: ${stats.totalAmount?.toFixed(2) || 0} 元`); console.log(` 总监管数量: ${stats.totalQuantity || 0} 头`); return true; } else { console.error('❌ 获取项目统计失败:', response.data.message); return false; } } catch (error) { console.error('❌ 获取项目统计请求失败:', error.message); return false; } } // 测试创建项目 async function testCreateProject() { console.log('\n➕ 测试创建项目...'); const options = { hostname: 'localhost', port: 5351, path: '/api/projects', method: 'POST', headers: { 'Authorization': `Bearer ${authToken}`, 'Content-Type': 'application/json' } }; const projectData = { name: '测试项目', status: 'supervision', farmName: '测试养殖场', supervisionObject: '牛', supervisionQuantity: 20, supervisionPeriod: '30天', supervisionAmount: 50000.00, startTime: '2024-01-01', endTime: '2024-12-31', earTag: 10, collar: 10, host: 1, loanOfficer: '测试专员', description: '这是一个测试项目' }; try { const response = await makeRequest(options, projectData); if (response.statusCode === 201 && response.data.success) { console.log('✅ 创建项目成功'); console.log(` 项目ID: ${response.data.data.id}`); console.log(` 项目名称: ${response.data.data.name}`); return response.data.data.id; } else { console.error('❌ 创建项目失败:', response.data.message); return null; } } catch (error) { console.error('❌ 创建项目请求失败:', error.message); return null; } } // 测试获取项目详情 async function testGetProjectById(projectId) { console.log('\n🔍 测试获取项目详情...'); const options = { hostname: 'localhost', port: 5351, path: `/api/projects/${projectId}`, method: 'GET', headers: { 'Authorization': `Bearer ${authToken}`, 'Content-Type': 'application/json' } }; try { const response = await makeRequest(options); if (response.statusCode === 200 && response.data.success) { console.log('✅ 获取项目详情成功'); const project = response.data.data; console.log(` 项目名称: ${project.name}`); console.log(` 养殖场: ${project.farmName}`); console.log(` 监管对象: ${project.supervisionObject}`); console.log(` 监管数量: ${project.supervisionQuantity}`); console.log(` 监管金额: ${project.supervisionAmount} 元`); return true; } else { console.error('❌ 获取项目详情失败:', response.data.message); return false; } } catch (error) { console.error('❌ 获取项目详情请求失败:', error.message); return false; } } // 测试更新项目 async function testUpdateProject(projectId) { console.log('\n✏️ 测试更新项目...'); const options = { hostname: 'localhost', port: 5351, path: `/api/projects/${projectId}`, method: 'PUT', headers: { 'Authorization': `Bearer ${authToken}`, 'Content-Type': 'application/json' } }; const updateData = { supervisionQuantity: 25, supervisionAmount: 60000.00, description: '更新后的项目描述' }; try { const response = await makeRequest(options, updateData); if (response.statusCode === 200 && response.data.success) { console.log('✅ 更新项目成功'); const project = response.data.data; console.log(` 更新后监管数量: ${project.supervisionQuantity}`); console.log(` 更新后监管金额: ${project.supervisionAmount} 元`); return true; } else { console.error('❌ 更新项目失败:', response.data.message); return false; } } catch (error) { console.error('❌ 更新项目请求失败:', error.message); return false; } } // 测试删除项目 async function testDeleteProject(projectId) { console.log('\n🗑️ 测试删除项目...'); const options = { hostname: 'localhost', port: 5351, path: `/api/projects/${projectId}`, method: 'DELETE', headers: { 'Authorization': `Bearer ${authToken}`, 'Content-Type': 'application/json' } }; try { const response = await makeRequest(options); if (response.statusCode === 200 && response.data.success) { console.log('✅ 删除项目成功'); return true; } else { console.error('❌ 删除项目失败:', response.data.message); return false; } } catch (error) { console.error('❌ 删除项目请求失败:', error.message); return false; } } // 测试搜索项目 async function testSearchProjects() { console.log('\n🔍 测试搜索项目...'); const options = { hostname: 'localhost', port: 5351, path: '/api/projects?search=张洪彬&status=completed', method: 'GET', headers: { 'Authorization': `Bearer ${authToken}`, 'Content-Type': 'application/json' } }; try { const response = await makeRequest(options); if (response.statusCode === 200 && response.data.success) { console.log('✅ 搜索项目成功'); console.log(` 搜索结果数量: ${response.data.data.projects.length}`); const projects = response.data.data.projects; projects.forEach((project, index) => { console.log(` 结果${index + 1}: ${project.name} - ${project.farmName}`); }); return true; } else { console.error('❌ 搜索项目失败:', response.data.message); return false; } } catch (error) { console.error('❌ 搜索项目请求失败:', error.message); return false; } } // 主测试函数 async function runTests() { console.log('🚀 开始测试项目清单API接口...\n'); // 1. 登录 const loginSuccess = await login(); if (!loginSuccess) { console.log('❌ 登录失败,无法继续测试'); return; } // 2. 测试获取项目列表 await testGetProjects(); // 3. 测试获取项目统计 await testGetProjectStats(); // 4. 测试搜索项目 await testSearchProjects(); // 5. 测试创建项目 const projectId = await testCreateProject(); if (projectId) { // 6. 测试获取项目详情 await testGetProjectById(projectId); // 7. 测试更新项目 await testUpdateProject(projectId); // 8. 测试删除项目 await testDeleteProject(projectId); } console.log('\n🎉 项目清单API接口测试完成!'); } // 运行测试 runTests().catch(console.error);