更新初级版本

This commit is contained in:
Your Name
2026-03-06 17:30:37 +08:00
parent 52bb80e2f1
commit 7b76671988
19 changed files with 1656 additions and 370 deletions
+218
View File
@@ -0,0 +1,218 @@
# 诊单查看记录功能
## 功能概述
记录用户查看和确认诊单的行为,包括查看次数、查看时间、确认状态等信息。
## 数据库表结构
### la_diagnosis_view_records 表
```sql
CREATE TABLE `la_diagnosis_view_records` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键ID',
`user_id` int(11) NOT NULL DEFAULT '0' COMMENT '查看用户ID',
`diagnosis_id` int(11) NOT NULL DEFAULT '0' COMMENT '诊单ID',
`patient_id` int(11) NOT NULL DEFAULT '0' COMMENT '患者ID',
`share_user_id` int(11) NOT NULL DEFAULT '0' COMMENT '分享用户ID',
`view_count` int(11) NOT NULL DEFAULT '1' COMMENT '查看次数',
`first_view_time` int(11) NOT NULL DEFAULT '0' COMMENT '首次查看时间',
`last_view_time` int(11) NOT NULL DEFAULT '0' COMMENT '最后查看时间',
`is_confirmed` tinyint(1) NOT NULL DEFAULT '0' COMMENT '是否已确认 0-未确认 1-已确认',
`confirmed_time` int(11) NOT NULL DEFAULT '0' COMMENT '确认时间',
`create_time` int(11) NOT NULL DEFAULT '0' COMMENT '创建时间',
`update_time` int(11) NOT NULL DEFAULT '0' COMMENT '更新时间',
`delete_time` int(11) DEFAULT NULL COMMENT '删除时间',
PRIMARY KEY (`id`),
KEY `idx_user_diagnosis` (`user_id`, `diagnosis_id`),
KEY `idx_diagnosis` (`diagnosis_id`),
KEY `idx_patient` (`patient_id`),
KEY `idx_share_user` (`share_user_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='诊单查看记录表';
```
## 字段说明
| 字段 | 类型 | 说明 |
|------|------|------|
| user_id | int | 查看用户ID(当前登录用户) |
| diagnosis_id | int | 诊单ID |
| patient_id | int | 患者ID(从诊单获取) |
| share_user_id | int | 分享用户ID(生成二维码的用户) |
| view_count | int | 查看次数(每次打开页面+1) |
| first_view_time | int | 首次查看时间戳 |
| last_view_time | int | 最后查看时间戳 |
| is_confirmed | tinyint | 是否已确认(0-未确认 1-已确认) |
| confirmed_time | int | 确认时间戳 |
## 后端实现
### 1. 模型文件
`server/app/common/model/DiagnosisViewRecord.php`
### 2. 控制器方法
`server/app/api/controller/TcmController.php`
#### diagnosisDetail - 获取诊单详情
```php
GET /api/tcm/diagnosisDetail
参数:
- id: 诊单ID(必填)
- user_id: 查看用户ID(选填,默认0
- share_user_id: 分享用户ID(选填,默认0
功能:
1. 获取诊单详情
2. 自动记录查看行为
3. 如果是首次查看,创建新记录
4. 如果已有记录,更新查看次数和最后查看时间
```
#### confirmDiagnosis - 确认诊单
```php
POST /api/tcm/confirmDiagnosis
参数:
- id: 诊单ID(必填)
- user_id: 查看用户ID(选填,默认0
- share_user: 分享用户ID(选填,默认0
功能:
1. 更新查看记录的确认状态
2. 记录确认时间
3. 如果没有查看记录,创建一条已确认的记录
```
### 3. 逻辑层方法
`server/app/adminapi/logic/tcm/DiagnosisLogic.php`
#### diagnosisDetailWithRecord
- 获取诊单详情并记录查看行为
- 调用 `recordDiagnosisView` 记录查看
#### recordDiagnosisView
- 查找是否已有记录
- 首次查看:创建新记录
- 再次查看:更新查看次数和最后查看时间
#### confirmDiagnosisRecord
- 更新确认状态
- 记录确认时间
## 前端实现
### 小程序页面
`TUICallKit-Vue3/pages/order/monad/monad.vue`
#### 参数解析
```javascript
const parsePageParams = (options) => {
// 解析scene参数(扫码进入)
// 解析普通参数(跳转进入)
// 获取当前登录用户ID
return params;
};
```
#### 加载诊单详情
```javascript
const res = await proxy.apiUrl({
url: '/api/tcm/diagnosisDetail',
method: 'GET',
data: {
id: diagnosisId,
user_id: params.user_id || 0,
share_user_id: params.share_user || 0
}
});
```
#### 确认诊单
```javascript
const res = await proxy.apiUrl({
url: '/api/tcm/confirmDiagnosis',
method: 'POST',
data: {
id: params.id,
user_id: params.user_id || 0,
share_user: params.share_user || 0
}
});
```
## 使用流程
### 1. 生成二维码
管理员在后台点击"小程序二维码"按钮
- 传递参数:`diagnosis_id`, `patient_id`, `share_user_id`
- 生成scene: `id=4&share_user=1`
### 2. 用户扫码
用户使用微信扫描二维码
- 小程序接收参数:`scene: "id%3D4%26share_user%3D1"`
- 解析参数:`{ id: "4", share_user: "1" }`
### 3. 查看诊单
小程序加载诊单详情
- 调用 `/api/tcm/diagnosisDetail`
- 传递:`id`, `user_id`, `share_user_id`
- 后端自动记录查看行为
### 4. 确认诊单
用户点击"确认诊单"按钮
- 调用 `/api/tcm/confirmDiagnosis`
- 传递:`id`, `user_id`, `share_user`
- 后端更新确认状态
## 数据统计
### 可统计的数据
1. 每个诊单的查看次数
2. 每个用户查看了哪些诊单
3. 诊单的确认率
4. 分享效果(通过share_user_id统计)
5. 首次查看到确认的时间间隔
### 查询示例
#### 查询某个诊单的查看记录
```php
$records = DiagnosisViewRecord::where('diagnosis_id', $diagnosisId)
->with(['user', 'shareUser'])
->select();
```
#### 查询某个用户的查看记录
```php
$records = DiagnosisViewRecord::where('user_id', $userId)
->with(['diagnosis'])
->select();
```
#### 统计诊单查看次数
```php
$viewCount = DiagnosisViewRecord::where('diagnosis_id', $diagnosisId)
->sum('view_count');
```
#### 统计确认率
```php
$total = DiagnosisViewRecord::where('diagnosis_id', $diagnosisId)->count();
$confirmed = DiagnosisViewRecord::where('diagnosis_id', $diagnosisId)
->where('is_confirmed', 1)
->count();
$rate = $total > 0 ? ($confirmed / $total * 100) : 0;
```
## 注意事项
1. **用户ID获取**: 需要在小程序中实现用户登录,获取当前用户ID
2. **匿名访问**: 如果允许匿名访问,user_id可以为0
3. **数据清理**: 建议定期清理过期的查看记录
4. **性能优化**: 查看记录表可能增长较快,注意添加索引
5. **隐私保护**: 查看记录涉及用户行为,注意数据安全
## TODO
- [ ] 在小程序中实现用户登录功能
- [ ]`parsePageParams` 中添加获取用户ID的逻辑
- [ ] 添加查看记录的管理界面
- [ ] 添加数据统计报表
- [ ] 实现查看记录的导出功能