Files
zyt/DIAGNOSIS_VIEW_RECORD_FEATURE.md
T
2026-03-06 17:30:37 +08:00

6.2 KiB
Raw Blame History

诊单查看记录功能

功能概述

记录用户查看和确认诊单的行为,包括查看次数、查看时间、确认状态等信息。

数据库表结构

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
  • 后端更新确认状态

数据统计

可统计的数据

  1. 每个诊单的查看次数
  2. 每个用户查看了哪些诊单
  3. 诊单的确认率
  4. 分享效果(通过share_user_id统计)
  5. 首次查看到确认的时间间隔

查询示例

查询某个诊单的查看记录

$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;

注意事项

  1. 用户ID获取: 需要在小程序中实现用户登录,获取当前用户ID
  2. 匿名访问: 如果允许匿名访问,user_id可以为0
  3. 数据清理: 建议定期清理过期的查看记录
  4. 性能优化: 查看记录表可能增长较快,注意添加索引
  5. 隐私保护: 查看记录涉及用户行为,注意数据安全

TODO

  • 在小程序中实现用户登录功能
  • parsePageParams 中添加获取用户ID的逻辑
  • 添加查看记录的管理界面
  • 添加数据统计报表
  • 实现查看记录的导出功能