const express = require('express'); const cors = require('cors'); const path = require('path'); const db = require('./db'); // 导入路由模块 const financeRouter = require('./finance-api'); const app = express(); const PORT = process.env.PORT || 5000; // 中间件 const corsOptions = { origin: process.env.CORS_ORIGIN ? process.env.CORS_ORIGIN.split(',') : ['http://localhost:5173', 'http://localhost:3001'], credentials: true, methods: ['GET', 'POST', 'PUT', 'DELETE', 'PATCH', 'OPTIONS'], allowedHeaders: ['Content-Type', 'Authorization'] }; app.use(cors(corsOptions)); app.use(express.json()); app.use(express.urlencoded({ extended: true })); // 静态文件服务 - 前端应用 app.use('/app', express.static(path.join(__dirname, '../frontend/dist'))); // 健康检查 app.get('/health', async (req, res) => { try { // 测试数据库连接 await db.query('SELECT 1'); res.json({ status: 'healthy', service: 'company-finance-system', timestamp: new Date().toISOString(), version: '1.0.0', database: 'connected', endpoints: { frontend: '/app/index.html', api: '/api/*', finance: '/api/finance/*', test: '/test' } }); } catch (error) { res.status(500).json({ status: 'unhealthy', service: 'company-finance-system', timestamp: new Date().toISOString(), database: 'disconnected', error: error.message }); } }); // API路由 app.use('/api/finance', financeRouter); // 客户管理API app.get('/api/customers', async (req, res) => { try { const result = await db.query(` SELECT c.*, COUNT(ct.contact_id) as contact_count FROM customers c LEFT JOIN contacts ct ON c.customer_id = ct.customer_id GROUP BY c.customer_id ORDER BY c.created_at DESC `); res.json({ success: true, data: result.rows, count: result.rows.length }); } catch (error) { console.error('获取客户失败:', error); res.status(500).json({ success: false, message: '获取客户失败', error: error.message }); } }); // 供应商管理API app.get('/api/suppliers', async (req, res) => { try { const result = await db.query(` SELECT s.*, COUNT(ct.contact_id) as contact_count FROM suppliers s LEFT JOIN contacts ct ON s.supplier_id = ct.supplier_id GROUP BY s.supplier_id ORDER BY s.created_at DESC `); res.json({ success: true, data: result.rows, count: result.rows.length }); } catch (error) { console.error('获取供应商失败:', error); res.status(500).json({ success: false, message: '获取供应商失败', error: error.message }); } }); // 项目管理API app.get('/api/projects', async (req, res) => { try { const result = await db.query(` SELECT p.*, c.company_name as customer_name, s.company_name as supplier_name, COUNT(pn.node_id) as payment_node_count, SUM(pn.amount) as total_amount FROM projects p LEFT JOIN customers c ON p.customer_id = c.customer_id LEFT JOIN suppliers s ON p.supplier_id = s.supplier_id LEFT JOIN payment_nodes pn ON p.project_id = pn.project_id GROUP BY p.project_id, c.company_name, s.company_name ORDER BY p.created_at DESC `); res.json({ success: true, data: result.rows, count: result.rows.length }); } catch (error) { console.error('获取项目失败:', error); res.status(500).json({ success: false, message: '获取项目失败', error: error.message }); } }); // 测试数据API(用于演示) app.get('/api/test-data', async (req, res) => { try { // 获取各种统计数据 const [customers, suppliers, projects, paymentNodes, paymentRecords] = await Promise.all([ db.query('SELECT COUNT(*) as count FROM customers'), db.query('SELECT COUNT(*) as count FROM suppliers'), db.query('SELECT COUNT(*) as count FROM projects'), db.query('SELECT COUNT(*) as count FROM payment_nodes'), db.query('SELECT COUNT(*) as count FROM payment_records') ]); res.json({ success: true, data: { customers: customers.rows[0].count, suppliers: suppliers.rows[0].count, projects: projects.rows[0].count, paymentNodes: paymentNodes.rows[0].count, paymentRecords: paymentRecords.rows[0].count, timestamp: new Date().toISOString() } }); } catch (error) { res.json({ success: false, message: '获取测试数据失败', error: error.message }); } }); // 测试页面 app.get('/test', (req, res) => { res.send(`
您访问的页面不存在。
`); }); // 错误处理中间件 app.use((err, req, res, next) => { console.error(err.stack); res.status(500).json({ success: false, message: '服务器内部错误', error: process.env.NODE_ENV === 'development' ? err.message : undefined }); }); // 启动服务器 const server = app.listen(PORT, '0.0.0.0', () => { console.log(` 🚀 公司财务管理系统 - 生产服务器 ==================================== 📍 服务器地址: http://0.0.0.0:${PORT} 🌐 外部访问: http://43.161.248.209:${PORT} 🔗 重要链接: - 前端应用: http://43.161.248.209:${PORT}/app/index.html - 测试页面: http://43.161.248.209:${PORT}/test - 健康检查: http://43.161.248.209:${PORT}/health - API文档: http://43.161.248.209:${PORT}/api/* 📊 已启用的模块: ✅ 财务模块 (付款节点、付款记录、汇率) ✅ 客户管理 ✅ 供应商管理 ✅ 项目管理 ✅ 静态文件服务 ⏰ 启动时间: ${new Date().toISOString()} ==================================== `); }); // 优雅关闭 process.on('SIGTERM', () => { console.log('收到SIGTERM信号,正在关闭服务器...'); server.close(() => { console.log('服务器已关闭'); process.exit(0); }); });