From 62336133ff1e9b3d12e0647c80e18d7928c9b45b Mon Sep 17 00:00:00 2001 From: wuhui_zzw <1760308791@qq.com> Date: Fri, 12 Jan 2024 16:21:03 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=EF=BC=9A=E5=9C=A8=E7=BA=BF?= =?UTF-8?q?=E4=B9=B0=E5=8D=95=E5=8A=9F=E8=83=BD=E5=8F=8A=E5=9C=A8=E7=BA=BF?= =?UTF-8?q?=E4=B9=B0=E5=8D=95=E6=94=AF=E4=BB=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/common/dao/store/order/StoreOrderDao.php | 2 +- .../order/StoreOrderCreateRepository.php | 104 ++++++++++++++++++ .../store/order/StoreOrderRepository.php | 29 +++-- app/controller/api/store/order/OnlinePay.php | 78 +++++++++++++ route/api.php | 9 ++ 5 files changed, 213 insertions(+), 9 deletions(-) create mode 100644 app/controller/api/store/order/OnlinePay.php diff --git a/app/common/dao/store/order/StoreOrderDao.php b/app/common/dao/store/order/StoreOrderDao.php index fab77bd..2261837 100644 --- a/app/common/dao/store/order/StoreOrderDao.php +++ b/app/common/dao/store/order/StoreOrderDao.php @@ -65,7 +65,7 @@ class StoreOrderDao extends BaseDao } $query->where('is_del',0); }); - $query->where('StoreOrder.activity_type','<>',20); + $query->whereNotIn('StoreOrder.activity_type',[20,30]); $query->when(($sysDel !== null), function ($query) use ($sysDel) { $query->where('is_system_del', $sysDel); }); diff --git a/app/common/repositories/store/order/StoreOrderCreateRepository.php b/app/common/repositories/store/order/StoreOrderCreateRepository.php index 61951a9..9752e56 100644 --- a/app/common/repositories/store/order/StoreOrderCreateRepository.php +++ b/app/common/repositories/store/order/StoreOrderCreateRepository.php @@ -1049,6 +1049,7 @@ class StoreOrderCreateRepository extends StoreOrderRepository{ $totalCost = bcadd($totalCost,$cost,2); $totalNum += $merchantCart['order']['total_num']; } + $groupOrder = [ 'uid' => $uid, 'group_order_sn' => count($orderList) === 1 ? $orderList[0]['order_sn'] : ($this->getNewOrderId(StoreOrderRepository::TYPE_SN_ORDER).'0'), @@ -2807,7 +2808,110 @@ class StoreOrderCreateRepository extends StoreOrderRepository{ }*/ + /****** 在线买单 ************************************/ + public function onlinePayment($payType, $payInfo, $user){ + $payMoney = abs((float)$payInfo['money']); + $merId = (int)$payInfo['mer_id']; + $uid = $user->uid; + // 是否自购 + $isSelfBuy = $user->is_promoter && systemConfig('extension_self') ? 1 : 0; + if($isSelfBuy){ + $spreadUser = $user; + $topUser = $user->valid_spread; + }else{ + $spreadUser = $user->valid_spread; + $topUser = $user->valid_top; + } + // 整理订单数据 + $orderList[] = [ + 'cartInfo' => [], + 'activity_type' => 30,// 30=在线买单 + 'commission_rate' => 0, + 'order_type' => 0, + 'is_virtual' => 1, + 'extension_one' => 0, + 'extension_two' => 0, + 'order_sn' => $this->getNewOrderId(StoreOrderRepository::TYPE_SN_ORDER).(0 + 1), + 'uid' => $uid, + 'spread_uid' => $spreadUser->uid ?? 0, + 'top_uid' => $topUser->uid ?? 0, + 'is_selfbuy' => $isSelfBuy, + 'real_name' => $user->real_name ?? '', + 'user_phone' => $user->phone ?? '', + 'user_address' => $user->addres ?? '', + 'cart_id' => '', + 'total_num' => 1, + 'total_price' => $payMoney, + 'total_postage' => 0, + 'pay_postage' => 0, + 'svip_discount' => 0, + 'pay_price' => $payMoney, + 'integral' => 0, + 'integral_price' => 0, + 'give_integral' => 0, + 'mer_id' => $merId, + 'cost' => 0, + 'order_extend' => '', + 'coupon_id' => '', + 'mark' => '', + 'coupon_price' => '', + 'platform_coupon_price' => '', + 'pay_type' => $payType, + 'refund_switch' => 0, + ]; + $groupOrder = [ + 'uid' => $uid, + 'group_order_sn' => count($orderList) === 1 ? $orderList[0]['order_sn'] : ($this->getNewOrderId(StoreOrderRepository::TYPE_SN_ORDER).'0'), + 'total_postage' => 0, + 'total_price' => $payMoney, + 'total_num' => 1, + 'real_name' => $user->real_name ?? '', + 'user_phone' => $user->phone ?? '', + 'user_address' => $user->addres ?? '', + 'pay_price' => $payMoney, + 'coupon_price' => 0, + 'pay_postage' => 0, + 'cost' => 0, + 'coupon_id' => '', + 'pay_type' => $payType, + 'give_coupon_ids' => '', + 'integral' => 0, + 'integral_price' => 0, + 'give_integral' => 0, + 'activity_type' => 30,// 30=在线买单 + ]; + $group = Db::transaction(function() use ($user,$groupOrder,$orderList){ + $storeGroupOrderRepository = app()->make(StoreGroupOrderRepository::class); + $storeOrderStatusRepository = app()->make(StoreOrderStatusRepository::class); + //创建订单 + $groupOrder = $storeGroupOrderRepository->create($groupOrder); + foreach($orderList as $k => $order){ + $orderList[$k]['group_order_id'] = $groupOrder->group_order_id; + } + $orderStatus = []; + foreach($orderList as $order){ + $cartInfo = $order['cartInfo']; + unset($order['cartInfo']); + //创建子订单 + $_order = $this->dao->create($order); + $orderStatus[] = [ + 'order_id' => $_order->order_id, + 'order_sn' => $_order->order_sn, + 'type' => $storeOrderStatusRepository::TYPE_ORDER, + 'change_message' => '订单生成', + 'change_type' => $storeOrderStatusRepository::ORDER_STATUS_CREATE, + 'uid' => $user->uid, + 'nickname' => $user->nickname, + 'user_type' => $storeOrderStatusRepository::U_TYPE_USER, + ]; + } + $storeOrderStatusRepository->batchCreateLog($orderStatus); + return $groupOrder; + }); + + return $group; + } } diff --git a/app/common/repositories/store/order/StoreOrderRepository.php b/app/common/repositories/store/order/StoreOrderRepository.php index aba7db8..8da4c06 100644 --- a/app/common/repositories/store/order/StoreOrderRepository.php +++ b/app/common/repositories/store/order/StoreOrderRepository.php @@ -136,14 +136,19 @@ class StoreOrderRepository extends BaseRepository $user->now_money = bcsub($user->now_money, $groupOrder['pay_price'], 2); $user->save(); $userBillRepository = app()->make(UserBillRepository::class); - $userBillRepository->decBill($user['uid'], 'now_money', 'pay_product', [ + $data = [ 'link_id' => $groupOrder['group_order_id'], 'status' => 1, 'title' => '购买商品', 'number' => $groupOrder['pay_price'], - 'mark' => '余额支付支付' . floatval($groupOrder['pay_price']) . '元购买商品', + 'mark' => '余额支付' . floatval($groupOrder['pay_price']) . '元购买商品', 'balance' => $user->now_money - ]); + ]; + if($groupOrder['activity_type'] == 30){ + $data['title'] = '在线买单'; + $data['mark'] = '余额支付' . floatval($groupOrder['pay_price']) . '元'; + } + $userBillRepository->decBill($user['uid'], 'now_money', 'pay_product', $data); $this->paySuccess($groupOrder); }); return app('json')->status('success', '余额支付成功', ['order_id' => $groupOrder['group_order_id']]); @@ -225,7 +230,8 @@ class StoreOrderRepository extends BaseRepository $_make->incCount($order->orderProduct[0]['activity_id'], $order->orderProduct[0]['product_sku'], 'two_pay'); } $_make->incCount($order->orderProduct[0]['activity_id'], $order->orderProduct[0]['product_sku'], 'one_pay'); - } else if ($order->activity_type == 4) { + } + else if ($order->activity_type == 4) { $order->status = 9; $order->save(); $group_buying_id = app()->make(ProductGroupBuyingRepository::class)->create( @@ -236,19 +242,24 @@ class StoreOrderRepository extends BaseRepository ); $order->orderProduct[0]->activity_id = $group_buying_id; $order->orderProduct[0]->save(); - } else if ($order->activity_type == 3) { + } + else if ($order->activity_type == 3) { //更新助力状态 app()->make(ProductAssistSetRepository::class)->changStatus($order->orderProduct[0]['activity_id']); } - if ($order->order_type == 1 && $order->status != 10) - $order->verify_code = $this->verifyCode(); - if ($order->orderProduct[0]->product->type == 2) { + if ($order->order_type == 1 && $order->status != 10) $order->verify_code = $this->verifyCode(); + if ($order->activity_type != 30 && $order->orderProduct[0]->product->type == 2) { $order->status = 2; $order->delivery_type = 6; $order->delivery_name = '自动发货'; $order->delivery_id = $this->sendCdkey($order); $isPoints = true; } + // 判断:是否为在线买单 在线买单,订单支付则订单完成 + if($order->activity_type == 30){ + $order->status = 3; + } + $order->save(); if ($isPoints) $this->takeAfter($order, $groupOrder->user); $orderStatus[] = [ @@ -413,12 +424,14 @@ class StoreOrderRepository extends BaseRepository if (count($profitsharing)) { $storeOrderProfitsharingRepository->insertAll($profitsharing); } + $financialRecordRepository->insertAll($finance); $storeOrderStatusRepository->batchCreateLog($orderStatus); if (count($groupOrder['give_coupon_ids']) > 0) $groupOrder['give_coupon_ids'] = app()->make(StoreCouponRepository::class)->getGiveCoupon($groupOrder['give_coupon_ids'])->column('coupon_id'); $groupOrder->save(); }); + if (count($groupOrder['give_coupon_ids']) > 0) { try { Queue::push(PayGiveCouponJob::class, ['ids' => $groupOrder['give_coupon_ids'], 'uid' => $groupOrder['uid']]); diff --git a/app/controller/api/store/order/OnlinePay.php b/app/controller/api/store/order/OnlinePay.php new file mode 100644 index 0000000..255a2d4 --- /dev/null +++ b/app/controller/api/store/order/OnlinePay.php @@ -0,0 +1,78 @@ +request->params(['search_text']); + // if(empty($search['search_text'])) return app('json')->fail('请输入搜索内容!'); + // 内容查询 + $list = app()->make(MerchantRepository::class) + ->getSearch([]) + ->field('mer_id,mer_name,mer_address,mer_avatar') + ->where('is_del',0) + ->where('mer_state', 1) + ->where('status', 1) + ->where(function($query) use ($search){ + $query->where('mer_name','like',"%{$search['search_text']}%") + ->whereOr('mer_address','like',"%{$search['search_text']}%"); + }) + ->order('create_time desc,mer_id desc') + ->limit(100) + ->select() + ->toArray(); + + return app('json')->success($list); + } + /** + * Common: 在线买单 - 订单生成及发起支付 + * Author: wu-hui + * Time: 2024/01/12 16:07 + * @param StoreOrderCreateRepository $orderCreateRepository + * @return mixed + */ + public function createOrder(StoreOrderCreateRepository $orderCreateRepository){ + // 参数获取 + $payInfo = $this->request->params(['money','pay_type', 'mer_id', 'return_url']); + if (!in_array($payInfo['pay_type'], StoreOrderRepository::PAY_TYPE, true)) return app('json')->fail('请选择正确的支付方式'); + if ((float)$payInfo['money'] <= 0) return app('json')->fail('支付金额必须大于0!'); + if ((int)$payInfo['mer_id'] <= 0) return app('json')->fail('请选择商户!'); + // 发起支付 + $groupOrder = app() + ->make(LockService::class) + ->exec('online_order.create',function() use ($payInfo,$orderCreateRepository){ + $payType = array_search($payInfo['pay_type'],StoreOrderRepository::PAY_TYPE); + + return $orderCreateRepository->onlinePayment($payType,$payInfo,$this->request->userInfo()); + }); + + if ($groupOrder['pay_price'] == 0) { + app()->make(StoreOrderRepository::class)->paySuccess($groupOrder); + return app('json')->status('success', '支付成功', ['order_id' => $groupOrder['group_order_id']]); + } + try { + + return app()->make(StoreOrderRepository::class)->pay($payInfo['pay_type'], $this->request->userInfo(), $groupOrder, $payInfo['return_url'], $this->request->isApp()); + } catch (\Exception $e) { + + return app('json')->status('error', $e->getMessage(), ['order_id' => $groupOrder->group_order_id]); + } + } + + + + + +} diff --git a/route/api.php b/route/api.php index da2b126..a0b92c9 100644 --- a/route/api.php +++ b/route/api.php @@ -341,6 +341,9 @@ Route::group('api/', function () { Route::post('deleate/:id', 'PointsOrder/del'); })->prefix('api.store.order.'); // 在线买单 + Route::group('onlinePayment', function () { + Route::get('searchMerList', 'OnlinePay/searchMer'); + Route::get('createOrder', 'OnlinePay/createOrder'); @@ -349,6 +352,12 @@ Route::group('api/', function () { + })->prefix('api.store.order.'); + + + + + })->middleware(UserTokenMiddleware::class, true);