|
|
|
|
<?php
|
|
|
|
|
/**
|
|
|
|
|
* Created by PhpStorm.
|
|
|
|
|
* User: weizongsong
|
|
|
|
|
* Date: 2019-04-12
|
|
|
|
|
* Time: 22:34
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
namespace App\Http\Controllers\Admin;
|
|
|
|
|
|
|
|
|
|
use App\Admin;
|
|
|
|
|
use App\Events\ProjectSaved;
|
|
|
|
|
use App\Exports\CommonExport;
|
|
|
|
|
use App\Forms\ProjectForm;
|
|
|
|
|
use App\Models\AdminAreaLink;
|
|
|
|
|
use App\Models\Area;
|
|
|
|
|
use App\Models\Bed;
|
|
|
|
|
use App\Models\Building;
|
|
|
|
|
use App\Models\ParamedicLevel;
|
|
|
|
|
use App\Models\Project;
|
|
|
|
|
use App\Models\Room;
|
|
|
|
|
use Illuminate\Http\Request;
|
|
|
|
|
use Illuminate\Support\Facades\DB;
|
|
|
|
|
use Kris\LaravelFormBuilder\FormBuilder;
|
|
|
|
|
use Maatwebsite\Excel\Facades\Excel;
|
|
|
|
|
use Spatie\Permission\Models\Role;
|
|
|
|
|
|
|
|
|
|
class ProjectController extends CommonController
|
|
|
|
|
{
|
|
|
|
|
public $bladePath = "admin.project";
|
|
|
|
|
public $urlPrefix = "admin/project";
|
|
|
|
|
public $modelName = "医院/项目";
|
|
|
|
|
public $modelClass = Project::class;
|
|
|
|
|
public $formClass = ProjectForm::class;
|
|
|
|
|
|
|
|
|
|
public function index(Request $request)
|
|
|
|
|
{
|
|
|
|
|
$data = $this->model->with("paramedicLevels")->paginate(10);
|
|
|
|
|
return view($this->bladePath . ".index", compact("data"));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function stored($model)
|
|
|
|
|
{
|
|
|
|
|
event(new ProjectSaved($model));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function edit($id = null, Request $request, FormBuilder $formBuilder)
|
|
|
|
|
{
|
|
|
|
|
$vo = (new Project())->with("paramedicLevels")->find($id ?: $request->id);
|
|
|
|
|
|
|
|
|
|
$form = $formBuilder->create($this->formClass, [
|
|
|
|
|
"method" => "POST",
|
|
|
|
|
"id" => "fm",
|
|
|
|
|
"url" => url($this->urlPrefix . "/update/" . $vo->id),
|
|
|
|
|
"class" => "form form-horizontal validate-form",
|
|
|
|
|
"model" => $vo
|
|
|
|
|
]);
|
|
|
|
|
$form->add("_previous", "hidden", ["value" => (url()->previous())]);
|
|
|
|
|
|
|
|
|
|
return view($this->bladePath . ".create", compact("form"));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function updated($model)
|
|
|
|
|
{
|
|
|
|
|
event(new ProjectSaved($model));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function beds($id)
|
|
|
|
|
{
|
|
|
|
|
$project = (new Project())->with(["buildings"])->find($id);
|
|
|
|
|
$data = (new Bed())->where("project_id", $id)->orderBy("id", "desc")->with(["project", "building", "area", "room"]);
|
|
|
|
|
if (request()->room_id) {
|
|
|
|
|
$data = $data->where("room_id", request()->room_id);
|
|
|
|
|
$room = (new Room())->find(request()->room_id);
|
|
|
|
|
$rooms = (new Room())->where("area_id", $room->area_id)->get();
|
|
|
|
|
$area = (new Area())->where("id", $room->area_id)->first();
|
|
|
|
|
$areas = (new Area())->where("building_id", $area->building_id)->get();
|
|
|
|
|
view()->share(compact("rooms", "areas"));
|
|
|
|
|
} elseif (request()->area_id) {
|
|
|
|
|
$data = $data->where("area_id", request()->area_id);
|
|
|
|
|
$area = (new Area())->find(request()->area_id);
|
|
|
|
|
$areas = (new Area())->where("building_id", $area->building_id)->get();
|
|
|
|
|
$rooms = (new Room())->where("area_id", $area->id)->get();
|
|
|
|
|
view()->share(compact("areas", "rooms"));
|
|
|
|
|
} elseif (request()->building_id) {
|
|
|
|
|
$areas = (new Area())->where("building_id", request()->building_id)->get();
|
|
|
|
|
$data = $data->where("building_id", request()->building_id);
|
|
|
|
|
view()->share(compact("areas"));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
$data = $data->paginate(10);
|
|
|
|
|
return view($this->bladePath . ".beds", compact("project", "data"));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function getHeadList()
|
|
|
|
|
{
|
|
|
|
|
$areaId = \request('area_id', 0);
|
|
|
|
|
// 获取护士长
|
|
|
|
|
$roleId = Role::where('name', 'like', '%护士长%')->where('guard_name', 'admin')->value('id');
|
|
|
|
|
$adminIds = DB::table('model_has_roles')->where('role_id', $roleId)->where('model_type', 'App\Admin')->pluck('model_id');
|
|
|
|
|
// 全量护工数据
|
|
|
|
|
$headList = Admin::whereIn('id', $adminIds)->get();
|
|
|
|
|
// 获取病区选中的护工
|
|
|
|
|
foreach ($headList as $item) {
|
|
|
|
|
$item->selected = '';
|
|
|
|
|
if ($areaId) {
|
|
|
|
|
$has = AdminAreaLink::where('area_id', $areaId)->where('admin_id', $item->id)->count();
|
|
|
|
|
if ($has) $item->selected = 'selected';
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return $this->ajaxResponse($headList);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function createSub(Request $request)
|
|
|
|
|
{
|
|
|
|
|
switch ($request->type) {
|
|
|
|
|
case "project":
|
|
|
|
|
$data = [
|
|
|
|
|
"project_id" => $request->id,
|
|
|
|
|
"name" => $request->name,
|
|
|
|
|
"myindex" => $request->myindex
|
|
|
|
|
];
|
|
|
|
|
$res = (new Building())->create($data);
|
|
|
|
|
break;
|
|
|
|
|
case "building":
|
|
|
|
|
$parent = Building::find($request->id);
|
|
|
|
|
$data = [
|
|
|
|
|
"project_id" => $parent->project_id,
|
|
|
|
|
"building_id" => $request->id,
|
|
|
|
|
"name" => $request->name,
|
|
|
|
|
"myindex" => $request->myindex
|
|
|
|
|
];
|
|
|
|
|
$res = (new Area())->create($data);
|
|
|
|
|
// 添加选中的护工
|
|
|
|
|
$links = [];
|
|
|
|
|
foreach ($request->head as $item) {
|
|
|
|
|
$links[] = [
|
|
|
|
|
'admin_id' => $item,
|
|
|
|
|
'area_id' => $res->id,
|
|
|
|
|
'created_at' => date('Y-m-d H:i:s')
|
|
|
|
|
];
|
|
|
|
|
}
|
|
|
|
|
AdminAreaLink::insert($links);
|
|
|
|
|
break;
|
|
|
|
|
case "area":
|
|
|
|
|
$parent = Area::find($request->id);
|
|
|
|
|
$data = [
|
|
|
|
|
"project_id" => $parent->project_id,
|
|
|
|
|
"building_id" => $parent->building_id,
|
|
|
|
|
"area_id" => $request->id,
|
|
|
|
|
"name" => $request->name,
|
|
|
|
|
"myindex" => $request->myindex
|
|
|
|
|
];
|
|
|
|
|
$res = (new Room())->create($data);
|
|
|
|
|
break;
|
|
|
|
|
case "room":
|
|
|
|
|
$parent = Room::find($request->id);
|
|
|
|
|
$data = [
|
|
|
|
|
"project_id" => $parent->project_id,
|
|
|
|
|
"building_id" => $parent->building_id,
|
|
|
|
|
"area_id" => $parent->area_id,
|
|
|
|
|
"room_id" => $request->id,
|
|
|
|
|
"name" => $request->name,
|
|
|
|
|
"myindex" => $request->myindex
|
|
|
|
|
];
|
|
|
|
|
$res = (new Bed())->create($data);
|
|
|
|
|
break;
|
|
|
|
|
default:
|
|
|
|
|
return $this->error("不正确的类型");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return $this->success("添加成功!", '', $res);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function getSubs(Request $request)
|
|
|
|
|
{
|
|
|
|
|
switch ($request->type) {
|
|
|
|
|
case "building":
|
|
|
|
|
$res = (new Area())->where("building_id", $request->id)->get();
|
|
|
|
|
break;
|
|
|
|
|
case "area":
|
|
|
|
|
$res = (new Room())->where("area_id", $request->id)->get();
|
|
|
|
|
break;
|
|
|
|
|
default:
|
|
|
|
|
$res = [];
|
|
|
|
|
}
|
|
|
|
|
return $this->ajaxResponse($res);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function editDepartment(Request $request)
|
|
|
|
|
{
|
|
|
|
|
$data = [
|
|
|
|
|
"name" => $request->name,
|
|
|
|
|
"myindex" => $request->myindex
|
|
|
|
|
];
|
|
|
|
|
switch ($request->type) {
|
|
|
|
|
case "building":
|
|
|
|
|
$res = (new Building())->find($request->id)->update($data);
|
|
|
|
|
break;
|
|
|
|
|
case "area":
|
|
|
|
|
$res = (new Area())->find($request->id)->update($data);
|
|
|
|
|
// 删除原来关联,添加新关联
|
|
|
|
|
AdminAreaLink::where('area_id',$request->id)->delete();
|
|
|
|
|
$links = [];
|
|
|
|
|
foreach ($request->head as $item) {
|
|
|
|
|
$links[] = [
|
|
|
|
|
'admin_id' => $item,
|
|
|
|
|
'area_id' => $res->id,
|
|
|
|
|
'created_at' => date('Y-m-d H:i:s')
|
|
|
|
|
];
|
|
|
|
|
}
|
|
|
|
|
AdminAreaLink::insert($links);
|
|
|
|
|
break;
|
|
|
|
|
case "room":
|
|
|
|
|
$res = (new Room())->find($request->id)->update($data);
|
|
|
|
|
break;
|
|
|
|
|
case "bed":
|
|
|
|
|
$res = (new Bed())->find($request->id)->update($data);
|
|
|
|
|
break;
|
|
|
|
|
default:
|
|
|
|
|
return $this->error("不正确的类型");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return $this->success($res);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function deleteDepartment(Request $request)
|
|
|
|
|
{
|
|
|
|
|
switch ($request->type) {
|
|
|
|
|
case "building":
|
|
|
|
|
$vo = (new Building())->find($request->id);
|
|
|
|
|
break;
|
|
|
|
|
case "area":
|
|
|
|
|
$vo = (new Area())->find($request->id);
|
|
|
|
|
break;
|
|
|
|
|
case "room":
|
|
|
|
|
$vo = (new Room())->find($request->id);
|
|
|
|
|
break;
|
|
|
|
|
case "bed":
|
|
|
|
|
$vo = (new Bed())->find($request->id);
|
|
|
|
|
break;
|
|
|
|
|
default:
|
|
|
|
|
return $this->error("不正确的类型");
|
|
|
|
|
}
|
|
|
|
|
$res = $vo->delete();
|
|
|
|
|
|
|
|
|
|
if ($res) {
|
|
|
|
|
return $this->success("删除成功");
|
|
|
|
|
} else {
|
|
|
|
|
return $this->success("删除失败");
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function exportBeds(Request $request)
|
|
|
|
|
{
|
|
|
|
|
$beds = Bed::with(["area", "building", "room"])
|
|
|
|
|
->whereHas("area")
|
|
|
|
|
->whereHas("building")
|
|
|
|
|
->whereHas("room")
|
|
|
|
|
->where("project_id", $request->project_id)
|
|
|
|
|
->orderBy("building_id")
|
|
|
|
|
->orderBy("area_id")
|
|
|
|
|
->orderBy("room_id")
|
|
|
|
|
->get();
|
|
|
|
|
$data = [];
|
|
|
|
|
foreach ($beds as $bed) {
|
|
|
|
|
$data[] = [
|
|
|
|
|
"楼栋" => $bed->building ? $bed->building->name : "",
|
|
|
|
|
"病区" => $bed->area ? $bed->area->name : "",
|
|
|
|
|
"病房" => $bed->room ? $bed->room->name : "",
|
|
|
|
|
"床号" => $bed->name,
|
|
|
|
|
];
|
|
|
|
|
}
|
|
|
|
|
$data = collect($data);
|
|
|
|
|
|
|
|
|
|
return Excel::download(new CommonExport($data), "beds.xlsx");
|
|
|
|
|
}
|
|
|
|
|
}
|