scan_all_broken.mjs 1.0 KB

1234567891011121314151617181920212223242526
  1. import Miaoguo from '../src/model/miaoguo.js';
  2. // 找出所有 DayNumber 异常的用户:
  3. // 1) 存在 DayNumber=0 的行
  4. // 2) DayNumber 最大值 != 实际不同天数(历史膨胀)
  5. const rows = await Miaoguo.RunSql([], `
  6. SELECT UserID,
  7. COUNT(DISTINCT DATE(CreateTime)) as days,
  8. MAX(DayNumber) as maxDay,
  9. MIN(DayNumber) as minDay,
  10. SUM(CASE WHEN DayNumber=0 THEN 1 ELSE 0 END) as zeroCnt
  11. FROM MiaoguoTask
  12. WHERE CardTask>0
  13. GROUP BY UserID
  14. HAVING zeroCnt>0 OR maxDay<>days
  15. ORDER BY UserID;`);
  16. console.log('异常用户数:', rows.length);
  17. console.log('有 DayNumber=0 的用户数:', rows.filter(r => r.zeroCnt > 0).length);
  18. console.log('DayNumber 膨胀(maxDay<>days)的用户数:', rows.filter(r => r.maxDay !== r.days).length);
  19. console.log('用户列表:', rows.map(r => r.UserID).join(','));
  20. console.log('明细(前20):');
  21. for (const r of rows.slice(0, 20))
  22. console.log(` UserID=${r.UserID} days=${r.days} maxDay=${r.maxDay} zeroCnt=${r.zeroCnt}`);
  23. process.exit(0);