From bacf277042147cf57f5502b6fa67b65984ed0d8c Mon Sep 17 00:00:00 2001 From: yanzai Date: Thu, 20 Feb 2025 17:49:08 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9B=B4=E6=96=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Http/Controllers/API/ApiMapController.php | 3 + .../Controllers/API/H5/ComboController.php | 2 + .../Controllers/API/H5/OrderController.php | 10 +- .../Controllers/API/H5/OrderNewController.php | 84 ++++++++++++- .../API/H5/TransferCodeController.php | 41 +++++++ .../API/Internal/TransferCodeController.php | 9 +- Laravel/app/Lib/Tools.php | 11 ++ Laravel/routes/web.php | 4 + h5/pages/main/combo/combo.vue | 8 +- h5/pages/main/order/order.vue | 4 +- h5/pages/main/order/src/order.vue | 114 ++++++++++++++++-- h5/pages/main/question/question/question.vue | 19 ++- h5/pages/main/tj/tjzx.vue | 6 +- h5/pages/user/choose/choose.vue | 35 +++++- 14 files changed, 315 insertions(+), 35 deletions(-) create mode 100644 Laravel/app/Http/Controllers/API/H5/TransferCodeController.php diff --git a/Laravel/app/Http/Controllers/API/ApiMapController.php b/Laravel/app/Http/Controllers/API/ApiMapController.php index 0b48cb0..022852a 100644 --- a/Laravel/app/Http/Controllers/API/ApiMapController.php +++ b/Laravel/app/Http/Controllers/API/ApiMapController.php @@ -89,6 +89,9 @@ class ApiMapController extends Controller 'BaseInfo' => $base_url . '/api/H5/BaseInfo', // 基础信息 'CreateNewOrder' => $base_url . '/api/H5/CreateNewOrder', // 创建订单(新) 'StartYuYue' => $base_url . '/api/H5/StartYuYue', // 创建订单(新) + 'CreateTransferCode' => $base_url . '/api/H5/CreateTransferCode', // 创建转赠码 + 'OrderZhuanZeng' => $base_url . '/api/H5/OrderZhuanZeng', // 订单转赠 + 'OrderReceiveZhuanZeng' => $base_url . '/api/H5/OrderReceiveZhuanZeng', // 接受订单转赠 ]; } diff --git a/Laravel/app/Http/Controllers/API/H5/ComboController.php b/Laravel/app/Http/Controllers/API/H5/ComboController.php index 22a71cd..5dc662f 100644 --- a/Laravel/app/Http/Controllers/API/H5/ComboController.php +++ b/Laravel/app/Http/Controllers/API/H5/ComboController.php @@ -91,6 +91,8 @@ class ComboController extends Controller if (isset($combo_type)) { $sql = $sql . " and a.type_id=? "; $canshu[] = $combo_type; + }else{ + $sql = $sql. " and a.type_id<>19 "; } if (isset($combo_crowd)) { $sql = $sql . " and a.crowd_id=? "; diff --git a/Laravel/app/Http/Controllers/API/H5/OrderController.php b/Laravel/app/Http/Controllers/API/H5/OrderController.php index dbe83c2..3e1a5f5 100644 --- a/Laravel/app/Http/Controllers/API/H5/OrderController.php +++ b/Laravel/app/Http/Controllers/API/H5/OrderController.php @@ -31,7 +31,7 @@ class OrderController extends Controller $OrderList = DB::table('orders'); $OrderList=$OrderList - ->select('id', 'title','buy_info','plan_id', 'checkup_type_id','hunjian_status','status', 'name','appointment_date as date', 'appointment_time as time', 'order_number as order','appointment_number', + ->select('id', 'source','title','person_id','buy_info','plan_id', 'checkup_type_id','hunjian_status','status', 'name','appointment_date as date', 'appointment_time as time', 'order_number as order','appointment_number','transfer_type', 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'); if(isset($searchInfo['dateRange'])){ @@ -84,6 +84,14 @@ class OrderController extends Controller $order_info->buy_info = json_decode($order_info->buy_info, true); $order_info->erxian_appointment_info = json_decode($order_info->erxian_appointment_info, true); $order_info->appointment_back_info = json_decode($order_info->appointment_back_info, true); + if($order_info->transfer_type==2){ + $transfer_code=DB::table('transfer_code')->where(['id'=>$order_info->transfer_link])->first(); + $order_info->transfer_code=$transfer_code->code; + } + if($order_info->transfer_type==1){ + $transfer_order=DB::table('orders')->where(['id'=>$order_info->transfer_link])->first(); + $order_info->transfer_order=$transfer_order; + } } else { return \Yz::echoError1('未找到有效订单'); } diff --git a/Laravel/app/Http/Controllers/API/H5/OrderNewController.php b/Laravel/app/Http/Controllers/API/H5/OrderNewController.php index 75b286d..ed02e8f 100644 --- a/Laravel/app/Http/Controllers/API/H5/OrderNewController.php +++ b/Laravel/app/Http/Controllers/API/H5/OrderNewController.php @@ -417,19 +417,97 @@ class OrderNewController extends Controller //转赠 public function ZhuanZeng() { - $order_number = request('order_number'); + $order_id = request('order_id'); $person_id = request('person_id'); + $openid = request('openid'); $person=DB::table('web_user_person')->where(['id'=>$person_id,'is_del'=>0])->first(); if(!$person) return \Yz::echoError1('转赠用户不存在'); + $user = DB::table('web_users')->where(['openid' => $openid, 'status' => 1, 'is_del' => 0])->first(); + if (!$user) return \Yz::echoError1('用户不存在'); $order = DB::table('orders') - ->where('order_number', '=', $order_number) + ->where('id', '=', $order_id) ->where('status', '=', 2) - // 只有未预约的才能转赠 + ->where(function($query) { + $query->where('transfer_type', '=', '') + ->orWhereNull('transfer_type'); + }) ->where(function($query) { $query->where('plan_id', '=', '') ->orWhereNull('plan_id'); })->first(); if(!$order) return \Yz::echoError1('此订单无法转赠他人'); + if($order->web_user_id<>$user->id) return \Yz::echoError1('无权操作此订单'); + if($order->person_id==$person_id) return \Yz::echoError1('被转赠人不能和原用户相同'); + //查询转赠码表是否生成了对应的转赠码 + $transfer_code=DB::table('transfer_code')->where(['link_order_id'=>$order->id,'is_del'=>0])->first(); + if(!!$transfer_code) return \Yz::echoError1('此订单已生成转赠码,无法再次转赠'); + + $peis = new PEISApiController(); + $comboDetail = $peis::Post('套餐详情查询', $order->hospital_id, ['套餐Id' => $order->combo_id], false); + if ($comboDetail['code'] != 0) return \Yz::echoError1("套餐详情查询失败"); + $comboDetail_sex = $comboDetail['data'][0]['性别限制']; + if($comboDetail_sex=='全部') $comboDetail_sex=0; + if($comboDetail_sex=='男') $comboDetail_sex=1; + if($comboDetail_sex=='女') $comboDetail_sex=2; + if($comboDetail_sex <> 0 and $comboDetail_sex <> $person->sex) return \Yz::echoError1('性别不符,此套餐不适合转赠给此用户'); + + DB::beginTransaction(); + $now_datetime=date('Y-m-d H:i:s'); + $data = [ + 'source'=>'转赠from'.$order->id, + 'title' => $order->title, + 'type' => $order->type, + 'web_user_id' => 0, + 'checkup_type_id' => $order->checkup_type_id, + 'person_id' => 0, + 'name' => $person->name, + 'id_number' => $person->id_number, + 'buy_info' => $order->buy_info, + 'price' => $order->price, + 'true_price' =>$order->true_price, + 'order_number' => $this->generateOrderNumber(), + 'status' => 2, + 'erxian_appointment_info' => $order->erxian_appointment_info, + 'combo_id' => $order->combo_id, + 'hospital_id' => $order->hospital_id, + 'phone' => $person->phone, + 'sex' => $person->sex, + 'birthday' => $person->birthday, + 'married' => $person->married, + 'created_at' => $now_datetime, + 'paycheck_time' => $now_datetime + ]; + $i_order_id=DB::table('orders')->insertGetId($data); + $u=DB::table('orders')->where(['id'=>$order->id])->update(['transfer_type'=>1,'transfer_link'=>$i_order_id,'status'=>6]); + if($u and $i_order_id){ + DB::commit(); + return \Yz::Return(true,'操作成功',[]); + }else{ + DB::rollBack(); + return \Yz::echoError1('操作失败'); + } + } + //接受转赠 + public function ReceiveZhuanZeng(){ + $order_id = request('order_id'); + $openid = request('openid'); + $user = DB::table('web_users')->where(['openid' => $openid, 'status' => 1, 'is_del' => 0])->first(); + if (!$user) return \Yz::echoError1('用户不存在'); + $order = DB::table('orders')->where(['id'=>$order_id,'status'=>2,'person_id'=>0]) + ->where(function($query) { + $query->where('transfer_type', '=', '') + ->orWhereNull('transfer_type'); + }) + ->first(); + if(!$order) return \Yz::echoError1('接收失败'); + $person=DB::table('web_user_person')->where(['user_id'=>$user->id,'id_number'=>$order->id_number,'is_del'=>0])->first(); + if(!$person) return \Yz::echoError1('体检人不存在'); + $u=DB::table('orders')->where(['id'=>$order_id])->update(['person_id'=>$person->id,'web_user_id'=>$user->id]); + if($u){ + return \Yz::Return(true,'操作成功',[]); + }else{ + return \Yz::echoError1('操作失败'); + } } public function item_check($hospital, $data) diff --git a/Laravel/app/Http/Controllers/API/H5/TransferCodeController.php b/Laravel/app/Http/Controllers/API/H5/TransferCodeController.php new file mode 100644 index 0000000..afb1713 --- /dev/null +++ b/Laravel/app/Http/Controllers/API/H5/TransferCodeController.php @@ -0,0 +1,41 @@ +where(['id'=>$order_id])->first(); + if(!$order) return \Yz::echoError1("订单不存在"); + if($order->status<>2) return \Yz::echoError1("订单状态不正确"); + if(!empty($order->plan_id)) return \Yz::echoError1("该订单不可转赠"); + if(!empty($order->transfer_type)) return \Yz::echoError1("该订单已经转赠,不可再转赠"); + $order_code=DB::table('transfer_code')->where(['link_order_id'=>$order_id,'is_del'=>0])->first(); + if(!!$order_code) return \Yz::echoError1("该订单已有转赠码,不可再转赠"); + $code=Tools::RandomString(5).$order->id; + $c_code_id = DB::table('transfer_code')->insertGetId([ + 'code'=>$code, + 'price'=>$order->true_price, + 'combo_id'=>json_decode($order->buy_info,true)['combo']['id'], + 'link_order_id'=>$order_id, + 'status'=>1, + 'is_del'=>0 + ]); + $u_order=DB::table('orders')->where(['id'=>$order_id])->update(['transfer_type'=>2,'transfer_link'=>$c_code_id,'status'=>6]); + if($u_order){ + return \Yz::Return(true,"生成成功",['code'=>$code]); + }else{ + return \Yz::echoError1("生成失败"); + } + + } + + +} diff --git a/Laravel/app/Http/Controllers/API/Internal/TransferCodeController.php b/Laravel/app/Http/Controllers/API/Internal/TransferCodeController.php index 054fb69..4ef3c53 100644 --- a/Laravel/app/Http/Controllers/API/Internal/TransferCodeController.php +++ b/Laravel/app/Http/Controllers/API/Internal/TransferCodeController.php @@ -14,7 +14,7 @@ class TransferCodeController extends Controller $code_num = request('code_num'); $user_name = request('user_name'); $user_id_number = request('user_id_number'); - $code=DB::table('transfer_code')->where(['code'=>$code_num,'status'=>1])->first(); + $code=DB::table('transfer_code')->where(['code'=>$code_num,'status'=>1,'is_del'=>0])->first(); if(!$code) return \Yz::echoError1("此转赠码不可用"); $u=DB::table('transfer_code')->where(['code'=>$code_num])->update([ 'user_name'=>$user_name, @@ -47,17 +47,18 @@ class TransferCodeController extends Controller 'status'=>2, 'tj_num'=>isset($tj_num)?$tj_num:null, ]; - $u=DB::table('transfer_code')->where(['code'=>$code_num,'status'=>1])->update($data); + $u=DB::table('transfer_code')->where(['code'=>$code_num,'status'=>1,'is_del'=>0])->update($data); } if($type==2){ $data=[ 'status'=>1, 'tj_num'=>null, ]; - $u=DB::table('transfer_code')->where(['code'=>$code_num,'status'=>2])->update($data); + $u=DB::table('transfer_code')->where(['code'=>$code_num,'status'=>2,'is_del'=>0])->update($data); } + $cha=DB::table('transfer_code')->where(['code'=>$code_num])->first(); if($u){ - return \Yz::Return(true,"操作成功",['code_num'=>$code_num]); + return \Yz::Return(true,"操作成功",['code_num'=>$code_num,'status'=>$cha->status]); }else{ return \Yz::echoError1("操作失败"); } diff --git a/Laravel/app/Lib/Tools.php b/Laravel/app/Lib/Tools.php index df9028d..0428293 100644 --- a/Laravel/app/Lib/Tools.php +++ b/Laravel/app/Lib/Tools.php @@ -69,4 +69,15 @@ class Tools // 返回年龄 return $interval->y; } + //生成随机字符串 + public static function RandomString($length = 6) { + $characters = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'; + $charactersLength = strlen($characters); + $randomString = ''; + for ($i = 0; $i < $length; $i++) { + // 使用random_int确保随机性 + $randomString .= $characters[random_int(0, $charactersLength - 1)]; + } + return $randomString; + } } diff --git a/Laravel/routes/web.php b/Laravel/routes/web.php index 44c0bde..27158fb 100644 --- a/Laravel/routes/web.php +++ b/Laravel/routes/web.php @@ -81,6 +81,10 @@ Route::group(['middleware' => ['log'],'prefix' => 'api/H5'], function () { Route::post('/CreateNewOrder', 'App\Http\Controllers\API\H5\OrderNewController@CreateNewOrder');//创建新订单 Route::post('/StartYuYue', 'App\Http\Controllers\API\H5\OrderNewController@StartYuYue');//预约 + Route::post('/OrderZhuanZeng', 'App\Http\Controllers\API\H5\OrderNewController@ZhuanZeng');//订单转赠 + Route::post('/OrderReceiveZhuanZeng', 'App\Http\Controllers\API\H5\OrderNewController@ReceiveZhuanZeng');//接受订单转赠 + Route::post('/CreateTransferCode', 'App\Http\Controllers\API\H5\TransferCodeController@CreateTransferCode');//创建转赠码 + //测试---------------------------- diff --git a/h5/pages/main/combo/combo.vue b/h5/pages/main/combo/combo.vue index 3757127..4f8d07d 100644 --- a/h5/pages/main/combo/combo.vue +++ b/h5/pages/main/combo/combo.vue @@ -62,7 +62,7 @@ let itemId = ref(""); // 项目id let comboId = ref(""); // 套餐id let price_max_min=ref([]); - let zhuangjianType=ref(18); + let zhuangjianType=ref(19); let TiShiPopupRef=ref(null);//提示弹窗 let SelectedComboInfo=ref(null);//选中的套餐信息 @@ -82,6 +82,9 @@ sortIndex.value = 0; delete screenObj.value.combo_sort; + sort_price_index.value = null; + delete screenObj.value.sort_price; + if (sort_salecount_index.value == index) { sort_salecount_index.value = null; delete screenObj.value.sort_sale_count; @@ -94,6 +97,9 @@ sortIndex.value = 0; delete screenObj.value.combo_sort; + sort_salecount_index.value = null; + delete screenObj.value.sort_sale_count; + if (sort_price_index.value == index) { sort_price_index.value = null; delete screenObj.value.sort_price; diff --git a/h5/pages/main/order/order.vue b/h5/pages/main/order/order.vue index df28b0b..5765616 100644 --- a/h5/pages/main/order/order.vue +++ b/h5/pages/main/order/order.vue @@ -40,7 +40,7 @@ import DraggableButton from "@/pages/components/goHome.vue"; let status_allow = [] switch (status_active.value) { case '0': - status_allow = [1, 2, 3, 4, 5] + status_allow = [1, 2, 3, 4, 5,6] break; case '1': status_allow = [1] @@ -52,7 +52,7 @@ import DraggableButton from "@/pages/components/goHome.vue"; status_allow = [3, 5] break; case '4': - status_allow = [4] + status_allow = [4,6] break; } for (let i in order_list.value) { diff --git a/h5/pages/main/order/src/order.vue b/h5/pages/main/order/src/order.vue index 4ac337c..c89bf9f 100644 --- a/h5/pages/main/order/src/order.vue +++ b/h5/pages/main/order/src/order.vue @@ -27,6 +27,7 @@ }, }, }); + let TransferPopupRef=ref(null) const order_info = ref(false); @@ -122,14 +123,62 @@ }) } //转赠 - const ZhuanZeng=()=>{ - alert('开发中'); + const ZhuanZeng=async(id)=>{ + // alert('开发中') + // return false; + uni.showLoading(); + const response = await $api("GetOrderDetail", { + id: id, + }); + uni.hideLoading(); + $response(response, () => { + if (response.status) { + OrderInfoDetail.value = response.data.info + TransferPopupRef.value.open() + } + }) } const GaiYueClick = (id) => { uni.navigateTo({ url: '/pages/main/ctime/ctime?id=' + id }) } + //生成转赠码 + const CreateTransferCode=async()=>{ + uni.showLoading(); + const response = await $api("CreateTransferCode", { + order_id: OrderInfoDetail.value.id, + }); + uni.hideLoading(); + $response(response, () => { + if (response.status) { + ZhuanZeng(OrderInfoDetail.value.id) + order_info.value.status=6 + } + }) + } + //转赠指定人 + const ZhuanZengPerson=async()=>{ + uni.navigateTo({ + url: "/pages/user/choose/choose?do=transfer&orderid="+OrderInfoDetail.value.id + }); + } + //接受转赠 + const ReceiveZhuanZeng=async()=>{ + uni.showLoading(); + const response = await $api("OrderReceiveZhuanZeng", { + order_id: order_info.value.id, + }); + uni.hideLoading(); + $response(response, () => { + if (response.status) { + uni.redirectTo({ + url: "/pages/main/order/order" + }); + + } + }) + } let erweima_popup = ref(null); let show_erweima_text = ref(''); const erweima_click = (text) => { @@ -157,6 +206,22 @@