diff --git a/Laravel/app/Http/Controllers/API/H5/OrderController.php b/Laravel/app/Http/Controllers/API/H5/OrderController.php index 3f35be0..6a94f63 100644 --- a/Laravel/app/Http/Controllers/API/H5/OrderController.php +++ b/Laravel/app/Http/Controllers/API/H5/OrderController.php @@ -14,19 +14,19 @@ class OrderController extends Controller { // status 1-待支付 2-已预约 3-交易关闭 4-已完成 5-已退款 $openid = $request->post('openid'); - $user=DB::table('web_users')->where(['openid'=>$openid,'is_del'=>0])->first(); - if(!$user) return \Yz::echoError1("openid对应用户不存在"); - $OrderList=DB::table('orders') - ->select('id','title','status','name','appointment_time as time','order_number as order', - DB::raw("CASE WHEN type = 1 THEN '个检' WHEN type = 2 THEN '团检' ELSE 'unknown' END as type"), - 'price','true_price','pay_time','refund_time','created_at') - ->where(['web_user_id'=>$user->id])->get(); - $WaitingPaymentTime=config('app.globals.WaitingPaymentTime');//支付等待時間 - foreach ($OrderList as $key=>$list){ - if($list->status==1){ + $user = DB::table('web_users')->where(['openid' => $openid, 'is_del' => 0])->first(); + if (!$user) return \Yz::echoError1("openid对应用户不存在"); + $OrderList = DB::table('orders') + ->select('id', 'title', 'status', 'name', 'appointment_time as time', 'order_number as order', + DB::raw("CASE WHEN type = 1 THEN '个检' WHEN type = 2 THEN '团检' ELSE 'unknown' END as type"), + 'price', 'true_price', 'pay_time', 'refund_time', 'created_at') + ->where(['web_user_id' => $user->id])->get(); + $WaitingPaymentTime = config('app.globals.WaitingPaymentTime');//支付等待時間 + foreach ($OrderList as $key => $list) { + if ($list->status == 1) { $datetime = new DateTime($list->created_at); $timestamp = $datetime->getTimestamp(); - $list->end_time=$timestamp + (60 * $WaitingPaymentTime); + $list->end_time = $timestamp + (60 * $WaitingPaymentTime); } } $list = [[ @@ -89,4 +89,133 @@ class OrderController extends Controller 'list' => $OrderList ]); } + + //创建订单 + public function Create() + { + $hospital_id = request('hospital'); + $openid = request('openid'); + $person_id = request('person_id'); + $combo_id = request('combo_id'); + $type = request('type');//1个检2团检 + $group_id = request('group_id');//团检id + $item_ids = request('item_ids');//自选item的ids + $plan_id = request('plan_id');//自选item的ids + + $user = DB::table('web_users')->where(['openid' => $openid, 'status' => 1, 'is_del' => 0])->first(); + if (!$user) return \Yz::echoError1('用户不存在'); + $person = DB::table('web_user_person')->where(['id' => $person_id, 'is_del' => 0])->first(); + if (!$person) return \Yz::echoError1('体检人不存在'); + $title = "自选项目"; + $price = 0; + $buy_info = [ + 'combo' => [ + 'id' => 0, + 'name' => $title, + 'price' => 0, + ], + 'items' => [], + 'group' => [ + 'id' => '', + ], + ]; + //如果是套餐 + if (isset($combo_id) and $combo_id <> 0) { + $combo_info = DB::table('combos')->where(['combo_id' => $combo_id, 'status' => 1])->first(); + if(!$combo_info) return \Yz::echoError1("套餐不存在"); + $price += $combo_info->price; + $title = $combo_info->name; + $buy_info['combo'] = [ + 'id' => $combo_info->combo_id, + 'name' => $combo_info->name, + 'price' => $combo_info->price, + ]; + } + + //如果有自选项目 + $items_list = []; + if (count($item_ids) != 0) { + $items_list = DB::table('items')->whereIn('item_id', $item_ids)->where(['status' => 1])->get(); + foreach ($items_list as $item) { + $price += $item->price; + $buy_info['items'][] = [ + 'id' => $item->item_id, + 'name' => $item->name, + 'price' => $item->price + ]; + } + } + //判断号源是否可用vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv + $plan = DB::table('plans')->where(['id' => $plan_id, 'hospital_id' => $hospital_id, 'status' => 1, 'is_del' => 0])->first(); + if (!$plan) return \Yz::echoError1("号源不可用"); + //判断个检/团检类型 + if ($plan->use_type <> 0 and $plan->use_type <> $type) { + $type_temp = ''; + if ($plan->use_type == 1) $type_temp = '个检'; + if ($plan->use_type == 2) $type_temp = '团检'; + return \Yz::echoError1("此号源为" . $type_temp . "号源,不可用"); + } + //判断是否是预留号源 + if ($plan->type <> 1) return \Yz::echoError1("此号源为预留号源,不可用"); + //判断是否是vip + //判断性别 + if ($plan->sex <> 0 and $plan->sex <> $person->sex) return \Yz::echoError1("此号源性别与体检人性别不符,不可用"); + //判断体检类型checkup_type + //判断金额 + if ($plan->use_type == 1 and $plan->amount_limit1 <> 0) { + if ($price < $plan->amount_limit1) return \Yz::echoError1("未达到此号源限制的金额,不可用"); + } + if ($plan->use_type == 2 and $plan->amount_limit2 <> 0) { + if ($price < $plan->amount_limit2) return \Yz::echoError1("未达到此号源限制的金额,不可用"); + } + //判断时间是否过期 + $plan_datetime=$plan->date.' '.$plan->time; + if($plan_datetime < date('Y-m-d H:i:s')) return \Yz::echoError1("号源已过期,不可用"); + //判断号源是否可用^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + + //构建订单号 + $order_num=$this->generateOrderNumber(); + $data=[ + 'title'=>$title, + 'type'=>$type, + 'web_user_id'=>$user->id, + 'person_id'=>$person->id, + 'name'=>$person->name, + 'id_number'=>$person->id_number, + 'buy_info'=>json_encode($buy_info, JSON_UNESCAPED_UNICODE), + 'price'=>$price, + 'true_price'=>$price, + 'order_number'=>$order_num, + 'status'=>1, + 'appointment_date'=>$plan->date, + 'appointment_time'=>$plan->time, + 'plan_id'=>$plan->id, + 'plan_number'=>$plan->plan_number, + 'combo_id'=>$combo_id, + 'hospital_id'=>$hospital_id, + 'phone'=>$person->phone, + 'sex'=>$person->sex, + 'birthday'=>$person->birthday, + 'married'=>$person->married, + ]; + $insert=DB::table('orders')->insert($data); + if($insert){ + return \Yz::return(true,"操作成功",[]); + }else{ + return \Yz::echoError1("创建订单失败"); + } + } + + function generateOrderNumber() { + // 获取当前时间的时间戳(精确到毫秒) + $timestamp = round(microtime(true) * 1000); + + // 生成一个随机数(可以根据需要调整长度) + $randomPart = substr(str_shuffle("0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"), 0, 6); + + // 拼接时间戳和随机部分 + $orderNumber = date("YmdHis", $timestamp / 1000) . substr($timestamp % 1000, -3) . $randomPart; + + return $orderNumber; + } } diff --git a/Laravel/routes/web.php b/Laravel/routes/web.php index 30df08a..fdddd7e 100644 --- a/Laravel/routes/web.php +++ b/Laravel/routes/web.php @@ -38,6 +38,7 @@ Route::group(['prefix' => 'H5'], function () { Route::post('/GetReadme', 'App\Http\Controllers\API\H5\HospitalExtraController@GetReadme');//获取注意事项 Route::post('/GetMonthPlanCount', 'App\Http\Controllers\API\H5\PlanController@GetMonthPlanCount');//获取本月每日剩余号源数量 Route::post('/GetDayPlanList', 'App\Http\Controllers\API\H5\PlanController@GetDayPlanList');//获取某日号源数量 + Route::post('/OrderCreate', 'App\Http\Controllers\API\H5\OrderController@Create');//创建订单 });