## Why 套餐临期提醒发给所有绑定过该资产的客户(`reminder_publisher.go` 的 `loadRecipients`),个人通知列表又没有资产过滤,客户在任一资产页都会看到名下全部资产的临期提醒(运营清单 26)。业务已确认改为按资产提醒:哪个资产被扫码进入就提醒哪个,同一客户、同一资产、同一天只提醒一次。依据为《第1批-8-9月迭代缺陷修复技术方案》第 4 节(M9)。 ## What Changes - H5 资产信息接口 `GET /api/c/v1/asset/info` 在当前资产处于临期窗口(剩余 0~15 天)且当天未提醒过时,返回临期提醒字段(剩余天数、到期时间、等级),并为“当前客户、当前资产”写一条 `package.expiring` 个人通知;同一客户、同一资产、同一北京时间日期只提醒一次。 - **BREAKING** 每日扫描不再给个人客户写临期通知;店铺通知不变。 - **BREAKING** 个人通知列表、未读数与“全部已读”中,临期提醒只处理当前资产的;其他类型通知不受影响,接口入参不变。 - H5 进入资产时写入的个人客户临期通知**写入即已读**(`is_read=true`,`read_at` 为写入时间),不计入未读数:同一时刻 H5 已经弹窗展示过,不应该再在通知中心产生红点;而且通知每天按新的剩余天数生成一条,保持未读的话会不断累积。其他个人直发通知(换货发货、自动续费)和店铺临期通知仍然是未读。 ## Capabilities ### New Capabilities 无。 ### Modified Capabilities - `notification-delivery`:每日临期扫描只通知店铺接收人;新增 H5 进入资产时的临期提醒;个人通知中心临期提醒按当前资产过滤。 ## Impact - 代码:`internal/infrastructure/packageexpiry/reminder_publisher.go`(去掉个人客户批量写入)、H5 资产信息 Handler 与服务(复用 `packageexpiry` 最终到期推算、写 Outbox 个人通知)、个人通知列表与未读数查询、`pkg/constants/redis.go`(去重键)、资产信息响应 DTO、`internal/application/notification/delivery.go`(直发载荷新增可选的写入即已读标记,`deliverOne` 按标记写入,审计 `after_data` 按实际已读状态记录)。 - 接口:`GET /api/c/v1/asset/info` 新增字段;个人通知列表与未读数结果范围变化;重新生成接口文档。 - 依赖:Redis(去重键);Outbox 按 `event_id` 冲突忽略写入(`internal/infrastructure/messaging/outbox/repository.go`)。 - 无数据库迁移。