From b6690d72d01e0a0dcc37fc718f40d05d3d129cb9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EC=B5=9C=EC=A4=80=ED=9D=A0?= Date: Mon, 1 Dec 2025 17:46:59 +0900 Subject: [PATCH] dbmsv4 init...1 --- app/Config/Routes.php | 8 +-- app/Controllers/AbstractCRUDController.php | 24 ++++--- .../Admin/Customer/ServiceController.php | 66 +++++++++++++++++++ app/Services/Equipment/ServerPartService.php | 13 ++++ app/Services/Equipment/ServerService.php | 14 ++-- app/Services/Part/IPService.php | 2 - 6 files changed, 105 insertions(+), 22 deletions(-) diff --git a/app/Config/Routes.php b/app/Config/Routes.php index 802a3be..95adb24 100644 --- a/app/Config/Routes.php +++ b/app/Config/Routes.php @@ -152,10 +152,10 @@ $routes->group('admin', ['namespace' => 'App\Controllers\Admin', 'filter' => 'au $routes->post('batchjob', 'ServiceController::batchjob'); $routes->post('batchjob_delete', 'ServiceController::batchjob_delete'); $routes->get('download/(:alpha)', 'ServiceController::download/$1'); - $routes->get('addServer/(:num)', 'ServiceController::addServer_form/$1'); - $routes->post('addServer/(:num)', 'ServiceController::addServer/$1'); - $routes->get('changeServer/(:num)', 'ServiceController::changeServer/$1'); - $routes->get('terminateServer/(:num)', 'ServiceController::terminateServer/$1'); + $routes->get('addServer/(:num)', 'ServiceController::alternative_create_form/$1'); + $routes->post('addServer/(:num)', 'ServiceController::alternative_create/$1'); + $routes->get('changeServer/(:num)', 'ServiceController::alternative_modify/$1'); + $routes->get('terminateServer/(:num)', 'ServiceController::alternative_delete/$1'); $routes->post('history/(:num)', 'ServiceController::history/$1'); }); }); diff --git a/app/Controllers/AbstractCRUDController.php b/app/Controllers/AbstractCRUDController.php index fc6e2c9..4dff377 100644 --- a/app/Controllers/AbstractCRUDController.php +++ b/app/Controllers/AbstractCRUDController.php @@ -47,11 +47,13 @@ abstract class AbstractCRUDController extends AbstractWebController return $this->service->create($dto); } - protected function create_result_process(CommonEntity $entity): string|RedirectResponse + protected function create_result_process(CommonEntity $entity, ?string $redirect_url = null): string|RedirectResponse { - return redirect()->to( - '/' . implode('/', [...$this->getActionPaths(), 'view']) . '/' . $entity->getPK() - )->with('message', "{$this->getTitle()}에서 {$entity->getTitle()} 생성이 완료되었습니다."); + return $this->action_redirect_process( + 'info', + "{$this->getTitle()}에서 {$entity->getTitle()} 생성이 완료되었습니다.", + $redirect_url ?? '/' . implode('/', [...$this->getActionPaths(), 'view']) . '/' . $entity->getPK() + ); } final public function create(): string|RedirectResponse @@ -107,11 +109,13 @@ abstract class AbstractCRUDController extends AbstractWebController return $this->service->modify($uid, $dto); } - protected function modify_result_process(CommonEntity $entity): string|RedirectResponse + protected function modify_result_process(CommonEntity $entity, ?string $redirect_url = null): string|RedirectResponse { - return redirect()->to( - '/' . implode('/', [...$this->getActionPaths(), 'view']) . '/' . $entity->getPK() - )->with('message', "{$this->getTitle()}에서 {$entity->getTitle()} 수정이 완료되었습니다."); + return $this->action_redirect_process( + 'info', + "{$this->getTitle()}에서 {$entity->getTitle()} 수정이 완료되었습니다.", + $redirect_url ?? '/' . implode('/', [...$this->getActionPaths(), 'view']) . '/' . $entity->getPK() + ); } final public function modify($uid): string|RedirectResponse { @@ -136,9 +140,9 @@ abstract class AbstractCRUDController extends AbstractWebController return $this->service->delete($uid); } - protected function delete_result_process(CommonEntity $entity): string|RedirectResponse + protected function delete_result_process(CommonEntity $entity, ?string $redirect_url = null): string|RedirectResponse { - return $this->action_redirect_process('error', "{$this->getTitle()}에서 {$entity->getTitle()} 삭제가 완료되었습니다."); + return $this->action_redirect_process('info', "{$this->getTitle()}에서 {$entity->getTitle()} 삭제가 완료되었습니다.", $redirect_url); } final public function delete($uid): RedirectResponse { diff --git a/app/Controllers/Admin/Customer/ServiceController.php b/app/Controllers/Admin/Customer/ServiceController.php index 7935ec9..a4ed851 100644 --- a/app/Controllers/Admin/Customer/ServiceController.php +++ b/app/Controllers/Admin/Customer/ServiceController.php @@ -53,4 +53,70 @@ class ServiceController extends CustomerController return $this->action_redirect_process('error', "{$this->getTitle()}에서 비고 오류:" . $e->getMessage()); } } + + //대체서버 추가 + public function alternative_create_form(int $uid): string|RedirectResponse + { + try { + $action = __FUNCTION__; + $fields = ['serverinfo_uid']; + $this->service->getFormService()->setFormFields($fields); + $this->service->getFormService()->setFormRules($action, $fields); + return $this->action_render_process($action, $this->getViewDatas(), $this->request->getVar('ActionTemplate')); + } catch (\Throwable $e) { + return $this->action_redirect_process('error', "{$this->getTitle()}에서 대체서버추가 오류:" . $e->getMessage()); + } + } + public function alternative_create(int $uid): string|RedirectResponse + { + try { + $action = __FUNCTION__; + $fields = ['serverinfo_uid']; + $this->service->getFormService()->setFormFields($fields); + $this->service->getFormService()->setFormRules($action, $fields); + //서비스정보 가져오기 + $entity = $this->service->getEntity($uid); + //대체서버 추가 + service('equipment_server')->attachToService($entity, $this->request->getPost()); + return $this->action_redirect_process('info', "{$this->getTitle()}에서 대체서버추가가 완료되었습니다"); + } catch (\Throwable $e) { + return $this->action_redirect_process('error', "{$this->getTitle()}에서 대체서버추가 오류:" . $e->getMessage()); + } + } + + //대체서버 -> 메인서버로 바꾼다. + public function alternative_modify(int $uid): string|RedirectResponse + { + try { + $action = __FUNCTION__; + $fields = ['serverinfo_uid']; + $this->service->getFormService()->setFormFields($fields); + $this->service->getFormService()->setFormRules($action, $fields); + //서비스정보 가져오기 + $entity = $this->service->getEntity($uid); + //메인서버 해지 + service('equipment_server')->detachFromService($entity, ['serverinfo_uid' => $entity->getServerInfoUID()]); + //대체서버를 메인서버로 설정 + service('equipment_server')->attachToService($entity, $this->request->getGet()); + return $this->action_redirect_process('info', "{$this->getTitle()}에서 메인서버설정이 완료되었습니다"); + } catch (\Throwable $e) { + return $this->action_redirect_process('error', "{$this->getTitle()}에서 메인서버설정 오류:" . $e->getMessage()); + } + } + public function alternative_delete(int $uid): string|RedirectResponse + { + try { + $action = __FUNCTION__; + $fields = ['serverinfo_uid']; + $this->service->getFormService()->setFormFields($fields); + $this->service->getFormService()->setFormRules($action, $fields); + //서비스정보 가져오기 + $entity = $this->service->getEntity($uid); + //대체서버 해지 + service('equipment_server')->attachToService($entity, $this->request->getGet()); + return $this->action_redirect_process('info', "{$this->getTitle()}에서 대체서버해지가 완료되었습니다"); + } catch (\Throwable $e) { + return $this->action_redirect_process('error', "{$this->getTitle()}에서 대체서버 해지 오류:" . $e->getMessage()); + } + } } diff --git a/app/Services/Equipment/ServerPartService.php b/app/Services/Equipment/ServerPartService.php index 90890d5..cc850b3 100644 --- a/app/Services/Equipment/ServerPartService.php +++ b/app/Services/Equipment/ServerPartService.php @@ -185,4 +185,17 @@ class ServerPartService extends EquipmentService } } } + public function detachFromServer(ServerEntity $serverEntity): void + { + //서버정보에 해당하는 ServerPart정보 상태가 기본인것 제외한 모두 회수처리. + foreach ( + $this->getEntities([ + 'serverinfo_uid' => $serverEntity->getPK(), + "billing !=" => PAYMENT['BILLING']['BASE'] + ]) as $entity + ) { + $this->getPartService($entity->getType())->detachFromServerPart($entity); + parent::delete($entity->getPK()); + } + } } diff --git a/app/Services/Equipment/ServerService.php b/app/Services/Equipment/ServerService.php index debe44e..4e92609 100644 --- a/app/Services/Equipment/ServerService.php +++ b/app/Services/Equipment/ServerService.php @@ -239,30 +239,32 @@ class ServerService extends EquipmentService //OrderBy 처리 //서비스관련 - public function attachToService(ServiceEntity $serviceEntity): void + public function attachToService(ServiceEntity $serviceEntity, array $formDatas = []): void { //서버정보 가져오기 $entity = $this->getEntity($serviceEntity->getServerInfoUID()); - $formDatas = []; $formDatas['serviceinfo_uid'] = $serviceEntity->getPK(); $formDatas["clientinfo_uid"] = $serviceEntity->getClientInfoUID(); - $formDatas['status'] = STATUS['OCCUPIED']; + $formDatas['status'] = $formDatas['status'] ?? STATUS['OCCUPIED']; $fields = array_keys($formDatas); $this->getFormService()->setFormFields($fields); $this->getFormService()->setFormRules('modify', $fields); parent::modify_process($entity, $formDatas); } - public function detachFromService(ServiceEntity $serviceEntity): void + public function detachFromService(ServiceEntity $serviceEntity, array $formDatas = []): void { //서버정보 가져오기 $entity = $this->getEntity($serviceEntity->getServerInfoUID()); - $formDatas = []; $formDatas['serviceinfo_uid'] = NULL; $formDatas["clientinfo_uid"] = NULL; - $formDatas['status'] = STATUS['AVAILABLE']; + $formDatas['status'] = $formDatas['status'] ?? STATUS['AVAILABLE']; $fields = array_keys($formDatas); $this->getFormService()->setFormFields($fields); $this->getFormService()->setFormRules('modify', $fields); parent::modify_process($entity, $formDatas); + //서버파트정보처리 + service('part_ipservice')->attachToServer($entity); + service('part_switchservice')->attachToServer($entity); + service('equipment_serverpartservice')->detachFromServer($entity); } } diff --git a/app/Services/Part/IPService.php b/app/Services/Part/IPService.php index c03593f..c20f991 100644 --- a/app/Services/Part/IPService.php +++ b/app/Services/Part/IPService.php @@ -2,14 +2,12 @@ namespace App\Services\Part; -use RuntimeException; use App\Models\Part\IPModel; use App\Helpers\Part\IPHelper; use App\Forms\Part\IPForm; use App\Entities\Part\IPEntity; use App\Entities\Equipment\ServerPartEntity; use App\Entities\Equipment\ServerEntity; -use App\Entities\CommonEntity; use App\DTOs\Part\IPDTO; class IPService extends PartType3Service