fix(monitor): OEM维修超时提醒消息格式优化
- 超时提醒格式:第X档已超时,达到第Y档扣XX% - 提前1小时提醒格式:距离第X档(扣XX%)还剩1小时 - 第四档超时提示:已触发全额扣费(100%) - 第四档还剩1小时提示:距离全额扣费(100%)还剩1小时 - 静默期积压消息:动态计算剩余时间并显示扣费比例 - 消息内容与空行分隔
This commit is contained in:
parent
3fd09dec25
commit
24581166bc
|
|
@ -110,7 +110,7 @@ export class ReminderEngine {
|
||||||
if (r.order_number) text += `工单号:${r.order_number}\n`
|
if (r.order_number) text += `工单号:${r.order_number}\n`
|
||||||
text += `服务器IP:${r.server_ip || '未知'}\n服务器SN:${r.server_sn}\n`
|
text += `服务器IP:${r.server_ip || '未知'}\n服务器SN:${r.server_sn}\n`
|
||||||
if (rackH) text += `机架位置:${rackH}\n`
|
if (rackH) text += `机架位置:${rackH}\n`
|
||||||
text += `到期时间:${r.deadline_time}\n服务器尚未录入恢复时间,请及时处理!`
|
text += `到期时间:${r.deadline_time}\n\n服务器尚未录入恢复时间,请及时处理!`
|
||||||
if (await pushText(text)) {
|
if (await pushText(text)) {
|
||||||
this.db.prepare("UPDATE reminder_state SET notification_phase = 'before', notified_at = datetime('now', '+8 hours') WHERE id = ?").run(r.id)
|
this.db.prepare("UPDATE reminder_state SET notification_phase = 'before', notified_at = datetime('now', '+8 hours') WHERE id = ?").run(r.id)
|
||||||
}
|
}
|
||||||
|
|
@ -140,13 +140,17 @@ export class ReminderEngine {
|
||||||
// 构建消息
|
// 构建消息
|
||||||
let text = ''
|
let text = ''
|
||||||
if (p.message_type === 'oem_diag') {
|
if (p.message_type === 'oem_diag') {
|
||||||
text = `⏰ OEM诊断工单提醒\n\n`
|
text = `OEM诊断工单提醒\n\n`
|
||||||
if (payload.order_number) text += `工单号:${payload.order_number}\n`
|
if (payload.order_number) text += `工单号:${payload.order_number}\n`
|
||||||
text += `服务器IP:${payload.server_ip || '未知'}\n服务器SN:${payload.server_sn}\n到期时间:${payload.deadline}\n服务器尚未录入恢复时间,请及时处理!`
|
text += `服务器IP:${payload.server_ip || '未知'}\n服务器SN:${payload.server_sn}\n到期时间:${payload.deadline}\n\n服务器尚未录入恢复时间,请及时处理!`
|
||||||
} else if (p.message_type === 'oem_repair' && payload.type === 'repair_before') {
|
} else if (p.message_type === 'oem_repair' && payload.type === 'repair_before') {
|
||||||
text = `⏰ OEM维修工单提醒\n\n`
|
// 重新计算剩余时间
|
||||||
|
const tierPenaltyMap: Record<string, string> = { '第一档': '10%', '第二档': '25%', '第三档': '50%', '第四档': '100%' }
|
||||||
|
const penalty = payload.tier_name ? tierPenaltyMap[payload.tier_name] || '' : ''
|
||||||
|
const tierLabel = payload.tier_name === '第四档' ? '全额扣费(100%)' : `${payload.tier_name}(${penalty})`
|
||||||
|
text = `OEM维修工单超时提醒(距离${tierLabel}还剩1小时)\n\n`
|
||||||
if (payload.order_number) text += `工单号:${payload.order_number}\n`
|
if (payload.order_number) text += `工单号:${payload.order_number}\n`
|
||||||
text += `服务器IP:${payload.server_ip || '未知'}\n服务器SN:${payload.server_sn}\n到期时间:${payload.deadline}\n服务器尚未录入恢复时间,请及时处理!`
|
text += `服务器IP:${payload.server_ip || '未知'}\n服务器SN:${payload.server_sn}\n到期时间:${payload.deadline}\n\n服务器尚未录入恢复时间,请及时处理!`
|
||||||
}
|
}
|
||||||
if (text && await pushText(text)) {
|
if (text && await pushText(text)) {
|
||||||
this.db.prepare('DELETE FROM pending_messages WHERE id = ?').run(p.id)
|
this.db.prepare('DELETE FROM pending_messages WHERE id = ?').run(p.id)
|
||||||
|
|
@ -169,7 +173,13 @@ export class ReminderEngine {
|
||||||
|
|
||||||
if (timeToDeadline <= 0 && r.notification_phase !== 'overdue') {
|
if (timeToDeadline <= 0 && r.notification_phase !== 'overdue') {
|
||||||
const rackRO = getRack ? await getRack(r.server_ip, r.server_sn) : null
|
const rackRO = getRack ? await getRack(r.server_ip, r.server_sn) : null
|
||||||
let text = `⚠️ OEM维修工单已触发${r.tier_name}超时\n\n`
|
// 超时提醒格式:第X档已超时,达到第Y档扣XX%
|
||||||
|
const tierPenaltyMap: Record<string, string> = { '第一档': '10%', '第二档': '25%', '第三档': '50%', '第四档': '100%' }
|
||||||
|
const penalty = tierPenaltyMap[r.tier_name] || ''
|
||||||
|
const isFinalTier = r.tier_name === '第四档'
|
||||||
|
let text = isFinalTier
|
||||||
|
? `OEM维修工单超时提醒(${r.tier_name}已超时,已触发全额扣费(100%))\n\n`
|
||||||
|
: `OEM维修工单超时提醒(${r.tier_name}已超时,达到${r.tier_name}扣${penalty})\n\n`
|
||||||
if (r.order_number) text += `工单号:${r.order_number}\n`
|
if (r.order_number) text += `工单号:${r.order_number}\n`
|
||||||
text += `服务器IP:${r.server_ip || '未知'}\n服务器SN:${r.server_sn}\n`
|
text += `服务器IP:${r.server_ip || '未知'}\n服务器SN:${r.server_sn}\n`
|
||||||
if (rackRO) text += `机架位置:${rackRO}\n`
|
if (rackRO) text += `机架位置:${rackRO}\n`
|
||||||
|
|
@ -188,15 +198,16 @@ export class ReminderEngine {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
const rackRB = getRack ? await getRack(r.server_ip, r.server_sn) : null
|
const rackRB = getRack ? await getRack(r.server_ip, r.server_sn) : null
|
||||||
// 第五档用紧急图标,其他档位用普通图标
|
// 提前1小时提醒格式:距离第X档(扣XX%)还剩1小时
|
||||||
const tierIcon = r.tier_name === '第五档' ? '🚨' : '⏰'
|
const tierPenaltyMap: Record<string, string> = { '第一档': '10%', '第二档': '25%', '第三档': '50%', '第四档': '100%' }
|
||||||
const tierDesc = r.tier_name === '第五档' ? '扣100%' : r.tier_name === '第四档' ? '扣50%' : ''
|
const penalty = tierPenaltyMap[r.tier_name] || ''
|
||||||
let text = `${tierIcon} OEM维修工单提醒(距离${r.tier_name}${tierDesc ? `(${tierDesc})` : ''}超时还剩1小时)\n\n`
|
const isFinalTier = r.tier_name === '第四档'
|
||||||
|
const tierLabel = isFinalTier ? '全额扣费(100%)' : `${r.tier_name}(${penalty})`
|
||||||
|
let text = `OEM维修工单超时提醒(距离${tierLabel}还剩1小时)\n\n`
|
||||||
if (r.order_number) text += `工单号:${r.order_number}\n`
|
if (r.order_number) text += `工单号:${r.order_number}\n`
|
||||||
text += `服务器IP:${r.server_ip || '未知'}\n服务器SN:${r.server_sn}\n`
|
text += `服务器IP:${r.server_ip || '未知'}\n服务器SN:${r.server_sn}\n`
|
||||||
if (rackRB) text += `机架位置:${rackRB}\n`
|
if (rackRB) text += `机架位置:${rackRB}\n`
|
||||||
text += `${r.tier_name}到期时间:${r.deadline_time}\n服务器尚未录入恢复时间,请及时处理!`
|
text += `${r.tier_name}到期时间:${r.deadline_time}\n\n服务器尚未录入恢复时间,请及时处理!`
|
||||||
if (r.tier_name === '第五档') text += `\n\n⚠️ 请注意:第五档超时后将触发全额扣费(100%),请立即处理!`
|
|
||||||
if (await pushText(text)) {
|
if (await pushText(text)) {
|
||||||
this.db.prepare("UPDATE reminder_state SET notification_phase = 'before', notified_at = datetime('now', '+8 hours') WHERE id = ?").run(r.id)
|
this.db.prepare("UPDATE reminder_state SET notification_phase = 'before', notified_at = datetime('now', '+8 hours') WHERE id = ?").run(r.id)
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue