Browse Source

活动行事历

master
wanghongjun 1 month ago
parent
commit
2607ad4502
  1. 87
      app/Http/Controllers/Admin/ParkingPatternController.php
  2. 23
      app/Models/ParkingPattern.php
  3. 24
      app/Services/ParkingPatternService.php
  4. 2
      resources/lang/en/admin.php
  5. 2
      resources/lang/zh-CN/admin.php
  6. 3
      resources/lang/zh-CN/controller.php
  7. 7
      resources/lang/zh-CN/exception.php
  8. 3
      resources/lang/zh-CN/exports.php
  9. 6
      resources/lang/zh-CN/log.php
  10. 39
      resources/lang/zh-CN/service.php
  11. 5
      resources/lang/zh-CN/validation.php
  12. 2
      resources/lang/zh-TW/admin.php
  13. 14
      routes/admin/api.php

87
app/Http/Controllers/Admin/ParkingPatternController.php

@ -231,25 +231,21 @@ class ParkingPatternController extends BaseController
}
/**
* 创建导入
* 批量导入
* @param Request $request
* @return JsonResponse
* @throws ValidationException
*/
public function import(Request $request): JsonResponse
public function batchImport(Request $request): JsonResponse
{
try {
// 1. 验证上传的文件
$data = $request->all();
$request->validate([
'file' => 'required|mimes:xlsx,xls,csv|max:2048', // 限制文件类型和大小
'model_name' => 'required'
'file' => 'required|mimes:xlsx,xls,csv|max:2048' // 限制文件类型和大小
]);
$validator = Validator::make($data, [
'file' => 'required|mimes:xlsx,xls,csv|max:2048',
'model_name.required' => __(
'validation.parking_pattern.m_empty'
),
'file' => 'required|mimes:xlsx,xls,csv|max:2048'
], [
'file.required' => __('validation.admin_list_vip.file_empty'),
'file.mimes' => __('validation.admin_list_vip.file_mimes'),
@ -259,8 +255,6 @@ class ParkingPatternController extends BaseController
throw new ValidationException($validator);
}
$model_name = $data['model_name'];
// 2. 获取上传的文件
$file = $request->file('file');
@ -270,7 +264,7 @@ class ParkingPatternController extends BaseController
// 4. 执行导入(使用存储后的绝对路径)
// storage_path('app') 获取 storage/app 的绝对路径
Excel::import(
new ParkingPatternImport($model_name, $this->adminUserId),
new ParkingPatternSpaceImport($this->adminUserId),
storage_path('app/' . $path)
);
@ -291,21 +285,26 @@ class ParkingPatternController extends BaseController
}
/**
* 批量导入
* 创建导入
* @param Request $request
* @return JsonResponse
* @throws ValidationException
*/
public function batchImport(Request $request): JsonResponse
public function import(Request $request): JsonResponse
{
try {
// 1. 验证上传的文件
$data = $request->all();
$request->validate([
'file' => 'required|mimes:xlsx,xls,csv|max:2048' // 限制文件类型和大小
'file' => 'required|mimes:xlsx,xls,csv|max:2048',
// 限制文件类型和大小
'model_name' => 'required'
]);
$validator = Validator::make($data, [
'file' => 'required|mimes:xlsx,xls,csv|max:2048'
'file' => 'required|mimes:xlsx,xls,csv|max:2048',
'model_name.required' => __(
'validation.parking_pattern.m_empty'
),
], [
'file.required' => __('validation.admin_list_vip.file_empty'),
'file.mimes' => __('validation.admin_list_vip.file_mimes'),
@ -315,6 +314,8 @@ class ParkingPatternController extends BaseController
throw new ValidationException($validator);
}
$model_name = $data['model_name'];
// 2. 获取上传的文件
$file = $request->file('file');
@ -324,7 +325,7 @@ class ParkingPatternController extends BaseController
// 4. 执行导入(使用存储后的绝对路径)
// storage_path('app') 获取 storage/app 的绝对路径
Excel::import(
new ParkingPatternSpaceImport($this->adminUserId),
new ParkingPatternImport($model_name, $this->adminUserId),
storage_path('app/' . $path)
);
@ -384,4 +385,58 @@ class ParkingPatternController extends BaseController
);
}
}
/**
* 释出 优越 车位
* @param Request $request
* @return JsonResponse
* @throws ValidationException
*/
public function release(Request $request): JsonResponse
{
try {
$id = $request->get('pattern_id', '');
$this->validateId($id, ParkingPattern::class);
if ($id) {
throw new Exception(
__('controller.parking_pattern.not_parking_space')
);
}
$this->service->updateDataModel($id, 'release');
return $this->responseService->success(
null,
__('admin.operation_successful')
);
} catch (ValidationException $e) {
throw $e;
} catch (Exception $e) {
return $this->responseService->systemError($e->getMessage());
}
}
/**
* 切换离场显示
* @param Request $request
* @return JsonResponse
* @throws ValidationException
*/
public function change(Request $request): JsonResponse
{
try {
$id = $request->get('pattern_id', '');
$this->validateId($id, ParkingPattern::class);
$this->service->updateDataModel($id, 'change');
return $this->responseService->success(
null,
__('admin.operation_successful')
);
} catch (ValidationException $e) {
throw $e;
} catch (Exception $e) {
return $this->responseService->systemError(
__('admin.operation_failed') . ':'
. $e->getMessage()
);
}
}
}

23
app/Models/ParkingPattern.php

@ -22,14 +22,27 @@ class ParkingPattern extends Model
'is_default'
];
protected $hidden = [
'created_at',
'updated_at',
'deleted_at'
];
protected $hidden
= [
'created_at',
'updated_at',
'deleted_at'
];
public static function getName($id)
{
return self::query()->where('id', $id)->value('name');
}
public static function getData()
{
return self::query()->orderBy('created_at', 'desc')->select(
['id', 'name as model_name']
)->get()->toArray();
}
public static function getId($name)
{
return self::query()->where('name', $name)->value('id');
}
}

