2026-07-07 16:14:42 +08:00
|
|
|
import { NextRequest, NextResponse } from 'next/server';
|
|
|
|
|
import pool from '@/lib/db';
|
|
|
|
|
import { getAllFields } from '@/lib/field-mapping';
|
|
|
|
|
|
|
|
|
|
// GET - 获取所有配置
|
|
|
|
|
export async function GET() {
|
|
|
|
|
try {
|
2026-07-07 16:21:56 +08:00
|
|
|
// 先返回字段列表(不依赖数据库)
|
|
|
|
|
const availableFields = getAllFields();
|
|
|
|
|
|
|
|
|
|
// 尝试查询配置(如果表不存在会失败)
|
|
|
|
|
let configs: any[] = [];
|
|
|
|
|
try {
|
2026-07-07 16:52:51 +08:00
|
|
|
const connection = await pool.getConnection();
|
|
|
|
|
const [configRows] = await connection.query<any[]>(
|
2026-07-07 16:21:56 +08:00
|
|
|
'SELECT * FROM t_daily_report_config WHERE is_active = 1 ORDER BY create_time DESC'
|
|
|
|
|
);
|
|
|
|
|
configs = configRows || [];
|
2026-07-07 16:52:51 +08:00
|
|
|
connection.release();
|
2026-07-07 16:21:56 +08:00
|
|
|
} catch (dbError) {
|
|
|
|
|
// 如果表不存在,返回空数组
|
|
|
|
|
console.log('配置表查询失败,可能是表未初始化:', dbError);
|
|
|
|
|
configs = [];
|
|
|
|
|
}
|
2026-07-07 16:14:42 +08:00
|
|
|
|
|
|
|
|
return NextResponse.json({
|
|
|
|
|
success: true,
|
|
|
|
|
data: configs,
|
2026-07-07 16:21:56 +08:00
|
|
|
availableFields: availableFields
|
2026-07-07 16:14:42 +08:00
|
|
|
});
|
|
|
|
|
} catch (error) {
|
|
|
|
|
return NextResponse.json({
|
|
|
|
|
success: false,
|
|
|
|
|
message: '获取配置失败',
|
|
|
|
|
error: error instanceof Error ? error.message : '未知错误'
|
|
|
|
|
}, { status: 500 });
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// POST - 创建新配置
|
|
|
|
|
export async function POST(request: NextRequest) {
|
|
|
|
|
try {
|
|
|
|
|
const body = await request.json();
|
2026-07-07 16:52:51 +08:00
|
|
|
const {
|
|
|
|
|
config_name,
|
|
|
|
|
split_type,
|
|
|
|
|
split_value,
|
|
|
|
|
split_name,
|
|
|
|
|
selected_fields,
|
|
|
|
|
sum_fields
|
|
|
|
|
} = body;
|
2026-07-07 16:14:42 +08:00
|
|
|
|
|
|
|
|
// 验证必填字段
|
2026-07-07 16:52:51 +08:00
|
|
|
if (!config_name || !split_type || !split_value || !selected_fields || selected_fields.length === 0) {
|
2026-07-07 16:14:42 +08:00
|
|
|
return NextResponse.json({
|
|
|
|
|
success: false,
|
2026-07-07 16:52:51 +08:00
|
|
|
message: '缺少必填字段(配置名称、拆分方式、拆分值、选择的字段)'
|
2026-07-07 16:14:42 +08:00
|
|
|
}, { status: 400 });
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 验证拆分方式
|
|
|
|
|
if (split_type !== 'company_id' && split_type !== 'user_id') {
|
|
|
|
|
return NextResponse.json({
|
|
|
|
|
success: false,
|
|
|
|
|
message: '拆分方式必须是 company_id 或 user_id'
|
|
|
|
|
}, { status: 400 });
|
|
|
|
|
}
|
|
|
|
|
|
2026-07-07 16:52:51 +08:00
|
|
|
// 获取连接
|
|
|
|
|
const connection = await pool.getConnection();
|
|
|
|
|
|
2026-07-07 16:14:42 +08:00
|
|
|
// 插入配置
|
2026-07-07 16:52:51 +08:00
|
|
|
await connection.query(
|
|
|
|
|
`INSERT INTO t_daily_report_config
|
|
|
|
|
(config_name, split_type, split_value, split_name, selected_fields, sum_fields)
|
|
|
|
|
VALUES (?, ?, ?, ?, ?, ?)`,
|
|
|
|
|
[
|
|
|
|
|
config_name,
|
|
|
|
|
split_type,
|
|
|
|
|
split_value,
|
|
|
|
|
split_name || null,
|
|
|
|
|
JSON.stringify(selected_fields),
|
|
|
|
|
sum_fields ? JSON.stringify(sum_fields) : null
|
|
|
|
|
]
|
2026-07-07 16:14:42 +08:00
|
|
|
);
|
|
|
|
|
|
2026-07-07 16:52:51 +08:00
|
|
|
connection.release();
|
|
|
|
|
|
2026-07-07 16:14:42 +08:00
|
|
|
return NextResponse.json({
|
|
|
|
|
success: true,
|
2026-07-07 16:52:51 +08:00
|
|
|
message: '配置创建成功'
|
2026-07-07 16:14:42 +08:00
|
|
|
});
|
|
|
|
|
} catch (error) {
|
|
|
|
|
return NextResponse.json({
|
|
|
|
|
success: false,
|
|
|
|
|
message: '创建配置失败',
|
|
|
|
|
error: error instanceof Error ? error.message : '未知错误'
|
|
|
|
|
}, { status: 500 });
|
|
|
|
|
}
|
|
|
|
|
}
|