dbmsv2_init...1

This commit is contained in:
choi.jh 2025-09-29 16:34:07 +09:00
parent 31962dd9c6
commit fa700e56c8
33 changed files with 904 additions and 870 deletions

View File

@ -126,6 +126,7 @@ $routes->group('admin', ['namespace' => 'App\Controllers\Admin', 'filter' => 'au
$routes->get('alternative/(:num)', 'ServiceController::alternative_form/$1'); $routes->get('alternative/(:num)', 'ServiceController::alternative_form/$1');
$routes->post('alternative/(:num)', 'ServiceController::alternative/$1'); $routes->post('alternative/(:num)', 'ServiceController::alternative/$1');
$routes->get('main/(:num)', 'ServiceController::main/$1'); $routes->get('main/(:num)', 'ServiceController::main/$1');
$routes->get('terminate/(:num)', 'ServiceController::terminate/$1');
$routes->post('history/(:num)', 'ServiceController::history/$1'); $routes->post('history/(:num)', 'ServiceController::history/$1');
}); });
$routes->group('payment', ['namespace' => 'App\Controllers\Admin\Customer'], function ($routes) { $routes->group('payment', ['namespace' => 'App\Controllers\Admin\Customer'], function ($routes) {

View File

@ -142,18 +142,7 @@ class ServiceController extends CustomerController
return $this->getResultFail($e->getMessage()); return $this->getResultFail($e->getMessage());
} }
} }
protected function alternative_process(mixed $entity, array $formDatas): mixed //대체서버 등록
{
$serverEntity = $this->getService()->getServerService()->getEntity($formDatas['serverinfo_uid']);
if (!$serverEntity instanceof ServerEntity) {
throw new \Exception("{$formDatas['serverinfo_uid']}에 대한 서버정보를 찾을수 없습니다.");
}
$formDatas['clientinfo_uid'] = $entity->getClientInfoUID();
$formDatas['serviceinfo_uid'] = $entity->getPK();
$formDatas['type'] = "alternative";
$formDatas['status'] = STATUS['OCCUPIED'];
return $this->getServerService()->modify($serverEntity, $formDatas);
}
public function alternative(int $uid): RedirectResponse|string public function alternative(int $uid): RedirectResponse|string
{ {
//Transaction Start //Transaction Start
@ -172,7 +161,9 @@ class ServiceController extends CustomerController
if (!$entity instanceof ServiceEntity) { if (!$entity instanceof ServiceEntity) {
throw new \Exception("{$uid}에 대한 정보를 찾을수 없습니다."); throw new \Exception("{$uid}에 대한 정보를 찾을수 없습니다.");
} }
$this->entity = $this->alternative_process($entity, $this->getService()->getFormDatas()); $formDatas = $this->getService()->getFormDatas();
$formDatas['type'] = 'alternative'; //대체서버로 등록하기위해 필요
$this->entity = $this->getService()->addAlternativeServer($entity, $formDatas);
$db->transCommit(); $db->transCommit();
return $this->getResultSuccess(); return $this->getResultSuccess();
} catch (\Exception $e) { } catch (\Exception $e) {
@ -180,7 +171,7 @@ class ServiceController extends CustomerController
return $this->getResultFail($e->getMessage()); return $this->getResultFail($e->getMessage());
} }
} }
//MAIN서버선 //대체서버를 MAIN서버로 설
public function main(mixed $uid): RedirectResponse|string public function main(mixed $uid): RedirectResponse|string
{ {
//Transaction Start //Transaction Start
@ -199,17 +190,37 @@ class ServiceController extends CustomerController
if (!$entity instanceof ServiceEntity) { if (!$entity instanceof ServiceEntity) {
throw new \Exception("{$uid}에 대한 정보를 찾을수 없습니다."); throw new \Exception("{$uid}에 대한 정보를 찾을수 없습니다.");
} }
$formDatas = $this->getService()->getFormDatas(); $formDatas = $this->getService()->getFormDatas();
if (!array_key_exists('serverinfo_uid', $formDatas)) { if (!array_key_exists('serverinfo_uid', $formDatas)) {
throw new \Exception("서비스의 메인서버로 설정할 서버정보가 없습니다."); throw new \Exception("서비스의 메인서버로 설정할 서버정보가 없습니다.");
} }
$serverEntity = $this->getServerService()->getEntity($formDatas['serverinfo_uid']);
if (!$serverEntity instanceof ServerEntity) {
throw new \Exception("{$formDatas['serverinfo_uid']}에 대한 서버정보를 찾을수 없습니다.");
}
//서버정보설정 //서버정보설정
$this->getService()->setMainServer($entity, $serverEntity); $this->getService()->changeAlternativeServer($entity, $formDatas);
$db->transCommit();
return $this->getResultSuccess();
} catch (\Exception $e) {
$db->transRollback();
return $this->getResultFail($e->getMessage());
}
}
//서비스 서버해지
public function terminate(mixed $uid): RedirectResponse|string
{
//Transaction Start
$db = \Config\Database::connect();
$db->transStart();
try {
$this->getService()->setAction(__FUNCTION__);
$this->getService()->setFormFields(['serverinfo_uid']);
//전달값정의
$this->getService()->setFormDatas($this->request->getGet());
//기존 Entity 가져오기
$entity = $this->getService()->getEntity($uid);
if (!$entity instanceof ServiceEntity) {
throw new \Exception("{$uid}에 대한 정보를 찾을수 없습니다.");
}
$formDatas = $this->getService()->getFormDatas();
$this->getService()->terminateAlternativeServer($entity, $formDatas);
$db->transCommit(); $db->transCommit();
return $this->getResultSuccess(); return $this->getResultSuccess();
} catch (\Exception $e) { } catch (\Exception $e) {
@ -217,7 +228,6 @@ class ServiceController extends CustomerController
return $this->getResultFail($e->getMessage()); return $this->getResultFail($e->getMessage());
} }
} }
public function history(int $uid): RedirectResponse|string public function history(int $uid): RedirectResponse|string
{ {
//Transaction Start //Transaction Start

View File

@ -380,7 +380,7 @@ CREATE TABLE `payment` (
LOCK TABLES `payment` WRITE; LOCK TABLES `payment` WRITE;
/*!40000 ALTER TABLE `payment` DISABLE KEYS */; /*!40000 ALTER TABLE `payment` DISABLE KEYS */;
INSERT INTO `payment` VALUES (17,1,820,52,'HP DL360 Gen6',1000000,'month','2025-09-25',NULL,'unpaid','2025-09-26 10:00:39','2025-09-25 06:29:25',NULL),(18,1,1161,53,'HP DL360 Gen7',900000,'month','2025-09-25',NULL,'unpaid','2025-09-25 08:14:06','2025-09-25 06:31:18',NULL),(19,1,820,52,'2G',40000,'onetime','2025-09-25',NULL,'unpaid','2025-09-25 08:27:17','2025-09-25 08:15:08',NULL),(20,1,1087,54,'HP DL360 Gen8',900000,'month','2025-09-25',NULL,'unpaid',NULL,'2025-09-25 08:36:43',NULL),(21,1,820,52,'16G',300000,'onetime','2025-09-26',NULL,'unpaid',NULL,'2025-09-26 07:03:50',NULL); INSERT INTO `payment` VALUES (17,1,820,52,'HP DL360 Gen6',1000000,'month','2025-09-25',NULL,'unpaid','2025-09-29 03:51:07','2025-09-25 06:29:25',NULL),(18,1,1161,53,'HP DL360 Gen7',900000,'month','2025-09-25',NULL,'unpaid','2025-09-25 08:14:06','2025-09-25 06:31:18',NULL),(19,1,820,52,'2G',40000,'onetime','2025-09-25',NULL,'unpaid','2025-09-25 08:27:17','2025-09-25 08:15:08',NULL),(20,1,1087,54,'HP DL360 Gen8',900000,'month','2025-09-25',NULL,'unpaid',NULL,'2025-09-25 08:36:43',NULL),(21,1,820,52,'16G',300000,'onetime','2025-09-26',NULL,'unpaid',NULL,'2025-09-26 07:03:50',NULL);
/*!40000 ALTER TABLE `payment` ENABLE KEYS */; /*!40000 ALTER TABLE `payment` ENABLE KEYS */;
UNLOCK TABLES; UNLOCK TABLES;
@ -485,7 +485,7 @@ CREATE TABLE `serverinfo` (
LOCK TABLES `serverinfo` WRITE; LOCK TABLES `serverinfo` WRITE;
/*!40000 ALTER TABLE `serverinfo` DISABLE KEYS */; /*!40000 ALTER TABLE `serverinfo` DISABLE KEYS */;
INSERT INTO `serverinfo` VALUES (17,820,52,'250922-M1','normal','HP DL360 Gen6',500000,'2025-08-31 15:00:00','0000-00-00 00:00:00','occupied','2025-09-26 06:52:03','2025-09-22 02:19:25',NULL),(18,1161,53,'250922-M18','normal','HP DL360 Gen7',400000,'2025-09-01 15:00:00',NULL,'occupied','2025-09-26 01:28:35','2025-09-22 02:21:51',NULL),(19,1087,54,'250922-M19','normal','HP DL360 Gen8',500000,'2025-09-02 15:00:00',NULL,'occupied','2025-09-26 01:28:44','2025-09-22 02:22:14',NULL),(20,820,52,'250922-M20','alternative','HP DL360 Gen9',600000,'2025-09-03 15:00:00',NULL,'occupied','2025-09-26 04:02:28','2025-09-22 02:22:39',NULL),(21,820,52,'250922-M21','alternative','HP DL360 Gen10',700000,'2025-09-04 15:00:00',NULL,'occupied','2025-09-26 06:47:57','2025-09-22 02:23:08',NULL),(22,NULL,NULL,'250922-M22','normal','Hitach HA3000',800000,'2025-09-05 15:00:00','0000-00-00 00:00:00','available','2025-09-26 01:41:20','2025-09-22 02:23:36',NULL); INSERT INTO `serverinfo` VALUES (17,820,52,'250922-M1','normal','HP DL360 Gen6',500000,'2025-08-31 15:00:00','0000-00-00 00:00:00','occupied','2025-09-26 06:52:03','2025-09-22 02:19:25',NULL),(18,1161,53,'250922-M18','normal','HP DL360 Gen7',400000,'2025-09-01 15:00:00',NULL,'occupied','2025-09-26 01:28:35','2025-09-22 02:21:51',NULL),(19,1087,54,'250922-M19','normal','HP DL360 Gen8',500000,'2025-09-02 15:00:00',NULL,'occupied','2025-09-26 01:28:44','2025-09-22 02:22:14',NULL),(20,820,52,'250922-M20','alternative','HP DL360 Gen9',600000,'2025-09-03 15:00:00',NULL,'occupied','2025-09-26 04:02:28','2025-09-22 02:22:39',NULL),(21,820,52,'250922-M21','alternative','HP DL360 Gen10',700000,'2025-09-04 15:00:00',NULL,'occupied','2025-09-26 06:47:57','2025-09-22 02:23:08',NULL),(22,820,52,'250922-M22','alternative','Hitach HA3000',800000,'2025-09-05 15:00:00','0000-00-00 00:00:00','occupied','2025-09-29 03:59:13','2025-09-22 02:23:36',NULL);
/*!40000 ALTER TABLE `serverinfo` ENABLE KEYS */; /*!40000 ALTER TABLE `serverinfo` ENABLE KEYS */;
UNLOCK TABLES; UNLOCK TABLES;
@ -568,7 +568,7 @@ CREATE TABLE `serviceinfo` (
CONSTRAINT `FK_payment_TO_serviceinfo` FOREIGN KEY (`payment_uid`) REFERENCES `payment` (`uid`), CONSTRAINT `FK_payment_TO_serviceinfo` FOREIGN KEY (`payment_uid`) REFERENCES `payment` (`uid`),
CONSTRAINT `FK_serverinfo_TO_serviceinfo` FOREIGN KEY (`serverinfo_uid`) REFERENCES `serverinfo` (`uid`), CONSTRAINT `FK_serverinfo_TO_serviceinfo` FOREIGN KEY (`serverinfo_uid`) REFERENCES `serverinfo` (`uid`),
CONSTRAINT `FK_user_TO_serviceinfo` FOREIGN KEY (`user_uid`) REFERENCES `user` (`uid`) CONSTRAINT `FK_user_TO_serviceinfo` FOREIGN KEY (`user_uid`) REFERENCES `user` (`uid`)
) ENGINE=InnoDB AUTO_INCREMENT=55 DEFAULT CHARSET=utf8 COMMENT='서비스정보'; ) ENGINE=InnoDB AUTO_INCREMENT=56 DEFAULT CHARSET=utf8 COMMENT='서비스정보';
/*!40101 SET character_set_client = @saved_cs_client */; /*!40101 SET character_set_client = @saved_cs_client */;
-- --
@ -577,7 +577,7 @@ CREATE TABLE `serviceinfo` (
LOCK TABLES `serviceinfo` WRITE; LOCK TABLES `serviceinfo` WRITE;
/*!40000 ALTER TABLE `serviceinfo` DISABLE KEYS */; /*!40000 ALTER TABLE `serviceinfo` DISABLE KEYS */;
INSERT INTO `serviceinfo` VALUES (52,1,820,20,17,'prime_s68d4e145a474d','prime','chiba',100000,300000,'2025-09-25',1000000,'2025-09-25',NULL,NULL,'available','2025-09-26 10:00:39','2025-09-25 06:29:25',NULL),(53,1,1161,18,18,'itsolution_s68d4e1b6','itsolution','chiba',100000,300000,'2025-09-25',900000,'2025-09-25',NULL,NULL,'available','2025-09-25 08:14:06','2025-09-25 06:31:18',NULL),(54,1,1087,19,20,'gdidc_s68d4ff1b03fab','gdidc','chiba',100000,300000,'2025-09-25',900000,'2025-09-25',NULL,NULL,'available','2025-09-25 08:36:43','2025-09-25 08:36:43',NULL); INSERT INTO `serviceinfo` VALUES (52,1,820,17,17,'prime_s68d4e145a474d','prime','chiba',100000,300000,'2025-09-25',1000000,'2025-09-25',NULL,NULL,'available','2025-09-29 03:51:07','2025-09-25 06:29:25',NULL),(53,1,1161,18,18,'itsolution_s68d4e1b6','itsolution','chiba',100000,300000,'2025-09-25',900000,'2025-09-25',NULL,NULL,'available','2025-09-25 08:14:06','2025-09-25 06:31:18',NULL),(54,1,1087,19,20,'gdidc_s68d4ff1b03fab','gdidc','chiba',100000,300000,'2025-09-25',900000,'2025-09-25',NULL,NULL,'available','2025-09-25 08:36:43','2025-09-25 08:36:43',NULL);
/*!40000 ALTER TABLE `serviceinfo` ENABLE KEYS */; /*!40000 ALTER TABLE `serviceinfo` ENABLE KEYS */;
UNLOCK TABLES; UNLOCK TABLES;
@ -726,4 +726,4 @@ UNLOCK TABLES;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */; /*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */; /*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
-- Dump completed on 2025-09-27 11:13:54 -- Dump completed on 2025-09-29 12:59:51

View File

@ -6,7 +6,7 @@ use App\Entities\Customer\ServiceEntity;
interface ServiceInterface extends CustomerInterface interface ServiceInterface extends CustomerInterface
{ {
public function createService(ServiceEntity $serviceEntity): ServiceEntity; public function setService(ServiceEntity $serviceEntity, array $formDatas): ServiceEntity;
public function modifyService(ServiceEntity $serviceEntity): ServiceEntity; public function changeService(ServiceEntity $oldServiceEntity, ServiceEntity $serviceEntity, array $formDatas): ServiceEntity;
public function deleteService(ServiceEntity $serviceEntity): ServiceEntity; public function unsetService(ServiceEntity $serviceEntity, array $formDatas): ServiceEntity;
} }

View File

@ -6,7 +6,7 @@ use App\Entities\Equipment\ServerEntity;
interface ServerInterface extends EquipmentInterface interface ServerInterface extends EquipmentInterface
{ {
public function createServer(ServerEntity $serverEntity): ServerEntity; public function setServer(ServerEntity $serverEntity, array $formDatas): ServerEntity;
public function modifyServer(ServerEntity $serverEntity): ServerEntity; public function changeServer(ServerEntity $oldServerEntity, ServerEntity $serverEntity, array $formDatas): ServerEntity;
public function deleteServer(ServerEntity $serverEntity): ServerEntity; public function unsetServer(ServerEntity $serverEntity, array $formDatas): ServerEntity;
} }

View File

@ -6,7 +6,7 @@ use App\Entities\Equipment\ServerPartEntity;
interface ServerPartInterface extends EquipmentInterface interface ServerPartInterface extends EquipmentInterface
{ {
public function createServerPart(ServerPartEntity $serverPartEntity): ServerPartEntity; public function setServerPart(ServerPartEntity $serverPartEntity, array $formDatas): ServerPartEntity;
public function modifyServerPart(ServerPartEntity $serverPartEntity): ServerPartEntity; public function changeServerPart(ServerPartEntity $oldServerPartEntity, ServerPartEntity $serverPartEntity, array $formDatas): ServerPartEntity;
public function deleteServerPart(ServerPartEntity $serverPartEntity): ServerPartEntity; public function unsetServerPart(ServerPartEntity $serverPartEntity, array $formDatas): ServerPartEntity;
} }

View File

@ -1,56 +0,0 @@
<?php
namespace App\Services\Customer\Service;
use App\Entities\Customer\ServiceEntity;
use App\Entities\PaymentEntity;
use App\Services\PaymentService as ParentService;
use App\Interfaces\Customer\ServiceInterface;
class PaymentService extends ParentService implements ServiceInterface
{
public function __construct()
{
parent::__construct();
}
private function action_process(ServiceEntity $serviceEntity, array $formDatas = []): array
{
$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();
return $formDatas;
}
public function createService(ServiceEntity $serviceEntity): ServiceEntity
{
//필수정보처리 후 결제정보등록
$entity = $this->getModel()->create($this->action_process($serviceEntity));
//서비스정보 Entity에 결제정보 설정
return $serviceEntity->setPaymentEntity($entity);
}
public function modifyService(ServiceEntity $serviceEntity): ServiceEntity
{
//결제정보 가져오기
$entity = $serviceEntity->getPaymentEntity();
if (!$entity instanceof PaymentEntity) {
throw new \Exception(__METHOD__ . "에서 오류발생: 서비스정보[{$serviceEntity->getPK()}]에 해당하는 결제정보를 찾을수 없습니다.");
}
//미납상태확인
if ($entity->getStatus() !== STATUS['UNPAID']) {
throw new \Exception(__METHOD__ . "에서 오류발생: 완료된 결제는 수정이 불가합니다.");
}
//필수정보처리 후 결제정보수정
$entity = $this->getModel()->modify($entity, $this->action_process($serviceEntity));
//서비스정보 Entity에 결제정보 설정
return $serviceEntity->setPaymentEntity($entity);
}
public function deleteService(ServiceEntity $serviceEntity): ServiceEntity
{
//삭제시에는 아무것도 하지 않는다.
return $serviceEntity;
}
}

View File

@ -1,54 +0,0 @@
<?php
namespace App\Services\Customer\Service;
use App\Entities\Customer\ServiceEntity;
use App\Entities\Equipment\ServerEntity;
use App\Services\Equipment\ServerService as ParentService;
use App\Interfaces\Customer\ServiceInterface;
class ServerService extends ParentService implements ServiceInterface
{
public function __construct()
{
parent::__construct();
}
private function action_process(ServiceEntity $serviceEntity, array $formDatas = []): ServerEntity
{
if (!array_key_exists('status', $formDatas)) {
throw new \Exception(__METHOD__ . "에서 오류발생: 서버상태가 설정되지 않았습니다.");
}
//서버정보 가져오기
$entity = $serviceEntity->getServerEntity();
if (!$entity instanceof ServerEntity) {
throw new \Exception(__METHOD__ . "에서 오류발생: 서비스정보[{$serviceEntity->getPK()}]에 해당하는 서버정보를 찾을수없습니다.");
}
//서버정보 수정
return $this->getModel()->modify($entity, $formDatas);
}
public function createService(ServiceEntity $serviceEntity): ServiceEntity
{
$formDatas = [];
$formDatas['clientinfo_uid'] = $serviceEntity->getClientInfoUID();
$formDatas['serviceinfo_uid'] = $serviceEntity->getPK();
$formDatas['status'] = STATUS['OCCUPIED'];
$entity = $this->action_process($serviceEntity, $formDatas);
//서비스정보 Entity에 서버정보 설정
return $serviceEntity->setServerEntity($entity);
}
public function modifyService(ServiceEntity $serviceEntity): ServiceEntity
{
return $this->createService($serviceEntity);
}
public function deleteService(ServiceEntity $serviceEntity): ServiceEntity
{
$formDatas = [];
$formDatas['clientinfo_uid'] = null;
$formDatas['serviceinfo_uid'] = null;
$formDatas['format_at'] = date("Y-m-d");
$formDatas['status'] = STATUS['TERMINATED'];
$entity = $this->action_process($serviceEntity, $formDatas);
//서비스정보 Entity에 서버정보 설정
return $serviceEntity->setServerEntity($entity);
}
}

View File

@ -4,14 +4,17 @@ namespace App\Services\Customer;
use App\Entities\Customer\ServiceEntity; use App\Entities\Customer\ServiceEntity;
use App\Entities\Equipment\ServerEntity; use App\Entities\Equipment\ServerEntity;
use App\Entities\Equipment\ServerPartEntity;
use App\Entities\PaymentEntity; use App\Entities\PaymentEntity;
use App\Helpers\Customer\ServiceHelper; use App\Helpers\Customer\ServiceHelper;
use App\Interfaces\Equipment\ServerInterface;
use App\Interfaces\Equipment\ServerPartInterface;
use App\Models\Customer\ServiceModel; use App\Models\Customer\ServiceModel;
use App\Services\Customer\Service\PaymentService;
use App\Services\Customer\Service\ServerService;
use App\Services\Equipment\ServerPartService; use App\Services\Equipment\ServerPartService;
use App\Services\Equipment\ServerService;
use App\Services\PaymentService;
class ServiceService extends CustomerService class ServiceService extends CustomerService implements ServerInterface, ServerPartInterface
{ {
private ?ServerService $_serverService = null; private ?ServerService $_serverService = null;
private ?PaymentService $_paymentService = null; private ?PaymentService $_paymentService = null;
@ -160,8 +163,10 @@ class ServiceService extends CustomerService
) WHERE billing_at = ? AND status = ?"; ) WHERE billing_at = ? AND status = ?";
return $this->getModel()->query($sql, [$billing_at, $status]); return $this->getModel()->query($sql, [$billing_at, $status]);
} }
//조정된 금액 설정
final public function getCaculatedAmount(ServiceEntity $entity): int final public function getCaculatedAmount(ServiceEntity $entity): int
{ {
//총서비스금액 계산
$caculatedAmount = $entity->getRack() + $entity->getLine() + $entity->getServerEntity()->getPrice(); //기본:상면비+회선비+서버금액(price)+서버파트연결(월비용) $caculatedAmount = $entity->getRack() + $entity->getLine() + $entity->getServerEntity()->getPrice(); //기본:상면비+회선비+서버금액(price)+서버파트연결(월비용)
//해당 서비스(서버) 관련 결제방식(Billing)이 Month인 ServerPart 전체를 다시 검사하여 월청구액을 합산한다. //해당 서비스(서버) 관련 결제방식(Billing)이 Month인 ServerPart 전체를 다시 검사하여 월청구액을 합산한다.
foreach ($this->getServerPartService()->getEntities(['serverinfo_uid' => $entity->getServerEntity()->getPK()]) as $serverPartEntity) { foreach ($this->getServerPartService()->getEntities(['serverinfo_uid' => $entity->getServerEntity()->getPK()]) as $serverPartEntity) {
@ -171,26 +176,49 @@ class ServiceService extends CustomerService
} }
return $caculatedAmount; return $caculatedAmount;
} }
//조정된 금액 설정
final public function setAmount(ServiceEntity $entity): ServiceEntity final public function setAmount(ServiceEntity $entity): ServiceEntity
{ {
$caculatedAmount = $this->getCaculatedAmount($entity); $caculatedAmount = $this->getCaculatedAmount($entity);
//계산된 금액이 현재 금액과 다른 경우
if ($entity->getAmount() !== $caculatedAmount) { if ($entity->getAmount() !== $caculatedAmount) {
$paymentEntity = $entity->getPaymentEntity(); $paymentEntity = $entity->getPaymentEntity();
if (!$paymentEntity instanceof PaymentEntity) { if (!$paymentEntity instanceof PaymentEntity) {
throw new \Exception(__METHOD__ . "에서 오류발생: 결제정보가 정의되지 않았습니다."); throw new \Exception(__METHOD__ . "에서 오류발생: 결제정보가 정의되지 않았습니다.");
} }
//금액설정 //금액설정
$entity = parent::modify($entity, ['amount' => $caculatedAmount]); parent::modify($entity, ['amount' => $caculatedAmount]);
$this->getPaymentService()->setAmount($entity->getPaymentEntity(), $caculatedAmount);
} }
return $entity; return $entity;
} }
//서비스 메인서버 설정 //대체서버추가(가격변동은 없음)
final public function setMainServer(ServiceEntity $entity, ServerEntity $serverEntity): ServiceEntity final public function addAlternativeServer(ServiceEntity $entity, array $formDatas): ServiceEntity
{ {
$this->getServerService()->setService($entity, $formDatas);
return $entity;
}
//대체 서버를 메인서버로 설정
final public function changeAlternativeServer(ServiceEntity $entity, array $formDatas): ServiceEntity
{
$serverEntity = $this->getServerService()->getEntity($formDatas['serverinfo_uid']);
if (!$serverEntity instanceof ServerEntity) {
throw new \Exception("{$formDatas['serverinfo_uid']}에 대한 서버정보를 찾을수 없습니다.");
}
//수정전 정보
$oldEntity = $entity;
//메인서버 변경
$entity = parent::modify($entity, ['serverinfo_uid' => $serverEntity->getPK()]); $entity = parent::modify($entity, ['serverinfo_uid' => $serverEntity->getPK()]);
return $this->setAmount($entity); //전체 서비스금액 설정
$entity = $this->setAmount($entity);
//결제정보수정
$entity = $this->getPaymentService()->changeService($oldEntity, $entity, $formDatas);
//결제정보 PK설정
return parent::modify($entity, ['payment_uid' => $entity->getPaymentEntity()->getPK()]);
}
//뎇[서버해지(대체서버는 해지는 가격변동은 없음)
final public function terminateAlternativeServer(ServiceEntity $entity, array $formDatas): ServiceEntity
{
$this->getServerService()->unsetService($entity, $formDatas);
return $entity;
} }
//기본 기능부분 //기본 기능부분
//FieldForm관련용 //FieldForm관련용
@ -216,16 +244,6 @@ class ServiceService extends CustomerService
} }
return $options; return $options;
} }
//Action 기능
private function action_process(ServiceEntity $entity, string $action): ServiceEntity
{
//서버정보수정
$entity = $this->getServerService()->$action($entity);
//결제정보수정 및 결제정보 PK값정의
$entity = $this->getPaymentService()->$action($entity);
$entity = parent::modify($entity, ['payment_uid' => $entity->getPaymentEntity()->getPK()]);
return $entity;
}
//생성 //생성
public function create(array $formDatas): ServiceEntity public function create(array $formDatas): ServiceEntity
{ {
@ -234,26 +252,101 @@ class ServiceService extends CustomerService
} }
//신규등록(월청구액 전달값 그대로 사용) //신규등록(월청구액 전달값 그대로 사용)
$entity = parent::create($formDatas); $entity = parent::create($formDatas);
//후처리작업 //서버등록
return $this->action_process($entity, __FUNCTION__ . 'Service'); $entity = $this->getServerService()->setService($entity, $formDatas);
//전체 서비스금액 설정
$entity = $this->setAmount($entity);
//결제정보수정
$entity = $this->getPaymentService()->setService($entity, $formDatas);
//결제정보 PK설정
return parent::modify($entity, ['payment_uid' => $entity->getPaymentEntity()->getPK()]);
} }
//수정 //수정
public function modify(mixed $entity, array $formDatas): ServiceEntity public function modify(mixed $entity, array $formDatas): ServiceEntity
{ {
//기존 서버정보 해지 //수정전 정보
if (array_key_exists('serverinfo_uid', $formDatas) && $entity->getServerEntity()->getPK() != $formDatas['serverinfo_uid']) { $oldEntity = $entity;
$entity->getServerService()->deleteService($entity); //서비스정보 수정
$entity = parent::modify($entity, $formDatas);
//기존 서버정보와 다르다면 서버변경
if ($entity->getServerEntity()->getPK() != $formDatas['serverinfo_uid']) {
$entity = $this->getServerService()->changeService($oldEntity, $entity, $formDatas);
} }
//수정작업(월청구액계산 확인 후 서비스정보에 수정) //전체 서비스금액 설정
$entity = parent::modify($entity, ['amount' => $this->getCaculatedAmount($entity)]); $entity = $this->setAmount($entity);
//후처리작업 //결제정보수정
return $this->action_process($entity, __FUNCTION__ . 'Service'); $entity = $this->getPaymentService()->changeService($oldEntity, $entity, $formDatas);
//결제정보 PK설정
return parent::modify($entity, ['payment_uid' => $entity->getPaymentEntity()->getPK()]);
} }
//삭제 //삭제
public function delete(mixed $entity): ServiceEntity public function delete(mixed $entity): ServiceEntity
{ {
//선처리작업 //서버해지
$this->action_process($entity, __FUNCTION__ . 'Service'); $this->getServerService()->unsetService($entity, ['serverinfo_uid' => $entity->getServerEntity()->getPK()]);
return parent::delete($entity); return parent::delete($entity);
} }
//서버관련 작업
public function setServer(ServerEntity $serverEntity, array $serverDatas): ServerEntity
{
//아무것도 하지 않음
return $serverEntity;
}
public function changeServer(ServerEntity $oldServerEntity, ServerEntity $serverEntity, array $serverDatas): ServerEntity
{
//서비스정보가 NULL이 아니고 형식이 대체(alternative)가 아닌경우만 적용
if ($serverEntity->getServiceInfoUID() !== null && $serverEntity->getType() !== "alternative") {
//Service Entity 가져오기
$entity = $this->getEntity($serverEntity->getServiceInfoUID());
if (!$entity instanceof ServiceEntity) {
throw new \Exception("[{$serverEntity->getServiceInfoUID()}]에 대한 서비스정보를 찾을수 없습니다.");
}
//서비스금액변경 사항이 있는지 확인후 처리
$entity = $this->setAmount($entity);
//결제정보수정
$entity = $this->getPaymentService()->setService($entity, []);
//결제정보 PK설정
parent::modify($entity, ['payment_uid' => $entity->getPaymentEntity()->getPK()]);
}
return $serverEntity;
}
public function unsetServer(ServerEntity $serverEntity, array $serverDatas): ServerEntity
{
//서비스중인지 확인
if ($serverEntity->getServiceInfoUID() !== null || $serverEntity->getStatus() === STATUS['OCCUPIED']) {
throw new \Exception("서비스중이 서버는 삭제하실수 없습니다.");
}
//아무것도 하지 않음
return $serverEntity;
}
//서버파트관련 작업
public function setServerPart(ServerPartEntity $serverPartEntity, array $serverPartDatas): ServerPartEntity
{
if ($serverPartEntity->getBilling() !== PAYMENT['BILLING']['MONTH']) {
throw new \Exception("[{$serverPartEntity->getBilling()}],청구방식이 매월이 아닙니다.");
}
//Service Entity 가져오기
$entity = $this->getEntity($serverPartEntity->getServiceInfoUID());
if (!$entity instanceof ServiceEntity) {
throw new \Exception("[{$serverPartEntity->getServiceInfoUID()}]에 대한 서비스정보를 찾을수 없습니다.");
}
//서비스금액변경 사항이 있는지 확인후 처리
$entity = $this->setAmount($entity);
//결제정보수정
$entity = $this->getPaymentService()->setService($entity, []);
//결제정보 PK설정
return $serverPartEntity;
}
//setServerPart와 같은기능
public function changeServerPart(ServerPartEntity $oldServerPartEntity, ServerPartEntity $serverPartEntity, array $serverPartDatas): ServerPartEntity
{
return $this->setServerPart($serverPartEntity, $serverPartDatas);
}
//setServerPart와 같은기능
public function unsetServerPart(ServerPartEntity $serverPartEntity, array $serverPartDatas): ServerPartEntity
{
return $this->setServerPart($serverPartEntity, $serverPartDatas);
}
} }

View File

@ -1,35 +0,0 @@
<?php
namespace App\Services\Equipment\Server;
use App\Entities\Equipment\ServerEntity;
use App\Services\Equipment\ServerPartService as ParentService;
use App\Interfaces\Equipment\ServerInterface;
class ServerPartService extends ParentService implements ServerInterface
{
public function __construct()
{
parent::__construct();
}
public function createServer(ServerEntity $serverEntity): ServerEntity
{
//아무것도 하지 않음
return $serverEntity;
}
//create와 같은 작업임
public function modifyServer(ServerEntity $serverEntity): ServerEntity
{
//아무것도 하지 않음
return $serverEntity;
}
public function deleteServer(ServerEntity $serverEntity): ServerEntity
{
//기존 ServerPart정보 삭제
foreach ($this->getEntities(['serverinfo_uid' => $serverEntity->getPK()]) as $serverPartEntity) {
$this->getModel()->delete($serverPartEntity);
}
return $serverEntity;
}
}

View File

@ -1,46 +0,0 @@
<?php
namespace App\Services\Equipment\Server;
use App\Entities\Customer\ServiceEntity;
use App\Entities\Equipment\ServerEntity;
use App\Interfaces\Equipment\ServerInterface;
use App\Services\Customer\ServiceService as ParentService;
//서버가격이 변한경우 서비스의 가격을 변경하기 위함.
class ServiceService extends ParentService implements ServerInterface
{
public function __construct()
{
parent::__construct();
}
public function createServer(ServerEntity $serverEntity): ServerEntity
{
//아무것도 하지 않음
return $serverEntity;
}
public function modifyServer(ServerEntity $serverEntity): ServerEntity
{
//서비스정보가 NULL이 아니고 형식이 대체(alternative)가 아닌경우만 적용
if ($serverEntity->getServiceInfoUID() !== null && $serverEntity->getType() !== "alternative") {
//Service Entity 가져오기
$entity = $this->getEntity($serverEntity->getServiceInfoUID());
if (!$entity instanceof ServiceEntity) {
throw new \Exception("[{$serverEntity->getServiceInfoUID()}]에 대한 서비스정보를 찾을수 없습니다.");
}
//서비스금액변경 사항이 있는지 확인후 처리
$entity = $this->setAmount($entity);
}
return $serverEntity;
}
public function deleteServer(ServerEntity $serverEntity): ServerEntity
{
//서비스중인지 확인
if ($serverEntity->getServiceInfoUID() !== null || $serverEntity->getStatus() === STATUS['OCCUPIED']) {
throw new \Exception("서비스중이 서버는 삭제하실수 없습니다.");
}
//아무것도 하지 않음
return $serverEntity;
}
}

View File

@ -1,53 +0,0 @@
<?php
namespace App\Services\Equipment\ServerPart;
use App\Entities\Equipment\ServerPartEntity;
use App\Interfaces\Equipment\ServerPartInterface;
use App\Services\Part\CPUService as ParentService;
use App\Entities\Part\CPUEntity;
class CPUService extends ParentService implements ServerPartInterface
{
public function __construct()
{
parent::__construct();
}
//서버연결정보용 등록
private function action_process(ServerPartEntity $serverPartEntity, string $action): CPUEntity
{
//부품정보가져오기
$entity = $this->getEntity($serverPartEntity->getPartUID());
if (!$entity instanceof CPUEntity) {
throw new \Exception("{$serverPartEntity->getPartUID()}에 해당하는 부품정보를 찾을수없습니다.");
}
//부품정보에 서버정보 설정 및 서비스,고객정보 정의
$formDatas = [];
if ($action === "return") { //해지된 부품 재고 반납 처리
$formDatas['stock'] = $entity->getStock() + $serverPartEntity->getCnt();
}
if ($action === "use") { //사용된 부품 재고 사용처리
if ($entity->getStock() < $serverPartEntity->getCnt()) {
throw new \Exception("현재 재고수[{$entity->getStock()}]보다 지정하신 갯수({$serverPartEntity->getCnt()})가 더 많습니다.");
}
$formDatas['stock'] = $entity->getStock() - $serverPartEntity->getCnt();
}
return $this->getModel()->modify($entity, $formDatas);
}
public function createServerPart(ServerPartEntity $serverPartEntity): ServerPartEntity
{
$entity = $this->action_process($serverPartEntity, "use");
return $serverPartEntity->setPartEntity($entity);
}
public function modifyServerPart(ServerPartEntity $serverPartEntity): ServerPartEntity
{
return $this->createServerPart($serverPartEntity,);
}
public function deleteServerPart(ServerPartEntity $serverPartEntity): ServerPartEntity
{
$entity = $this->action_process($serverPartEntity, "return");
return $serverPartEntity->setPartEntity($entity);
}
}

View File

@ -1,55 +0,0 @@
<?php
namespace App\Services\Equipment\ServerPart;
use App\Entities\Equipment\ServerPartEntity;
use App\Interfaces\Equipment\ServerPartInterface;
use App\Entities\Part\CSEntity;
use App\Services\Part\CSService as ParentService;
class CSService extends ParentService implements ServerPartInterface
{
public function __construct()
{
parent::__construct();
}
//서버연결정보용 등록
private function action_process(ServerPartEntity $serverPartEntity, array $formDatas = []): CSEntity
{
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 $this->getModel()->modify($entity, $formDatas);
}
public function createServerPart(ServerPartEntity $serverPartEntity): ServerPartEntity
{
$formDatas = [];
$formDatas['clientinfo_uid'] = $serverPartEntity->getClientInfoUID();
$formDatas['serviceinfo_uid'] = $serverPartEntity->getServiceInfoUID();
$formDatas['serverinfo_uid'] = $serverPartEntity->getServerInfoUID();
$formDatas['status'] = STATUS['OCCUPIED'];
$entity = $this->action_process($serverPartEntity, $formDatas);
return $serverPartEntity->setPartEntity($entity);
}
public function modifyServerPart(ServerPartEntity $serverPartEntity): ServerPartEntity
{
return $this->createServerPart($serverPartEntity);
}
public function deleteServerPart(ServerPartEntity $serverPartEntity): ServerPartEntity
{
$formDatas = [];
$formDatas['clientinfo_uid'] = null;
$formDatas['serviceinfo_uid'] = null;
$formDatas['serverinfo_uid'] = null;
$formDatas['status'] = STATUS['AVAILABLE'];
$entity = $this->action_process($serverPartEntity, $formDatas);
return $serverPartEntity->setPartEntity($entity);
}
}

View File

@ -1,53 +0,0 @@
<?php
namespace App\Services\Equipment\ServerPart;
use App\Entities\Equipment\ServerPartEntity;
use App\Interfaces\Equipment\ServerPartInterface;
use App\Services\Part\DISKService as ParentService;
use App\Entities\Part\DISKEntity;
class DISKService extends ParentService implements ServerPartInterface
{
public function __construct()
{
parent::__construct();
}
//서버연결정보용 등록
private function action_process(ServerPartEntity $serverPartEntity, string $action): DISKEntity
{
//부품정보가져오기
$entity = $this->getEntity($serverPartEntity->getPartUID());
if (!$entity instanceof DISKEntity) {
throw new \Exception("{$serverPartEntity->getPartUID()}에 해당하는 부품정보를 찾을수없습니다.");
}
//부품정보에 서버정보 설정 및 서비스,고객정보 정의
$formDatas = [];
if ($action === "return") { //해지된 부품 재고 반납 처리
$formDatas['stock'] = $entity->getStock() + $serverPartEntity->getCnt();
}
if ($action === "use") { //사용된 부품 재고 사용처리
if ($entity->getStock() < $serverPartEntity->getCnt()) {
throw new \Exception("현재 재고수[{$entity->getStock()}]보다 지정하신 갯수({$serverPartEntity->getCnt()})가 더 많습니다.");
}
$formDatas['stock'] = $entity->getStock() - $serverPartEntity->getCnt();
}
return $this->getModel()->modify($entity, $formDatas);
}
public function createServerPart(ServerPartEntity $serverPartEntity): ServerPartEntity
{
$entity = $this->action_process($serverPartEntity, "use");
return $serverPartEntity->setPartEntity($entity);
}
public function modifyServerPart(ServerPartEntity $serverPartEntity): ServerPartEntity
{
return $this->createServerPart($serverPartEntity,);
}
public function deleteServerPart(ServerPartEntity $serverPartEntity): ServerPartEntity
{
$entity = $this->action_process($serverPartEntity, "return");
return $serverPartEntity->setPartEntity($entity);
}
}

View File

@ -1,55 +0,0 @@
<?php
namespace App\Services\Equipment\ServerPart;
use App\Entities\Equipment\ServerPartEntity;
use App\Interfaces\Equipment\ServerPartInterface;
use App\Entities\Part\IPEntity;
use App\Services\Part\IPService as ParentService;
class IPService extends ParentService implements ServerPartInterface
{
public function __construct()
{
parent::__construct();
}
//서버연결정보용 등록
private function action_process(ServerPartEntity $serverPartEntity, array $formDatas = []): IPEntity
{
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 $this->getModel()->modify($entity, $formDatas);
}
public function createServerPart(ServerPartEntity $serverPartEntity): ServerPartEntity
{
$formDatas = [];
$formDatas['clientinfo_uid'] = $serverPartEntity->getClientInfoUID();
$formDatas['serviceinfo_uid'] = $serverPartEntity->getServiceInfoUID();
$formDatas['serverinfo_uid'] = $serverPartEntity->getServerInfoUID();
$formDatas['status'] = STATUS['OCCUPIED'];
$entity = $this->action_process($serverPartEntity, $formDatas);
return $serverPartEntity->setPartEntity($entity);
}
public function modifyServerPart(ServerPartEntity $serverPartEntity): ServerPartEntity
{
return $this->createServerPart($serverPartEntity);
}
public function deleteServerPart(ServerPartEntity $serverPartEntity): ServerPartEntity
{
$formDatas = [];
$formDatas['clientinfo_uid'] = null;
$formDatas['serviceinfo_uid'] = null;
$formDatas['serverinfo_uid'] = null;
$formDatas['status'] = STATUS['AVAILABLE'];
$entity = $this->action_process($serverPartEntity, $formDatas);
return $serverPartEntity->setPartEntity($entity);
}
}

View File

@ -1,53 +0,0 @@
<?php
namespace App\Services\Equipment\ServerPart;
use App\Entities\Equipment\ServerPartEntity;
use App\Interfaces\Equipment\ServerPartInterface;
use App\Services\Part\OSService as ParentService;
use App\Entities\Part\OSEntity;
class OSService extends ParentService implements ServerPartInterface
{
public function __construct()
{
parent::__construct();
}
//서버연결정보용 등록
private function action_process(ServerPartEntity $serverPartEntity, string $action): OSEntity
{
//부품정보가져오기
$entity = $this->getEntity($serverPartEntity->getPartUID());
if (!$entity instanceof OSEntity) {
throw new \Exception("{$serverPartEntity->getPartUID()}에 해당하는 부품정보를 찾을수없습니다.");
}
//부품정보에 서버정보 설정 및 서비스,고객정보 정의
$formDatas = [];
if ($action === "return") { //해지된 부품 재고 반납 처리
$formDatas['stock'] = $entity->getStock() + $serverPartEntity->getCnt();
}
if ($action === "use") { //사용된 부품 재고 사용처리
if ($entity->getStock() < $serverPartEntity->getCnt()) {
throw new \Exception("현재 재고수[{$entity->getStock()}]보다 지정하신 갯수({$serverPartEntity->getCnt()})가 더 많습니다.");
}
$formDatas['stock'] = $entity->getStock() - $serverPartEntity->getCnt();
}
return $this->getModel()->modify($entity, $formDatas);
}
public function createServerPart(ServerPartEntity $serverPartEntity): ServerPartEntity
{
$entity = $this->action_process($serverPartEntity, "use");
return $serverPartEntity->setPartEntity($entity);
}
public function modifyServerPart(ServerPartEntity $serverPartEntity): ServerPartEntity
{
return $this->createServerPart($serverPartEntity,);
}
public function deleteServerPart(ServerPartEntity $serverPartEntity): ServerPartEntity
{
$entity = $this->action_process($serverPartEntity, "return");
return $serverPartEntity->setPartEntity($entity);
}
}

View File

@ -1,71 +0,0 @@
<?php
namespace App\Services\Equipment\ServerPart;
use App\Entities\Equipment\ServerPartEntity;
use App\Entities\PaymentEntity;
use App\Interfaces\Equipment\ServerPartInterface;
use App\Services\PaymentService as ParentService;
////서버연결정보 추가나 변경,삭제시 일회성일 경우 실행됨
class PaymentService extends ParentService implements ServerPartInterface
{
public function __construct()
{
parent::__construct();
}
private function action_process(ServerPartEntity $serverPartEntity, array $formDatas = []): array
{
if ($serverPartEntity->getServiceInfoUID() === null) {
throw new \Exception(__METHOD__ . "에서 오류발생: 서비스정보가 정의된 후에만 가능합니다.");
}
//일회인이 아닌경우
if ($serverPartEntity->getBilling() !== PAYMENT['BILLING']['ONETIME']) {
throw new \Exception(__METHOD__ . "에서 오류발생: :" . lang("{$this->getClassName()}.BILLING." . PAYMENT['BILLING'][$serverPartEntity->getBilling()]) . "지급 상품은 처리가 불가, 일회성만 가능합니다.");
}
$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();
return $formDatas;
}
public function createServerPart(ServerPartEntity $serverPartEntity): ServerPartEntity
{
//필수정보처리 후 FormData 가져오기
$formDatas = $this->action_process($serverPartEntity);
//당일결체일로 설정
$formDatas['billing_at'] = date("Y-m-d");
//결제정보등록
$entity = $this->getModel()->create($formDatas);
//서버연결정보 Entity에 결제정보 설정
return $serverPartEntity->setPaymentEntity($entity);
}
public function modifyServerPart(ServerPartEntity $serverPartEntity): ServerPartEntity
{
//결제정보 가져오기
$entity = $serverPartEntity->getPaymentEntity();
if (!$entity instanceof PaymentEntity) {
throw new \Exception(__METHOD__ . "에서 오류발생: 서버파트연결정보{$serverPartEntity->getPK()}]에 해당하는 결제정보를 찾을수 없습니다.");
}
//미납상태확인
if ($entity->getStatus() !== STATUS['UNPAID']) {
throw new \Exception(__METHOD__ . "에서 오류발생: 완료된 결제는 수정이 불가합니다.");
}
//필수정보처리 후 FormData 가져오기
$formDatas = $this->action_process($serverPartEntity);
//결제정보수정
$entity = $this->getModel()->modify($entity, $formDatas);
//서버연결정보 Entity에 결제정보 설정
return $serverPartEntity->setPaymentEntity($entity);
}
public function deleteServerPart(ServerPartEntity $serverPartEntity): ServerPartEntity
{
//삭제시에는 아무것도 하지 않는다.
return $serverPartEntity;
}
}

View File

@ -1,53 +0,0 @@
<?php
namespace App\Services\Equipment\ServerPart;
use App\Entities\Equipment\ServerPartEntity;
use App\Interfaces\Equipment\ServerPartInterface;
use App\Services\Part\RAMService as ParentService;
use App\Entities\Part\RAMEntity;
class RAMService extends ParentService implements ServerPartInterface
{
public function __construct()
{
parent::__construct();
}
//서버연결정보용 등록
private function action_process(ServerPartEntity $serverPartEntity, string $action): RAMEntity
{
//부품정보가져오기
$entity = $this->getEntity($serverPartEntity->getPartUID());
if (!$entity instanceof RAMEntity) {
throw new \Exception("{$serverPartEntity->getPartUID()}에 해당하는 부품정보를 찾을수없습니다.");
}
//부품정보에 서버정보 설정 및 서비스,고객정보 정의
$formDatas = [];
if ($action === "return") { //해지된 부품 재고 반납 처리
$formDatas['stock'] = $entity->getStock() + $serverPartEntity->getCnt();
}
if ($action === "use") { //사용된 부품 재고 사용처리
if ($entity->getStock() < $serverPartEntity->getCnt()) {
throw new \Exception("현재 재고수[{$entity->getStock()}]보다 지정하신 갯수({$serverPartEntity->getCnt()})가 더 많습니다.");
}
$formDatas['stock'] = $entity->getStock() - $serverPartEntity->getCnt();
}
return $this->getModel()->modify($entity, $formDatas);
}
public function createServerPart(ServerPartEntity $serverPartEntity): ServerPartEntity
{
$entity = $this->action_process($serverPartEntity, "use");
return $serverPartEntity->setPartEntity($entity);
}
public function modifyServerPart(ServerPartEntity $serverPartEntity): ServerPartEntity
{
return $this->createServerPart($serverPartEntity,);
}
public function deleteServerPart(ServerPartEntity $serverPartEntity): ServerPartEntity
{
$entity = $this->action_process($serverPartEntity, "return");
return $serverPartEntity->setPartEntity($entity);
}
}

View File

@ -1,53 +0,0 @@
<?php
namespace App\Services\Equipment\ServerPart;
use App\Entities\Equipment\ServerPartEntity;
use App\Interfaces\Equipment\ServerPartInterface;
use App\Services\Part\SOFTWAREService as ParentService;
use App\Entities\Part\SOFTWAREEntity;
class SOFTWAREService extends ParentService implements ServerPartInterface
{
public function __construct()
{
parent::__construct();
}
//서버연결정보용 등록
private function action_process(ServerPartEntity $serverPartEntity, string $action): SOFTWAREEntity
{
//부품정보가져오기
$entity = $this->getEntity($serverPartEntity->getPartUID());
if (!$entity instanceof SOFTWAREEntity) {
throw new \Exception("{$serverPartEntity->getPartUID()}에 해당하는 부품정보를 찾을수없습니다.");
}
//부품정보에 서버정보 설정 및 서비스,고객정보 정의
$formDatas = [];
if ($action === "return") { //해지된 부품 재고 반납 처리
$formDatas['stock'] = $entity->getStock() + $serverPartEntity->getCnt();
}
if ($action === "use") { //사용된 부품 재고 사용처리
if ($entity->getStock() < $serverPartEntity->getCnt()) {
throw new \Exception("현재 재고수[{$entity->getStock()}]보다 지정하신 갯수({$serverPartEntity->getCnt()})가 더 많습니다.");
}
$formDatas['stock'] = $entity->getStock() - $serverPartEntity->getCnt();
}
return $this->getModel()->modify($entity, $formDatas);
}
public function createServerPart(ServerPartEntity $serverPartEntity): ServerPartEntity
{
$entity = $this->action_process($serverPartEntity, "use");
return $serverPartEntity->setPartEntity($entity);
}
public function modifyServerPart(ServerPartEntity $serverPartEntity): ServerPartEntity
{
return $this->createServerPart($serverPartEntity,);
}
public function deleteServerPart(ServerPartEntity $serverPartEntity): ServerPartEntity
{
$entity = $this->action_process($serverPartEntity, "return");
return $serverPartEntity->setPartEntity($entity);
}
}

View File

@ -1,55 +0,0 @@
<?php
namespace App\Services\Equipment\ServerPart;
use App\Entities\Equipment\ServerPartEntity;
use App\Interfaces\Equipment\ServerPartInterface;
use App\Entities\Part\SWITCHEntity;
use App\Services\Part\SWITCHService as ParentService;
class SWITCHService extends ParentService implements ServerPartInterface
{
public function __construct()
{
parent::__construct();
}
//서버연결정보용 등록
private function action_process(ServerPartEntity $serverPartEntity, array $formDatas = []): SWITCHEntity
{
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 $this->getModel()->modify($entity, $formDatas);
}
public function createServerPart(ServerPartEntity $serverPartEntity): ServerPartEntity
{
$formDatas = [];
$formDatas['clientinfo_uid'] = $serverPartEntity->getClientInfoUID();
$formDatas['serviceinfo_uid'] = $serverPartEntity->getServiceInfoUID();
$formDatas['serverinfo_uid'] = $serverPartEntity->getServerInfoUID();
$formDatas['status'] = STATUS['OCCUPIED'];
$entity = $this->action_process($serverPartEntity, $formDatas);
return $serverPartEntity->setPartEntity($entity);
}
public function modifyServerPart(ServerPartEntity $serverPartEntity): ServerPartEntity
{
return $this->createServerPart($serverPartEntity);
}
public function deleteServerPart(ServerPartEntity $serverPartEntity): ServerPartEntity
{
$formDatas = [];
$formDatas['clientinfo_uid'] = null;
$formDatas['serviceinfo_uid'] = null;
$formDatas['serverinfo_uid'] = null;
$formDatas['status'] = STATUS['AVAILABLE'];
$entity = $this->action_process($serverPartEntity, $formDatas);
return $serverPartEntity->setPartEntity($entity);
}
}

View File

@ -1,42 +0,0 @@
<?php
namespace App\Services\Equipment\ServerPart;
use App\Entities\Customer\ServiceEntity;
use App\Entities\Equipment\ServerPartEntity;
use App\Interfaces\Equipment\ServerPartInterface;
use App\Services\Customer\ServiceService as ParentService;
//서버연결정보 추가나 변경,삭제시 가격이 변한경우 서비스의 가격을 변경하기 위함.
class ServiceService extends ParentService implements ServerPartInterface
{
public function __construct()
{
parent::__construct();
}
private function action_process(ServerPartEntity $serverPartEntity): ServiceEntity
{
//Service Entity 가져오기
$entity = $this->getEntity($serverPartEntity->getServiceInfoUID());
if (!$entity instanceof ServiceEntity) {
throw new \Exception("[{$serverPartEntity->getServiceInfoUID()}]에 대한 서비스정보를 찾을수 없습니다.");
}
//서비스금액변경 사항이 있는지 확인후 처리
return $this->setAmount($entity);
}
public function createServerPart(ServerPartEntity $serverPartEntity): ServerPartEntity
{
$this->action_process($serverPartEntity);
return $serverPartEntity;
}
//create와 같은 작업임
public function modifyServerPart(ServerPartEntity $serverPartEntity): ServerPartEntity
{
return $this->createServerPart($serverPartEntity);
}
//create와 같은 작업임
public function deleteServerPart(ServerPartEntity $serverPartEntity): ServerPartEntity
{
return $this->createServerPart($serverPartEntity);
}
}

View File

@ -6,17 +6,35 @@ use App\Entities\Equipment\ServerEntity;
use App\Entities\Equipment\ServerPartEntity; use App\Entities\Equipment\ServerPartEntity;
use App\Entities\PaymentEntity; use App\Entities\PaymentEntity;
use App\Helpers\Equipment\ServerPartHelper; use App\Helpers\Equipment\ServerPartHelper;
use App\Interfaces\Equipment\ServerInterface;
use App\Models\Equipment\ServerPartModel; use App\Models\Equipment\ServerPartModel;
use App\Services\Equipment\ServerService; use App\Services\Customer\ServiceService;
use App\Services\Equipment\EquipmentService; use App\Services\Equipment\EquipmentService;
use App\Services\Equipment\ServerPart\ServiceService; use App\Services\Equipment\ServerService;
use App\Services\Equipment\ServerPart\PaymentService; use App\Services\Part\CPUService;
use App\Services\Part\CSService;
use App\Services\Part\DISKService;
use App\Services\Part\IPService;
use App\Services\Part\OSService;
use App\Services\Part\RAMService;
use App\Services\Part\SOFTWAREService;
use App\Services\Part\SWITCHService;
use App\Services\PaymentService;
class ServerPartService extends EquipmentService class ServerPartService extends EquipmentService implements ServerInterface
{ {
private ?ServiceService $_serviceService = null; private ?ServiceService $_serviceService = null;
private ?ServerService $_serverService = null; private ?ServerService $_serverService = null;
private ?PaymentService $_paymentService = null; private ?PaymentService $_paymentService = null;
private ?CPUService $_cpuService = null;
private ?RAMService $_ramService = null;
private ?DISKService $_diskService = null;
private ?OSService $_osService = null;
private ?SOFTWAREService $_softwareService = null;
private ?SWITCHService $_switchService = null;
private ?IPService $_ipService = null;
private ?CSService $_csService = null;
private $_partServices = []; private $_partServices = [];
public function __construct() public function __construct()
{ {
@ -92,17 +110,98 @@ class ServerPartService extends EquipmentService
} }
return $this->_paymentService; return $this->_paymentService;
} }
final public function getPartService(string $type): object final public function getCPUService(): CPUService
{ {
if (!array_key_exists($type, $this->_partServices)) { if (!$this->_cpuService) {
$class = "App\\Services\\Equipment\\ServerPart\\{$type}Service"; $this->_cpuService = new CPUService();
if (!class_exists($class)) {
throw new \Exception("{$class} 클래스가 존재하지 않습니다.");
}
$this->_partServices[$type] = new $class();
} }
return $this->_partServices[$type]; return $this->_cpuService;
} }
final public function getRAMService(): RAMService
{
if (!$this->_ramService) {
$this->_ramService = new RAMService();
}
return $this->_ramService;
}
final public function getDISKService(): DISKService
{
if (!$this->_diskService) {
$this->_diskService = new DISKService();
}
return $this->_diskService;
}
final public function getOSService(): OSService
{
if (!$this->_osService) {
$this->_osService = new OSService();
}
return $this->_osService;
}
final public function getSOFTWAREService(): SOFTWAREService
{
if (!$this->_softwareService) {
$this->_softwareService = new SOFTWAREService();
}
return $this->_softwareService;
}
final public function getCSService(): CSService
{
if (!$this->_csService) {
$this->_csService = new CSService();
}
return $this->_csService;
}
final public function getIPService(): IPService
{
if (!$this->_ipService) {
$this->_ipService = new IPService();
}
return $this->_ipService;
}
final public function getSWITCHService(): SWITCHService
{
if (!$this->_switchService) {
$this->_switchService = new SWITCHService();
}
return $this->_switchService;
}
final public function getPartService(string $type)
{
switch ($type) {
case 'CPU':
$service = $this->getCPUService();
break;
case 'RAM':
$service = $this->getRAMService();
break;
case 'DISK':
$service = $this->getDISKService();
break;
case 'OS':
$service = $this->getOSService();
break;
case 'SOFTWARE':
$service = $this->getSOFTWAREService();
break;
case 'IP':
$service = $this->getIPService();
break;
case 'CS':
$service = $this->getCSService();
break;
case 'SWITCH':
$service = $this->getSWITCHService();
break;
default:
throw new \Exception(__METHOD__ . "에서 오류발생: {$type} 지정되지 않은 형식입니다.");
// break;
}
return $service;
}
//partEntity 정보 추가 //partEntity 정보 추가
protected function getEntity_process(mixed $entity): ServerPartEntity protected function getEntity_process(mixed $entity): ServerPartEntity
{ {
@ -145,30 +244,6 @@ class ServerPartService extends EquipmentService
} }
return $options; return $options;
} }
//파트별정보 설정
private function action_process(ServerPartEntity $entity, string $action): ServerPartEntity
{
//Type에 따른 부품서비스 정의
$this->getPartService($entity->getType())->$action($entity);
//서비스 및 결제정보 처리
switch ($entity->getBilling()) {
case PAYMENT['BILLING']['MONTH']: //월별과금일때만 처리
$entity = $this->getServiceService()->$action($entity);
break;
case PAYMENT['BILLING']['ONETIME']: //일회성일때만 처리
$entity = $this->getPaymentService()->$action($entity);
//결제정보PK정의
$entity = parent::modify($entity, ['payment_uid' => $entity->getPaymentEntity()->getPK()]);
break;
case PAYMENT['BILLING']['BASE']: //기본처리
//아무처리 않함
break;
default:
throw new \Exception(__METHOD__ . "에서 오류발생:{$entity->getBilling()}은 지정되지 않은 결제방식입니다.");
// break;
}
return $entity;
}
//부품연결정보생성 //부품연결정보생성
public function create(array $formDatas): ServerPartEntity public function create(array $formDatas): ServerPartEntity
{ {
@ -190,7 +265,26 @@ class ServerPartService extends EquipmentService
$formDatas["serverinfo_uid"] = $serverEntity->getPK(); $formDatas["serverinfo_uid"] = $serverEntity->getPK();
$entity = parent::create($formDatas); $entity = parent::create($formDatas);
//후처리작업 //후처리작업
return $this->action_process($entity, __FUNCTION__ . 'ServerPart'); //Type에 따른 부품서비스 정의
$this->getPartService($entity->getType())->setServerPart($entity, $formDatas);
//서비스 및 결제정보 처리
switch ($entity->getBilling()) {
case PAYMENT['BILLING']['MONTH']: //월별과금일때만 처리
$entity = $this->getServiceService()->setServerPart($entity, $formDatas);
break;
case PAYMENT['BILLING']['ONETIME']: //일회성일때만 처리
$entity = $this->getPaymentService()->setServerPart($entity, $formDatas);
//결제정보PK정의
$entity = parent::modify($entity, ['payment_uid' => $entity->getPaymentEntity()->getPK()]);
break;
case PAYMENT['BILLING']['BASE']: //기본처리
//아무처리 않함
break;
default:
throw new \Exception(__METHOD__ . "에서 오류발생:{$entity->getBilling()}은 지정되지 않은 결제방식입니다.");
// break;
}
return $entity;
} }
//수정 //수정
public function modify(mixed $entity, array $formDatas): ServerPartEntity public function modify(mixed $entity, array $formDatas): ServerPartEntity
@ -203,24 +297,78 @@ class ServerPartService extends EquipmentService
if (!$serverEntity instanceof ServerEntity) { if (!$serverEntity instanceof ServerEntity) {
throw new \Exception("서버 정보가 지정되지 않았습니다."); throw new \Exception("서버 정보가 지정되지 않았습니다.");
} }
//수정 전 부품연결정보관련 정보처리 //수정전 정보
if ($entity->getCnt() != $formDatas['cnt'] || $entity->getPartUID() !== $formDatas['part_uid']) { $oldEntity = $entity;
$entity = $this->action_process($entity, 'deleteServerPart'); //서버연결정보 수정
}
//수정작업
$formDatas["clientinfo_uid"] = $serverEntity->getClientInfoUID(); $formDatas["clientinfo_uid"] = $serverEntity->getClientInfoUID();
$formDatas["serviceinfo_uid"] = $serverEntity->getServiceInfoUID(); $formDatas["serviceinfo_uid"] = $serverEntity->getServiceInfoUID();
$formDatas["serverinfo_uid"] = $serverEntity->getPK(); $formDatas["serverinfo_uid"] = $serverEntity->getPK();
$entity = parent::modify($entity, $formDatas); $entity = parent::modify($entity, $formDatas);
//후처리작업 //후처리작업
$entity = $this->action_process($entity, __FUNCTION__ . 'ServerPart'); //Type에 따른 부품서비스 정의
$this->getPartService($entity->getType())->changeServerPart($oldEntity, $entity, $formDatas);
//서비스 및 결제정보 처리
switch ($entity->getBilling()) {
case PAYMENT['BILLING']['MONTH']: //월별과금일때만 처리
$entity = $this->getServiceService()->changeServerPart($oldEntity, $entity, $formDatas);
break;
case PAYMENT['BILLING']['ONETIME']: //일회성일때만 처리
$entity = $this->getPaymentService()->changeServerPart($oldEntity, $entity, $formDatas);
//결제정보PK정의
$entity = parent::modify($entity, ['payment_uid' => $entity->getPaymentEntity()->getPK()]);
break;
case PAYMENT['BILLING']['BASE']: //기본처리
//아무처리 않함
break;
default:
throw new \Exception(__METHOD__ . "에서 오류발생:{$entity->getBilling()}은 지정되지 않은 결제방식입니다.");
// break;
}
return $entity; return $entity;
} }
//삭제 //삭제
public function delete(mixed $entity): ServerPartEntity public function delete(mixed $entity): ServerPartEntity
{ {
$entity = parent::delete($entity); $entity = parent::delete($entity);
//서비스금액 관련때문에 후처리작업 //Type에 따른 부품서비스 정의
return $this->action_process($entity, __FUNCTION__ . 'ServerPart'); $this->getPartService($entity->getType())->unSetServerPart($entity, []);
//서비스 및 결제정보 처리
switch ($entity->getBilling()) {
case PAYMENT['BILLING']['MONTH']: //월별과금일때만 처리
$entity = $this->getServiceService()->unSetServerPart($entity, []);
break;
case PAYMENT['BILLING']['ONETIME']: //일회성일때만 처리
$entity = $this->getPaymentService()->unSetServerPart($entity, []);
//결제정보PK정의
$entity = parent::modify($entity, ['payment_uid' => $entity->getPaymentEntity()->getPK()]);
break;
case PAYMENT['BILLING']['BASE']: //기본처리
//아무처리 않함
break;
default:
throw new \Exception(__METHOD__ . "에서 오류발생:{$entity->getBilling()}은 지정되지 않은 결제방식입니다.");
// break;
}
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) {
$this->getModel()->delete($serverPartEntity);
}
return $serverEntity;
} }
} }

View File

@ -2,14 +2,16 @@
namespace App\Services\Equipment; namespace App\Services\Equipment;
use App\Entities\Customer\ServiceEntity;
use App\Entities\Equipment\ServerEntity; use App\Entities\Equipment\ServerEntity;
use App\Helpers\Equipment\ServerHelper; use App\Helpers\Equipment\ServerHelper;
use App\Interfaces\Customer\ServiceInterface;
use App\Models\Equipment\ServerModel; use App\Models\Equipment\ServerModel;
use App\Services\Equipment\Server\ServiceService; use App\Services\Customer\ServiceService;
use App\Services\Equipment\Server\ServerPartService;
use App\Services\Equipment\EquipmentService; use App\Services\Equipment\EquipmentService;
use App\Services\Equipment\ServerPartService;
class ServerService extends EquipmentService class ServerService extends EquipmentService implements ServiceInterface
{ {
private ?ServiceService $_serviceService = null; private ?ServiceService $_serviceService = null;
private ?ServerPartService $_serverPartService = null; private ?ServerPartService $_serverPartService = null;
@ -160,13 +162,22 @@ class ServerService extends EquipmentService
$entity = $this->getServerPartService()->$action($entity); $entity = $this->getServerPartService()->$action($entity);
return $entity; return $entity;
} }
public function create(array $formDatas): ServerEntity
{
$entity = parent::create($formDatas);
return $entity;
}
//수정 //수정
public function modify(mixed $entity, array $formDatas): ServerEntity public function modify(mixed $entity, array $formDatas): ServerEntity
{ {
//수정전 정보
$oldEntity = $entity;
//서버정보 수정 //서버정보 수정
$entity = parent::modify($entity, $formDatas); $entity = parent::modify($entity, $formDatas);
//후처리작업 //서비스정보수정(청구액수정)
return $this->action_process($entity, __FUNCTION__ . 'Server'); $entity = $this->getServiceService()->changeServer($oldEntity, $entity, []);
$entity = $this->getServerPartService()->changeServer($oldEntity, $entity, []);
return $entity;
} }
//삭제 //삭제
public function delete(mixed $entity): ServerEntity public function delete(mixed $entity): ServerEntity
@ -182,4 +193,63 @@ class ServerService extends EquipmentService
$this->getModel()->orderBy("code ASC,title ASC"); $this->getModel()->orderBy("code ASC,title ASC");
parent::setOrderBy($field, $value); parent::setOrderBy($field, $value);
} }
//서비스관련 작업
public function setService(ServiceEntity $serviceEntity, array $serviceDatas): ServiceEntity
{
if (!array_key_exists('serverinfo_uid', $serviceDatas)) {
throw new \Exception("서버정보가 없습니다.");
}
$entity = $this->getEntity($serviceDatas['serverinfo_uid']);
if (!$entity instanceof ServerEntity) {
throw new \Exception("{$serviceDatas['serverinfo_uid']}에 대한 서버정보를 찾을수 없습니다.");
}
$entity = $this->getEntity($serviceDatas['serverinfo_uid']);
if ($entity->getStatus() != STATUS['AVAILABLE']) {
throw new \Exception("{$entity->getCustomTitle()} 서버는 사용가능 서버가 아닙니다.");
}
$formDatas = [];
$formDatas['clientinfo_uid'] = $serviceEntity->getClientInfoUID();
$formDatas['serviceinfo_uid'] = $serviceEntity->getPK();
$formDatas['status'] = STATUS['OCCUPIED'];
//대체서버용인지 확인
if (array_key_exists('type', $serviceDatas) && $serviceDatas['type'] === 'alternative') {
$formDatas['type'] = $serviceDatas['type'];
}
//필수정보처리 후 서버정보등록 후 서비스정보 Entity에 서버정보 설정
return $serviceEntity->setServerEntity($this->getModel()->modify($entity, $formDatas));
}
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 = $this->getModel()->modify($entity, $formDatas);
//서비스정보 Entity에 서버정보 설정
return $serviceEntity;
}
//서버파트관련 작업
} }

View File

@ -2,12 +2,14 @@
namespace App\Services\Part; namespace App\Services\Part;
use App\Entities\Equipment\ServerPartEntity;
use App\Entities\Part\CPUEntity; use App\Entities\Part\CPUEntity;
use App\Helpers\Part\CPUHelper; use App\Helpers\Part\CPUHelper;
use App\Interfaces\Equipment\ServerPartInterface;
use App\Models\Part\CPUModel; use App\Models\Part\CPUModel;
class CPUService extends PartService class CPUService extends PartService implements ServerPartInterface
{ {
public function __construct() public function __construct()
{ {
@ -50,4 +52,39 @@ class CPUService extends PartService
$this->getModel()->orderBy('title ASC'); $this->getModel()->orderBy('title ASC');
parent::setOrderBy($field, $value); 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()})가 더 많습니다.");
}
return $this->getModel()->modify($entity, ['stock' => $entity->getStock() - $serverPartEntity->getCnt()]);
}
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()}에 해당하는 부품정보를 찾을수없습니다.");
}
return $this->getModel()->modify($entity, ['stock' => $entity->getStock() + $serverPartEntity->getCnt()]);
}
} }

View File

@ -2,13 +2,16 @@
namespace App\Services\Part; namespace App\Services\Part;
use App\Entities\Equipment\ServerPartEntity;
use App\Entities\Part\CSEntity;
use App\Helpers\Part\CSHelper; use App\Helpers\Part\CSHelper;
use App\Interfaces\Equipment\ServerPartInterface;
use App\Models\Part\CSModel; use App\Models\Part\CSModel;
use App\Services\Customer\ClientService; use App\Services\Customer\ClientService;
use App\Services\Customer\ServiceService; use App\Services\Customer\ServiceService;
use App\Services\Equipment\ServerService; use App\Services\Equipment\ServerService;
class CSService extends PartService class CSService extends PartService implements ServerPartInterface
{ {
private ?ClientService $_clientService = null; private ?ClientService $_clientService = null;
private ?ServiceService $_serviceService = null; private ?ServiceService $_serviceService = null;
@ -101,4 +104,52 @@ class CSService extends PartService
$this->getModel()->orderBy('INET_ATON(ip)', 'ASC'); $this->getModel()->orderBy('INET_ATON(ip)', 'ASC');
parent::setOrderBy($field, $value); parent::setOrderBy($field, $value);
} }
//서버파트관련 작업
public function setServerPart(ServerPartEntity $serverPartEntity, array $serverPartDatas): ServerPartEntity
{
$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정보 수정
return $serverPartEntity->setPartEntity($this->getModel()->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($this->getModel()->modify($entity, $formDatas));
}
} }

View File

@ -2,12 +2,14 @@
namespace App\Services\Part; namespace App\Services\Part;
use App\Entities\Equipment\ServerPartEntity;
use App\Entities\Part\DISKEntity; use App\Entities\Part\DISKEntity;
use App\Helpers\Part\DISKHelper; use App\Helpers\Part\DISKHelper;
use App\Interfaces\Equipment\ServerPartInterface;
use App\Models\Part\DISKModel; use App\Models\Part\DISKModel;
class DISKService extends PartService class DISKService extends PartService implements ServerPartInterface
{ {
public function __construct() public function __construct()
{ {
@ -50,4 +52,39 @@ class DISKService extends PartService
$this->getModel()->orderBy('title ASC'); $this->getModel()->orderBy('title ASC');
parent::setOrderBy($field, $value); parent::setOrderBy($field, $value);
} }
//서버파트관련 작업
public function setServerPart(ServerPartEntity $serverPartEntity, array $serverPartDatas): ServerPartEntity
{
//부품정보가져오기
$entity = $this->getEntity($serverPartEntity->getPartUID());
if (!$entity instanceof DISKEntity) {
throw new \Exception("{$serverPartEntity->getPartUID()}에 해당하는 부품정보를 찾을수없습니다.");
}
//부품정보에 서버정보 설정 및 서비스,고객정보 정의
if ($entity->getStock() < $serverPartEntity->getCnt()) {
throw new \Exception("현재 재고수[{$entity->getStock()}]보다 지정하신 갯수({$serverPartEntity->getCnt()})가 더 많습니다.");
}
return $this->getModel()->modify($entity, ['stock' => $entity->getStock() - $serverPartEntity->getCnt()]);
}
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()}에 해당하는 부품정보를 찾을수없습니다.");
}
return $this->getModel()->modify($entity, ['stock' => $entity->getStock() + $serverPartEntity->getCnt()]);
}
} }

View File

@ -2,7 +2,10 @@
namespace App\Services\Part; namespace App\Services\Part;
use App\Entities\Equipment\ServerPartEntity;
use App\Entities\Part\IPEntity;
use App\Helpers\Part\IPHelper; use App\Helpers\Part\IPHelper;
use App\Interfaces\Equipment\ServerPartInterface;
use App\Models\Part\IPModel; use App\Models\Part\IPModel;
use App\Services\Customer\ClientService; use App\Services\Customer\ClientService;
use App\Services\Customer\ServiceService; use App\Services\Customer\ServiceService;
@ -10,7 +13,7 @@ use App\Services\Equipment\LineService;
use App\Services\Equipment\ServerService; use App\Services\Equipment\ServerService;
use App\Services\Part\PartService; use App\Services\Part\PartService;
class IPService extends PartService class IPService extends PartService implements ServerPartInterface
{ {
private ?LineService $_lineService = null; private ?LineService $_lineService = null;
private ?ClientService $_clientService = null; private ?ClientService $_clientService = null;
@ -116,4 +119,55 @@ class IPService extends PartService
$this->getModel()->orderBy('INET_ATON(ip)', 'ASC'); $this->getModel()->orderBy('INET_ATON(ip)', 'ASC');
parent::setOrderBy($field, $value); parent::setOrderBy($field, $value);
} }
//서버파트관련 작업
public function setServerPart(ServerPartEntity $serverPartEntity, array $serverPartDatas): ServerPartEntity
{
$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정보 수정
return $serverPartEntity->setPartEntity($this->getModel()->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($this->getModel()->modify($entity, $formDatas));
}
} }

View File

@ -2,12 +2,14 @@
namespace App\Services\Part; namespace App\Services\Part;
use App\Entities\Equipment\ServerPartEntity;
use App\Entities\Part\OSEntity; use App\Entities\Part\OSEntity;
use App\Helpers\Part\OSHelper; use App\Helpers\Part\OSHelper;
use App\Interfaces\Equipment\ServerPartInterface;
use App\Models\Part\OSModel; use App\Models\Part\OSModel;
class OSService extends PartService class OSService extends PartService implements ServerPartInterface
{ {
public function __construct() public function __construct()
{ {
@ -50,4 +52,39 @@ class OSService extends PartService
$this->getModel()->orderBy('title ASC'); $this->getModel()->orderBy('title ASC');
parent::setOrderBy($field, $value); 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()})가 더 많습니다.");
}
return $this->getModel()->modify($entity, ['stock' => $entity->getStock() - $serverPartEntity->getCnt()]);
}
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()}에 해당하는 부품정보를 찾을수없습니다.");
}
return $this->getModel()->modify($entity, ['stock' => $entity->getStock() + $serverPartEntity->getCnt()]);
}
} }

View File

@ -2,8 +2,6 @@
namespace App\Services\Part; namespace App\Services\Part;
use App\Entities\Customer\ClientEntity;
use App\Helpers\CommonHelper; use App\Helpers\CommonHelper;
use App\Models\CommonModel; use App\Models\CommonModel;
use App\Services\CommonService; use App\Services\CommonService;

View File

@ -2,12 +2,14 @@
namespace App\Services\Part; namespace App\Services\Part;
use App\Entities\Equipment\ServerPartEntity;
use App\Entities\Part\RAMEntity; use App\Entities\Part\RAMEntity;
use App\Helpers\Part\RAMHelper; use App\Helpers\Part\RAMHelper;
use App\Interfaces\Equipment\ServerPartInterface;
use App\Models\Part\RAMModel; use App\Models\Part\RAMModel;
class RAMService extends PartService class RAMService extends PartService implements ServerPartInterface
{ {
public function __construct() public function __construct()
{ {
@ -50,4 +52,39 @@ class RAMService extends PartService
$this->getModel()->orderBy('title ASC'); $this->getModel()->orderBy('title ASC');
parent::setOrderBy($field, $value); 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()})가 더 많습니다.");
}
return $this->getModel()->modify($entity, ['stock' => $entity->getStock() - $serverPartEntity->getCnt()]);
}
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()}에 해당하는 부품정보를 찾을수없습니다.");
}
return $this->getModel()->modify($entity, ['stock' => $entity->getStock() + $serverPartEntity->getCnt()]);
}
} }

View File

@ -2,12 +2,14 @@
namespace App\Services\Part; namespace App\Services\Part;
use App\Entities\Equipment\ServerPartEntity;
use App\Entities\Part\SOFTWAREEntity; use App\Entities\Part\SOFTWAREEntity;
use App\Helpers\Part\SOFTWAREHelper; use App\Helpers\Part\SOFTWAREHelper;
use App\Interfaces\Equipment\ServerPartInterface;
use App\Models\Part\SOFTWAREModel; use App\Models\Part\SOFTWAREModel;
class SOFTWAREService extends PartService class SOFTWAREService extends PartService implements ServerPartInterface
{ {
public function __construct() public function __construct()
{ {
@ -50,4 +52,39 @@ class SOFTWAREService extends PartService
$this->getModel()->orderBy('title ASC'); $this->getModel()->orderBy('title ASC');
parent::setOrderBy($field, $value); 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()})가 더 많습니다.");
}
return $this->getModel()->modify($entity, ['stock' => $entity->getStock() - $serverPartEntity->getCnt()]);
}
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()}에 해당하는 부품정보를 찾을수없습니다.");
}
return $this->getModel()->modify($entity, ['stock' => $entity->getStock() + $serverPartEntity->getCnt()]);
}
} }

View File

@ -2,13 +2,16 @@
namespace App\Services\Part; namespace App\Services\Part;
use App\Entities\Equipment\ServerPartEntity;
use App\Entities\Part\SWITCHEntity;
use App\Helpers\Part\SWITCHHelper; use App\Helpers\Part\SWITCHHelper;
use App\Interfaces\Equipment\ServerPartInterface;
use App\Models\Part\SWITCHModel; use App\Models\Part\SWITCHModel;
use App\Services\Customer\ServiceService; use App\Services\Customer\ServiceService;
use App\Services\Equipment\ServerService; use App\Services\Equipment\ServerService;
use App\Services\Part\PartService; use App\Services\Part\PartService;
class SWITCHService extends PartService class SWITCHService extends PartService implements ServerPartInterface
{ {
private ?ServiceService $_serviceService = null; private ?ServiceService $_serviceService = null;
private ?ServerService $_serverService = null; private ?ServerService $_serverService = null;
@ -86,4 +89,53 @@ class SWITCHService extends PartService
$this->getModel()->orderBy('code', 'ASC'); $this->getModel()->orderBy('code', 'ASC');
parent::setOrderBy($field, $value); parent::setOrderBy($field, $value);
} }
//서버파트관련 작업
public function setServerPart(ServerPartEntity $serverPartEntity, array $serverPartDatas): ServerPartEntity
{
$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정보 수정
return $serverPartEntity->setPartEntity($this->getModel()->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($this->getModel()->modify($entity, $formDatas));
}
} }

View File

@ -2,8 +2,12 @@
namespace App\Services; namespace App\Services;
use App\Entities\Customer\ServiceEntity;
use App\Entities\Equipment\ServerPartEntity;
use App\Entities\PaymentEntity; use App\Entities\PaymentEntity;
use App\Helpers\PaymentHelper; use App\Helpers\PaymentHelper;
use App\Interfaces\Customer\ServiceInterface;
use App\Interfaces\Equipment\ServerPartInterface;
use App\Models\PaymentModel; use App\Models\PaymentModel;
use App\Services\CommonService; use App\Services\CommonService;
use App\Services\Customer\ClientService; use App\Services\Customer\ClientService;
@ -11,7 +15,7 @@ use App\Services\Customer\ServiceService;
use App\Services\Equipment\ServerPartService; use App\Services\Equipment\ServerPartService;
use App\Services\UserService; use App\Services\UserService;
class PaymentService extends CommonService class PaymentService extends CommonService implements ServiceInterface, ServerPartInterface
{ {
private ?UserService $_userService = null; private ?UserService $_userService = null;
private ?ClientService $_clientService = null; private ?ClientService $_clientService = null;
@ -116,16 +120,6 @@ class PaymentService extends CommonService
} }
return $unPaids; return $unPaids;
} }
final public function setAmount(PaymentEntity $entity, int $amount): PaymentEntity
{
if ($entity->getStatus() !== STATUS['UNPAID']) {
throw new \Exception(__METHOD__ . "에서 오류발생: 지급이 완료된 결제정보는 수정할 수 없습니다.");
}
if ($entity->getAmount() !== $amount) {
$this->getModel()->modify($entity, ['amount' => $amount]);
}
return $entity;
}
//기본 기능부분 //기본 기능부분
//FieldForm관련용 //FieldForm관련용
final public function getFormOption(string $field, array $options = []): array final public function getFormOption(string $field, array $options = []): array
@ -148,4 +142,116 @@ class PaymentService extends CommonService
$this->getModel()->orderBy('billing_at ASC'); $this->getModel()->orderBy('billing_at ASC');
parent::setOrderBy($field, $value); parent::setOrderBy($field, $value);
} }
//서비스관련 작업
public function setService(ServiceEntity $serviceEntity, array $serviceDatas): ServiceEntity
{
$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()->create($formDatas));
}
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;
}
//서버파트관련 작업(1회성만처리)
public function setServerPart(ServerPartEntity $serverPartEntity, array $serverPartDatas): ServerPartEntity
{
if ($serverPartEntity->getBilling() !== PAYMENT['BILLING']['ONETIME']) {
throw new \Exception("[{$serverPartEntity->getBilling()}],청구방식이 일회성이 아닙니다.");
}
if ($serverPartEntity->getServiceInfoUID() === null) {
throw new \Exception(__METHOD__ . "에서 오류발생: 서비스정보가 정의된 후에만 가능합니다.");
}
//일회인이 아닌경우
if ($serverPartEntity->getBilling() !== PAYMENT['BILLING']['ONETIME']) {
throw new \Exception(__METHOD__ . "에서 오류발생: :" . lang("{$this->getClassName()}.BILLING." . PAYMENT['BILLING'][$serverPartEntity->getBilling()]) . "지급 상품은 처리가 불가, 일회성만 가능합니다.");
}
$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 = $this->getModel()->create($formDatas);
//서버연결정보 Entity에 결제정보 설정
return $serverPartEntity->setPaymentEntity($entity);
}
public function changeServerPart(ServerPartEntity $oldServerPartEntity, ServerPartEntity $serverPartEntity, array $serverPartDatas): ServerPartEntity
{
if ($serverPartEntity->getBilling() !== PAYMENT['BILLING']['ONETIME']) {
throw new \Exception("[{$serverPartEntity->getBilling()}],청구방식이 일회성이 아닙니다.");
}
//결제정보 가져오기
$entity = $serverPartEntity->getPaymentEntity();
if (!$entity instanceof PaymentEntity) {
throw new \Exception(__METHOD__ . "에서 오류발생: 서버파트연결정보{$serverPartEntity->getPK()}]에 해당하는 결제정보를 찾을수 없습니다.");
}
//미납상태확인
if ($entity->getStatus() !== STATUS['UNPAID']) {
throw new \Exception(__METHOD__ . "에서 오류발생: 완료된 결제는 수정이 불가합니다.");
}
if ($serverPartEntity->getServiceInfoUID() === null) {
throw new \Exception(__METHOD__ . "에서 오류발생: 서비스정보가 정의된 후에만 가능합니다.");
}
//일회인이 아닌경우
if ($serverPartEntity->getBilling() !== PAYMENT['BILLING']['ONETIME']) {
throw new \Exception(__METHOD__ . "에서 오류발생: :" . lang("{$this->getClassName()}.BILLING." . PAYMENT['BILLING'][$serverPartEntity->getBilling()]) . "지급 상품은 처리가 불가, 일회성만 가능합니다.");
}
$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 = $this->getModel()->modify($entity, $formDatas);
//서버연결정보 Entity에 결제정보 설정
return $serverPartEntity->setPaymentEntity($entity);
}
public function unsetServerPart(ServerPartEntity $serverPartEntity, array $serverPartDatas): ServerPartEntity
{
//삭제시에는 아무것도 하지 않는다.
return $serverPartEntity;
}
} }