db7648eb4d
- 新增微信小程序版个人收藏夹全套功能,包含聚合首页、收藏列表、编辑、详情页面与配套后端API - 新增web版时光助手门户与个人收藏夹工具,支持与小程序共享后端数据 - 优化日历提醒工具:替换本地bootstrap资源为公共CDN版本,新增批量生成循环提醒的前端界面与后端逻辑,新增数据库batch_id字段,更新鉴权配置文件 - 补充项目配置、站点地图、调试诊断脚本等配套文件 - 完善各模块的页面配置与样式文件
73 lines
3.8 KiB
JavaScript
73 lines
3.8 KiB
JavaScript
// 调试:查询 calendar_reminder 数据库中"多肉"相关的批量插入记录统计
|
||
const path = require('path');
|
||
const fs = require('fs');
|
||
const Database = require('better-sqlite3');
|
||
|
||
const DB_PATH = path.join(process.cwd(), 'data', 'calendar_reminder.db');
|
||
console.log('DB exists:', fs.existsSync(DB_PATH), DB_PATH);
|
||
if (!fs.existsSync(DB_PATH)) { process.exit(1); }
|
||
|
||
const db = new Database(DB_PATH, { readonly: true });
|
||
db.pragma('journal_mode = WAL');
|
||
|
||
console.log('\n=== 表结构 ===');
|
||
db.prepare("PRAGMA table_info(events)").all().forEach(c => {
|
||
console.log(` ${c.name} (${c.type})`);
|
||
});
|
||
|
||
const total = db.prepare('SELECT COUNT(1) AS c FROM events').get().c;
|
||
console.log(`\n总记录数 events: ${total}`);
|
||
|
||
const byDel = db.prepare('SELECT deleted, COUNT(1) AS c FROM events GROUP BY deleted').all();
|
||
console.log('\n按 deleted 分组:');
|
||
byDel.forEach(r => console.log(` deleted=${r.deleted} -> ${r.c}`));
|
||
|
||
// 查询"多肉"相关(title / content 包含"多肉")
|
||
const kw = '%多肉%';
|
||
const succuAll = db.prepare("SELECT COUNT(1) AS c FROM events WHERE title LIKE ? OR content LIKE ?").get(kw, kw).c;
|
||
console.log(`\n含「多肉」的事件(title/content): ${succuAll}`);
|
||
|
||
if (succuAll > 0) {
|
||
const rows = db.prepare("SELECT id, title, substr(content,1,80) AS content, start, end, remindAt, recurrence, createdAt, updatedAt, deleted, completed FROM events WHERE title LIKE ? OR content LIKE ? ORDER BY createdAt DESC LIMIT 50").all(kw, kw);
|
||
console.log(`\n多肉记录抽样(最近 50 条):`);
|
||
rows.forEach(r => {
|
||
const tag = [
|
||
r.deleted ? '🗑删' : null,
|
||
r.completed ? '✅完' : null,
|
||
r.recurrence ? '🔁' + r.recurrence : null,
|
||
r.remindAt ? '⏰' : null
|
||
].filter(Boolean).join('');
|
||
console.log(` [${r.createdAt ? r.createdAt.slice(0,16) : '?'}] ${r.id.slice(0,8)} | ${r.title || '(无题)'} ${tag} | start=${r.start ? r.start.slice(0,16) : '?'} | content=${r.content || ''}`);
|
||
});
|
||
|
||
// 按 title 分组统计(看批量插入的规律)
|
||
const byTitle = db.prepare("SELECT title, COUNT(1) AS c, MIN(start) AS firstStart, MAX(start) AS lastStart FROM events WHERE title LIKE ? OR content LIKE ? GROUP BY title ORDER BY c DESC LIMIT 30").all(kw, kw);
|
||
console.log('\n按 title 聚合(多肉相关)TOP30:');
|
||
byTitle.forEach(r => console.log(` x${String(r.c).padStart(4,' ')} | ${r.firstStart ? r.firstStart.slice(0,10) : ''}~${r.lastStart ? r.lastStart.slice(0,10) : ''} | ${r.title || '(空)'}`));
|
||
|
||
// 按创建日期分组,看是否有批量插入特征
|
||
const byDay = db.prepare(`SELECT substr(createdAt,1,10) AS d, COUNT(1) AS c, COUNT(DISTINCT title) AS titles
|
||
FROM events WHERE title LIKE ? OR content LIKE ?
|
||
GROUP BY substr(createdAt,1,10) ORDER BY d DESC LIMIT 30`).all(kw, kw);
|
||
console.log('\n按 createdAt 日期聚合(多肉相关)TOP30:');
|
||
byDay.forEach(r => console.log(` ${r.d} x${String(r.c).padStart(4,' ')} distinct_titles=${r.titles}`));
|
||
|
||
// 按 recurrence 分组
|
||
const byRecur = db.prepare("SELECT recurrence, COUNT(1) AS c FROM events WHERE (title LIKE ? OR content LIKE ?) GROUP BY recurrence ORDER BY c DESC").all(kw, kw);
|
||
console.log('\n按 recurrence 分组:');
|
||
byRecur.forEach(r => console.log(` [${r.recurrence || '(无)'}] x${r.c}`));
|
||
|
||
// 删除 / 未删除 / 已完成比例
|
||
const stat = db.prepare(`SELECT
|
||
COUNT(1) AS total,
|
||
SUM(CASE WHEN deleted=1 THEN 1 ELSE 0 END) AS del,
|
||
SUM(CASE WHEN deleted=0 THEN 1 ELSE 0 END) AS alive,
|
||
SUM(CASE WHEN deleted=0 AND completed=1 THEN 1 ELSE 0 END) AS aliveDone,
|
||
SUM(CASE WHEN deleted=0 AND completed=0 THEN 1 ELSE 0 END) AS aliveTodo
|
||
FROM events WHERE title LIKE ? OR content LIKE ?`).get(kw, kw);
|
||
console.log('\n多肉记录状态:');
|
||
console.log(` 总数=${stat.total} 删除=${stat.del} 存活=${stat.alive} 存活中已完成=${stat.aliveDone} 存活中待办=${stat.aliveTodo}`);
|
||
}
|
||
|
||
db.close();
|