fix: 修复轮询系统缓存不一致和可观测性问题
Some checks failed
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Has been cancelled

- OnCardStatusChanged/Enabled/Disabled 添加 InvalidateCardCache,
  解决 Refresh API 更新 DB 后 polling 缓存仍为旧值的 bug
- AssetResolveResponse 的 enable_polling/network_status 去掉
  omitempty,解决 false/0 时字段从响应中消失的问题
- Scheduler/Initializer/PackageHandler 增加 INFO 级别日志,
  可通过日志判断轮询是否工作、处理了哪些卡
This commit is contained in:
2026-04-10 15:52:38 +08:00
parent ef8ec025bd
commit 2a7ac3f86e
6 changed files with 58 additions and 28 deletions

View File

@@ -63,11 +63,14 @@ func (s *PollingLifecycleService) OnBatchCardsCreated(ctx context.Context, cards
}
}
// OnCardStatusChanged 卡状态变化后重新匹配配置并更新队列
// OnCardStatusChanged 卡状态变化后清理缓存、重新匹配配置并更新队列
func (s *PollingLifecycleService) OnCardStatusChanged(ctx context.Context, cardID uint) {
if err := s.queueMgr.RemoveFromAllQueues(ctx, cardID); err != nil {
s.logger.Warn("卡状态变化:从队列移除失败", zap.Uint("card_id", cardID), zap.Error(err))
}
// 清理轮询卡缓存,确保下次轮询从 DB 读取最新状态
s.queueMgr.InvalidateCardCache(ctx, cardID)
card, err := s.iotCardStore.GetByID(ctx, cardID)
if err != nil {
s.logger.Error("卡状态变化:加载卡信息失败", zap.Uint("card_id", cardID), zap.Error(err))
@@ -88,6 +91,7 @@ func (s *PollingLifecycleService) OnCardDeleted(ctx context.Context, cardID uint
// OnCardEnabled 卡启用轮询后初始化
func (s *PollingLifecycleService) OnCardEnabled(ctx context.Context, cardID uint) {
s.queueMgr.InvalidateCardCache(ctx, cardID)
card, err := s.iotCardStore.GetByID(ctx, cardID)
if err != nil {
s.logger.Error("卡启用:加载卡信息失败", zap.Uint("card_id", cardID), zap.Error(err))
@@ -104,6 +108,7 @@ func (s *PollingLifecycleService) OnCardDisabled(ctx context.Context, cardID uin
if err := s.queueMgr.RemoveFromAllQueues(ctx, cardID); err != nil {
s.logger.Warn("卡禁用:从队列移除失败", zap.Uint("card_id", cardID), zap.Error(err))
}
s.queueMgr.InvalidateCardCache(ctx, cardID)
}
// shouldEnqueue M3 修复:检查卡或其绑定设备是否允许轮询