24
app/Services/ParkingPatternService.php

@ -242,4 +242,28 @@ class ParkingPatternService extends BaseService
);
ParkingPatternSpace::query()->where('camera_id', $pattern_id)->delete();
}
public function updateDataModel($id, $field)
{
try {
DB::beginTransaction();
$model = ParkingPatternModel::query()->findOrFail($id);
$oldValues = $model->toArray();
$update = [
$field => 1,
'updated_at' => get_datetime()
];
$model->update($update);
$this->logService->logUpdated(
$model,
$oldValues,
'parking_pattern.update'
);
DB::commit();
return $model;
} catch (Exception $e) {
DB::rollBack();
throw $e;
}
}
}

2
resources/lang/en/admin.php

@ -57,6 +57,8 @@ return [
'refresh_succeeded' => 'Refresh succeeded !',
'login_successful' => 'Login successful',
'logout_successful' => 'Logout successful',
'operation_successful' => 'Operation successful !',
'operation_failed' => 'Operation failed !',
'choose' => 'Choose',
'choose_file' => 'Select file',
'choose_image' => 'Select image',

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

@ -57,6 +57,8 @@ return [
'refresh_succeeded' => '刷新成功 !',
'login_successful' => '登录成功 !',
'logout_successful' => '登出成功 !',
'operation_successful' => '操作成功 !',
'operation_failed' => '操作失败 !',
'choose' => '选择',
'choose_file' => '选择文件',
'choose_image' => '选择图片',

3
resources/lang/zh-CN/controller.php

@ -29,5 +29,8 @@ return [
],
'license_plate' => [
'clear_success' => '清除成功'
],
'parking_pattern' => [
'not_parking_space' => '当前模式没有 [优越] 车位'
]
];

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

@ -74,5 +74,12 @@ return [
'create_failed' => '新增失败',
'update_failed' => '更新失败',
'destroy_failed' => '删除失败'
],
'event_calendar' => [
'create_failed' => '新增活动失败',
'update_failed' => '更新活动失败',
'destroy_failed' => '删除活动失败',
'end_failed' => '结束活动失败',
'end_succeeded' => '结束活动成功'
]
];

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

@ -53,5 +53,8 @@ return [
'action' => '操作',
'action_str' => '操作类型',
'description' => '操作内容',
],
'event_calendar' => [
'list' => '活动行事历模板'
]
];

6
resources/lang/zh-CN/log.php

@ -80,5 +80,11 @@ return [
'create' => '创建活动模式关联车位',
'update' => '更新活动模式关联车位',
'delete' => '删除活动模式关联车位'
],
'event_calendar' => [
'create' => '创建活动行事历',
'update' => '更新活动行事历',
'delete' => '删除活动行事历',
'import' => '导入活动行事历'
]
];

39
resources/lang/zh-CN/service.php

