From 46a3c1b474abfbba3614848426ca0e0b52fcaa10 Mon Sep 17 00:00:00 2001 From: yanzai Date: Thu, 24 Oct 2024 15:03:32 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E5=AE=A2=E6=9C=8D=E9=A2=84?= =?UTF-8?q?=E7=BA=A6=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Controllers/API/AspNetZhuanController.php | 7 +- .../Controllers/API/H5/OrderController.php | 3 +- .../Controllers/API/Web/OrderController.php | 215 ++++++++++++++++++ Laravel/routes/web.php | 1 + h5/pages/main/index/index.vue | 2 +- h5/pages/main/tjyy/tjyy.vue | 1 - 6 files changed, 225 insertions(+), 4 deletions(-) diff --git a/Laravel/app/Http/Controllers/API/AspNetZhuanController.php b/Laravel/app/Http/Controllers/API/AspNetZhuanController.php index f2c6fb8..bd0559e 100644 --- a/Laravel/app/Http/Controllers/API/AspNetZhuanController.php +++ b/Laravel/app/Http/Controllers/API/AspNetZhuanController.php @@ -64,9 +64,14 @@ class AspNetZhuanController extends Controller { self::RequestLog($url, [], $mark, '.Net转发'); $response = Http::get($url); + if($mark=="短信发送"){ + Log::info( $response->body()); + return true; + } + if ($response->successful()) { $res = $response->json(); - Log::info($res); + self::$request->response_data = json_encode($res, JSON_UNESCAPED_UNICODE); self::$request->save(); diff --git a/Laravel/app/Http/Controllers/API/H5/OrderController.php b/Laravel/app/Http/Controllers/API/H5/OrderController.php index c2b12cf..c4342c7 100644 --- a/Laravel/app/Http/Controllers/API/H5/OrderController.php +++ b/Laravel/app/Http/Controllers/API/H5/OrderController.php @@ -414,6 +414,7 @@ class OrderController extends Controller return \Yz::echoError1('操作失败'); } } + //订单改约 public function ChangeAppointment() { @@ -594,7 +595,7 @@ class OrderController extends Controller $is_sendMsg=DB::table('configs')->where(['label' => '预约完成短信通知'])->first(); if(!!$is_sendMsg and $is_sendMsg->value==1){ $asp=new AspNetZhuanController(); - Tools::SendMsg($cha->hospital_id,$cha->phone,$cha->name,$cha->appointment_date.' '.substr($cha->appointment_time, 0, 5)); + $asp::SendMsg($cha->hospital_id,$cha->phone,$cha->name,$cha->appointment_date.' '.substr($cha->appointment_time, 0, 5)); } return ['status' => true, 'msg' => "完成"]; } diff --git a/Laravel/app/Http/Controllers/API/Web/OrderController.php b/Laravel/app/Http/Controllers/API/Web/OrderController.php index 89b3287..2a40393 100644 --- a/Laravel/app/Http/Controllers/API/Web/OrderController.php +++ b/Laravel/app/Http/Controllers/API/Web/OrderController.php @@ -239,6 +239,221 @@ class OrderController extends Controller return \Yz::echoError1('操作失败'); } } + //客服预约,只占用号源 + public function CreateYuYueOrder() + { + $hospital_id = request('hospital'); + + $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');//号源id + $doctor = request('doctor');//预约的医生名字 + $appdoctor = request('appdoctor');//协助预约的医生名字 + $person= request('person'); //sex,birthday,married,name,id_number,phone + + if (!isset($hospital_id)) return \Yz::echoError1('医院id不能为空'); + if (!isset($type)) return \Yz::echoError1('type体检类型不能为空'); + if ($type != 1 && $type != 2) { + return \Yz::echoError1('type参数,体检类型错误'); + } + if (!isset($plan_id)) return \Yz::echoError1('号源id不能为空'); + if ($type == 2 and !isset($group_id)) return \Yz::echoError1('团检,group_id不能为空'); + if ($type == 1 and isset($group_id)) return \Yz::echoError1('体检类型:个检 与group_id冲突'); + + + $title = "自选项目"; + $price = 0; + $true_price = 0;//订单真实支付金额 + $buy_info = [ + 'combo' => [ + 'id' => 0, + 'name' => $title, + 'price' => 0, + ], + 'items' => [], + 'group' => [ + 'id' => '', + ], + 'nmr_list'=>[] + ]; + //如果是套餐 + $TJ_Leixing_id=1;//存储用体检类型 + $checkup_type_id = false; //体检类型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("套餐不存在"); + if (!isset($combo_info->checkup_type_id)) return \Yz::echoError1("套餐未关联体检类型"); + $checkup_type_id = $combo_info->checkup_type_id; + $TJ_Leixing_id=$checkup_type_id; + $price += $combo_info->price; + $title = $combo_info->name; + $buy_info['combo'] = [ + 'id' => $combo_info->combo_id, + 'name' => $combo_info->name, + 'price' => $combo_info->price, + ]; + //如果有影像科,则存储在nmr_list字段 + $comboItem=DB::table('combo_items')->where(['combo_id' => $combo_id, 'status' => 1,'keshi_name'=>'影像科'])->get(); + if(count($comboItem)>0){ + foreach ($comboItem as $item){ + $buy_info['nmr_list'][]=[ + 'item_id' => $item->item_id, + 'name' => $item->name, + ]; + } + } + } + + //如果有自选项目 + $items_list = []; + if (count($item_ids) != 0) { + $items_list = DB::table('items')->whereIn('item_id', $item_ids)->where(['status' => 1])->get(); + $existingIds = []; + foreach ($items_list as $item) { + $price += $item->price; + $existingIds[] = $item->item_id; + $buy_info['items'][] = [ + 'id' => $item->item_id, + 'name' => $item->name, + 'price' => $item->price + ]; + //如果有影像科,则存储在nmr_list字段 + if($item->keshi_name=='影像科'){ + $buy_info['nmr_list'][]=[ + 'item_id' => $item->item_id, + 'name' => $item->name, + ]; + } + } + $missingIds = array_diff($item_ids, $existingIds); + if (count($missingIds) > 0) return \Yz::echoError1("部分自选项目不可用,Id:" . implode(', ', $missingIds)); + } + $true_price = $price; + //如果是团检 + $group_info = false; + if ($type == 2) { + $P = new PersonController(); + $data = [ + '电话号码' => null, + '证件号码' => null, + '预约Id' => $group_id + ]; + $group_info = $P->group_info($hospital_id, $data); + $group_info = $group_info[0]; + $buy_info['group'] = [ + 'id' => $group_id, + 'combo_name' => $group_info['combo_name'], + 'combo_id' => $group_info['combo_id'], + 'group_name' => $group_info['group_name'], + 'items' => $group_info['items'], + 'group_id' => $group_info['group_id'], + ]; + $TJ_Leixing_id=$group_info['checkup_type_id']; + $title = "单位团检" . $group_info['combo_name']; + $price = $price + $group_info['sixi_zong_ji_jin_e']; + $need_pay = ($price - $group_info['tongshou_xiane']) > 0 ? $price - $group_info['tongshou_xiane'] : 0; + //团检订单金额为减去统收后的金的 + $price = $need_pay; + $true_price = $need_pay; + + //如果有影像科,则存储在nmr_list字段 + $all_items = DB::table('items')->where(['status' => 1,'keshi_name'=>'影像科'])->get(); + foreach ($group_info['items'] as $item) { + foreach ($all_items as $it) { + if ($it->item_id == $item['id']) { + $buy_info['nmr_list'][]=[ + 'item_id' => $item->item_id, + 'name' => $item->name, + ]; + } + } + } + + } + + //调用思信接口判断各个项目是否可用 + $check_items = []; + foreach ($item_ids as $item_id) { + $check_items[] = ['Id' => $item_id]; + } + if ((isset($combo_id) and $combo_id <> 0) || count($check_items) != 0) { + $item_check = self::item_check($hospital_id, [ + '人员信息列表' => [[ + "序号" => 0, + "性别" => $person['sex'] == 1 ? '男' : '女', + "年龄" => floor((time() - strtotime($person['birthday'])) / 86400 / 360), + "婚姻状态" => $person['married']== 1 ? '已婚' : '未婚', + ]], + '套餐Id' => $combo_id == 0 ? null : $combo_id, + '可选项目信息' => $check_items, + ]); + if (count($item_check['data']) != 1) { + return \Yz::echoError1("体检系统提示:" . $item_check['message']); + } + } + + //检查号源是否可用 + $plan = new PlanController(); + $plan_check = $plan->CheckPlan($plan_id, $hospital_id, $type, $person['sex'], $price, $checkup_type_id); + if ($plan_check['status'] === false) return \Yz::echoError1($plan_check['msg']); + $plan = $plan_check['plan']; + + + //如果是团检 判断号源在 团检登记人的有效时间范围内 + $plan_datetime = $plan->date . ' ' . $plan->time; + if (!!$group_info) { + if (!($plan_datetime > $group_info['start_time'] . ' 00:00:00' and $plan_datetime < $group_info['end_time'] . ' 23:59:59')) { + return \Yz::echoError1("预约日期不在单位有效时间范围内,请重新选择"); + } + } + + + //构建订单号 + $order_num = $this->generateOrderNumber(); + $data = [ + 'title' => $title, + 'type' => $type, + 'source' => 'web', + 'web_user_id' =>0, + 'checkup_type_id'=>$TJ_Leixing_id, + 'person_id' => 0, + 'name' => $person['name'], + 'id_number' => $person['id_number'], + 'buy_info' => json_encode($buy_info, JSON_UNESCAPED_UNICODE), + 'price' => $price, + 'true_price' => $true_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, + 'doctor' => $doctor, + 'appdoctor'=>$appdoctor, + 'phone' => $person['phone'], + 'sex' => $person['sex'], + 'birthday' => $person['birthday'], + 'married' => $person['married'], + ]; + DB::beginTransaction(); + $insert = DB::table('orders_yuyue')->insertGetId($data); + $up_plan = DB::table('plans')->where(['id' => $plan->id, 'status' => 1])->update([ + 'status' => 2 + ]); + if ($insert and $up_plan) { + DB::commit(); + + return \Yz::return(true, "操作成功", ['orderid'=>$insert]); + } else { + DB::rollBack(); + return \Yz::echoError1('操作失败'); + } + } public function item_check($hospital, $data) { $peis = new PEISApiController(); diff --git a/Laravel/routes/web.php b/Laravel/routes/web.php index d298243..22c3e97 100644 --- a/Laravel/routes/web.php +++ b/Laravel/routes/web.php @@ -85,6 +85,7 @@ Route::group(['prefix' => 'api/Web'], function () { Route::post('/BuyInfo', 'App\Http\Controllers\API\Web\ComboController@BuyInfo');//Web购买详情 Route::post('/ItemGetList', 'App\Http\Controllers\API\Web\ItemController@GetList');//Web套餐列表 Route::post('/Create', 'App\Http\Controllers\API\Web\OrderController@Create');//Web套餐列表 + Route::post('/CreateYuYueOrder', 'App\Http\Controllers\API\Web\OrderController@CreateYuYueOrder');//客服预约 }); //对外------ diff --git a/h5/pages/main/index/index.vue b/h5/pages/main/index/index.vue index 5fca1ac..952cc28 100644 --- a/h5/pages/main/index/index.vue +++ b/h5/pages/main/index/index.vue @@ -281,7 +281,7 @@ - 10231704 + 10241102 diff --git a/h5/pages/main/tjyy/tjyy.vue b/h5/pages/main/tjyy/tjyy.vue index fe768f1..c7a1872 100755 --- a/h5/pages/main/tjyy/tjyy.vue +++ b/h5/pages/main/tjyy/tjyy.vue @@ -289,7 +289,6 @@ const comfrimyy = async () => { console.log(obj); const response = await $api("OrderCreate", obj); - return; $response(response, () => { if (response.status) { if (response.data.action == "pay") {