header('分配宿舍') ->description('数据统计') ->body(function (Row $row) { $row->column(6, new SelectedDormitoryTotal()); $row->column(6, new SelectedDormitoryNewTotal()); }) ->body($this->grid()); } /** * Make a grid builder. * * @return Grid */ protected function grid() { return Grid::make(new SelectedDormitory(), function (Grid $grid) { //开启边框模式 $grid->withBorder(); // 开启字段选择器功能 $grid->showColumnSelector(); $grid->column('id')->sortable(); $grid->column('annual_session'); $grid->column('idcard')->display(function($info){ $info = UsersMember::query()->where("unique_number", $this->unique_number)->first(); if(!empty($info)){ return $info->idcard; } })->help("不显示时代表未找到该用户"); $grid->column('mobile')->display(function($info){ $info = UsersMember::query()->where("unique_number", $this->unique_number)->first(); if(!empty($info)){ return $info->mobile; } })->help("不显示时代表未找到该用户"); $grid->column('user_name')->display(function(){ $info = UsersMember::query()->where("unique_number", $this->unique_number)->first(); if(!empty($info)){ $str = ''; if($info->is_test == 2){ $str = "(测试)"; } return $info->name.$str; } })->help("不显示时代表未找到该用户"); $grid->column('sex', __('性别'))->display(function(){ $info = UsersMember::query()->where("unique_number", $this->unique_number)->first(); if(empty($info)){ return "不存在此账号"; } if($info->sex == 1){ return "男"; } if($info->sex == 2){ return "女"; } return "未知"; }); $grid->column('speciality_id')->display(function(){ $info = UsersMember::query()->where("unique_number", $this->unique_number)->first(); if(!empty($info)){ $speciality = Speciality::query()->where("id", $info->speciality_id)->first(); if(!empty($speciality)){ $college = SecondaryCollege::query()->where("id", $speciality->secondary_college_id)->first(); if(!empty($college)){ return $speciality->speciality_name."({$college->name})"; } } } }); $grid->column('is_pay')->display(function(){ $info = Order::query()->where([ "unique_number" => $this->unique_number, "status" => Order::STATUS_PAID, "parent_id" => Order::PARENT_YES, "annual_session" => $this->annual_session, "selected_dormitory_id" => $this->allocation_dormitory_id ])->first(); if(empty($info)){ return "未支付"; } return "已支付"; }); $grid->column('dormitory_price')->display(function(){ $years = date("Y", time()); $timeIdCode = "2({$years})"; $info = PaymentList::query()->where([ "unique_number" => $this->unique_number, "annual_session" => $this->annual_session, "project_code" => $timeIdCode ])->first(); if(!empty($info)){ return $info->standard."(欠费:{$info->amount})"; } })->help("所选宿舍标准金额,欠费则代表还需缴纳该费用"); $grid->column('allocation_dormitory_id')->modal("床位详情", function($modal){ $modal->xl(); $list = SelectedDormitory::getBedInfoById($this->allocation_dormitory_id); return Table::make($list["lable"], $list["value"]); })->help("对应的是录入床位的详细信息"); $grid->column('allocation_dormitory_name')->help("学生在迎新系统上确认该床位时才会显示"); $grid->column('status')->select([1 => "正常", 2 => "禁用"])->help("状态为正常时才是正常在使用的床位"); $grid->filter(function (Grid\Filter $filter) { $filter->equal('allocation_dormitory_id', '床位id'); $filter->where("unique_number", function ($query) { $unique_number = ""; $userInfo = UsersMember::query()->where('mobile', $this->input)->orWhere('idcard', $this->input)->orWhere('name', $this->input)->first(['unique_number']); if(!empty($userInfo)){ $unique_number = $userInfo->unique_number; } $query->where('unique_number', $unique_number); }, '手机号/身份证/姓名'); $filter->equal('status', '状态')->select([1 => "正常", 2 => "禁用"]); }); $grid->actions(function (Grid\Displayers\Actions $actions) { // append一个操作 $actions->append(' 退学禁用'); }); // 禁用创建按钮 $grid->disableCreateButton(); // 禁用删除按钮 $grid->disableDeleteButton(); //禁用批量操作按钮 $grid->disableBatchDelete(); // 禁用详情按钮 $grid->disableViewButton(); }); } /** * Make a show builder. * * @param mixed $id * * @return Show */ protected function detail($id) { return Show::make($id, new SelectedDormitory(), function (Show $show) { $show->field('id'); $show->field('allocation_dormitory_id'); $show->field('annual_session'); $show->field('unique_number'); $show->field('allocation_dormitory_name'); $show->field('status'); $show->field('create_time'); $show->field('update_time'); }); } protected function form() { return Form::make(new SelectedDormitory(), function(Form $form){ //检测是否为新增 if ($form->isCreating()) { admin_error('操作异常', '不允许新增分配信息'); } //检测当前分配宿舍信息是否为禁用状态 if($form->model()->status == 2){ admin_error('操作异常', '不允许修改禁用的床位(修改会导致数据错乱)'); } $form->block(6, function(Form\BlockForm $form){ // 设置标题 $form->title('已分配宿舍详情'); //取出当前年份 $config = Config::query()->where([ "unique_identification" => "annual_session" ])->first(); //取出床位详细信息 $allocationDormitoryId = $form->model()->allocation_dormitory_id; $bedInfo = AllocationDormitoryBed::query()->where([ "id" => $allocationDormitoryId, // "status" => AllocationDormitoryBed::STATUS_YES, "annual_session" => $config->data, ])->first(); if(empty($bedInfo)){ // 中断后续逻辑 return $form->response()->error('找不到该床位信息或已被删除'); } $form->select('sex', '性别') ->options(config("app.url")."/api/getSex?sex=".$bedInfo->sex) ->value($bedInfo->sex) ->disable(); $form->select('speciality_id', '专业') ->options(config("app.url")."/api/getSpeciality") ->value($bedInfo->speciality_id) ->disable(); $form->select('dormitory_type', "宿舍类型") ->options(config("app.url")."/api/getDormitoryType?dormitory_type=".$bedInfo->dormitory_type) ->value($bedInfo->dormitory_type) ->disable(); $form->select('multiple_worlds', "几人间") ->options(config("app.url")."/api/getMultipleWorlds?multiple_worlds=".$bedInfo->multiple_worlds) ->value($bedInfo->multiple_worlds) ->disable(); $form->select("living_area", "生活区") ->options(config("app.url")."/api/getLiving?living_quarters=".$bedInfo->living_area) ->value($bedInfo->living_area) ->disable(); $form->select("building_id", "楼栋") ->options(config("app.url")."/api/getBuilding?building_id=".$bedInfo->building_id) ->value($bedInfo->building_id) ->disable(); $form->select("floor_id", "楼层") ->options(config("app.url")."/api/getFloor?floor_id=".$bedInfo->floor_id) ->value($bedInfo->floor_id) ->disable(); $form->select("dormitory_number", "宿舍号") ->options(config("app.url")."/api/getDormitoryNumber?dormitory_number=".$bedInfo->dormitory_number) ->value($bedInfo->dormitory_number) ->disable(); $form->select("bed_id", "床位") ->options(config("app.url")."/api/getBed?bed_id=".$bedInfo->bed_id) ->value($bedInfo->bed_id) ->disable(); }); $form->block(6, function(Form\BlockForm $form){ // 设置标题 $form->title('重新分配宿舍'); //取出用户信息 $userInfo = UsersMember::query()->where([ "unique_number" => $form->model()->unique_number, ])->first(); $form->select('sex_new', '性别') ->options(config("app.url")."/api/getSex?sex=".$userInfo->sex) ->value($userInfo->sex) ->load("speciality_id_new", config("app.url")."/api/getSpecialityLoad?sex=".$userInfo->sex) ->required(); $form->select('speciality_id_new', '专业') ->load("dormitory_type_new", config("app.url")."/api/getDormitoryTypeLoad?sex=".$userInfo->sex) ->required(); $form->select('dormitory_type_new', "宿舍类型") ->load("multiple_worlds_new", config("app.url")."/api/getMultiplWorldsLoad") ->required(); $form->select('multiple_worlds_new', "几人间") ->load("living_area_new", config("app.url")."/api/getLivingAreaLoad") ->required(); $form->select('living_area_new', "生活区") ->load("building_id_new", config("app.url")."/api/getBuildingLoad") ->required(); $form->select("building_id_new", "楼栋") ->load("floor_id_new", config("app.url")."/api/getFloorLoad") ->required(); $form->select("floor_id_new", "楼层") ->load("dormitory_number_new", config("app.url")."/api/getDormitoryNumberLoad") ->required(); $form->select("dormitory_number_new", "宿舍号") ->load("bed_id_new", config("app.url")."/api/getBedLoad") ->required(); $form->select("bed_id_new", "床位")->required(); // 显示底部提交按钮 $form->showFooter(); }); //设置不提交保存 $form->ignore([ "sex", "speciality_id", "dormitory_type", "multiple_worlds", "living_area", "building_id", "floor_id", "dormitory_number", "bed_id", "sex_new", "speciality_id_new", "dormitory_type_new", "multiple_worlds_new", "living_area_new", "building_id_new", "floor_id_new", "dormitory_number_new", "bed_id_new", ]); $form->submitted(function (Form $form) { // 获取用户提交参数 $bed_id_new = json_decode($form->bed_id_new, true); $dormitory_type_new = json_decode($form->dormitory_type_new, true); $id = request()->route()->parameters()["selected_dormitory"]; //取出当前年份 $config = Config::query()->where([ "unique_identification" => "annual_session" ])->first(); //取出当前id的数据 $thisSelectInfo = SelectedDormitory::query()->where([ "id" => $id, "status" => SelectedDormitory::STATUS_YES ])->first(); if(empty($thisSelectInfo)){ // 中断后续逻辑 return $form->response()->error('查询不到当前信息,请重试~'); } //组装查询条件 $bedInfo = [ "dormitory_type" => $bed_id_new["dormitory_type"], "multiple_worlds" => $bed_id_new["multiple_worlds"], "living_area" => $bed_id_new["living_area"], "building_id" => $bed_id_new["building"], "floor_id" => $bed_id_new["floor"], "dormitory_number" => $bed_id_new["dormitory_number"], "bed_id" => $bed_id_new["id"], "speciality_id" => $dormitory_type_new["speciality_id"], "sex" => $dormitory_type_new["sex"], "annual_session" => $config->data, "status" => AllocationDormitoryBed::STATUS_YES ]; $checkBedInfo = AllocationDormitoryBed::query()->where($bedInfo)->first(); if(empty($checkBedInfo)){ // 中断后续逻辑 return $form->response()->error('查询不到该床位,请重试~'); } //检测是否被选 $checkSelect = SelectedDormitory::query()->where([ "allocation_dormitory_id" => $checkBedInfo->id, "status" => SelectedDormitory::STATUS_YES ])->first(); if(!empty($checkSelect)){ // 中断后续逻辑 return $form->response()->error('该床位已被选,请重试~'); } //检测订单是否支付 $orderInfo = Order::query()->where([ "unique_number" => $thisSelectInfo->unique_number, "status" => Order::STATUS_PAID, "annual_session" => $config->data, "parent_id" => Order::PARENT_YES, ])->first(); if(empty($orderInfo)){ // 中断后续逻辑 return $form->response()->error('当前用户未缴费,请重试~'); } //取出宿舍标准金额 $checkMultiplWorldInfo = \App\Models\MultipleWorld::query()->where([ "id" => $bedInfo["multiple_worlds"], "dormitory_type_id" => $bedInfo["dormitory_type"], "status" => \App\Models\MultipleWorld::STATUS_YES ])->first(); if(empty($checkMultiplWorldInfo)){ // 中断后续逻辑 return $form->response()->error('未找到对应几人间价格,请重试~'); } DB::beginTransaction(); try { //修改父级订单分配宿舍信息 $updateOrder = Order::query()->where("id", $orderInfo->id)->update([ "selected_dormitory_id" => $checkBedInfo->id, "dormitory_price" => $checkMultiplWorldInfo->price, "update_time" => time() ]); if(empty($updateOrder)){ throw new \Exception("同步订单信息失败"); } //删除用户已选宿舍后面所有步骤 CompletedStep::query()->where([ "unique_number" => $thisSelectInfo->unique_number, ])->where("step_id", ">=", 5)->delete(); //删除已生成报到单 ReportFormInfo::query()->where([ "unique_number" => $thisSelectInfo->unique_number, "annual_session" => $config->data, ])->delete(); //同步当前已分配信息 $updateSelectInfo = SelectedDormitory::query()->where([ "id" => $id, "unique_number" => $thisSelectInfo->unique_number ])->update([ "allocation_dormitory_id" => $checkBedInfo->id, "status" => SelectedDormitory::STATUS_YES, "allocation_dormitory_name" => "", "update_time" => time(), ]); if(empty($updateSelectInfo)){ throw new \Exception("同步当前已分配宿舍信息失败,请重试~"); } DB::commit(); redirect(url('admin/selected_dormitory')); }catch (\Exception $e){ DB::rollBack(); } }); }); } }