Просмотр исходного кода

docs(DB): 完善数据库表结构定义与复诊管理功能设计文档

- 为血糖、血压、心率、体格等健康数据表补充完整建表语句
- 新增用户绑定关系表(t_user_binding)及用户认证表(t_user_token)定义
- 完善复诊记录表(t_follow_up)的字段说明与索引设计
- 更新用户信息表(t_user_info)的字段描述与约束条件
- 优化复诊管理功能设计文档中的代码块标记与字段注释
- 统一数据库表字段类型定义,明确BIGINT(20)与INT(11)等格式
- 补充实体类字段注解与响应对象的描述信息准确性
- 规范化所有SQL建表语句的格式与字符集设置
- 明确各表的审计字段(create_user、create_time等)默认行为
- 增加外键约束定义以确保数据完整性
mcbaiyun 1 месяц назад
Родитель
Сommit
ffc79020be

+ 17 - 0
docs/DB/t_blood_glucose_data.txt

@@ -3,3 +3,20 @@
 "1988502766861197314"	"1988147181088956418"	"12/11/2025 00:00:00"	"随机"	"7.6"	"1"	"12/11/2025 15:02:59"	"1"	"12/11/2025 15:02:59"	"0"	
 "1988502766861197314"	"1988147181088956418"	"12/11/2025 00:00:00"	"随机"	"7.6"	"1"	"12/11/2025 15:02:59"	"1"	"12/11/2025 15:02:59"	"0"	
 "1988502817008295937"	"1988147181088956418"	"5/11/2025 00:00:00"	"空腹"	"5.4"	"1"	"12/11/2025 15:03:11"	"1"	"12/11/2025 15:03:11"	"0"	
 "1988502817008295937"	"1988147181088956418"	"5/11/2025 00:00:00"	"空腹"	"5.4"	"1"	"12/11/2025 15:03:11"	"1"	"12/11/2025 15:03:11"	"0"	
 "1988502842404806657"	"1988147181088956418"	"5/11/2025 00:00:00"	"随机"	"8.8"	"1"	"12/11/2025 15:03:17"	"1"	"12/11/2025 15:03:17"	"0"	
 "1988502842404806657"	"1988147181088956418"	"5/11/2025 00:00:00"	"随机"	"8.8"	"1"	"12/11/2025 15:03:17"	"1"	"12/11/2025 15:03:17"	"0"	
