| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157 |
- 参数说明:
- - id:机构ID(必传)
- - is_special:是否特殊机构(1=特殊机构,其他=普通机构)
- - exam_class:检查类型(普通机构时需要)
- 2. 服务层 (SuperService.php:58-75)
- public function getDoctorInfo($params, $doctor)
- {
- if(empty($params['id'])){
- return '';
- }
- if($params['is_special'] == 1){
- // 查询特殊机构的医生
- $info = $this->super->getSpecialDoctor($params['id']);
- } else {
- // 查询普通机构的医生
- $field = ['name'];
- $institution_name = $this->super->getInstitutionInfo($params['id'], $field);
- $info = $this->super->getDoctor($params['id'], $params['exam_class'], $doctor['institution_id']);
- // 给每个医生添加机构名称
- foreach($info as $k => $v){
- $info[$k]['institution_name'] = $institution_name['name'];
- }
- }
- return $info;
- }
- 3. 模型层查询逻辑
- 3.1 特殊机构医生查询 (InstitutionModel.php:32-44)
- public function getSpecialDoctor($id)
- {
- $info = ScontantModel::alias('sc')
- ->join('doctors d', 'sc.did = d.id')
- ->join('institution i', 'sc.hid = i.id')
- ->join('doctor_class dc', 'dc.doctor_id=d.id and find_in_set("7", dc.doctor_class)')
- ->where('sc.sid', $id)
- ->where('sc.status', 1)
- ->order('sc.sort asc')
- ->field('sc.id as scid, sc.sid, sc.did as id, sc.hid,
- convert(sc.cost/100, decimal(10,2)) as cost,
- sc.describe as introduce,
- i.name as institution_name,
- d.realname')
- ->select();
- return $info;
- }
- SQL 逻辑:
- - 主表:scontant(特殊机构联系人表)
- - 关联表:
- - doctors:医生表
- - institution:机构表
- - doctor_class:医生分类表(必须包含分类"7")
- - 查询条件:
- - sc.sid = $id(特殊机构ID)
- - sc.status = 1(状态有效)
- - 医生分类包含"7"
- - 排序:按 sc.sort 升序
- - 返回字段:医生ID、机构ID、费用、介绍、机构名称、医生姓名等
- 3.2 普通机构医生查询 (InstitutionModel.php:61-79)
- public function getDoctor($id, $class, $remote)
- {
- // 第一次查询:优先查询管理员医生
- $info = DoctorModel::alias('d')
- ->join('doctor_class dc', 'dc.doctor_id=d.id and find_in_set("7", dc.doctor_class)')
- ->join('remote_cost rc', "rc.super_doctor_id=d.id
- and rc.exam_class='".$class."'
- and super_hospital_id=d.institution_id
- and hospital_id='".$remote."'")
- ->where('d.institution_id', $id)
- ->where('d.is_admin', '1') // 优先查询管理员
- ->field('d.id, d.institution_id as hid, d.realname,
- convert(rc.money/100, decimal(10,2)) as cost,
- introduce, null as scid, null as sid')
- ->select();
- // 如果没有管理员,查询所有符合条件的医生
- if(empty(json_decode(json_encode($info), true))){
- $info = DoctorModel::alias('d')
- ->join('doctor_class dc', 'dc.doctor_id=d.id and find_in_set("7", dc.doctor_class)')
- ->join('remote_cost rc', "rc.super_doctor_id=d.id
- and rc.exam_class='".$class."'
- and super_hospital_id=d.institution_id
- and hospital_id='".$remote."'")
- ->where('d.institution_id', $id)
- ->field('d.id, d.institution_id as hid, realname, d.introduce,
- convert(rc.money/100, decimal(10,2)) as cost,
- null as scid, null as sid')
- ->select();
- }
- return $info;
- }
- SQL 逻辑:
- - 主表:doctors(医生表)
- - 关联表:
- - doctor_class:医生分类表(必须包含分类"7")
- - remote_cost:远程费用表
- - 查询条件:
- - d.institution_id = $id(机构ID)
- - 医生分类包含"7"
- - 费用配置匹配:检查类型、上级机构、远程机构
- - 第一次查询限制 is_admin = 1(管理员)
- - 返回字段:医生ID、机构ID、姓名、费用、介绍等
- 数据库表说明
- 涉及的表:
- 1. scontant:特殊机构联系人/医生配置表
- - sid:特殊机构ID
- - did:医生ID
- - hid:机构ID
- - cost:费用(分为单位)
- - describe:介绍
- - status:状态
- - sort:排序
- 2. doctors:医生表
- - id:医生ID
- - institution_id:所属机构ID
- - realname:真实姓名
- - is_admin:是否管理员
- - introduce:介绍
- 3. doctor_class:医生分类表
- - doctor_id:医生ID
- - doctor_class:分类(逗号分隔,"7"表示远程医生)
- 4. remote_cost:远程费用配置表
- - super_doctor_id:上级医生ID
- - exam_class:检查类型
- - super_hospital_id:上级机构ID
- - hospital_id:远程机构ID
- - money:费用(分为单位)
- 5. institution:机构表
- - id:机构ID
- - name:机构名称
- 功能总结
- 这个接口用于查询上级医生列表,根据不同场景返回不同的医生:
- 1. 特殊机构 (is_special=1):
- - 返回特殊机构配置的医生列表
- - 按排序字段排序
- - 包含费用、介绍、机构名称
- 2. 普通机构:
- - 首先查询管理员医生
- - 如果没有管理员,返回所有符合条件的医生
- - 根据检查类型和费用配置筛选
- - 返回医生姓名、费用、介绍等信息
|