备份:PWA配置前的完整版本
包含所有最新开发的功能和修复,作为PWA正确配置前的备份点。
This commit is contained in:
@@ -236,8 +236,14 @@ router.post('/batch', authenticate, async (req, res) => {
|
||||
for (let i = 0; i < records.length; i++) {
|
||||
const r = records[i];
|
||||
try {
|
||||
if (!r.txn_type || !r.category_level1 || !r.category_level2 || !r.amount_original || !r.record_date) {
|
||||
errors.push({ row: i + 1, message: '缺少必填字段' });
|
||||
const missingFields = [];
|
||||
if (!r.txn_type) missingFields.push('收支类型');
|
||||
if (!r.category_level1) missingFields.push('一级分类');
|
||||
if (!r.category_level2) missingFields.push('二级分类');
|
||||
if (!r.amount_original) missingFields.push('金额');
|
||||
if (!r.record_date) missingFields.push('日期');
|
||||
if (missingFields.length > 0) {
|
||||
errors.push({ row: i + 1, message: `缺少必填字段: ${missingFields.join(', ')}`, data: r });
|
||||
continue;
|
||||
}
|
||||
|
||||
@@ -246,15 +252,34 @@ router.post('/batch', authenticate, async (req, res) => {
|
||||
|
||||
let projectId = r.project_id || null;
|
||||
if (!projectId && r.project_name) {
|
||||
// 先精确匹配
|
||||
const projResult = await db.query("SELECT id FROM projects WHERE name = $1", [r.project_name]);
|
||||
if (projResult.rows.length > 0) {
|
||||
projectId = projResult.rows[0].id;
|
||||
} else {
|
||||
// 模糊匹配:去除空格后比较
|
||||
const fuzzyResult = await db.query(
|
||||
"SELECT id, name FROM projects WHERE REPLACE(name, ' ', '') = REPLACE($1, ' ', '')",
|
||||
[r.project_name]
|
||||
);
|
||||
if (fuzzyResult.rows.length > 0) {
|
||||
projectId = fuzzyResult.rows[0].id;
|
||||
} else {
|
||||
// 包含匹配
|
||||
const likeResult = await db.query(
|
||||
"SELECT id, name FROM projects WHERE name LIKE '%' || $1 || '%' OR $1 LIKE '%' || name || '%'",
|
||||
[r.project_name]
|
||||
);
|
||||
if (likeResult.rows.length > 0) {
|
||||
projectId = likeResult.rows[0].id;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
let userId = r.user_id || null;
|
||||
if (!userId && r.user_name) {
|
||||
const userResult = await db.query("SELECT id FROM users WHERE name = $1", [r.user_name]);
|
||||
const userResult = await db.query("SELECT id FROM users WHERE name = $1 OR username = $1", [r.user_name]);
|
||||
if (userResult.rows.length > 0) {
|
||||
userId = userResult.rows[0].id;
|
||||
}
|
||||
@@ -280,7 +305,7 @@ router.post('/batch', authenticate, async (req, res) => {
|
||||
);
|
||||
results.push(result.rows[0]);
|
||||
} catch (err) {
|
||||
errors.push({ row: i + 1, message: err.message });
|
||||
errors.push({ row: i + 1, message: err.message, data: { txn_type: r.txn_type, category_level1: r.category_level1, category_level2: r.category_level2, project_name: r.project_name, amount: r.amount_original } });
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user