fix: delete 支持 quantity/amount 精确匹配,避免误删同名记录
- AI prompt 新增「删除规则补充」:用户指定数量/金额时同时返回对应字段 - 后端 handleAIResult delete 分支改为动态构建 SQL,quantity/amount 存在时追加 AND 条件 - 新增删除查询日志方便排查
This commit is contained in:
@@ -347,7 +347,12 @@ async function analyzeWithDeepSeek(text, historyMessages, username, isAdmin) {
|
|||||||
- 删除所有金额为0的记录:delete_item="__AMOUNT_ZERO__"
|
- 删除所有金额为0的记录:delete_item="__AMOUNT_ZERO__"
|
||||||
- 删除物品名为空、null、undefined 的记录:delete_item="__NULL_NAME__"
|
- 删除物品名为空、null、undefined 的记录:delete_item="__NULL_NAME__"
|
||||||
- 不要再返回 action="ask" 来处理删除请求,只要确定是删除意图,就必须返回 action="delete" 并填好 delete_item。
|
- 不要再返回 action="ask" 来处理删除请求,只要确定是删除意图,就必须返回 action="delete" 并填好 delete_item。
|
||||||
- 若用户描述的是特定记录(如“名字叫XXX的”),则 delete_item 填那个物品名。
|
- 若用户描述的是特定记录(如"名字叫XXX的"),则 delete_item 填那个物品名。
|
||||||
|
|
||||||
|
⚠️ 删除规则补充(重要):
|
||||||
|
- 如果用户说"删除数量X的那条/那个记录",你必须同时返回 quantity 字段,值为 X。
|
||||||
|
- 如果用户提到"金额为Y的/价格Y的"来区分记录,你必须同时返回 amount 字段,值为 Y。
|
||||||
|
- 提供这些字段后,系统只会精确删除匹配的那一条,避免误删同名记录。
|
||||||
|
|
||||||
⚠️ 附件补充规则:
|
⚠️ 附件补充规则:
|
||||||
- 如果用户发送图片并明确说"这是XX的图片"或"作为附件存到XX采购里",
|
- 如果用户发送图片并明确说"这是XX的图片"或"作为附件存到XX采购里",
|
||||||
@@ -398,7 +403,13 @@ function handleAIResult(aiResult, roomId, username, originalText, attachments) {
|
|||||||
} else if (itemName === '__NULL_NAME__') {
|
} 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);
|
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 {
|
} 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) {
|
if (purchases.length === 0) {
|
||||||
const label = itemName === '__AMOUNT_ZERO__' ? '金额为0' : (itemName === '__NULL_NAME__' ? '名称为空' : `"${itemName}"`);
|
const label = itemName === '__AMOUNT_ZERO__' ? '金额为0' : (itemName === '__NULL_NAME__' ? '名称为空' : `"${itemName}"`);
|
||||||
|
|||||||
Reference in New Issue
Block a user