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.
116 lines
3.4 KiB
116 lines
3.4 KiB
<?php
|
|
|
|
namespace App\Imports;
|
|
|
|
use App\Models\EventCalendar;
|
|
use App\Models\ParkingPattern;
|
|
use App\Services\AdminTranslationService;
|
|
use App\Services\OperationLogService;
|
|
use Maatwebsite\Excel\Concerns\ToModel;
|
|
|
|
class EventCalendarImport implements ToModel
|
|
{
|
|
protected string $user_id;
|
|
protected OperationLogService $logService;
|
|
protected int $index = 1;
|
|
|
|
public function __construct(string $user_id)
|
|
{
|
|
$this->user_id = $user_id;
|
|
$this->logService = new OperationLogService();
|
|
$this->logService->menuTitle = 'event_calendar';
|
|
}
|
|
|
|
/**
|
|
* @param array $row
|
|
* @return false|void
|
|
*/
|
|
public function model(array $row)
|
|
{
|
|
if ($this->index == 1) {
|
|
$this->index += 1;
|
|
return;
|
|
}
|
|
$pattern_name = $row[1];
|
|
$start_date = $row[2];
|
|
$start_time = $row[3];
|
|
$end_date = $row[4];
|
|
$end_time = $row[5];
|
|
if (empty($pattern_name)) {
|
|
return ;
|
|
}
|
|
$pattern_id = ParkingPattern::getId($pattern_name);
|
|
if (!$pattern_id) {
|
|
$pattern_id = AdminTranslationService::getTypeId(10, $pattern_name);
|
|
if (!$pattern_id) {
|
|
return;
|
|
}
|
|
}
|
|
if (EventCalendar::query()->whereIn('status', [0, 1])->where(
|
|
'pattern_id',
|
|
$pattern_id
|
|
)
|
|
->exists()
|
|
) {
|
|
return ;
|
|
}
|
|
$start_date_times = strtotime($start_date);
|
|
$start_times = strtotime($start_time);
|
|
$end_date_times = strtotime($end_date);
|
|
$end_times = strtotime($end_time);
|
|
if (!$start_date_times) {
|
|
return ;
|
|
}
|
|
if (!$start_times) {
|
|
return ;
|
|
}
|
|
if (!$end_date_times) {
|
|
return ;
|
|
}
|
|
if (!$end_times) {
|
|
return ;
|
|
}
|
|
$start_date = date("Y-m-d", $start_date_times);
|
|
$start_time = date("H:i:s", $start_times);
|
|
$end_date_time = date("Y-m-d", $end_date_times);
|
|
$end_time = date("H:i:s", $end_times);
|
|
$save_start_time = $start_date . ' ' . $start_time;
|
|
$save_end_time = $end_date_time . ' ' . $end_time;
|
|
|
|
// 开始时间不能大于结束时间
|
|
if (strtotime($save_start_time) > strtotime($save_end_time)) {
|
|
return;
|
|
}
|
|
// 开始时间 和 结束时间段 存在活动不允许上传
|
|
$start_time_exists = $this->validateDate($save_start_time);
|
|
$end_time_exists = $this->validateDate($save_end_time);
|
|
if ($start_time_exists || $end_time_exists) {
|
|
return;
|
|
}
|
|
|
|
$create = [
|
|
'pattern_id' => $pattern_id,
|
|
'admin_user_id' => $this->user_id,
|
|
'start_time' => $save_start_time,
|
|
'end_time' => $save_end_time,
|
|
'status' => 0,
|
|
'created_at' => get_datetime()
|
|
];
|
|
|
|
$model = EventCalendar::query()->create($create);
|
|
|
|
$this->logService->logCreated($model, 'event_calendar.import');
|
|
}
|
|
|
|
protected function validateDate($datetime)
|
|
{
|
|
$model = EventCalendar::query();
|
|
return $model->whereIn('status', [0, 1])
|
|
->where(function ($query) use ($datetime) {
|
|
$query->whereRaw(
|
|
"'{$datetime}' BETWEEN start_time AND end_time"
|
|
);
|
|
})
|
|
->exists();
|
|
}
|
|
}
|
|
|