From 4f101ee4d7142c4e0c2053db8725756ad4e9ebdf Mon Sep 17 00:00:00 2001 From: weizong song Date: Fri, 9 Apr 2021 22:57:47 +0800 Subject: [PATCH] up --- .../Controllers/Manager/OrdersController.php | 1229 +---------------- routes/web.php | 13 +- 2 files changed, 4 insertions(+), 1238 deletions(-) diff --git a/app/Http/Controllers/Manager/OrdersController.php b/app/Http/Controllers/Manager/OrdersController.php index 78dd90c..ddd3d47 100644 --- a/app/Http/Controllers/Manager/OrdersController.php +++ b/app/Http/Controllers/Manager/OrdersController.php @@ -7,17 +7,10 @@ use AlicFeng\IdentityCard\InfoHelper; use App\Customer; use App\Events\OrderAssigned; use App\Libs\WxMicroPay; -use App\Models\Approval; -use App\Models\ApprovalItems; use App\Models\Area; use App\Models\Balance; use App\Models\Bed; -use App\Models\Building; -use App\Models\FactorItems; -use App\Models\ManagerProject; -use App\Models\OrderItems; use App\Models\Orders; -use App\Models\Paramedic; use App\Models\ParamedicLevel; use App\Models\Patient; use App\Models\Product; @@ -26,13 +19,9 @@ use App\Models\ProductParamedicLevel; use App\Models\Project; use App\Models\Recharge; use App\Models\Refund; -use App\Models\Uploads; use Carbon\Carbon; use Illuminate\Http\Request; use Illuminate\Support\Facades\DB; -use Illuminate\Support\Facades\Log; -use Illuminate\Support\Facades\Route; -use Illuminate\Support\Facades\Storage; use Intervention\Image\Facades\Image; use SimpleSoftwareIO\QrCode\Facades\QrCode; @@ -216,7 +205,6 @@ class OrdersController extends CommonController public function getOrder($id) { - //todo:check order belongs to manager $order = (new Orders())->with([ "orderItems" => function ($query) { $query->with([ @@ -586,1006 +574,6 @@ class OrdersController extends CommonController } } - /** - * @OA\Get( - * path="/manager/get-reservable-paramedics/{order_id}", - * summary="获取可预约的护工", - * description="获取可预约的护工", - * @OA\Parameter(name="token", in="query", @OA\Schema(type="string"), required=true, description="token"), - * @OA\Parameter(name="order_id", in="path", @OA\Schema(type="integer"), required=false, description="订单id"), - * @OA\Parameter(name="has_ongoing_orders", in="query", @OA\Schema(type="integer"), required=false, description="是否空闲的筛选,枚举[0,1]"), - * @OA\Response( - * response="200", - * description="获取可预约的护工" - * ) - * ) - */ - public function getReservableParamedics($order_id) - { - $order = (new Orders())->find($order_id); - if ($order->status !== Orders::STATUS_UNCONFIRMED && $order->status !== Orders::STATUS_UNASSIGNED) { - return response()->json([ - "errorcode" => 50001, - "errormsg" => "订单状态不适配" - ]); - } - if (Carbon::parse(date("Y-m-d"))->greaterThanOrEqualTo($order->from_date)) { - return response()->json([ - "errorcode" => 50002, - "errormsg" => "开始服务日需晚于当前日期才可以进行预约。请联系管理老师或取消订单" - ]); - } - - $paramedics = (new Paramedic()) - ->where("status", Paramedic::STATUS_ACTIVE) - ->where("project_id", $order->project_id) - ->whereDoesntHave("orders", function ($query) use ($order) { - //订单正在进行,或者未确认|未派单 - $query->whereIn("status", [Orders::STATUS_UNCONFIRMED, Orders::STATUS_UNASSIGNED, Orders::STATUS_ONGOING]); - }); - - switch (request()->has_ongoing_orders) { - case "1": - $paramedics = $paramedics->has("ongoingOrders"); - break; - case "0": - $paramedics = $paramedics->doesntHave("ongoingOrders"); - break; - default: - //do nothing - } - - $paramedics = $paramedics - ->withCount("ongoingOrders as ongoing_count") - ->orderBy("ongoing_count") - ->paginate(10); - - return response()->json($paramedics->toArray()); - } - - /** - * @OA\Get( - * path="/manager/get-assignable-paramedics/{order_id}", - * summary="获取可派单的护工", - * description="获取可派单的护工", - * @OA\Parameter(name="token", in="query", @OA\Schema(type="string"), required=true, description="token"), - * @OA\Parameter(name="order_id", in="path", @OA\Schema(type="integer"), required=false, description="订单id"), - * @OA\Parameter(name="has_ongoing_orders", in="query", @OA\Schema(type="integer"), required=false, description="是否空闲的筛选,枚举[0,1]"), - * @OA\Parameter(name="exclude_level", in="query", @OA\Schema(type="integer"), required=false, description="是否筛选星级护工,建议前端默认提交筛选"), - * @OA\Parameter(name="exclude_quantity_limit", in="query", @OA\Schema(type="integer"), required=false, description="是否筛选不超过一对多的护工,建议前端默认提交筛选"), - * @OA\Parameter(name="exclude_reserved", in="query", @OA\Schema(type="integer"), required=false, description="是否筛选已被预约的护工,建议前端默认提交筛选"), - * @OA\Response( - * response="200", - * description="获取可派单的护工" - * ) - * ) - */ - public function getAssignableParamedics($order_id) - { - $order = (new Orders())->find($order_id); - - //基础条件 - $paramedics = (new Paramedic())->where("status", Paramedic::STATUS_ACTIVE) - ->where("project_id", $order->project_id); - - //限制星级 - if (request()->exclude_level) { - $paramedic_level = $order->paramedicLevel; - if ($paramedic_level) { - $paramedics = $paramedics->where("paramedic_level_id", $paramedic_level->id); - } - } - - //一对多的数量限制 - if (request()->exclude_quantity_limit) { - $max_quantity = (new ProductItems())->where("product_id", $order->product_id)->orderBy("patient_quantity", "desc")->value("patient_quantity"); - $paramedics = $paramedics - ->whereRaw("(select count(*) from `orders` where `paramedic`.`id` = `orders`.`paramedic_id` and `orders`.`status`=" . Orders::STATUS_ONGOING . " and `orders`.`deleted_at` is null) > 2"); - } - - //未被预约 - if (request()->exclude_reserved) { - $paramedics = $paramedics->whereDoesntHave("orders", function ($query) use ($order) { - //订单未确认|未派单,表示已被预约 - $query->whereIn("status", [Orders::STATUS_UNCONFIRMED, Orders::STATUS_UNASSIGNED, Orders::STATUS_ONGOING]); - }); - } - - //空闲状态 - switch (request()->has_ongoing_orders) { - case "1": - $paramedics = $paramedics->has("ongoingOrders"); - break; - case "0": - $paramedics = $paramedics->doesntHave("ongoingOrders"); - break; - default: - //do nothing - } - - $paramedics = $paramedics->withCount(["orders as reserved_count" => function ($query) { - $query->whereIn("status", [Orders::STATUS_UNCONFIRMED, Orders::STATUS_UNASSIGNED]); - }, "orders as ongoing_count" => function ($query) { - $query->where("status", [Orders::STATUS_ONGOING]); - }])->paginate(10); - - return response()->json($paramedics->toArray()); - } - - /** - * @OA\POST( - * path="/manager/pre-assign-order/{id}", - * summary="预派工", - * description="预派工,获取可能产生影响的订单", - * @OA\Parameter(name="token", in="query", @OA\Schema(type="string"), required=true, description="token"), - * @OA\Parameter(name="id", in="path", @OA\Schema(type="integer"), required=true, description="订单id"), - * @OA\Parameter(name="paramedic_id", in="query", @OA\Schema(type="integer"), required=true, description="护工id"), - * @OA\Response( - * response="200", - * description="预派工" - * ) - * ) - */ - - /** - * @OA\POST( - * path="/manager/assign-order/{id}", - * summary="订单派工", - * description="订单派工", - * @OA\Parameter(name="token", in="query", @OA\Schema(type="string"), required=true, description="token"), - * @OA\Parameter(name="id", in="path", @OA\Schema(type="integer"), required=true, description="订单id"), - * @OA\Parameter(name="paramedic_id", in="query", @OA\Schema(type="integer"), required=true, description="护工id"), - * @OA\Parameter(name="from_date", in="query", @OA\Schema(type="date"), required=true, description="开始日期"), - * @OA\Parameter(name="to_date", in="query", @OA\Schema(type="date"), required=true, description="预计结束日期"), - * @OA\Parameter(name="price", in="query", @OA\Schema(type="integer"), required=true, description="价格"), - * @OA\Parameter(name="same_paramedic_orders_price", in="query", @OA\Schema( - * type="object", - * ), required=true, description="关联订单价格实体,[{id:1,price:120},{...}],如果为空数组请传[]"), - * @OA\Response( - * response="200", - * description="订单派工" - * ) - * ) - */ - - public function assignOrder($id) - { - $order = (new Orders())->with("handlingApprovalItem")->find($id); - - if ($order->approvalItem) { - return response()->json([ - "errorcode" => 50001, - "errormsg" => "订单有未处理的审核流程,暂不可进行此操作" - ]); - } - if ($order->status !== Orders::STATUS_UNASSIGNED) { - return response()->json([ - "errorcode" => 50001, - "errormsg" => "订单状态不适配" - ]); - } - - if (Carbon::parse(date("Y-m-d"))->diffInDays($order->from_date, false) > 0) { - return response()->json([ - "errorcode" => 50002, - "errormsg" => "开始服务日不能早于开始服务日,请先调整开始服务日期后再派单" - ]); - } - - //当天是否有相同护工的订单 - $unGeneratedOrders = (new Orders())::where("status", Orders::STATUS_ONGOING) - ->whereRaw("DATEDIFF(`from_date`, now()) <= 0") - ->where("paramedic_id", request()->paramedic_id) - ->whereDoesntHave("orderItems", function ($query) { - $query->whereRaw("DATEDIFF(`service_date`, now()) = 0"); - })->get(); - if ($unGeneratedOrders->count()) { - return response()->json([ - "errorcode" => 50000, - "errormsg" => "相关延续订单未生成完毕,请稍后再试:" . implode($unGeneratedOrders->pluck("id")->toArray()) - ]); - } - - //相同护工的订单 - $same_paramedic_orders = (new Orders()) - ->where("status", Orders::STATUS_ONGOING) - ->where("paramedic_id", request()->paramedic_id) - ->with("lastItem", "paramedic", "bed", "room", "building", "patient") - ->get(); - - $patient_quantity = $same_paramedic_orders->count() + 1; - - //预指派 - $url_split = explode("/", request()->url()); - if ($url_split[count($url_split) - 2] == "pre-assign-order") { - return response()->json($same_paramedic_orders ? $same_paramedic_orders->toArray() : []); - } - - //判断是否每张关联子订单都提交了对应的价格,避免未经过预指派直接提交 - //同时判断是否存在价格变动 - $need_approve_price_change = $order->determineNeedApprovePriceChange(request()->price); - $same_paramedic_orders_price = json_decode(request()->same_paramedic_orders_price, true); - $same_paramedic_orders_price = collect($same_paramedic_orders_price)->pluck("price", "id")->toArray(); - foreach ($same_paramedic_orders as $same_paramedic_order) { - if (!in_array($same_paramedic_order->id, array_keys($same_paramedic_orders_price))) { - return response()->json([ - "errorcode" => 50004, - "errormsg" => "关联订单({$same_paramedic_order->serial})的价格未提交" - ]); - } - $need_approve_price_change = $need_approve_price_change || $same_paramedic_order->determineNeedApprovePriceChange($same_paramedic_orders_price[$same_paramedic_order->id]); - } - - //最接近被护理人数的产品型号 - $productItem = $order->product->productItems()->where("patient_quantity", "<=", $patient_quantity)->orderBy("patient_quantity", "desc")->first(); - $price = request()->price; - - //需要修改/需要审批的明细 - $approvalItems = []; - //主订单 - $updates_order = [ - "status" => Orders::STATUS_ONGOING, - "product_item_id" => $productItem->id, - "paramedic_id" => request()->paramedic_id, - "price" => request()->price, - "patient_quantity" => $patient_quantity, - "auto_checkout" => request()->auto_checkout - ]; - if (request()->from_date) { - $updates_order["from_date"] = request()->from_date; - } - if (request()->from_date) { - $updates_order["to_date"] = request()->to_date; - } - - $approvalItems[] = new ApprovalItems([ - "belongs_type" => Orders::class, - "belongs_id" => $order->id, - "updates" => json_encode($updates_order) - ]); - - //相关订单 - foreach ($same_paramedic_orders as $same_paramedic_order) { - $productItem = $same_paramedic_order->product->productItems()->where("patient_quantity", "<=", $patient_quantity)->orderBy("patient_quantity", "desc")->first(); - $price = $same_paramedic_orders_price[$same_paramedic_order->id]; - - $same_paramedic_order_updates = [ - "product_item_id" => $productItem->id, - "price" => $price, - "patient_quantity" => $patient_quantity - ]; - $approvalItems[] = new ApprovalItems([ - "belongs_type" => Orders::class, - "belongs_id" => $same_paramedic_order->id, - "updates" => json_encode($same_paramedic_order_updates) - ]); - - $same_paramedic_order_last_item_updates = [ - "product_item_id" => $productItem->id, - "total" => $price, - "patient_quantity" => $patient_quantity - ]; - $approvalItems[] = new ApprovalItems([ - "belongs_type" => OrderItems::class, - "belongs_id" => $same_paramedic_order->lastItem->id, - "updates" => json_encode($same_paramedic_order_last_item_updates) - ]); - } - - //开始处理 - if ($need_approve_price_change) { - //写入审批记录 - DB::beginTransaction(); - try { - $expire_at = (new Approval())->generateExpireTime(); - $approval = (new Approval)->create([ - "type" => Approval::TYPE_ASSIGN, - "order_id" => $order->id, - "project_id" => $order->project->id, - "created_by" => $this->manager->id, - "expire_at" => $expire_at - ]); - foreach ($approvalItems as $approvalItem) { - $approvalItem->approval_id = $approval->id; - $approvalItem->save(); - } - - $order->status = "needapprove"; - $order->approval = (new Approval())->with("approvalItems")->find($approval->id); - DB::commit(); - } catch (\Exception $exception) { - DB::rollBack(); - return response()->json([ - "errorcode" => $exception->getCode(), - "errormsg" => $exception->getMessage() - ]); - } - } else { - //执行变更(虚拟审批) - $approval = new Approval(); - $approval->type = Approval::TYPE_ASSIGN; - $approval->order_id = $order->id; - $approval->approvalItems = $approvalItems; - - $res = $approval->pass(); - if (!$res["status"]) { - return response()->json([ - "errorcode" => $res["errorcode"], - "errormsg" => $res["errormsg"] - ]); - } - } - - return response()->json(compact("order")); - } - - /** - * @OA\Get( - * path="/manager/get-beds-by-project/{id}", - * summary="获取医院床位", - * description="获取医院床位", - * @OA\Parameter(name="token", in="query", @OA\Schema(type="string"), required=true, description="token"), - * @OA\Parameter(name="id", in="path", @OA\Schema(type="integer"), required=true, description="project id"), - * @OA\Response( - * response="200", - * description="获取医院床位" - * ) - * ) - */ - - public function getBedsByProject($id) - { - $buildings = (new Building())->where("project_id", $id)->with(["areas" => function ($query) { - $query->with("beds"); - }])->get(); - return response()->json($buildings->toArray()); - } - - /** - * @OA\POST( - * path="/manager/pre-modify-order/{id}", - * summary="预改单", - * description="预修改订单,获取可能产生影响的订单", - * @OA\Parameter(name="token", in="query", @OA\Schema(type="string"), required=true, description="token"), - * @OA\Parameter(name="id", in="path", @OA\Schema(type="integer"), required=true, description="订单id"), - * @OA\Parameter(name="paramedic_id", in="query", @OA\Schema(type="integer"), required=true, description="护工id"), - * @OA\Response( - * response="200", - * description="预改单" - * ) - * ) - */ - - /** - * @OA\POST( - * path="/manager/modify-order/{id}", - * summary="订单修改", - * description="订单修改", - * @OA\Parameter(name="token", in="query", @OA\Schema(type="string"), required=true, description="token"), - * @OA\Parameter(name="id", in="path", @OA\Schema(type="integer"), required=true, description="id"), - * @OA\Parameter(name="bed_id", in="query", @OA\Schema(type="integer"), required=true, description="床位id"), - * @OA\Parameter(name="paramedic_id", in="query", @OA\Schema(type="integer"), required=true, description="护工id"), - * @OA\Parameter(name="price", in="query", @OA\Schema(type="number"), required=true, description="价格"), - * @OA\Parameter(name="to_date", in="query", @OA\Schema(type="date"), required=true, description="预计结束日期"), - * @OA\Parameter(name="factors", in="query", @OA\Schema(type="object"), required=true, description="价格因子选择,[{id:1,factor_item_id:1},{...}],如果为空数组请传[]"), - * @OA\Parameter(name="available_day", in="query", @OA\Schema(type="string"), required=false, description="生效日期(针对当前订单、旧的关联订单、新的关联订单),仅当值为today表示同步更新当日子订单价格,为其他值表示次日起生效"), - * @OA\Parameter(name="old_same_paramedic_orders_price", in="query", @OA\Schema( - * type="object", - * ), required=true, description="旧关联订单价格实体,[{id:1,price:120},{...}],如果为空数组请传[]"), - * @OA\Parameter(name="new_same_paramedic_orders_price", in="query", @OA\Schema( - * type="object", - * ), required=true, description="新关联订单价格实体,[{id:1,price:120},{...}],如果为空数组请传[]"), - * @OA\Response( - * response="200", - * description="订单修改" - * ) - * ) - */ - - public function modifyOrder($id) - { - $order = (new Orders())->with("handlingApprovalItem")->find($id); - - if ($order->handlingApprovalItem) { - return response()->json([ - "errorcode" => 50001, - "errormsg" => "订单有未处理的审核流程,暂不可进行此操作" - ]); - } - if ($order->status != Orders::STATUS_ONGOING) { - return response()->json([ - "errorcode" => 60010, - "errormsg" => "订单状态不适配" - ]); - } - - if (request()->paramedic_id && request()->paramedic_id != $order->paramedic_id) { - $old_same_paramedic_orders = (new Orders()) - ->where("status", Orders::STATUS_ONGOING) - ->where("id", "<>", $order->id) - ->where("paramedic_id", $order->paramedic_id) - ->with("lastItem", "paramedic", "bed", "room", "building", "patient") - ->get(); - $new_same_paramedic_orders = (new Orders()) - ->where("status", Orders::STATUS_ONGOING) - ->where("id", "<>", $order->id) - ->where("paramedic_id", request()->paramedic_id) - ->with("lastItem", "paramedic", "bed", "room", "building", "patient") - ->get(); - } else { - $old_same_paramedic_orders = collect([]); - $new_same_paramedic_orders = collect([]); - } - - //预改单 - $url_split = explode("/", request()->url()); - if ($url_split[count($url_split) - 2] == "pre-modify-order") { - return response()->json([ - "order" => $order, - "old_same_paramedic_orders" => $old_same_paramedic_orders->toArray(), - "new_same_paramedic_orders" => $new_same_paramedic_orders->toArray() - ]); - } - - //判断是否每张关联子订单都提交了对应的价格,避免未经过预改单直接提交 - //同时判断是否有价格变更 - $need_approve_price_change = $order->determineNeedApprovePriceChange(request()->price); - $old_same_paramedic_orders_price = json_decode(request()->old_same_paramedic_orders_price, true); - $old_same_paramedic_orders_price = collect($old_same_paramedic_orders_price)->pluck("price", "id")->toArray(); - - foreach ($old_same_paramedic_orders as $old_same_paramedic_order) { - if (!in_array($old_same_paramedic_order->id, array_keys($old_same_paramedic_orders_price))) { - return response()->json([ - "errorcode" => 50004, - "errormsg" => "旧关联订单({$old_same_paramedic_order->serial})的价格未提交" - ]); - } - $need_approve_price_change = $need_approve_price_change || $old_same_paramedic_order->determineNeedApprovePriceChange($old_same_paramedic_orders_price[$old_same_paramedic_order->id]); - } - - $new_same_paramedic_orders_price = json_decode(request()->new_same_paramedic_orders_price, true); - $new_same_paramedic_orders_price = collect($new_same_paramedic_orders_price)->pluck("price", "id")->toArray(); - - foreach ($new_same_paramedic_orders as $new_same_paramedic_order) { - if (!in_array($new_same_paramedic_order->id, array_keys($new_same_paramedic_orders_price))) { - return response()->json([ - "errorcode" => 50004, - "errormsg" => "新关联订单({$new_same_paramedic_order->serial})的价格未提交" - ]); - } - $need_approve_price_change = $need_approve_price_change || $new_same_paramedic_order->determineNeedApprovePriceChange($new_same_paramedic_orders_price[$new_same_paramedic_order->id]); - } - - //开始处理 - //最接近被护理人数的产品型号 - $productItem = $order->product->productItems()->where("patient_quantity", "<=", count($new_same_paramedic_orders_price) + 1)->orderBy("patient_quantity", "desc")->first(); - $price = request()->price; - - //需要修改/需要审批的明细 - $approvalItems = []; - //主订单 - //单独处理factors - $factors_is_dirty = $order->determineOrderFactorsIsDirty(); - $factors = (new Orders())->requestFactorsToOrderFactors(); - - $updates_order = [ - "status" => Orders::STATUS_ONGOING, - "product_item_id" => $productItem->id, - "paramedic_id" => request()->paramedic_id, - "bed_id" => (request()->bed_id ? request()->bed_id : $order->bed_id), - "to_date" => (request()->to_date ? request()->to_date : $order->to_date), - "price" => request()->price - ]; - if ($factors_is_dirty) { - $updates_order["factors"] = json_encode($factors); - } - $approvalItems[] = new ApprovalItems([ - "belongs_type" => Orders::class, - "belongs_id" => $order->id, - "updates" => json_encode($updates_order) - ]); - - //子订单 - if (request()->available_day == "today") { - $today_order_item = [ - "product_item_id" => $productItem->id, - "bed_id" => (request()->bed_id ? request()->bed_id : $order->bed_id), - "total" => $price, - "patient_quantity" => (count($new_same_paramedic_orders_price) + 1) - ]; - if ($factors_is_dirty) { - $today_order_item["factors"] = json_encode($factors); - } - $approvalItems[] = new ApprovalItems([ - "belongs_type" => OrderItems::class, - "updates" => json_encode($today_order_item) - ]); - } - - //旧相关订单 - foreach ($old_same_paramedic_orders as $old_same_paramedic_order) { - $productItem = $old_same_paramedic_order->product->productItems()->where("patient_quantity", "<=", count($old_same_paramedic_orders))->orderBy("patient_quantity", "desc")->first(); - $price = $old_same_paramedic_orders_price[$old_same_paramedic_order->id]; - - $same_paramedic_order_updates = [ - "product_item_id" => $productItem->id, - "price" => $price, - "patient_quantity" => count($old_same_paramedic_orders) - ]; - - $approvalItems[] = new ApprovalItems([ - "belongs_type" => Orders::class, - "belongs_id" => $old_same_paramedic_order->id, - "updates" => json_encode($same_paramedic_order_updates) - ]); - - if (request()->available_day == "today") { - $same_paramedic_order_last_item_updates = [ - "product_item_id" => $productItem->id, - "total" => $price, - "patient_quantity" => count($old_same_paramedic_orders) - ]; - $approvalItems[] = new ApprovalItems([ - "belongs_type" => OrderItems::class, - "belongs_id" => $old_same_paramedic_order->lastItem->id, - "updates" => json_encode($same_paramedic_order_last_item_updates) - ]); - } - } - - //新相关订单 - foreach ($new_same_paramedic_orders as $new_same_paramedic_order) { - $productItem = $new_same_paramedic_order->product->productItems()->where("patient_quantity", "<=", count($new_same_paramedic_orders) + 1)->orderBy("patient_quantity", "desc")->first(); - $price = $new_same_paramedic_orders_price[$new_same_paramedic_order->id]; - - $same_paramedic_order_updates = [ - "product_item_id" => $productItem->id, - "price" => $price, - "patient_quantity" => (count($new_same_paramedic_orders) + 1) - ]; - - $approvalItems[] = new ApprovalItems([ - "belongs_type" => Orders::class, - "belongs_id" => $new_same_paramedic_order->id, - "updates" => json_encode($same_paramedic_order_updates) - ]); - - if (request()->available_day == "today") { - $same_paramedic_order_last_item_updates = [ - "product_item_id" => $productItem->id, - "total" => $price, - "patient_quantity" => (count($new_same_paramedic_orders) + 1) - ]; - $approvalItems[] = new ApprovalItems([ - "belongs_type" => OrderItems::class, - "belongs_id" => $new_same_paramedic_order->lastItem->id, - "updates" => json_encode($same_paramedic_order_last_item_updates) - ]); - } - } - - //开始执行 - if ($need_approve_price_change) { - //写入审批记录 - DB::beginTransaction(); - try { - $expire_at = (new Approval())->generateExpireTime(); - $approval = (new Approval)->create([ - "type" => Approval::TYPE_MODIFY, - "order_id" => $order->id, - "project_id" => $order->project->id, - "created_by" => $this->manager->id, - "expire_at" => $expire_at - ]); - foreach ($approvalItems as $approvalItem) { - $approvalItem->approval_id = $approval->id; - $approvalItem->save(); - } - - $order->status = "needapprove"; - $order->approval = (new Approval())->with("approvalItems")->find($approval->id); - DB::commit(); - } catch (\Exception $exception) { - DB::rollBack(); - return response()->json([ - "errorcode" => $exception->getCode(), - "errormsg" => $exception->getMessage() - ]); - } - } else { - //执行变更(虚拟审批) - $approval = new Approval(); - $approval->approvalItems = $approvalItems; - $res = $approval->pass(); - if (!$res["status"]) { - return response()->json([ - "errorcode" => $res["errorcode"], - "errormsg" => $res["errormsg"] - ]); - } - } - - return response()->json(compact("order", "old_same_paramedic_orders", "new_same_paramedic_orders")); - } - - /** - * @OA\POST( - * path="/manager/modify-order-date/{id}", - * summary="修改订单日期", - * description="修改订单日期", - * @OA\Parameter(name="token", in="query", @OA\Schema(type="string"), required=true, description="token"), - * @OA\Parameter(name="id", in="path", @OA\Schema(type="integer"), required=true, description="id"), - * @OA\Parameter(name="from_date", in="query", @OA\Schema(type="date"), required=false, description="开始日期"), - * @OA\Parameter(name="to_date", in="query", @OA\Schema(type="date"), required=false, description="结束日期"), - * @OA\Parameter(name="auto_checkout", in="query", @OA\Schema(type="integer"), required=false, description="是否自动结单"), - * @OA\Response( - * response="200", - * description="修改订单日期" - * ) - * ) - */ - - public function modifyOrderDate($id) - { - $order = (new Orders())->find($id); - if (request()->from_date && $order->status != Orders::STATUS_UNASSIGNED) { - return response()->json([ - "errorcode" => 60002, - "errormsg" => "修改开始时间只支持未派单状态的订单" - ]); - } - - request()->from_date ? $order->from_date = request()->from_date : ""; - request()->to_date ? $order->to_date = request()->to_date : ""; - isset(request()->auto_checkout) ? $order->auto_checkout = request()->auto_checkout : ""; - $order->save(); - - return response()->json($order->toArray()); - } - - /** - * @OA\POST( - * path="/manager/pre-checkout-order/{id}", - * summary="预结单", - * description="预结单", - * @OA\Parameter(name="token", in="query", @OA\Schema(type="string"), required=true, description="token"), - * @OA\Parameter(name="id", in="path", @OA\Schema(type="string"), required=true, description="id"), - * @OA\Response( - * response="200", - * description="预结单" - * ) - * ) - */ - - /** - * @OA\POST( - * path="/manager/checkout-order/{id}", - * summary="订单结单", - * description="订单结单", - * @OA\Parameter(name="token", in="query", @OA\Schema(type="string"), required=true, description="token"), - * @OA\Parameter(name="id", in="path", @OA\Schema(type="string"), required=true, description="id"), - * @OA\Parameter(name="last_item_price", in="query", @OA\Schema(type="number"), required=true, description="结单日价格"), - * @OA\Parameter(name="available_day", in="query", @OA\Schema(type="string"), required=false, description="生效日期(针对关联订单),仅当值为today表示同步更新当日子订单价格,为其他值表示次日起生效"), - * @OA\Parameter(name="to_date", in="query", @OA\Schema(type="string"), required=false, description="生效日期(针对关联订单),仅当值为today表示同步更新当日子订单价格,为其他值表示次日起生效"), - * @OA\Parameter(name="same_paramedic_orders_price", in="query", @OA\Schema( - * type="object", - * ), required=true, description="关联订单价格实体,[{id:1,price:120},{...}],如果为空数组请传[]"), - * @OA\Response( - * response="200", - * description="订单结单" - * ) - * ) - */ - - public function checkoutOrder($id) - { - $order = (new Orders())->with(["orderItems", "customer", "handlingApprovalItem"])->find($id); - //获取当前结单时间的实时价格 - $last_day_price_of_now = $order->getLastDayPriceOfNow(); - //是否已有审批通过的审批单 - $lastPassedApproval = (new Approval()) - ->where("type", Approval::TYPE_CHECKOUT) - ->where("order_id", $order->id) - ->where("status", Approval::STATUS_PASSED) - ->with("approvalItems") - ->first(); - - if ($order->handlingApprovalItem) { - return response()->json([ - "errorcode" => 50001, - "errormsg" => "订单有未处理的审核流程,暂不可进行此操作" - ]); - } - if ($order->status !== Orders::STATUS_ONGOING) { - return response()->json([ - "errorcode" => 60001, - "errormsg" => "订单状态不适配" - ]); - } - - //改期结算 - //Log::info(request()->available_day); exit(); - if (request()->to_date && Carbon::now("Asia/Shanghai")->diffInDays(request()->to_date, false) < 0) { - //校验客户余额是否够 - $unpaid_order_items = $order->orderItems->filter(function ($item) { - return $item->paid_at == null && Carbon::parse($item->service_date)->diffInDays(request()->to_date, false) >= 0; - }); - $unpaid = $unpaid_order_items->sum("total"); - $balance = $order->customer->balance; - - if ($unpaid > $balance) { - $need_pay_money = $unpaid - $balance; - return $this->nativepayOrder($order->id, $need_pay_money); - } elseif ($unpaid < $balance) { - $money = $balance - $unpaid; - $recharge = Recharge::where("order_id", $order->id) - ->whereNotIn("payment", ["cash", "pos"]) - ->whereNotNull("paid_at") - ->doesntHave("refunds") - ->where("money", ">=", $money) - ->orderBy("id", "desc") - ->first(); - return response()->json([ - "money" => $money, - "status" => "needrefund", - "recharge" => $recharge - ]); - } - - //余额足够直接结单 - try { - DB::beginTransaction(); - //处理改期日及改期日之前的未结单 - foreach ($unpaid_order_items as $item) { - $item->update([ - "paid_at" => date("Y-m-d H:i:s") - ]); - - $balance = $order->customer->balance - $item->total; - $order->customer->update([ - "balance" => $balance - ]); - - if ($item->total == 0) { - continue; - } - - (new Balance())->create([ - "customer_id" => $order->customer->id, - "order_id" => $order->id, - "belongs_type" => get_class($item), - "belongs_id" => $item->id, - "money" => -$item->total, - "balance" => $balance - ]); - } - - //删除改期日之后的子订单 - (new Orders())->orderItems()->whereRaw("DATEDIFF('" . request()->to_date . "'," . $item->service_date . ") > 0")->delete(); - - //更新订单状态 - (new Orders())->find($order->id)->update([ - "status" => Orders::STATUS_FINISHED - ]); - - DB::commit(); - return response()->json(compact("order")); - } catch (\Exception $exception) { - DB::rollBack(); - return [ - "errorcode" => $exception->getCode(), - "errormsg" => $exception->getMessage() - ]; - } - } - - //关联订单 - $same_paramedic_orders = (new Orders()) - ->where("status", Orders::STATUS_ONGOING) - ->where("id", "<>", $order->id) - ->where("paramedic_id", $order->paramedic_id) - ->with("lastItem", "paramedic", "bed", "room", "building", "patient") - ->get(); - - //预结单 - $url_split = explode("/", request()->url()); - if ($url_split[count($url_split) - 2] == "pre-checkout-order") { - //最后一日的参考价,分两种情况取值:已审的取当前的最后一天的价格;未审的取运算出来的价格 - $order->last_day_price_of_now = $lastPassedApproval ? $order->lastItem->total : $last_day_price_of_now; - return response()->json(["order" => $order, "same_paramedic_orders" => $same_paramedic_orders->toArray()]); - } - - //判断是否每张关联子订单都提交了对应的价格,避免未经过预结单直接提交 - //同时判断是否需要审批 - $same_paramedic_orders_price = json_decode(request()->same_paramedic_orders_price, true); - $same_paramedic_orders_price = collect($same_paramedic_orders_price)->pluck("price", "id")->toArray(); - $need_approve_price_change = false; - foreach ($same_paramedic_orders as $same_paramedic_order) { - if (!in_array($same_paramedic_order->id, array_keys($same_paramedic_orders_price))) { - return response()->json([ - "errorcode" => 50004, - "errormsg" => "关联订单({$same_paramedic_order->serial})的价格未提交" - ]); - } - $need_approve_price_change = $need_approve_price_change || $same_paramedic_order->determineNeedApprovePriceChange($same_paramedic_orders_price[$same_paramedic_order->id]); - } - - //主订单是否需要审批,如需要审批直接拦断 - //需要审批:没有审批单且提交价格小于当前价格;已有审批单但是价格不符,需要重新审 - if ((!$lastPassedApproval && request()->last_item_price != $last_day_price_of_now) || ($lastPassedApproval && request()->last_item_price != $order->lastItem->total)) { - $approvalItems = []; - $last_item_updates = [ - "total" => request()->last_item_price, - ]; - $approvalItems[] = new ApprovalItems([ - "belongs_type" => Orders::class, - "belongs_id" => $order->id, - "updates" => json_encode([]) - ]); - $approvalItems[] = new ApprovalItems([ - "belongs_type" => OrderItems::class, - "belongs_id" => $order->lastItem->id, - "updates" => json_encode($last_item_updates) - ]); - DB::beginTransaction(); - - try { - $expire_at = (new Approval())->generateExpireTime(); - $approval = (new Approval)->create([ - "type" => Approval::TYPE_CHECKOUT, - "order_id" => $order->id, - "project_id" => $order->project->id, - "created_by" => $this->manager->id, - "expire_at" => $expire_at - ]); - foreach ($approvalItems as $approvalItem) { - $approvalItem->approval_id = $approval->id; - $approvalItem->save(); - } - - $order->status = "needapprove"; - $order->approval = (new Approval())->with("approvalItems")->find($approval->id); - DB::commit(); - return response()->json($order); - } catch (\Exception $exception) { - DB::rollBack(); - return response()->json([ - "errorcode" => $exception->getCode(), - "errormsg" => $exception->getMessage() - ]); - } - } - - //校验客户余额是否够 - $order->orderItems->last()->total = request()->last_item_price; - $unpaid = $order->orderItems->filter(function ($item) { - return $item->paid_at == null; - })->sum("total"); - $balance = $order->customer->balance; - - if ($unpaid > $balance) { - $need_pay_money = $unpaid - $balance; - return $this->nativepayOrder($order->id, $need_pay_money); - } elseif ($unpaid < $balance) { - $money = $balance - $unpaid; - $recharge = Recharge::where("order_id", $order->id) - ->whereNotIn("payment", ["cash", "pos"]) - ->whereNotNull("paid_at") - ->doesntHave("refunds") - ->where("money", ">=", $money) - ->orderBy("id", "desc") - ->first(); - return response()->json([ - "money" => $money, - "status" => "needrefund", - "recharge" => $recharge - ]); - } - - //开始处置订单 - DB::beginTransaction(); - try { - //写入最后一张子订单的价格 - $order->orderItems->last()->save(); - //筛选出未支付的子订单 - $unpaid_order_items = $order->orderItems->filter(function ($item) { - return $item->paid_at == null; - }); - foreach ($unpaid_order_items as $item) { - $item->update([ - "paid_at" => date("Y-m-d H:i:s") - ]); - - $balance = $order->customer->balance - $item->total; - $order->customer->update([ - "balance" => $balance - ]); - - if ($item->total == 0) { - continue; - } - - (new Balance())->create([ - "customer_id" => $order->customer->id, - "order_id" => $order->id, - "belongs_type" => get_class($item), - "belongs_id" => $item->id, - "money" => -$item->total, - "balance" => $balance - ]); - } - - (new Orders())->find($order->id)->update([ - "status" => Orders::STATUS_FINISHED - ]); - - //相关订单 - $approvalItems = []; - $patient_quantity = count($same_paramedic_orders); - foreach ($same_paramedic_orders as $same_paramedic_order) { - $productItem = $same_paramedic_order->product->productItems()->where("patient_quantity", "<=", $patient_quantity)->orderBy("patient_quantity", "desc")->first(); - $price = $same_paramedic_orders_price[$same_paramedic_order->id]; - - $same_paramedic_order_updates = [ - "product_item_id" => $productItem->id, - "price" => $price, - "patient_quantity" => $patient_quantity - ]; - $approvalItems[] = new ApprovalItems([ - "belongs_type" => Orders::class, - "belongs_id" => $same_paramedic_order->id, - "updates" => json_encode($same_paramedic_order_updates) - ]); - - if (request()->available_day == "today") { - $same_paramedic_order_last_item_updates = [ - "product_item_id" => $productItem->id, - "total" => $price, - "patient_quantity" => $patient_quantity - ]; - $approvalItems[] = new ApprovalItems([ - "belongs_type" => OrderItems::class, - "belongs_id" => $same_paramedic_order->lastItem->id, - "updates" => json_encode($same_paramedic_order_last_item_updates) - ]); - } - } - - if ($need_approve_price_change) { - $expire_at = (new Approval())->generateExpireTime(); - $approval = (new Approval)->create([ - "type" => Approval::TYPE_CAUSED_BY_CHECKOUT, - "order_id" => $order->id, - "project_id" => $order->project->id, - "created_by" => $this->manager->id, - "expire_at" => $expire_at - ]); - foreach ($approvalItems as $approvalItem) { - $approvalItem->approval_id = $approval->id; - $approvalItem->save(); - } - $order->status = "cause_same_paramedic_orders_approve"; - } else { - //执行变更(虚拟审批) - foreach ($approvalItems as $approvalItem) { - $updates = json_decode($approvalItem->updates, true); - $belongs_type = "\\" . $approvalItem->belongs_type; - $model = new $belongs_type(); - $model->find($approvalItem->belongs_id)->update($updates); - } - } - - DB::commit(); - return response()->json(compact("order", "same_paramedic_orders")); - } catch (\Exception $exception) { - DB::rollBack(); - return response()->json([ - "errorcode" => $exception->getCode(), - "errormsg" => $exception->getMessage() - ]); - } - } - /** * @OA\POST( * path="/manager/cancel-order/{id}", @@ -1657,7 +645,7 @@ class OrdersController extends CommonController /** * @OA\POST( * path="/manager/recharge-for-order/{id}", - * summary="现金或pos刷卡充值", + * summary="V2-现金或pos刷卡充值", * description="现金或pos刷卡充值", * @OA\Parameter(name="token", in="query", @OA\Schema(type="string"), required=true, description="token"), * @OA\Parameter(name="id", in="path", @OA\Schema(type="integer"), required=true, description="订单id"), @@ -1727,75 +715,10 @@ class OrdersController extends CommonController } } - /** - * @OA\Get( - * path="/manager/nativepay-order/{id}", - * summary="扫码支付", - * description="扫码支付", - * @OA\Parameter(name="token", in="query", @OA\Schema(type="string"), required=true, description="token"), - * @OA\Parameter(name="id", in="path", @OA\Schema(type="integer"), required=true, description="订单id"), - * @OA\Parameter(name="money", in="query", @OA\Schema(type="number"), required=true, description="支付金额"), - * @OA\Response( - * response="200", - * description="扫码支付" - * ) - * ) - */ - public function nativepayOrder($id, $money = false) - { - if (!$money) { - $money = request()->money; - } - if (!$money) { - return response()->json([ - "errorcode" => 60003, - "errormsg" => "请设置充值金额" - ]); - } - - $order = (new Orders())->find($id); - $recharge = (new Recharge())->create(["customer_id" => $order->customer->id, - "money" => $money, - "order_id" => $order->id, - "payment" => "weixin"]); - $recharge = $recharge->getSerial(); - - $openid = $order->customer->openid; - $unifiedOrder = new \UnifiedOrderPub(); - //$unifiedOrder->setParameter("openid", $openid);//openid - $unifiedOrder->setParameter("body", "充值{$money}元");//商品描述 - $unifiedOrder->setParameter("out_trade_no", $recharge->serial);//商户订单号 - $unifiedOrder->setParameter("total_fee", $recharge->money * 100);//总金额 - $unifiedOrder->setParameter("notify_url", get_http_type() . $_SERVER["HTTP_HOST"] . "/customer/pay-callback");//通知地址 - $unifiedOrder->setParameter("trade_type", "NATIVE");//交易类型 - - $unifiedOrder->postXml(); - $result = $unifiedOrder->xmlToArray($unifiedOrder->response); - - if (!isset($result["code_url"])) { - return response()->json([ - "errorcode" => 60003, - "errormsg" => "生成支付二维码失败:" . $result["return_msg"] - ]); - } - - $qrcode = QrCode::format("png")->size(240)->generate($result["code_url"]); - $filename = $recharge->serial . ".png"; - $file = "public/recharge-qrcode/{$filename}"; - $imageUrl = get_http_type() . $_SERVER["HTTP_HOST"] . "/storage/recharge-qrcode/{$filename}"; - Storage::disk('local')->put($file, $qrcode); - - return response()->json([ - "money" => $money, - "imageUrl" => $imageUrl, - "status" => "needrecharge" - ]); - } - /** * @OA\POST( * path="/manager/refund-for-order/{id}", - * summary="退款", + * summary="V2-退款", * description="退款", * @OA\Parameter(name="token", in="query", @OA\Schema(type="string"), required=true, description="token"), * @OA\Parameter(name="id", in="path", @OA\Schema(type="integer"), required=true, description="订单id"), @@ -1809,7 +732,6 @@ class OrdersController extends CommonController * ) * ) */ - public function refundForOrder($id) { DB::beginTransaction(); @@ -1872,152 +794,6 @@ class OrdersController extends CommonController } } - /** - * @OA\Get( - * path="/manager/get-approvals", - * summary="获取审批列表", - * description="获取审批列表", - * @OA\Parameter(name="token", in="query", @OA\Schema(type="string"), required=true, description="token"), - * @OA\Parameter(name="page", in="query", @OA\Schema(type="integer"), required=false, description="当前页码,默认为1"), - * @OA\Parameter(name="pageLength", in="query", @OA\Schema(type="integer"), required=false, description="每页数量,默认为5"), - * @OA\Parameter(name="project_id", in="query", @OA\Schema(type="integer"), required=false, description="项目/医院id"), - * @OA\Parameter(name="status", in="query", @OA\Schema(type="string"), required=false, description="状态:[handling=>待处理,passed=>已通过,rejected=>已拒绝,expired=>已过期]"), - * @OA\Response( - * response="200", - * description="获取审批列表" - * ) - * ) - */ - public function getApprovals() - { - $data = (new Approval()); - $manager_id = $this->manager->id; - switch ($this->manager->type) { - case "teacher": - $data = $data->where("created_by", $manager_id); - break; - case "manager": - $project_ids = $this->manager->managerProjects->pluck("project_id")->toArray(); - $data = $data->whereIn("project_id", $project_ids); - break; - default: - $data = $data->whereRaw("1=0"); - break; - } - - if (request()->status) { - $data = $data - ->where("status", constant(Approval::class . "::STATUS_" . strtoupper(request()->status))); - } - - $pageLength = request()->pageLength ? (int)request()->pageLength : 5; - $data = $data->with(["primaryOrder", "approvalItems"])->orderBy("id", "desc")->paginate($pageLength); - - return response()->json($data->toArray()); - } - - /** - * @OA\Get( - * path="/manager/get-approval/{id}", - * summary="获取审批列表", - * description="获取审批列表", - * @OA\Parameter(name="token", in="query", @OA\Schema(type="string"), required=true, description="token"), - * @OA\Parameter(name="id", in="path", @OA\Schema(type="integer"), required=false, description="审批单id"), - * @OA\Response( - * response="200", - * description="获取审批列表" - * ) - * ) - */ - - public function getApproval($id) - { - //todo:校验归属 - $approval = (new Approval())->with(["primaryOrder", "approvalItems" => function ($query) { - $query->with("belongs"); - }])->find($id); - - foreach ($approval->approvalItems as $approvalItem) { - $approvalItem->updates = json_decode($approvalItem->updates); - } - - return response()->json($approval ? $approval->toArray() : null); - } - - /** - * @OA\POST( - * path="/manager/pass-approval/{id}", - * summary="通过审批", - * description="通过审批", - * @OA\Parameter(name="token", in="query", @OA\Schema(type="string"), required=true, description="token"), - * @OA\Parameter(name="id", in="path", @OA\Schema(type="integer"), required=false, description="审批单id"), - * @OA\Response( - * response="200", - * description="通过审批" - * ) - * ) - */ - - public function passApproval($id) - { - //todo:校验归属 - $approval = (new Approval())->find($id); - if ($approval->status !== Approval::STATUS_HANDLING) { - return response()->json([ - "errorcode" => "60001", - "errormsg" => "状态不适配" - ]); - } - - $res = $approval->pass(); - if (!$res["status"]) { - return response()->json([ - "errorcode" => $res["errorcode"], - "errormsg" => $res["errormsg"] - ]); - } - $approval->update([ - "handled_by" => $this->manager->id - ]); - - return response()->json($approval); - } - - /** - * @OA\POST( - * path="/manager/reject-approval/{id}", - * summary="驳回审批", - * description="驳回审批", - * @OA\Parameter(name="token", in="query", @OA\Schema(type="string"), required=true, description="token"), - * @OA\Parameter(name="id", in="path", @OA\Schema(type="integer"), required=false, description="审批单id"), - * @OA\Parameter(name="rejected_reason", in="query", @OA\Schema(type="string"), required=false, description="驳回原因"), - * @OA\Response( - * response="200", - * description="驳回审批" - * ) - * ) - */ - - public function rejectApproval($id) - { - //todo:校验归属 - $approval = (new Approval())->find($id); - - if ($approval->status !== Approval::STATUS_HANDLING) { - return response()->json([ - "errorcode" => "60001", - "errormsg" => "状态不适配" - ]); - } - - $approval->update([ - "status" => Approval::STATUS_REJECTED, - "handled_by" => $this->manager->id, - "rejected_reason" => request()->rejected_reason - ]); - return response()->json($approval); - } - /** * @OA\Get( * path="/manager/get-project-paramedic-levels/{project_id}", @@ -2031,7 +807,6 @@ class OrdersController extends CommonController * ) * ) */ - public function getProjectParamedicLevels($project_id) { $paramedic_levels = ParamedicLevel::where("project_id", $project_id)->orderBy("myindex")->get(); diff --git a/routes/web.php b/routes/web.php index b50ad0b..2ad8b3c 100644 --- a/routes/web.php +++ b/routes/web.php @@ -137,7 +137,6 @@ Route::group(["namespace" => "Manager", "prefix" => "manager"], function () { Route::post('update-paramedic/{id}', 'ParamedicController@updateParamedic'); Route::post('delete-paramedic/{id}', 'ParamedicController@deleteParamedic'); Route::post('toggle-paramedic/{id}', 'ParamedicController@toggleParamedic'); - Route::get('get-paramedics', 'ParamedicController@getParamedics'); Route::get('get-project-paramedics/{project_id}', 'ParamedicController@getProjectParamedics'); Route::get('get-paramedic/{id}', 'ParamedicController@getParamedic'); @@ -156,19 +155,11 @@ Route::group(["namespace" => "Manager", "prefix" => "manager"], function () { Route::post('scan-pay/{order_id}', 'OrdersController@scanPay'); Route::get('get-project-orders/{project_id}', 'OrdersController@list'); Route::get('get-order/{id}', 'OrdersController@getOrder'); - Route::get('get-approvals', 'OrdersController@getApprovals'); - Route::get('get-approval/{id}', 'OrdersController@getApproval'); - Route::post('pass-approval/{id}', 'OrdersController@passApproval'); - Route::post('reject-approval/{id}', 'OrdersController@rejectApproval'); + Route::post('confirm-order/{id}', 'OrdersController@confirmOrder'); - Route::post('pre-assign-order/{id}', 'OrdersController@assignOrder'); Route::post('assign-order/{id}', 'OrdersController@assignOrder'); - Route::get('get-reservable-paramedics/{order_id}', 'OrdersController@getReservableParamedics'); - Route::get('get-assignable-paramedics/{order_id}', 'OrdersController@getAssignableParamedics'); - Route::post('pre-modify-order/{id}', 'OrdersController@modifyOrder'); + Route::post('modify-order/{id}', 'OrdersController@modifyOrder'); - Route::post('modify-order-date/{id}', 'OrdersController@modifyOrderDate'); - Route::post('pre-checkout-order/{id}', 'OrdersController@checkoutOrder'); Route::post('checkout-order/{id}', 'OrdersController@checkoutOrder'); Route::post('cancel-order/{id}', 'OrdersController@cancelOrder'); Route::post('get-balance/{customer_id}', 'OrdersController@getBalance');