ApiController.php 37 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902
  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 = ['o481Y5AtcbnOQef1vc4rL4TwYpDU','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. $res = $app->template_message->send([
  86. 'touser' => 'oVxTzvgYlGktIDZXwfLMLQ01Tr5s',
  87. 'template_id' => '3LUhWGlyiljxrT3Jh8orwQZ2LSHjfRs9SIHaB40O6q0',
  88. // 'url' => 'https://t5.9026.com',
  89. 'data' => [
  90. 'first'=>'社区通知',
  91. 'keyword1' => '王海军',
  92. 'keyword2' => 18719141830,
  93. 'keyword3' => '开发工程师',
  94. 'keyword4' => '思维定制',
  95. 'keyword5' => '2020-12-12',
  96. ],
  97. ]);
  98. dd($res);
  99. $res = $app->broadcasting->sendText("测试发送,测试发送",$renyuan);
  100. }
  101. //获取排班页面
  102. public function getComSchedule()
  103. {
  104. $set_time = request('time');//时间
  105. $user = Admin::user();
  106. $doc_id = $user->docter_id;
  107. $docter_id = request('docter_id');
  108. $role = request('role',1);
  109. $is_docter = CdmsUsers::where('docter_id',$doc_id)->where('docter_id','!=','')->first();
  110. if(empty($set_time)){
  111. return json_encode(['code'=>601,'msg'=>'缺少必要参数','data'=>'']);
  112. }
  113. if($is_docter){
  114. $role =2;
  115. $org_id = request('org_id');
  116. } else {
  117. $org_id = $user->org_id;
  118. }
  119. $all_time = explode('至',$set_time);
  120. if(count($all_time) <2){
  121. return json_encode(['code'=>601,'msg'=>'缺少必要参数','data'=>'']);
  122. }
  123. return $this->getWeekSchedule();
  124. $start_time = intval(str_replace('-','',$all_time[0]));
  125. $end_time = intval(str_replace('-','',$all_time[1]));
  126. $first_day = strtotime($all_time[0]);
  127. // DB::enableQueryLog();
  128. $sche_dule = Schedule::whereBetween('schedule_day',[$start_time,$end_time])
  129. ->where(['docter_id'=>$docter_id])
  130. ->pluck('id')
  131. ->toArray();
  132. // echo '<pre>';
  133. // print_r(DB::getQueryLog());
  134. // echo '</pre>';
  135. //dd($sche_dule);
  136. $sche_dule_arr =[
  137. [
  138. 'date'=>"上午",
  139. 'monday'=>false,
  140. 'tuesday'=>false,
  141. 'wednesday'=>false,
  142. 'thursday'=>false,
  143. 'friday'=>false,
  144. 'saturday'=>false,
  145. 'sunday'=>false,
  146. ],
  147. [
  148. 'date'=>"下午",
  149. 'monday'=>false,
  150. 'tuesday'=>false,
  151. 'wednesday'=>false,
  152. 'thursday'=>false,
  153. 'friday'=>false,
  154. 'saturday'=>false,
  155. 'sunday'=>false,
  156. ],
  157. [
  158. 'date'=>"晚上",
  159. 'monday'=>false,
  160. 'tuesday'=>false,
  161. 'wednesday'=>false,
  162. 'thursday'=>false,
  163. 'friday'=>false,
  164. 'saturday'=>false,
  165. 'sunday'=>false,
  166. ]
  167. ];
  168. // return $this->getWeekSchedule();
  169. //周字段映射
  170. $week_arr = ['monday','tuesday','wednesday','thursday','friday','saturday','sunday'];
  171. //时段区间id
  172. $schedule_config = SystemConfig::get('docter_config');
  173. $times[] = TimePeriod::where('start_time_period','>=',$schedule_config['morning_start'])->where('end_time_period','<=',$schedule_config['morning_end'])->pluck('id')->toArray();
  174. $times[] = TimePeriod::where('start_time_period','>=',$schedule_config['afternoon_start'])->where('end_time_period','<=',$schedule_config['afternoon_end'])->pluck('id')->toArray();
  175. $times[] = TimePeriod::where('start_time_period','>=',$schedule_config['evening_start'])->where('end_time_period','<=',$schedule_config['evening_end'])->pluck('id')->toArray();
  176. if(empty($sche_dule)){
  177. return ['code'=>200,'msg'=>'ok','data'=>['docter'=>$sche_dule_arr,'org_id'=>$org_id,'docter_id'=>$docter_id]];
  178. }
  179. if($role == 1){
  180. $ids = DocterOrganization::where(['organization_id'=>$org_id])->pluck('docter_id');
  181. $name = Organization::where('id',$docter_id)->value('name');
  182. $user_id = $org_id;
  183. for ($i = 0; $i<6; $i++){
  184. $str_time = date('Y-m-d',($first_day + $i * 86400));
  185. for($j=0;$j<3;$j++){
  186. //dd($sche_dule);
  187. // DB::enableQueryLog();
  188. //检测上午
  189. $is_mo_have = SchedulePeriod::whereIn('schedule_id',$sche_dule)->where('schedule_date',$str_time)->whereIn('time_period_id',$times[$j])
  190. ->where('organization_id','!=',$org_id)->where('docter_id',$docter_id)->count();
  191. $is_self = SchedulePeriod::whereIn('schedule_id',$sche_dule)->where('schedule_date',$str_time)->whereIn('time_period_id',$times[$j])
  192. ->where('organization_id','=',$org_id)->where('docter_id',$docter_id)->count();
  193. if($is_self){
  194. $sche_dule_arr[$j][$week_arr[$i]] = true;
  195. }
  196. if($is_mo_have){
  197. $sche_dule_arr[$j][$week_arr[$i]] = 'other';
  198. }
  199. }
  200. }
  201. } else {
  202. $name = Docter::where('id',$docter_id)->value('name');
  203. $user_id = $docter_id;
  204. for ($i=0; $i<=6; $i++){
  205. $str_time = date('Y-m-d',($first_day + $i * 86400));
  206. for($j=0;$j<=2;$j++){
  207. $is_mo_have = SchedulePeriod::whereIn('schedule_id',$sche_dule)->where('schedule_date',$str_time)->whereIn('time_period_id',$times[$j])
  208. ->where('organization_id','!=',$org_id)->where('docter_id',$docter_id)->count();
  209. $is_mo_self = SchedulePeriod::whereIn('schedule_id',$sche_dule)->where('schedule_date',$str_time)->whereIn('time_period_id',$times[$j])
  210. ->where('organization_id',$org_id)->where('docter_id',$docter_id)->count();
  211. if($is_mo_self){
  212. $sche_dule_arr[$j][$week_arr[$i]] = true;
  213. }
  214. if($is_mo_have){
  215. $sche_dule_arr[$j][$week_arr[$i]] = 'other';
  216. }
  217. }
  218. }
  219. }
  220. // "morning_start" => "09:00"
  221. // "morning_end" => "12:00"
  222. // "afternoon_start" => "13:00"
  223. // "afternoon_end" => "18:00"
  224. // "evening_start" => "19:00"
  225. // "evening_end" => "20:00"
  226. $data['docter'] = $sche_dule_arr;
  227. $data['name'] = $name;
  228. $data['role'] = $role;
  229. $data['user_id'] = $user_id;
  230. return (json_encode(['code'=>200,'msg'=>'ok','data'=>$data]));
  231. }
  232. //编辑排班
  233. public function setDocChedule()
  234. {
  235. $docter_id = request('docter_id');
  236. $org_id = request('org_id');
  237. $set_time = request('time');
  238. $data = request('schedulingtime');
  239. // $set_time = '2020-12-07至2020-12-13';
  240. if(empty($set_time) || empty($org_id) || empty($docter_id)){
  241. return json_encode(['status'=>601,'msg'=>'缺少必要参数','data'=>'']);
  242. }
  243. $all_time = explode('至',$set_time);
  244. if(count($all_time) <2) {
  245. return json_encode(['status'=>601,'msg'=>'缺少必要参数','data'=>'']);
  246. }
  247. $first_day = strtotime($all_time[0]);
  248. $start_time = intval(str_replace('-','',$all_time[0]));
  249. $end_time = intval(str_replace('-','',$all_time[1]));
  250. $schedule_id = Schedule::where(['docter_id'=>$docter_id])->whereBetween('schedule_day',[$start_time,$end_time])->pluck('id');
  251. if(empty($schedule_id) || count($schedule_id) < 7){
  252. // Schedule::whereIn('id',$schedule_id)->delete();
  253. // SchedulePeriod::whereIn('schedule_id',$schedule_id);
  254. for($i = 0;$i<=6;$i++){
  255. $real_time = $first_day + (86400 * $i);
  256. $schedule= [
  257. 'schedule_date'=> date('Y-m-d',$real_time),
  258. 'schedule_day'=>intval(str_replace('-','',date('Y-m-d H:i:s',$real_time))),
  259. 'docter_id'=>$docter_id
  260. ] ;
  261. Schedule::Insert($schedule);
  262. // echo '日期:'.date('Y-m-d H:i:s',$real_time).'<br>';
  263. // echo $i;
  264. }
  265. }
  266. //周字段映射
  267. $week_arr = ['monday','tuesday','wednesday','thursday','friday','saturday','sunday'];
  268. // $data = [
  269. // [
  270. // 'date'=>"上午",
  271. // 'monday'=>false,
  272. // 'tuesday'=>false,
  273. // 'wednesday'=>false,
  274. // 'thursday'=>true,
  275. // 'friday'=>false,
  276. // 'saturday'=>false,
  277. // 'sunday'=>false,
  278. // ],
  279. // [
  280. // 'date'=>"下午",
  281. // 'monday'=>false,
  282. // 'tuesday'=>true,
  283. // 'wednesday'=>false,
  284. // 'thursday'=>false,
  285. // 'friday'=>false,
  286. // 'saturday'=>false,
  287. // 'sunday'=>false,
  288. // ],
  289. // [
  290. // 'date'=>"晚上",
  291. // 'monday'=>false,
  292. // 'tuesday'=>false,
  293. // 'wednesday'=>true,
  294. // 'thursday'=>false,
  295. // 'friday'=>false,
  296. // 'saturday'=>false,
  297. // 'sunday'=>false,
  298. // ]
  299. // ];
  300. //时段区间id
  301. $schedule_config = SystemConfig::get('docter_config');
  302. $times[1] = TimePeriod::where('start_time_period','>=',$schedule_config['morning_start'])
  303. ->where('end_time_period','<=',$schedule_config['morning_end'])
  304. ->pluck('id')->toArray();
  305. $times[2] = TimePeriod::where('start_time_period','>=',$schedule_config['afternoon_start'])
  306. ->where('end_time_period','<=',$schedule_config['afternoon_end'])
  307. ->pluck('id')->toArray();
  308. $times[3] = TimePeriod::where('start_time_period','>=',$schedule_config['evening_start'])
  309. ->where('end_time_period','<=',$schedule_config['evening_end'])
  310. ->pluck('id')->toArray();
  311. foreach ($times as $val){
  312. foreach ($val as $t){
  313. $time_period[] = $t;
  314. }
  315. }
  316. $data[0] = array_values(object_array(json_decode($data[0])));
  317. $data[1] = array_values(object_array(json_decode($data[1])));
  318. $data[2] = array_values(object_array(json_decode($data[2])));
  319. DB::beginTransaction();
  320. try {
  321. $schedule_insert = [
  322. 'organization_id'=>$org_id,
  323. 'docter_id'=>$docter_id,
  324. 'schedule_date'=>$all_time[0],
  325. 'created_at'=>Carbon::now(),
  326. 'updated_at'=>Carbon::now(),
  327. ];
  328. $info = [];
  329. for ($i = 1 ;$i<=3;$i++){
  330. $mo_schedule = array_values($data[$i-1]);
  331. foreach ($mo_schedule as $key=>$val){
  332. if($key==0) continue;
  333. $time_insert = $schedule_insert;
  334. $time_insert['type'] = $i;
  335. $schedule_time = $times[$i];
  336. $real_time = date('Y-m-d',($first_day + ($key-1)*86400));
  337. $schedule_id = Schedule::where(['docter_id'=>$docter_id,'schedule_date'=>$real_time])->value('id');
  338. if(empty($schedule_id)) continue;
  339. $time_insert['schedule_id'] = $schedule_id;
  340. $time_insert['schedule_date'] = $real_time;
  341. $time_insert['me_sure'] = 1;
  342. if($val == true){
  343. $data['schedule_date'] = $start_time;
  344. foreach ($schedule_time as $time_id){
  345. $is_have = SchedulePeriod::where(['time_period_id'=>$time_id,'type'=>($i),'schedule_date'=>$real_time])->value('id');
  346. if($is_have) break;
  347. $time_insert['time_period_id'] = $time_id;
  348. $info[] = $time_insert;
  349. SchedulePeriod::insert($time_insert);
  350. }
  351. } else {
  352. $data['schedule_date'] = $start_time;
  353. foreach ($schedule_time as $time_id){
  354. $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');
  355. 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();
  356. }
  357. }
  358. }
  359. }
  360. DB::commit();
  361. } catch (Exception $e){
  362. DB::rollBack();
  363. Log::info($e->getMessage());
  364. }
  365. return json_encode(['status'=>200,'msg'=>'插入成功','data'=>count($info)]);
  366. }
  367. //设置自己排班
  368. public function setSelfSchedule()
  369. {
  370. $docter_id = request('docter_id');
  371. $org_id = request('org_id');
  372. $date = request('date');
  373. $type = request('type','1,2'); //1 上午,2 下午,3 晚上
  374. $schedule_type = request('schedule_type');
  375. $self_setting = DocterSetting::where(['docter_id'=>$docter_id])->first();
  376. $times = [];
  377. if(!empty($self_setting)){
  378. $time_period = object_array(json_decode($self_setting->service_time));
  379. $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();
  380. $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();
  381. $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();
  382. }
  383. if(count($times) <3){
  384. return apiReturn(602,'请设置真确的时间段');
  385. }
  386. if(empty($docter_id) || empty($org_id) || empty('date') || empty($type) || empty($schedule_type)){
  387. return apiReturn(601,'缺少必要参数');
  388. }
  389. if(strtotime($date) < strtotime('tomorrow')){
  390. return apiReturn(602,'只能排明天以後的');
  391. }
  392. $week = date("w",strtotime($date));
  393. $types = explode(',',$type);
  394. if(!empty($types)){
  395. foreach ($types as $t){
  396. $self_schedule = [
  397. 'schedule_date'=>$date,
  398. 'week'=>intval($week),
  399. 'schedule_type'=>$schedule_type,
  400. 'organization_id'=>$org_id,
  401. 'docter_id'=>$docter_id,
  402. 'type'=>intval($t)
  403. ];
  404. foreach ($times[intval($t)] as $id){
  405. $self_schedule['time_period_id'] = $id;
  406. $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');
  407. if($is_have) continue;
  408. SelfSchedule::insert($self_schedule);
  409. }
  410. }
  411. $cha = array_diff([1,2,3],$types);
  412. foreach ($cha as $t){
  413. SelfSchedule::where(['docter_id'=>$docter_id,'organization_id'=>$org_id,'schedule_date'=>$date,'type'=>intval($t)])->delete();
  414. }
  415. }
  416. return apiReturn(200,'ok');
  417. }
  418. //获取用户信息
  419. public function getScheduleInfo()
  420. {
  421. $user = Admin::user();
  422. $org_id = $user->org_id;
  423. $docter_id = $user->docter_id;
  424. $is_docter = CdmsUsers::where('docter_id',$docter_id)->where('docter_id','!=','')->first();
  425. if(empty($org_id) && empty($docter_id)){
  426. return json_encode(['code'=>601,'msg'=>'缺少必要参数','data'=>'']);
  427. }
  428. $role = 1;
  429. if($is_docter){
  430. $role = 2;
  431. }
  432. $lists =[];
  433. if($role == 1){
  434. $ids = DocterOrganization::where(['organization_id'=>$org_id])->pluck('docter_id')->toArray();
  435. $list = Docter::whereIn('id',$ids)->where('is_then',1)->get(['id','name']);
  436. foreach ($list as $val){
  437. $lists[] = ['value'=>$val->id,'label'=>$val->name];
  438. }
  439. $name = Organization::where('id',$org_id)->value('name');
  440. $user_id = $org_id;
  441. } else {
  442. $ids = DocterOrganization::where(['docter_id'=>$docter_id])->pluck('organization_id');
  443. $list = Organization::whereIn('id',$ids)->get(['id','name']);
  444. foreach ($list as $val){
  445. $lists[] = ['value'=>$val->id,'label'=>$val->name];
  446. }
  447. $name = Docter::where('id',$docter_id)->value('name');
  448. $user_id = $docter_id;
  449. }
  450. $data['user_id'] = $user_id;
  451. $data['name'] = $name;
  452. $data['role'] = $role;
  453. $data['list'] = $lists;
  454. return (json_encode(['code'=>200,'msg'=>'ok','data'=>$data]));
  455. }
  456. //获取图文订单
  457. public function get_chat_order()
  458. {
  459. $org_id = 1;
  460. $docter_id = request('docter_id');
  461. if(empty($docter_id)){
  462. return json_encode(['code'=>601,'msg'=>'缺少必要参数','data'=>'']);
  463. }
  464. $list = Order::where(['organization_id'=>$org_id,'docter_id'=>$docter_id,'order_status'=>3])->with('orderUser')->distinct('user_id')->get('user_id');
  465. $user_list = [];
  466. foreach ($list as $val){
  467. $user_list[] = [
  468. 'id'=>$val->user_id,
  469. 'avatar'=>$val->orderUser->avatar,
  470. 'name'=>$val->orderUser->nickname,
  471. ];
  472. }
  473. $data['docter'] = Docter::where('id',$docter_id)->first(['id','avatar','name']);
  474. $data['order_list'] = $user_list;
  475. return (json_encode(['code'=>200,'msg'=>'ok','data'=>$data]));
  476. }
  477. //跟新订单
  478. public function updateOrder(){
  479. $id = request('id');
  480. $status = request('status');
  481. if(empty($id) || empty($status)){
  482. return json_encode(['code'=>601,'msg'=>'缺少必要参数','data'=>'']);
  483. }
  484. $data = Order::where('id',$id)->update(['order_status'=>$status]);
  485. return (json_encode(['code'=>200,'msg'=>'ok','data'=>$data]));
  486. }
  487. //更新用戶設置
  488. public function updateDocterSetting()
  489. {
  490. $docter_id = request('docter_id',1);
  491. if(empty($docter_id)){
  492. return apiReturn(604,'参数错误');
  493. }
  494. //添加时间段
  495. if(2 == 3){
  496. $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];
  497. $amtimes[] = explode(':',$data['am_start']);
  498. $amtimes[] = explode(':',$data['am_end']);
  499. // $amcha = ($amtimes[1][0] - $amtimes[0][0])*60 +($amtimes[1][1] - $amtimes[0][1]);
  500. // $amCount = $amcha/$data['service_time'];
  501. $amCount = intval(floor((strtotime($data['am_end']) - strtotime($data['am_start'])) / (60*$data['service_time'])));
  502. $pmtimes[] = explode(':',$data['pm_start']);
  503. $pmtimes[] = explode(':',$data['pm_end']);
  504. $pmCount =intval(floor((strtotime($data['pm_end']) - strtotime($data['pm_start'])) / (60*$data['service_time'])));
  505. $evtimes[] = explode(':',$data['ev_start']);
  506. $evtimes[] = explode(':',$data['ev_end']);
  507. $evcha = ($evtimes[1][0] - $evtimes[0][0])*60 +($evtimes[1][1] - $evtimes[0][1]);
  508. $evCount = $evcha/$data['service_time'];
  509. for($i=1;$i<=$amCount;$i++){
  510. $amdata = [
  511. 'docter_id'=>$docter_id,
  512. 'start_time_period'=> date('H:i',strtotime($data['am_start']) + ($i-1)*$data['service_time']*60),
  513. 'end_time_period'=> date('H:i',strtotime($data['am_start']) + $i*$data['service_time']*60),
  514. ];
  515. TimePeriod::insert($amdata);
  516. }
  517. for($i=1;$i<=$pmCount;$i++){
  518. $pmdata = [
  519. 'docter_id'=>$docter_id,
  520. 'start_time_period'=> date('H:i',strtotime($data['pm_start']) + ($i-1)*$data['service_time']*60),
  521. 'end_time_period'=> date('H:i',strtotime($data['pm_start']) + $i*$data['service_time']*60),
  522. ];
  523. TimePeriod::insert($pmdata);
  524. }
  525. for($i=1;$i<=$evCount;$i++){
  526. $evdata = [
  527. 'docter_id'=>$docter_id,
  528. 'start_time_period'=> date('H:i',strtotime($data['ev_start']) + ($i-1)*$data['service_time']*60),
  529. 'end_time_period'=> date('H:i',strtotime($data['ev_start']) + $i*$data['service_time']*60),
  530. ];
  531. TimePeriod::insert($evdata);
  532. }
  533. }
  534. $config = [['startTime'=>"08:30","endTime"=>"11:30"],["startTime"=>"13:30","endTime"=>"16:00"],["startTime"=>"18:30","endTime"=>"19:30"]];
  535. $setting = [
  536. 'docter_id'=>$docter_id,
  537. 'type'=>2,
  538. 'status'=>2,
  539. 'show_days'=>7,
  540. 'service_num'=>7,
  541. 'service_time'=>json_encode($config)
  542. ];
  543. $is_have = DocterSetting::where(['docter_id'=>$docter_id])->value('id');
  544. if($is_have){
  545. DocterSetting::where(['docter_id'=>$docter_id])->update($setting);
  546. } else {
  547. DocterSetting::insert($setting);
  548. }
  549. return apiReturn(200,'ok');
  550. }
  551. //获取周排班模板
  552. public function getWeekSchedule()
  553. {
  554. $docter_id = request('docter_id',1);
  555. $org_id = request('org_id',1);
  556. $type = request('type',2);
  557. $role = request('role',2);
  558. if(empty($docter_id) || empty($type)){
  559. return apiReturn(604,'缺少必要参数');
  560. }
  561. $docter_id = 1;
  562. $docter_setting = DocterSetting::where(['docter_id'=>$docter_id,'type'=>$type])->first();
  563. $times = [];
  564. if(!empty($docter_setting)){
  565. $time_period = object_array(json_decode($docter_setting->service_time));
  566. $times[] = TimePeriod::where(['docter_id'=>$docter_id])->whereBetween('end_time_period',[intval($time_period[0]['startTime']),intval($time_period[0]['endTime'])])->pluck('id')->toArray();
  567. $times[] = TimePeriod::where(['docter_id'=>$docter_id])->whereBetween('end_time_period',[intval($time_period[1]['startTime']),intval($time_period[1]['endTime'])])->pluck('id')->toArray();
  568. $times[] = TimePeriod::where(['docter_id'=>$docter_id])->whereBetween('end_time_period',[intval($time_period[2]['startTime']),intval($time_period[2]['endTime'])])->pluck('id')->toArray();
  569. }
  570. if(count($times) < 3){
  571. dd('no have times');
  572. }
  573. //周字段映射
  574. $week_arr = ['monday','tuesday','wednesday','thursday','friday','saturday','sunday'];
  575. $data = [
  576. [
  577. 'date'=>"上午",
  578. 'monday'=>false,
  579. 'tuesday'=>false,
  580. 'wednesday'=>false,
  581. 'thursday'=>false,
  582. 'friday'=>false,
  583. 'saturday'=>false,
  584. 'sunday'=>false,
  585. ],
  586. [
  587. 'date'=>"下午",
  588. 'monday'=>false,
  589. 'tuesday'=>false,
  590. 'wednesday'=>false,
  591. 'thursday'=>false,
  592. 'friday'=>false,
  593. 'saturday'=>false,
  594. 'sunday'=>false,
  595. ],
  596. [
  597. 'date'=>"晚上",
  598. 'monday'=>false,
  599. 'tuesday'=>false,
  600. 'wednesday'=>false,
  601. 'thursday'=>false,
  602. 'friday'=>false,
  603. 'saturday'=>false,
  604. 'sunday'=>false,
  605. ]
  606. ];
  607. if($role == 2){
  608. for ($i=0;$i<6;$i++){
  609. for($j=0;$j<=2;$j++){
  610. $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();
  611. $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();
  612. if($is_self_have){
  613. $data[$j][$week_arr[$i]] = true;
  614. }
  615. if($is_other_have){
  616. $data[$j][$week_arr[$i]] = 'other';
  617. }
  618. }
  619. }
  620. } else {
  621. for ($i=0;$i<6;$i++){
  622. for($j=0;$j<=2;$j++){
  623. $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();
  624. $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();
  625. if($is_self_have){
  626. $data[$j][$week_arr[$i]] = true;
  627. }
  628. if($is_other_have){
  629. $data[$j][$week_arr[$i]] = 'other';
  630. }
  631. }
  632. }
  633. }
  634. $name = Docter::where('id',$docter_id)->value('name');
  635. $shcedule_data['docter'] = $data;
  636. $shcedule_data['name'] = $name;
  637. $shcedule_data['role'] = $role;
  638. $shcedule_data['user_id'] = $docter_id;
  639. return apiReturn(200,'ok',$shcedule_data);
  640. }
  641. //设置周排班模板
  642. public function setWeekSchedule()
  643. {
  644. $docter_id = request('docter_id',1);
  645. $org_id = request('org_id',1);
  646. $type = request('type',2);
  647. if(empty($docter_id) || empty($org_id) || empty($type)){
  648. return apiReturn(601,'缺少必要参数');
  649. }
  650. $docter_setting = DocterSetting::where(['docter_id'=>$docter_id])->first();
  651. $data = [
  652. [
  653. 'date'=>"上午",
  654. 'monday'=>false,
  655. 'tuesday'=>true,
  656. 'wednesday'=>false,
  657. 'thursday'=>false,
  658. 'friday'=>true,
  659. 'saturday'=>false,
  660. 'sunday'=>false,
  661. ],
  662. [
  663. 'date'=>"下午",
  664. 'monday'=>false,
  665. 'tuesday'=>false,
  666. 'wednesday'=>false,
  667. 'thursday'=>false,
  668. 'friday'=>false,
  669. 'saturday'=>true,
  670. 'sunday'=>false,
  671. ],
  672. [
  673. 'date'=>"晚上",
  674. 'monday'=>true,
  675. 'tuesday'=>true,
  676. 'wednesday'=>false,
  677. 'thursday'=>false,
  678. 'friday'=>false,
  679. 'saturday'=>false,
  680. 'sunday'=>false,
  681. ]
  682. ];
  683. if(!empty($docter_setting)){
  684. $time_period = object_array(json_decode($docter_setting->service_time));
  685. $times[] = TimePeriod::where(['docter_id'=>$docter_id])->whereBetween('end_time_period',[intval($time_period[0]['startTime']),intval($time_period[0]['endTime'])])->pluck('id')->toArray();
  686. $times[] = TimePeriod::where(['docter_id'=>$docter_id])->whereBetween('end_time_period',[intval($time_period[1]['startTime']),intval($time_period[1]['endTime'])])->pluck('id')->toArray();
  687. $times[] = TimePeriod::where(['docter_id'=>$docter_id])->whereBetween('end_time_period',[intval($time_period[2]['startTime']),intval($time_period[2]['endTime'])])->pluck('id')->toArray();
  688. }
  689. $week_data = [
  690. 'schedule_type'=>$type,
  691. 'organization_id'=>$org_id,
  692. 'docter_id'=>$docter_id
  693. ];
  694. $k = 0;
  695. DB::beginTransaction();
  696. // $data[0] = array_values(object_array(json_decode($data[0])));
  697. // $data[1] = array_values(object_array(json_decode($data[1])));
  698. // $data[2] = array_values(object_array(json_decode($data[2])));
  699. $data[0] = array_values($data[0]);
  700. $data[1] = array_values($data[1]);
  701. $data[2] = array_values($data[2]);
  702. try {
  703. for($i=0;$i<=2;$i++){
  704. $schedule_data = $data[$i];
  705. foreach ($schedule_data as $key=>$schedule){
  706. if($key == 0) continue;
  707. $week_data ['type'] = $i+1;
  708. $week_data ['week'] = $key;
  709. if($schedule == true){
  710. // echo '时间列类型'.($i+1).'----'.$key.'星期数'.'<br>';
  711. foreach ($times[$i] as $id){
  712. $week_data['time_period_id'] = $id;
  713. $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');
  714. $is = $is_have?'有':'沒有';
  715. // echo '时间段id'.$id.'----'.$is.'</br>';
  716. if($is_have) continue;
  717. $k++;
  718. WeekSchedule::insert($week_data);
  719. }
  720. } else {
  721. $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');
  722. 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();
  723. }
  724. }
  725. }
  726. DB::commit();
  727. } catch (\Exception $e){
  728. DB::rollBack();
  729. return apiReturn(602,$e->getLine().'行'.$e->getMessage());
  730. }
  731. return apiReturn(200,'ok',$k);
  732. }
  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. $docter_setting = DocterSetting::where(['docter_id'=>$docter_id])->first();
  747. $self_schedule = SelfSchedule::where(['docter_id'=>$docter_id,'organization_id'=>$org_id])->whereBetween('schedule_date',[$start_time,$end_time])->distinct('type')->get(['type','week'])->GroupBy('week')->toArray();
  748. $week_schedule = WeekSchedule::where(['docter_id'=>$docter_id,'organization_id'=>$org_id])->orderby('week')->distinct('type')->get(['type','week'])->GroupBy('week')->toArray();
  749. for ($i=1;$i<=7;$i++){
  750. $s = [];
  751. $w=[];
  752. if(!empty($self_schedule[$i])){
  753. $s =array_column($self_schedule[$i],'type');
  754. }
  755. if(!empty($week_schedule[$i])){
  756. $w =array_column($week_schedule[$i],'type');
  757. }
  758. if(!empty($s) || !empty($w)){
  759. $sn = $s+$w;
  760. $all_schedule[$i] = $sn;
  761. } else {
  762. $all_schedule[$i] = [];
  763. }
  764. }
  765. if(!empty($docter_setting)){
  766. $time_period = object_array(json_decode($docter_setting->service_time));
  767. $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();
  768. $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();
  769. $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();
  770. }
  771. $start_time = strtotime($date);
  772. $month_day = date("t",strtotime($date));
  773. $begainDay = date("d",time()) - 1;
  774. DB::beginTransaction();
  775. try {
  776. for($i=$begainDay;$i<=$month_day;$i++){
  777. $today = $start_time + $i*86400;
  778. $nutoday = intval(date('Ymd',$today));
  779. $week = date('w',$today);
  780. if($week == 0){
  781. $every_day = $all_schedule[7];
  782. } else {
  783. $every_day = $all_schedule[$week];
  784. }
  785. $schedule_data = ['docter_id'=>$docter_id,'schedule_date'=>date('Y-m-d',$today),'schedule_day'=>$nutoday,'organization_id'=>$org_id];
  786. $is_have_schedule = Schedule::where(['docter_id'=>$docter_id,'schedule_date'=>date('Y-m-d',$today),'organization_id'=>$org_id])->first();
  787. dd($is_have_schedule);
  788. $schedule_id = Schedule::insertGetId($schedule_data);
  789. foreach ($every_day as $type){
  790. foreach ($times[$type] as $tp){
  791. $data = ['docter_id'=>$docter_id,'schedule_date'=>date('Y-m-d',$today),'organization_id'=>$org_id,'time_period_id'=>$tp,'type'=>$type,'schedule_id'=>$schedule_id];
  792. SchedulePeriod::insert($data);
  793. }
  794. }
  795. DB::commit();
  796. }
  797. } catch (\Exception $e){
  798. dd('第'.$e->getLine().'行报错: '.$e->getMessage());
  799. DB::rollBack();
  800. return apiReturn('603','插入失败');
  801. }
  802. echo '<pre>';
  803. print_r($self_schedule);
  804. echo '</pre>';
  805. dd($week_schedule);
  806. }
  807. }