ApiController.php 34 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837
  1. <?php
  2. namespace App\Community\Controllers;
  3. use App\Http\Controllers\Controller;
  4. use App\Models\CdmsUsers;
  5. use App\Models\Docter;
  6. use App\Models\DocterOrganization;
  7. use App\Models\DocterSetting;
  8. use App\Models\Doctertimes;
  9. use App\Models\Order;
  10. use App\Models\Organization;
  11. use App\Models\PatientRemark;
  12. use App\Models\Schedule;
  13. use App\Models\SchedulePeriod;
  14. use App\Models\SelfSchedule;
  15. use App\Models\SystemConfig;
  16. use App\Models\TimePeriod;
  17. use App\Models\WeekSchedule;
  18. use Carbon\Carbon;
  19. use EasyWeChat\Factory;
  20. use Encore\Admin\Facades\Admin;
  21. use Illuminate\Support\Facades\DB;
  22. use mysql_xdevapi\Exception;
  23. class ApiController extends Controller
  24. {
  25. //获取订单
  26. public function getDocter()
  27. {
  28. return Docter::pluck(['name','id'])->toArray();
  29. }
  30. //备注
  31. public function paitent_remark()
  32. {
  33. $data['patient_id']= request('patient_id');
  34. $data['org_id'] = request('org_id');
  35. $data['type'] = request('type');
  36. $is_have = PatientRemark::where($data)->first();
  37. $data['remark'] = request('remark');
  38. if(empty($data['remark'])) return redirect('/cdms/nurse_users');
  39. if($is_have){
  40. PatientRemark::where(['id'=>$is_have->id])->update(['remark'=>$data['remark']]);
  41. } else {
  42. PatientRemark::insert($data);
  43. }
  44. return redirect('/cdms/nurse_users');
  45. }
  46. //发送短信
  47. public function sendmsg(){
  48. $config = [
  49. 'app_id' => 'wx1c2357232cd25f65',
  50. 'secret' => 'c8cab53e4e52234ed1bc2abbdeaba57d',
  51. // 'app_id' => 'wx13bedfcc62e9bab0',
  52. // 'secret' => '175e5518b6426dd12d3096f24ca68fb8',
  53. 'response_type' => 'array'
  54. // oVxTzvgYlGktIDZXwfLMLQ01Tr5s
  55. ];
  56. //3LUhWGlyiljxrT3Jh8orwQZ2LSHjfRs9SIHaB40O6q0
  57. //开发者调用模版消息接口时需提供模版ID
  58. //标题
  59. //offer进度提醒
  60. //行业
  61. //IT科技 - 互联网|电子商务
  62. //详细内容
  63. //{{first.DATA}}
  64. //人才姓名:{{keyword1.DATA}}
  65. //联系方式:{{keyword2.DATA}}
  66. //入职职位:{{keyword3.DATA}}
  67. //入职公司:{{keyword4.DATA}}
  68. //报到时间:{{keyword5.DATA}}
  69. //{{remark.DATA}}
  70. // oVxTzvgYlGktIDZXwfLMLQ01Tr5s 自己 oVxTzvhu4gs4RyCt4kJDRWOgsUXw周璐 oVxTzvgu4XnI5F2aF7DcrbJIp5fI 间行 oVxTzvl8DYQblYmLCIK3UXW_8jAY 落雨桐
  71. $renyuan = ['oVxTzvhu4gs4RyCt4kJDRWOgsUXw','oVxTzvgYlGktIDZXwfLMLQ01Tr5s']; //周璐
  72. // $renyuan = ['oVxTzvvTnnbjEE9jsalOYj4mtp6U','oVxTzvgu4XnI5F2aF7DcrbJIp5fI']; //简行
  73. $app = Factory::officialAccount($config );
  74. // $res = $app->broadcasting->status(3147483751);
  75. //
  76. // "errcode" => 0
  77. // "errmsg" => "send job submission success"
  78. // "msg_id" => 3147483751
  79. // "msg_data_id" => 2247484953
  80. // ^ array:2 [▼
  81. // "errcode" => 40003
  82. // "errmsg" => "invalid openid rid: 5fc35ef3-7f3b3ef9-14537bc7"
  83. //]
  84. $user = $app->user->get('oVxTzvgYlGktIDZXwfLMLQ01Tr5s');
  85. dd($user);
  86. $res = $app->template_message->send([
  87. 'touser' => 'oVxTzvgYlGktIDZXwfLMLQ01Tr5s',
  88. 'template_id' => '3LUhWGlyiljxrT3Jh8orwQZ2LSHjfRs9SIHaB40O6q0',
  89. // 'url' => 'https://t5.9026.com',
  90. 'data' => [
  91. 'first'=>'社区通知',
  92. 'keyword1' => '王海军',
  93. 'keyword2' => 18719141830,
  94. 'keyword3' => '开发工程师',
  95. 'keyword4' => '思维定制',
  96. 'keyword5' => '2020-12-12',
  97. ],
  98. ]);
  99. dd($res);
  100. $res = $app->broadcasting->sendText("测试发送,测试发送",$renyuan);
  101. }
  102. //获取排班页面
  103. public function getComSchedule()
  104. {
  105. $set_time = request('time');//时间
  106. $user = Admin::user();
  107. $doc_id = $user->docter_id;
  108. $docter_id = request('docter_id');
  109. $role = request('role',1);
  110. $is_docter = CdmsUsers::where('docter_id',$doc_id)->where('docter_id','!=','')->first();
  111. if(empty($set_time)){
  112. return json_encode(['code'=>601,'msg'=>'缺少必要参数','data'=>'']);
  113. }
  114. if($is_docter){
  115. $role =2;
  116. $org_id = request('org_id');
  117. } else {
  118. $org_id = $user->org_id;
  119. }
  120. $all_time = explode('至',$set_time);
  121. if(count($all_time) <2){
  122. return json_encode(['code'=>601,'msg'=>'缺少必要参数','data'=>'']);
  123. }
  124. return $this->getWeekSchedule();
  125. $start_time = intval(str_replace('-','',$all_time[0]));
  126. $end_time = intval(str_replace('-','',$all_time[1]));
  127. $first_day = strtotime($all_time[0]);
  128. // DB::enableQueryLog();
  129. $sche_dule = Schedule::whereBetween('schedule_day',[$start_time,$end_time])
  130. ->where(['docter_id'=>$docter_id])
  131. ->pluck('id')
  132. ->toArray();
  133. // echo '<pre>';
  134. // print_r(DB::getQueryLog());
  135. // echo '</pre>';
  136. //dd($sche_dule);
  137. $sche_dule_arr =[
  138. [
  139. 'date'=>"上午",
  140. 'monday'=>false,
  141. 'tuesday'=>false,
  142. 'wednesday'=>false,
  143. 'thursday'=>false,
  144. 'friday'=>false,
  145. 'saturday'=>false,
  146. 'sunday'=>false,
  147. ],
  148. [
  149. 'date'=>"下午",
  150. 'monday'=>false,
  151. 'tuesday'=>false,
  152. 'wednesday'=>false,
  153. 'thursday'=>false,
  154. 'friday'=>false,
  155. 'saturday'=>false,
  156. 'sunday'=>false,
  157. ],
  158. [
  159. 'date'=>"晚上",
  160. 'monday'=>false,
  161. 'tuesday'=>false,
  162. 'wednesday'=>false,
  163. 'thursday'=>false,
  164. 'friday'=>false,
  165. 'saturday'=>false,
  166. 'sunday'=>false,
  167. ]
  168. ];
  169. // return $this->getWeekSchedule();
  170. //周字段映射
  171. $week_arr = ['monday','tuesday','wednesday','thursday','friday','saturday','sunday'];
  172. //时段区间id
  173. $schedule_config = SystemConfig::get('docter_config');
  174. $times[] = TimePeriod::where('start_time_period','>=',$schedule_config['morning_start'])->where('end_time_period','<=',$schedule_config['morning_end'])->pluck('id')->toArray();
  175. $times[] = TimePeriod::where('start_time_period','>=',$schedule_config['afternoon_start'])->where('end_time_period','<=',$schedule_config['afternoon_end'])->pluck('id')->toArray();
  176. $times[] = TimePeriod::where('start_time_period','>=',$schedule_config['evening_start'])->where('end_time_period','<=',$schedule_config['evening_end'])->pluck('id')->toArray();
  177. if(empty($sche_dule)){
  178. return ['code'=>200,'msg'=>'ok','data'=>['docter'=>$sche_dule_arr,'org_id'=>$org_id,'docter_id'=>$docter_id]];
  179. }
  180. if($role == 1){
  181. $ids = DocterOrganization::where(['organization_id'=>$org_id])->pluck('docter_id');
  182. $name = Organization::where('id',$docter_id)->value('name');
  183. $user_id = $org_id;
  184. for ($i = 0; $i<6; $i++){
  185. $str_time = date('Y-m-d',($first_day + $i * 86400));
  186. for($j=0;$j<3;$j++){
  187. //dd($sche_dule);
  188. // DB::enableQueryLog();
  189. //检测上午
  190. $is_mo_have = SchedulePeriod::whereIn('schedule_id',$sche_dule)->where('schedule_date',$str_time)->whereIn('time_period_id',$times[$j])
  191. ->where('organization_id','!=',$org_id)->where('docter_id',$docter_id)->count();
  192. $is_self = SchedulePeriod::whereIn('schedule_id',$sche_dule)->where('schedule_date',$str_time)->whereIn('time_period_id',$times[$j])
  193. ->where('organization_id','=',$org_id)->where('docter_id',$docter_id)->count();
  194. if($is_self){
  195. $sche_dule_arr[$j][$week_arr[$i]] = true;
  196. }
  197. if($is_mo_have){
  198. $sche_dule_arr[$j][$week_arr[$i]] = 'other';
  199. }
  200. }
  201. }
  202. } else {
  203. $name = Docter::where('id',$docter_id)->value('name');
  204. $user_id = $docter_id;
  205. for ($i=0; $i<=6; $i++){
  206. $str_time = date('Y-m-d',($first_day + $i * 86400));
  207. for($j=0;$j<=2;$j++){
  208. $is_mo_have = SchedulePeriod::whereIn('schedule_id',$sche_dule)->where('schedule_date',$str_time)->whereIn('time_period_id',$times[$j])
  209. ->where('organization_id','!=',$org_id)->where('docter_id',$docter_id)->count();
  210. $is_mo_self = SchedulePeriod::whereIn('schedule_id',$sche_dule)->where('schedule_date',$str_time)->whereIn('time_period_id',$times[$j])
  211. ->where('organization_id',$org_id)->where('docter_id',$docter_id)->count();
  212. if($is_mo_self){
  213. $sche_dule_arr[$j][$week_arr[$i]] = true;
  214. }
  215. if($is_mo_have){
  216. $sche_dule_arr[$j][$week_arr[$i]] = 'other';
  217. }
  218. }
  219. }
  220. }
  221. // "morning_start" => "09:00"
  222. // "morning_end" => "12:00"
  223. // "afternoon_start" => "13:00"
  224. // "afternoon_end" => "18:00"
  225. // "evening_start" => "19:00"
  226. // "evening_end" => "20:00"
  227. $data['docter'] = $sche_dule_arr;
  228. $data['name'] = $name;
  229. $data['role'] = $role;
  230. $data['user_id'] = $user_id;
  231. return (json_encode(['code'=>200,'msg'=>'ok','data'=>$data]));
  232. }
  233. //编辑排班
  234. public function setDocChedule()
  235. {
  236. $docter_id = request('docter_id');
  237. $org_id = request('org_id');
  238. $set_time = request('time');
  239. $data = request('schedulingtime');
  240. // $set_time = '2020-12-07至2020-12-13';
  241. if(empty($set_time) || empty($org_id) || empty($docter_id)){
  242. return json_encode(['status'=>601,'msg'=>'缺少必要参数','data'=>'']);
  243. }
  244. $all_time = explode('至',$set_time);
  245. if(count($all_time) <2) {
  246. return json_encode(['status'=>601,'msg'=>'缺少必要参数','data'=>'']);
  247. }
  248. $first_day = strtotime($all_time[0]);
  249. $start_time = intval(str_replace('-','',$all_time[0]));
  250. $end_time = intval(str_replace('-','',$all_time[1]));
  251. $schedule_id = Schedule::where(['docter_id'=>$docter_id])->whereBetween('schedule_day',[$start_time,$end_time])->pluck('id');
  252. if(empty($schedule_id) || count($schedule_id) < 7){
  253. // Schedule::whereIn('id',$schedule_id)->delete();
  254. // SchedulePeriod::whereIn('schedule_id',$schedule_id);
  255. for($i = 0;$i<=6;$i++){
  256. $real_time = $first_day + (86400 * $i);
  257. $schedule= [
  258. 'schedule_date'=> date('Y-m-d',$real_time),
  259. 'schedule_day'=>intval(str_replace('-','',date('Y-m-d H:i:s',$real_time))),
  260. 'docter_id'=>$docter_id
  261. ] ;
  262. Schedule::Insert($schedule);
  263. // echo '日期:'.date('Y-m-d H:i:s',$real_time).'<br>';
  264. // echo $i;
  265. }
  266. }
  267. //周字段映射
  268. $week_arr = ['monday','tuesday','wednesday','thursday','friday','saturday','sunday'];
  269. // $data = [
  270. // [
  271. // 'date'=>"上午",
  272. // 'monday'=>false,
  273. // 'tuesday'=>false,
  274. // 'wednesday'=>false,
  275. // 'thursday'=>true,
  276. // 'friday'=>false,
  277. // 'saturday'=>false,
  278. // 'sunday'=>false,
  279. // ],
  280. // [
  281. // 'date'=>"下午",
  282. // 'monday'=>false,
  283. // 'tuesday'=>true,
  284. // 'wednesday'=>false,
  285. // 'thursday'=>false,
  286. // 'friday'=>false,
  287. // 'saturday'=>false,
  288. // 'sunday'=>false,
  289. // ],
  290. // [
  291. // 'date'=>"晚上",
  292. // 'monday'=>false,
  293. // 'tuesday'=>false,
  294. // 'wednesday'=>true,
  295. // 'thursday'=>false,
  296. // 'friday'=>false,
  297. // 'saturday'=>false,
  298. // 'sunday'=>false,
  299. // ]
  300. // ];
  301. //时段区间id
  302. $schedule_config = SystemConfig::get('docter_config');
  303. $times[1] = TimePeriod::where('start_time_period','>=',$schedule_config['morning_start'])
  304. ->where('end_time_period','<=',$schedule_config['morning_end'])
  305. ->pluck('id')->toArray();
  306. $times[2] = TimePeriod::where('start_time_period','>=',$schedule_config['afternoon_start'])
  307. ->where('end_time_period','<=',$schedule_config['afternoon_end'])
  308. ->pluck('id')->toArray();
  309. $times[3] = TimePeriod::where('start_time_period','>=',$schedule_config['evening_start'])
  310. ->where('end_time_period','<=',$schedule_config['evening_end'])
  311. ->pluck('id')->toArray();
  312. foreach ($times as $val){
  313. foreach ($val as $t){
  314. $time_period[] = $t;
  315. }
  316. }
  317. $data[0] = array_values(object_array(json_decode($data[0])));
  318. $data[1] = array_values(object_array(json_decode($data[1])));
  319. $data[2] = array_values(object_array(json_decode($data[2])));
  320. DB::beginTransaction();
  321. try {
  322. $schedule_insert = [
  323. 'organization_id'=>$org_id,
  324. 'docter_id'=>$docter_id,
  325. 'schedule_date'=>$all_time[0],
  326. 'created_at'=>Carbon::now(),
  327. 'updated_at'=>Carbon::now(),
  328. ];
  329. $info = [];
  330. for ($i = 1 ;$i<=3;$i++){
  331. $mo_schedule = array_values($data[$i-1]);
  332. foreach ($mo_schedule as $key=>$val){
  333. if($key==0) continue;
  334. $time_insert = $schedule_insert;
  335. $time_insert['type'] = $i;
  336. $schedule_time = $times[$i];
  337. $real_time = date('Y-m-d',($first_day + ($key-1)*86400));
  338. $schedule_id = Schedule::where(['docter_id'=>$docter_id,'schedule_date'=>$real_time])->value('id');
  339. if(empty($schedule_id)) continue;
  340. $time_insert['schedule_id'] = $schedule_id;
  341. $time_insert['schedule_date'] = $real_time;
  342. $time_insert['me_sure'] = 1;
  343. if($val == true){
  344. $data['schedule_date'] = $start_time;
  345. foreach ($schedule_time as $time_id){
  346. $is_have = SchedulePeriod::where(['time_period_id'=>$time_id,'type'=>($i),'schedule_date'=>$real_time])->value('id');
  347. if($is_have) break;
  348. $time_insert['time_period_id'] = $time_id;
  349. $info[] = $time_insert;
  350. SchedulePeriod::insert($time_insert);
  351. }
  352. } else {
  353. $data['schedule_date'] = $start_time;
  354. foreach ($schedule_time as $time_id){
  355. $is_have = SchedulePeriod::where(['time_period_id'=>$time_id,'type'=>($i),'schedule_date'=>$real_time,'organization_id'=>$org_id,'docter_id'=>$docter_id,'schedule_id'=>$schedule_id])->value('id');
  356. if($is_have) SchedulePeriod::where(['time_period_id'=>$time_id,'type'=>($i),'docter_id'=>$docter_id,'schedule_date'=>$real_time,'organization_id'=>$org_id,'docter_id'=>$docter_id,'schedule_id'=>$schedule_id])->delete();
  357. }
  358. }
  359. }
  360. }
  361. DB::commit();
  362. } catch (Exception $e){
  363. DB::rollBack();
  364. Log::info($e->getMessage());
  365. }
  366. return json_encode(['status'=>200,'msg'=>'插入成功','data'=>count($info)]);
  367. }
  368. //设置自己排班
  369. public function setSelfSchedule()
  370. {
  371. $docter_id = request('docter_id');
  372. $org_id = request('org_id');
  373. $date = request('date');
  374. $type = request('type','1,2'); //1 上午,2 下午,3 晚上
  375. $schedule_type = request('schedule_type');
  376. $self_setting = DocterSetting::where(['docter_id'=>$docter_id])->first();
  377. $times = [];
  378. if(!empty($self_setting)){
  379. $time_period = object_array(json_decode($self_setting->service_time));
  380. $times[1] = TimePeriod::where(['docter_id'=>$docter_id])->whereBetween('end_time_period',[intval($time_period[0]['startTime']),intval($time_period[0]['endTime'])])->pluck('id')->toArray();
  381. $times[2] = TimePeriod::where(['docter_id'=>$docter_id])->whereBetween('end_time_period',[intval($time_period[1]['startTime']),intval($time_period[1]['endTime'])])->pluck('id')->toArray();
  382. $times[3] = TimePeriod::where(['docter_id'=>$docter_id])->whereBetween('end_time_period',[intval($time_period[2]['startTime']),intval($time_period[2]['endTime'])])->pluck('id')->toArray();
  383. }
  384. if(count($times) <3){
  385. return apiReturn(602,'请设置真确的时间段');
  386. }
  387. if(empty($docter_id) || empty($org_id) || empty('date') || empty($type) || empty($schedule_type)){
  388. return apiReturn(601,'缺少必要参数');
  389. }
  390. if(strtotime($date) < strtotime('tomorrow')){
  391. return apiReturn(602,'只能排明天以後的');
  392. }
  393. $week = date("w",strtotime($date));
  394. $types = explode(',',$type);
  395. if(!empty($types)){
  396. foreach ($types as $t){
  397. $self_schedule = [
  398. 'schedule_date'=>$date,
  399. 'week'=>intval($week),
  400. 'schedule_type'=>$schedule_type,
  401. 'organization_id'=>$org_id,
  402. 'docter_id'=>$docter_id,
  403. 'type'=>intval($t)
  404. ];
  405. foreach ($times[intval($t)] as $id){
  406. $self_schedule['time_period_id'] = $id;
  407. $is_have = SelfSchedule::where(['docter_id'=>$docter_id,'organization_id'=>$org_id,'schedule_date'=>$date,'type'=>intval($t),'week'=>$week,'time_period_id'=>$id])->value('id');
  408. if($is_have) continue;
  409. SelfSchedule::insert($self_schedule);
  410. }
  411. }
  412. $cha = array_diff([1,2,3],$types);
  413. foreach ($cha as $t){
  414. SelfSchedule::where(['docter_id'=>$docter_id,'organization_id'=>$org_id,'schedule_date'=>$date,'type'=>intval($t)])->delete();
  415. }
  416. }
  417. return apiReturn(200,'ok');
  418. }
  419. //获取用户信息
  420. public function getScheduleInfo()
  421. {
  422. $user = Admin::user();
  423. $org_id = $user->org_id;
  424. $docter_id = $user->docter_id;
  425. $is_docter = CdmsUsers::where('docter_id',$docter_id)->where('docter_id','!=','')->first();
  426. if(empty($org_id) && empty($docter_id)){
  427. return json_encode(['code'=>601,'msg'=>'缺少必要参数','data'=>'']);
  428. }
  429. $role = 1;
  430. if($is_docter){
  431. $role = 2;
  432. }
  433. $lists =[];
  434. if($role == 1){
  435. $ids = DocterOrganization::where(['organization_id'=>$org_id])->pluck('docter_id')->toArray();
  436. $list = Docter::whereIn('id',$ids)->where('is_then',1)->get(['id','name']);
  437. foreach ($list as $val){
  438. $lists[] = ['value'=>$val->id,'label'=>$val->name];
  439. }
  440. $name = Organization::where('id',$org_id)->value('name');
  441. $user_id = $org_id;
  442. } else {
  443. $ids = DocterOrganization::where(['docter_id'=>$docter_id])->pluck('organization_id');
  444. $list = Organization::whereIn('id',$ids)->get(['id','name']);
  445. foreach ($list as $val){
  446. $lists[] = ['value'=>$val->id,'label'=>$val->name];
  447. }
  448. $name = Docter::where('id',$docter_id)->value('name');
  449. $user_id = $docter_id;
  450. }
  451. $data['user_id'] = $user_id;
  452. $data['name'] = $name;
  453. $data['role'] = $role;
  454. $data['list'] = $lists;
  455. return (json_encode(['code'=>200,'msg'=>'ok','data'=>$data]));
  456. }
  457. //获取图文订单
  458. public function get_chat_order()
  459. {
  460. $org_id = 1;
  461. $docter_id = request('docter_id');
  462. if(empty($docter_id)){
  463. return json_encode(['code'=>601,'msg'=>'缺少必要参数','data'=>'']);
  464. }
  465. $list = Order::where(['organization_id'=>$org_id,'docter_id'=>$docter_id,'order_status'=>3])->with('orderUser')->distinct('user_id')->get('user_id');
  466. $user_list = [];
  467. foreach ($list as $val){
  468. $user_list[] = [
  469. 'id'=>$val->user_id,
  470. 'avatar'=>$val->orderUser->avatar,
  471. 'name'=>$val->orderUser->nickname,
  472. ];
  473. }
  474. $data['docter'] = Docter::where('id',$docter_id)->first(['id','avatar','name']);
  475. $data['order_list'] = $user_list;
  476. return (json_encode(['code'=>200,'msg'=>'ok','data'=>$data]));
  477. }
  478. //跟新订单
  479. public function updateOrder(){
  480. $id = request('id');
  481. $status = request('status');
  482. if(empty($id) || empty($status)){
  483. return json_encode(['code'=>601,'msg'=>'缺少必要参数','data'=>'']);
  484. }
  485. $data = Order::where('id',$id)->update(['order_status'=>$status]);
  486. return (json_encode(['code'=>200,'msg'=>'ok','data'=>$data]));
  487. }
  488. //更新用戶設置
  489. public function updateDocterSetting()
  490. {
  491. $docter_id = request('docter_id',1);
  492. if(empty($docter_id)){
  493. return apiReturn(604,'参数错误');
  494. }
  495. //添加时间段
  496. if(2 == 3){
  497. $data = ['docter_id'=>$docter_id,'am_start'=>'8:30','am_end'=>'11:30','pm_start'=>'12:00','pm_end'=>'15:00','ev_start'=>'19:00','ev_end'=>'22:00','service_time'=>15];
  498. $amtimes[] = explode(':',$data['am_start']);
  499. $amtimes[] = explode(':',$data['am_end']);
  500. // $amcha = ($amtimes[1][0] - $amtimes[0][0])*60 +($amtimes[1][1] - $amtimes[0][1]);
  501. // $amCount = $amcha/$data['service_time'];
  502. $amCount = intval(floor((strtotime($data['am_end']) - strtotime($data['am_start'])) / (60*$data['service_time'])));
  503. $pmtimes[] = explode(':',$data['pm_start']);
  504. $pmtimes[] = explode(':',$data['pm_end']);
  505. $pmCount =intval(floor((strtotime($data['pm_end']) - strtotime($data['pm_start'])) / (60*$data['service_time'])));
  506. $evtimes[] = explode(':',$data['ev_start']);
  507. $evtimes[] = explode(':',$data['ev_end']);
  508. $evcha = ($evtimes[1][0] - $evtimes[0][0])*60 +($evtimes[1][1] - $evtimes[0][1]);
  509. $evCount = $evcha/$data['service_time'];
  510. for($i=1;$i<=$amCount;$i++){
  511. $amdata = [
  512. 'docter_id'=>$docter_id,
  513. 'start_time_period'=> date('H:i',strtotime($data['am_start']) + ($i-1)*$data['service_time']*60),
  514. 'end_time_period'=> date('H:i',strtotime($data['am_start']) + $i*$data['service_time']*60),
  515. ];
  516. TimePeriod::insert($amdata);
  517. }
  518. for($i=1;$i<=$pmCount;$i++){
  519. $pmdata = [
  520. 'docter_id'=>$docter_id,
  521. 'start_time_period'=> date('H:i',strtotime($data['pm_start']) + ($i-1)*$data['service_time']*60),
  522. 'end_time_period'=> date('H:i',strtotime($data['pm_start']) + $i*$data['service_time']*60),
  523. ];
  524. TimePeriod::insert($pmdata);
  525. }
  526. for($i=1;$i<=$evCount;$i++){
  527. $evdata = [
  528. 'docter_id'=>$docter_id,
  529. 'start_time_period'=> date('H:i',strtotime($data['ev_start']) + ($i-1)*$data['service_time']*60),
  530. 'end_time_period'=> date('H:i',strtotime($data['ev_start']) + $i*$data['service_time']*60),
  531. ];
  532. TimePeriod::insert($evdata);
  533. }
  534. }
  535. $config = [['startTime'=>"08:30","endTime"=>"11:30"],["startTime"=>"13:30","endTime"=>"16:00"],["startTime"=>"18:30","endTime"=>"19:30"]];
  536. $setting = [
  537. 'docter_id'=>$docter_id,
  538. 'type'=>2,
  539. 'status'=>2,
  540. 'show_days'=>7,
  541. 'service_num'=>7,
  542. 'service_time'=>json_encode($config)
  543. ];
  544. $is_have = DocterSetting::where(['docter_id'=>$docter_id])->value('id');
  545. if($is_have){
  546. DocterSetting::where(['docter_id'=>$docter_id])->update($setting);
  547. } else {
  548. DocterSetting::insert($setting);
  549. }
  550. return apiReturn(200,'ok');
  551. }
  552. //获取周排班模板
  553. public function getWeekSchedule()
  554. {
  555. $docter_id = request('docter_id',1);
  556. $org_id = request('org_id',1);
  557. $type = request('type',2);
  558. $role = request('role',2);
  559. if(empty($docter_id) || empty($type)){
  560. return apiReturn(604,'缺少必要参数');
  561. }
  562. $docter_id = 1;
  563. $docter_setting = DocterSetting::where(['docter_id'=>$docter_id,'type'=>$type])->first();
  564. $times = [];
  565. if(!empty($docter_setting)){
  566. $time_period = object_array(json_decode($docter_setting->service_time));
  567. $times[] = TimePeriod::where(['docter_id'=>$docter_id])->whereBetween('end_time_period',[intval($time_period[0]['startTime']),intval($time_period[0]['endTime'])])->pluck('id')->toArray();
  568. $times[] = TimePeriod::where(['docter_id'=>$docter_id])->whereBetween('end_time_period',[intval($time_period[1]['startTime']),intval($time_period[1]['endTime'])])->pluck('id')->toArray();
  569. $times[] = TimePeriod::where(['docter_id'=>$docter_id])->whereBetween('end_time_period',[intval($time_period[2]['startTime']),intval($time_period[2]['endTime'])])->pluck('id')->toArray();
  570. }
  571. if(count($times) < 3){
  572. dd('no have times');
  573. }
  574. //周字段映射
  575. $week_arr = ['monday','tuesday','wednesday','thursday','friday','saturday','sunday'];
  576. $data = [
  577. [
  578. 'date'=>"上午",
  579. 'monday'=>false,
  580. 'tuesday'=>false,
  581. 'wednesday'=>false,
  582. 'thursday'=>false,
  583. 'friday'=>false,
  584. 'saturday'=>false,
  585. 'sunday'=>false,
  586. ],
  587. [
  588. 'date'=>"下午",
  589. 'monday'=>false,
  590. 'tuesday'=>false,
  591. 'wednesday'=>false,
  592. 'thursday'=>false,
  593. 'friday'=>false,
  594. 'saturday'=>false,
  595. 'sunday'=>false,
  596. ],
  597. [
  598. 'date'=>"晚上",
  599. 'monday'=>false,
  600. 'tuesday'=>false,
  601. 'wednesday'=>false,
  602. 'thursday'=>false,
  603. 'friday'=>false,
  604. 'saturday'=>false,
  605. 'sunday'=>false,
  606. ]
  607. ];
  608. if($role == 2){
  609. for ($i=0;$i<6;$i++){
  610. for($j=0;$j<=2;$j++){
  611. $is_self_have = WeekSchedule::where(['docter_id'=>$docter_id,'schedule_type'=>$type,'organization_id'=>$org_id,'week'=>$i+1])->whereIn('time_period_id',$times[$j])->count();
  612. $is_other_have = WeekSchedule::where(['docter_id'=>$docter_id,'schedule_type'=>$type,'week'=>$i+1])->where('organization_id','!=',$org_id)->whereIn('time_period_id',$times[$j])->count();
  613. if($is_self_have){
  614. $data[$j][$week_arr[$i]] = true;
  615. }
  616. if($is_other_have){
  617. $data[$j][$week_arr[$i]] = 'other';
  618. }
  619. }
  620. }
  621. } else {
  622. for ($i=0;$i<6;$i++){
  623. for($j=0;$j<=2;$j++){
  624. $is_self_have = WeekSchedule::where(['docter_id'=>$docter_id,'schedule_type'=>$type,'organization_id'=>$org_id,'week'=>$i+1])->whereIn('time_period_id',$times[$j])->count();
  625. $is_other_have = WeekSchedule::where(['docter_id'=>$docter_id,'schedule_type'=>$type,'week'=>$i+1])->where('docter_id','!=',$docter_id)->whereIn('time_period_id',$times[$j])->count();
  626. if($is_self_have){
  627. $data[$j][$week_arr[$i]] = true;
  628. }
  629. if($is_other_have){
  630. $data[$j][$week_arr[$i]] = 'other';
  631. }
  632. }
  633. }
  634. }
  635. $name = Docter::where('id',$docter_id)->value('name');
  636. $shcedule_data['docter'] = $data;
  637. $shcedule_data['name'] = $name;
  638. $shcedule_data['role'] = $role;
  639. $shcedule_data['user_id'] = $docter_id;
  640. return apiReturn(200,'ok',$shcedule_data);
  641. }
  642. //设置周排班模板
  643. public function setWeekSchedule()
  644. {
  645. $docter_id = request('docter_id',1);
  646. $org_id = request('org_id',1);
  647. $type = request('type',2);
  648. if(empty($docter_id) || empty($org_id) || empty($type)){
  649. return apiReturn(601,'缺少必要参数');
  650. }
  651. $docter_setting = DocterSetting::where(['docter_id'=>$docter_id])->first();
  652. $data = [
  653. [
  654. 'date'=>"上午",
  655. 'monday'=>false,
  656. 'tuesday'=>true,
  657. 'wednesday'=>false,
  658. 'thursday'=>false,
  659. 'friday'=>true,
  660. 'saturday'=>false,
  661. 'sunday'=>false,
  662. ],
  663. [
  664. 'date'=>"下午",
  665. 'monday'=>false,
  666. 'tuesday'=>false,
  667. 'wednesday'=>false,
  668. 'thursday'=>false,
  669. 'friday'=>false,
  670. 'saturday'=>true,
  671. 'sunday'=>false,
  672. ],
  673. [
  674. 'date'=>"晚上",
  675. 'monday'=>true,
  676. 'tuesday'=>true,
  677. 'wednesday'=>false,
  678. 'thursday'=>false,
  679. 'friday'=>false,
  680. 'saturday'=>false,
  681. 'sunday'=>false,
  682. ]
  683. ];
  684. if(!empty($docter_setting)){
  685. $time_period = object_array(json_decode($docter_setting->service_time));
  686. $times[] = TimePeriod::where(['docter_id'=>$docter_id])->whereBetween('end_time_period',[intval($time_period[0]['startTime']),intval($time_period[0]['endTime'])])->pluck('id')->toArray();
  687. $times[] = TimePeriod::where(['docter_id'=>$docter_id])->whereBetween('end_time_period',[intval($time_period[1]['startTime']),intval($time_period[1]['endTime'])])->pluck('id')->toArray();
  688. $times[] = TimePeriod::where(['docter_id'=>$docter_id])->whereBetween('end_time_period',[intval($time_period[2]['startTime']),intval($time_period[2]['endTime'])])->pluck('id')->toArray();
  689. }
  690. $week_data = [
  691. 'schedule_type'=>$type,
  692. 'organization_id'=>$org_id,
  693. 'docter_id'=>$docter_id
  694. ];
  695. $k = 0;
  696. DB::beginTransaction();
  697. // $data[0] = array_values(object_array(json_decode($data[0])));
  698. // $data[1] = array_values(object_array(json_decode($data[1])));
  699. // $data[2] = array_values(object_array(json_decode($data[2])));
  700. $data[0] = array_values($data[0]);
  701. $data[1] = array_values($data[1]);
  702. $data[2] = array_values($data[2]);
  703. try {
  704. for($i=0;$i<=2;$i++){
  705. $schedule_data = $data[$i];
  706. foreach ($schedule_data as $key=>$schedule){
  707. if($key == 0) continue;
  708. $week_data ['type'] = $i+1;
  709. $week_data ['week'] = $key;
  710. if($schedule == true){
  711. // echo '时间列类型'.($i+1).'----'.$key.'星期数'.'<br>';
  712. foreach ($times[$i] as $id){
  713. $week_data['time_period_id'] = $id;
  714. $is_have = WeekSchedule::where(['docter_id'=>$docter_id,'organization_id'=>$org_id,'schedule_type'=>$type,'type'=>$i+1,'week'=>$key])->where('time_period_id',$id)->value('id');
  715. $is = $is_have?'有':'沒有';
  716. // echo '时间段id'.$id.'----'.$is.'</br>';
  717. if($is_have) continue;
  718. $k++;
  719. WeekSchedule::insert($week_data);
  720. }
  721. } else {
  722. $is_have = WeekSchedule::where(['docter_id' => $docter_id, 'organization_id' => $org_id, 'schedule_type' => $type,'type'=>$i+1,'week'=>$key])->whereIn('time_period_id', $times[$i])->value('id');
  723. if($is_have) WeekSchedule::where(['docter_id' => $docter_id, 'organization_id' => $org_id, 'schedule_type' => $type,'type'=>$i+1,'week'=>$key])->whereIn('time_period_id', $times[$i])->delete();
  724. }
  725. }
  726. }
  727. DB::commit();
  728. } catch (\Exception $e){
  729. DB::rollBack();
  730. return apiReturn(602,$e->getLine().'行'.$e->getMessage());
  731. }
  732. return apiReturn(200,'ok',$k);
  733. }
  734. public function setmonthScheduel()
  735. {
  736. $docter_id = request('docter_id',1);
  737. $org_id = request('org_id',1);
  738. $type = request('type',2);
  739. $role = request('role',2);
  740. $date = request('date');
  741. if(empty($docter_id) || empty($type)){
  742. return apiReturn(604,'缺少必要参数');
  743. }
  744. $start_time = date('Y-m-d', strtotime($date));
  745. $end_time = date('Y-m-d',strtotime($date.'+1 month'));
  746. $self_schedule = SelfSchedule::where(['docter_id'=>$docter_id,'organization_id'=>$org_id])->whereBetween('schedule_date',[$start_time,$end_time])->get()->GroupBy('week')->toArray();
  747. $week_schedule = WeekSchedule::where(['docter_id'=>$docter_id,'organization_id'=>$org_id])->orderby('week')->distinct('type')->get(['type','week'])->GroupBy('week')->toArray();
  748. dd($week_schedule);
  749. $data = $this->getWeekSchedule();
  750. }
  751. }