package com.nanri.aiimage.config; import lombok.Data; import org.springframework.boot.context.properties.ConfigurationProperties; /** * 站内通知(铃铛)扫描与探测配置: * 任务失败扫描、下游服务健康探测、已读通知保留期。 */ @Data @ConfigurationProperties(prefix = "aiimage.notification") public class NotificationProperties { /** 扫描总开关:关闭后任务失败扫描与服务探测都不执行(应急降噪)。 */ private boolean scanEnabled = true; /** 扫描间隔(毫秒),默认 5 分钟(任务失败聚合按小时去重,高频扫描不会重复提醒)。 */ private long scanIntervalMs = 5 * 60 * 1000L; /** 首次执行延迟(毫秒),默认 2 分钟,避开启动阶段的数据库压力。 */ private long scanInitialDelayMs = 2 * 60 * 1000L; /** 任务失败扫描开关。 */ private boolean taskScanEnabled = true; /** 任务失败回看窗口(分钟):窗口内进入失败终态的任务参与聚合。 */ private int taskFailedWindowMinutes = 60; /** 单轮任务扫描最多处理条数(超出下一轮继续,避免大表拖垮扫描)。 */ private int taskScanMaxRows = 1000; /** 服务健康探测开关。 */ private boolean serviceProbeEnabled = true; /** 品牌检测服务地址(主机A 15126,探测 /api/version);留空=跳过该项探测。 */ private String brandServiceUrl = ""; /** 跟价任务 API 地址(主机B 18960,探测根路径);留空=跳过该项探测。 */ private String priceTrackApiUrl = ""; /** jikip 代理接口探测开关(复用余额查询接口判活,使用 user-secret 的 jikip 配置)。 */ private boolean jikipProbeEnabled = true; /** 麦象(18960 任务调度)异常扫描开关:任务停滞/失败/队列积压 → 管理员通知。 */ private boolean maixiangScanEnabled = true; /** * 麦象后台接口令牌(18960 console token)。留空=跳过麦象异常扫描—— * 该令牌与「跟价任务 API 地址」(priceTrackApiUrl) 一起构成后台只读接口的访问凭据。 */ private String maixiangConsoleToken = ""; /** 麦象批量任务停滞阈值(分钟):status=0/1 且超过该时长无更新视为卡住。 */ private int maixiangStuckMinutes = 60; /** 麦象单任务滞留阈值(分钟):创建超时仍未完成(status=0/1)视为滞留/无人消费。 */ private int maixiangSingleStuckMinutes = 30; /** 麦象任务失败告警阈值(条):近 30 分钟窗口内失败数达到该值才告警。 */ private int maixiangFailMinCount = 1; /** 麦象队列积压阈值(条):task:queue 待处理数达到该值告警。 */ private int maixiangQueuePendingThreshold = 300; /** 麦象队列积压阈值(条):task:processing 处理中数达到该值告警。 */ private int maixiangQueueProcessingThreshold = 100; /** 已读通知保留天数(超期自动清理),默认 90 天。 */ private int readRetentionDays = 90; /** * 未读通知保留天数,默认 180 天(比已读长一倍)。 * *
未读通知此前永不清理:不看铃铛的用户会无限累积。保留期给得更宽, * 是因为未读意味着"用户可能还没看到",但也不能永远留着。 */ private int unreadRetentionDays = 180; }