海工商新版后台
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

<?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"],
];
}
}