diff --git a/server/server.js b/server/server.js index 62bb9e7..71c2050 100644 --- a/server/server.js +++ b/server/server.js @@ -347,7 +347,12 @@ async function analyzeWithDeepSeek(text, historyMessages, username, isAdmin) { - 删除所有金额为0的记录:delete_item="__AMOUNT_ZERO__" - 删除物品名为空、null、undefined 的记录:delete_item="__NULL_NAME__" - 不要再返回 action="ask" 来处理删除请求,只要确定是删除意图,就必须返回 action="delete" 并填好 delete_item。 -- 若用户描述的是特定记录(如“名字叫XXX的”),则 delete_item 填那个物品名。 +- 若用户描述的是特定记录(如"名字叫XXX的"),则 delete_item 填那个物品名。 + +⚠️ 删除规则补充(重要): +- 如果用户说"删除数量X的那条/那个记录",你必须同时返回 quantity 字段,值为 X。 +- 如果用户提到"金额为Y的/价格Y的"来区分记录,你必须同时返回 amount 字段,值为 Y。 +- 提供这些字段后,系统只会精确删除匹配的那一条,避免误删同名记录。 ⚠️ 附件补充规则: - 如果用户发送图片并明确说"这是XX的图片"或"作为附件存到XX采购里", @@ -398,7 +403,13 @@ function handleAIResult(aiResult, roomId, username, originalText, attachments) { } else if (itemName === '__NULL_NAME__') { purchases = db.prepare("SELECT id, item, amount, payment_method, status, applicant, created_at FROM purchases WHERE room_id = ? AND (item IS NULL OR item = '' OR item = 'null' OR item = 'undefined')").all(roomId); } else { - purchases = db.prepare('SELECT id, item, amount, payment_method, status, applicant, created_at FROM purchases WHERE room_id = ? AND item LIKE ?').all(roomId, `%${itemName}%`); + // 动态构建查询:根据 AI 提供的 quantity/amount 精确匹配 + let query = 'SELECT id, item, amount, payment_method, status, applicant, created_at FROM purchases WHERE room_id = ? AND item LIKE ?'; + const params = [roomId, `%${itemName}%`]; + if (aiResult.quantity !== undefined) { query += ' AND quantity = ?'; params.push(aiResult.quantity); } + if (aiResult.amount !== undefined) { query += ' AND amount = ?'; params.push(aiResult.amount); } + console.log('🔍 删除查询:', query, params); + purchases = db.prepare(query).all(...params); } if (purchases.length === 0) { const label = itemName === '__AMOUNT_ZERO__' ? '金额为0' : (itemName === '__NULL_NAME__' ? '名称为空' : `"${itemName}"`);