6.2 KiB
6.2 KiB
诊单查看记录功能
功能概述
记录用户查看和确认诊单的行为,包括查看次数、查看时间、确认状态等信息。
数据库表结构
la_diagnosis_view_records 表
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 - 获取诊单详情
GET /api/tcm/diagnosisDetail
参数:
- id: 诊单ID(必填)
- user_id: 查看用户ID(选填,默认0)
- share_user_id: 分享用户ID(选填,默认0)
功能:
1. 获取诊单详情
2. 自动记录查看行为
3. 如果是首次查看,创建新记录
4. 如果已有记录,更新查看次数和最后查看时间
confirmDiagnosis - 确认诊单
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
参数解析
const parsePageParams = (options) => {
// 解析scene参数(扫码进入)
// 解析普通参数(跳转进入)
// 获取当前登录用户ID
return params;
};
加载诊单详情
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
}
});
确认诊单
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 - 后端更新确认状态
数据统计
可统计的数据
- 每个诊单的查看次数
- 每个用户查看了哪些诊单
- 诊单的确认率
- 分享效果(通过share_user_id统计)
- 首次查看到确认的时间间隔
查询示例
查询某个诊单的查看记录
$records = DiagnosisViewRecord::where('diagnosis_id', $diagnosisId)
->with(['user', 'shareUser'])
->select();
查询某个用户的查看记录
$records = DiagnosisViewRecord::where('user_id', $userId)
->with(['diagnosis'])
->select();
统计诊单查看次数
$viewCount = DiagnosisViewRecord::where('diagnosis_id', $diagnosisId)
->sum('view_count');
统计确认率
$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;
注意事项
- 用户ID获取: 需要在小程序中实现用户登录,获取当前用户ID
- 匿名访问: 如果允许匿名访问,user_id可以为0
- 数据清理: 建议定期清理过期的查看记录
- 性能优化: 查看记录表可能增长较快,注意添加索引
- 隐私保护: 查看记录涉及用户行为,注意数据安全
TODO
- 在小程序中实现用户登录功能
- 在
parsePageParams中添加获取用户ID的逻辑 - 添加查看记录的管理界面
- 添加数据统计报表
- 实现查看记录的导出功能