| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253 |
- import Miaoguo from '../src/model/miaoguo.js';
- const startDate = new Date(Date.now() - 60 * 86400000).toISOString().slice(0, 10);
- console.log('统计区间: >=', startDate);
- // 1) DayNumber 异常(全时段,限定近两个月有任务的用户)
- const bad = await Miaoguo.RunSql([startDate], `
- SELECT UserID, COUNT(DISTINCT DATE(CreateTime)) days, MAX(DayNumber) maxDay,
- SUM(CASE WHEN DayNumber=0 THEN 1 ELSE 0 END) zeroCnt
- FROM MiaoguoTask
- WHERE CardTask>0 AND UserID IN (SELECT DISTINCT UserID FROM MiaoguoTask WHERE CardTask>0 AND CreateTime>=?)
- GROUP BY UserID
- HAVING zeroCnt>0 OR maxDay<>days
- ORDER BY UserID;`);
- console.log('\n[1] DayNumber 异常用户数:', bad.length);
- if (bad.length) console.log(' ', bad.map(r => `U${r.UserID}(z=${r.zeroCnt},max=${r.maxDay},days=${r.days})`).join(', '));
- // 2) 近两个月:有学习记录但没有 MiaoguoTask 记录的天(需要补齐)
- const missing = await Miaoguo.RunSql([startDate], `
- SELECT mc.UserID, DATE_FORMAT(r.CreateTime,'%Y-%m-%d') d,
- COUNT(DISTINCT r.CardID) CardCount, SUM(r.Duration) Duration
- FROM MiaoguoLearningRecord r
- INNER JOIN MiaoguoCard mc ON mc.MiaoguoCardID = r.CardID
- LEFT JOIN MiaoguoTask t ON t.UserID = mc.UserID AND DATE(t.CreateTime) = DATE(r.CreateTime)
- WHERE r.Flag=0 AND r.CreateTime >= ? AND t.ID IS NULL
- GROUP BY mc.UserID, DATE_FORMAT(r.CreateTime,'%Y-%m-%d')
- ORDER BY mc.UserID, d;`);
- const mUsers = [...new Set(missing.map(r => r.UserID))];
- console.log('\n[2] 缺 MiaoguoTask 记录: 受影响用户数:', mUsers.length, ' 缺失天数合计:', missing.length);
- console.log(' 用户:', mUsers.join(','));
- if (missing.length) {
- console.log(' 明细(前30):');
- for (const r of missing.slice(0, 30))
- console.log(` U${r.UserID} ${r.d} Card=${r.CardCount} Dur=${r.Duration}`);
- }
- // 3) 近两个月同一天多条 MiaoguoTask 记录
- const dup = await Miaoguo.RunSql([startDate], `
- SELECT UserID, DATE_FORMAT(CreateTime,'%Y-%m-%d') d, COUNT(*) c
- FROM MiaoguoTask
- WHERE CardTask>0 AND CreateTime>=?
- GROUP BY UserID, DATE_FORMAT(CreateTime,'%Y-%m-%d')
- HAVING c>1
- ORDER BY UserID, d;`);
- console.log('\n[3] 同一天多条记录: 天数:', dup.length);
- if (dup.length) {
- const dUsers = [...new Set(dup.map(r => r.UserID))];
- console.log(' 用户:', dUsers.join(','));
- console.log(' 明细:', dup.map(r => `U${r.UserID}@${r.d}x${r.c}`).join(', '));
- }
- process.exit(0);
|