From e8dfb5a8c2b465fb135b509a8ff73be6925420e5 Mon Sep 17 00:00:00 2001 From: weizong song Date: Sun, 4 Apr 2021 12:48:27 +0800 Subject: [PATCH] up --- .../Controllers/Customer/OrdersController.php | 58 +---------------- .../Controllers/Manager/OrdersController.php | 23 +++++++ .../Manager/StatisticsController.php | 9 +-- app/Models/Orders.php | 62 +++++++++++++++++++ 4 files changed, 89 insertions(+), 63 deletions(-) diff --git a/app/Http/Controllers/Customer/OrdersController.php b/app/Http/Controllers/Customer/OrdersController.php index 483eb81..2633f0e5 100644 --- a/app/Http/Controllers/Customer/OrdersController.php +++ b/app/Http/Controllers/Customer/OrdersController.php @@ -126,62 +126,8 @@ class OrdersController extends CommonController public function getAvailableParamedics(Request $request) { - DB::enableQueryLog(); - $bed = (new Bed())->find($request->bed_id); - $date = $request->start_date ?? date("Y-m-d"); - - $model = new Paramedic(); - $model = $model->where("project_id", $bed->project_id); - $model = $model->where("status", 1); - $model = $model->with(["project", "levelInProject"]); - $model = $model->withCount(["orders"]); - $model = $model->select("id", "name", "avatar", "sex", "birthday", "hometown", "work_years", "paramedic_level_id", "project_id"); - //性别筛选:如果是女患者,选择女的护工 - if ($request->sex == "女") { - $model = $model->where("sex", "女"); - } - //todo:护工所在病区筛选 - - //一对N的数量排序 - $model->withCount(["orders as ongoing_orders_count" => function ($query) use ($date) { - //todo:与日期及自动结单关联 - $query->where("status", Orders::STATUS_ONGOING); - }]); - $model = $model->orderBy("ongoing_orders_count"); - //同房间的排序 - $model->withCount(["orders as ongoing_orders_count_in_same_room" => function ($query) use ($date, $bed) { - //todo:与日期及自动结单关联 - $query->where("status", Orders::STATUS_ONGOING)->whereHas("room", function ($query) use ($bed) { - $query->whereRaw("`room`.`id` = {$bed->room_id}"); - }); - }]); - $model = $model->orderBy("ongoing_orders_count_in_same_room", "desc"); - //同病区其他房间的病床排序 - $model->withCount(["orders as ongoing_orders_count_in_same_area" => function ($query) use ($date, $bed) { - //todo:与日期及自动结单关联 - $query->where("status", Orders::STATUS_ONGOING)->whereHas("area", function ($query) use ($bed) { - $query->whereRaw("`area`.`id` = {$bed->area_id}"); - }); - }]); - $model = $model->orderBy("ongoing_orders_count_in_same_area", "desc"); - - $page_size = 3; - $paramedics = $model->limit($page_size)->get(); - - //价格运算 - $factors = (new Orders())->requestFactorsToOrderFactors(); - foreach ($paramedics as $paramedic) { - $product_item = ProductItems::where("patient_quantity", "<=", $paramedic->ongoing_orders_count + 1)->orderBy("patient_quantity", "desc")->first(); - $price = $paramedic->levelInProject->price + $product_item->price; - foreach ($factors as $factor) { - $price += $factor["price"]; - } - $paramedic->price = $price; - } - - $result = []; - $result[$date] = $paramedics->toArray(); - return response()->json($result); + $paramedics = (new Orders())->getAvailableParamedics(); + return response()->json($paramedics->toArray()); } /** diff --git a/app/Http/Controllers/Manager/OrdersController.php b/app/Http/Controllers/Manager/OrdersController.php index 8ce550d..168bdc6 100644 --- a/app/Http/Controllers/Manager/OrdersController.php +++ b/app/Http/Controllers/Manager/OrdersController.php @@ -273,6 +273,29 @@ class OrdersController extends CommonController return response()->json($order->toArray()); } + /** + * @OA\Get( + * path="/manager/get-available-paramedics", + * summary="V2-获取可用护工列表(已基本准确,需进一步打磨)", + * description="获取可用护工列表", + * @OA\Parameter(name="token", in="query", @OA\Schema(type="string"), required=true, description="token"), + * @OA\Parameter(name="bed_id", in="query", @OA\Schema(type="integer"), required=true, description="床位ID"), + * @OA\Parameter(name="sex", in="query", @OA\Schema(type="string"), required=true, description="性别:[男/女]"), + * @OA\Parameter(name="start_date", in="query", @OA\Schema(type="string"), required=false, description="日期,默认为当天"), + * @OA\Parameter(name="factors", in="query", @OA\Schema(type="object"), required=true, description="价格因子选择,[{id:1,factor_item_id:1},{...}],如果为空数组请传[]"), + * @OA\Response( + * response="200", + * description="获取可用护工列表" + * ) + * ) + */ + + public function getAvailableParamedics(Request $request) + { + $paramedics = (new Orders())->getAvailableParamedics(); + return response()->json($paramedics->toArray()); + } + /** * @OA\Get( * path="/manager/get-paramedics", diff --git a/app/Http/Controllers/Manager/StatisticsController.php b/app/Http/Controllers/Manager/StatisticsController.php index 40c8476..cde8a2d 100644 --- a/app/Http/Controllers/Manager/StatisticsController.php +++ b/app/Http/Controllers/Manager/StatisticsController.php @@ -38,8 +38,8 @@ class StatisticsController extends CommonController }])->select("bed.id", "bed.name", "bed.room_id", "bed.area_id", "bed.myindex") ->leftJoin("room", "bed.room_id", "=", "room.id") ->addSelect("room.name as room_name") - ->orderBy("room.myindex") - ->orderBy("bed.myindex"); + ->orderBy("room.name") + ->orderBy("bed.name"); }]) ->whereRaw("`area`.`project_id` = '{$request->project_id}'") ->orderBy("building.myindex") @@ -49,11 +49,6 @@ class StatisticsController extends CommonController ->addSelect("building.name as building_name") ->withCount("beds") ->get(); - if ($request->has_ongoing_order) { - $areas = $areas->filter(function ($item) { - return $item->beds->count(); - }); - } return response()->json($areas->toArray()); } diff --git a/app/Models/Orders.php b/app/Models/Orders.php index dd2cd64..b1881e4 100755 --- a/app/Models/Orders.php +++ b/app/Models/Orders.php @@ -429,4 +429,66 @@ class Orders extends SoftDeletesModel return $request_factors->diffAssoc($order_factors_to_request_factors)->count(); } + + //获取可用护工 + public function getAvailableParamedics() { + DB::enableQueryLog(); + $request = request(); + $bed = (new Bed())->find($request->bed_id); + $date = $request->start_date ?? date("Y-m-d"); + + $model = new Paramedic(); + $model = $model->where("project_id", $bed->project_id); + $model = $model->where("status", 1); + $model = $model->with(["project", "levelInProject"]); + $model = $model->withCount(["orders"]); + $model = $model->select("id", "name", "avatar", "sex", "birthday", "hometown", "work_years", "paramedic_level_id", "project_id"); + //性别筛选:如果是女患者,选择女的护工 + if ($request->sex == "女") { + $model = $model->where("sex", "女"); + } + //todo:护工所在病区筛选 + + //一对N的数量排序 + $model->withCount(["orders as ongoing_orders_count" => function ($query) use ($date) { + //todo:与日期及自动结单关联 + $query->where("status", Orders::STATUS_ONGOING); + }]); + $model = $model->orderBy("ongoing_orders_count"); + //同房间的排序 + $model->withCount(["orders as ongoing_orders_count_in_same_room" => function ($query) use ($date, $bed) { + //todo:与日期及自动结单关联 + $query->where("status", Orders::STATUS_ONGOING)->whereHas("room", function ($query) use ($bed) { + $query->whereRaw("`room`.`id` = {$bed->room_id}"); + }); + }]); + $model = $model->orderBy("ongoing_orders_count_in_same_room", "desc"); + //同病区其他房间的病床排序 + $model->withCount(["orders as ongoing_orders_count_in_same_area" => function ($query) use ($date, $bed) { + //todo:与日期及自动结单关联 + $query->where("status", Orders::STATUS_ONGOING)->whereHas("area", function ($query) use ($bed) { + $query->whereRaw("`area`.`id` = {$bed->area_id}"); + }); + }]); + $model = $model->orderBy("ongoing_orders_count_in_same_area", "desc"); + + $page_size = 3; + $paramedics = $model->limit($page_size)->get(); + + //价格运算 + $factors = (new Orders())->requestFactorsToOrderFactors(); + foreach ($paramedics as $paramedic) { + $product_item = ProductItems::where("patient_quantity", "<=", $paramedic->ongoing_orders_count + 1)->orderBy("patient_quantity", "desc")->first(); + $price = $paramedic->levelInProject->price + $product_item->price; + foreach ($factors as $factor) { + $price += $factor["price"]; + } + $paramedic->price = $price; + } + + $result = []; + $result[$date] = $paramedics->toArray(); + + return $result; + } }