Browse Source

活动行事历导入导出翻译优化

master
wanghongjun 15 hours ago
parent
commit
349e3078f1
  1. 20
      app/Exports/EventCalendarTemplateExport.php
  2. 53
      app/Imports/EventCalendarImport.php
  3. 13
      app/Services/AdminTranslationService.php
  4. 7
      resources/lang/en/exports.php
  5. 2
      resources/lang/en/middleware.php
  6. 7
      resources/lang/zh-CN/exports.php
  7. 2
      resources/lang/zh-CN/middleware.php
  8. 7
      resources/lang/zh-TW/exports.php
  9. 2
      resources/lang/zh-TW/middleware.php
  10. 2
      routes/admin/api.php

20
app/Exports/EventCalendarTemplateExport.php

@ -10,20 +10,20 @@ class EventCalendarTemplateExport implements FromArray
{
return [
[
'No.',
'Mode Name',
'Start Date',
'Start Time',
'End Date',
'End Time'
__exports('global.index'),
__exports('event_calendar.export1'),
__exports('event_calendar.export2'),
__exports('event_calendar.export3'),
__exports('event_calendar.export4'),
__exports('event_calendar.export5')
],
[
'1',
'Raceday - Major Raceday',
' 2026-10-01',
'10:30:00',
' 2026-10-01',
'18:30:00'
'2026-10-01',
'10:30',
'2026-10-01',
'18:30'
]
];
}

53
app/Imports/EventCalendarImport.php

@ -4,14 +4,15 @@ namespace App\Imports;
use App\Models\EventCalendar;
use App\Models\ParkingPattern;
use App\Services\AdminTranslationService;
use App\Services\OperationLogService;
use Maatwebsite\Excel\Concerns\ToModel;
use Maatwebsite\Excel\Concerns\WithHeadingRow;
class EventCalendarImport implements ToModel, WithHeadingRow
class EventCalendarImport implements ToModel
{
protected string $user_id;
protected OperationLogService $logService;
protected int $index = 1;
public function __construct(string $user_id)
{
@ -26,17 +27,24 @@ class EventCalendarImport implements ToModel, WithHeadingRow
*/
public function model(array $row)
{
$pattern_name = $row['mode_name'];
$start_date = $row['start_date'];
$start_time = $row['start_time'];
$end_date = $row['end_date'];
$end_time = $row['end_time'];
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) {
return ;
$pattern_id = AdminTranslationService::getTypeId(10, $pattern_name);
if (!$pattern_id) {
return;
}
}
if (EventCalendar::query()->whereIn('status', [0, 1])->where(
'pattern_id',
@ -66,12 +74,25 @@ class EventCalendarImport implements ToModel, WithHeadingRow
$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' => $start_date . ' ' . $start_time,
'end_time' => $end_date_time . ' ' . $end_time,
'start_time' => $save_start_time,
'end_time' => $save_end_time,
'status' => 0,
'created_at' => get_datetime()
];
@ -80,4 +101,16 @@ class EventCalendarImport implements ToModel, WithHeadingRow
$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();
}
}

13
app/Services/AdminTranslationService.php

@ -231,4 +231,17 @@ class AdminTranslationService
$tr_name = self::getTranslationName($type_id, $type);
return $tr_name ?: $name;
}
// 查询关联翻译信息
public static function getTypeId($type, $name)
{
return AdminTranslation::query()->where('type', $type)->where(
function ($query) use ($name) {
$query->orWhere('en', $name);
$query->orWhere('zh_cn', $name);
$query->orWhere('zh_tw', $name);
}
)->value('type_id');
}
}

7
resources/lang/en/exports.php

@ -57,7 +57,12 @@ return [
'description' => 'Operation content',
],
'event_calendar' => [
'list' => 'Activity Calendar Template'
'list' => 'Activity Calendar Template',
'export1' => 'Mode Name',
'export2' => 'Start Date',
'export3' => 'Start Time',
'export4' => 'End Date',
'export5' => 'End Time'
],
'notice' => [
'list' => 'Alerts_Notifications',

2
resources/lang/en/middleware.php

@ -3,7 +3,7 @@
return [
'auth' => [
'token_exists' => 'Lack of authentication token',
'token_invalid' => 'Invalid authentication token',
'token_invalid' => 'Login authentication failed',
'user_disabled' => 'The user has been disabled',
'use_json' => 'The request must be in JSON format',
'login_invalid' => 'Login expired'

7
resources/lang/zh-CN/exports.php

@ -57,7 +57,12 @@ return [
'description' => '操作内容',
],
'event_calendar' => [
'list' => '活动行事历模板'
'list' => '活动行事历模板',
'export1' => '模式名称',
'export2' => '开始日期',
'export3' => '开始时间',
'export4' => '结束日期',
'export5' => '结束时间'
],
'notice' => [
'list' => '警报通知',

2
resources/lang/zh-CN/middleware.php

@ -3,7 +3,7 @@
return [
'auth' => [
'token_exists' => '缺少认证令牌',
'token_invalid' => '认证令牌无效',
'token_invalid' => '登录认证失效',
'user_disabled' => '用户已被禁用',
'use_json' => '请求必须使用 JSON 格式',
'login_invalid' => '登录失效'

7
resources/lang/zh-TW/exports.php

@ -57,7 +57,12 @@ return [
'description' => '操作内容',
],
'event_calendar' => [
'list' => '活動行事曆範本'
'list' => '活動行事曆範本',
'export1' => '模式名稱',
'export2' => '開始日期',
'export3' => '開始時間',
'export4' => '結束日期',
'export5' => '結束時間'
],
'notice' => [
'list' => '警報通知',

2
resources/lang/zh-TW/middleware.php

@ -3,7 +3,7 @@
return [
'auth' => [
'token_exists' => '缺少認證權杖',
'token_invalid' => '認證權杖無效',
'token_invalid' => '登入認證失效',
'user_disabled' => '用戶已被禁用',
'use_json' => '請求必須使用JSON格式',
'login_invalid' => '登入失效'

2
routes/admin/api.php

@ -76,6 +76,7 @@ Route::group(['prefix' => 'admin'], function () {
Route::get('/eventCalendar/rule', [EventCalendarController::class, 'rule']);
Route::get('/eventCalendar/index', [EventCalendarController::class, 'calendarList']);
Route::post('/eventCalendar/index', [EventCalendarController::class, 'calendarDayList']);
Route::get('/eventCalendar/export', [EventCalendarController::class, 'importTemplate']);
// 模式管理
Route::get('/pattern', [ParkingPatternController::class, 'index']);
@ -370,7 +371,6 @@ Route::group(['prefix' => 'admin'], function () {
Route::get('/pattern/modelExport', [ParkingPatternController::class, 'importModelTemplate']);
Route::get('/pattern/spacesExport', [ParkingPatternController::class, 'importTemplate']);
Route::get('/operationLog/export', [OperationLogController::class, 'export']);
Route::get('/eventCalendar/export', [EventCalendarController::class, 'importTemplate']);
Route::get('/notice/export', [NoticeController::class, 'export']);
Route::get('/parkingBehavior/export', [ParkingBehaviorController::class, 'export']);
Route::get('/licensePlateRecognition/export', [LicensePlateRecognitionController::class, 'export']);

Loading…
Cancel
Save