# 字段 `is_subscription_available` 的现状与新增值类型对应项目调整规划 ## 概述 本文为对 `t_patient_reminder.is_subscription_available` 字段的现状梳理与将其从二值(0/1)扩展到三值(0/1/2)时的项目调整规划文档(数据库保持 `TINYINT`,Java 层使用枚举映射)。 --- ## 一、现状快速梳理 - 数据库字段:`t_patient_reminder.is_subscription_available`,当前定义为 `TINYINT(1) DEFAULT '0'`,注释:'一次性订阅开关 (0-需要重新授权, 1-已授权可发送一次)'。 - 当前代码中主要使用点: - `api-springboot/src/main/java/work/baiyun/chronicdiseaseapp/service/impl/PatientReminderServiceImpl.java`(保存时从请求将 Boolean->Byte,读取时 Byte->Boolean 给 VO)。 - `api-springboot/src/main/java/work/baiyun/chronicdiseaseapp/service/impl/MessageServiceImpl.java`(发送订阅推送前检查 `pr.getNotificationEnabled()==1 && pr.getSubscriptionAvailable()==1`,当前并未在发送后消费/置 0)。 - 文档:已有使用说明与设计文档位于 `api-springboot/docs`(见处理目录下的汇总与变更计划文档)。 --- ## 二、变更目标 将 `is_subscription_available` 扩展为三值语义: - 0:需要重新授权(禁止发送订阅消息) - 1:已授权,可发送一次(发送成功后需置为 0) - 2:已授权,可发送无限次(不改变值) 要求:数据库字段保持 `TINYINT`,在 Java 层新增枚举以表达三状态;最小化对现有前端/后端的破坏,优先保证线上行为可控。 --- ## 三、迁移进度 - 2025-12-22:已完成数据库字段注释的改动,相关说明已同步到 `docs/DB/t_patient_reminder.txt`。 - 2025-12-22:已在 Java 层新增 `SubscriptionAvailability` 枚举及 MyBatis `SubscriptionAvailabilityTypeHandler`,相关文件:`src/main/java/work/baiyun/chronicdiseaseapp/enums/SubscriptionAvailability.java` 与 `src/main/java/work/baiyun/chronicdiseaseapp/handler/SubscriptionAvailabilityTypeHandler.java`。 - 2025-12-22:已将实体/VO/Request 的 `subscriptionAvailable` 切换为枚举类型:`PatientReminder`(PO)、`PatientReminderRequest`、`PatientReminderResponse` 已改为使用 `SubscriptionAvailability`;相应的保存/读取逻辑已在 `PatientReminderServiceImpl` 中调整。 - 2025-12-22:已在 `MessageServiceImpl` 中改用枚举语义判断订阅可用性,并在发送成功后对一次性授权(`ONCE`)进行消费(写回 `NONE`),以实现一次性订阅的语义。