From d468b960bce3645004529cffd01665c2f9d7f817 Mon Sep 17 00:00:00 2001 From: yanzai Date: Mon, 4 Nov 2024 19:24:56 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A4=84=E7=90=86bug,=E4=BA=8C=E7=BA=BF?= =?UTF-8?q?=E5=8F=B7=E6=BA=90=E5=88=86=E5=BC=80=E9=A2=84=E7=BA=A6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Controllers/API/H5/ComboController.php | 38 +++-- .../Controllers/API/H5/OrderController.php | 134 ++++++++++++++++-- Laravel/config/app.php | 4 +- h5/pages/main/ctime/ctime.vue | 2 +- h5/pages/main/yytjsj/yytjsj.vue | 27 ++-- 5 files changed, 177 insertions(+), 28 deletions(-) diff --git a/Laravel/app/Http/Controllers/API/H5/ComboController.php b/Laravel/app/Http/Controllers/API/H5/ComboController.php index 8294877..3e529c1 100644 --- a/Laravel/app/Http/Controllers/API/H5/ComboController.php +++ b/Laravel/app/Http/Controllers/API/H5/ComboController.php @@ -458,20 +458,38 @@ select combo_id as c_id,count(*) as sale_count from orders where status in(2,4) } } - $temp_nmr=''; - - foreach ($nmr_list as $key=>$nmr){ - $temp_nmr=$temp_nmr.$nmr['name']."/"; + $temp_nmr=[]; + $keywords = ['核磁', 'CT', 'DR', '钼靶']; + + foreach ($nmr_list as $key=>$item){ + foreach ($keywords as $index => $keyword) { + if (strpos($item['name'], $keyword) !== false) { + // 如果找到关键字,且结果数组中还没有该关键字的记录,则初始化 + if (!isset($temp_nmr[$index])) { + $temp_nmr[$index] = [ + 'item_id' => $item['item_id'], + 'name' => $item['name'], + 'price' => $item['price'], + ]; + } else { + // 如果已经存在记录,只拼接名称 + $temp_nmr[$index]['name'] .= ' / ' . $item['name']; + } + } + } } - if(count($nmr_list)>0){ - $nmr_list=[ - ['item_id' => $nmr_list[0]['item_id'], - 'price' => $nmr_list[0]['price'], - 'name' =>$temp_nmr] - + // 将结果数组转换为最终格式 + $finalResult = []; + foreach ($temp_nmr as $index => $data) { + $finalResult[] = [ + 'item_id' => $data['item_id'], + 'name' => $data['name'], + 'price' => $data['price'] ]; } + $nmr_list=$finalResult; + $data = [ diff --git a/Laravel/app/Http/Controllers/API/H5/OrderController.php b/Laravel/app/Http/Controllers/API/H5/OrderController.php index c102d1a..e217ecc 100644 --- a/Laravel/app/Http/Controllers/API/H5/OrderController.php +++ b/Laravel/app/Http/Controllers/API/H5/OrderController.php @@ -404,8 +404,8 @@ class OrderController extends Controller //开始预约二线 $nowDateTime=date('Y-m-d H:i:s'); if (!empty($plan_nmr_appointment_info)) { - // foreach ($erxian_info as $key => $plan_nmr) { - $plan_nmr=$plan_nmr_appointment_info[0]; + foreach ($plan_nmr_appointment_info as $key => $plan_nmr) { + //$plan_nmr=$plan_nmr_appointment_info[0]; $sex="未知"; if($person->sex==1) $sex='男'; @@ -434,7 +434,7 @@ class OrderController extends Controller //调用接口预约二线 $erxian_yuyue= $AspNet::ErXian($p_nmr_data, uniqid()); if(!!$erxian_yuyue){ - $plan_nmr_appointment_info[0]['gid']=$erxian_yuyue; + $plan_nmr_appointment_info[$key]['gid']=$erxian_yuyue; $ex_u= DB::table('orders')->where(['id' => $insert])->update([ 'erxian_appointment_info'=>json_encode($plan_nmr_appointment_info, JSON_UNESCAPED_UNICODE), ]); @@ -442,7 +442,7 @@ class OrderController extends Controller }else{ return ['status' => false, 'msg' => "二线预约失败"]; } - // } + } } @@ -508,16 +508,115 @@ class OrderController extends Controller //订单改约 public function ChangeAppointment() { + $AspNet = new AspNetZhuanController(); $orderid = request('orderid'); $plan_id = request('planid'); - $nmr_plan_id = request('nmrPlanid'); + $nmr_info = request('nmr_info'); $doctor = request('doctor'); $orderInfo = DB::table('orders')->where(['id' => $orderid, 'status' => 2])->first(); if (!$orderInfo) return \Yz::echoError1("未找到有效订单"); - $planInfo = DB::table('plans')->where(['id' => $plan_id, 'status' => 1])->first(); - if (!$planInfo) return \Yz::echoError1("所选体检日期号源无效"); + $person = DB::table('web_user_person')->where(['id' => $orderInfo->person_id, 'is_del' => 0])->first(); + if (!$person) return \Yz::echoError1('体检人不存在'); + if ($orderInfo->hospital_id == 1) { + $yyid = 6; + } + if ($orderInfo->hospital_id == 4) { + $yyid = 2; + } //判断核磁号源有效性能,日期范围是否正常,判断核磁新日期时间是否和旧的日期时间一样 - //判断体检日期是否在核磁3天左右 + //判断各个二线直接的跨度是否在设定范围内 + $ErXianKuaDu = config('app.globals.erxian_kuadu'); + $check_erxian_kuadu=$this->checkDatesWithinDays($nmr_info,$ErXianKuaDu); + if(!$check_erxian_kuadu['check_status']) return \Yz::echoError1("所有二线项目预约跨度不应大于".$ErXianKuaDu."天,请重新选择"); + //判断二线号源日期时间是否改变,如果改变校验号源有效性 + $db_nmr_info=json_decode($orderInfo->erxian_appointment_info,true); + foreach ($nmr_info as $key=>$nmr_item){ + foreach ($db_nmr_info as $db_nmr_item){ + if($nmr_item['item_id']==$db_nmr_item['item_id']){ + if(!($nmr_item['date']==$db_nmr_item['date'] and $nmr_item['time']==$db_nmr_item['time'] and $db_nmr_item['gid']<>"")){ + $p_nmr_data = [ + 'item_id' => $nmr_item['item_id'], + 'name' => $nmr_item['name'], + 'date' => $nmr_item['date'], + 'time' => $nmr_item['time'], + 'price' => $nmr_item['price'], + ]; + //调用接口校验号源是否可用 + $erxian_status = $AspNet::ErXian(['YYRQ' => $p_nmr_data['date'], 'YYSJ' => $p_nmr_data['time'], 'yyid' => $yyid, 'action' => 4], uniqid()); + if ($erxian_status !== true) return \Yz::echoError1($p_nmr_data['name'] . '号源不可用,请重新选择'); + } + continue; + } + } + + } + //如果重新选择了体检号源,则检验号源有效性//判断体检日期是否在核磁前N天范围内 + if(isset($plan_id) && $plan_id <> $orderInfo->plan_id){ + $planInfo = DB::table('plans')->where(['id' => $plan_id, 'status' => 1])->first(); + if (!$planInfo) return \Yz::echoError1("所选体检日期号源无效"); + $check_plan_kuadu=$this->checkDatesWithinDays([['date'=>$check_erxian_kuadu['mindate'],'date'=>$planInfo->date]],$ErXianKuaDu); + if(!$check_erxian_kuadu['check_status']) return \Yz::echoError1("体检日期与核磁日期跨度不能大于".$ErXianKuaDu."天,请重新选择"); + } + //如果二线号源校验通过,则先取消再预约新的 + foreach ($nmr_info as $key=>$nmr_item){ + foreach ($db_nmr_info as $key2=> $db_nmr_item){ + if($nmr_item['item_id']==$db_nmr_item['item_id']){ + if(!($nmr_item['date']==$db_nmr_item['date'] and $nmr_item['time']==$db_nmr_item['time'])){ + //先取消 + if($db_nmr_item['gid']<>""){ + $AspNet::ErXian(['id' =>$db_nmr_item['gid'], 'yyid' => $yyid, 'action' => 3], uniqid());//取消 + $db_nmr_info[$key2]['gid']=''; + $ex_u= DB::table('orders')->where(['id' => $orderInfo->id])->update([ + 'erxian_appointment_info'=>json_encode($db_nmr_info, JSON_UNESCAPED_UNICODE), + ]); + } + //再预约新的 + $nowDateTime=date('Y-m-d H:i:s'); + $sex="未知"; + if($person->sex==1) $sex='男'; + if($person->sex==2) $sex='女'; + $p_nmr_data = [ + 'ghzid'=>$person->ghzid, + 'YYRQ'=>$nmr_item['date'], + 'YYSJ'=>$nmr_item['time'], + 'U_SFID'=>$nmr_item['item_id'], + 'U_SFMC'=>$nmr_item['name'], + 'HBXMJE'=>$nmr_item['price'], + 'CJSJ'=>$nowDateTime, + 'YYDH'=>$person->phone, + 'YYXM'=>$person->name, + 'YYXB'=>$sex, + 'YYSR'=>$person->birthday, + 'YYNL'=>Tools::GetAge($person->birthday).'岁' , + 'YYZJ'=>$person->id_number, + 'YYSJ_B'=>$nmr_item['time'].':00', + 'YYSJ_E'=>$nmr_item['time'].':00', + 'YYSJ_BE'=>$nmr_item['time'].'-'.$nmr_item['time'], + 'ZCRQ'=>$nowDateTime, + 'yyid'=>$yyid, + 'action'=>2, + ]; + //调用接口预约二线 + $erxian_yuyue= $AspNet::ErXian($p_nmr_data, uniqid()); + if(!!$erxian_yuyue){ + $db_nmr_info[$key2]['gid']=$erxian_yuyue; + $db_nmr_info[$key2]['date']=$nmr_item['date']; + $db_nmr_info[$key2]['time']=$nmr_item['time']; + $ex_u= DB::table('orders')->where(['id' => $orderInfo->id])->update([ + 'erxian_appointment_info'=>json_encode($db_nmr_info, JSON_UNESCAPED_UNICODE), + ]); + if(!$ex_u) return ['status' => false, 'msg' => "二线预约失败"]; + }else{ + return ['status' => false, 'msg' => "二线预约失败"]; + } + } + continue; + } + } + + } +// var_dump($nmr_info); +// return false; //判断体检日期时间是否和旧的日期时间一样。一样则跳过,不一样则更新 if (isset($plan_id) && $plan_id <> $orderInfo->plan_id) { $peis = new PEISApiController(); @@ -545,6 +644,24 @@ class OrderController extends Controller } return \Yz::echoError1("未更改内容,无需进行此操作"); } + //判断时间跨度 + function checkDatesWithinDays($data,$kuadu) { + // 提取所有日期 + $dates = array_column($data, 'date'); + + // 将日期转换为时间戳 + $timestamps = array_map('strtotime', $dates); + + // 找出最早和最晚的时间戳 + $earliest = min($timestamps); + $latest = max($timestamps); + + // 计算时间差(以天为单位) + $differenceInDays = ($latest - $earliest) / (60 * 60 * 24); + + // 判断时间差是否在3天以内 + return ['check_status'=>$differenceInDays <= $kuadu,'mindate'=> date('Y-m-d H:i:s', $earliest)]; + } public function generateOrderNumber() { @@ -719,6 +836,7 @@ class OrderController extends Controller return ['status' => true, 'msg' => "完成"]; } + //未支付取消订单 public function Cancel() { diff --git a/Laravel/config/app.php b/Laravel/config/app.php index 3a110c6..78fa796 100644 --- a/Laravel/config/app.php +++ b/Laravel/config/app.php @@ -8,7 +8,9 @@ return [ 'PayNotifyUrl' =>"http://124.225.137.54:39080/h5/#/pages/main/order/CheckPay",//支付完成后小程序跳转H5路径 // 'Env'=>'pro', 'Env'=>'dev', - 'Wj_ZheKou'=>1, + 'Wj_ZheKou'=>1,//问卷带出项目,折扣率 + 'erxian_kuadu'=>3//二线时间跨度,单位天 + ], /* diff --git a/h5/pages/main/ctime/ctime.vue b/h5/pages/main/ctime/ctime.vue index a14b64c..8711635 100644 --- a/h5/pages/main/ctime/ctime.vue +++ b/h5/pages/main/ctime/ctime.vue @@ -146,6 +146,7 @@ tj_date.value = orderInfo.value.appointment_date tj_time.value = orderInfo.value.appointment_time + tj_plan_id.value=orderInfo.value.plan_id }); } @@ -350,7 +351,6 @@ doctor: doctor_name.value } console.log(data); - return false const response = await $api("ChangeAppointment", data); uni.hideLoading(); $response(response, () => { diff --git a/h5/pages/main/yytjsj/yytjsj.vue b/h5/pages/main/yytjsj/yytjsj.vue index 9314fe5..1a66313 100755 --- a/h5/pages/main/yytjsj/yytjsj.vue +++ b/h5/pages/main/yytjsj/yytjsj.vue @@ -367,13 +367,15 @@ } if (yytjInfo.value.nmr_list.length > 1 && nmrIndex.value == 0) { if (!yytjInfo.value.doctor_name) { - yytjInfo.value.nmr_list = yytjInfo.value.nmr_list.map((val) => { - return { - ...val, - time: "", - id: "", - }; - }); + // yytjInfo.value.nmr_list = yytjInfo.value.nmr_list.map((val) => { + // return { + // ...val, + // time: "", + // id: "", + // }; + // }); + yytjInfo.value.nmr_list[nmrIndex.value].time = ""; + yytjInfo.value.nmr_list[nmrIndex.value].id = ""; } } time.value = ""; @@ -421,11 +423,20 @@ } } else { // 体检 检查一下 核磁时间 是不是 符合逻辑 - let heci_item = yytjInfo.value.nmr_list[0] + //选出最小的日期 + let minDateItem = yytjInfo.value.nmr_list[0]; + for (let i = 1; i < yytjInfo.value.nmr_list.length; i++) { + if (new Date(yytjInfo.value.nmr_list[i].time.split(' ')[0]) < new Date(minDateItem.time.split(' ')[0])) { + minDateItem = yytjInfo.value.nmr_list[i]; + } + } + //let heci_item = yytjInfo.value.nmr_list[0] + let heci_item = minDateItem if (heci_item.item_id !== -1) { // 是核磁 if (!!heci_item.time) { // 并且选了时间 + let heci_time = new Date(heci_item.time.split(' ')[0]) / 1 let choose_time = new Date(item.date) / 1 let day_check = ''