医生表单字段说明.md 15 KB

医生表单字段说明文档

文档信息

  • 文档名称:医生管理-新增医生表单字段说明
  • 数据库表名fa_doctors
  • 对应功能:医生管理 - 医生信息 - 新增医生
  • 源码路径/application/admin/controller/doctor/Doctor.php
  • 表单视图/application/admin/view/doctor/doctor/add.html
  • 生成日期:2025-12-05

字段对照表

序号 表单显示名称 数据库字段名 字段类型 是否必填 取值说明
1 用户名 username 文本 登录用户名,需符合username规则
2 密码 password 密码 登录密码,需符合password规则
3 医生姓名 realname 文本 医生真实姓名
4 医疗机构 institution_id 下拉选择 所属医疗机构ID
5 科室 department_id 下拉选择 科室级必填 所属科室ID(医生等级为科室级时必填)
6 医生等级 doctor_grade 单选 1=管理级(查看所有)
2=科室级(查看医生科室下数据)
3=医生级(查看该医生数据)
7 职称 doctor_title 文本 医生职称
8 医生角色 doctor_role 树形多选 从doctor_menu表选择,逗号分隔存储ID
9 报告权限 is_report 单选 1=启用, 0=禁用
10 状态 status 单选 1=正常, 0=禁用
11 医生分类 doctor_class 多选下拉 1=临床医生
2=报告医生
3=审核医生
4=确认医生
5=登记医生
6=远程申请医生
7=远程报告医生
8=远程审核医生
9=报告修改医生
10=影像检查删除医生
(逗号分隔)
12 检查权限 exam_class 多选下拉 CR, CT, DX, ES, MR, XA, ECG, MG, PT, RF, PETCT, US
(逗号分隔,*表示全部)
13 是否为管理员 is_admin 单选 0=否, 1=是
14 登陆安全验证 is_send_message 单选 0=否, 1=是
15 短信消息推送 send_sms 单选 0=否, 1=是
16 检查分配权重 weight 数字 用于自动分配检查时的权重值
17 联系电话 phone 文本 医生联系电话
18 特殊机构 special_institution 下拉多选 医生可访问的特殊机构ID(逗号分隔)

重要字段详细说明

1. 用户名 (username)

  • 字段名username
  • 数据类型:VARCHAR
  • 验证规则required;username
  • 说明:用于登录的用户名,必须符合username规则
  • 唯一性:在同一机构内需保证唯一
  • 代码位置:add.html:3-7

2. 密码 (password)

  • 字段名password
  • 数据类型:VARCHAR
  • 验证规则required;password
  • 说明:登录密码,需符合密码安全规则
  • 存储方式:加密存储(通常使用MD5或bcrypt)
  • 代码位置:add.html:8-13

3. 医生等级 (doctor_grade)

  • 字段名doctor_grade
  • 数据类型:INT
  • 取值
    • 1:管理级(查看所有数据)
    • 2:科室级(查看医生科室下数据,必须选择科室)
    • 3:医生级(查看该医生数据)
  • 业务规则:当选择"科室级"时,department_id字段变为必填
  • 代码位置:add.html:32-37, Doctor.php:131-138

4. 医生角色 (doctor_role)

  • 字段名doctor_role
  • 数据类型:VARCHAR(逗号分隔的ID)
  • 显示方式:树形多选(jstree插件)
  • 数据来源doctor_menu 表(医生权限菜单表)
  • 存储格式:逗号分隔的菜单ID,如 "1,2,3,5,8"
  • 联动功能:支持bind_ids联动选择
  • API接口/admin/doctor/doctor/doctorRoleTree
  • 说明
    • 树形结构展示所有可选权限
    • 支持全选和展开全部
    • 父节点选中时子节点自动选中
    • 某些权限有bind_ids(绑定权限),选中时会联动选中绑定的权限
  • 代码位置:add.html:44-52, Doctor.php:314-358

5. 报告权限 (is_report)

  • 字段名is_report
  • 数据类型:INT
  • 取值
    • 1:启用(有报告权限)
    • 0:禁用(无报告权限)
  • 说明:控制医生是否有出具报告的权限
  • 代码位置:add.html:54-58

6. 医生分类 (doctor_class)

  • 字段名doctor_class
  • 数据类型:VARCHAR(逗号分隔)
  • 显示方式:多选下拉(selectpicker)
  • 可选值
    • 1:临床医生
    • 2:报告医生
    • 3:审核医生
    • 4:确认医生
    • 5:登记医生
    • 6:远程申请医生
    • 7:远程报告医生
    • 8:远程审核医生
    • 9:报告修改医生
    • 10:影像检查删除医生
  • 存储方式:逗号分隔存储,如 "2,3,7"
  • 关联表doctor_department_class 表存储医生-科室-分类的关联关系
  • 说明:医生可以同时拥有多个分类,不同分类对应不同的业务权限
  • 代码位置:add.html:66-70, Doctor.php:46