+CREATE TABLE `t_blood_glucose_data` (
+  `id` bigint(20) NOT NULL COMMENT '主键ID',
+  `user_id` bigint(20) NOT NULL COMMENT '用户ID',
+  `measure_time` datetime NOT NULL COMMENT '测量时间',
+  `type` varchar(50) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '血糖测量类型',
+  `value` decimal(5,2) NOT NULL COMMENT '血糖值',
+  `create_user` bigint(20) DEFAULT NULL COMMENT '创建者ID',
+  `create_time` datetime DEFAULT NULL COMMENT '创建时间',
+  `update_user` bigint(20) DEFAULT NULL COMMENT '更新者ID',
+  `update_time` datetime DEFAULT NULL COMMENT '更新时间',
+  `version` int(11) DEFAULT '0' COMMENT '乐观锁版本号',
+  `remark` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '备注',
+  PRIMARY KEY (`id`),
+  KEY `idx_bg_user_measure_time` (`user_id`,`measure_time`),
+  KEY `idx_bg_user_id` (`user_id`),
+  KEY `idx_bg_type` (`type`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='血糖数据表';

+ 16 - 0
docs/DB/t_blood_pressure_data.txt

@@ -1,2 +1,18 @@
 "id"	"user_id"	"systolic_pressure"	"diastolic_pressure"	"measure_time"	"create_user"	"create_time"	"update_user"	"update_time"	"version"	"remark"
 "id"	"user_id"	"systolic_pressure"	"diastolic_pressure"	"measure_time"	"create_user"	"create_time"	"update_user"	"update_time"	"version"	"remark"
 "1988500010511409154"	"1988147181088956418"	"120"	"80"	"12/11/2025 00:00:00"	"1"	"12/11/2025 14:52:02"	"1"	"12/11/2025 14:52:02"	"0"	
 "1988500010511409154"	"1988147181088956418"	"120"	"80"	"12/11/2025 00:00:00"	"1"	"12/11/2025 14:52:02"	"1"	"12/11/2025 14:52:02"	"0"	
+CREATE TABLE `t_blood_pressure_data` (
+  `id` bigint(20) NOT NULL COMMENT '主键ID',
+  `user_id` bigint(20) NOT NULL COMMENT '用户ID',
+  `systolic_pressure` int(11) DEFAULT NULL COMMENT '收缩压(mmHg)',
+  `diastolic_pressure` int(11) DEFAULT NULL COMMENT '舒张压(mmHg)',
+  `measure_time` datetime NOT NULL COMMENT '测量时间',
+  `create_user` bigint(20) DEFAULT NULL COMMENT '创建者ID',
+  `create_time` datetime DEFAULT NULL COMMENT '创建时间',
+  `update_user` bigint(20) DEFAULT NULL COMMENT '更新者ID',
+  `update_time` datetime DEFAULT NULL COMMENT '更新时间',
+  `version` int(11) DEFAULT '0' COMMENT '乐观锁版本号',
+  `remark` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '备注',
+  PRIMARY KEY (`id`),
+  KEY `idx_bp_user_measure_time` (`user_id`,`measure_time`),
+  KEY `idx_bp_user_id` (`user_id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='血压数据表';

+ 32 - 0
docs/DB/t_follow_up.sql

@@ -0,0 +1,32 @@
+/*
+ * 复诊记录表
+ * 遵循项目数据库表设计规范:
+ * 1. 使用't_'前缀命名
+ * 2. 主键为BIGINT类型
+ * 3. 包含create_user、create_time、update_user、update_time、version、remark等标准审计字段
+ * 4. 字符集为utf8mb4,排序规则为utf8mb4_unicode_ci,引擎为InnoDB
+ * 5. create_time字段应设置DEFAULT CURRENT_TIMESTAMP
+ * 6. update_time字段应设置DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
+ */
+
+CREATE TABLE `t_follow_up` (
+  `id` bigint(20) NOT NULL COMMENT '主键ID',
+  `patient_user_id` bigint(20) NOT NULL COMMENT '患者用户ID',
+  `doctor_user_id` bigint(20) NOT NULL COMMENT '医生用户ID',
+  `appointment_time` datetime NOT NULL COMMENT '预约时间',
+  `actual_time` datetime DEFAULT NULL COMMENT '医生主动确认已完成的时间记录',
+  `status` varchar(20) NOT NULL COMMENT '复诊状态 (PENDING-待确认, CONFIRMED-已确认, CANCELLED-已取消, COMPLETED-已完成)',
+  `reason` text COMMENT '复诊原因',
+  `notes` text COMMENT '备注',
+  `version` int(11) DEFAULT '0' COMMENT '版本号(乐观锁)',
+  `create_user` bigint(20) DEFAULT NULL COMMENT '创建者ID',
+  `create_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
+  `update_user` bigint(20) DEFAULT NULL COMMENT '更新者ID',
+  `update_time` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
+  `remark` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '备注',
+  PRIMARY KEY (`id`),
+  KEY `idx_patient_user_id` (`patient_user_id`),
+  KEY `idx_doctor_user_id` (`doctor_user_id`),
+  KEY `idx_appointment_time` (`appointment_time`),
+  KEY `idx_status` (`status`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='复诊记录表';

+ 15 - 0
docs/DB/t_heart_rate_data.txt

@@ -1,3 +1,18 @@
 "id"	"user_id"	"heart_rate"	"measure_time"	"create_user"	"create_time"	"update_user"	"update_time"	"version"	"remark"
 "id"	"user_id"	"heart_rate"	"measure_time"	"create_user"	"create_time"	"update_user"	"update_time"	"version"	"remark"
 "1988498386246213634"	"1988147181088956418"	"72"	"12/11/2025 00:00:00"	"1"	"12/11/2025 14:45:34"	"1"	"12/11/2025 14:45:34"	"0"	
 "1988498386246213634"	"1988147181088956418"	"72"	"12/11/2025 00:00:00"	"1"	"12/11/2025 14:45:34"	"1"	"12/11/2025 14:45:34"	"0"	
 "1988498431406284802"	"1988147181088956418"	"54"	"11/11/2025 00:00:00"	"1"	"12/11/2025 14:45:45"	"1"	"12/11/2025 14:45:45"	"0"	
 "1988498431406284802"	"1988147181088956418"	"54"	"11/11/2025 00:00:00"	"1"	"12/11/2025 14:45:45"	"1"	"12/11/2025 14:45:45"	"0"	
+CREATE TABLE `t_heart_rate_data` (
+  `id` bigint(20) NOT NULL COMMENT '主键ID',
+  `user_id` bigint(20) NOT NULL COMMENT '用户ID',
+  `heart_rate` int(11) DEFAULT NULL COMMENT '心率(次/分钟)',
+  `measure_time` datetime NOT NULL COMMENT '测量时间',
+  `create_user` bigint(20) DEFAULT NULL COMMENT '创建者ID',
+  `create_time` datetime DEFAULT NULL COMMENT '创建时间',
+  `update_user` bigint(20) DEFAULT NULL COMMENT '更新者ID',
+  `update_time` datetime DEFAULT NULL COMMENT '更新时间',
+  `version` int(11) DEFAULT '0' COMMENT '乐观锁版本号',
+  `remark` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '备注',
+  PRIMARY KEY (`id`),
+  KEY `idx_hr_user_measure_time` (`user_id`,`measure_time`),
+  KEY `idx_hr_user_id` (`user_id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='心率数据表';

+ 16 - 0
docs/DB/t_physical_data.txt

@@ -2,3 +2,19 @@
 "1988449152629252097"	"1988147181088956418"	"155"	"65"	"9/11/2025 00:00:00"	"1"	"12/11/2025 11:29:56"	"1"	"12/11/2025 11:29:56"	"0"	
 "1988449152629252097"	"1988147181088956418"	"155"	"65"	"9/11/2025 00:00:00"	"1"	"12/11/2025 11:29:56"	"1"	"12/11/2025 11:29:56"	"0"	
 "1988456421005795330"	"1988147181088956418"	"177"	"90"	"12/11/2025 00:00:00"	"1"	"12/11/2025 11:58:49"	"1"	"12/11/2025 11:58:49"	"0"	
 "1988456421005795330"	"1988147181088956418"	"177"	"90"	"12/11/2025 00:00:00"	"1"	"12/11/2025 11:58:49"	"1"	"12/11/2025 11:58:49"	"0"	
 "1989581733017985026"	"1988147181088956418"	"170"	"78"	"15/11/2025 00:00:00"	"1"	"15/11/2025 14:30:24"	"1"	"15/11/2025 14:30:24"	"0"	
 "1989581733017985026"	"1988147181088956418"	"170"	"78"	"15/11/2025 00:00:00"	"1"	"15/11/2025 14:30:24"	"1"	"15/11/2025 14:30:24"	"0"	
+CREATE TABLE `t_physical_data` (
+  `id` bigint(20) NOT NULL COMMENT '主键ID',
+  `user_id` bigint(20) NOT NULL COMMENT '用户ID',
+  `height` decimal(5,2) DEFAULT NULL COMMENT '身高(cm)',
+  `weight` decimal(5,2) DEFAULT NULL COMMENT '体重(kg)',
+  `measure_time` datetime NOT NULL COMMENT '测量时间',
+  `create_user` bigint(20) DEFAULT NULL COMMENT '创建者ID',
+  `create_time` datetime DEFAULT NULL COMMENT '创建时间',
+  `update_user` bigint(20) DEFAULT NULL COMMENT '更新者ID',
+  `update_time` datetime DEFAULT NULL COMMENT '更新时间',
+  `version` int(11) DEFAULT '0' COMMENT '乐观锁版本号',
+  `remark` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '备注',
+  PRIMARY KEY (`id`),
+  KEY `idx_physical_user_measure_time` (`user_id`,`measure_time`),
+  KEY `idx_physical_user_id` (`user_id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='体格数据表';

+ 20 - 0
docs/DB/t_user_binding.txt

@@ -1,3 +1,23 @@
 "id"	"patient_user_id"	"bound_user_id"	"binding_type"	"status"	"create_user"	"create_time"	"update_user"	"update_time"	"version"	"remark"
 "id"	"patient_user_id"	"bound_user_id"	"binding_type"	"status"	"create_user"	"create_time"	"update_user"	"update_time"	"version"	"remark"
 "1990104700034510849"	"1988147181088956418"	"1988172854356631553"	"DOCTOR"	"1"	"1"	"17/11/2025 01:08:30"	"1"	"17/11/2025 01:08:30"	"0"	
 "1990104700034510849"	"1988147181088956418"	"1988172854356631553"	"DOCTOR"	"1"	"1"	"17/11/2025 01:08:30"	"1"	"17/11/2025 01:08:30"	"0"	
 "1990322533418975234"	"1988147181088956418"	"1988196438584090626"	"FAMILY"	"1"	"1"	"17/11/2025 15:34:05"	"1"	"17/11/2025 15:34:05"	"0"	
 "1990322533418975234"	"1988147181088956418"	"1988196438584090626"	"FAMILY"	"1"	"1"	"17/11/2025 15:34:05"	"1"	"17/11/2025 15:34:05"	"0"	
+CREATE TABLE `t_user_binding` (
+  `id` bigint(20) NOT NULL COMMENT '主键ID',
+  `patient_user_id` bigint(20) NOT NULL COMMENT '患者用户ID',
+  `bound_user_id` bigint(20) NOT NULL COMMENT '被绑定用户ID(医生或家属)',
+  `binding_type` varchar(20) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '绑定类型(DOCTOR-医生, FAMILY-家属)',
+  `status` tinyint(4) DEFAULT '1' COMMENT '绑定状态(1-有效,0-无效)',
+  `create_user` bigint(20) DEFAULT NULL COMMENT '创建者ID',
+  `create_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
+  `update_user` bigint(20) DEFAULT NULL COMMENT '更新者ID',
+  `update_time` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
+  `version` int(11) DEFAULT '0' COMMENT '乐观锁版本号',
+  `remark` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '备注',
+  PRIMARY KEY (`id`),
+  KEY `idx_patient_bound` (`patient_user_id`,`bound_user_id`),
+  KEY `idx_patient_user` (`patient_user_id`),
+  KEY `idx_bound_user` (`bound_user_id`),
+  KEY `idx_binding_type` (`binding_type`),
+  CONSTRAINT `fk_binding_bound` FOREIGN KEY (`bound_user_id`) REFERENCES `t_user_info` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
+  CONSTRAINT `fk_binding_patient` FOREIGN KEY (`patient_user_id`) REFERENCES `t_user_info` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='用户绑定关系表';

+ 23 - 0
docs/DB/t_user_info.txt

@@ -4,3 +4,26 @@
 "1988196438584090626"	"4"	"1"	"11/11/2025 18:45:45"	"1"	"17/11/2025 15:14:01"				"4"	"oMrLJ4upWlkcM8ngNnj849sF_sZg"	"1988196438584090626/1763181495049.jpeg"	"家属test"	"1"	"19723123111"	"22"	"重庆市 重庆市"
 "1988196438584090626"	"4"	"1"	"11/11/2025 18:45:45"	"1"	"17/11/2025 15:14:01"				"4"	"oMrLJ4upWlkcM8ngNnj849sF_sZg"	"1988196438584090626/1763181495049.jpeg"	"家属test"	"1"	"19723123111"	"22"	"重庆市 重庆市"
 "1988218156098805762"	"0"	"1"	"11/11/2025 20:12:02"	"1"	"11/11/2025 20:12:02"				"3"	"oMrLJ4tt491gE-__o36x3SrJ0kVg"						
 "1988218156098805762"	"0"	"1"	"11/11/2025 20:12:02"	"1"	"11/11/2025 20:12:02"				"3"	"oMrLJ4tt491gE-__o36x3SrJ0kVg"						
 "1989589966487068673"	"0"	"1"	"15/11/2025 15:03:07"	"1"	"15/11/2025 15:03:07"				"2"	"oMrLJ4tt491gE-__o36x3SrJ0kVg"						
 "1989589966487068673"	"0"	"1"	"15/11/2025 15:03:07"	"1"	"15/11/2025 15:03:07"				"2"	"oMrLJ4tt491gE-__o36x3SrJ0kVg"						
+CREATE TABLE `t_user_info` (
+  `id` bigint(20) NOT NULL COMMENT '主键ID',
+  `version` int(11) DEFAULT '0' COMMENT '乐观锁版本',
+  `create_user` bigint(20) DEFAULT NULL COMMENT '创建者',
+  `create_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
+  `update_user` bigint(20) DEFAULT NULL COMMENT '更新者',
+  `update_time` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
+  `remark` varchar(500) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '备注',
+  `username` varchar(100) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '用户名(可选)',
+  `password` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '密码(可选)',
+  `role` tinyint(3) NOT NULL COMMENT '角色(枚举 PermissionGroup)',
+  `wx_openid` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '微信ID(可选)',
+  `avatar` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '头像(可选)',
+  `nickname` varchar(100) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '昵称(可选)',
+  `sex` tinyint(20) DEFAULT NULL COMMENT '性别(可选) 1(男)或 2(女)',
+  `phone` varchar(32) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '手机号(可选)',
+  `age` int(11) DEFAULT NULL COMMENT '年龄(可选)',
+  `address` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '地址(可选)',
+  PRIMARY KEY (`id`),
+  KEY `idx_username` (`username`),
+  KEY `idx_phone` (`phone`),
+  KEY `idx_wx_openid` (`wx_openid`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='用户信息表';

+ 16 - 0
docs/DB/t_user_token.txt

@@ -4,3 +4,19 @@
 "1988196438584090627"	"9"	"1"	"11/11/2025 18:45:45"	"1"	"11/11/2025 18:45:45"		"1988196438584090626"	"56ba488c953f42549fb1e6cbe1f12450"	"20/11/2025 15:32:19"
 "1988196438584090627"	"9"	"1"	"11/11/2025 18:45:45"	"1"	"11/11/2025 18:45:45"		"1988196438584090626"	"56ba488c953f42549fb1e6cbe1f12450"	"20/11/2025 15:32:19"
 "1988218156098805763"	"0"	"1"	"11/11/2025 20:12:02"	"1"	"11/11/2025 20:12:02"		"1988218156098805762"	"9cde389298664619aaae9c65cf7ab325"	"14/11/2025 20:12:02"
 "1988218156098805763"	"0"	"1"	"11/11/2025 20:12:02"	"1"	"11/11/2025 20:12:02"		"1988218156098805762"	"9cde389298664619aaae9c65cf7ab325"	"14/11/2025 20:12:02"
 "1989589966487068674"	"0"	"1"	"15/11/2025 15:03:07"	"1"	"15/11/2025 15:03:07"		"1989589966487068673"	"3b34609dac4548b0a1d66f057a6fee2c"	"18/11/2025 15:03:07"
 "1989589966487068674"	"0"	"1"	"15/11/2025 15:03:07"	"1"	"15/11/2025 15:03:07"		"1989589966487068673"	"3b34609dac4548b0a1d66f057a6fee2c"	"18/11/2025 15:03:07"
+CREATE TABLE `t_user_token` (
+  `id` bigint(20) NOT NULL COMMENT '主键ID',
+  `version` int(11) DEFAULT '0' COMMENT '乐观锁版本',
+  `create_user` bigint(20) DEFAULT NULL COMMENT '创建者',
+  `create_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
+  `update_user` bigint(20) DEFAULT NULL COMMENT '更新者',
+  `update_time` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
+  `remark` varchar(500) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '备注',
+  `user_id` bigint(20) NOT NULL COMMENT '用户ID',
+  `token` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT 'Token(UUID 或自定义)',
+  `expire_time` datetime NOT NULL COMMENT '过期时间',
+  PRIMARY KEY (`id`),
+  UNIQUE KEY `uk_user_id` (`user_id`),
+  KEY `idx_token` (`token`),
+  CONSTRAINT `fk_user_token_user` FOREIGN KEY (`user_id`) REFERENCES `t_user_info` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='用户认证表';

+ 39 - 39
docs/New/复诊管理功能设计文档.md

@@ -12,50 +12,50 @@
 
 
 | 字段名 | 类型 | 描述 |
 | 字段名 | 类型 | 描述 |
 |--------|------|------|
 |--------|------|------|
-| id | BIGINT | 主键ID,使用雪花算法(MyBatis-Plus `ASSIGN_ID`) |
-| patient_user_id | BIGINT | 患者用户ID,外键(可选) |
-| doctor_user_id | BIGINT | 医生用户ID,外键(可选) |
+| id | BIGINT(20) | 主键ID,使用雪花算法(MyBatis-Plus `ASSIGN_ID`) |
+| patient_user_id | BIGINT(20) | 患者用户ID,外键(可选) |
+| doctor_user_id | BIGINT(20) | 医生用户ID,外键(可选) |
 | appointment_time | DATETIME | 预约时间 |
 | appointment_time | DATETIME | 预约时间 |
-| actual_time | DATETIME | 实际就诊时间 |
+| actual_time | DATETIME | 医生主动确认已完成的时间记录 |
 | status | VARCHAR(20) | 复诊状态 (PENDING-待确认, CONFIRMED-已确认, CANCELLED-已取消, COMPLETED-已完成) |
 | status | VARCHAR(20) | 复诊状态 (PENDING-待确认, CONFIRMED-已确认, CANCELLED-已取消, COMPLETED-已完成) |
 | reason | TEXT | 复诊原因 |
 | reason | TEXT | 复诊原因 |
 | notes | TEXT | 备注 |
 | notes | TEXT | 备注 |
-| create_user | BIGINT | 创建者ID |
-| create_time | DATETIME | 创建时间 |
-| update_user | BIGINT | 更新者ID |
-| update_time | DATETIME | 更新时间 |
-| version | INT | 版本号(乐观锁) |
+| version | INT(11) | 版本号(乐观锁) |
+| create_user | BIGINT(20) | 创建者ID |
+| create_time | DATETIME | 创建时间,默认值CURRENT_TIMESTAMP |
+| update_user | BIGINT(20) | 更新者ID |
+| update_time | DATETIME | 更新时间,默认值CURRENT_TIMESTAMP,更新时自动设置为当前时间 |
 | remark | VARCHAR(255) | 备注 |
 | remark | VARCHAR(255) | 备注 |
 
 
 遵循的数据库规范要点:
 遵循的数据库规范要点:
 - 使用 `BIGINT` 主键并通过雪花算法生成(MyBatis-Plus `ASSIGN_ID`)。
 - 使用 `BIGINT` 主键并通过雪花算法生成(MyBatis-Plus `ASSIGN_ID`)。
 - 公共字段(`version`、`create_user`、`create_time`、`update_user`、`update_time`)由 `BaseEntity` 与 `CustomMetaObjectHandler` 自动填充。
 - 公共字段(`version`、`create_user`、`create_time`、`update_user`、`update_time`)由 `BaseEntity` 与 `CustomMetaObjectHandler` 自动填充。
-- 建议添加索引:`patient_user_id`、`doctor_user_id`、`appointment_time`、`create_time`。如有按状态频繁查询,可加 `status` 的组合索引。
 - 根据需要添加外键约束(注意性能影响)或在应用层校验关联数据完整性。
 - 根据需要添加外键约束(注意性能影响)或在应用层校验关联数据完整性。
 - 数据迁移建议使用 Flyway/Liquibase(脚本命名遵循 `V{version}__{description}.sql`)。
 - 数据迁移建议使用 Flyway/Liquibase(脚本命名遵循 `V{version}__{description}.sql`)。
 
 
 示例建表(参考):
 示例建表(参考):
 ```
 ```
-CREATE TABLE t_follow_up (
-    id BIGINT PRIMARY KEY,
-    patient_user_id BIGINT NOT NULL,
-    doctor_user_id BIGINT NOT NULL,
-    appointment_time DATETIME NOT NULL,
-    actual_time DATETIME,
-    status VARCHAR(20) NOT NULL,
-    reason TEXT,
-    notes TEXT,
-    create_user BIGINT,
-    create_time DATETIME DEFAULT CURRENT_TIMESTAMP,
-    update_user BIGINT,
-    update_time DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
-    version INT DEFAULT 0,
-    remark VARCHAR(255)
-);
-CREATE INDEX idx_followup_patient ON t_follow_up(patient_user_id);
-CREATE INDEX idx_followup_doctor ON t_follow_up(doctor_user_id);
-CREATE INDEX idx_followup_appointment ON t_follow_up(appointment_time);
-CREATE INDEX idx_followup_create ON t_follow_up(create_time);
+CREATE TABLE `t_follow_up` (
+  `id` bigint(20) NOT NULL COMMENT '主键ID',
+  `patient_user_id` bigint(20) NOT NULL COMMENT '患者用户ID',
+  `doctor_user_id` bigint(20) NOT NULL COMMENT '医生用户ID',
+  `appointment_time` datetime NOT NULL COMMENT '预约时间',
+  `actual_time` datetime DEFAULT NULL COMMENT '医生主动确认已完成的时间记录',
+  `status` varchar(20) NOT NULL COMMENT '复诊状态 (PENDING-待确认, CONFIRMED-已确认, CANCELLED-已取消, COMPLETED-已完成)',
+  `reason` text COMMENT '复诊原因',
+  `notes` text COMMENT '备注',
+  `version` int(11) DEFAULT '0' COMMENT '版本号(乐观锁)',
+  `create_user` bigint(20) DEFAULT NULL COMMENT '创建者ID',
+  `create_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
+  `update_user` bigint(20) DEFAULT NULL COMMENT '更新者ID',
+  `update_time` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
+  `remark` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '备注',
+  PRIMARY KEY (`id`),
+  KEY `idx_patient_user_id` (`patient_user_id`),
+  KEY `idx_doctor_user_id` (`doctor_user_id`),
+  KEY `idx_appointment_time` (`appointment_time`),
+  KEY `idx_status` (`status`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='复诊记录表';
 ```
 ```
 
 
 备注:对外响应的 `id` 建议以字符串形式返回以避免前端 JS 精度丢失(参见 `docs/OLD/DevRule/03-API设计规范.md` 的长整型 ID 传输策略)。
 备注:对外响应的 `id` 建议以字符串形式返回以避免前端 JS 精度丢失(参见 `docs/OLD/DevRule/03-API设计规范.md` 的长整型 ID 传输策略)。
@@ -92,7 +92,7 @@ public class FollowUp extends BaseEntity {
     @TableField("appointment_time")
     @TableField("appointment_time")
     private LocalDateTime appointmentTime;
     private LocalDateTime appointmentTime;
 
 
-    @Schema(description = "实际就诊时间")
+    @Schema(description = "医生主动确认已完成的时间记录")
     @TableField("actual_time")
     @TableField("actual_time")
     private LocalDateTime actualTime;
     private LocalDateTime actualTime;
 
 
@@ -114,7 +114,7 @@ public class FollowUp extends BaseEntity {
 
 
 #### 3.2.1 请求对象
 #### 3.2.1 请求对象
 
 
-```java
+``java
 // CreateFollowUpRequest.java
 // CreateFollowUpRequest.java
 package work.baiyun.chronicdiseaseapp.model.vo;
 package work.baiyun.chronicdiseaseapp.model.vo;
 
 
@@ -168,7 +168,7 @@ public class UpdateFollowUpRequest {
 
 
 #### 3.2.2 响应对象
 #### 3.2.2 响应对象
 
 
-```java
+``java
 // FollowUpResponse.java
 // FollowUpResponse.java
 package work.baiyun.chronicdiseaseapp.model.vo;
 package work.baiyun.chronicdiseaseapp.model.vo;
 
 
@@ -243,7 +243,7 @@ public class FollowUpPageResponse {
 
 
 ## 4. Mapper接口设计
 ## 4. Mapper接口设计
 
 
-```java
+``java
 // FollowUpMapper.java
 // FollowUpMapper.java
 package work.baiyun.chronicdiseaseapp.mapper;
 package work.baiyun.chronicdiseaseapp.mapper;
 
 
@@ -260,7 +260,7 @@ public interface FollowUpMapper extends BaseMapper<FollowUp> {
 
 
 ### 5.1 接口定义
 ### 5.1 接口定义
 
 
-```java
+``java
 // FollowUpService.java
 // FollowUpService.java
 package work.baiyun.chronicdiseaseapp.service;
 package work.baiyun.chronicdiseaseapp.service;
 
 
@@ -300,7 +300,7 @@ public interface FollowUpService {
 
 
 ### 5.2 实现类
 ### 5.2 实现类
 
 
-```java
+``java
 // FollowUpServiceImpl.java
 // FollowUpServiceImpl.java
 package work.baiyun.chronicdiseaseapp.service.impl;
 package work.baiyun.chronicdiseaseapp.service.impl;
 
 
@@ -520,7 +520,7 @@ public class FollowUpServiceImpl implements FollowUpService {
 
 
 ## 6. Controller层设计
 ## 6. Controller层设计
 
 
-```java
+``java
 // FollowUpController.java
 // FollowUpController.java
 package work.baiyun.chronicdiseaseapp.controller;
 package work.baiyun.chronicdiseaseapp.controller;
 
 
@@ -672,7 +672,7 @@ public class FollowUpController {
 
 
 ## 7. 请求/响应对象补充
 ## 7. 请求/响应对象补充
 
 
-```java
+``java
 // DeleteFollowUpRequest.java
 // DeleteFollowUpRequest.java
 package work.baiyun.chronicdiseaseapp.model.vo;
 package work.baiyun.chronicdiseaseapp.model.vo;
 
 
@@ -691,7 +691,7 @@ public class DeleteFollowUpRequest {
 
 
 在 ErrorCode 枚举中可能需要添加以下错误码:
 在 ErrorCode 枚举中可能需要添加以下错误码:
 
 
-```java
+``java
 // 在 ErrorCode.java 中添加
 // 在 ErrorCode.java 中添加
 FOLLOW_UP_NOT_FOUND(6000, "复诊记录不存在"),
 FOLLOW_UP_NOT_FOUND(6000, "复诊记录不存在"),
 FOLLOW_UP_ACCESS_DENIED(6001, "无权访问复诊记录"),
 FOLLOW_UP_ACCESS_DENIED(6001, "无权访问复诊记录"),