ScheDuleController.php 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351
  1. <?php
  2. namespace App\Http\Controllers;
  3. use App\Models\CommunitySchedule;
  4. use App\Models\Docter;
  5. use App\Models\DocterOrganization;
  6. use App\Models\Order;
  7. use App\Models\Organization;
  8. use App\Models\Schedule;
  9. use App\Models\SchedulePeriod;
  10. use App\Models\SystemConfig;
  11. use App\Models\TimePeriod;
  12. use Carbon\Carbon;
  13. use Encore\Admin\Admin;
  14. use Illuminate\Support\Facades\DB;
  15. use Illuminate\Support\Facades\Log;
  16. use mysql_xdevapi\Exception;
  17. use phpDocumentor\Reflection\DocBlock\Description;
  18. class ScheDuleController extends Controller
  19. {
  20. public function getComSchedule()
  21. {
  22. $set_time = request('Schedulingtime');//时间
  23. $org_id = request('mechanism');//机构
  24. $docter_id = request('docter_id');//医生
  25. $set_time = '2020-11-30至2020-12-06';
  26. $org_id = 1;
  27. $docter_id = 47;
  28. $role = 1;
  29. if(empty($set_time) || empty($org_id) || empty($docter_id)){
  30. return json_encode(['status'=>601,'msg'=>'缺少必要参数','data'=>'']);
  31. } else{
  32. echo 'what happend';
  33. }
  34. $all_time = explode('至',$set_time);
  35. if(count($all_time) <2){
  36. return json_encode(['status'=>601,'msg'=>'缺少必要参数','data'=>'']);
  37. }
  38. $start_time = intval(str_replace('-','',$all_time[0]));
  39. $end_time = intval(str_replace('-','',$all_time[1]));
  40. // DB::enableQueryLog();
  41. $sche_dule = Schedule::whereBetween('schedule_day',[$start_time,$end_time])
  42. ->where(['docter_id'=>$docter_id])
  43. ->pluck('id')
  44. ->toArray();
  45. // echo '<pre>';
  46. // print_r(DB::getQueryLog());
  47. // echo '</pre>';
  48. //dd($sche_dule);
  49. $sche_dule_arr = [
  50. [
  51. 'date'=>"上午",
  52. 'mondy'=>true,
  53. 'tuesday'=>true,
  54. 'wednesday'=>true,
  55. 'thursday'=>true,
  56. 'friday'=>true,
  57. 'saturday'=>true,
  58. 'sunday'=>true,
  59. ],
  60. [
  61. 'date'=>"下午",
  62. 'mondy'=>true,
  63. 'tuesday'=>true,
  64. 'wednesday'=>true,
  65. 'thursday'=>true,
  66. 'friday'=>true,
  67. 'saturday'=>true,
  68. 'sunday'=>true,
  69. ],
  70. [
  71. 'date'=>"晚上",
  72. 'mondy'=>true,
  73. 'tuesday'=>true,
  74. 'wednesday'=>true,
  75. 'thursday'=>true,
  76. 'friday'=>true,
  77. 'saturday'=>true,
  78. 'sunday'=>true,
  79. ]
  80. ];
  81. //周字段映射
  82. $week_arr = ['mondy','tuesday','wednesday','thursday','friday','saturday','sunday'];
  83. //时段区间id
  84. $schedule_config = SystemConfig::get('docter_config');
  85. $mo = TimePeriod::where('start_time_period','>=',$schedule_config['morning_start'])->where('end_time_period','<=',$schedule_config['morning_end'])->pluck('id')->toArray();
  86. $af = TimePeriod::where('start_time_period','>=',$schedule_config['afternoon_start'])->where('end_time_period','<=',$schedule_config['afternoon_end'])->pluck('id')->toArray();
  87. $ev = TimePeriod::where('start_time_period','>=',$schedule_config['evening_start'])->where('end_time_period','<=',$schedule_config['evening_end'])->pluck('id')->toArray();
  88. if(empty($sche_dule)){
  89. return ['status'=>200,'msg'=>'ok','data'=>['schedule'=>$sche_dule_arr,'org_id'=>$org_id,'docter_id'=>$docter_id]];
  90. }
  91. $role = 2;
  92. if($role == 1){
  93. $ids = DocterOrganization::where(['organization_id'=>$org_id])->pluck('docter_id');
  94. $list = Docter::whereIn('id',$ids)->get(['id','name'])->toArray();
  95. $user_id = $org_id;
  96. for ($i = $start_time; $i<=$end_time; $i++){
  97. $j = 0;
  98. $strtime = "$i";
  99. $str_time = substr($strtime,0,4).'-'.substr($strtime,4,2).'-'.substr($strtime,6,2);
  100. //检测上午
  101. $is_mo_have = SchedulePeriod::whereIn('schedule_id',$sche_dule)->where('schedule_date',$str_time)->whereIn('time_period_id',$mo)
  102. ->where('organization_id','!=',$org_id)->count();
  103. if($is_mo_have){
  104. $sche_dule_arr[0][$week_arr[$j]] = 'other';
  105. }
  106. //检测下午
  107. $is_af_have = SchedulePeriod::whereIn('schedule_id',$sche_dule)->where('schedule_date',$str_time)->whereIn('time_period_id',$af)
  108. ->where('organization_id','!=',$org_id)->count();
  109. if($is_af_have){
  110. $sche_dule_arr[1][$week_arr[$j]] = 'other';
  111. }
  112. //检测晚上
  113. $is_ev_have = SchedulePeriod::whereIn('schedule_id',$sche_dule)->where('schedule_date',$str_time)->whereIn('time_period_id',$ev)
  114. ->where('organization_id','!=',$org_id)->count();
  115. if($is_ev_have){
  116. $sche_dule_arr[2][$week_arr[$j]] = 'other';
  117. }
  118. }
  119. } else {
  120. $ids = DocterOrganization::where(['docter_id'=>$docter_id])->pluck('organization_id');
  121. $list = Organization::whereIn('id',$ids)->get(['id','name'])->toArray();
  122. $user_id = $docter_id;
  123. for ($i = $start_time; $i<=$end_time; $i++){
  124. $j = 0;
  125. $strtime = "$i";
  126. $str_time = substr($strtime,0,4).'-'.substr($strtime,4,2).'-'.substr($strtime,6,2);
  127. //检测上午
  128. $is_mo_have = SchedulePeriod::whereIn('schedule_id',$sche_dule)->where('schedule_date',$str_time)->whereIn('time_period_id',$mo)
  129. ->where('organization_id','!=',$org_id)->where('docter_id','!=',$docter_id)->count();
  130. if($is_mo_have){
  131. $sche_dule_arr[0][$week_arr[$j]] = 'other';
  132. }
  133. //检测下午
  134. $is_af_have = SchedulePeriod::whereIn('schedule_id',$sche_dule)->where('schedule_date',$str_time)->whereIn('time_period_id',$af)
  135. ->where('organization_id','!=',$org_id)->where('docter_id','!=',$docter_id)->count();
  136. if($is_af_have){
  137. $sche_dule_arr[1][$week_arr[$j]] = 'other';
  138. }
  139. //检测晚上
  140. $is_ev_have = SchedulePeriod::whereIn('schedule_id',$sche_dule)->where('schedule_date',$str_time)->whereIn('time_period_id',$ev)
  141. ->where('organization_id','!=',$org_id)->where('docter_id','!=',$docter_id)->count();
  142. if($is_ev_have){
  143. $sche_dule_arr[2][$week_arr[$j]] = 'other';
  144. }
  145. }
  146. }
  147. // "morning_start" => "09:00"
  148. // "morning_end" => "12:00"
  149. // "afternoon_start" => "13:00"
  150. // "afternoon_end" => "18:00"
  151. // "evening_start" => "19:00"
  152. // "evening_end" => "20:00"
  153. $data['docter'] = $sche_dule_arr;
  154. $data['list'] = array_column($list,'name','id');
  155. $data['role'] = $role;
  156. $data['user_id'] = $user_id;
  157. return (json_encode(['code'=>200,'msg'=>'ok','data'=>$data]));
  158. }
  159. public function setDocChedule()
  160. {
  161. $docter_id = request('docter_id');
  162. $org_id = request('org_id');
  163. $role = request('role');
  164. $set_time = request('schdule_date');
  165. $shcdule_id = request('schdule_id');
  166. $set_time = '2020-11-30至2020-12-06';
  167. $all_time = explode('至',$set_time);
  168. if(count($all_time) <2) {
  169. return json_encode(['status'=>601,'msg'=>'缺少必要参数','data'=>'']);
  170. }
  171. $start_time = intval(str_replace('-','',$all_time[0]));
  172. $end_time = intval(str_replace('-','',$all_time[1]));
  173. //周字段映射
  174. $week_arr = ['mondy','tuesday','wednesday','thursday','friday','saturday','sunday'];
  175. $data = [
  176. [
  177. 'date'=>"上午",
  178. 'mondy'=>true,
  179. 'tuesday'=>true,
  180. 'wednesday'=>true,
  181. 'thursday'=>true,
  182. 'friday'=>true,
  183. 'saturday'=>true,
  184. 'sunday'=>true,
  185. ],
  186. [
  187. 'date'=>"下午",
  188. 'mondy'=>true,
  189. 'tuesday'=>true,
  190. 'wednesday'=>true,
  191. 'thursday'=>true,
  192. 'friday'=>true,
  193. 'saturday'=>true,
  194. 'sunday'=>true,
  195. ],
  196. [
  197. 'date'=>"晚上",
  198. 'mondy'=>true,
  199. 'tuesday'=>true,
  200. 'wednesday'=>true,
  201. 'thursday'=>true,
  202. 'friday'=>true,
  203. 'saturday'=>true,
  204. 'sunday'=>true,
  205. ]
  206. ];
  207. //时段区间id
  208. $schedule_config = SystemConfig::get('docter_config');
  209. $mo = TimePeriod::where('start_time_period','>=',$schedule_config['morning_start'])
  210. ->where('end_time_period','<=',$schedule_config['morning_end'])
  211. ->pluck('id')->toArray();
  212. $af = TimePeriod::where('start_time_period','>=',$schedule_config['afternoon_start'])
  213. ->where('end_time_period','<=',$schedule_config['afternoon_end'])
  214. ->pluck('id')->toArray();
  215. $ev = TimePeriod::where('start_time_period','>=',$schedule_config['evening_start'])
  216. ->where('end_time_period','<=',$schedule_config['evening_end'])
  217. ->pluck('id')->toArray();
  218. $mo_schedule = array_values($data[0]);
  219. $af_schedule = array_values($data[1]);
  220. $ev_schedule = array_values($data[2]);
  221. $org_id = 1;
  222. $docter_id = 47;
  223. DB::beginTransaction();
  224. try {
  225. if(!$shcdule_id){
  226. $schedule_insert = [
  227. 'organization_id'=>$org_id,
  228. 'docter_id'=>$docter_id,
  229. 'schedule_date'=>$all_time[0],
  230. 'schedule_day'=>$start_time,
  231. 'created_at'=>Carbon::now(),
  232. 'updated_at'=>Carbon::now(),
  233. ];
  234. $shcdule_id = Schedule::insertGetId($schedule_insert);
  235. }
  236. unset($schedule_insert['schedule_day']);
  237. $schedule_insert['schedule_id'] =$shcdule_id;
  238. for ($i = 0 ;$i<=2;$i++){
  239. $mo_schedule = array_values($data[$i]);
  240. foreach ($mo_schedule as $key=>$val){
  241. if($key==0) continue;
  242. $schedule_date = $start_time + $key;
  243. $strtime = "$schedule_date";
  244. $first_day = strtotime('this week');
  245. $time_insert = $schedule_insert;
  246. $time_insert['type'] = $i;
  247. $real_time = date('Y-m-d',($first_day + ($key-1)*86400));
  248. $time_insert['schedule_date'] = $real_time;
  249. $time_insert['me_sure'] = 1;
  250. foreach ($mo as $time_id){
  251. $is_have = SchedulePeriod::where(['time_period_id'=>$time_id,'type'=>1,'docter_id'=>$docter_id,'schedule_date'=>$real_time]);
  252. if(!$is_have){
  253. $time_insert['time_period_id'] = $time_id;
  254. $info[] = $time_insert;
  255. SchedulePeriod::insert($time_insert);
  256. }
  257. }
  258. if($val){
  259. $data['schedule_date'] = $start_time ;
  260. }
  261. }
  262. }
  263. DB::commit();
  264. } catch (Exception $e){
  265. DB::rollBack();
  266. Log::info($e->getMessage());
  267. }
  268. return json_encode(['status'=>200,'msg'=>'插入成功','data'=>count($info)]);
  269. }
  270. public function getScheduleInfo ()
  271. {
  272. $docter_id = request('docter_id');
  273. $org_id = request('org_id');
  274. $docter_id = 47;
  275. $org_id = 1;
  276. $role = 1;
  277. if($role == 1){
  278. $ids = DocterOrganization::where(['docter_id'=>$docter_id])->pluck('organization_id');
  279. $list = Organization::whereIn('id',$ids)->get(['id','name'])->toArray();
  280. $user_id = $org_id;
  281. } else {
  282. $ids = DocterOrganization::where(['docter_id'=>$docter_id])->pluck('organization_id');
  283. $list = Organization::whereIn('id',$ids)->get(['id','name'])->toArray();
  284. $user_id = $docter_id;
  285. }
  286. $data['user_id'] = $user_id;
  287. $data['role'] = $role;
  288. $data['list'] = $list;
  289. return (json_encode(['code'=>200,'msg'=>'ok','data'=>$data]));
  290. }
  291. public function get_chat_order()
  292. {
  293. $org_id = 1;
  294. $docter_id = 1;
  295. $list = Order::where(['organization_id'=>$org_id,'docter_id'=>$docter_id,'order_status'=>3])->with('orderUser')->distinct('user_id')->get('user_id');
  296. foreach ($list as $val){
  297. $user_list[] = [
  298. 'user_id'=>$val->user_id,
  299. 'avatar'=>$val->orderUser->avatar,
  300. 'name'=>$val->orderUser->nickname,
  301. ];
  302. }
  303. $data['docter_id'] = $docter_id;
  304. $data['order_list'] = $user_list;
  305. return (json_encode(['code'=>200,'msg'=>'ok','data'=>$data]));
  306. }
  307. }