Tvdoctor.php 5.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193
  1. <?php
  2. namespace app\api\controller\tvuser;
  3. use app\common\controller\Api;
  4. use think\Db;
  5. /**
  6. * 医生接口,使用自动注册的用户
  7. */
  8. class Tvdoctor extends Api
  9. {
  10. protected $noNeedLogin = ['*'];
  11. protected $noNeedRight = ['*'];
  12. //科室列表
  13. public function keshi_list(){
  14. //所有医生,所在的科室
  15. $where = [
  16. 'd.status' => 1,
  17. 'd.doctor_status' => 1,
  18. 'info.video_switch' => 1,
  19. 'info.video_model' => 2,//只要即时的
  20. ];
  21. $keshi_ids = Db::name('doctor')->alias('d')
  22. ->join('doctor_info info','d.id = info.doctor_id','LEFT')
  23. ->where($where)->column('keshi_id');
  24. //所有科室,没医生的科室就不要了
  25. $list = Db::name('keshi')->where('is_show',1)->where('id','IN',$keshi_ids)->order('weigh','desc')->select();
  26. $this->success(1,$list);
  27. }
  28. //医生列表
  29. //首页推荐,搜索
  30. public function doctor_list(){
  31. $where = [
  32. 'd.status' => 1,
  33. 'd.doctor_status' => 1,
  34. 'info.video_switch' => 1,
  35. 'info.video_model' => 2,//只要即时的
  36. ];
  37. //科室id
  38. $keshi_id = input('keshi_id',0);
  39. if($keshi_id){
  40. $where['d.keshi_id'] = $keshi_id;
  41. }
  42. //关注
  43. $folllow = input('follow',0);
  44. if($folllow){
  45. $my_follow_ids = controller('Userfollow')->my_follow_uids();
  46. $where['d.id'] = ['IN',$my_follow_ids];
  47. }
  48. $field = [
  49. 'd.id','d.nickname','d.avatar','d.keshi_id','d.level_id','d.hospital','d.goodat','d.job_status','d.is_online',
  50. 'keshi.name as keshi_name',
  51. 'level.name as level_name',
  52. 'info.video_model',
  53. ];
  54. $list = Db::name('doctor')->alias('d')
  55. ->field($field)
  56. ->join('doctor_level level','d.level_id = level.id','LEFT')
  57. ->join('keshi','d.keshi_id = keshi.id','LEFT')
  58. ->join('doctor_info info','d.id = info.doctor_id','LEFT')
  59. ->where($where)->order('d.ordernum desc')->autopage()->select();
  60. $list = list_domain_image($list,['avatar']);
  61. if(!empty($list)){
  62. foreach($list as $key => &$val){
  63. if($val['is_online'] != 1){
  64. $val['job_status'] = 0;
  65. }
  66. }
  67. }
  68. $this->success(1,$list);
  69. }
  70. //医生详情
  71. public function doctor_info(){
  72. $id = input('id',0);
  73. $field = [
  74. 'd.id','d.nickname','d.avatar','d.keshi_id','d.level_id','d.hospital','d.goodat','d.info','d.job_status','d.is_online',
  75. 'info.video_model',
  76. 'keshi.name as keshi_name',
  77. 'level.name as level_name',
  78. ];
  79. $info = Db::name('doctor')->alias('d')
  80. ->field($field)
  81. ->join('doctor_level level','d.level_id = level.id','LEFT')
  82. ->join('keshi','d.keshi_id = keshi.id','LEFT')
  83. ->join('doctor_info info','d.id = info.doctor_id','LEFT')
  84. ->where('d.id',$id)->find();
  85. $info = info_domain_image($info,['avatar']);
  86. if($info['is_online'] != 1){
  87. $info['job_status'] = 0;
  88. }
  89. //是否关注
  90. $info['is_follow'] = $this->is_follow($this->auth->id,$id);
  91. //视频说明
  92. $info['tv_wenzhen_video_serverrule'] = config('site.tv_wenzhen_video_serverrule');
  93. $this->success(1,$info);
  94. }
  95. //医生排班
  96. public function doctor_paiban(){
  97. $doctor_id = input('doctor_id',0);
  98. if(!$doctor_id){
  99. $this->error();
  100. }
  101. //正式用数据
  102. $list = Db::name('doctor_paiban')->where('doctor_id',$doctor_id)->where('active',1)->where('activetime','gt',time()+7200)->order('activetime asc')->select();
  103. //测试用数据
  104. // $list = Db::name('doctor_paiban')->where('doctor_id',$doctor_id)->where('active',1)->where('activetime','gt',time())->order('activetime asc')->select();
  105. $newlist = [];
  106. if(!empty($list)){
  107. //预约到此刻后面的订单
  108. $need_unset = [];
  109. $map = [
  110. 'doctor_id' => $doctor_id,
  111. 'ordertype' => 2,
  112. 'status' => ['IN','10,20,25,30'],//有效订单
  113. 'book_time'=> ['gt',time()],
  114. 'video_model' => 1, //预约模式
  115. ];
  116. $order_booked = Db::name('wenzhen_order')->where($map)->group('book_time')->column('book_time,count(id) as count_number');
  117. if(!empty($order_booked)){
  118. foreach($order_booked as $bk => $bv){
  119. if($bv >= 4){
  120. $need_unset[] = $bk;
  121. }
  122. }
  123. }
  124. //重组时间数据
  125. foreach($list as $key => $val){
  126. //排除接满4单的
  127. if(in_array($val['activetime'],$need_unset)){
  128. continue;
  129. }
  130. $newlist[] = date('Y-m-d H:i',$val['activetime']);
  131. }
  132. }
  133. $this->success(1,$newlist);
  134. }
  135. //关注某人,取关
  136. public function follow_one(){
  137. $follow_uid = input('doctor_id',0);
  138. if(!$follow_uid){
  139. $this->error(__('Invalid parameters'));
  140. }
  141. $checkuser = Db::name('doctor')->find($follow_uid);
  142. if(empty($checkuser)){
  143. $this->error('此医生不存在');
  144. }
  145. $map = [
  146. 'uid' => $this->auth->id,
  147. 'follow_uid' => $follow_uid,
  148. ];
  149. $check = Db::name('user_follow')->where($map)->find();
  150. if($check){
  151. //取关
  152. $rs = Db::name('user_follow')->where($map)->delete();
  153. $this->success('操作成功');
  154. }
  155. $id = Db::name('user_follow')->insertGetId($map);
  156. $this->success('操作成功',$id);
  157. }
  158. }