7. 检查权限 (exam_class)

  • 字段名exam_class
  • 数据类型:VARCHAR(逗号分隔)
  • 显示方式:多选下拉(selectpicker)
  • 可选值
    • CR:CR(计算机X射线摄影)
    • CT:CT(计算机断层扫描)
    • DX:DX(数字X射线摄影)
    • ES:ES(内窥镜)
    • MR:MR(磁共振)
    • XA:XA(血管造影)
    • ECG:ECG(心电图)
    • MG:MG(乳腺摄影)
    • PT:PT(正电子发射断层扫描)
    • RF:RF(射频透视)
    • PETCT:PETCT(正电子发射计算机断层扫描)
    • US:US(超声)
  • 存储方式
    • 逗号分隔存储,如 "CT,MR,US"
    • * 表示拥有所有检查类型的权限
  • 默认值:全选(所有检查类型)
  • 说明:控制医生可以查看和处理的检查类型
  • 代码位置:add.html:72-76, Doctor.php:45

8. 检查分配权重 (weight)

  • 字段名weight
  • 数据类型:INT
  • 说明:用于检查自动分配功能,权重越高,分配到的检查越多
  • 应用场景:当机构开启"检查自动分配"功能时使用
  • 代码位置:add.html:102-106

9. 特殊机构 (special_institution)

  • 字段名special_institution(表单输入字段)
  • 关联表special_contact(实际存储表)
  • 存储方式
    • 表单提交:逗号分隔的机构ID
    • 数据库存储:在 special_contact 表中建立多条关联记录
    • 字段:did(医生ID), sid(特殊机构ID), status(状态)
  • 说明
    • 医生可访问的特殊机构列表
    • 除了所属机构外,医生还可以访问这些特殊机构的数据
  • 代码位置:add.html:114-118, Doctor.php:255-258

数据处理流程

新增医生时的数据处理

  1. 参数接收

    $params = $this->request->post("row/a");
    
    1. 业务验证
    2. 检查医生等级:如果是科室级(doctor_grade=2),必须选择科室
    3. 代码位置:Doctor.php:131-138

    4. 调用Service层处理

      $res = $this->service->addDoctor($params);
      
  2. Service层处理(DoctorService::addDoctor)

    • 格式化参数(formatSaveParams)
    • 检查用户名唯一性
    • 加密密码
    • 插入医生主表(doctors)
    • 插入医生分类关联表(doctor_department_class)
    • 插入特殊机构关联表(special_contact)
    • 返回处理结果
  3. 事务处理

    • 所有操作在事务中执行
    • 任何步骤失败都会回滚
    • 代码位置:Doctor.php:130-145

编辑医生时的数据处理

  1. 额外处理

    • 更新医生分类:updateDoctorClass()
    • 更新特殊机构:updateSpecialInstitution()
    • 代码位置:Doctor.php:218-227
  2. exam_class 特殊处理

    • 读取时:* 转换为所有检查类型的列表
    • 保存时:全选转换为 *
    • 代码位置:Doctor.php:253

关联数据表

主表

  • fa_doctors:医生主表

关联表

表名 关联字段 说明
fa_institution institution_id 医疗机构表
fa_department department_id 科室表
doctor_menu doctor_role 医生权限菜单表(树形结构)
doctor_department_class doctor_id, department_id, doctor_class 医生-科室-分类关联表
special_contact did(医生ID), sid(机构ID) 医生-特殊机构关联表
device device_ids 设备表(已注释,暂不使用)

业务规则

1. 用户名唯一性

  • 在同一机构内,用户名必须唯一
  • 新增时检查用户名是否已存在

2. 医生等级与科室的关联

  • 管理级(1):可查看所有数据,科室可选
  • 科室级(2):只能查看所属科室数据,必须选择科室
  • 医生级(3):只能查看自己的数据,科室可选
  • 验证代码:Doctor.php:131-138, 205-211

3. 医生分类的存储

  • 表单提交:数组形式 ['2','3','7']
  • 数据库存储:
    • doctors 表不直接存储
    • doctor_department_class 表存储每个分类的关联记录
    • 每个分类一条记录:(doctor_id, department_id, doctor_class)

4. 检查权限的特殊标记

  • 全选所有检查类型时,存储为 *
  • 读取时 * 展开为所有类型
  • 节省存储空间

5. 密码处理

  • 新增时:必填,加密后存储
  • 编辑时:不填表示不修改密码
  • 加密方式:通常使用MD5或bcrypt

6. 状态字段特殊处理

  • 数据库中 NULL 表示禁用(0)
  • 页面显示时转换:is_null($status) ? '0' : $status
  • 代码位置:Doctor.php:214, 252

7. 医生角色的联动选择

  • 某些权限有 bind_ids 字段
  • 选中某权限时,自动选中其绑定的权限
  • 树形结构支持父子联动

