|
|
@@ -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 | 预约时间 |
|
|
|
-| actual_time | DATETIME | 实际就诊时间 |
|
|
|
+| actual_time | DATETIME | 医生主动确认已完成的时间记录 |
|
|
|
| status | VARCHAR(20) | 复诊状态 (PENDING-待确认, CONFIRMED-已确认, CANCELLED-已取消, COMPLETED-已完成) |
|
|
|
| reason | 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) | 备注 |
|
|
|
|
|
|
遵循的数据库规范要点:
|
|
|
- 使用 `BIGINT` 主键并通过雪花算法生成(MyBatis-Plus `ASSIGN_ID`)。
|
|
|
- 公共字段(`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`)。
|
|
|
|
|
|
示例建表(参考):
|
|
|
```
|
|
|
-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 传输策略)。
|
|
|
@@ -92,7 +92,7 @@ public class FollowUp extends BaseEntity {
|
|
|
@TableField("appointment_time")
|
|
|
private LocalDateTime appointmentTime;
|
|
|
|
|
|
- @Schema(description = "实际就诊时间")
|
|
|
+ @Schema(description = "医生主动确认已完成的时间记录")
|
|
|
@TableField("actual_time")
|
|
|
private LocalDateTime actualTime;
|
|
|
|
|
|
@@ -114,7 +114,7 @@ public class FollowUp extends BaseEntity {
|
|
|
|
|
|
#### 3.2.1 请求对象
|
|
|
|
|
|
-```java
|
|
|
+``java
|
|
|
// CreateFollowUpRequest.java
|
|
|
package work.baiyun.chronicdiseaseapp.model.vo;
|
|
|
|
|
|
@@ -168,7 +168,7 @@ public class UpdateFollowUpRequest {
|
|
|
|
|
|
#### 3.2.2 响应对象
|
|
|
|
|
|
-```java
|
|
|
+``java
|
|
|
// FollowUpResponse.java
|
|
|
package work.baiyun.chronicdiseaseapp.model.vo;
|
|
|
|
|
|
@@ -243,7 +243,7 @@ public class FollowUpPageResponse {
|
|
|
|
|
|
## 4. Mapper接口设计
|
|
|
|
|
|
-```java
|
|
|
+``java
|
|
|
// FollowUpMapper.java
|
|
|
package work.baiyun.chronicdiseaseapp.mapper;
|
|
|
|
|
|
@@ -260,7 +260,7 @@ public interface FollowUpMapper extends BaseMapper<FollowUp> {
|
|
|
|
|
|
### 5.1 接口定义
|
|
|
|
|
|
-```java
|
|
|
+``java
|
|
|
// FollowUpService.java
|
|
|
package work.baiyun.chronicdiseaseapp.service;
|
|
|
|
|
|
@@ -300,7 +300,7 @@ public interface FollowUpService {
|
|
|
|
|
|
### 5.2 实现类
|
|
|
|
|
|
-```java
|
|
|
+``java
|
|
|
// FollowUpServiceImpl.java
|
|
|
package work.baiyun.chronicdiseaseapp.service.impl;
|
|
|
|
|
|
@@ -520,7 +520,7 @@ public class FollowUpServiceImpl implements FollowUpService {
|
|
|
|
|
|
## 6. Controller层设计
|
|
|
|
|
|
-```java
|
|
|
+``java
|
|
|
// FollowUpController.java
|
|
|
package work.baiyun.chronicdiseaseapp.controller;
|
|
|
|
|
|
@@ -672,7 +672,7 @@ public class FollowUpController {
|
|
|
|
|
|
## 7. 请求/响应对象补充
|
|
|
|
|
|
-```java
|
|
|
+``java
|
|
|
// DeleteFollowUpRequest.java
|
|
|
package work.baiyun.chronicdiseaseapp.model.vo;
|
|
|
|
|
|
@@ -691,7 +691,7 @@ public class DeleteFollowUpRequest {
|
|
|
|
|
|
在 ErrorCode 枚举中可能需要添加以下错误码:
|
|
|
|
|
|
-```java
|
|
|
+``java
|
|
|
// 在 ErrorCode.java 中添加
|
|
|
FOLLOW_UP_NOT_FOUND(6000, "复诊记录不存在"),
|
|
|
FOLLOW_UP_ACCESS_DENIED(6001, "无权访问复诊记录"),
|