@ -1,26 +1,26 @@
<?php
return [
'admin_role' => [
'admin_role' => [
'name_exists' => '角色名称已存在',
'menu_error' => '角色编号参数有误'
],
'admin_user' => [
'admin_user' => [
'name_exists' => '用户账号已存在'
],
'admin_translation' => [
'admin_translation' => [
'data_exists' => '翻译配置已存在'
],
'admin_floor' => [
'admin_floor' => [
'name_exists' => '楼层名称已存在'
],
'admin_vip_list' => [
'admin_vip_list' => [
'license_exists' => '车牌号码已存在'
],
'space_attributes' => [
'space_attributes' => [
'attributes_exists' => '车位属性名称已存在'
],
'space_type' => [
'space_type' => [
'red' => '红色',
'green' => '绿色',
'yellow' => '黄色',
@ -31,18 +31,18 @@ return [
'name_exists' => '车位类型名称已存在',
'license_exists' => '请先清空车牌,即可删除'
],
'license_plate' => [
'license_plate' => [
'number_exists' => '车牌号码已存在',
'not_clear' => '没有车牌需要清除'
],
'reservation' => [
'reservation' => [
'undetermined' => '待确定',
'confirmed' => '已确定',
'canceled' => '已取消',
'yes' => '是',
'no' => '否'
],
'parking_space' => [
'parking_space' => [
'vacant' => '空置',
'occupy' => '占用',
'high' => '高',
@ -56,14 +56,23 @@ return [
'parking_information' => [
'not_default' => '未设置默认车位类型'
],
'parking_camera' => [
'parking_camera' => [
'number_exists' => '设备编号已存在',
'flat_garage' => '平面车库'
],
'parking_pattern' => [
'name_exists' => '活动模式已存在',
'space_exists' => '当前模式车位号已存在',
'parking_pattern' => [
'name_exists' => '活动模式已存在',
'space_exists' => '当前模式车位号已存在',
'space_not_exists' => '当前模式车位号不存在',
'type_not_exists' => '当前模式车位类型不存在'
'type_not_exists' => '当前模式车位类型不存在'
],
'event_calendar' => [
'planned' => '计划中',
'running' => '运行中',
'ended' => '已结束',
'disabled' => '已停用',
'pattern_exists' => '当前活动模式已存在',
'error_status' => '当前活动状态不可删除',
'error_end' => '当前活动状态不可结束'
]
];

5
resources/lang/zh-CN/validation.php

@ -103,5 +103,10 @@ return [
'id_empty' => '活动模式编号不能为空',
'space_id_empty' => '模式车位号不能为空',
'type_empty' => '模式车位类型不能为空',
],
'event_calendar' => [
'p_empty' => '活动模式不能为空',
's_empty' => '开始时间不能为空',
'e_empty' => '结束时间不能为空'
]
];

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

@ -57,6 +57,8 @@ return [
'refresh_succeeded' => '成功重新整理!',
'login_successful' => '成功登入!',
'logout_successful' => '成功登出!',
'operation_successful' => '操作成功 !',
'operation_failed' => '操作失敗 !',
'choose' => '選擇',
'choose_file' => '選擇檔案',
'choose_image' => '選擇圖片',

14
routes/admin/api.php

@ -42,6 +42,17 @@ Route::group(['prefix' => 'admin'], function () {
Route::get('/menu', [IndexController::class, 'menu']);
// 活动行事历
Route::get('/eventCalendar', [EventCalendarController::class, 'index']);
Route::get('/eventCalendar/search', [EventCalendarController::class, 'search']);
Route::post('/eventCalendar/changeMode', [EventCalendarController::class, 'changeMode']);
Route::get('/eventCalendar/create', [EventCalendarController::class, 'create']);
Route::post('/eventCalendar', [EventCalendarController::class, 'store']);
Route::get('/eventCalendar/edit/{id}', [EventCalendarController::class, 'edit']);
Route::put('/eventCalendar/{id}', [EventCalendarController::class, 'update']);
Route::delete('/eventCalendar/{id}', [EventCalendarController::class, 'destroy']);
Route::get('/eventCalendar/end/{id}', [EventCalendarController::class, 'end']);
Route::post('/eventCalendar/import', [EventCalendarController::class, 'import']);
Route::get('/eventCalendar/targetMode', [EventCalendarController::class, 'targetMode']);
// 模式管理
Route::get('/pattern', [ParkingPatternController::class, 'index']);
Route::get('/pattern/search', [ParkingPatternController::class, 'search']);
@ -51,6 +62,8 @@ Route::group(['prefix' => 'admin'], function () {
Route::post('/pattern/batchImport', [ParkingPatternController::class, 'batchImport']);
Route::delete('/pattern/{id}', [ParkingPatternController::class, 'destroy']);
Route::get('/pattern/rule', [ParkingPatternController::class, 'rule']);
Route::get('/pattern/release', [ParkingPatternController::class, 'release']);
Route::get('/pattern/change', [ParkingPatternController::class, 'change']);
Route::get('/patternSpace', [ParkingPatternSpaceController::class, 'index']);
Route::get('/patternSpace/search', [ParkingPatternSpaceController::class, 'search']);
Route::get('/patternSpace/create', [ParkingPatternSpaceController::class, 'create']);
@ -184,4 +197,5 @@ 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']);
});

Loading…
Cancel
Save