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