diff --git a/app/Console/Commands/AutoChangeRepair.php b/app/Console/Commands/AutoChangeRepair.php new file mode 100644 index 0000000..cbbf628 --- /dev/null +++ b/app/Console/Commands/AutoChangeRepair.php @@ -0,0 +1,101 @@ +logService = $log; + $this->logService->menuTitle = 'cat_list'; + // 默认超级管理员修改 + $this->user_id = DB::table('admin_users')->where('username', 'Admin') + ->value('id'); + $this->service = new ParkingSpaceService($this->logService); + } + + /** + * Execute the console command. + */ + public function handle() + { + try { + DB::beginTransaction(); + $now_times = time(); + $now_time = date("Y-m-d H:i:s", $now_times); + + $where = [ + ['start_at', '<=', $now_time], + ['end_at', '>=', $now_time] + ]; + $space_ids = ParkingSpaceRepair::query()->where($where)->pluck( + 'space_id' + ); + + if ($space_ids) { + $update_ids = ParkingSpace::query()->where('status', '<>', 2) + ->whereIn('id', $space_ids)->pluck('id'); + // 更新为维修状态 + foreach ($update_ids as $id) { + // 修改为类型的维修指定灯光 + $this->service->updateRepairStatus($id, 2); + } + } + + // 处理在维修的回复正常, 维修已结束的回复正常 + $ParkingSpace = ParkingSpace::query(); + $ParkingSpace->where('status', 2); + if ($space_ids) { + $ParkingSpace->whereNotIn('id', $space_ids); + } + $space_ids = $ParkingSpace->pluck('id'); + if ($space_ids) { + // 维修车位已经 超过维修结束时间, 改为空置状态 + $update_ids = ParkingSpaceRepair::query()->where( + 'end_at', + '<', + $now_time + )->whereIn('space_id', $space_ids)->pluck( + 'space_id' + ); + if ($update_ids) { + // 更新为空置状态 + foreach ($update_ids as $id) { + // 恢复正常类型灯光 + $this->service->updateRepairStatus($id, 0); + } + } + } + DB::commit(); + } catch (Exception $e) { + DB::rollBack(); + } + } +} diff --git a/app/Console/Kernel.php b/app/Console/Kernel.php index baff712..768725c 100644 --- a/app/Console/Kernel.php +++ b/app/Console/Kernel.php @@ -29,6 +29,7 @@ class Kernel extends ConsoleKernel protected $commands = [ Commands\AutomaticallyStartActivity::class, + Commands\AutoChangeRepair::class, ]; } diff --git a/app/Exports/ParkingPatternModelExport.php b/app/Exports/ParkingPatternModelExport.php index fcc6cea..ec89513 100644 --- a/app/Exports/ParkingPatternModelExport.php +++ b/app/Exports/ParkingPatternModelExport.php @@ -10,9 +10,9 @@ class ParkingPatternModelExport implements FromArray { return [ [ - 'No.', - 'Parking Space No.', - 'Parking Space Type' + __exports('global.index'), + __exports('parking_pattern.parking_space_number'), + __exports('parking_pattern.parking_space_type') ], ['1', 'A0001', 'General'], ['2', 'A0001', 'General'], diff --git a/app/Http/Controllers/Admin/ParkingPatternController.php b/app/Http/Controllers/Admin/ParkingPatternController.php index 44b03ab..db76c71 100644 --- a/app/Http/Controllers/Admin/ParkingPatternController.php +++ b/app/Http/Controllers/Admin/ParkingPatternController.php @@ -9,6 +9,7 @@ use App\Imports\ParkingPatternImport; use App\Imports\ParkingPatternSpaceImport; use App\Models\AdminUsers; use App\Models\ParkingPattern; +use App\Services\AdminTranslationService; use App\Services\ApiResponseService; use App\Services\ParkingPatternService; use Exception; @@ -91,6 +92,7 @@ class ParkingPatternController extends BaseController ); $item['status'] = $statusArr[$item['status']]; $item['is_default'] = $isDefaultArr[$item['is_default']]; + $item['model_name'] = AdminTranslationService::getTranslationTypeName($item['id'], 10, $item['model_name']); unset($item['admin_user_id']); return $item; }); @@ -145,6 +147,12 @@ class ParkingPatternController extends BaseController ParkingPatternService::getStatus() ) ]; + $Translation = AdminTranslationService::getTranslation( + $item['id'], + 10 + ); + $item['en_name'] = $Translation['en'] ?? ''; + $item['tw_name'] = $Translation['zh_tw'] ?? ''; $data['item'] = $item; return $this->responseService->success($data); } catch (Exception $e) { @@ -319,6 +327,8 @@ class ParkingPatternController extends BaseController } $model_name = $data['model_name']; + $en_name = $data['en_name'] ?? ''; + $tw_name = $data['tw_name'] ?? ''; // 2. 获取上传的文件 $file = $request->file('file'); @@ -329,7 +339,7 @@ class ParkingPatternController extends BaseController // 4. 执行导入(使用存储后的绝对路径) // storage_path('app') 获取 storage/app 的绝对路径 Excel::import( - new ParkingPatternImport($model_name, $this->adminUserId), + new ParkingPatternImport($model_name, $this->adminUserId, $en_name, $tw_name), storage_path('app/' . $path) ); diff --git a/app/Imports/ParkingPatternImport.php b/app/Imports/ParkingPatternImport.php index a8b194b..542d010 100644 --- a/app/Imports/ParkingPatternImport.php +++ b/app/Imports/ParkingPatternImport.php @@ -11,14 +11,23 @@ use Illuminate\Validation\ValidationException; use Maatwebsite\Excel\Concerns\ToModel; use Maatwebsite\Excel\Concerns\WithHeadingRow; -class ParkingPatternImport implements ToModel, WithHeadingRow +class ParkingPatternImport implements ToModel { protected string $model_name; + protected string $en_name; + protected string $tw_name; protected string $user_id; + protected int $index = 1; - public function __construct(string $model_name, string $user_id) - { + public function __construct( + string $model_name, + string $user_id, + string $en_name = '', + string $tw_name = '' + ) { $this->model_name = $model_name; + $this->en_name = $en_name ?? ''; + $this->tw_name = $tw_name ?? ''; $this->user_id = $user_id; } @@ -27,12 +36,20 @@ class ParkingPatternImport implements ToModel, WithHeadingRow */ public function model(array $row) { - if (!empty($row['parking_space_no']) && !empty($row['parking_space_type'])) { + if ($this->index == 1) { + $this->index += 1; + return; + } + if (!empty($row[1]) + && !empty($row[2]) + ) { $data = [ 'model_name' => $this->model_name, 'admin_user_id' => $this->user_id, - 'parking_space_number' => $row['parking_space_no'], - 'parking_space_type' => $row['parking_space_type'] + 'parking_space_number' => $row[1], + 'parking_space_type' => $row[2], + 'en_name' => $this->en_name, + 'tw_name' => $this->tw_name ]; $service = new ParkingPatternService(new OperationLogService()); $service->saveModel($data); diff --git a/app/Models/ParkingPattern.php b/app/Models/ParkingPattern.php index b8825d8..685ab98 100644 --- a/app/Models/ParkingPattern.php +++ b/app/Models/ParkingPattern.php @@ -2,6 +2,7 @@ namespace App\Models; +use App\Services\AdminTranslationService; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\SoftDeletes; @@ -31,7 +32,8 @@ class ParkingPattern extends Model public static function getName($id) { - return self::query()->where('id', $id)->value('name'); + $name = self::query()->where('id', $id)->value('name'); + return AdminTranslationService::getTranslationTypeName($id, 10, $name); } public static function getData() @@ -39,7 +41,15 @@ class ParkingPattern extends Model return self::query()->where('status', 1)->orderBy('created_at', 'desc') ->select( ['id', 'name as model_name'] - )->get()->toArray(); + )->get()->each(function ($item) { + $item['model_name'] + = AdminTranslationService::getTranslationTypeName( + $item['id'], + 10, + $item['model_name'] + ); + return $item; + })->toArray(); } public static function getId($name) @@ -55,7 +65,12 @@ class ParkingPattern extends Model $data['show_release'] = 0; $data['show_change'] = 0; if ($pattern) { - $data['pattern_name'] = $pattern['name']; + $data['pattern_name'] + = AdminTranslationService::getTranslationTypeName( + $id, + 10, + $pattern['name'] + ); if ($status == 1) { $data['show_release'] = $pattern['release']; $data['show_change'] = $pattern['change']; diff --git a/app/Services/AdminTranslationService.php b/app/Services/AdminTranslationService.php index a64788b..2146550 100644 --- a/app/Services/AdminTranslationService.php +++ b/app/Services/AdminTranslationService.php @@ -222,6 +222,7 @@ class AdminTranslationService 7 岗亭管理 8 离场原因 9 设备管理 + 10 模式管理 100 - 199 告警信息 */ public static function getTranslationTypeName($type_id, $type, $name) diff --git a/app/Services/ParkingPatternService.php b/app/Services/ParkingPatternService.php index 19feb54..aa27517 100644 --- a/app/Services/ParkingPatternService.php +++ b/app/Services/ParkingPatternService.php @@ -63,6 +63,14 @@ class ParkingPatternService extends BaseService throw new Exception(__('service.parking_pattern.name_exists')); } $model = $this->updateData($data, $id); + + AdminTranslationService::saveTranslation( + $data['model_name'], + $data['en_name'] ?? '', + $data['tw_name'] ?? '', + $model->id, + 10 + ); DB::commit(); return $model; } catch (Exception $e) { @@ -156,6 +164,8 @@ class ParkingPatternService extends BaseService $model_name = $data['model_name']; $parking_space_number = $data['parking_space_number']; $parking_space_type = $data['parking_space_type']; + $en_name = $data['en_name'] ?? ''; + $tw_name = $data['tw_name'] ?? ''; $pattern_id = ParkingPatternModel::query()->where('name', $model_name)->value('id'); if ($pattern_id) { @@ -164,6 +174,13 @@ class ParkingPatternService extends BaseService $mode = $this->createData($data); $pattern_id = $mode->id; } + AdminTranslationService::saveTranslation( + $model_name, + $en_name, + $tw_name, + $pattern_id, + 10 + ); // 验证 $parking_space_id = ParkingSpace::getValueId($parking_space_number); diff --git a/app/Services/ParkingSpaceService.php b/app/Services/ParkingSpaceService.php index 2ee8199..ea3326a 100644 --- a/app/Services/ParkingSpaceService.php +++ b/app/Services/ParkingSpaceService.php @@ -294,7 +294,7 @@ class ParkingSpaceService extends BaseService $this->logService->logUpdated( $model, $oldValues, - 'space_attributes.update' + 'parking_space.update_status' ); DB::commit(); return $model; @@ -344,11 +344,13 @@ class ParkingSpaceService extends BaseService $this->getLogDescription('space_type_id') ); // 切换车位类型,同步切换车位灯颜色 - $this->changeSpaceCameraColor($oldValues['number'], $type_id, $oldValues['space_attr_id']); + if ($oldValues['status'] != 2) { + $this->changeSpaceCameraColor($oldValues['number'], $type_id, $oldValues['space_attr_id']); + } } // 切换模式更改车位类型 后 更改车位灯颜色 - protected function changeSpaceCameraColor($number, $space_type_id, $space_attr) + public function changeSpaceCameraColor($number, $space_type_id, $space_attr, $is_repair = false) { if ($number == '1-1') { $SpaceType = ParkingSpaceType::query()->find($space_type_id); @@ -362,6 +364,12 @@ class ParkingSpaceService extends BaseService $color_vacant = $SpaceTypeAttr['color_vacant']; $is_flicker = $SpaceTypeAttr['is_warning']; } + // 维修灯 + if ($is_repair) { + $color_occupy = $SpaceType['repair_light']; + $color_vacant = $SpaceType['repair_light']; + $is_flicker = false; + } $HikParkingCameraService = new HikParkingCameraService($this->logService); $body = $HikParkingCameraService->getBody($color_occupy, $color_vacant, $is_flicker); $HikParkingCameraService->updatelight($body); @@ -470,4 +478,31 @@ class ParkingSpaceService extends BaseService throw $e; } } + + //修改为维修车位 + public function updateRepairStatus($id, $status) + { + $model = ParkingSpace::query()->findOrFail($id); + $oldValues = $model->toArray(); + $update = [ + 'status' => $status, + 'updated_at' => date("Y-m-d H:i:s", time()) + ]; + $model->update($update); + $this->logService->logUpdated( + $model, + $oldValues, + 'parking_space.update_status' + ); + $number = $oldValues['number']; + $space_attr_id = $oldValues['space_attr_id']; + $space_type_id = $oldValues['space_type_id']; + // 修改为类型的维修指定灯光 + $this->changeSpaceCameraColor( + $number, + $space_attr_id, + $space_type_id, + $status == 2 + ); + } } diff --git a/resources/lang/en/log.php b/resources/lang/en/log.php index 07fee2d..535f76f 100644 --- a/resources/lang/en/log.php +++ b/resources/lang/en/log.php @@ -70,9 +70,10 @@ return [ 'delete_space_camera' => 'Delete parking light camera' ], 'parking_space' => [ - 'create' => 'Create parking space', - 'update' => 'Update parking spaces', - 'delete' => 'Delete parking space' + 'create' => 'Create parking space', + 'update' => 'Update parking spaces', + 'delete' => 'Delete parking space', + 'update_status' => 'Update parking status' ], 'parking_pattern' => [ 'create' => 'Create activity mode', diff --git a/resources/lang/zh-CN/log.php b/resources/lang/zh-CN/log.php index 488336a..d35551f 100644 --- a/resources/lang/zh-CN/log.php +++ b/resources/lang/zh-CN/log.php @@ -70,9 +70,10 @@ return [ 'delete_space_camera' => '删除车位控灯相机' ], 'parking_space' => [ - 'create' => '创建车位', - 'update' => '更新车位', - 'delete' => '删除车位' + 'create' => '创建车位', + 'update' => '更新车位', + 'delete' => '删除车位', + 'update_status' => '更新车位状态' ], 'parking_pattern' => [ 'create' => '创建活动模式', diff --git a/resources/lang/zh-TW/log.php b/resources/lang/zh-TW/log.php index 2da50c0..c1a2813 100644 --- a/resources/lang/zh-TW/log.php +++ b/resources/lang/zh-TW/log.php @@ -70,9 +70,10 @@ return [ 'delete_space_camera' => '删除車位控燈相機' ], 'parking_space' => [ - 'create' => '創建車位', - 'update' => '更新車位', - 'delete' => '删除車位' + 'create' => '創建車位', + 'update' => '更新車位', + 'delete' => '删除車位', + 'update_status' => '更新車位狀態' ], 'parking_pattern' => [ 'create' => '創建活動模式',