API接口说明

1. 医生角色树形列表

  • 接口/admin/doctor/doctor/doctorRoleTree
  • 方法:GET/POST
  • 参数
    • id:医生ID(编辑时传入,用于回显已选权限)
  • 返回:jstree格式的树形数据

    [
    {
      "id": "1",
      "parent": "#",
      "text": "权限名称",
      "type": "menu",
      "state": {"selected": false},
      "bind": ["2", "3"]
    }
    ]
    
    • 代码位置:Doctor.php:314-358

    2. 批量导入医生

    • 接口/admin/doctor/doctor/import
    • 方法:POST
    • 参数
    • file:Excel文件路径
    • 说明:批量导入医生账号信息
    • 代码位置:Doctor.php:366-404

    配置项说明

    1. 检查类型配置

    • 定义位置:Doctor.php:45
    • 配置项php protected $exam_class = [ 'CR' => 'CR', 'CT' => 'CT', 'DX' => 'DX', 'ES' => 'ES', 'MR' => 'MR', 'XA' => 'XA', 'ECG' => 'ECG', 'MG' => 'MG', 'PT' => 'PT', 'RF' => 'RF', 'PETCT' => 'PETCT', 'US' => 'US' ];

2. 医生分类配置

  • 定义位置:Doctor.php:46
  • 配置项

    protected $doctor_class = [
    1 => '临床医生', 2 => '报告医生',
    3 => '审核医生', 4 => '确认医生',
    5 => '登记医生', 6 => '远程申请医生',
    7 => '远程报告医生', 8 => '远程审核医生',
    9 => '报告修改医生', 10 => '影像检查删除医生'
    ];
    

    3. 医生角色配置(已废弃,改用doctor_role字段)

    • 定义位置:Doctor.php:47
    • 配置项php protected $doctor_role = [ 1 => '技师', 2 => '本地医生', 3 => '远程医生' ];
  • 说明:此配置项保留,但实际使用的是从 doctor_menu 表动态读取的权限树


数据验证规则

表单验证

  • 用户名required;username
  • 密码required;password
  • 真实姓名required
  • 医疗机构required
  • 医生角色required
  • 报告权限required
  • 状态required
  • 医生分类required(多选至少选一个)
  • 检查权限required(多选至少选一个)

业务验证

  • 医生等级为科室级时,科室必填
  • 用户名在同机构内唯一
  • 医生分类至少选择一个

注意事项

  1. 必填字段:username, password, realname, institution_id, doctor_role, is_report, status, doctor_class, exam_class 必须填写

  2. 条件必填:当 doctor_grade = 2(科室级)时,department_id 必须填写

  3. 字段格式

    • 逗号分隔字段:去除空值,trim处理
    • 密码字段:加密存储,不可逆
  4. 特殊处理

    • exam_class = * 表示所有检查类型
    • status = NULL 等同于 0(禁用)
    • doctor_class 存储在关联表中,不在主表
  5. 权限控制

    • 医生角色(doctor_role)控制功能权限
    • 医生等级(doctor_grade)控制数据权限
    • 检查权限(exam_class)控制检查类型权限
    • 医生分类(doctor_class)控制业务流程权限
  6. 事务处理

    • 所有增删改操作都在事务中执行
    • 涉及多表操作,确保数据一致性
    • 失败时自动回滚
  7. 关联数据处理

    • 医生分类:插入/更新 doctor_department_class
    • 特殊机构:插入/更新 special_contact
    • 删除医生时需同步删除关联数据
  8. 下拉选择数据来源

    • 医疗机构:从当前用户可访问的机构列表中选择
    • 科室:根据选择的机构动态加载
    • 特殊机构:从机构表中选择
    • 医生角色:从 doctor_menu 表读取树形权限

相关Service方法

DoctorService 主要方法

  1. addDoctor($params)

    • 功能:新增医生
    • 处理:格式化参数、验证唯一性、插入主表和关联表
  2. formatSaveParams($params)

    • 功能:格式化保存参数
    • 处理:处理数组字段、特殊字符、默认值
  3. getDoctorClass($doctorId)

    • 功能:获取医生的分类列表
    • 返回:数组形式的分类ID列表
  4. updateDoctorClass($doctorId, $departmentId, $doctorClass)

    • 功能:更新医生分类关联
    • 处理:删除旧记录,插入新记录
  5. updateSpecialInstitution($doctorId, $params)

    • 功能:更新特殊机构关联
    • 处理:删除旧记录,插入新记录
  6. formatImportData($excelData)

    • 功能:格式化Excel导入数据
    • 处理:数据转换、验证

更新记录

日期 版本 说明 修改人
2025-12-05 v1.0 初始版本,整理医生表单所有字段说明 -

相关文档

  • 数据库设计文档
  • 权限管理说明
  • API接口文档
  • 医生角色权限说明