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.
242 lines
8.0 KiB
242 lines
8.0 KiB
<?php |
|
|
|
|
|
namespace App\Admin\Extensions\Exporter; |
|
|
|
|
|
use App\Models\AllocationDormitoryBed; |
|
use App\Models\Bed; |
|
use App\Models\Building; |
|
use App\Models\Config; |
|
use App\Models\DormitoryNumber; |
|
use App\Models\DormitoryType; |
|
use App\Models\Floor; |
|
use App\Models\LivingArea; |
|
use App\Models\MultipleWorld; |
|
use App\Models\SecondaryCollege; |
|
use App\Models\SelectedDormitory; |
|
use App\Models\Speciality; |
|
use App\Models\UsersMember; |
|
use Dcat\Admin\Grid\Exporters\AbstractExporter; |
|
use Maatwebsite\Excel\Concerns\Exportable; |
|
use Maatwebsite\Excel\Concerns\FromCollection; |
|
use Maatwebsite\Excel\Concerns\WithHeadings; |
|
use Maatwebsite\Excel\Concerns\WithMapping; |
|
|
|
class ImportBedExporter extends AbstractExporter implements WithMapping, WithHeadings, FromCollection |
|
{ |
|
use Exportable; |
|
protected $fileName = '床位信息'; |
|
protected $titles = []; |
|
|
|
public function __construct() |
|
{ |
|
$this->fileName = $this->fileName.'_'.time().'.xlsx';//拼接下载文件名称 |
|
$this->titles = [ |
|
"id" => "床位ID", |
|
"sex" => "性别", |
|
"dormitory_type" => "宿舍类型", |
|
"multiple_worlds" => "几人间", |
|
"living_area" => "生活区", |
|
"building_id" => "楼栋", |
|
"floor_id" => "楼层", |
|
"dormitory_number" => "宿舍号", |
|
"bed_id" => "床号", |
|
"college" => "二级学院", |
|
"speciality" => "专业", |
|
"annual_session" => "年份", |
|
"status" => "状态", |
|
"name" => "姓名", |
|
"mobile" => "手机号", |
|
"idcard" => "身份证" |
|
]; |
|
parent::__construct(); |
|
} |
|
|
|
public function export() |
|
{ |
|
// TODO: Implement export() method. |
|
$this->download($this->fileName)->prepare(request())->send(); |
|
exit; |
|
} |
|
|
|
public function collection() |
|
{ |
|
// TODO: Implement collection() method. |
|
|
|
// return collect($this->buildData()); |
|
|
|
//取出床位详细信息 |
|
// $dormitoryBed = AllocationDormitoryBed::query()->where("id", $id)->first(); |
|
|
|
//宿舍类型 |
|
$dormitoryTypeInfo = DormitoryType::query()->get()->toArray(); |
|
$dormitoryTypeInfo = array_column($dormitoryTypeInfo, null, "id"); |
|
|
|
//多人间 |
|
$multipleInfo = MultipleWorld::query()->get()->toArray(); |
|
$multipleInfo = array_column($multipleInfo, null, "id"); |
|
|
|
//生活区 |
|
$livingInfo = LivingArea::query()->get()->toArray(); |
|
$livingInfo = array_column($livingInfo, null, "id"); |
|
|
|
//楼栋 |
|
$buildingInfo = Building::query()->get()->toArray(); |
|
$buildingInfo = array_column($buildingInfo, null, "id"); |
|
|
|
//楼层 |
|
$floorInfo = Floor::query()->get()->toArray(); |
|
$floorInfo = array_column($floorInfo, null, "id"); |
|
|
|
//宿舍号 |
|
$dormitory = DormitoryNumber::query()->get()->toArray(); |
|
$dormitory = array_column($dormitory, null, "id"); |
|
|
|
//床位号 |
|
$bed = Bed::query()->get()->toArray(); |
|
$bed = array_column($bed, null, "id"); |
|
|
|
//取出专业 |
|
$specialityInfo = Speciality::query()->get()->toArray(); |
|
$specialityInfo = array_column($specialityInfo, null, "id"); |
|
|
|
//取出二级学院 |
|
$collegeInfo = SecondaryCollege::query()->get()->toArray(); |
|
$collegeInfo = array_column($collegeInfo, null, "id"); |
|
|
|
$config = Config::query()->where([ |
|
"unique_identification" => "annual_session" |
|
])->first(); |
|
|
|
//取出当前学年所有正常的床位 |
|
$selectList = SelectedDormitory::query()->where([ |
|
"status" => SelectedDormitory::STATUS_YES, |
|
"annual_session" => $config->data, |
|
])->get()->toArray(); |
|
|
|
$selectListIds = []; |
|
|
|
if(!empty($selectList)){ |
|
$selectListIds = array_column($selectList, null, "allocation_dormitory_id"); |
|
} |
|
|
|
$chunk_list = array_chunk($this->buildData(), 1000); |
|
$newList = []; |
|
|
|
foreach($chunk_list as $value){ |
|
foreach($value as $item){ |
|
// $bedInfo = SelectedDormitory::getBedInfoByIdNew($item["id"]); |
|
|
|
$mobile = ""; |
|
$name = ""; |
|
$idcard = ""; |
|
|
|
if(!empty($selectListIds)){ |
|
if(array_key_exists($item["id"], $selectListIds)){ |
|
$userInfo = UsersMember::query()->where("unique_number", $selectListIds[$item["id"]]["unique_number"])->first(); |
|
$mobile = $userInfo->mobile; |
|
$name = $userInfo->name; |
|
$idcard = $userInfo->idcard; |
|
} |
|
} |
|
|
|
$data = [ |
|
"id" => $item["id"], |
|
"sex" => $item["sex"] == 1 ? "男" : "女", |
|
"dormitory" => $dormitoryTypeInfo[$item["dormitory_type"]]["dormitory"], |
|
"multipleInfo" => $multipleInfo[$item["multiple_worlds"]]["people"], |
|
"livingInfo" => $livingInfo[$item["living_area"]]["title"], |
|
"buildingInfo" => $buildingInfo[$item["building_id"]]["building_title"], |
|
"floorInfo" => $floorInfo[$item["floor_id"]]["floor_title"], |
|
"dormitoryNumber" => $dormitory[$item["dormitory_number"]]["dormitory_number"], |
|
"bedNumber" => $bed[$item["bed_id"]]["bed_number"], |
|
"collegeInfo" => $collegeInfo[$specialityInfo[$item["speciality_id"]]["secondary_college_id"]]["name"], |
|
"specialityName" => $specialityInfo[$item["speciality_id"]]["speciality_name"], |
|
"mobile" => $mobile, |
|
"name" => $name, |
|
"idcard" => $idcard, |
|
"status" => $item['status'] == 1 ? "正常" : "禁用", |
|
"annual_session" => $item["annual_session"], |
|
]; |
|
|
|
array_push($newList, $data); |
|
} |
|
} |
|
|
|
return collect($newList); |
|
} |
|
|
|
public function headings(): array |
|
{ |
|
// TODO: Implement headings() method. |
|
return $this->titles(); |
|
} |
|
|
|
public function mapOld($row): array |
|
{ |
|
|
|
$bedInfo = SelectedDormitory::getBedInfoByIdNew($row["id"]); |
|
|
|
$status = $row['status'] == 1 ? "正常" : "禁用"; |
|
|
|
$mobile = ""; |
|
$name = ""; |
|
$idcard = ""; |
|
|
|
//检测该床位是否被选,被选则取出用户信息 |
|
$selectInfo = SelectedDormitory::query()->where([ |
|
"allocation_dormitory_id" => $row["id"], |
|
"annual_session" => $row["annual_session"], |
|
"status" => SelectedDormitory::STATUS_YES |
|
])->first(); |
|
if(!empty($selectInfo)){ |
|
$userInfo = UsersMember::query()->where("unique_number", $selectInfo["unique_number"])->first(); |
|
$mobile = $userInfo->mobile; |
|
$name = $userInfo->name; |
|
$idcard = $userInfo->idcard; |
|
} |
|
// TODO: Implement map() method. |
|
return [ |
|
$row['id'], |
|
$bedInfo["sex"], |
|
$bedInfo["dormitory"], |
|
$bedInfo["multipleInfo"], |
|
$bedInfo["livingInfo"], |
|
$bedInfo["buildingInfo"], |
|
$bedInfo["floorInfo"], |
|
$bedInfo["dormitoryNumber"], |
|
$bedInfo["bedNumber"], |
|
$bedInfo["collegeInfo"], |
|
$bedInfo["specialityName"], |
|
$row['annual_session'], |
|
$status, |
|
$name, |
|
$mobile, |
|
"'".$idcard, |
|
]; |
|
} |
|
|
|
public function map($row): array |
|
{ |
|
// TODO: Implement map() method. |
|
return [ |
|
$row['id'], |
|
$row["sex"], |
|
$row["dormitory"], |
|
$row["multipleInfo"], |
|
$row["livingInfo"], |
|
$row["buildingInfo"], |
|
$row["floorInfo"], |
|
$row["dormitoryNumber"], |
|
$row["bedNumber"], |
|
$row["collegeInfo"], |
|
$row["specialityName"], |
|
$row['annual_session'], |
|
$row["status"], |
|
$row["name"], |
|
$row["mobile"], |
|
"'".$row["idcard"], |
|
]; |
|
} |
|
}
|
|
|