InstitutionModel.php 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107
  1. <?php
  2. namespace app\api\model\institution;
  3. use app\api\model\doctor\DoctorModel;
  4. use app\api\model\rcontact\RcontactModel;
  5. use app\api\model\scontant\ScontantModel;
  6. use app\api\model\sremote\SremoteModel;
  7. use app\api\model\ZskkDefaultModel;
  8. use app\api\response\ServerResponse;
  9. use think\facade\Log;
  10. use app\api\model\patient\PatientModel;
  11. use app\api\model\ExamModel;
  12. class InstitutionModel extends ZskkDefaultModel {
  13. protected $table= 'institution';
  14. protected $logName = "InstitutionModel";
  15. protected $model = null;
  16. public function getInfo($id,$field)
  17. {
  18. $info = $this->where('id',$id)->field($field)->find();
  19. return $info;
  20. }
  21. public function getPayType($local,$super)
  22. {
  23. $type = RcontactModel::where('hospital_id',$local)->where('super_hospital_id',$super)->value('pay_type');
  24. return $type;
  25. }
  26. public function getSpecialDoctor($id)
  27. {
  28. $info = ScontantModel::alias('sc')
  29. ->join('doctors d', 'sc.did = d.id')
  30. ->join('institution i', 'sc.hid = i.id')
  31. ->join('doctor_class dc', 'dc.doctor_id=d.id and find_in_set("7", dc.doctor_class)')
  32. ->where('sc.sid',$id)
  33. ->where('sc.status',1)
  34. ->order('sc.sort asc')
  35. ->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')
  36. ->select();
  37. return $info;
  38. }
  39. public function getRemoteIns($id)
  40. {
  41. $info = RcontactModel::where('hospital_id',$id)->select();
  42. $data = array_column($info,'super_hospital_id');
  43. return $data;
  44. }
  45. public function getSpecialIns()
  46. {
  47. $info = SremoteModel::where('status',1)
  48. ->order('sort asc')
  49. ->field('id, name AS hospital_name,1 AS is_special')
  50. ->select();
  51. return $info;
  52. }
  53. public function getDoctor($id,$class,$remote)
  54. {
  55. // $info = DoctorModel::alias('d')
  56. // ->join('doctor_class dc','dc.doctor_id=d.id and find_in_set("7", dc.doctor_class)')
  57. // ->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."'")
  58. // ->where('d.institution_id',$id)
  59. // ->where('d.is_admin','1')
  60. // ->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')
  61. // ->select();
  62. // if(empty(json_decode(json_encode($info),true))){
  63. // $info = DoctorModel::alias('d')
  64. // ->join('doctor_class dc','dc.doctor_id=d.id and find_in_set("7", dc.doctor_class)')
  65. // ->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."'")
  66. // ->where('d.institution_id',$id)
  67. // ->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')
  68. // ->select();
  69. // }
  70. $info = DoctorModel::alias('d')
  71. // 达梦没有 FIND_IN_SET,改用 POSITION 或 LIKE,或提前创建自定义函数
  72. // 方案1:用 POSITION 替代(推荐,无需创建函数)
  73. ->join('doctor_class dc', "dc.doctor_id = d.id AND (',' || dc.doctor_class || ',') LIKE '%,7,%'", 'inner')
  74. ->join('remote_cost rc', "rc.super_doctor_id = d.id AND rc.exam_class = '" . $class . "' AND rc.super_hospital_id = d.institution_id AND rc.hospital_id = '" . $remote . "'", 'inner')
  75. ->where('d.institution_id', $id)
  76. ->where('d.is_admin', '1')
  77. // 达梦 CAST 语法:CAST(value AS DECIMAL(10,2))
  78. // 注意:达梦整数相除默认取整,需要把分母写成 100.0
  79. ->field("d.id, d.INSTITUTION_ID AS hid, d.realname, CAST(rc.money / 100.0 AS DECIMAL(10,2)) AS cost, introduce, null AS scid, null AS sid")
  80. ->select();
  81. if (empty(json_decode(json_encode($info), true))) {
  82. $info = DoctorModel::alias('d')
  83. ->join('doctor_class dc', "dc.doctor_id = d.id AND (',' || dc.doctor_class || ',') LIKE '%,7,%'", 'inner')
  84. ->join('remote_cost rc', "rc.super_doctor_id = d.id AND rc.exam_class = '" . $class . "' AND rc.super_hospital_id = d.institution_id AND rc.hospital_id = '" . $remote . "'", 'inner')
  85. ->where('d.institution_id', $id)
  86. // 达梦 CAST 语法,整数除法用 100.0
  87. ->field("d.id, d.INSTITUTION_ID AS hid, realname, d.introduce, CAST(rc.money / 100.0 AS DECIMAL(10,2)) AS cost, null AS scid, null AS sid")
  88. ->select();
  89. }
  90. return $info;
  91. }
  92. }