diff --git a/app/Interfaces/Customer/ServiceInterface.php b/app/Interfaces/Customer/ServiceInterface.php index 1e04f85..d9324cc 100644 --- a/app/Interfaces/Customer/ServiceInterface.php +++ b/app/Interfaces/Customer/ServiceInterface.php @@ -6,7 +6,5 @@ use App\Entities\Customer\ServiceEntity; interface ServiceInterface extends CustomerInterface { - public function setService(ServiceEntity $serviceEntity, array $formDatas): ServiceEntity; - public function changeService(ServiceEntity $oldServiceEntity, ServiceEntity $serviceEntity, array $formDatas): ServiceEntity; - public function unsetService(ServiceEntity $serviceEntity, array $formDatas): ServiceEntity; + public function setService(string $action, ServiceEntity $serviceEntity, array $formDatas): ServiceEntity; } diff --git a/app/Interfaces/Equipment/ServerInterface.php b/app/Interfaces/Equipment/ServerInterface.php index 7313728..3d3037e 100644 --- a/app/Interfaces/Equipment/ServerInterface.php +++ b/app/Interfaces/Equipment/ServerInterface.php @@ -6,7 +6,5 @@ use App\Entities\Equipment\ServerEntity; interface ServerInterface extends EquipmentInterface { - public function setServer(ServerEntity $serverEntity, array $formDatas): ServerEntity; - public function changeServer(ServerEntity $oldServerEntity, ServerEntity $serverEntity, array $formDatas): ServerEntity; - public function unsetServer(ServerEntity $serverEntity, array $formDatas): ServerEntity; + public function setServer(string $action, ServerEntity $serverEntity, array $formDatas): ServerEntity; } diff --git a/app/Interfaces/Equipment/ServerPartInterface.php b/app/Interfaces/Equipment/ServerPartInterface.php index 1070853..5a43c6c 100644 --- a/app/Interfaces/Equipment/ServerPartInterface.php +++ b/app/Interfaces/Equipment/ServerPartInterface.php @@ -6,7 +6,5 @@ use App\Entities\Equipment\ServerPartEntity; interface ServerPartInterface extends EquipmentInterface { - public function setServerPart(ServerPartEntity $serverPartEntity, array $formDatas): ServerPartEntity; - public function changeServerPart(ServerPartEntity $oldServerPartEntity, ServerPartEntity $serverPartEntity, array $formDatas): ServerPartEntity; - public function unsetServerPart(ServerPartEntity $serverPartEntity, array $formDatas): ServerPartEntity; + public function setServerPart(string $action, ServerPartEntity $oldServerPartEntity, ServerPartEntity $serverPartEntity, array $serverPartDatas): mixed; } diff --git a/app/Services/Customer/ServiceService.php b/app/Services/Customer/ServiceService.php index 77d598e..7886278 100644 --- a/app/Services/Customer/ServiceService.php +++ b/app/Services/Customer/ServiceService.php @@ -4,7 +4,6 @@ namespace App\Services\Customer; use App\Entities\Customer\ServiceEntity; use App\Entities\Equipment\ServerEntity; -use App\Entities\Equipment\ServerPartEntity; use App\Entities\PaymentEntity; use App\Helpers\Customer\ServiceHelper; use App\Models\Customer\ServiceModel; @@ -209,105 +208,76 @@ class ServiceService extends CustomerService //생성 public function create(array $formDatas): ServiceEntity { + //신규등록(월청구액 전달값 그대로 사용하므로 getCaculatedAmount 필요없음) + $entity = parent::create($formDatas); if (!array_key_exists('serverinfo_uid', $formDatas)) { throw new \Exception(__METHOD__ . "에서 오류발생: 서버가 지정되지 않았습니다."); } - //신규등록(월청구액 전달값 그대로 사용하므로 getCaculatedAmount 필요없음) - $entity = parent::create($formDatas); //서버등록 - $serverEntity = $this->getServerService()->getEntity($formDatas['serverinfo_uid']); - if (!$serverEntity instanceof ServerEntity || $serverEntity->getStatus() != STATUS['AVAILABLE']) { - throw new \Exception("{$formDatas['serverinfo_uid']}에 대한 서버정보를 찾을수 없거나, 사용가능 서버가 아닙니다."); - } - $formDatas = []; - $formDatas['clientinfo_uid'] = $entity->getClientInfoUID(); - $formDatas['serviceinfo_uid'] = $entity->getPK(); - $formDatas['status'] = STATUS['OCCUPIED']; - //필수정보처리 후 서버정보등록 후 서비스정보 Entity에 서버정보 설정 - $entity = $entity->setServerEntity($this->getServerService()->modify($serverEntity, $formDatas)); + $entity = $entity->setServerEntity($this->getServerService()->setService('create', $entity, $formDatas)); //전체 서비스금액 설정 - $formDatas = []; - $formDatas['clientinfo_uid'] = $entity->getClientInfoUID(); - $formDatas['serviceinfo_uid'] = $entity->getPK(); - $formDatas['serverinfo_uid'] = $entity->getServerInfoUID(); - $formDatas['title'] = $entity->getServerEntity()->getTitle(); - $formDatas['amount'] = $entity->getAmount(); - $formDatas['billing'] = PAYMENT['BILLING']['MONTH']; - $formDatas['billing_at'] = $entity->getBillingAt(); - //필수정보처리 후 결제정보등록 후 서비스정보 Entity에 결제정보 설정 - return $entity->setPaymentEntity($this->getPaymentService()->create($formDatas)); + $entity = $entity->setPaymentEntity($this->getPaymentService()->setService('create', $entity, $formDatas)); + return $entity; } //수정 public function modify(mixed $entity, array $formDatas): ServiceEntity { //수정전 정보 $oldEntity = $entity; - //서비스정보 수정 + //서비스 금액 재계산 후 서비스정보 수정 + $formDatas['amount'] = $this->getCaculatedAmount($entity); $entity = parent::modify($entity, $formDatas); //기존 서버정보와 다르다면 서버변경 if ($oldEntity->getServerEntity()->getPK() != $formDatas['serverinfo_uid']) { - $serverEntity = $oldEntity->getServerEntity(); - $formDatas = []; - $formDatas['clientinfo_uid'] = null; - $formDatas['serviceinfo_uid'] = null; - $formDatas['format_at'] = date("Y-m-d"); - $formDatas['status'] = STATUS['AVAILABLE']; - $entity = $entity->setServerEntity($this->getServerService()->modify($serverEntity, $formDatas)); + //기존서버처리 + $entity = $entity->setServerEntity($this->getServerService()->setService('delete', $oldEntity, ['serverinfo_uid' => $oldEntity->getServerInfoUID()])); + //수정할신규서버처리 + $entity = $entity->setServerEntity($this->getServerService()->setService('create', $entity, $formDatas)); } //전체 서비스금액 설정 - $formDatas = []; - $formDatas['clientinfo_uid'] = $entity->getClientInfoUID(); - $formDatas['serviceinfo_uid'] = $entity->getPK(); - $formDatas['serverinfo_uid'] = $entity->getServerInfoUID(); - $formDatas['title'] = $entity->getServerEntity()->getTitle(); - $formDatas['amount'] = $entity->getAmount(); - $formDatas['billing'] = PAYMENT['BILLING']['MONTH']; - $formDatas['billing_at'] = $entity->getBillingAt(); - //필수정보처리 후 결제정보등록 후 서비스정보 Entity에 결제정보 설정 - return $entity->setPaymentEntity($this->getPaymentService()->create($formDatas)); + $entity = $entity->setPaymentEntity($this->getPaymentService()->setService('modify', $entity)); + return $entity; } //삭제 public function delete(mixed $entity): ServiceEntity { //서버해지 - $this->getServerService()->unsetService($entity, ['serverinfo_uid' => $entity->getServerEntity()->getPK()]); + $entity = $entity->setServerEntity($this->getServerService()->setService('delete', $entity)); return parent::delete($entity); } //대체서버추가(가격변동은 없음) public function addServer(ServiceEntity $entity, array $formDatas): ServiceEntity { - //대체서버용인지 확인 - $this->getServerService()->setService($entity, $formDatas); + //대체서버추가 및 결제처리는 하지않음 + $formDatas['type'] = 'alternative'; + $this->getServerService()->setService('create', $entity, $formDatas); return $entity; } //대체서버를 메인서버로 설정 public function changeServere(ServiceEntity $entity, array $formDatas): ServiceEntity { - // //기존메인서버 정보 - // $oldServerEntity = $entity->getServerEntity(); - // //메인서버로 선정된 대체서버정보 - $serverEntity = $this->getServerService()->getEntity($formDatas['serverinfo_uid']); + $serverEntity = $entity->getServerEntity(); if (!$serverEntity instanceof ServerEntity) { - throw new \Exception("{$formDatas['serverinfo_uid']}에 대한 서버정보를 찾을수 없습니다."); + throw new \Exception(__METHOD__ . "에서 오류발생: 기존 메인 서버정보를 찾을수 없습니다."); } - // //메인서버로 선정된 서버의 형식을 기존메인서버의 형식으로 바꿈 - // $serverEntity = $this->getServerService()->modify($serverEntity, ['type' => $oldServerEntity->getType()]); - //수정전 서비스정보 - $oldEntity = $entity; - //메인서버 변경(메인서버를 선정된 대체서버로 바꾼다.) - $entity = parent::modify($entity, ['serverinfo_uid' => $serverEntity->getPK()]); + //기존메인서버 정보회수처리용 + $entity = $entity->setServerEntity($this->getServerService()->setService('delete', $entity)); + //메인서버로 선정된 대체서버정보 + $formDatas['type'] = $serverEntity->getType(); + $this->getServerService()->setService('create', $entity, $formDatas); + //서비스 금액 재계산 후 서비스정보 수정 + $formDatas['amount'] = $this->getCaculatedAmount($entity); + $entity = parent::modify($entity, $formDatas); //전체 서비스금액 설정 - $entity = $this->setAmount($entity); - //결제정보수정 - $entity = $this->getPaymentService()->changeService($oldEntity, $entity, $formDatas); - //결제정보 PK설정 - return parent::modify($entity, ['payment_uid' => $entity->getPaymentEntity()->getPK()]); + $entity = $entity->setPaymentEntity($this->getPaymentService()->setService('modify', $entity)); + return $entity; } //대체서버해지(대체서버는 해지는 가격변동은 없음) public function terminateServer(ServiceEntity $entity, array $formDatas): ServiceEntity { - $this->getServerService()->unsetService($entity, $formDatas); + //대체서버해지 및 결제처리는 하지않음 + $entity = $entity->setServerEntity($this->getServerService()->setService('delete', $entity, $formDatas)); return $entity; } } diff --git a/app/Services/Equipment/ServerPartService.php b/app/Services/Equipment/ServerPartService.php index bd71f91..6cdf79f 100644 --- a/app/Services/Equipment/ServerPartService.php +++ b/app/Services/Equipment/ServerPartService.php @@ -6,7 +6,6 @@ use App\Entities\Equipment\ServerEntity; use App\Entities\Equipment\ServerPartEntity; use App\Entities\PaymentEntity; use App\Helpers\Equipment\ServerPartHelper; -use App\Interfaces\Equipment\ServerInterface; use App\Models\Equipment\ServerPartModel; use App\Services\Customer\ServiceService; use App\Services\Equipment\EquipmentService; @@ -21,7 +20,7 @@ use App\Services\Part\SOFTWAREService; use App\Services\Part\SWITCHService; use App\Services\PaymentService; -class ServerPartService extends EquipmentService implements ServerInterface +class ServerPartService extends EquipmentService { private ?ServiceService $_serviceService = null; private ?ServerService $_serverService = null; @@ -201,7 +200,38 @@ class ServerPartService extends EquipmentService implements ServerInterface } return $service; } - + //서버정보 설정 + final public function setServer(string $action, ServerEntity $serverEntity, array $serverFormDatas = []): void + { + switch ($action) { + case 'delete': + //기존 ServerPart정보 삭제(서버파트정보 (월비용,일회성) 상품 회수처리) + foreach ($this->getEntities(['serverinfo_uid' => $serverEntity->getPK()]) as $entity) { + switch ($entity->getType()) { + case 'CPU': + case 'RAM': + //기본이 아닌 결제방식의 경우 모두 회수처리 + if ($entity->getBilling() !== PAYMENT['BILLING']['BASE']) { + //Type에 따른 부품서비스 정의 + $this->getPartService($entity->getType())->setServerPart('delete', $entity, $entity, []); + //서버연결정보 식제 + parent::delete($entity); + } + break; + default: //DISK,IP,SWITCH,CS,SOFTWARE,OS등은 모두 회수처리 + //Type에 따른 부품서비스 정의 + $this->getPartService($entity->getType())->setServerPart('delete', $entity, $entity, []); + //서버연결정보 식제 + parent::delete($entity); + break; + } + } + break; + default: + throw new \Exception(__METHOD__ . "에서 오류발생:{$action}은 정의되지 않은 작업입니다."); + // break; + } + } //partEntity 정보 추가 protected function getEntity_process(mixed $entity): ServerPartEntity { @@ -266,28 +296,17 @@ class ServerPartService extends EquipmentService implements ServerInterface $entity = parent::create($formDatas); //후처리작업 //Type에 따른 부품서비스 정의 - $this->getPartService($entity->getType())->setServerPart($entity, $formDatas); + $this->getPartService($entity->getType())->setServerPart('create', $entity, $entity, $formDatas); //서비스 및 결제정보 처리 switch ($entity->getBilling()) { case PAYMENT['BILLING']['MONTH']: //월별과금일때만 처리 if ($entity->getServiceInfoUID() === null) { throw new \Exception(__METHOD__ . "에서 오류발생: 서비스정보가 정의된 후에만 가능합니다."); } - $serviceEntity = $this->getServiceService()->getEntity($entity->getServiceInfoUID()); - $entity = $this->getServiceService()->setAmount($serviceEntity); + $entity = $this->getServiceService()->setAmount($this->getServiceService()->getEntity($entity->getServiceInfoUID())); break; case PAYMENT['BILLING']['ONETIME']: //일회성일때만 처리 - $formDatas = []; - $formDatas['clientinfo_uid'] = $entity->getClientInfoUID(); - $formDatas['serviceinfo_uid'] = $entity->getServiceInfoUID(); - $formDatas['serverinfo_uid'] = $entity->getServerInfoUID(); //서버연결정보 수정시에 필요함 - //타이틀은 기타의 경우 직접작성한 제목을 등록하고 아닌경우는 Part의 Title을 사용한다. - $formDatas['title'] = $entity->getPartEntity()->getTitle(); - $formDatas['amount'] = $entity->getTotalAmount(); //단가*cnt - $formDatas['billing'] = $entity->getBilling(); - //당일결체일로 설정 - $formDatas['billing_at'] = date("Y-m-d"); - $entity->setPaymentEntity($this->getPaymentService()->create($formDatas)); + $entity->setPaymentEntity($this->getPaymentService()->setServerPart('create', $entity, $formDatas)); //결제정보PK정의 $entity = parent::modify($entity, ['payment_uid' => $entity->getPaymentEntity()->getPK()]); break; @@ -320,19 +339,17 @@ class ServerPartService extends EquipmentService implements ServerInterface $entity = parent::modify($entity, $formDatas); //후처리작업 //Type에 따른 부품서비스 정의 - $this->getPartService($entity->getType())->changeServerPart($oldEntity, $entity, $formDatas); + $this->getPartService($entity->getType())->setServerPart('modify', $oldEntity, $entity, $formDatas); //서비스 및 결제정보 처리 switch ($entity->getBilling()) { case PAYMENT['BILLING']['MONTH']: //월별과금일때만 처리 - if ($entity->getServiceInfoUID() !== null) { - $serviceEntity = $this->getServiceService()->getEntity($entity->getServiceInfoUID()); - $entity = $this->getServiceService()->setAmount($serviceEntity); + if ($entity->getServiceInfoUID() !== null) { //서비스가 정의되어 있으면 + $entity = $this->getServiceService()->setAmount($this->getServiceService()->getEntity($entity->getServiceInfoUID())); } break; case PAYMENT['BILLING']['ONETIME']: //일회성일때만 처리 - if ($entity->getPaymentUID() !== null) { - $paymentEntity = $this->getPaymentService()->getEntity($entity->getPaymentUID()); - $entity->setPaymentEntity($this->getPaymentService()->setAmount($paymentEntity, $entity->getAmount() * $entity->getCnt())); + if ($entity->getPaymentUID() !== null) { //결제정보가 정의되어 있으면 + $entity->setPaymentEntity($this->getPaymentService()->setServerPart('modify', $entity, $formDatas)); } break; case PAYMENT['BILLING']['BASE']: //기본처리 @@ -347,9 +364,11 @@ class ServerPartService extends EquipmentService implements ServerInterface //삭제 public function delete(mixed $entity): ServerPartEntity { + //수정전 정보 + $oldEntity = $entity; $entity = parent::delete($entity); //Type에 따른 부품서비스 정의 - $this->getPartService($entity->getType())->unSetServerPart($entity, []); + $this->getPartService($entity->getType())->setServerPart('delete', $oldEntity, $entity, []); //삭제시는 월비용 서비스만 처리 if ($entity->getBilling() === PAYMENT['BILLING']['MONTH']) { //서비스가 정의되어 있으면 실행 @@ -360,41 +379,4 @@ class ServerPartService extends EquipmentService implements ServerInterface } return $entity; } - - //서버관련 작업 - public function setServer(ServerEntity $serverEntity, array $serverDatas): ServerEntity - { - //아무것도 하지 않음 - return $serverEntity; - } - public function changeServer(ServerEntity $oldServerEntity, ServerEntity $serverEntity, array $serverDatas): ServerEntity - { - //아무것도 하지 않음 - return $serverEntity; - } - public function unsetServer(ServerEntity $serverEntity, array $serverDatas): ServerEntity - { - - //기존 ServerPart정보 삭제(서버파트정보 (월비용,일회성) 상품 회수처리) - foreach ($this->getEntities(['serverinfo_uid' => $serverEntity->getPK()]) as $serverPartEntity) { - switch ($serverPartEntity->getType()) { - case 'CPU': - case 'RAM': - //기본이 아닌 결제방식의 경우 모두 회수처리 - if ($serverPartEntity->getBilling() !== PAYMENT['BILLING']['BASE']) { - //Type에 따른 부품서비스 정의 - $this->getPartService($serverPartEntity->getType())->unSetServerPart($serverPartEntity, []); - //서버연결정보 식제 - parent::delete($serverPartEntity); - } - break; - default: //DISK,IP,SWITCH,CS,SOFTWARE,OS등은 모두 회수처리 - $this->getPartService($serverPartEntity->getType())->unSetServerPart($serverPartEntity, []); - //서버연결정보 식제 - parent::delete($serverPartEntity); - break; - } - } - return $serverEntity; - } } diff --git a/app/Services/Equipment/ServerService.php b/app/Services/Equipment/ServerService.php index 294736f..f5ca190 100644 --- a/app/Services/Equipment/ServerService.php +++ b/app/Services/Equipment/ServerService.php @@ -5,13 +5,12 @@ namespace App\Services\Equipment; use App\Entities\Customer\ServiceEntity; use App\Entities\Equipment\ServerEntity; use App\Helpers\Equipment\ServerHelper; -use App\Interfaces\Customer\ServiceInterface; use App\Models\Equipment\ServerModel; use App\Services\Customer\ServiceService; use App\Services\Equipment\EquipmentService; use App\Services\Equipment\ServerPartService; -class ServerService extends EquipmentService implements ServiceInterface +class ServerService extends EquipmentService { private ?ServiceService $_serviceService = null; private ?ServerPartService $_serverPartService = null; @@ -122,6 +121,49 @@ class ServerService extends EquipmentService implements ServiceInterface // dd($totalCounts); return $totalCounts; } + //서비스정보 설정 + final public function setService(string $action, ServiceEntity $serviceEntity, array $serviceFormDatas = []): ServerEntity + { + switch ($action) { + case 'create': + if (!array_key_exists('serverinfo_uid', $serviceFormDatas)) { + throw new \Exception(__METHOD__ . "에서 오류발생: 서버가 지정되지 않았습니다."); + } + $entity = $this->getEntity($serviceFormDatas['serverinfo_uid']); + if (!$entity instanceof ServerEntity || $entity->getStatus() != STATUS['AVAILABLE']) { + throw new \Exception(__METHOD__ . "에서 오류발생:{$serviceFormDatas['serverinfo_uid']}에 대한 서버정보를 찾을수 없거나, 사용가능 서버가 아닙니다."); + } + $formDatas = []; + //대체서버 추가용인지 확인 + if (array_key_exists('type', $serviceFormDatas)) { + $formDatas['type'] = $serviceFormDatas['type']; + } + $formDatas['clientinfo_uid'] = $serviceEntity->getClientInfoUID(); + $formDatas['serviceinfo_uid'] = $serviceEntity->getPK(); + $formDatas['status'] = STATUS['OCCUPIED']; + $entity = parent::modify($entity, $formDatas); + break; + case 'delete': + if (!array_key_exists('serverinfo_uid', $serviceFormDatas)) { + throw new \Exception(__METHOD__ . "에서 오류발생: 서버가 지정되지 않았습니다."); + } + $entity = $this->getEntity($serviceFormDatas['serverinfo_uid']); + if (!$entity instanceof ServerEntity) { + throw new \Exception(__METHOD__ . "에서 오류발생:해지 할 서버정보를 찾을수 없습니다."); + } + $formDatas = []; + $formDatas['clientinfo_uid'] = null; + $formDatas['serviceinfo_uid'] = null; + $formDatas['format_at'] = date("Y-m-d"); + $formDatas['status'] = STATUS['AVAILABLE']; + $entity = parent::modify($entity, $formDatas); + break; + default: + throw new \Exception(__METHOD__ . "에서 오류발생:{$action}은 정의되지 않은 작업입니다."); + // break; + } + return $entity; + } //기본 기능부분 //FieldForm관련용 public function getFormOption(string $field, $options = []): array @@ -136,24 +178,6 @@ class ServerService extends EquipmentService implements ServiceInterface } return $options; } - public function setFormData(string $field, array $requestDatas, array $formDatas): array - { - switch ($field) { - case 'CPU': - case 'RAM': - $formDatas[$field] = $requestDatas[$field] ?? null; - $formDatas["{$field}_cnt"] = $requestDatas["{$field}_cnt"] ?? null; - break; - case 'DISK': - $formDatas[$field] = $requestDatas[$field] ?? null; - $formDatas["{$field}_cnt"] = $requestDatas["{$field}_cnt"] ?? null; - $formDatas["{$field}_extra"] = $requestDatas["{$field}_extra"] ?? null; - break; - default: - $formDatas = parent::setFormData($field, $requestDatas, $formDatas); - } - return $formDatas; - } public function create(array $formDatas): ServerEntity { $entity = parent::create($formDatas); @@ -179,7 +203,13 @@ class ServerService extends EquipmentService implements ServiceInterface throw new \Exception("서비스중이 서버는 삭제하실수 없습니다."); } //선처리작업 - $entity = $this->getServerPartService()->unsetServer($entity, []);; + //서비스가 연결되어 있고 대체서버가 아니면, 서비스정보수정(청구액수정) + if ($entity->getServiceInfoUID() !== null && $entity->getType() !== "alternative") { + $serviceEntity = $this->getServiceService()->getEntity($entity->getServiceInfoUID()); + $this->getServiceService()->setAmount($serviceEntity); + } + //서버파트정보해지 + $this->getServerPartService()->setServer('dedete', $entity); return parent::delete($entity); } //List 검색용 @@ -189,39 +219,4 @@ class ServerService extends EquipmentService implements ServiceInterface $this->getModel()->orderBy("code ASC,title ASC"); parent::setOrderBy($field, $value); } - - public function changeService(ServiceEntity $oldServiceEntity, ServiceEntity $serviceEntity, array $serviceDatas): ServiceEntity - { - if (!array_key_exists('serverinfo_uid', $serviceDatas)) { - throw new \Exception("신규로 지정할 서버정보가 없습니다."); - } - //기존 서버 해지(uynsetService사용) - $this->unsetService($serviceEntity, ['serverinfo_uid' => $serviceEntity->getServerEntity()->getPK()]); - //신규서버 설정(setService사용) - return $this->setService($serviceEntity, $serviceDatas); - } - public function unsetService(ServiceEntity $serviceEntity, array $serviceDatas): ServiceEntity - { - if (!array_key_exists('serverinfo_uid', $serviceDatas)) { - throw new \Exception("서비스를 해지할 서버정보가 없습니다."); - } - if ($serviceEntity->getServerEntity()->getPK() === $serviceDatas['serverinfo_uid']) { - throw new \Exception("Main으로 설정된 서버는 해지하실 수 없습니다."); - } - $entity = $this->getEntity($serviceDatas['serverinfo_uid']); - if (!$entity instanceof ServerEntity) { - throw new \Exception("{$serviceDatas['serverinfo_uid']}에 대한 서버정보를 찾을수 없습니다."); - } - //서버정보설정 - $formDatas = []; - $formDatas['clientinfo_uid'] = null; - $formDatas['serviceinfo_uid'] = null; - $formDatas['format_at'] = date("Y-m-d"); - $formDatas['status'] = STATUS['AVAILABLE']; - $entity = parent::modify($entity, $formDatas); - //서버파트정보 회수처리 호출 - $this->getServerPartService()->unsetServer($entity, []); - return $serviceEntity; - } - //서버파트관련 작업 } diff --git a/app/Services/Part/CPUService.php b/app/Services/Part/CPUService.php index b5fd0b8..f3c1904 100644 --- a/app/Services/Part/CPUService.php +++ b/app/Services/Part/CPUService.php @@ -52,41 +52,4 @@ class CPUService extends PartService implements ServerPartInterface $this->getModel()->orderBy('title ASC'); parent::setOrderBy($field, $value); } - - //서버파트관련 작업 - public function setServerPart(ServerPartEntity $serverPartEntity, array $serverPartDatas): ServerPartEntity - { - //부품정보가져오기 - $entity = $this->getEntity($serverPartEntity->getPartUID()); - if (!$entity instanceof CPUEntity) { - throw new \Exception("{$serverPartEntity->getPartUID()}에 해당하는 부품정보를 찾을수없습니다."); - } - //부품정보에 서버정보 설정 및 서비스,고객정보 정의 - if ($entity->getStock() < $serverPartEntity->getCnt()) { - throw new \Exception("현재 재고수[{$entity->getStock()}]보다 지정하신 갯수({$serverPartEntity->getCnt()})가 더 많습니다."); - } - $entity = parent::modify($entity, ['stock' => $entity->getStock() - $serverPartEntity->getCnt()]); - return $serverPartEntity->setPartEntity($entity); - } - public function changeServerPart(ServerPartEntity $oldServerPartEntity, ServerPartEntity $serverPartEntity, array $serverPartDatas): ServerPartEntity - { - - //수정 전 부품연결정보관련 정보처리 갯수,파트가 달라졌을경우 (회수 -> 사용 처리) - //기존것 회수 처리 - if ($oldServerPartEntity->getCnt() != $serverPartEntity->getCnt() || $oldServerPartEntity->getPartUID() !== $serverPartEntity->getPartUID()) { - $this->unsetServerPart($oldServerPartEntity, $serverPartDatas); - } - //신규것 사용처리 - return $this->setServerPart($serverPartEntity, $serverPartDatas); - } - public function unsetServerPart(ServerPartEntity $serverPartEntity, array $serverPartDatas): ServerPartEntity - { - //부품정보가져오기 - $entity = $this->getEntity($serverPartEntity->getPartUID()); - if (!$entity instanceof CPUEntity) { - throw new \Exception("{$serverPartEntity->getPartUID()}에 해당하는 부품정보를 찾을수없습니다."); - } - $entity = parent::modify($entity, ['stock' => $entity->getStock() + $serverPartEntity->getCnt()]); - return $serverPartEntity->setPartEntity($entity); - } } diff --git a/app/Services/Part/CSService.php b/app/Services/Part/CSService.php index eefdd5d..5576da0 100644 --- a/app/Services/Part/CSService.php +++ b/app/Services/Part/CSService.php @@ -106,50 +106,53 @@ class CSService extends PartService implements ServerPartInterface } //서버파트관련 작업 - public function setServerPart(ServerPartEntity $serverPartEntity, array $serverPartDatas): ServerPartEntity + public function setServerPart(string $action, ServerPartEntity $oldServerPartEntity, ServerPartEntity $serverPartEntity, array $serverPartDatas): CSEntity { - $formDatas = []; - $formDatas['clientinfo_uid'] = $serverPartEntity->getClientInfoUID(); - $formDatas['serviceinfo_uid'] = $serverPartEntity->getServiceInfoUID(); - $formDatas['serverinfo_uid'] = $serverPartEntity->getServerInfoUID(); - $formDatas['status'] = STATUS['OCCUPIED']; - if (!array_key_exists('status', $formDatas)) { - throw new \Exception(__METHOD__ . "에서 오류발생: CS상태가 설정되지 않았습니다."); + switch ($action) { + case 'create': + $formDatas = []; + $formDatas['clientinfo_uid'] = $serverPartEntity->getClientInfoUID(); + $formDatas['serviceinfo_uid'] = $serverPartEntity->getServiceInfoUID(); + $formDatas['serverinfo_uid'] = $serverPartEntity->getServerInfoUID(); + $formDatas['status'] = STATUS['OCCUPIED']; + if (!array_key_exists('status', $formDatas)) { + throw new \Exception(__METHOD__ . "에서 오류발생: CS상태가 설정되지 않았습니다."); + } + //CS정보가져오기 + $entity = $this->getEntity($serverPartEntity->getPartUID()); + if (!$entity instanceof CSEntity) { + throw new \Exception("{$serverPartEntity->getPartUID()}에 해당하는 CS정보를 찾을수없습니다."); + } + //CS정보 수정 + $entity = parent::modify($entity, $formDatas); + break; + case 'modify': + //수정 전 부품연결정보관련 정보처리 파트정보가 달라졌을경우 (회수 -> 사용 처리) + //기존것 회수 처리 + if ($oldServerPartEntity->getPartUID() !== $serverPartEntity->getPartUID()) { + $this->setServerPart('delete', $oldServerPartEntity, $serverPartEntity, $serverPartDatas); + } + //신규것 사용처리 + $entity = $this->setServerPart('create', $oldServerPartEntity, $serverPartEntity, $serverPartDatas); + break; + case 'delete': + $formDatas = []; + $formDatas['clientinfo_uid'] = null; + $formDatas['serviceinfo_uid'] = null; + $formDatas['serverinfo_uid'] = null; + $formDatas['status'] = STATUS['AVAILABLE']; + if (!array_key_exists('status', $formDatas)) { + throw new \Exception(__METHOD__ . "에서 오류발생: CS상태가 설정되지 않았습니다."); + } + //CS정보가져오기 + $entity = $this->getEntity($serverPartEntity->getPartUID()); + if (!$entity instanceof CSEntity) { + throw new \Exception("{$serverPartEntity->getPartUID()}에 해당하는 CS정보를 찾을수없습니다."); + } + //CS정보 수정 + $entity = parent::modify($entity, $formDatas); + break; } - //CS정보가져오기 - $entity = $this->getEntity($serverPartEntity->getPartUID()); - if (!$entity instanceof CSEntity) { - throw new \Exception("{$serverPartEntity->getPartUID()}에 해당하는 CS정보를 찾을수없습니다."); - } - //CS정보 수정 - return $serverPartEntity->setPartEntity(parent::modify($entity, $formDatas)); - } - public function changeServerPart(ServerPartEntity $oldServerPartEntity, ServerPartEntity $serverPartEntity, array $serverPartDatas): ServerPartEntity - { - - //수정 전 부품연결정보관련 정보처리 파트정보가 달라졌을경우 (회수 -> 사용 처리) - if ($oldServerPartEntity->getPartUID() !== $serverPartEntity->getPartUID()) { - $this->unsetServerPart($oldServerPartEntity, $serverPartDatas); - } - //신규것 사용처리 - return $this->setServerPart($serverPartEntity, $serverPartDatas); - } - public function unsetServerPart(ServerPartEntity $serverPartEntity, array $serverPartDatas): ServerPartEntity - { - $formDatas = []; - $formDatas['clientinfo_uid'] = null; - $formDatas['serviceinfo_uid'] = null; - $formDatas['serverinfo_uid'] = null; - $formDatas['status'] = STATUS['AVAILABLE']; - if (!array_key_exists('status', $formDatas)) { - throw new \Exception(__METHOD__ . "에서 오류발생: CS상태가 설정되지 않았습니다."); - } - //CS정보가져오기 - $entity = $this->getEntity($serverPartEntity->getPartUID()); - if (!$entity instanceof CSEntity) { - throw new \Exception("{$serverPartEntity->getPartUID()}에 해당하는 CS정보를 찾을수없습니다."); - } - //CS정보 수정 - return $serverPartEntity->setPartEntity(parent::modify($entity, $formDatas)); + return $entity; } } diff --git a/app/Services/Part/DISKService.php b/app/Services/Part/DISKService.php index 4139172..83837ae 100644 --- a/app/Services/Part/DISKService.php +++ b/app/Services/Part/DISKService.php @@ -56,38 +56,43 @@ class DISKService extends PartService implements ServerPartInterface } //서버파트관련 작업 - public function setServerPart(ServerPartEntity $serverPartEntity, array $serverPartDatas): ServerPartEntity + public function setServerPart(string $action, ServerPartEntity $oldServerPartEntity, ServerPartEntity $serverPartEntity, array $serverPartDatas): mixed { - //부품정보가져오기 - $entity = $this->getEntity($serverPartEntity->getPartUID()); - if (!$entity instanceof DISKEntity) { - throw new \Exception("{$serverPartEntity->getPartUID()}에 해당하는 부품정보를 찾을수없습니다."); + switch ($action) { + case 'create': + //부품정보가져오기 + $entity = $this->getEntity($serverPartEntity->getPartUID()); + if (!$entity) { + throw new \Exception("{$serverPartEntity->getPartUID()}에 해당하는 부품정보를 찾을수없습니다."); + } + //부품정보에 서버정보 설정 및 서비스,고객정보 정의 + if ($entity->getStock() < $serverPartEntity->getCnt()) { + throw new \Exception("현재 재고수[{$entity->getStock()}]보다 지정하신 갯수({$serverPartEntity->getCnt()})가 더 많습니다."); + } + $entity = parent::modify($entity, ['stock' => $entity->getStock() - $serverPartEntity->getCnt()]); + break; + case 'modify': + //수정 전 부품연결정보관련 정보처리 갯수,파트가 달라졌을경우 (회수 -> 사용 처리) + //기존것 회수 처리 + if ($oldServerPartEntity->getCnt() != $serverPartEntity->getCnt() || $oldServerPartEntity->getPartUID() !== $serverPartEntity->getPartUID()) { + $this->setServerPart('delete', $oldServerPartEntity, $serverPartEntity, $serverPartDatas); + } + //신규것 사용처리 + $entity = $this->setServerPart('create', $oldServerPartEntity, $serverPartEntity, $serverPartDatas); + break; + case 'delete': + //부품정보가져오기 + $entity = $this->getEntity($serverPartEntity->getPartUID()); + if (!$entity) { + throw new \Exception("{$serverPartEntity->getPartUID()}에 해당하는 부품정보를 찾을수없습니다."); + } + //부품정보에 서버정보 설정 및 서비스,고객정보 정의 + if ($entity->getStock() < $serverPartEntity->getCnt()) { + throw new \Exception("현재 재고수[{$entity->getStock()}]보다 지정하신 갯수({$serverPartEntity->getCnt()})가 더 많습니다."); + } + $entity = parent::modify($entity, ['format' => $entity->getFormat() + $serverPartEntity->getCnt()]); + break; } - //부품정보에 서버정보 설정 및 서비스,고객정보 정의 - if ($entity->getStock() < $serverPartEntity->getCnt()) { - throw new \Exception("현재 재고수[{$entity->getStock()}]보다 지정하신 갯수({$serverPartEntity->getCnt()})가 더 많습니다."); - } - $entity = parent::modify($entity, ['stock' => $entity->getStock() - $serverPartEntity->getCnt()]); - return $serverPartEntity->setPartEntity($entity); - } - public function changeServerPart(ServerPartEntity $oldServerPartEntity, ServerPartEntity $serverPartEntity, array $serverPartDatas): ServerPartEntity - { - //수정 전 부품연결정보관련 정보처리 갯수,파트가 달라졌을경우 (회수 -> 사용 처리) - //기존것 회수 처리 - if ($oldServerPartEntity->getCnt() != $serverPartEntity->getCnt() || $oldServerPartEntity->getPartUID() !== $serverPartEntity->getPartUID()) { - $this->unsetServerPart($oldServerPartEntity, $serverPartDatas); - } - //신규것 사용처리 - return $this->setServerPart($serverPartEntity, $serverPartDatas); - } - public function unsetServerPart(ServerPartEntity $serverPartEntity, array $serverPartDatas): ServerPartEntity - { - //부품정보가져오기 - $entity = $this->getEntity($serverPartEntity->getPartUID()); - if (!$entity instanceof DISKEntity) { - throw new \Exception("{$serverPartEntity->getPartUID()}에 해당하는 부품정보를 찾을수없습니다."); - } - $entity = parent::modify($entity, ['format' => $entity->getFormat() + $serverPartEntity->getCnt()]); - return $serverPartEntity->setPartEntity($entity); + return $entity; } } diff --git a/app/Services/Part/IPService.php b/app/Services/Part/IPService.php index 582a6d3..db9e5ec 100644 --- a/app/Services/Part/IPService.php +++ b/app/Services/Part/IPService.php @@ -121,53 +121,53 @@ class IPService extends PartService implements ServerPartInterface } //서버파트관련 작업 - public function setServerPart(ServerPartEntity $serverPartEntity, array $serverPartDatas): ServerPartEntity + public function setServerPart(string $action, ServerPartEntity $oldServerPartEntity, ServerPartEntity $serverPartEntity, array $serverPartDatas): IPEntity { - $formDatas = []; - $formDatas['clientinfo_uid'] = $serverPartEntity->getClientInfoUID(); - $formDatas['serviceinfo_uid'] = $serverPartEntity->getServiceInfoUID(); - $formDatas['serverinfo_uid'] = $serverPartEntity->getServerInfoUID(); - $formDatas['status'] = STATUS['OCCUPIED']; - if (!array_key_exists('status', $formDatas)) { - throw new \Exception(__METHOD__ . "에서 오류발생: IP상태가 설정되지 않았습니다."); + switch ($action) { + case 'create': + $formDatas = []; + $formDatas['clientinfo_uid'] = $serverPartEntity->getClientInfoUID(); + $formDatas['serviceinfo_uid'] = $serverPartEntity->getServiceInfoUID(); + $formDatas['serverinfo_uid'] = $serverPartEntity->getServerInfoUID(); + $formDatas['status'] = STATUS['OCCUPIED']; + if (!array_key_exists('status', $formDatas)) { + throw new \Exception(__METHOD__ . "에서 오류발생: IP상태가 설정되지 않았습니다."); + } + //IP정보가져오기 + $entity = $this->getEntity($serverPartEntity->getPartUID()); + if (!$entity instanceof IPEntity) { + throw new \Exception("{$serverPartEntity->getPartUID()}에 해당하는 IP정보를 찾을수없습니다."); + } + //IP정보 수정 + $entity = parent::modify($entity, $formDatas); + break; + case 'modify': + //수정 전 부품연결정보관련 정보처리 파트정보가 달라졌을경우 (회수 -> 사용 처리) + //기존것 회수 처리 + if ($oldServerPartEntity->getPartUID() !== $serverPartEntity->getPartUID()) { + $this->setServerPart('delete', $oldServerPartEntity, $serverPartEntity, $serverPartDatas); + } + //신규것 사용처리 + $entity = $this->setServerPart('create', $oldServerPartEntity, $serverPartEntity, $serverPartDatas); + break; + case 'delete': + $formDatas = []; + $formDatas['clientinfo_uid'] = null; + $formDatas['serviceinfo_uid'] = null; + $formDatas['serverinfo_uid'] = null; + $formDatas['status'] = STATUS['AVAILABLE']; + if (!array_key_exists('status', $formDatas)) { + throw new \Exception(__METHOD__ . "에서 오류발생: IP상태가 설정되지 않았습니다."); + } + //IP정보가져오기 + $entity = $this->getEntity($serverPartEntity->getPartUID()); + if (!$entity instanceof IPEntity) { + throw new \Exception("{$serverPartEntity->getPartUID()}에 해당하는 IP정보를 찾을수없습니다."); + } + //IP정보 수정 + $entity = parent::modify($entity, $formDatas); + break; } - // IP정보가져오기 - $entity = $this->getEntity($serverPartEntity->getPartUID()); - if (!$entity instanceof IPEntity) { - throw new \Exception("{$serverPartEntity->getPartUID()}에 해당하는 IP정보를 찾을수없습니다."); - } - // IP정보 수정 - return $serverPartEntity->setPartEntity(parent::modify($entity, $formDatas)); - } - public function changeServerPart(ServerPartEntity $oldServerPartEntity, ServerPartEntity $serverPartEntity, array $serverPartDatas): ServerPartEntity - { - - //수정 전 부품연결정보관련 정보처리 파트정보가 달라졌을경우 (회수 -> 사용 처리) - //기존것 회수 처리 - if ($oldServerPartEntity->getPartUID() !== $serverPartEntity->getPartUID()) { - $this->unsetServerPart($oldServerPartEntity, $serverPartDatas); - } - //신규것 사용처리 - return $this->setServerPart($serverPartEntity, $serverPartDatas); - } - public function unsetServerPart(ServerPartEntity $serverPartEntity, array $serverPartDatas): ServerPartEntity - { - $formDatas = []; - $formDatas['clientinfo_uid'] = null; - $formDatas['serviceinfo_uid'] = null; - $formDatas['serverinfo_uid'] = null; - //기존 고객정보 기록용 - $formDatas['old_clientinfo_uid'] = $serverPartEntity->getClientInfoUID(); - $formDatas['status'] = STATUS['AVAILABLE']; - if (!array_key_exists('status', $formDatas)) { - throw new \Exception(__METHOD__ . "에서 오류발생: IP상태가 설정되지 않았습니다."); - } - // IP정보가져오기 - $entity = $this->getEntity($serverPartEntity->getPartUID()); - if (!$entity instanceof IPEntity) { - throw new \Exception("{$serverPartEntity->getPartUID()}에 해당하는 IP정보를 찾을수없습니다."); - } - // IP정보 수정 - return $serverPartEntity->setPartEntity(parent::modify($entity, $formDatas)); + return $entity; } } diff --git a/app/Services/Part/OSService.php b/app/Services/Part/OSService.php index 3ff875f..c211695 100644 --- a/app/Services/Part/OSService.php +++ b/app/Services/Part/OSService.php @@ -52,41 +52,4 @@ class OSService extends PartService implements ServerPartInterface $this->getModel()->orderBy('title ASC'); parent::setOrderBy($field, $value); } - - //서버파트관련 작업 - public function setServerPart(ServerPartEntity $serverPartEntity, array $serverPartDatas): ServerPartEntity - { - //부품정보가져오기 - $entity = $this->getEntity($serverPartEntity->getPartUID()); - if (!$entity instanceof OSEntity) { - throw new \Exception("{$serverPartEntity->getPartUID()}에 해당하는 부품정보를 찾을수없습니다."); - } - //부품정보에 서버정보 설정 및 서비스,고객정보 정의 - if ($entity->getStock() < $serverPartEntity->getCnt()) { - throw new \Exception("현재 재고수[{$entity->getStock()}]보다 지정하신 갯수({$serverPartEntity->getCnt()})가 더 많습니다."); - } - $entity = parent::modify($entity, ['stock' => $entity->getStock() - $serverPartEntity->getCnt()]); - return $serverPartEntity->setPartEntity($entity); - } - public function changeServerPart(ServerPartEntity $oldServerPartEntity, ServerPartEntity $serverPartEntity, array $serverPartDatas): ServerPartEntity - { - - //수정 전 부품연결정보관련 정보처리 갯수,파트가 달라졌을경우 (회수 -> 사용 처리) - //기존것 회수 처리 - if ($oldServerPartEntity->getCnt() != $serverPartEntity->getCnt() || $oldServerPartEntity->getPartUID() !== $serverPartEntity->getPartUID()) { - $this->unsetServerPart($oldServerPartEntity, $serverPartDatas); - } - //신규것 사용처리 - return $this->setServerPart($serverPartEntity, $serverPartDatas); - } - public function unsetServerPart(ServerPartEntity $serverPartEntity, array $serverPartDatas): ServerPartEntity - { - //부품정보가져오기 - $entity = $this->getEntity($serverPartEntity->getPartUID()); - if (!$entity instanceof OSEntity) { - throw new \Exception("{$serverPartEntity->getPartUID()}에 해당하는 부품정보를 찾을수없습니다."); - } - $entity = parent::modify($entity, ['stock' => $entity->getStock() + $serverPartEntity->getCnt()]); - return $serverPartEntity->setPartEntity($entity); - } } diff --git a/app/Services/Part/PartService.php b/app/Services/Part/PartService.php index afd0d6f..a5f6cbf 100644 --- a/app/Services/Part/PartService.php +++ b/app/Services/Part/PartService.php @@ -2,6 +2,7 @@ namespace App\Services\Part; +use App\Entities\Equipment\ServerPartEntity; use App\Helpers\CommonHelper; use App\Models\CommonModel; use App\Services\CommonService; @@ -13,4 +14,45 @@ abstract class PartService extends CommonService parent::__construct($model, $helper); $this->addClassName('Part'); } + + //서버파트관련 작업 + public function setServerPart(string $action, ServerPartEntity $oldServerPartEntity, ServerPartEntity $serverPartEntity, array $serverPartDatas): mixed + { + switch ($action) { + case 'create': + //부품정보가져오기 + $entity = $this->getEntity($serverPartEntity->getPartUID()); + if (!$entity) { + throw new \Exception("{$serverPartEntity->getPartUID()}에 해당하는 부품정보를 찾을수없습니다."); + } + //부품정보에 서버정보 설정 및 서비스,고객정보 정의 + if ($entity->getStock() < $serverPartEntity->getCnt()) { + throw new \Exception("현재 재고수[{$entity->getStock()}]보다 지정하신 갯수({$serverPartEntity->getCnt()})가 더 많습니다."); + } + $entity = parent::modify($entity, ['stock' => $entity->getStock() - $serverPartEntity->getCnt()]); + break; + case 'modify': + //수정 전 부품연결정보관련 정보처리 갯수,파트가 달라졌을경우 (회수 -> 사용 처리) + //기존것 회수 처리 + if ($oldServerPartEntity->getCnt() != $serverPartEntity->getCnt() || $oldServerPartEntity->getPartUID() !== $serverPartEntity->getPartUID()) { + $this->setServerPart('delete', $oldServerPartEntity, $serverPartEntity, $serverPartDatas); + } + //신규것 사용처리 + $entity = $this->setServerPart('create', $oldServerPartEntity, $serverPartEntity, $serverPartDatas); + break; + case 'delete': + //부품정보가져오기 + $entity = $this->getEntity($serverPartEntity->getPartUID()); + if (!$entity) { + throw new \Exception("{$serverPartEntity->getPartUID()}에 해당하는 부품정보를 찾을수없습니다."); + } + //부품정보에 서버정보 설정 및 서비스,고객정보 정의 + if ($entity->getStock() < $serverPartEntity->getCnt()) { + throw new \Exception("현재 재고수[{$entity->getStock()}]보다 지정하신 갯수({$serverPartEntity->getCnt()})가 더 많습니다."); + } + $entity = parent::modify($entity, ['stock' => $entity->getStock() - $serverPartEntity->getCnt()]); + break; + } + return $entity; + } } diff --git a/app/Services/Part/RAMService.php b/app/Services/Part/RAMService.php index ac9a8d7..3a9959c 100644 --- a/app/Services/Part/RAMService.php +++ b/app/Services/Part/RAMService.php @@ -52,41 +52,4 @@ class RAMService extends PartService implements ServerPartInterface $this->getModel()->orderBy('title ASC'); parent::setOrderBy($field, $value); } - - //서버파트관련 작업 - public function setServerPart(ServerPartEntity $serverPartEntity, array $serverPartDatas): ServerPartEntity - { - //부품정보가져오기 - $entity = $this->getEntity($serverPartEntity->getPartUID()); - if (!$entity instanceof RAMEntity) { - throw new \Exception("{$serverPartEntity->getPartUID()}에 해당하는 부품정보를 찾을수없습니다."); - } - //부품정보에 서버정보 설정 및 서비스,고객정보 정의 - if ($entity->getStock() < $serverPartEntity->getCnt()) { - throw new \Exception("현재 재고수[{$entity->getStock()}]보다 지정하신 갯수({$serverPartEntity->getCnt()})가 더 많습니다."); - } - parent::modify($entity, ['stock' => $entity->getStock() - $serverPartEntity->getCnt()]); - return $serverPartEntity->setPartEntity($entity); - } - public function changeServerPart(ServerPartEntity $oldServerPartEntity, ServerPartEntity $serverPartEntity, array $serverPartDatas): ServerPartEntity - { - - //수정 전 부품연결정보관련 정보처리 갯수,파트가 달라졌을경우 (회수 -> 사용 처리) - //기존것 회수 처리 - if ($oldServerPartEntity->getCnt() != $serverPartEntity->getCnt() || $oldServerPartEntity->getPartUID() !== $serverPartEntity->getPartUID()) { - $this->unsetServerPart($oldServerPartEntity, $serverPartDatas); - } - //신규것 사용처리 - return $this->setServerPart($serverPartEntity, $serverPartDatas); - } - public function unsetServerPart(ServerPartEntity $serverPartEntity, array $serverPartDatas): ServerPartEntity - { - //부품정보가져오기 - $entity = $this->getEntity($serverPartEntity->getPartUID()); - if (!$entity instanceof RAMEntity) { - throw new \Exception("{$serverPartEntity->getPartUID()}에 해당하는 부품정보를 찾을수없습니다."); - } - parent::modify($entity, ['stock' => $entity->getStock() + $serverPartEntity->getCnt()]); - return $serverPartEntity; - } } diff --git a/app/Services/Part/SOFTWAREService.php b/app/Services/Part/SOFTWAREService.php index 18cd092..494c75b 100644 --- a/app/Services/Part/SOFTWAREService.php +++ b/app/Services/Part/SOFTWAREService.php @@ -52,41 +52,4 @@ class SOFTWAREService extends PartService implements ServerPartInterface $this->getModel()->orderBy('title ASC'); parent::setOrderBy($field, $value); } - - //서버파트관련 작업 - public function setServerPart(ServerPartEntity $serverPartEntity, array $serverPartDatas): ServerPartEntity - { - //부품정보가져오기 - $entity = $this->getEntity($serverPartEntity->getPartUID()); - if (!$entity instanceof SOFTWAREEntity) { - throw new \Exception("{$serverPartEntity->getPartUID()}에 해당하는 부품정보를 찾을수없습니다."); - } - //부품정보에 서버정보 설정 및 서비스,고객정보 정의 - if ($entity->getStock() < $serverPartEntity->getCnt()) { - throw new \Exception("현재 재고수[{$entity->getStock()}]보다 지정하신 갯수({$serverPartEntity->getCnt()})가 더 많습니다."); - } - $entity = parent::modify($entity, ['stock' => $entity->getStock() - $serverPartEntity->getCnt()]); - return $serverPartEntity->setPartEntity($entity); - } - public function changeServerPart(ServerPartEntity $oldServerPartEntity, ServerPartEntity $serverPartEntity, array $serverPartDatas): ServerPartEntity - { - - //수정 전 부품연결정보관련 정보처리 갯수,파트가 달라졌을경우 (회수 -> 사용 처리) - //기존것 회수 처리 - if ($oldServerPartEntity->getCnt() != $serverPartEntity->getCnt() || $oldServerPartEntity->getPartUID() !== $serverPartEntity->getPartUID()) { - $this->unsetServerPart($oldServerPartEntity, $serverPartDatas); - } - //신규것 사용처리 - return $this->setServerPart($serverPartEntity, $serverPartDatas); - } - public function unsetServerPart(ServerPartEntity $serverPartEntity, array $serverPartDatas): ServerPartEntity - { - //부품정보가져오기 - $entity = $this->getEntity($serverPartEntity->getPartUID()); - if (!$entity instanceof SOFTWAREEntity) { - throw new \Exception("{$serverPartEntity->getPartUID()}에 해당하는 부품정보를 찾을수없습니다."); - } - $entity = parent::modify($entity, ['stock' => $entity->getStock() + $serverPartEntity->getCnt()]); - return $serverPartEntity->setPartEntity($entity); - } } diff --git a/app/Services/Part/SWITCHService.php b/app/Services/Part/SWITCHService.php index 74f0fbc..2637a3c 100644 --- a/app/Services/Part/SWITCHService.php +++ b/app/Services/Part/SWITCHService.php @@ -91,51 +91,53 @@ class SWITCHService extends PartService implements ServerPartInterface } //서버파트관련 작업 - public function setServerPart(ServerPartEntity $serverPartEntity, array $serverPartDatas): ServerPartEntity + public function setServerPart(string $action, ServerPartEntity $oldServerPartEntity, ServerPartEntity $serverPartEntity, array $serverPartDatas): SWITCHEntity { - $formDatas = []; - $formDatas['clientinfo_uid'] = $serverPartEntity->getClientInfoUID(); - $formDatas['serviceinfo_uid'] = $serverPartEntity->getServiceInfoUID(); - $formDatas['serverinfo_uid'] = $serverPartEntity->getServerInfoUID(); - $formDatas['status'] = STATUS['OCCUPIED']; - if (!array_key_exists('status', $formDatas)) { - throw new \Exception(__METHOD__ . "에서 오류발생: SWITCH상태가 설정되지 않았습니다."); + switch ($action) { + case 'create': + $formDatas = []; + $formDatas['clientinfo_uid'] = $serverPartEntity->getClientInfoUID(); + $formDatas['serviceinfo_uid'] = $serverPartEntity->getServiceInfoUID(); + $formDatas['serverinfo_uid'] = $serverPartEntity->getServerInfoUID(); + $formDatas['status'] = STATUS['OCCUPIED']; + if (!array_key_exists('status', $formDatas)) { + throw new \Exception(__METHOD__ . "에서 오류발생: SWITCH상태가 설정되지 않았습니다."); + } + //SWITCH정보가져오기 + $entity = $this->getEntity($serverPartEntity->getPartUID()); + if (!$entity instanceof SWITCHEntity) { + throw new \Exception("{$serverPartEntity->getPartUID()}에 해당하는 SWITCH정보를 찾을수없습니다."); + } + //SWITCH정보 수정 + $entity = parent::modify($entity, $formDatas); + break; + case 'modify': + //수정 전 부품연결정보관련 정보처리 파트정보가 달라졌을경우 (회수 -> 사용 처리) + //기존것 회수 처리 + if ($oldServerPartEntity->getPartUID() !== $serverPartEntity->getPartUID()) { + $this->setServerPart('delete', $oldServerPartEntity, $serverPartEntity, $serverPartDatas); + } + //신규것 사용처리 + $entity = $this->setServerPart('create', $oldServerPartEntity, $serverPartEntity, $serverPartDatas); + break; + case 'delete': + $formDatas = []; + $formDatas['clientinfo_uid'] = null; + $formDatas['serviceinfo_uid'] = null; + $formDatas['serverinfo_uid'] = null; + $formDatas['status'] = STATUS['AVAILABLE']; + if (!array_key_exists('status', $formDatas)) { + throw new \Exception(__METHOD__ . "에서 오류발생: SWITCH상태가 설정되지 않았습니다."); + } + //SWITCH정보가져오기 + $entity = $this->getEntity($serverPartEntity->getPartUID()); + if (!$entity instanceof SWITCHEntity) { + throw new \Exception("{$serverPartEntity->getPartUID()}에 해당하는 SWITCH정보를 찾을수없습니다."); + } + //SWITCH정보 수정 + $entity = parent::modify($entity, $formDatas); + break; } - //SWITCH정보가져오기 - $entity = $this->getEntity($serverPartEntity->getPartUID()); - if (!$entity instanceof SWITCHEntity) { - throw new \Exception("{$serverPartEntity->getPartUID()}에 해당하는 SWITCH정보를 찾을수없습니다."); - } - //SWITCH정보 수정 - return $serverPartEntity->setPartEntity(parent::modify($entity, $formDatas)); - } - public function changeServerPart(ServerPartEntity $oldServerPartEntity, ServerPartEntity $serverPartEntity, array $serverPartDatas): ServerPartEntity - { - - //수정 전 부품연결정보관련 정보처리 파트정보가 달라졌을경우 (회수 -> 사용 처리) - //기존것 회수 처리 - if ($oldServerPartEntity->getPartUID() !== $serverPartEntity->getPartUID()) { - $this->unsetServerPart($oldServerPartEntity, $serverPartDatas); - } - //신규것 사용처리 - return $this->setServerPart($serverPartEntity, $serverPartDatas); - } - public function unsetServerPart(ServerPartEntity $serverPartEntity, array $serverPartDatas): ServerPartEntity - { - $formDatas = []; - $formDatas['clientinfo_uid'] = null; - $formDatas['serviceinfo_uid'] = null; - $formDatas['serverinfo_uid'] = null; - $formDatas['status'] = STATUS['AVAILABLE']; - if (!array_key_exists('status', $formDatas)) { - throw new \Exception(__METHOD__ . "에서 오류발생: SWITCH상태가 설정되지 않았습니다."); - } - //SWITCH정보가져오기 - $entity = $this->getEntity($serverPartEntity->getPartUID()); - if (!$entity instanceof SWITCHEntity) { - throw new \Exception("{$serverPartEntity->getPartUID()}에 해당하는 SWITCH정보를 찾을수없습니다."); - } - //SWITCH정보 수정 - return $serverPartEntity->setPartEntity(parent::modify($entity, $formDatas)); + return $entity; } } diff --git a/app/Services/PaymentService.php b/app/Services/PaymentService.php index df87140..620202d 100644 --- a/app/Services/PaymentService.php +++ b/app/Services/PaymentService.php @@ -6,7 +6,6 @@ use App\Entities\Customer\ServiceEntity; use App\Entities\Equipment\ServerPartEntity; use App\Entities\PaymentEntity; use App\Helpers\PaymentHelper; -use App\Interfaces\Customer\ServiceInterface; use App\Models\PaymentModel; use App\Services\CommonService; use App\Services\Customer\ClientService; @@ -14,7 +13,7 @@ use App\Services\Customer\ServiceService; use App\Services\Equipment\ServerPartService; use App\Services\UserService; -class PaymentService extends CommonService implements ServiceInterface +class PaymentService extends CommonService { private ?UserService $_userService = null; private ?ClientService $_clientService = null; @@ -117,10 +116,78 @@ class PaymentService extends CommonService implements ServiceInterface } return $unPaids; } - //결제금액설정 - final public function setAmount(PaymentEntity $entity, int $amount): PaymentEntity + //서비스정보 설정 + final public function setService(string $action, ServiceEntity $serviceEntity, array $serviceFormDatas = []): PaymentEntity { - return parent::modify($entity, ['amount' => $amount]); + switch ($action) { + case 'create': + $formDatas = []; + $formDatas['clientinfo_uid'] = $serviceEntity->getClientInfoUID(); + $formDatas['serviceinfo_uid'] = $serviceEntity->getPK(); + $formDatas['serverinfo_uid'] = $serviceEntity->getServerInfoUID(); + $formDatas['title'] = $serviceEntity->getServerEntity()->getTitle(); + $formDatas['amount'] = $serviceEntity->getAmount(); + $formDatas['billing'] = PAYMENT['BILLING']['MONTH']; + $formDatas['billing_at'] = $serviceEntity->getBillingAt(); + $entity = parent::create($formDatas); + break; + case 'modify': + $entity = $serviceEntity->getPaymentEntity(); + if (!$entity instanceof PaymentEntity) { + throw new \Exception(__METHOD__ . "에서 오류발생:결제정보를 찾을수 없습니다."); + } + $formDatas = []; + $formDatas['clientinfo_uid'] = $serviceEntity->getClientInfoUID(); + $formDatas['serviceinfo_uid'] = $serviceEntity->getPK(); + $formDatas['serverinfo_uid'] = $serviceEntity->getServerInfoUID(); + $formDatas['title'] = $serviceEntity->getServerEntity()->getTitle(); + $formDatas['amount'] = $serviceEntity->getAmount(); + $formDatas['billing'] = PAYMENT['BILLING']['MONTH']; + $formDatas['billing_at'] = $serviceEntity->getBillingAt(); + $entity = parent::modify($entity, $formDatas); + break; + default: + throw new \Exception(__METHOD__ . "에서 오류발생:{$action}은 정의되지 않은 작업입니다."); + // break; + } + return $entity; + } + final public function setServerPart(string $action, ServerPartEntity $serverPartEntity, array $servicePartFormDatas = []): PaymentEntity + { + switch ($action) { + case 'create': + $formDatas = []; + $formDatas['clientinfo_uid'] = $serverPartEntity->getClientInfoUID(); + $formDatas['serviceinfo_uid'] = $serverPartEntity->getServiceInfoUID(); + $formDatas['serverinfo_uid'] = $serverPartEntity->getServerInfoUID(); //서버연결정보 수정시에 필요함 + //타이틀은 기타의 경우 직접작성한 제목을 등록하고 아닌경우는 Part의 Title을 사용한다. + $formDatas['title'] = $serverPartEntity->getPartEntity()->getTitle(); + $formDatas['amount'] = $serverPartEntity->getTotalAmount(); //단가*cnt + $formDatas['billing'] = $serverPartEntity->getBilling(); + //당일결체일로 설정 + $formDatas['billing_at'] = date("Y-m-d"); + $entity = parent::create($formDatas); + break; + case 'modify': + $entity = $serverPartEntity->getPaymentEntity(); + if (!$entity instanceof PaymentEntity) { + throw new \Exception(__METHOD__ . "에서 오류발생:결제정보를 찾을수 없습니다."); + } + $formDatas = []; + $formDatas['clientinfo_uid'] = $serverPartEntity->getClientInfoUID(); + $formDatas['serviceinfo_uid'] = $serverPartEntity->getServiceInfoUID(); + $formDatas['serverinfo_uid'] = $serverPartEntity->getServerInfoUID(); //서버연결정보 수정시에 필요함 + //타이틀은 기타의 경우 직접작성한 제목을 등록하고 아닌경우는 Part의 Title을 사용한다. + $formDatas['title'] = $serverPartEntity->getPartEntity()->getTitle(); + $formDatas['amount'] = $serverPartEntity->getTotalAmount(); //단가*cnt + $formDatas['billing'] = $serverPartEntity->getBilling(); + $entity = parent::modify($entity, $formDatas); + break; + default: + throw new \Exception(__METHOD__ . "에서 오류발생:{$action}은 정의되지 않은 작업입니다."); + // break; + } + return $entity; } //기본 기능부분 //FieldForm관련용 @@ -157,31 +224,4 @@ class PaymentService extends CommonService implements ServiceInterface $this->getModel()->orderBy('billing_at ASC'); parent::setOrderBy($field, $value); } - public function changeService(ServiceEntity $oldServiceEntity, ServiceEntity $serviceEntity, array $serviceDatas): ServiceEntity - { - //결제정보 가져오기 - $entity = $serviceEntity->getPaymentEntity(); - if (!$entity instanceof PaymentEntity) { - throw new \Exception(__METHOD__ . "에서 오류발생: 서비스정보[{$serviceEntity->getPK()}]에 해당하는 결제정보를 찾을수 없습니다."); - } - //미납상태확인 - if ($entity->getStatus() !== STATUS['UNPAID']) { - throw new \Exception(__METHOD__ . "에서 오류발생: 완료된 결제는 수정이 불가합니다."); - } - $formDatas = []; - $formDatas['clientinfo_uid'] = $serviceEntity->getClientInfoUID(); - $formDatas['serviceinfo_uid'] = $serviceEntity->getPK(); - $formDatas['serverinfo_uid'] = $serviceEntity->getServerInfoUID(); - $formDatas['title'] = $serviceEntity->getServerEntity()->getTitle(); - $formDatas['amount'] = $serviceEntity->getAmount(); - $formDatas['billing'] = PAYMENT['BILLING']['MONTH']; - $formDatas['billing_at'] = $serviceEntity->getBillingAt(); - //필수정보처리 후 결제정보수정 후 서비스정보 Entity에 결제정보 설정 - return $serviceEntity->setPaymentEntity($this->getModel()->modify($entity, $formDatas)); - } - public function unsetService(ServiceEntity $serviceEntity, array $serviceDatas): ServiceEntity - { - //아무것도 하지 않는다. - return $serviceEntity; - } }