appointment_type; $date = $request->appointment_date; $merchant_id = $request->m_id?:$request->merchant_id; $owner_m_id = $request->merchant_id; $start_time = $request->start_time; $end_time = $request->end_time; $segment = $request->segment; $name = $request->name; $mobile = $request->mobile; $merchant_user_id = $request->merchant_user_id; if (config('app.debug')) { if (empty($type) || empty($date) || empty($merchant_id) || empty($start_time) || empty($end_time) || empty($merchant_user_id) || empty($owner_m_id)) { return $this->failure('参数不全'); } } if ($type == 'merchant') { $type = MerchantAccount::class; } else { return $this->failure('无效的预约类型'); } //检查日期是否在七天内 $compare_time = CarBon::now()->addDay(15); $input_date = Carbon::parse($date); if ($input_date > $compare_time) { return $this->failure('只能提前7天预约'); } if (Carbon::parse($end_time) < Carbon::parse($start_time)) { return $this->failure('结束时间不能小于开始时间'); } //检查商家是否有开放这段时间 $time = SaasAppointment::where('merchant_id', $merchant_id)->where('appointment_type', $type) ->where('appointment_target_id', $merchant_id) ->whereNotNull('start_time') ->whereNotNull('end_time') ->where('segment', $segment) ->first(); if (!$time) { return $this->failure('此时间段不在商家开放时间内'); } else { if (Carbon::parse($time->end_time) < Carbon::parse($end_time)) { return $this->failure('此时间段不在商家开放时间内'); } if (Carbon::parse($start_time) < Carbon::parse($time->start_time)) { return $this->failure('此时间段不在商家开放时间内'); } } //检查用户今天有没有预约 $user_list = SaasUserAppointment::where('merchant_id', $merchant_id)->where('appointment_date', $date) ->where('appointment_type', $type) ->where('merchant_user_id', $merchant_user_id) ->first(); if ($user_list) { return $this->failure($date . '你已经预约过了,每个用户每天只能预约一次'); } //检查有没有被期它用户预约 $user_list = SaasUserAppointment::where('merchant_id', $merchant_id)->where('appointment_date', $date) ->where('start_time', $start_time)->where('end_time', $end_time) ->first(); if ($user_list) { return $this->failure('此时间段已被其它用户预约'); } $appointment = new SaasUserAppointment(); $appointment->appointment_type = $type; $appointment->name = $name; $appointment->mobile = $mobile; $appointment->appointment_id = $merchant_id; $appointment->appointment_date = $date; $appointment->merchant_id = $merchant_id; $appointment->owner_m_id = $owner_m_id; $appointment->merchant_user_id = $merchant_user_id; $appointment->start_time = $start_time; $appointment->end_time = $end_time; $appointment->save(); $merchant = MerchantAccount::where('id',$merchant_id)->first(); $merchant_user = MerchantUser::where('id',$merchant_user_id)->first(); if($merchant && $merchant->mobile){ $message = '用户'.$appointment->name.' '.$appointment->mobile .'在'.$date.' '.$start_time.'-'.$end_time.'预约了您,请空闲出您的时间'; Message::create([ 'phone' => $merchant->mobile, 'message' => $message, 'confirmed' => 1, 'ip' => request() ? request()->ip() : '127.0.0.1', ]); Messengers::sendSMS($merchant->mobile, $message); }elseif ($merchant && $merchant->email) { $message = '用户'.$appointment->name.' '.$appointment->mobile .'在'.$date.' '.$start_time.'-'.$end_time.'预约了您,请空闲出您的时间'; SendMail::dispatch($message, $merchant->email, 'message')->onQueue('security_code'); } return $this->success('ok'); } catch (\Exception $e) { $this->getError($e); return $this->failure('服务器休息中,请稍后再试'); } } /** * 获取可预约时间列表 * @param Request $request * @return JsonResponse|string */ public function getAppointmentTimeList(Request $request) { try { $type = $request->appointment_type; $date = $request->appointment_date ; if($date == 'undefined' || $date == null){ $date = date('Y-m-d'); } $merchant_id = $request->merchant_id; if ($type == 'merchant') { $type = MerchantAccount::class; } else { return $this->failure('无效的预约类型'); } $merchant_list = SaasAppointment::where('merchant_id', $merchant_id)->where('appointment_type', $type) ->where('appointment_target_id', $merchant_id) ->where('status', 1) ->whereNotNull('start_time')->whereNotNull('end_time') ->get(); if (!$merchant_list->count()) { return $this->failure('此商家未设置预约时间'); } $time = []; foreach ($merchant_list as $key => $val) { $temp_time = Carbon::parse($val->start_time); $emd_time = Carbon::parse($val->end_time); while ($temp_time < $emd_time) { $hard_time = $temp_time; $hard_time_string = $hard_time->format('H:i'); $foot_time = $temp_time->addMinute(30); $foot_time_string = $foot_time->format('H:i'); if($date == date('Y-m-d')){ $now = Carbon::now()->addMinute(30)->format('H:i'); if(Carbon::parse($now) > $hard_time){ continue; } } $time[] = $hard_time_string . '-' . $foot_time_string; $temp_time = $foot_time; $segment[] = $val['segment']; } } $user_list = SaasUserAppointment::where('merchant_id', $merchant_id)->where('appointment_date', $date) ->get(); $list = []; if ($user_list->count()) { $id_list = []; foreach ($user_list as $key => $val) { $a = $val->start_time . '-' . $val->end_time; $id = array_search($a, $time); if ($id !== false) { $id_list[$key] = $id; if ($val->merchant_user_id == $request->merchant_user_id) { $status_list[$id] = 1; } else { $status_list[$id] = 2; } } } foreach ($time as $key => $val) { if (in_array($key, $id_list)) { $temp['time'] = $val; $temp['busy'] = $status_list[$key]; $temp['segment'] = $segment[$key]; $list[] = $temp; } else { $temp['time'] = $val; $temp['busy'] = 0; $temp['segment'] = $segment[$key]; $list[] = $temp; } } } else { foreach ($time as $key => $val) { $temp['time'] = $val; $temp['busy'] = 0; $temp['segment'] = $segment[$key]; $list[] = $temp; } } $carbon = Carbon::now(); $data[] = $carbon->format('Y-m-d'); for ($i = 0; $i <= 5; $i++) { $carbon = $carbon->addDay(1); $data[] = $carbon->format('Y-m-d'); } //是否有预约记录 $has_appointment = SaasUserAppointment::where('merchant_user_id', $request->merchant_user_id) ->where('merchant_id', $merchant_id)->where('appointment_type', MerchantAccount::class) ->where('appointment_id', $merchant_id)->exists()?1:0; return $this->success('ok', compact('list', 'data', 'has_appointment')); } catch (\Exception $e) { $this->getError($e); return $this->failure('服务器休息中,请稍后再试'); } } public function getUserAppointmentList(Request $request) { $merchant_user_id = $request->merchant_user_id; $merchant_id = $request->merchant_id; $list = SaasUserAppointment::where('merchant_user_id', $merchant_user_id) ->where('merchant_id', $merchant_id)->where('appointment_type', MerchantAccount::class) ->where('appointment_id', $merchant_id) ->orderBy('id', 'desc') ->paginate(); return $this->success('ok', $list); } /** * 可预约老师列表 * @param Request $request * @return JsonResponse|string */ public function appointmentMembers(Request $request) { try { $merchant_id = $request->merchant_id; $merchant = MerchantAccount::with('liveAnchor:m_id,name,pic,designation,introduction')->where('id', $merchant_id)->select('id','created_at')->first(); $merchant->m_id = $merchant->id; $merchant->type = 'owner_merchant'; unset($merchant->anchorV2); $members = SaasAppointmentMember::with('liveAnchor:m_id,name,pic,designation,introduction') ->where('owner_m_id', $merchant_id)->where('status', 1) ->orderBy('created_at', 'desc')->selectRaw('*, "merchant" as type')->paginate()->toArray(); $page = $request->input("page"); if ($page == 1 || empty($page)) { array_unshift($members['data'], $merchant); } return $this->success("ok", $members); }catch (\Exception $e){ $this->getError($e); return $this->failure(); } } /** * 可预约老师详情-时间表 * @param Request $request * @param $m_id * @return JsonResponse|void */ public function memberTimeList(Request $request, $m_id) { try { $merchant_user_id = $request->merchant_user_id; $date = $request->input('appointment_date') ; $date = $date?:date('Y-m-d'); $anchor = Anchor::where("m_id", $m_id)->selectRaw('m_id,name,pic,designation,introduction')->first(); if (empty($anchor)) throw new \Exception("商户信息丢失"); //是否有预约记录 $has_appointment = SaasUserAppointment::where('merchant_user_id', $merchant_user_id) ->where('merchant_id', $m_id)->where('appointment_type', MerchantAccount::class) ->where('appointment_id', $m_id)->exists()?1:0; //预约时间表 $merchant_list = SaasAppointment::where('merchant_id', $m_id)->where('appointment_type', MerchantAccount::class) ->where('appointment_target_id', $m_id) ->where('status', 1) ->whereNotNull('start_time')->whereNotNull('end_time') ->get(); if (empty($merchant_list->count())) return $this->failure('此商家未设置预约时间'); $time = []; foreach ($merchant_list as $val) { $temp_time = Carbon::parse($val->start_time); $emd_time = Carbon::parse($val->end_time); $add_time = ($val->time_type == 'half_hour')?30:60; while ($temp_time < $emd_time) { $hard_time = $temp_time; $hard_time_string = $hard_time->format('H:i'); $foot_time = $temp_time->addMinute($add_time); $foot_time_string = $foot_time->format('H:i'); if($date == date('Y-m-d')){ $now = Carbon::now()->addMinute($add_time)->format('H:i'); if(Carbon::parse($now) > $hard_time){ continue; } } $time[] = $hard_time_string . '-' . $foot_time_string; $temp_time = $foot_time; $segment[] = $val['segment']; } } $user_list = SaasUserAppointment::where('merchant_id', $m_id)->where('appointment_date', $date) ->get(); $list = []; if ($user_list->count()) { $id_list = []; foreach ($user_list as $key => $val) { $a = $val->start_time . '-' . $val->end_time; $id = array_search($a, $time); if ($id !== false) { $id_list[$key] = $id; if ($val->merchant_user_id == $request->merchant_user_id) { $status_list[$id] = 1; } else { $status_list[$id] = 2; } } } foreach ($time as $key => $val) { if (in_array($key, $id_list)) { $temp['time'] = $val; $temp['busy'] = $status_list[$key]; $temp['segment'] = $segment[$key]; $list[] = $temp; } else { $temp['time'] = $val; $temp['busy'] = 0; $temp['segment'] = $segment[$key]; $list[] = $temp; } } } else { foreach ($time as $key => $val) { $temp['time'] = $val; $temp['busy'] = 0; $temp['segment'] = $segment[$key]; $list[] = $temp; } } //预约日期表 for ($i = 0; $i <= 14; $i++) { $data[] = date('Y-m-d', strtotime('+'.$i.' days')); } return $this->success('ok', compact('has_appointment', 'data', 'list', 'anchor')); }catch (\Exception $e){ $this->getError($e); return $this->failure(); } } }