You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
472 lines
19 KiB
472 lines
19 KiB
<?php |
|
|
|
namespace App\Admin\Controllers; |
|
|
|
use App\Admin\Metrics\Examples\SelectedDormitoryNewTotal; |
|
use App\Admin\Metrics\Examples\SelectedDormitoryTotal; |
|
use App\Admin\Repositories\MultipleWorld; |
|
use App\Models\AllocationDormitoryBed; |
|
use App\Models\CompletedStep; |
|
use App\Models\Config; |
|
use App\Models\Order; |
|
use App\Models\PaymentList; |
|
use App\Models\ReportFormInfo; |
|
use App\Models\SecondaryCollege; |
|
use App\Models\SelectedDormitory; |
|
use App\Models\Speciality; |
|
use App\Models\UsersMember; |
|
use Dcat\Admin\Form; |
|
use Dcat\Admin\Grid; |
|
use Dcat\Admin\Layout\Content; |
|
use Dcat\Admin\Layout\Row; |
|
use Dcat\Admin\Show; |
|
use Dcat\Admin\Http\Controllers\AdminController; |
|
use Dcat\Admin\Support\JavaScript; |
|
use Dcat\Admin\Widgets\Metrics\Card; |
|
use Dcat\Admin\Widgets\Table; |
|
use Illuminate\Support\Facades\DB; |
|
use Illuminate\Support\MessageBag; |
|
|
|
class SelectedDormitoryController extends AdminController |
|
{ |
|
public function index(Content $content) |
|
{ |
|
return $content |
|
->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('<a href=""><i class="fa fa-eye"></i> 退学禁用</a>'); |
|
|
|
}); |
|
|
|
// 禁用创建按钮 |
|
$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(); |
|
} |
|
|
|
}); |
|
|
|
}); |
|
} |
|
|
|
}
|
|
|