远程医生查询逻辑.txt 5.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157
  1. 参数说明:
  2. - id:机构ID(必传)
  3. - is_special:是否特殊机构(1=特殊机构,其他=普通机构)
  4. - exam_class:检查类型(普通机构时需要)
  5. 2. 服务层 (SuperService.php:58-75)
  6. public function getDoctorInfo($params, $doctor)
  7. {
  8. if(empty($params['id'])){
  9. return '';
  10. }
  11. if($params['is_special'] == 1){
  12. // 查询特殊机构的医生
  13. $info = $this->super->getSpecialDoctor($params['id']);
  14. } else {
  15. // 查询普通机构的医生
  16. $field = ['name'];
  17. $institution_name = $this->super->getInstitutionInfo($params['id'], $field);
  18. $info = $this->super->getDoctor($params['id'], $params['exam_class'], $doctor['institution_id']);
  19. // 给每个医生添加机构名称
  20. foreach($info as $k => $v){
  21. $info[$k]['institution_name'] = $institution_name['name'];
  22. }
  23. }
  24. return $info;
  25. }
  26. 3. 模型层查询逻辑
  27. 3.1 特殊机构医生查询 (InstitutionModel.php:32-44)
  28. public function getSpecialDoctor($id)
  29. {
  30. $info = ScontantModel::alias('sc')
  31. ->join('doctors d', 'sc.did = d.id')
  32. ->join('institution i', 'sc.hid = i.id')
  33. ->join('doctor_class dc', 'dc.doctor_id=d.id and find_in_set("7", dc.doctor_class)')
  34. ->where('sc.sid', $id)
  35. ->where('sc.status', 1)
  36. ->order('sc.sort asc')
  37. ->field('sc.id as scid, sc.sid, sc.did as id, sc.hid,
  38. convert(sc.cost/100, decimal(10,2)) as cost,
  39. sc.describe as introduce,
  40. i.name as institution_name,
  41. d.realname')
  42. ->select();
  43. return $info;
  44. }
  45. SQL 逻辑:
  46. - 主表:scontant(特殊机构联系人表)
  47. - 关联表:
  48. - doctors:医生表
  49. - institution:机构表
  50. - doctor_class:医生分类表(必须包含分类"7")
  51. - 查询条件:
  52. - sc.sid = $id(特殊机构ID)
  53. - sc.status = 1(状态有效)
  54. - 医生分类包含"7"
  55. - 排序:按 sc.sort 升序
  56. - 返回字段:医生ID、机构ID、费用、介绍、机构名称、医生姓名等
  57. 3.2 普通机构医生查询 (InstitutionModel.php:61-79)
  58. public function getDoctor($id, $class, $remote)
  59. {
  60. // 第一次查询:优先查询管理员医生
  61. $info = DoctorModel::alias('d')
  62. ->join('doctor_class dc', 'dc.doctor_id=d.id and find_in_set("7", dc.doctor_class)')
  63. ->join('remote_cost rc', "rc.super_doctor_id=d.id
  64. and rc.exam_class='".$class."'
  65. and super_hospital_id=d.institution_id
  66. and hospital_id='".$remote."'")
  67. ->where('d.institution_id', $id)
  68. ->where('d.is_admin', '1') // 优先查询管理员
  69. ->field('d.id, d.institution_id as hid, d.realname,
  70. convert(rc.money/100, decimal(10,2)) as cost,
  71. introduce, null as scid, null as sid')
  72. ->select();
  73. // 如果没有管理员,查询所有符合条件的医生
  74. if(empty(json_decode(json_encode($info), true))){
  75. $info = DoctorModel::alias('d')
  76. ->join('doctor_class dc', 'dc.doctor_id=d.id and find_in_set("7", dc.doctor_class)')
  77. ->join('remote_cost rc', "rc.super_doctor_id=d.id
  78. and rc.exam_class='".$class."'
  79. and super_hospital_id=d.institution_id
  80. and hospital_id='".$remote."'")
  81. ->where('d.institution_id', $id)
  82. ->field('d.id, d.institution_id as hid, realname, d.introduce,
  83. convert(rc.money/100, decimal(10,2)) as cost,
  84. null as scid, null as sid')
  85. ->select();
  86. }
  87. return $info;
  88. }
  89. SQL 逻辑:
  90. - 主表:doctors(医生表)
  91. - 关联表:
  92. - doctor_class:医生分类表(必须包含分类"7")
  93. - remote_cost:远程费用表
  94. - 查询条件:
  95. - d.institution_id = $id(机构ID)
  96. - 医生分类包含"7"
  97. - 费用配置匹配:检查类型、上级机构、远程机构
  98. - 第一次查询限制 is_admin = 1(管理员)
  99. - 返回字段:医生ID、机构ID、姓名、费用、介绍等
  100. 数据库表说明
  101. 涉及的表:
  102. 1. scontant:特殊机构联系人/医生配置表
  103. - sid:特殊机构ID
  104. - did:医生ID
  105. - hid:机构ID
  106. - cost:费用(分为单位)
  107. - describe:介绍
  108. - status:状态
  109. - sort:排序
  110. 2. doctors:医生表
  111. - id:医生ID
  112. - institution_id:所属机构ID
  113. - realname:真实姓名
  114. - is_admin:是否管理员
  115. - introduce:介绍
  116. 3. doctor_class:医生分类表
  117. - doctor_id:医生ID
  118. - doctor_class:分类(逗号分隔,"7"表示远程医生)
  119. 4. remote_cost:远程费用配置表
  120. - super_doctor_id:上级医生ID
  121. - exam_class:检查类型
  122. - super_hospital_id:上级机构ID
  123. - hospital_id:远程机构ID
  124. - money:费用(分为单位)
  125. 5. institution:机构表
  126. - id:机构ID
  127. - name:机构名称
  128. 功能总结
  129. 这个接口用于查询上级医生列表,根据不同场景返回不同的医生:
  130. 1. 特殊机构 (is_special=1):
  131. - 返回特殊机构配置的医生列表
  132. - 按排序字段排序
  133. - 包含费用、介绍、机构名称
  134. 2. 普通机构:
  135. - 首先查询管理员医生
  136. - 如果没有管理员,返回所有符合条件的医生
  137. - 根据检查类型和费用配置筛选
  138. - 返回医生姓名、费用、介绍等信息