Browse Source

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

master
wanghongjun 17 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 [ return [
[ [
'No.', __exports('global.index'),
'Mode Name', __exports('event_calendar.export1'),
'Start Date', __exports('event_calendar.export2'),
'Start Time', __exports('event_calendar.export3'),
'End Date', __exports('event_calendar.export4'),
'End Time' __exports('event_calendar.export5')
], ],
[ [
'1', '1',
'Raceday - Major Raceday', 'Raceday - Major Raceday',
' 2026-10-01', '2026-10-01',
'10:30:00', '10:30',
' 2026-10-01', '2026-10-01',
'18:30:00' '18:30'
] ]
]; ];
} }

53
app/Imports/EventCalendarImport.php

@ -4,14 +4,15 @@ namespace App\Imports;
use App\Models\EventCalendar; use App\Models\EventCalendar;
use App\Models\ParkingPattern; use App\Models\ParkingPattern;
use App\Services\AdminTranslationService;
use App\Services\OperationLogService; use App\Services\OperationLogService;
use Maatwebsite\Excel\Concerns\ToModel; use Maatwebsite\Excel\Concerns\ToModel;
use Maatwebsite\Excel\Concerns\WithHeadingRow;
class EventCalendarImport implements ToModel, WithHeadingRow class EventCalendarImport implements ToModel
{ {
protected string $user_id; protected string $user_id;
protected OperationLogService $logService; protected OperationLogService $logService;
protected int $index = 1;
public function __construct(string $user_id) public function __construct(string $user_id)
{ {
@ -26,17 +27,24 @@ class EventCalendarImport implements ToModel, WithHeadingRow
*/ */
public function model(array $row) public function model(array $row)
{ {
$pattern_name = $row['mode_name']; if ($this->index == 1) {
$start_date = $row['start_date']; $this->index += 1;
$start_time = $row['start_time']; return;
$end_date = $row['end_date']; }
$end_time = $row['end_time']; $pattern_name = $row[1];
$start_date = $row[2];
$start_time = $row[3];
$end_date = $row[4];
$end_time = $row[5];
if (empty($pattern_name)) { if (empty($pattern_name)) {
return ; return ;
} }
$pattern_id = ParkingPattern::getId($pattern_name); $pattern_id = ParkingPattern::getId($pattern_name);
if (!$pattern_id) { if (!$pattern_id) {
return ; $pattern_id = AdminTranslationService::getTypeId(10, $pattern_name);
if (!$pattern_id) {
return;
}
} }
if (EventCalendar::query()->whereIn('status', [0, 1])->where( if (EventCalendar::query()->whereIn('status', [0, 1])->where(
'pattern_id', 'pattern_id',
@ -66,12 +74,25 @@ class EventCalendarImport implements ToModel, WithHeadingRow
$start_time = date("H:i:s", $start_times); $start_time = date("H:i:s", $start_times);
$end_date_time = date("Y-m-d", $end_date_times); $end_date_time = date("Y-m-d", $end_date_times);
$end_time = date("H:i:s", $end_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 = [ $create = [
'pattern_id' => $pattern_id, 'pattern_id' => $pattern_id,
'admin_user_id' => $this->user_id, 'admin_user_id' => $this->user_id,
'start_time' => $start_date . ' ' . $start_time, 'start_time' => $save_start_time,
'end_time' => $end_date_time . ' ' . $end_time, 'end_time' => $save_end_time,
'status' => 0, 'status' => 0,
'created_at' => get_datetime() 'created_at' => get_datetime()
]; ];
@ -80,4 +101,16 @@ class EventCalendarImport implements ToModel, WithHeadingRow
$this->logService->logCreated($model, 'event_calendar.import'); $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); $tr_name = self::getTranslationName($type_id, $type);
return $tr_name ?: $name; 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', 'description' => 'Operation content',
], ],
'event_calendar' => [ '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' => [ 'notice' => [
'list' => 'Alerts_Notifications', 'list' => 'Alerts_Notifications',

2
resources/lang/en/middleware.php

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

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

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

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

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

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

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

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

@ -3,7 +3,7 @@
return [ return [
'auth' => [ 'auth' => [
'token_exists' => '缺少認證權杖', 'token_exists' => '缺少認證權杖',
'token_invalid' => '認證權杖無效', 'token_invalid' => '登入認證失效',
'user_disabled' => '用戶已被禁用', 'user_disabled' => '用戶已被禁用',
'use_json' => '請求必須使用JSON格式', 'use_json' => '請求必須使用JSON格式',
'login_invalid' => '登入失效' '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/rule', [EventCalendarController::class, 'rule']);
Route::get('/eventCalendar/index', [EventCalendarController::class, 'calendarList']); Route::get('/eventCalendar/index', [EventCalendarController::class, 'calendarList']);
Route::post('/eventCalendar/index', [EventCalendarController::class, 'calendarDayList']); Route::post('/eventCalendar/index', [EventCalendarController::class, 'calendarDayList']);
Route::get('/eventCalendar/export', [EventCalendarController::class, 'importTemplate']);
// 模式管理 // 模式管理
Route::get('/pattern', [ParkingPatternController::class, 'index']); 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/modelExport', [ParkingPatternController::class, 'importModelTemplate']);
Route::get('/pattern/spacesExport', [ParkingPatternController::class, 'importTemplate']); Route::get('/pattern/spacesExport', [ParkingPatternController::class, 'importTemplate']);
Route::get('/operationLog/export', [OperationLogController::class, 'export']); Route::get('/operationLog/export', [OperationLogController::class, 'export']);
Route::get('/eventCalendar/export', [EventCalendarController::class, 'importTemplate']);
Route::get('/notice/export', [NoticeController::class, 'export']); Route::get('/notice/export', [NoticeController::class, 'export']);
Route::get('/parkingBehavior/export', [ParkingBehaviorController::class, 'export']); Route::get('/parkingBehavior/export', [ParkingBehaviorController::class, 'export']);
Route::get('/licensePlateRecognition/export', [LicensePlateRecognitionController::class, 'export']); Route::get('/licensePlateRecognition/export', [LicensePlateRecognitionController::class, 'export']);

Loading…
Cancel
Save