weizong song 5 years ago
parent 1e6b726a09
commit e8dfb5a8c2

@ -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());
}
/**

@ -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",

@ -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());
}

@ -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;
}
}

Loading…
Cancel
Save