修复首页风险预告与实际发送的排序不一致问题

atRisk.js 之前只按 fireInDays 排序,同一天内多条提醒的先后完全未定义,
和 reminder.js 实际发送时「当天>提前、重要程度降序」的规则对不上,导致
额度卡在中间时首页提示的风险人名和定时任务实际跳过的人不一致。

- 把 importanceRank 从 reminder.js 抽到共享的 src/importance.js,两处复用
- atRisk.js 的 computeAtRisk 排序改为三段式:fireInDays 升序 →
  同天内 kind(当天优先于提前)→ 同 kind 内重要程度降序
- 补充 atRisk.test.js 用例覆盖「同一天多条事件、额度只够一部分」场景
This commit is contained in:
yuming
2026-08-16 09:21:09 +08:00
parent c7bdd3770a
commit d8573359a2
4 changed files with 73 additions and 9 deletions
+1 -6
View File
@@ -3,6 +3,7 @@ const db = require('./db')
const wx = require('./wx')
const occurrence = require('./occurrence')
const quota = require('./quota')
const { importanceRank } = require('./importance')
const TEMPLATE_ID = process.env.WX_TEMPLATE_ID
const MINIPROGRAM_STATE = process.env.WX_MINIPROGRAM_STATE || 'formal'
@@ -43,12 +44,6 @@ const insertLog = db.prepare(`
VALUES (@anniversaryId, @personName, @typeName, @daysUntil, @sendDate, @status, @error)
`)
// 重要程度排序权重,未知值排最后
const IMPORTANCE_RANK = { high: 0, medium: 1, low: 2 }
function importanceRank(v) {
return IMPORTANCE_RANK[v] === undefined ? 3 : IMPORTANCE_RANK[v]
}
// 43101 = 用户拒收或下发次数不足,是我们与微信侧对账的唯一信号
function isQuotaError(err) {
return err && err.errcode === 43101