From b292ca2f6bad8f5ac8d55ee95661327b673dba47 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EC=B5=9C=EC=A4=80=ED=9D=A0?= Date: Tue, 13 May 2025 19:12:02 +0900 Subject: [PATCH] dbms_init...1 --- app/Config/Routes.php | 13 + .../Admin/Customer/ClientController.php | 54 +- .../Admin/Customer/CustomerController.php | 23 - .../Admin/Customer/ServiceController.php | 46 ++ .../Admin/Equipment/EquipmentController.php | 13 +- .../Admin/Equipment/PartController.php | 19 +- .../Admin/Equipment/ServerController.php | 27 +- .../Admin/Equipment/SoftwareController.php | 19 +- app/Controllers/CommonController.php | 16 +- app/Database/erp2.vuerd.json | 624 +++++++++--------- app/Entities/Customer/ServiceEntity.php | 16 + app/Entities/Equipment/PartEntity.php | 5 - app/Entities/Equipment/SoftwareEntity.php | 5 - app/Entities/UserEntity.php | 4 + app/Helpers/CommonHelper.php | 26 +- app/Helpers/Customer/ServiceHelper.php | 50 ++ app/Helpers/Equipment/EquipmentHelper.php | 17 +- app/Language/en/Customer/Service.php | 29 + app/Language/en/Equipment/Line.php | 2 +- app/Language/en/Equipment/Network.php | 3 +- app/Language/en/Equipment/Part.php | 31 + app/Language/en/Equipment/Server.php | 13 +- app/Language/en/Equipment/Software.php | 28 + app/Models/Customer/ServiceModel.php | 64 ++ app/Models/Equipment/NetworkModel.php | 6 +- app/Models/Equipment/PartModel.php | 30 +- app/Models/Equipment/ServerModel.php | 8 +- app/Models/Equipment/SoftwareModel.php | 23 +- app/Services/Auth/LocalService.php | 6 +- app/Services/Customer/ServiceService.php | 49 ++ app/Services/Equipment/NetworkService.php | 3 +- app/Services/Equipment/PartService.php | 13 +- app/Services/Equipment/ServerService.php | 2 +- app/Services/Equipment/SoftwareService.php | 11 +- .../layouts/admin/left_menu/customer.php | 3 + public/css/admin/form.css | 8 +- public/css/front/form.css | 8 +- 37 files changed, 857 insertions(+), 460 deletions(-) create mode 100644 app/Controllers/Admin/Customer/ServiceController.php create mode 100644 app/Entities/Customer/ServiceEntity.php create mode 100644 app/Helpers/Customer/ServiceHelper.php create mode 100644 app/Language/en/Customer/Service.php create mode 100644 app/Language/en/Equipment/Part.php create mode 100644 app/Language/en/Equipment/Software.php create mode 100644 app/Models/Customer/ServiceModel.php create mode 100644 app/Services/Customer/ServiceService.php diff --git a/app/Config/Routes.php b/app/Config/Routes.php index fa2db51..dab4d3c 100644 --- a/app/Config/Routes.php +++ b/app/Config/Routes.php @@ -93,6 +93,19 @@ $routes->group('admin', ['namespace' => 'App\Controllers\Admin', 'filter' => 'au $routes->post('batchjob_delete', 'PointController::batchjob_delete'); $routes->get('download/(:alpha)', 'PointController::download/$1'); }); + $routes->group('service', ['namespace' => 'App\Controllers\Admin\Customer'], function ($routes) { + $routes->get('/', 'ServiceController::index', []); + $routes->get('create', 'ServiceController::create_form'); + $routes->post('create', 'ServiceController::create'); + $routes->get('modify/(:num)', 'ServiceController::modify_form/$1'); + $routes->post('modify/(:num)', 'ServiceController::modify/$1'); + $routes->get('view/(:num)', 'ServiceController::view/$1'); + $routes->get('delete/(:num)', 'ServiceController::delete/$1'); + $routes->get('toggle/(:num)/(:any)', 'ServiceController::toggle/$1/$2'); + $routes->post('batchjob', 'ServiceController::batchjob'); + $routes->post('batchjob_delete', 'ServiceController::batchjob_delete'); + $routes->get('download/(:alpha)', 'ServiceController::download/$1'); + }); }); $routes->group('equipment', ['namespace' => 'App\Controllers\Admin\Equipment'], function ($routes) { $routes->group('line', ['namespace' => 'App\Controllers\Admin\Equipment'], function ($routes) { diff --git a/app/Controllers/Admin/Customer/ClientController.php b/app/Controllers/Admin/Customer/ClientController.php index 9ffefd5..bd1e3d3 100644 --- a/app/Controllers/Admin/Customer/ClientController.php +++ b/app/Controllers/Admin/Customer/ClientController.php @@ -52,36 +52,36 @@ class ClientController extends CustomerController return $validation; } - protected function create_process(): ClientEntity - { - $entity = parent::create_process(); - //Account정보 - $temps = []; - $temps['clientinfo_uid'] = $entity->getPK(); - $temps['title'] = "첫가입"; - $temps['alias'] = $entity->getTitle(); - $temps['amount'] = $this->formDatas['account_balance'] ?? 0; - $temps['status'] = lang("{$this->getAccountService()->getClassPath()}.DEFAULTS.status"); - $this->getAccountService()->create($temps, new AccountEntity()); + // protected function create_process(): ClientEntity + // { + // $entity = parent::create_process(); + // //Account정보 + // $temps = []; + // $temps['clientinfo_uid'] = $entity->getPK(); + // $temps['title'] = "첫가입"; + // $temps['alias'] = $entity->getTitle(); + // $temps['amount'] = $this->formDatas['account_balance'] ?? 0; + // $temps['status'] = lang("{$this->getAccountService()->getClassPath()}.DEFAULTS.status"); + // $this->getAccountService()->create($temps, new AccountEntity()); - //Coupon정보 - $temps = []; - $temps['clientinfo_uid'] = $entity->getPK(); - $temps['title'] = "첫가입"; - $temps['amount'] = $this->formDatas['coupon_balance'] ?? 0; - $temps['status'] = lang("{$this->getCouponService()->getClassPath()}.DEFAULTS.status"); - $this->getCouponService()->create($temps, new CouponEntity()); + // //Coupon정보 + // $temps = []; + // $temps['clientinfo_uid'] = $entity->getPK(); + // $temps['title'] = "첫가입"; + // $temps['amount'] = $this->formDatas['coupon_balance'] ?? 0; + // $temps['status'] = lang("{$this->getCouponService()->getClassPath()}.DEFAULTS.status"); + // $this->getCouponService()->create($temps, new CouponEntity()); - //Point정보 - $temps = []; - $temps['clientinfo_uid'] = $entity->getPK(); - $temps['title'] = "첫가입"; - $temps['amount'] = $this->formDatas['point_balance'] ?? 0; - $temps['status'] = lang("{$this->getPointService()->getClassPath()}.DEFAULTS.status"); - $this->getPointService()->create($temps, new CouponEntity()); + // //Point정보 + // $temps = []; + // $temps['clientinfo_uid'] = $entity->getPK(); + // $temps['title'] = "첫가입"; + // $temps['amount'] = $this->formDatas['point_balance'] ?? 0; + // $temps['status'] = lang("{$this->getPointService()->getClassPath()}.DEFAULTS.status"); + // $this->getPointService()->create($temps, new CouponEntity()); - return $entity; - } + // return $entity; + // } //Index,FieldForm관련. //View관련 diff --git a/app/Controllers/Admin/Customer/CustomerController.php b/app/Controllers/Admin/Customer/CustomerController.php index f13cd13..d0fdaa2 100644 --- a/app/Controllers/Admin/Customer/CustomerController.php +++ b/app/Controllers/Admin/Customer/CustomerController.php @@ -8,13 +8,11 @@ use CodeIgniter\HTTP\ResponseInterface; use Psr\Log\LoggerInterface; use App\Services\Customer\AccountService; -use App\Services\Customer\ClientService; use App\Services\Customer\CouponService; use App\Services\Customer\PointService; abstract class CustomerController extends AdminController { - private ?ClientService $_clientService = null; private ?AccountService $_accountService = null; private ?CouponService $_couponService = null; private ?PointService $_pointService = null; @@ -24,13 +22,6 @@ abstract class CustomerController extends AdminController $this->uri_path .= 'customer/'; // $this->view_path .= "customer" . DIRECTORY_SEPARATOR; } - final public function getClientService(): ClientService - { - if (!$this->_clientService) { - $this->_clientService = new ClientService($this->request); - } - return $this->_clientService; - } final public function getAccountService(): AccountService { if (!$this->_accountService) { @@ -53,18 +44,4 @@ abstract class CustomerController extends AdminController return $this->_pointService; } //Index,FieldForm관련 - protected function getFormFieldOption(string $field, array $options = []): array - { - switch ($field) { - case 'clientinfo_uid': - $options[$field] = $this->getClientService()->getFormFieldOption($field); - // echo $this->getUserModel()->getLastQuery(); - // dd($options); - break; - default: - $options = parent::getFormFieldOption($field, $options); - break; - } - return $options; - } } diff --git a/app/Controllers/Admin/Customer/ServiceController.php b/app/Controllers/Admin/Customer/ServiceController.php new file mode 100644 index 0000000..92e3f18 --- /dev/null +++ b/app/Controllers/Admin/Customer/ServiceController.php @@ -0,0 +1,46 @@ +uri_path .= strtolower($this->getService()->getClassName()) . '/'; + $this->class_path = $this->getService()->getClassPath(); + $this->title = lang("{$this->getService()->getClassPath()}.title"); + $this->helper = $this->getHelper(); + } + public function getService(): ServiceService + { + if (!$this->_service) { + $this->_service = new ServiceService($this->request); + } + return $this->_service; + } + public function getHelper(): mixed + { + if (!$this->_helper) { + $this->_helper = new ServiceHelper($this->request); + } + return $this->_helper; + } + //Index,FieldForm관련. + protected function index_process(): array + { + $fields = [ + 'fields' => ['clientinfo_uid', 'type', $this->getService()->getModel()->getTitleField(), 'payment_date', 'amount', 'startdate_at', 'enddate_at', 'status'], + ]; + $this->init('index', $fields); + $this->modal_type = 'modal_iframe'; + return parent::index_process(); + } +} diff --git a/app/Controllers/Admin/Equipment/EquipmentController.php b/app/Controllers/Admin/Equipment/EquipmentController.php index 1a9fbf6..456fd4a 100644 --- a/app/Controllers/Admin/Equipment/EquipmentController.php +++ b/app/Controllers/Admin/Equipment/EquipmentController.php @@ -9,13 +9,11 @@ use Psr\Log\LoggerInterface; use App\Services\Equipment\LineService; use App\Services\Equipment\ServerService; -use App\Services\Customer\ClientService; abstract class EquipmentController extends AdminController { private ?ServerService $_serverService = null; private ?LineService $_lineService = null; - private ?ClientService $_clientService = null; public function initController(RequestInterface $request, ResponseInterface $response, LoggerInterface $logger) { parent::initController($request, $response, $logger); @@ -36,19 +34,12 @@ abstract class EquipmentController extends AdminController } return $this->_lineService; } - final public function getClientService(): ClientService - { - if (!$this->_clientService) { - $this->_clientService = new ClientService($this->request); - } - return $this->_clientService; - } //Index,FieldForm관련 protected function getFormFieldOption(string $field, array $options = []): array { switch ($field) { - case 'clientinfo_uid': - $options[$field] = $this->getClientService()->getFormFieldOption($field); + case 'lineinfo_uid': + $options[$field] = $this->getLineService()->getFormFieldOption($field); // echo $this->getUserModel()->getLastQuery(); // dd($options); break; diff --git a/app/Controllers/Admin/Equipment/PartController.php b/app/Controllers/Admin/Equipment/PartController.php index 4942585..7cee351 100644 --- a/app/Controllers/Admin/Equipment/PartController.php +++ b/app/Controllers/Admin/Equipment/PartController.php @@ -35,18 +35,13 @@ class PartController extends EquipmentController return $this->_helper; } //Index,FieldForm관련 - protected function setValidation(Validation $validation, string $action, string $field, ?string $rule = null): Validation + protected function index_process(): array { - switch ($field) { - case 'role': - //아래 Rule Array는 필드명.* checkbox를 사용 - $validation->setRule("{$field}.*", $field, $rule); - break; - default: - $validation = parent::setValidation($validation, $action, $field, $rule); - break; - } - return $validation; + $fields = [ + 'fields' => ['clientinfo_uid', 'type', $this->getService()->getModel()->getTitleField(), 'capacity', 'price', 'status', 'description'], + ]; + $this->init('index', $fields); + $this->modal_type = 'modal_iframe'; + return parent::index_process(); } - //Index,FieldForm관련. } diff --git a/app/Controllers/Admin/Equipment/ServerController.php b/app/Controllers/Admin/Equipment/ServerController.php index 4911e82..9c1f3de 100644 --- a/app/Controllers/Admin/Equipment/ServerController.php +++ b/app/Controllers/Admin/Equipment/ServerController.php @@ -4,14 +4,15 @@ namespace App\Controllers\Admin\Equipment; use CodeIgniter\HTTP\RequestInterface; use CodeIgniter\HTTP\ResponseInterface; -use CodeIgniter\Validation\Validation; use Psr\Log\LoggerInterface; use App\Helpers\Equipment\ServerHelper; use App\Services\Equipment\ServerService; +use App\Services\Equipment\PartService; class ServerController extends EquipmentController { + private ?PartService $_partService = null; public function initController(RequestInterface $request, ResponseInterface $response, LoggerInterface $logger) { parent::initController($request, $response, $logger); @@ -34,6 +35,30 @@ class ServerController extends EquipmentController } return $this->_helper; } + final public function getPartService(): PartService + { + if (!$this->_partService) { + $this->_partService = new PartService($this->request); + } + return $this->_partService; + } + + //Index,FieldForm관련 + protected function getFormFieldOption(string $field, array $options = []): array + { + switch ($field) { + case 'partinfo_uid': + $options[$field] = $this->getPartService()->getFormFieldOption($field); + // echo $this->getUserModel()->getLastQuery(); + // dd($options); + break; + default: + $options = parent::getFormFieldOption($field, $options); + break; + } + return $options; + } + //Index,FieldForm관련 protected function index_process(): array { diff --git a/app/Controllers/Admin/Equipment/SoftwareController.php b/app/Controllers/Admin/Equipment/SoftwareController.php index f60a244..d0643a2 100644 --- a/app/Controllers/Admin/Equipment/SoftwareController.php +++ b/app/Controllers/Admin/Equipment/SoftwareController.php @@ -35,18 +35,13 @@ class SoftwareController extends EquipmentController return $this->_helper; } //Index,FieldForm관련 - protected function setValidation(Validation $validation, string $action, string $field, ?string $rule = null): Validation + protected function index_process(): array { - switch ($field) { - case 'role': - //아래 Rule Array는 필드명.* checkbox를 사용 - $validation->setRule("{$field}.*", $field, $rule); - break; - default: - $validation = parent::setValidation($validation, $action, $field, $rule); - break; - } - return $validation; + $fields = [ + 'fields' => ['type', $this->getService()->getModel()->getTitleField(), 'price', 'status', 'description'], + ]; + $this->init('index', $fields); + $this->modal_type = 'modal_iframe'; + return parent::index_process(); } - //Index,FieldForm관련. } diff --git a/app/Controllers/CommonController.php b/app/Controllers/CommonController.php index b877da7..a68c137 100644 --- a/app/Controllers/CommonController.php +++ b/app/Controllers/CommonController.php @@ -17,11 +17,13 @@ use Psr\Log\LoggerInterface; use App\Libraries\LogCollector; use App\Services\MyLogService; +use App\Services\Customer\ClientService; abstract class CommonController extends BaseController { private $_myAuth = null; - private $_myLogService = null; + private ?MyLogService $_myLogService = null; + private ?ClientService $_clientService = null; private $_viewDatas = []; abstract public function getService(): mixed; abstract function getHelper(): mixed; @@ -57,6 +59,13 @@ abstract class CommonController extends BaseController { return $this->_viewDatas; } + final public function getClientService(): ClientService + { + if (!$this->_clientService) { + $this->_clientService = new ClientService($this->request); + } + return $this->_clientService; + } final public function getMyLogService(): mixed { if (!$this->_myLogService) { @@ -108,6 +117,11 @@ abstract class CommonController extends BaseController protected function getFormFieldOption(string $field, array $options): array { switch ($field) { + case 'clientinfo_uid': + $options[$field] = $this->getClientService()->getFormFieldOption($field); + // echo $this->getUserModel()->getLastQuery(); + // dd($options); + break; default: $options[$field] = lang($this->getService()->getClassPath() . '.' . strtoupper($field)); break; diff --git a/app/Database/erp2.vuerd.json b/app/Database/erp2.vuerd.json index 064dfd9..c345de1 100644 --- a/app/Database/erp2.vuerd.json +++ b/app/Database/erp2.vuerd.json @@ -4,13 +4,13 @@ "settings": { "width": 4000, "height": 4000, - "scrollTop": -1693.9895, - "scrollLeft": -1471.6563, - "zoomLevel": 0.28, + "scrollTop": -656.9025, + "scrollLeft": -537.9629, + "zoomLevel": 0.76, "show": 511, "database": 4, "databaseName": "", - "canvasType": "ERD", + "canvasType": "@dineug/erd-editor/builtin-schema-sql", "language": 1, "tableNameCase": 4, "columnNameCase": 2, @@ -35,7 +35,6 @@ "6ajvOCaGuXU9pzV0Y9jEi", "GDEF0_WuOpaYtsZxjn2zM", "B4qGh3KZsXHQ3_4EOgwJZ", - "z6WAw_7GnarTYkag4Lcsg", "IhXnqMFBU_GmCvISNyaKj", "ZMGIWLFEswObjH2Sx0NlW", "doERb3lIVeBW_D0NtNYX8", @@ -43,31 +42,24 @@ "kc1EFvFhlBSc0B0bDgX28", "R4reSshLxH3DQW6fUfSPa", "sgFc3Tg9sWiMm4hsEwKm9", - "aKTVtMqmPG7TJIsmxeVts", "5KwHMmZppj-7TjRC_xQ54", "3tdV9J9ns8BWCGQeCXITI", "F82-EcEv3fB4uzGzPrPla", "jO40Ej5EXImXnadoJo9bn", "gsa0XtQZQgrJ8ZXy8VQVg", - "h2unshrMDFXEq0pYzkkj1", "5AUwJum9FKPCoYRMBhLnF", "xrgAG9Zc_whfxTeGQ2fqx", "CYHveKA03TPJiz6X5wq2L", - "fCwd8aDYfxPrR9RVbsNPS", "RMhrLs7bOaopKmKt9YKHQ", - "gYqhvNLZjWrQk8LNKH3il", - "O0Q0QEgi652Vd4dZ9tccI" + "gYqhvNLZjWrQk8LNKH3il" ], "relationshipIds": [ "gAVYXWnBSnCw-0ieO4Mil", "lVmT5NRPuRWiB5-mz3uij", - "yTGnmFSvbFdY5rWfr010W", "WXDbQNvgLU6e2AEqZl8If", "5zrgwg2t7XYDC0zIz0ORc", "aKIaANWEYltTtJffBo7DN", "2fpNq-aTVMnLCnp481j3_", - "-ehlfECxBa5BFIg6kMnvT", - "DpudF8iv_Pam0hOxkXJHx", "qrtpEEOK_OBwxcghJlb0I", "fXVyT3pzVo0T0fgoFz4Gi", "gNCG3TpxxGPRdE0xNJM4Z", @@ -75,22 +67,17 @@ "AckV69XB9r2m1VHP64gtd", "6blFGW77QEOBG_yDwtFQq", "95uRv2fz3rssNbkyuzkLh", - "Jj6R_4lq6u3hMzLKjgqc9", - "hHtOx5fLjgkRN3SIPGLfw", "4BDt10BeeryoN0ZdEHIui", "KtdVJCYZ3DMVnPnFGKi3P", "vm1jrQz9O3U0SgH8t06u-", "AH1dyESfueUlhcoiU6KsQ", "QvPqTtlLZg4ZVLrIjQGT4", - "zJIufcYlZwkLRJbg3kScu", "9R2rjPFcsYMu-1-2X7ns9", - "C3aumd6Ayn4nTxCSyQNsn", "H3ufP8FbEnPlyFiHAggt0", "hEYDIiEFtsN5gxqTmDYC7", - "9RdCu7ZeEew2uEQd55LeS", - "CzqHK01dxGEXEEcXqTeGZ", "dzvA2g0z62LPmClZ32wPE", - "Trklw7votg2N3SEwtuiuX" + "Trklw7votg2N3SEwtuiuX", + "STHM-pzaTO72SEkIGYTCA" ], "indexIds": [], "memoIds": [] @@ -220,7 +207,7 @@ "color": "" }, "meta": { - "updateAt": 1747033098995, + "updateAt": 1747124720645, "createAt": 1745819764137 } }, @@ -313,15 +300,12 @@ }, "IhXnqMFBU_GmCvISNyaKj": { "id": "IhXnqMFBU_GmCvISNyaKj", - "name": "serverinfos_accessories", + "name": "serverinfos_partinfos", "comment": "장비-부속품 연결정보", "columnIds": [ "iylHjtnqU_oLEYolQkQIM", "pDILaJt_-vUo0fH_c6t2O", "7oTkP7etYsNgI6J6xQZVG", - "5kPFX9LYoh8iinAEpt3lm", - "qHwMDFU4dV5frDXsuW445", - "dLOesaVz9GnwntiIyvxwW", "NNGQ-RewVIApA1EISBQRS" ], "seqColumnIds": [ @@ -336,15 +320,15 @@ "D0lTirj9_pycie0SwZlUG" ], "ui": { - "x": 3253.684, - "y": 3254.0119, + "x": 2998.8895, + "y": 2407.4365, "zIndex": 2, - "widthName": 123, + "widthName": 111, "widthComment": 118, "color": "" }, "meta": { - "updateAt": 1747033170257, + "updateAt": 1747119231934, "createAt": 1745819764138 } }, @@ -374,15 +358,15 @@ "8ZPjmeG3NoO6C0icGibJP" ], "ui": { - "x": 2213.9302, - "y": 3668.4005, + "x": 2231.0033, + "y": 2944.0102, "zIndex": 2, "widthName": 68, "widthComment": 89, "color": "" }, "meta": { - "updateAt": 1747033140004, + "updateAt": 1747120815522, "createAt": 1745819764138 } }, @@ -637,15 +621,15 @@ "3v3JWUBHg3mAb4HmHPUP-" ], "ui": { - "x": 1160.8801, - "y": 2948.9244, + "x": 1173.2087, + "y": 2611.9385, "zIndex": 2, "widthName": 139, "widthComment": 130, "color": "" }, "meta": { - "updateAt": 1747032238203, + "updateAt": 1747117904064, "createAt": 1745819764139 } }, @@ -723,8 +707,8 @@ "9gNKhuq9UnDKyb9KuZ7cY", "35XbdvgOzpNdasPnMcbkx", "ALRvTZjYrv4K1ltFn30Mn", - "3jtklRjnxzZANo69T6vWW", - "hZ6BBU-xMeNW6jafbpxzY", + "TFkQ1ID6ShcMqf9wLGEP1", + "DSAUgD7rG7Lzm2-jVWKA3", "6WOE-jsg5rFe2X04atr-Y" ], "seqColumnIds": [ @@ -742,6 +726,8 @@ "1bvped58WqdQLlaObX0AT", "RJRgO2-42FxCW0ucjngu9", "iMCMcnQGafCPo46R91hOK", + "TFkQ1ID6ShcMqf9wLGEP1", + "DSAUgD7rG7Lzm2-jVWKA3", "6WOE-jsg5rFe2X04atr-Y" ], "ui": { @@ -753,7 +739,7 @@ "color": "" }, "meta": { - "updateAt": 1747033101874, + "updateAt": 1747124842184, "createAt": 1745819764140 } }, @@ -822,7 +808,7 @@ "color": "" }, "meta": { - "updateAt": 1747033222510, + "updateAt": 1747104160796, "createAt": 1745820710362 } }, @@ -834,8 +820,8 @@ "PJapuo6nvm3x9hJPUfXd6", "PyXYmokQzpzzT08WTmtsN", "fhM5WF3fhv8_g8KDcNF9g", - "hpqVO4TcRRrwuvlSosSGx", - "loBrh2giB1WiI1GakcT46", + "C-iSSJV5sjbkmpIKBx4Km", + "txROOkHVXSfJOTHlU5mdz", "jav6q3L-HQhPYJBdcLIgz" ], "seqColumnIds": [ @@ -851,6 +837,8 @@ "hpqVO4TcRRrwuvlSosSGx", "loBrh2giB1WiI1GakcT46", "qHxcsOsImKFSnmwyIE_XZ", + "C-iSSJV5sjbkmpIKBx4Km", + "txROOkHVXSfJOTHlU5mdz", "jav6q3L-HQhPYJBdcLIgz" ], "ui": { @@ -862,7 +850,7 @@ "color": "" }, "meta": { - "updateAt": 1747033103246, + "updateAt": 1747124830680, "createAt": 1745914844735 } }, @@ -878,6 +866,7 @@ "DvwDCnsNxrcfqx6nTsbP4", "B3NNhoIrKYGZrScx8XuuH", "06IXODaDZXY8cDIet15Im", + "vnQRLYgWHQ8AgJkfbs2a3", "0HPmN1faJk-KhZXILO2zx", "AtQmi9C4c5YlY8Brl9irr", "a0bnNatieTB5pr9jElQbS" @@ -893,6 +882,7 @@ "ZyOb1xK46x0-io64OuWOF", "B3NNhoIrKYGZrScx8XuuH", "06IXODaDZXY8cDIet15Im", + "vnQRLYgWHQ8AgJkfbs2a3", "0HPmN1faJk-KhZXILO2zx", "AtQmi9C4c5YlY8Brl9irr", "a0bnNatieTB5pr9jElQbS", @@ -908,7 +898,7 @@ "color": "" }, "meta": { - "updateAt": 1747033317657, + "updateAt": 1747118833814, "createAt": 1745916349284 } }, @@ -986,14 +976,17 @@ }, "RMhrLs7bOaopKmKt9YKHQ": { "id": "RMhrLs7bOaopKmKt9YKHQ", - "name": "cpuinfo", - "comment": "CPU 부품 정보", + "name": "partinfo", + "comment": "부품 정보", "columnIds": [ "Jh6e_-9QYe1Tqve0PE3kT", + "ha72QbBWfvyRymsyFBov8", + "-Vr-igaSkx5zEcVp0oUGN", "DC7TvFFpBT7vY0UKKHt-W", "kXkNsvdbXOcI-DslovgVa", "cg9Jr22ykbciJUTruf5fu", "dr0UoY8ebsS-TjcPyP4is", + "GnoGvT4HaG9kp-BvwZ4FQ", "wx8zTFviA4I8YQnn-MFpW", "3nwgqrQd_qDGdg6Fe3kEp", "mwVYv9PaJFpoxYvTRJ223" @@ -1001,24 +994,27 @@ "seqColumnIds": [ "roON46ztrEREN9ysNVyCK", "Jh6e_-9QYe1Tqve0PE3kT", + "ha72QbBWfvyRymsyFBov8", + "-Vr-igaSkx5zEcVp0oUGN", "DC7TvFFpBT7vY0UKKHt-W", "kXkNsvdbXOcI-DslovgVa", "cg9Jr22ykbciJUTruf5fu", "dr0UoY8ebsS-TjcPyP4is", + "GnoGvT4HaG9kp-BvwZ4FQ", "wx8zTFviA4I8YQnn-MFpW", "3nwgqrQd_qDGdg6Fe3kEp", "mwVYv9PaJFpoxYvTRJ223" ], "ui": { - "x": 2211.7152, - "y": 2778.3776, + "x": 2223.1253, + "y": 2562.5239, "zIndex": 495, "widthName": 60, - "widthComment": 79, + "widthComment": 60, "color": "" }, "meta": { - "updateAt": 1747033150267, + "updateAt": 1747118821379, "createAt": 1746783410914 } }, @@ -1043,8 +1039,8 @@ }, "gYqhvNLZjWrQk8LNKH3il": { "id": "gYqhvNLZjWrQk8LNKH3il", - "name": "serviceinfos_cpuinfos", - "comment": "서비스_cpu 부품 연결", + "name": "serviceinfos_partinfos", + "comment": "서비스_부품 연결", "columnIds": [ "TQwAGrd3jBQOImSKgfAZb", "YKXKsIEJE-vmIMQd5ZUMC", @@ -1062,15 +1058,15 @@ "VzuPW7xCYQCRJ5S3m5qU1" ], "ui": { - "x": 1175.4631, - "y": 2253.2524, + "x": 1176.833, + "y": 2273.8003, "zIndex": 547, - "widthName": 114, - "widthComment": 117, + "widthName": 116, + "widthComment": 94, "color": "" }, "meta": { - "updateAt": 1747032298638, + "updateAt": 1747117930132, "createAt": 1746783705263 } }, @@ -1797,7 +1793,7 @@ "name": "type", "comment": "", "dataType": "VARCHAR(20)", - "default": "'server'", + "default": "'Rack'", "options": 8, "ui": { "keys": 0, @@ -1807,7 +1803,7 @@ "widthDefault": 60 }, "meta": { - "updateAt": 1747020048606, + "updateAt": 1747110912882, "createAt": 1745819764138 } }, @@ -2200,7 +2196,7 @@ "default": "", "options": 8, "ui": { - "keys": 2, + "keys": 0, "widthName": 65, "widthComment": 60, "widthDataType": 60, @@ -2277,7 +2273,7 @@ "name": "type", "comment": "", "dataType": "VARCHAR(20)", - "default": "os", + "default": "'Windows'", "options": 8, "ui": { "keys": 0, @@ -2287,7 +2283,7 @@ "widthDefault": 60 }, "meta": { - "updateAt": 1746607055078, + "updateAt": 1747121966001, "createAt": 1745819764138 } }, @@ -2617,8 +2613,8 @@ "name": "type", "comment": "", "dataType": "VARCHAR(20)", - "default": "hosting", - "options": 0, + "default": "'hosting'", + "options": 8, "ui": { "keys": 0, "widthName": 60, @@ -2627,7 +2623,7 @@ "widthDefault": 60 }, "meta": { - "updateAt": 1746408944557, + "updateAt": 1747125258424, "createAt": 1745819764139 } }, @@ -2636,7 +2632,7 @@ "tableId": "kc1EFvFhlBSc0B0bDgX28", "name": "title", "comment": "", - "dataType": "VARCHAR(100)", + "dataType": "VARCHAR(255)", "default": "", "options": 8, "ui": { @@ -2647,7 +2643,7 @@ "widthDefault": 60 }, "meta": { - "updateAt": 1745819764139, + "updateAt": 1747125180442, "createAt": 1745819764139 } }, @@ -2678,7 +2674,7 @@ "comment": "", "dataType": "INT", "default": "0", - "options": 0, + "options": 8, "ui": { "keys": 0, "widthName": 60, @@ -2687,7 +2683,7 @@ "widthDefault": 60 }, "meta": { - "updateAt": 1745819764139, + "updateAt": 1747124638629, "createAt": 1745819764139 } }, @@ -2696,18 +2692,18 @@ "tableId": "kc1EFvFhlBSc0B0bDgX28", "name": "startdate_at", "comment": "", - "dataType": "TIMESTAMP", + "dataType": "DATE", "default": "", "options": 0, "ui": { "keys": 0, "widthName": 64, "widthComment": 60, - "widthDataType": 65, + "widthDataType": 60, "widthDefault": 60 }, "meta": { - "updateAt": 1745819764139, + "updateAt": 1747125021252, "createAt": 1745819764139 } }, @@ -2716,18 +2712,18 @@ "tableId": "kc1EFvFhlBSc0B0bDgX28", "name": "enddate_at", "comment": "", - "dataType": "TIMESTAMP", + "dataType": "DATE", "default": "", "options": 0, "ui": { "keys": 0, "widthName": 61, "widthComment": 60, - "widthDataType": 65, + "widthDataType": 60, "widthDefault": 60 }, "meta": { - "updateAt": 1745819764139, + "updateAt": 1747124987001, "createAt": 1745819764139 } }, @@ -2738,7 +2734,7 @@ "comment": "", "dataType": "VARCHAR(20)", "default": "'use'", - "options": 0, + "options": 8, "ui": { "keys": 0, "widthName": 60, @@ -2747,7 +2743,7 @@ "widthDefault": 60 }, "meta": { - "updateAt": 1746603828534, + "updateAt": 1747124656324, "createAt": 1745819764139 } }, @@ -3120,7 +3116,7 @@ "default": "", "options": 8, "ui": { - "keys": 2, + "keys": 0, "widthName": 80, "widthComment": 60, "widthDataType": 60, @@ -3140,7 +3136,7 @@ "default": "", "options": 8, "ui": { - "keys": 2, + "keys": 0, "widthName": 65, "widthComment": 60, "widthDataType": 60, @@ -4100,7 +4096,7 @@ "default": "", "options": 8, "ui": { - "keys": 2, + "keys": 0, "widthName": 76, "widthComment": 60, "widthDataType": 60, @@ -4140,7 +4136,7 @@ "default": "", "options": 8, "ui": { - "keys": 2, + "keys": 0, "widthName": 60, "widthComment": 60, "widthDataType": 60, @@ -5280,7 +5276,7 @@ "default": "", "options": 8, "ui": { - "keys": 2, + "keys": 0, "widthName": 89, "widthComment": 60, "widthDataType": 60, @@ -5298,7 +5294,7 @@ "comment": "제조일", "dataType": "TIMESTAMP", "default": "", - "options": 8, + "options": 0, "ui": { "keys": 0, "widthName": 78, @@ -5307,7 +5303,7 @@ "widthDefault": 60 }, "meta": { - "updateAt": 1746607630934, + "updateAt": 1747118914494, "createAt": 1746606232069 } }, @@ -5394,8 +5390,8 @@ "OwsCuEWoHNZ8zov4IClUR": { "id": "OwsCuEWoHNZ8zov4IClUR", "tableId": "GDEF0_WuOpaYtsZxjn2zM", - "name": "deposit", - "comment": "압금", + "name": "amount", + "comment": "압출금액", "dataType": "INT", "default": "0", "options": 8, @@ -5407,27 +5403,27 @@ "widthDefault": 60 }, "meta": { - "updateAt": 1746609911817, + "updateAt": 1747124730978, "createAt": 1746609884642 } }, "-egu-8EQDsUJcOi-nzl74": { "id": "-egu-8EQDsUJcOi-nzl74", "tableId": "GDEF0_WuOpaYtsZxjn2zM", - "name": "withdrawal", - "comment": "출금", - "dataType": "INT", - "default": "0", + "name": "status", + "comment": "", + "dataType": "VARCHAR(20)", + "default": "'in'", "options": 8, "ui": { "keys": 0, "widthName": 60, "widthComment": 60, - "widthDataType": 60, + "widthDataType": 75, "widthDefault": 60 }, "meta": { - "updateAt": 1746609918332, + "updateAt": 1747124775479, "createAt": 1746609884642 } }, @@ -5675,7 +5671,7 @@ "id": "kXkNsvdbXOcI-DslovgVa", "tableId": "RMhrLs7bOaopKmKt9YKHQ", "name": "capacity", - "comment": "속도(HZ)", + "comment": "성능", "dataType": "INT", "default": "", "options": 8, @@ -5687,7 +5683,7 @@ "widthDefault": 60 }, "meta": { - "updateAt": 1746783477990, + "updateAt": 1747117842173, "createAt": 1746783443622 } }, @@ -5834,20 +5830,20 @@ "7oTkP7etYsNgI6J6xQZVG": { "id": "7oTkP7etYsNgI6J6xQZVG", "tableId": "IhXnqMFBU_GmCvISNyaKj", - "name": "cpuinfo_uid", + "name": "partinfo_uid", "comment": "", "dataType": "INT", "default": "", "options": 8, "ui": { "keys": 2, - "widthName": 64, + "widthName": 66, "widthComment": 60, "widthDataType": 60, "widthDefault": 60 }, "meta": { - "updateAt": 1746783639303, + "updateAt": 1747119238434, "createAt": 1746783631248 } }, @@ -5860,7 +5856,7 @@ "default": "", "options": 8, "ui": { - "keys": 2, + "keys": 0, "widthName": 65, "widthComment": 60, "widthDataType": 60, @@ -5974,20 +5970,20 @@ "ox7xu7XaYBZyB2alu2HcK": { "id": "ox7xu7XaYBZyB2alu2HcK", "tableId": "gYqhvNLZjWrQk8LNKH3il", - "name": "cpuinfo_uid", + "name": "partinfo_uid", "comment": "", "dataType": "INT", "default": "", "options": 8, "ui": { "keys": 2, - "widthName": 64, + "widthName": 66, "widthComment": 60, "widthDataType": 60, "widthDefault": 60 }, "meta": { - "updateAt": 1746783827263, + "updateAt": 1747117938945, "createAt": 1746783814940 } }, @@ -6080,7 +6076,7 @@ "default": "", "options": 8, "ui": { - "keys": 2, + "keys": 0, "widthName": 80, "widthComment": 60, "widthDataType": 60, @@ -6100,7 +6096,7 @@ "default": "", "options": 8, "ui": { - "keys": 2, + "keys": 0, "widthName": 65, "widthComment": 60, "widthDataType": 60, @@ -6375,7 +6371,7 @@ "id": "HlUwkGDQIzvSXKilnVmeR", "tableId": "xrgAG9Zc_whfxTeGQ2fqx", "name": "clientinfo_uid", - "comment": "", + "comment": "소유자", "dataType": "INT", "default": "", "options": 0, @@ -6387,7 +6383,7 @@ "widthDefault": 60 }, "meta": { - "updateAt": 1747033328600, + "updateAt": 1747118605268, "createAt": 1747033067366 } }, @@ -6395,7 +6391,7 @@ "id": "F6TXYV3uwRzb-aZYCmf5x", "tableId": "B4qGh3KZsXHQ3_4EOgwJZ", "name": "clientinfo_uid", - "comment": "", + "comment": "소유자", "dataType": "INT", "default": "", "options": 0, @@ -6407,9 +6403,169 @@ "widthDefault": 60 }, "meta": { - "updateAt": 1747033357069, + "updateAt": 1747118585059, "createAt": 1747033130118 } + }, + "-Vr-igaSkx5zEcVp0oUGN": { + "id": "-Vr-igaSkx5zEcVp0oUGN", + "tableId": "RMhrLs7bOaopKmKt9YKHQ", + "name": "type", + "comment": "", + "dataType": "VARCHAR(20)", + "default": "'CPU'", + "options": 8, + "ui": { + "keys": 0, + "widthName": 60, + "widthComment": 60, + "widthDataType": 75, + "widthDefault": 60 + }, + "meta": { + "updateAt": 1747117823480, + "createAt": 1747117813787 + } + }, + "ha72QbBWfvyRymsyFBov8": { + "id": "ha72QbBWfvyRymsyFBov8", + "tableId": "RMhrLs7bOaopKmKt9YKHQ", + "name": "clientinfo_uid", + "comment": "소유자", + "dataType": "INT", + "default": "", + "options": 8, + "ui": { + "keys": 2, + "widthName": 73, + "widthComment": 60, + "widthDataType": 60, + "widthDefault": 60 + }, + "meta": { + "updateAt": 1747118591540, + "createAt": 1747118545119 + } + }, + "GnoGvT4HaG9kp-BvwZ4FQ": { + "id": "GnoGvT4HaG9kp-BvwZ4FQ", + "tableId": "RMhrLs7bOaopKmKt9YKHQ", + "name": "manufactur_at", + "comment": "제조일", + "dataType": "TIMESTAMP", + "default": "", + "options": 0, + "ui": { + "keys": 0, + "widthName": 78, + "widthComment": 60, + "widthDataType": 65, + "widthDefault": 60 + }, + "meta": { + "updateAt": 1747118918222, + "createAt": 1747118813753 + } + }, + "vnQRLYgWHQ8AgJkfbs2a3": { + "id": "vnQRLYgWHQ8AgJkfbs2a3", + "tableId": "xrgAG9Zc_whfxTeGQ2fqx", + "name": "manufactur_at", + "comment": "제조일", + "dataType": "TIMESTAMP", + "default": "", + "options": 0, + "ui": { + "keys": 0, + "widthName": 78, + "widthComment": 60, + "widthDataType": 65, + "widthDefault": 60 + }, + "meta": { + "updateAt": 1747118911046, + "createAt": 1747118831111 + } + }, + "C-iSSJV5sjbkmpIKBx4Km": { + "id": "C-iSSJV5sjbkmpIKBx4Km", + "tableId": "5AUwJum9FKPCoYRMBhLnF", + "name": "amount", + "comment": "압출금액", + "dataType": "INT", + "default": "0", + "options": 8, + "ui": { + "keys": 0, + "widthName": 60, + "widthComment": 60, + "widthDataType": 60, + "widthDefault": 60 + }, + "meta": { + "updateAt": 1747124828013, + "createAt": 1747124828013 + } + }, + "txROOkHVXSfJOTHlU5mdz": { + "id": "txROOkHVXSfJOTHlU5mdz", + "tableId": "5AUwJum9FKPCoYRMBhLnF", + "name": "status", + "comment": "", + "dataType": "VARCHAR(20)", + "default": "'in'", + "options": 8, + "ui": { + "keys": 0, + "widthName": 60, + "widthComment": 60, + "widthDataType": 75, + "widthDefault": 60 + }, + "meta": { + "updateAt": 1747124828013, + "createAt": 1747124828013 + } + }, + "TFkQ1ID6ShcMqf9wLGEP1": { + "id": "TFkQ1ID6ShcMqf9wLGEP1", + "tableId": "jO40Ej5EXImXnadoJo9bn", + "name": "amount", + "comment": "갯수", + "dataType": "INT", + "default": "0", + "options": 8, + "ui": { + "keys": 0, + "widthName": 60, + "widthComment": 60, + "widthDataType": 60, + "widthDefault": 60 + }, + "meta": { + "updateAt": 1747124875293, + "createAt": 1747124839902 + } + }, + "DSAUgD7rG7Lzm2-jVWKA3": { + "id": "DSAUgD7rG7Lzm2-jVWKA3", + "tableId": "jO40Ej5EXImXnadoJo9bn", + "name": "status", + "comment": "", + "dataType": "VARCHAR(20)", + "default": "'in'", + "options": 8, + "ui": { + "keys": 0, + "widthName": 60, + "widthComment": 60, + "widthDataType": 75, + "widthDefault": 60 + }, + "meta": { + "updateAt": 1747124839902, + "createAt": 1747124839902 + } } }, "relationshipEntities": { @@ -6452,7 +6608,7 @@ "F9EPb6nsDx6Tf3GG8rvP1" ], "x": 2732.1847, - "y": 2430.0849, + "y": 2350.0849, "direction": 2 }, "end": { @@ -6460,8 +6616,8 @@ "columnIds": [ "pDILaJt_-vUo0fH_c6t2O" ], - "x": 3253.684, - "y": 3276.4119, + "x": 2998.8895, + "y": 2445.4365, "direction": 1 }, "meta": { @@ -6469,34 +6625,6 @@ "createAt": 1745819764143 } }, - "yTGnmFSvbFdY5rWfr010W": { - "id": "yTGnmFSvbFdY5rWfr010W", - "identification": false, - "relationshipType": 16, - "startRelationshipType": 2, - "start": { - "tableId": "z6WAw_7GnarTYkag4Lcsg", - "columnIds": [ - "7fB6MgwIX6jMpD6d2Sq7k" - ], - "x": 2712.382, - "y": 3204.1831, - "direction": 2 - }, - "end": { - "tableId": "IhXnqMFBU_GmCvISNyaKj", - "columnIds": [ - "5kPFX9LYoh8iinAEpt3lm" - ], - "x": 3253.684, - "y": 3366.0119000000004, - "direction": 1 - }, - "meta": { - "updateAt": 1746576114573, - "createAt": 1745819764143 - } - }, "WXDbQNvgLU6e2AEqZl8If": { "id": "WXDbQNvgLU6e2AEqZl8If", "identification": false, @@ -6535,7 +6663,7 @@ "columnIds": [ "nb5CGzskl3_LIRA0yyede" ], - "x": 212.09386666666666, + "x": 233.6772, "y": 1144.4514, "direction": 8 }, @@ -6563,7 +6691,7 @@ "columnIds": [ "nb5CGzskl3_LIRA0yyede" ], - "x": 643.7605333333333, + "x": 622.1772, "y": 1144.4514, "direction": 8 }, @@ -6609,62 +6737,6 @@ "createAt": 1745819764143 } }, - "-ehlfECxBa5BFIg6kMnvT": { - "id": "-ehlfECxBa5BFIg6kMnvT", - "identification": false, - "relationshipType": 16, - "startRelationshipType": 2, - "start": { - "tableId": "kc1EFvFhlBSc0B0bDgX28", - "columnIds": [ - "nb5CGzskl3_LIRA0yyede" - ], - "x": 471.0938666666666, - "y": 1144.4514, - "direction": 8 - }, - "end": { - "tableId": "aKTVtMqmPG7TJIsmxeVts", - "columnIds": [ - "ywDnRAz0bbHUceo-EmLgZ" - ], - "x": 1174.052, - "y": 2598.8066, - "direction": 1 - }, - "meta": { - "updateAt": 1746604524330, - "createAt": 1745819764143 - } - }, - "DpudF8iv_Pam0hOxkXJHx": { - "id": "DpudF8iv_Pam0hOxkXJHx", - "identification": false, - "relationshipType": 16, - "startRelationshipType": 2, - "start": { - "tableId": "z6WAw_7GnarTYkag4Lcsg", - "columnIds": [ - "7fB6MgwIX6jMpD6d2Sq7k" - ], - "x": 2215.382, - "y": 3204.1831, - "direction": 1 - }, - "end": { - "tableId": "aKTVtMqmPG7TJIsmxeVts", - "columnIds": [ - "sn3p4UDiY4D9XJS4odHbP" - ], - "x": 1689.052, - "y": 2598.8066, - "direction": 2 - }, - "meta": { - "updateAt": 1746604467737, - "createAt": 1745819764143 - } - }, "qrtpEEOK_OBwxcghJlb0I": { "id": "qrtpEEOK_OBwxcghJlb0I", "identification": false, @@ -6675,7 +6747,7 @@ "columnIds": [ "nb5CGzskl3_LIRA0yyede" ], - "x": 298.42719999999997, + "x": 363.17719999999997, "y": 1144.4514, "direction": 8 }, @@ -6684,8 +6756,8 @@ "columnIds": [ "CgGKx59wNvLpWcoBrEuvK" ], - "x": 1160.8801, - "y": 3048.9244, + "x": 1173.2087, + "y": 2711.9385, "direction": 1 }, "meta": { @@ -6703,8 +6775,8 @@ "columnIds": [ "2HB01q46-mugMjuOz85YG" ], - "x": 2213.9302, - "y": 3792.4005, + "x": 2231.0033, + "y": 3068.0102, "direction": 1 }, "end": { @@ -6712,8 +6784,8 @@ "columnIds": [ "AKpf8UbHiwRJll36PQR6f" ], - "x": 1684.8801, - "y": 3048.9244, + "x": 1697.2087, + "y": 2711.9385, "direction": 2 }, "meta": { @@ -6859,62 +6931,6 @@ "createAt": 1745819764143 } }, - "Jj6R_4lq6u3hMzLKjgqc9": { - "id": "Jj6R_4lq6u3hMzLKjgqc9", - "identification": false, - "relationshipType": 16, - "startRelationshipType": 2, - "start": { - "tableId": "B4qGh3KZsXHQ3_4EOgwJZ", - "columnIds": [ - "F9EPb6nsDx6Tf3GG8rvP1" - ], - "x": 2732.1847, - "y": 2270.0849, - "direction": 2 - }, - "end": { - "tableId": "h2unshrMDFXEq0pYzkkj1", - "columnIds": [ - "eh3Ubc6NIftsQEbE3kq-v" - ], - "x": 3198.8062, - "y": 1967.3342, - "direction": 1 - }, - "meta": { - "updateAt": 1745820865008, - "createAt": 1745820865008 - } - }, - "hHtOx5fLjgkRN3SIPGLfw": { - "id": "hHtOx5fLjgkRN3SIPGLfw", - "identification": false, - "relationshipType": 16, - "startRelationshipType": 2, - "start": { - "tableId": "ZLEpY5EjuZV21718zf-Y1", - "columnIds": [ - "Id0h8QbOdlhPj9P1zTm5o" - ], - "x": 2711.123, - "y": 1536.6199, - "direction": 2 - }, - "end": { - "tableId": "h2unshrMDFXEq0pYzkkj1", - "columnIds": [ - "-VaB7wQ3cQKai3peK85u8" - ], - "x": 3198.8062, - "y": 1891.3342, - "direction": 1 - }, - "meta": { - "updateAt": 1745820911647, - "createAt": 1745820911647 - } - }, "4BDt10BeeryoN0ZdEHIui": { "id": "4BDt10BeeryoN0ZdEHIui", "identification": false, @@ -6926,7 +6942,7 @@ "_AcWUYKzNJd-V0fRHq8Cx" ], "x": 1701.0947, - "y": 901.4689333333332, + "y": 888.1356, "direction": 2 }, "end": { @@ -7038,7 +7054,7 @@ "r7fMKgeUcNq4FhYZPN3h8" ], "x": 2201.231, - "y": 2016.7664, + "y": 2034.7664, "direction": 1 }, "end": { @@ -7055,34 +7071,6 @@ "createAt": 1746604423391 } }, - "zJIufcYlZwkLRJbg3kScu": { - "id": "zJIufcYlZwkLRJbg3kScu", - "identification": false, - "relationshipType": 16, - "startRelationshipType": 2, - "start": { - "tableId": "ZMGIWLFEswObjH2Sx0NlW", - "columnIds": [ - "2HB01q46-mugMjuOz85YG" - ], - "x": 2710.9302, - "y": 3792.4005, - "direction": 2 - }, - "end": { - "tableId": "IhXnqMFBU_GmCvISNyaKj", - "columnIds": [ - "dLOesaVz9GnwntiIyvxwW" - ], - "x": 3253.684, - "y": 3455.611900000001, - "direction": 1 - }, - "meta": { - "updateAt": 1746605122397, - "createAt": 1746605122397 - } - }, "bjgW7pAqSUOi68Ah2H-ua": { "id": "bjgW7pAqSUOi68Ah2H-ua", "identification": false, @@ -7121,8 +7109,8 @@ "columnIds": [ "Jh6e_-9QYe1Tqve0PE3kT" ], - "x": 2708.7152, - "y": 2902.3776, + "x": 2736.1253, + "y": 2722.5239, "direction": 2 }, "end": { @@ -7130,8 +7118,8 @@ "columnIds": [ "7oTkP7etYsNgI6J6xQZVG" ], - "x": 3253.684, - "y": 3321.2119000000002, + "x": 2998.8895, + "y": 2521.4365, "direction": 1 }, "meta": { @@ -7159,7 +7147,7 @@ "qHwMDFU4dV5frDXsuW445" ], "x": 3253.684, - "y": 3410.8119000000006, + "y": 3429.0119, "direction": 1 }, "meta": { @@ -7177,7 +7165,7 @@ "columnIds": [ "nb5CGzskl3_LIRA0yyede" ], - "x": 557.4272, + "x": 492.67719999999997, "y": 1144.4514, "direction": 8 }, @@ -7186,8 +7174,8 @@ "columnIds": [ "YKXKsIEJE-vmIMQd5ZUMC" ], - "x": 1175.4631, - "y": 2353.2524, + "x": 1176.833, + "y": 2373.8003, "direction": 1 }, "meta": { @@ -7205,8 +7193,8 @@ "columnIds": [ "Jh6e_-9QYe1Tqve0PE3kT" ], - "x": 2211.7152, - "y": 2902.3776, + "x": 2223.1253, + "y": 2722.5239, "direction": 1 }, "end": { @@ -7214,8 +7202,8 @@ "columnIds": [ "ox7xu7XaYBZyB2alu2HcK" ], - "x": 1690.4631, - "y": 2353.2524, + "x": 1691.833, + "y": 2373.8003, "direction": 2 }, "meta": { @@ -7402,7 +7390,7 @@ "_AcWUYKzNJd-V0fRHq8Cx" ], "x": 1701.0947, - "y": 1008.1355999999998, + "y": 968.1356, "direction": 2 }, "end": { @@ -7411,7 +7399,7 @@ "HlUwkGDQIzvSXKilnVmeR" ], "x": 2201.231, - "y": 1868.7664, + "y": 1874.7664, "direction": 1 }, "meta": { @@ -7430,7 +7418,7 @@ "_AcWUYKzNJd-V0fRHq8Cx" ], "x": 1701.0947, - "y": 1114.8022666666666, + "y": 1048.1356, "direction": 2 }, "end": { @@ -7446,6 +7434,34 @@ "updateAt": 1747033130118, "createAt": 1747033130118 } + }, + "STHM-pzaTO72SEkIGYTCA": { + "id": "STHM-pzaTO72SEkIGYTCA", + "identification": false, + "relationshipType": 16, + "startRelationshipType": 2, + "start": { + "tableId": "6ajvOCaGuXU9pzV0Y9jEi", + "columnIds": [ + "_AcWUYKzNJd-V0fRHq8Cx" + ], + "x": 1701.0947, + "y": 1128.1356, + "direction": 2 + }, + "end": { + "tableId": "RMhrLs7bOaopKmKt9YKHQ", + "columnIds": [ + "ha72QbBWfvyRymsyFBov8" + ], + "x": 2479.6253, + "y": 2562.5239, + "direction": 4 + }, + "meta": { + "updateAt": 1747118545120, + "createAt": 1747118545120 + } } }, "indexEntities": {}, diff --git a/app/Entities/Customer/ServiceEntity.php b/app/Entities/Customer/ServiceEntity.php new file mode 100644 index 0000000..0de66a3 --- /dev/null +++ b/app/Entities/Customer/ServiceEntity.php @@ -0,0 +1,16 @@ +attributes['amount']; + } +} diff --git a/app/Entities/Equipment/PartEntity.php b/app/Entities/Equipment/PartEntity.php index aa9b7e5..fafcb69 100644 --- a/app/Entities/Equipment/PartEntity.php +++ b/app/Entities/Equipment/PartEntity.php @@ -8,9 +8,4 @@ class PartEntity extends EquipmentEntity { const PK = PartModel::PK; const TITLE = PartModel::TITLE; - - public function getAmount() - { - return $this->attributes['amount']; - } } diff --git a/app/Entities/Equipment/SoftwareEntity.php b/app/Entities/Equipment/SoftwareEntity.php index ff13552..a976bd0 100644 --- a/app/Entities/Equipment/SoftwareEntity.php +++ b/app/Entities/Equipment/SoftwareEntity.php @@ -8,9 +8,4 @@ class SoftwareEntity extends EquipmentEntity { const PK = SoftwareModel::PK; const TITLE = SoftwareModel::TITLE; - - public function getAmount() - { - return $this->attributes['amount']; - } } diff --git a/app/Entities/UserEntity.php b/app/Entities/UserEntity.php index 34e1ef9..d8fbdcb 100644 --- a/app/Entities/UserEntity.php +++ b/app/Entities/UserEntity.php @@ -14,6 +14,10 @@ class UserEntity extends CommonEntity { return $this->attributes['id']; } + public function getPassword(): string + { + return $this->attributes['passwd']; + } public function getRole(): string { return $this->attributes['role']; diff --git a/app/Helpers/CommonHelper.php b/app/Helpers/CommonHelper.php index 94d03f3..279401c 100644 --- a/app/Helpers/CommonHelper.php +++ b/app/Helpers/CommonHelper.php @@ -242,9 +242,19 @@ class CommonHelper $form = form_dropdown($field, $formOptions, $value, $extras); } break; + case 'clientinfo_uid': + if (!is_array($viewDatas['field_options'][$field])) { + throw new \Exception(__METHOD__ . "에서 {$field}의 field_options가 array형태가 아닙니다."); + } + $extra_class = isset($extras['class']) ? $extras['class'] . ' select-field' : 'select-field'; + $formOptions = ["" => lang($viewDatas['class_path'] . '.label.' . $field) . ' 선택']; + foreach ($viewDatas['field_options'][$field] as $key => $label) { + $formOptions[$key] = $label; + } + $form = form_dropdown($field, $formOptions, $value, ['class' => $extra_class, ...array_diff_key($extras, ['class' => ''])]); + break; case 'updated_at': case 'created_at': - case 'manufactur_at': $extra_class = isset($extras['class']) ? $extras['class'] . ' calender' : 'calender'; $form = form_input($field, $value ?? "", ['class' => $extra_class, ...array_diff_key($extras, ['class' => ''])]); break; @@ -257,11 +267,13 @@ class CommonHelper if (!is_array($viewDatas['field_options'][$field])) { throw new \Exception(__METHOD__ . "에서 {$field}의 field_options가 array형태가 아닙니다."); } + // $extra_class = isset($extras['class']) ? $extras['class'] . ' select-field' : 'select-field'; + $extra_class = isset($extras['class']) ? $extras['class'] : ""; $formOptions = ["" => lang($viewDatas['class_path'] . '.label.' . $field) . ' 선택']; foreach ($viewDatas['field_options'][$field] as $key => $label) { $formOptions[$key] = $label; } - $form = form_dropdown($field, $formOptions, $value, $extras); + $form = form_dropdown($field, $formOptions, $value, ['class' => $extra_class, ...array_diff_key($extras, ['class' => ''])]); } else { $form = form_input($field, $value ?? "", ["autocomplete" => $field, ...$extras]); } @@ -287,15 +299,6 @@ class CommonHelper ] ); break; - case 'category_uid': - foreach (array_values($viewDatas['field_options'][$field]) as $category_2depths) { - foreach ($category_2depths as $key => $depth) { - if ($key == $depth) { - $value = $depth; - } - } - } - break; case 'user_uid': $user_uids = []; foreach (explode(DEFAULTS["DELIMITER_ROLE"], $value) as $key) { @@ -312,7 +315,6 @@ class CommonHelper break; case 'updated_at': case 'created_at': - case 'manufactur_at': $value = $value ? date("Y-m-d", strtotime($value)) : ""; break; default: diff --git a/app/Helpers/Customer/ServiceHelper.php b/app/Helpers/Customer/ServiceHelper.php new file mode 100644 index 0000000..f2b1f76 --- /dev/null +++ b/app/Helpers/Customer/ServiceHelper.php @@ -0,0 +1,50 @@ +setTitleField(field: ServiceModel::TITLE); + } + public function getFieldForm(string $field, mixed $value, array $viewDatas, array $extras = []): string + { + if (in_array($viewDatas['action'], ['create', 'modify'])) { + $extras = (strpos($viewDatas['field_rules'][$field], 'required') !== false) ? ["class" => "form-control", "required" => "", ...$extras] : ["class" => "form-control", ...$extras]; + } + switch ($field) { + case 'payment_date': + case 'startdate_at': + case 'enddate_at': + $extra_class = isset($extras['class']) ? $extras['class'] . ' calender' : 'calender'; + $form = form_input($field, $value ?? "", ['class' => $extra_class, ...array_diff_key($extras, ['class' => ''])]); + break; + default: + $form = parent::getFieldForm($field, $value, $viewDatas, $extras); + break; + } + return $form; + } // + public function getFieldView(string $field, array $viewDatas, array $extras = []): string + { + $value = $viewDatas['entity']->$field ?? ""; + switch ($field) { + case 'payment_date': + case 'startdate_at': + case 'enddate_at': + $value = $value ? date("Y-m-d", strtotime($value)) : ""; + break; + + default: + $value = parent::getFieldView($field, $viewDatas, $extras); + break; + } + return $value; + } +} diff --git a/app/Helpers/Equipment/EquipmentHelper.php b/app/Helpers/Equipment/EquipmentHelper.php index 11afc12..0b6a54d 100644 --- a/app/Helpers/Equipment/EquipmentHelper.php +++ b/app/Helpers/Equipment/EquipmentHelper.php @@ -27,14 +27,27 @@ class EquipmentHelper extends CommonHelper ); $form = form_dropdown($field, $formOptions, $value, $extras); break; + case 'manufactur_at': + $extra_class = isset($extras['class']) ? $extras['class'] . ' calender' : 'calender'; + $form = form_input($field, $value ?? "", ['class' => $extra_class, ...array_diff_key($extras, ['class' => ''])]); + break; default: $form = parent::getFieldForm($field, $value, $viewDatas, $extras); break; } return $form; } // - public function getListRowColor(mixed $entity, string $field = 'status', string $value = 'use'): string + public function getFieldView(string $field, array $viewDatas, array $extras = []): string { - return $entity->isMatched($field, $value) ? "" : 'class="table-danger"'; + $value = $viewDatas['entity']->$field ?? ""; + switch ($field) { + case 'manufactur_at': + $value = $value ? date("Y-m-d", strtotime($value)) : ""; + break; + default: + $value = parent::getFieldView($field, $viewDatas, $extras); + break; + } + return $value; } } diff --git a/app/Language/en/Customer/Service.php b/app/Language/en/Customer/Service.php new file mode 100644 index 0000000..bde38c6 --- /dev/null +++ b/app/Language/en/Customer/Service.php @@ -0,0 +1,29 @@ + "고객서비스정보", + 'label' => [ + 'clientinfo_uid' => "고객명", + 'type' => "종류", + 'title' => "제목", + 'payment_date' => "결제일", + 'amount' => "결제금액", + 'startdate_at' => "시작일", + 'enddate_at' => "해지일", + 'status' => "상태", + 'updated_at' => "수정일", + 'created_at' => "작성일", + ], + 'DEFAULTS' => [ + 'type' => "hosting", + 'status' => "use" + ], + "TYPE" => [ + "hosting" => "서버호스팅", + "colocation" => "코로케이션", + ], + "STATUS" => [ + "use" => "사용중", + "pause" => "일시정지", + "terminated" => "해지", + ], +]; diff --git a/app/Language/en/Equipment/Line.php b/app/Language/en/Equipment/Line.php index fe0e235..3a3e60d 100644 --- a/app/Language/en/Equipment/Line.php +++ b/app/Language/en/Equipment/Line.php @@ -20,7 +20,7 @@ return [ "defence" => "빙아", ], "STATUS" => [ - "use" => "사용", + "use" => "사용가능", "pause" => "사용정지", "termination" => "해지", ], diff --git a/app/Language/en/Equipment/Network.php b/app/Language/en/Equipment/Network.php index 7b6a748..ec50b7f 100644 --- a/app/Language/en/Equipment/Network.php +++ b/app/Language/en/Equipment/Network.php @@ -9,6 +9,7 @@ return [ 'price' => "금액", 'description' => "설명", 'status' => "상태", + 'manufactur_at' => "제조일", 'updated_at' => "수정일", 'created_at' => "작성일", ], @@ -24,7 +25,7 @@ return [ "colocation" => "코로케이션", ], "STATUS" => [ - "use" => "사용", + "use" => "사용가능", "pause" => "수리중", "occupied" => "사용중", ], diff --git a/app/Language/en/Equipment/Part.php b/app/Language/en/Equipment/Part.php new file mode 100644 index 0000000..eb87719 --- /dev/null +++ b/app/Language/en/Equipment/Part.php @@ -0,0 +1,31 @@ + "부품장비정보", + 'label' => [ + 'clientinfo_uid' => "소유자명", + 'type' => "종류", + 'model' => "모델", + 'capacity' => "용량/성능", + 'price' => "금액", + 'description' => "설명", + 'status' => "상태", + 'manufactur_at' => "제조일", + 'updated_at' => "수정일", + 'created_at' => "작성일", + ], + 'DEFAULTS' => [ + 'type' => 'CPU', + 'status' => "use" + ], + "TYPE" => [ + "CPU" => "CPU", + "RAM" => "RAM", + "DISK" => "DISK", + "colocation" => "코로케이션", + ], + "STATUS" => [ + "use" => "사용가능", + "pause" => "수리중", + "occupied" => "사용중", + ], +]; diff --git a/app/Language/en/Equipment/Server.php b/app/Language/en/Equipment/Server.php index e69f723..6ee6675 100644 --- a/app/Language/en/Equipment/Server.php +++ b/app/Language/en/Equipment/Server.php @@ -14,20 +14,17 @@ return [ 'created_at' => "작성일", ], 'DEFAULTS' => [ - 'type' => 'L2', + 'type' => 'RacKMount', 'status' => "use" ], "TYPE" => [ - "normal" => "일반", - "kcs" => "KCS", - "vpc" => "VPC", - "jcs" => "JCS", - "VPN" => "VPN", - "defence" => "방어", + "Rack" => "RacKMount", + "PC" => "조립PC", + "MiniPC" => "MiniPC", "colocation" => "코로케이션", ], "STATUS" => [ - "use" => "사용", + "use" => "사용가능", "pause" => "수리중", "occupied" => "사용중", ], diff --git a/app/Language/en/Equipment/Software.php b/app/Language/en/Equipment/Software.php new file mode 100644 index 0000000..d369258 --- /dev/null +++ b/app/Language/en/Equipment/Software.php @@ -0,0 +1,28 @@ + "소프트웨어정보", + 'label' => [ + 'type' => "종류", + 'model' => "모델", + 'price' => "금액", + 'description' => "설명", + 'status' => "상태", + 'updated_at' => "수정일", + 'created_at' => "작성일", + ], + 'DEFAULTS' => [ + 'type' => 'Windows', + 'status' => "use" + ], + "TYPE" => [ + "Windows" => "Windows OS", + "Linux" => "Linux OS", + "Security" => "보안용", + "Virus" => "바이러스용", + "App" => "어플리케이션", + ], + "STATUS" => [ + "use" => "사용가능", + "occupied" => "사용중", + ], +]; diff --git a/app/Models/Customer/ServiceModel.php b/app/Models/Customer/ServiceModel.php new file mode 100644 index 0000000..00e298f --- /dev/null +++ b/app/Models/Customer/ServiceModel.php @@ -0,0 +1,64 @@ + field가 array 입니다.\n" . var_export($field, true)); + } + switch ($field) { + case "clientinfo_uid": + $rule = "required|numeric"; + break; + case "amount": + $rule = "if_exist|numeric"; + break; + case "title": + $rule = "required|trim|string"; + break; + case "type": + $rule = "required|in_list[hosting,colocation]"; + break; + case "status": + $rule = "required|in_list[use,pause,terminated]"; + break; + case "payment_date": + $rule = "required|valid_date"; + break; + case "startdate_at": + case "enddate_at": + case "deleted_at": + $rule = "if_exist|valid_date"; + default: + $rule = parent::getFieldRule($action, $field); + break; + } + return $rule; + } +} diff --git a/app/Models/Equipment/NetworkModel.php b/app/Models/Equipment/NetworkModel.php index 7f09364..0e0eebf 100644 --- a/app/Models/Equipment/NetworkModel.php +++ b/app/Models/Equipment/NetworkModel.php @@ -17,6 +17,7 @@ class NetworkModel extends EquipmentModel "code", "type", "model", + "manufactur_at", "price", "status", "description", @@ -43,7 +44,10 @@ class NetworkModel extends EquipmentModel $rule = "required|trim|string"; break; case "type": - $rule = "required|in_list[L2,L3,L4,Router]"; + $rule = "required|in_list[L2,L3,L4,Router,colocation]"; + break; + case "manufactur_at": + $rule = "required|valid_date"; break; case "status": $rule = "required|in_list[use,pause,occupied]"; diff --git a/app/Models/Equipment/PartModel.php b/app/Models/Equipment/PartModel.php index 6d1e473..68d1a39 100644 --- a/app/Models/Equipment/PartModel.php +++ b/app/Models/Equipment/PartModel.php @@ -8,15 +8,20 @@ class PartModel extends EquipmentModel { const TABLE = "partinfo"; const PK = "uid"; - const TITLE = "title"; + const TITLE = "model"; protected $table = self::TABLE; protected $primaryKey = self::PK; protected $returnType = PartEntity::class; protected $allowedFields = [ "clientinfo_uid", + "code", + "type", + "model", + "manufactur_at", + "capacity", + "price", "status", - "title", - "amount", + "description", "updated_at" ]; public function __construct() @@ -30,14 +35,27 @@ class PartModel extends EquipmentModel } switch ($field) { case "clientinfo_uid": - case "amount": + $rule = "if_exist|numeric"; + break; + case "capacity": + case "price": $rule = "required|numeric"; break; - case "title": + case "code": + case "model": $rule = "required|trim|string"; break; + case "type": + $rule = "required|in_list[CPU,RAM,DISK,colocation]"; + break; + case "manufactur_at": + $rule = "required|valid_date"; + break; case "status": - $rule = "required|in_list[in,out]"; + $rule = "required|in_list[use,pause,occupied]"; + break; + case "description": + $rule = "if_exist|trim|string"; break; default: $rule = parent::getFieldRule($action, $field); diff --git a/app/Models/Equipment/ServerModel.php b/app/Models/Equipment/ServerModel.php index 2bab4c9..37cd6b8 100644 --- a/app/Models/Equipment/ServerModel.php +++ b/app/Models/Equipment/ServerModel.php @@ -44,7 +44,10 @@ class ServerModel extends EquipmentModel $rule = "required|trim|string"; break; case "type": - $rule = "required|in_list[normal,kcs,vpc,jcs,vpn,defence,clocation]"; + $rule = "required|in_list[Rack,PC,MiniPC,clocation]"; + break; + case "manufactur_at": + $rule = "required|valid_date"; break; case "status": $rule = "required|in_list[use,pause,occupied]"; @@ -52,9 +55,6 @@ class ServerModel extends EquipmentModel case "description": $rule = "if_exist|trim|string"; break; - case "manufactur_at": - $rule = "required|valid_date"; - break; default: $rule = parent::getFieldRule($action, $field); break; diff --git a/app/Models/Equipment/SoftwareModel.php b/app/Models/Equipment/SoftwareModel.php index e97a725..dab911d 100644 --- a/app/Models/Equipment/SoftwareModel.php +++ b/app/Models/Equipment/SoftwareModel.php @@ -6,17 +6,19 @@ use App\Entities\Equipment\SoftwareEntity; class SoftwareModel extends EquipmentModel { - const TABLE = "serverinfo"; + const TABLE = "softwareinfo"; const PK = "uid"; - const TITLE = "title"; + const TITLE = "model"; protected $table = self::TABLE; protected $primaryKey = self::PK; protected $returnType = SoftwareEntity::class; protected $allowedFields = [ "clientinfo_uid", + "type", + "model", + "price", "status", - "title", - "amount", + "description", "updated_at" ]; public function __construct() @@ -29,15 +31,20 @@ class SoftwareModel extends EquipmentModel throw new \Exception(__FUNCTION__ . "=> field가 array 입니다.\n" . var_export($field, true)); } switch ($field) { - case "clientinfo_uid": - case "amount": + case "price": $rule = "required|numeric"; break; - case "title": + case "model": $rule = "required|trim|string"; break; + case "type": + $rule = "required|in_list[Windows,Linux,Security,Virus,App]"; + break; case "status": - $rule = "required|in_list[in,out]"; + $rule = "required|in_list[use,occupied]"; + break; + case "description": + $rule = "if_exist|trim|string"; break; default: $rule = parent::getFieldRule($action, $field); diff --git a/app/Services/Auth/LocalService.php b/app/Services/Auth/LocalService.php index 6ebefb4..1e0e8b1 100644 --- a/app/Services/Auth/LocalService.php +++ b/app/Services/Auth/LocalService.php @@ -41,11 +41,11 @@ class LocalService extends AuthService public function checkUser(array $formDatas): UserEntity { - $entity = $this->getEntity(['id' => $formDatas['id']]); - if (is_null($entity) || !isset($entity->passwd)) { + $entity = $this->getEntity(['id' => $formDatas['id'], 'status' => 'use']); + if (is_null($entity)) { throw new \Exception("사용자ID: {$formDatas['id']}가 존재하지 않습니다."); } - if (!password_verify($formDatas['passwd'], $entity->passwd)) { + if (!password_verify($formDatas['passwd'], $entity->getPassword())) { // log_message("error", "암호: {$formDatas['passwd']}, {$entity->passwd}"); throw new \Exception("암호가 맞지 않습니다."); } diff --git a/app/Services/Customer/ServiceService.php b/app/Services/Customer/ServiceService.php new file mode 100644 index 0000000..55a1ca6 --- /dev/null +++ b/app/Services/Customer/ServiceService.php @@ -0,0 +1,49 @@ + Point내역 +
+ 서비스내역 +
청구내역
diff --git a/public/css/admin/form.css b/public/css/admin/form.css index 7440ad5..8276f4f 100644 --- a/public/css/admin/form.css +++ b/public/css/admin/form.css @@ -25,4 +25,10 @@ div.action_form table td { /* 자동 줄바꿈 */ } -/* create,modify,view 페이지용 */ \ No newline at end of file +/* create,modify,view 페이지용 */ + +/*Form 안에서 datepicker 사용시*/ +/* datepicker의 z-index를 높여서 다른 요소 위에 표시되도록 설정 tinyMCE와 겹치는 문제 처리용용*/ +.ui-datepicker { + z-index: 9999 !important; +} \ No newline at end of file diff --git a/public/css/front/form.css b/public/css/front/form.css index 7440ad5..8276f4f 100644 --- a/public/css/front/form.css +++ b/public/css/front/form.css @@ -25,4 +25,10 @@ div.action_form table td { /* 자동 줄바꿈 */ } -/* create,modify,view 페이지용 */ \ No newline at end of file +/* create,modify,view 페이지용 */ + +/*Form 안에서 datepicker 사용시*/ +/* datepicker의 z-index를 높여서 다른 요소 위에 표시되도록 설정 tinyMCE와 겹치는 문제 처리용용*/ +.ui-datepicker { + z-index: 9999 !important; +} \ No newline at end of file