更新初级版本
This commit is contained in:
@@ -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的逻辑
|
||||
- [ ] 添加查看记录的管理界面
|
||||
- [ ] 添加数据统计报表
|
||||
- [ ] 实现查看记录的导出功能
|
||||
Reference in New Issue
Block a user