diff --git a/app/Config/Constants.php b/app/Config/Constants.php index 6ed2263..c2f56a9 100644 --- a/app/Config/Constants.php +++ b/app/Config/Constants.php @@ -362,25 +362,10 @@ define('LAYOUTS', [ //List의 Page당 갯수 define('DEFAULT_LIST_PERPAGE', $_ENV['LIST_PERPAGE'] ?? $_SERVER['LIST_PERPAGE'] ?? 20); -//서비스별 아이템 타입 -define('SERVICE_ITEM_TYPES', $_ENV['SERVICEINFO_ITEM_TYPES'] - ?? $_SERVER['SERVICEINFO_ITEM_TYPES'] - ?? [ - "LINE" => "라인", - "IP" => "IP주소", - "SERVER" => "서버", - "CPU" => "CPU", - "RAM" => "메모리", - "STORAGE" => "저장장치", - "SOFTWARE" => "소프트웨어", - "DEFENCE" => "방어(CS)", - "DOMAIN" => "도메인", - ]); - //신규서비스 Interval define('SERVICE_NEW_INTERVAL', $_ENV['SERVICE_NEW_INTERVAL'] ?? $_SERVER['SERVICE_NEW_INTERVAL'] ?? 7); -//미지급 Item_type -define('SERVICE_UNPAID_ITEM_TYPE', $_ENV['SERVICE_UNPAID_ITEM_TYPE'] ?? $_SERVER['SERVICE_UNPAID_ITEM_TYPE'] ?? "SERVER"); + +//사이트 접두사 정의 define( 'SITE_PREFIX', [ diff --git a/app/Config/Routes.php b/app/Config/Routes.php index 9defc22..eef2e0f 100644 --- a/app/Config/Routes.php +++ b/app/Config/Routes.php @@ -193,17 +193,17 @@ $routes->group('admin', ['namespace' => 'App\Controllers\Admin', 'filter' => 'au $routes->get('download/(:alpha)', 'LineController::download/$1'); }); $routes->group('ip', ['namespace' => 'App\Controllers\Admin\Equipment'], function ($routes) { - $routes->get('/', 'IpController::index'); - $routes->get('create', 'IpController::create_form'); - $routes->post('create', 'IpController::create'); - $routes->get('modify/(:num)', 'IpController::modify_form/$1'); - $routes->post('modify/(:num)', 'IpController::modify/$1'); - $routes->get('view/(:num)', 'IpController::view/$1'); - $routes->get('delete/(:num)', 'IpController::delete/$1'); - $routes->get('toggle/(:num)/(:any)', 'IpController::toggle/$1/$2'); - $routes->post('batchjob', 'IpController::batchjob'); - $routes->post('batchjob_delete', 'IpController::batchjob_delete'); - $routes->get('download/(:alpha)', 'IpController::download/$1'); + $routes->get('/', 'IPController::index'); + $routes->get('create', 'IPController::create_form'); + $routes->post('create', 'IPController::create'); + $routes->get('modify/(:num)', 'IPController::modify_form/$1'); + $routes->post('modify/(:num)', 'IPController::modify/$1'); + $routes->get('view/(:num)', 'IPController::view/$1'); + $routes->get('delete/(:num)', 'IPController::delete/$1'); + $routes->get('toggle/(:num)/(:any)', 'IPController::toggle/$1/$2'); + $routes->post('batchjob', 'IPController::batchjob'); + $routes->post('batchjob_delete', 'IPController::batchjob_delete'); + $routes->get('download/(:alpha)', 'IPController::download/$1'); }); $routes->group('cs', ['namespace' => 'App\Controllers\Admin\Equipment'], function ($routes) { $routes->get('/', 'CSController::index'); diff --git a/app/Controllers/Admin/Equipment/IpController.php b/app/Controllers/Admin/Equipment/IPController.php similarity index 79% rename from app/Controllers/Admin/Equipment/IpController.php rename to app/Controllers/Admin/Equipment/IPController.php index bfc97b3..06e7b9a 100644 --- a/app/Controllers/Admin/Equipment/IpController.php +++ b/app/Controllers/Admin/Equipment/IPController.php @@ -2,8 +2,8 @@ namespace App\Controllers\Admin\Equipment; -use App\Helpers\Equipment\IpHelper; -use App\Services\Equipment\IpService; +use App\Helpers\Equipment\IPHelper; +use App\Services\Equipment\IPService; use App\Services\Equipment\LineService; use CodeIgniter\HTTP\RequestInterface; @@ -11,7 +11,7 @@ use CodeIgniter\HTTP\RequestInterface; use CodeIgniter\HTTP\ResponseInterface; use Psr\Log\LoggerInterface; -class IpController extends EquipmentController +class IPController extends EquipmentController { private ?LineService $_lineService = null; public function initController(RequestInterface $request, ResponseInterface $response, LoggerInterface $logger) @@ -23,17 +23,17 @@ class IpController extends EquipmentController // $this->view_path .= strtolower($this->getService()->getClassName()) . DIRECTORY_SEPARATOR; } - public function getService(): IpService + public function getService(): IPService { if (!$this->_service) { - $this->_service = new IpService(); + $this->_service = new IPService(); } return $this->_service; } - public function getHelper(): IpHelper + public function getHelper(): IPHelper { if (!$this->_helper) { - $this->_helper = new IpHelper(); + $this->_helper = new IPHelper(); } return $this->_helper; } diff --git a/app/Controllers/Admin/Equipment/ServerController.php b/app/Controllers/Admin/Equipment/ServerController.php index 863b1e4..6761fd5 100644 --- a/app/Controllers/Admin/Equipment/ServerController.php +++ b/app/Controllers/Admin/Equipment/ServerController.php @@ -20,6 +20,8 @@ class ServerController extends EquipmentController $this->uri_path .= strtolower($this->getService()->getClassName('/')) . '/'; // $this->view_path .= strtolower($this->getService()->getClassName()) . DIRECTORY_SEPARATOR; + $this->partinfo_cnt_range = array_combine(range(1, 10), range(1, 10)); + $this->partinfo_extra_options = array_merge(["" => "RAID 선택"], lang("{$this->getService()->getClassName()}.EXTRAS")); } public function getService(): ServerService { @@ -49,16 +51,10 @@ class ServerController extends EquipmentController } return $result; } - //View부분 - protected function view_process(mixed $entity): void + //생성 + protected function create_form_process(): void { - foreach (SERVICE_ITEM_TYPES as $item_type => $label) { - $entity->setItemEntities( - $item_type, - $this->getService()->getEntities(['serviceinfo_uid' => $entity->getPK(), 'item_type' => $item_type]) - ); - } - //부모처리 - parent::view_process($entity); + $this->setDefaultValue('code', $this->getService()->getLastestCode()); + parent::create_form_process(); } } diff --git a/app/Controllers/Admin/UserController.php b/app/Controllers/Admin/UserController.php index b8f3435..1402659 100644 --- a/app/Controllers/Admin/UserController.php +++ b/app/Controllers/Admin/UserController.php @@ -87,18 +87,12 @@ class UserController extends AdminController { try { //각 Field 초기화 - $fields = [ + $this->initAction(__FUNCTION__, [ 'formFields' => ['id', 'passwd', 'confirmpassword', 'name', 'email', 'mobile'], - ]; - // $this->getMyAuth()->pushCurrentUrl($this->request->getUri()->getPath() . ($this->request->getUri()->getQuery() ? "?" . $this->request->getUri()->getQuery() : "")); - $this->initAction(__FUNCTION__, $fields); - //FieldRule정의 - foreach ($this->getFormFields() as $field) { - $this->setFieldRule($field, $this->getFormFieldRule($this->getAction(), $field)); - } + ]); helper(['form']); //filter_fields에 해당하는 값이 있을 경우 정의 - $this->setFilterValues(); + $this->setDefaultValues(); //기존 Entity 가져오기 $entity = $this->getService()->getEntity($uid); if (!$entity) { @@ -123,14 +117,9 @@ class UserController extends AdminController $this->_db->transStart(); try { //각 Field 초기화 - $fields = [ + $this->initAction(__FUNCTION__, [ 'formFields' => ['id', 'passwd', 'confirmpassword', 'name', 'email', 'mobile'], - ]; - $this->initAction(__FUNCTION__, $fields); - //FieldRule정의 - foreach ($this->getFormFields() as $field) { - $this->setFieldRule($field, $this->getFormFieldRule($this->getAction(), $field)); - } + ]); //입력값정의 $formDatas = []; foreach ($this->getFormFields() as $field) { diff --git a/app/Controllers/CommonController.php b/app/Controllers/CommonController.php index 09121ef..92c4d2f 100644 --- a/app/Controllers/CommonController.php +++ b/app/Controllers/CommonController.php @@ -85,147 +85,79 @@ abstract class CommonController extends BaseController } return $this->_control['action']; } - final protected function setFormFields(array $fields): void - { - $this->_control['form_fields'] = $fields; - } final protected function getFormFields(): array { return $this->_control['form_fields'] ?? []; } - final protected function setFieldRule(string $field, string $rule): void - { - if (!array_key_exists('field_rules', $this->_control)) { - $this->_control['field_rules'] = []; - } - $this->_control['field_rules'][$field] = $rule; - } - final protected function setFieldRules(array $rules): void - { - $this->_control['field_rules'] = $rules; - } - final protected function getFieldRule(string $field): string - { - return $this->_control['field_rules'][$field] ?? []; - } final protected function getFieldRules(): array { return $this->_control['field_rules'] ?? []; } - final protected function setIndexFields(array $fields): void - { - $this->_control['index_fields'] = $fields; - } final protected function getIndexFields(): array { return $this->_control['index_fields'] ?? []; } - final protected function setViewFields(array $fields): void - { - $this->_control['view_fields'] = $fields; - } final protected function getViewFields(): array { return $this->_control['view_fields'] ?? []; } - final protected function setFilterFields(array $fields): void - { - $this->_control['filter_fields'] = $fields; - } final protected function getFilterFields(): array { return $this->_control['filter_fields'] ?? []; } - final protected function setBatchjobFields(array $fields): void - { - $this->_control['batchjob_fields'] = $fields; - } final protected function getBatchjobFields(): array { return $this->_control['batchjob_fields'] ?? []; } - final protected function setBatchjobButtions(array $fields): void + final protected function setDefaultValue($field, $value) { - $this->_control['batchjob_buttions'] = $fields; - } - final protected function getBatchjobButtions(): array - { - return $this->_control['batchjob_buttions'] ?? []; - } - final protected function setFilterFieldOption(string $field, array $options): void - { - if (!array_key_exists('filter_optons', $this->_control)) { - $this->_control['filter_optons'] = []; + if (!array_key_exists('default_values', $this->_control)) { + $this->_control['default_values'] = []; } - //Filter Options 초기화 - $this->_control['filter_optons'][$field] = [ - "" => new FormOptionEntity(["uid" => "", "title" => lang("{$this->getService()->getClassName()}.label.{$field}") . " 선택"]) - ]; - foreach ($options as $option) { - $this->_control['filter_optons'][$field][$option->getPK()] = $option; - } - // dd($this->_control['filter_optons'][$field]); + $this->_control['default_values'][$field] = $value; } - final protected function getFilterFieldOption(string $field): array + final protected function setDefaultValues(): void { - return $this->_control['filter_optons'][$field]; - } - final protected function setFilterValues(): void - { - if (!array_key_exists('filter_values', $this->_control)) { - $this->_control['filter_values'] = []; - } foreach ($this->getFilterFields() as $field) { - $this->_control['filter_values'][$field] = $this->request->getVar($field); + $this->setDefaultValue($field, $this->request->getVar($field)); } } - final protected function getFilterValues(?string $field = null): mixed + final protected function getDefaultValue(?string $field = null): mixed { if ($field === null) { - return $this->_control['filter_values'] ?? []; + return $this->_control['default_values'] ?? []; } - return array_key_exists($field, $this->_control['filter_values']) ? $this->_control['filter_values'][$field] : null; + return array_key_exists($field, $this->_control['default_values']) ? $this->_control['default_values'][$field] : null; } - protected function initAction(string $action, $fields = []): void + final protected function initAction(string $action, $fields = []): void { //각 Field 초기화 $this->setAction($action); - $this->setFormFields(array_key_exists('formFields', $fields) ? $fields['formFields'] : $this->getService()->getFormFields()); - foreach ($this->getFormFields() as $field) { - $this->setFieldRule($field, $this->getFormFieldRule($this->getAction(), $field)); + switch ($action) { + case 'view': + $fields = $this->_control['view_fields'] = array_key_exists('viewFields', $fields) ? $fields['viewFields'] : $this->getService()->getViewFields(); + break; + case 'index': + $fields = $this->_control['index_fields'] = array_key_exists('indexFields', $fields) ? $fields['indexFields'] : $this->getService()->getIndexFields(); + break; + default: + $fields = $this->_control['form_fields'] = array_key_exists('formFields', $fields) ? $fields['formFields'] : $this->getService()->getFormFields(); + break; } - $this->setIndexFields(array_key_exists('indexFields', $fields) ? $fields['indexFields'] : $this->getService()->getIndexFields()); - $this->setViewFields(array_key_exists('viewFields', $fields) ? $fields['viewFields'] : $this->getService()->getViewFields()); - $this->setFilterFields(array_key_exists('filterFields', $fields) ? $fields['filterFields'] : $this->getService()->getFilterFields()); + $this->_control['field_rules'] = []; + foreach ($fields as $field) { + $this->_control['field_rules'][$field] = $this->getService()->getFormFieldRule($action, $field); + } + $this->_control['filter_fields'] = array_key_exists('filterFields', $fields) ? $fields['filterFields'] : $this->getService()->getFilterFields(); + $this->_control['filter_optons'] = []; foreach ($this->getFilterFields() as $field) { - $this->setFilterFieldOption($field, $this->getFormFieldOption($field)); + $this->_control['filter_optons'][$field] = []; + foreach ($this->getService()->getFormFieldOption($field) as $option) { + $this->_control['filter_optons'][$field][$option->getPK()] = $option; + } } - $this->setBatchJobFields(array_key_exists('batchjobFields', $fields) ? $fields['batchjobFields'] : $this->getService()->getBatchJobFields()); - $this->setBatchJobButtions(array_key_exists('batchjobButtions', $fields) ? $fields['batchjobFields'] : $this->getService()->getBatchJobButtons()); - } - protected function getFormFieldRule(string $action, string $field): string - { - if (is_array($field)) { - throw new \Exception(__FUNCTION__ . "=> field가 array 입니다.\n" . var_export($field, true)); - } - switch ($field) { - default: - $rule = $this->getService()->getFormFieldRule($action, $field); - break; - } - return $rule; - } - protected function getFormFieldOption(string $field, array $options = []): array - { - switch ($field) { - default: - $options = $this->getService()->getFormFieldOption($field, $options); - break; - } - if (!is_array($options)) { - throw new \Exception(__FUNCTION__ . "에서 field의 options 값이 array가 아닙니다.\n" . var_export($options, true)); - } - return $options; + $this->_control['batchjob_fields'] = array_key_exists('batchjobFields', $fields) ? $fields['batchjobFields'] : $this->getService()->getBatchJobFields(); + $this->_control['batchjob_buttions'] = array_key_exists('batchjobButtions', $fields) ? $fields['batchjobFields'] : $this->getService()->getBatchJobButtons(); } protected function setValidation(Validation $validation, string $field, string $rule): Validation { @@ -309,7 +241,7 @@ abstract class CommonController extends BaseController // $this->getMyAuth()->pushCurrentUrl($this->request->getUri()->getPath() . ($this->request->getUri()->getQuery() ? "?" . $this->request->getUri()->getQuery() : "")); $this->initAction(__FUNCTION__); //filter_fields에 해당하는 값이 있을 경우 정의 - $this->setFilterValues(); + $this->setDefaultValues(); $this->create_form_process(); helper(['form']); $this->forms = ['attributes' => ['method' => "post",], 'hiddens' => []]; @@ -357,7 +289,7 @@ abstract class CommonController extends BaseController // $this->getMyAuth()->pushCurrentUrl($this->request->getUri()->getPath() . ($this->request->getUri()->getQuery() ? "?" . $this->request->getUri()->getQuery() : "")); $this->initAction(__FUNCTION__); //filter_fields에 해당하는 값이 있을 경우 정의 - $this->setFilterValues(); + $this->setDefaultValues(); //기존 Entity 가져오기 $entity = $this->getService()->getEntity($uid); if (!$entity) { @@ -415,9 +347,7 @@ abstract class CommonController extends BaseController $this->_db->transStart(); try { //각 Field 초기화:조건항목 Field는 한개만 존재하므로 Field와 Rule을 정의 - $this->setAction(__FUNCTION__); - $this->setFormFields([$field]); - $this->setFieldRule($field, $this->getFormFieldRule($this->getAction(), $field)); + $this->initAction(__FUNCTION__, ['formFields' => [$field]]); //입력값정의 $formDatas = [$field => $this->request->getVar($field)]; //기존 Entity 가져오기 @@ -474,11 +404,7 @@ abstract class CommonController extends BaseController throw new \Exception("적용할 리스트을 선택하셔야합니다."); } //각 Field 초기화: 일괄작업은 선택된 조건항목 Field만 존재하므로 Field와 Rule을 정의 - $this->setAction(__FUNCTION__); - $this->setFormFields([$selectedFields]); - foreach ($selectedFields as $field) { - $this->setFieldRule($field, $this->getFormFieldRule($this->getAction(), $field)); - } + $this->initAction(__FUNCTION__, ['formFields' => [$selectedFields]]); $this->batchjob_process($uids, $formDatas); $this->_db->transCommit(); LogCollector::debug(sprintf("%s에서 총 %s개중 %s개 일괄작업을 완료하였습니다.", __METHOD__, count($uids), count($this->entities))); @@ -561,12 +487,8 @@ abstract class CommonController extends BaseController try { //각 Field 초기화 $this->initAction(__FUNCTION__); - //FieldRule정의 - foreach ($this->getViewFields() as $field) { - $this->setFieldRule($field, $this->getFormFieldRule($this->getAction(), $field)); - } //filter_fields에 해당하는 값이 있을 경우 정의 - $this->setFilterValues(); + $this->setDefaultValues(); //기존 Entity 가져오기 $entity = $this->getService()->getEntity($uid); if (!$entity) { @@ -585,12 +507,12 @@ abstract class CommonController extends BaseController //조건절 처리 final protected function setConditionForList(): void { - $this->setFilterValues(); + $this->setDefaultValues(); //Filter 조건절 처리 foreach ($this->getFilterFields() as $field) { - $filter_value = $this->getFilterValues($field); - if ($filter_value !== null && $filter_value !== '') { - $this->getService()->setList_FormFilter($field, $filter_value); + $default_value = $this->getDefaultValue($field); + if ($default_value !== null && $default_value !== '') { + $this->getService()->setList_FormFilter($field, $default_value); } } //검색어조건절 처리 @@ -648,9 +570,6 @@ abstract class CommonController extends BaseController $this->initAction(__FUNCTION__); //Return Url정의 $this->getMyAuth()->pushCurrentUrl($this->request->getUri()->getPath() . ($this->request->getUri()->getQuery() ? "?" . $this->request->getUri()->getQuery() : "")); - foreach ($this->getIndexFields() as $field) { - $this->setFieldRule($field, $this->getFormFieldRule($this->getAction(), $field)); - } // 현재 URL을 스택에 저장 helper(['form']); //조건절 처리 diff --git a/app/Database/dbmsv2.vuerd.json b/app/Database/dbmsv2.vuerd.json index f9b9684..1cf23ff 100644 --- a/app/Database/dbmsv2.vuerd.json +++ b/app/Database/dbmsv2.vuerd.json @@ -12337,18 +12337,18 @@ "tableId": "8GYAVBvZGaMFeq3QuXk_B", "name": "extra", "comment": "추가정보(RAID등)", - "dataType": "JSON", + "dataType": "VARCHAR(50)", "default": "", "options": 0, "ui": { "keys": 0, "widthName": 60, "widthComment": 96, - "widthDataType": 60, + "widthDataType": 75, "widthDefault": 60 }, "meta": { - "updateAt": 1755486793127, + "updateAt": 1755757819522, "createAt": 1755486722061 } }, diff --git a/app/Database/dbmsv2_init.sql b/app/Database/dbmsv2_init.sql index fac51f6..6cb3abe 100644 --- a/app/Database/dbmsv2_init.sql +++ b/app/Database/dbmsv2_init.sql @@ -403,7 +403,7 @@ CREATE TABLE `serverinfo_partinfo` ( `serviceinfo_uid` int(11) DEFAULT NULL COMMENT '서비스정보', `billing_method` varchar(20) NOT NULL COMMENT '청구방법(month,onetime)', `cnt` tinyint(4) NOT NULL DEFAULT 1 COMMENT '갯수', - `extra` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '추가정보(RAID등)', + `extra` varchar(50) NULL DEFAULT NULL COMMENT '추가정보(RAID등)', `updated_at` timestamp NULL DEFAULT NULL, `created_at` timestamp NOT NULL DEFAULT current_timestamp(), PRIMARY KEY (`uid`), diff --git a/app/Controllers/CLI/DBMigration/dbmsv2_part.txt b/app/Database/dbmsv2_part.txt similarity index 100% rename from app/Controllers/CLI/DBMigration/dbmsv2_part.txt rename to app/Database/dbmsv2_part.txt diff --git a/app/Database/dbmsv2_test1.sql b/app/Database/dbmsv2_test1.sql index b378fc5..cfb25fc 100644 --- a/app/Database/dbmsv2_test1.sql +++ b/app/Database/dbmsv2_test1.sql @@ -265,7 +265,7 @@ CREATE TABLE `partinfo` ( `deleted_at` timestamp NULL DEFAULT NULL, PRIMARY KEY (`uid`), UNIQUE KEY `UQ_title` (`title`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='PART정보'; +) ENGINE=InnoDB AUTO_INCREMENT=44 DEFAULT CHARSET=utf8 COMMENT='PART정보'; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -274,6 +274,7 @@ CREATE TABLE `partinfo` ( LOCK TABLES `partinfo` WRITE; /*!40000 ALTER TABLE `partinfo` DISABLE KEYS */; +INSERT INTO `partinfo` VALUES (3,'CPU','Xeon E5530 2.4Ghz 4Core',50000,'available',NULL,'2025-08-20 10:00:43',NULL),(4,'CPU','Xeon E5540 2.4Ghz 4Core',50000,'available',NULL,'2025-08-20 10:00:43',NULL),(5,'CPU','Xeon X5560 2.8Ghz 8Core',80000,'available',NULL,'2025-08-20 10:00:43',NULL),(6,'CPU','Xeon X5650 2.6Ghz 12Core',100000,'available',NULL,'2025-08-20 10:00:43',NULL),(7,'CPU','Xeon E5-2690v2 2.6Ghz 12Core',100000,'available',NULL,'2025-08-20 10:00:43',NULL),(8,'CPU','Xeon E5-2690v4 3.0Ghz 20Core',150000,'available',NULL,'2025-08-20 10:00:43',NULL),(9,'RAM','ECC 2G',20000,'available',NULL,'2025-08-20 10:00:43',NULL),(10,'RAM','ECC 4G',30000,'available',NULL,'2025-08-20 10:00:43',NULL),(11,'RAM','ECC 8G',40000,'available',NULL,'2025-08-20 10:00:43',NULL),(12,'RAM','ECC 16G',60000,'available',NULL,'2025-08-20 10:00:43',NULL),(13,'RAM','ECC 32G',100000,'available',NULL,'2025-08-20 10:00:43',NULL),(14,'DISK','SATA 128G',50000,'available',NULL,'2025-08-20 10:00:43',NULL),(15,'DISK','SATA 256G',70000,'available',NULL,'2025-08-20 10:00:43',NULL),(16,'DISK','SATA 512G',90000,'available',NULL,'2025-08-20 10:00:43',NULL),(17,'DISK','SAS 128G',60000,'available',NULL,'2025-08-20 10:00:43',NULL),(18,'DISK','SAS 256G',80000,'available',NULL,'2025-08-20 10:00:43',NULL),(19,'DISK','SAS 512G',100000,'available',NULL,'2025-08-20 10:00:43',NULL),(20,'DISK','SSD 128G',60000,'available',NULL,'2025-08-20 10:00:43',NULL),(21,'DISK','SSD 256G',80000,'available',NULL,'2025-08-20 10:00:43',NULL),(22,'DISK','SSD 512G',100000,'available',NULL,'2025-08-20 10:00:43',NULL),(23,'DISK','SSD 1T',120000,'available',NULL,'2025-08-20 10:00:43',NULL),(24,'DISK','SSD 2T',150000,'available',NULL,'2025-08-20 10:00:43',NULL),(25,'DISK','NVME 512G',120000,'available',NULL,'2025-08-20 10:00:43',NULL),(26,'DISK','NVME 1T',150000,'available',NULL,'2025-08-20 10:00:43',NULL),(27,'DISK','NVME 2T',180000,'available',NULL,'2025-08-20 10:00:43',NULL),(28,'SOFTWARE','Windows 10',10000,'available',NULL,'2025-08-20 10:00:43',NULL),(29,'SOFTWARE','Windows 11',20000,'available',NULL,'2025-08-20 10:00:43',NULL),(30,'SOFTWARE','Windows NT 2008R2',30000,'available',NULL,'2025-08-20 10:00:43',NULL),(31,'SOFTWARE','Windows NT 2012R2',30000,'available',NULL,'2025-08-20 10:00:43',NULL),(32,'SOFTWARE','Windows NT 2016R2',30000,'available',NULL,'2025-08-20 10:00:43',NULL),(33,'SOFTWARE','Windows NT 2019R2',30000,'available',NULL,'2025-08-20 10:00:43',NULL),(34,'SOFTWARE','Windows MSSQL 2008',10000,'available',NULL,'2025-08-20 10:00:43',NULL),(35,'SOFTWARE','Windows MSSQL 2012',10000,'available',NULL,'2025-08-20 10:00:43',NULL),(36,'SOFTWARE','CentOS 7',10000,'available',NULL,'2025-08-20 10:00:43',NULL),(37,'SOFTWARE','CentOS 8',10000,'available',NULL,'2025-08-20 10:00:43',NULL),(38,'SOFTWARE','CentOS 9',10000,'available',NULL,'2025-08-20 10:00:43',NULL),(39,'SOFTWARE','Ununtu 20.04',10000,'available',NULL,'2025-08-20 10:00:43',NULL),(40,'SOFTWARE','Ununtu 21.04',10000,'available',NULL,'2025-08-20 10:00:43',NULL),(41,'SOFTWARE','Ununtu 22.04',10000,'available',NULL,'2025-08-20 10:00:43',NULL),(42,'SOFTWARE','닷디펜더',50000,'available',NULL,'2025-08-20 10:00:43',NULL),(43,'SOFTWARE','딥파인더',50000,'available',NULL,'2025-08-20 10:00:43',NULL); /*!40000 ALTER TABLE `partinfo` ENABLE KEYS */; UNLOCK TABLES; @@ -405,7 +406,7 @@ CREATE TABLE `serverinfo_partinfo` ( `serviceinfo_uid` int(11) DEFAULT NULL COMMENT '서비스정보', `billing_method` varchar(20) NOT NULL COMMENT '청구방법(month,onetime)', `cnt` tinyint(4) NOT NULL DEFAULT 1 COMMENT '갯수', - `extra` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '추가정보(RAID등)', + `extra` varchar(50) DEFAULT NULL COMMENT '추가정보(RAID등)', `updated_at` timestamp NULL DEFAULT NULL, `created_at` timestamp NOT NULL DEFAULT current_timestamp(), PRIMARY KEY (`uid`), @@ -561,7 +562,7 @@ CREATE TABLE `user_history` ( PRIMARY KEY (`uid`), KEY `FK_user_TO_user_history` (`user_uid`), CONSTRAINT `FK_user_TO_user_history` FOREIGN KEY (`user_uid`) REFERENCES `user` (`uid`) -) ENGINE=InnoDB AUTO_INCREMENT=8 DEFAULT CHARSET=utf8 COMMENT='작업 기록 로그'; +) ENGINE=InnoDB AUTO_INCREMENT=22 DEFAULT CHARSET=utf8 COMMENT='작업 기록 로그'; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -570,7 +571,7 @@ CREATE TABLE `user_history` ( LOCK TABLES `user_history` WRITE; /*!40000 ALTER TABLE `user_history` DISABLE KEYS */; -INSERT INTO `user_history` VALUES (1,1,'Equipment/Line->create 작업이 성공적으로 완료되었습니다.','14:17:31[info]: [Softbank-1 10G]생성되었습니다.:\n14:17:31[info]: [27.125.207.0]생성되었습니다.:\n14:17:31[info]: [27.125.207.1]생성되었습니다.:\n14:17:31[info]: [27.125.207.2]생성되었습니다.:\n14:17:31[info]: [27.125.207.3]생성되었습니다.:\n14:17:31[info]: [27.125.207.4]생성되었습니다.:\n14:17:31[info]: [27.125.207.5]생성되었습니다.:\n14:17:31[info]: [27.125.207.6]생성되었습니다.:\n14:17:31[info]: [27.125.207.7]생성되었습니다.:\n14:17:31[info]: [27.125.207.8]생성되었습니다.:\n14:17:31[info]: [27.125.207.9]생성되었습니다.:\n14:17:31[info]: [27.125.207.10]생성되었습니다.:\n14:17:31[info]: [27.125.207.11]생성되었습니다.:\n14:17:31[info]: [27.125.207.12]생성되었습니다.:\n14:17:31[info]: [27.125.207.13]생성되었습니다.:\n14:17:31[info]: [27.125.207.14]생성되었습니다.:\n14:17:31[info]: [27.125.207.15]생성되었습니다.:\n14:17:31[info]: [27.125.207.16]생성되었습니다.:\n14:17:31[info]: [27.125.207.17]생성되었습니다.:\n14:17:31[info]: [27.125.207.18]생성되었습니다.:\n14:17:31[info]: [27.125.207.19]생성되었습니다.:\n14:17:31[info]: [27.125.207.20]생성되었습니다.:\n14:17:31[info]: [27.125.207.21]생성되었습니다.:\n14:17:31[info]: [27.125.207.22]생성되었습니다.:\n14:17:31[info]: [27.125.207.23]생성되었습니다.:\n14:17:31[info]: [27.125.207.24]생성되었습니다.:\n14:17:31[info]: [27.125.207.25]생성되었습니다.:\n14:17:31[info]: [27.125.207.26]생성되었습니다.:\n14:17:31[info]: [27.125.207.27]생성되었습니다.:\n14:17:31[info]: [27.125.207.28]생성되었습니다.:\n14:17:31[info]: [27.125.207.29]생성되었습니다.:\n14:17:31[info]: [27.125.207.30]생성되었습니다.:\n14:17:31[info]: [27.125.207.31]생성되었습니다.:\n14:17:31[info]: [27.125.207.32]생성되었습니다.:\n14:17:31[info]: [27.125.207.33]생성되었습니다.:\n14:17:31[info]: [27.125.207.34]생성되었습니다.:\n14:17:31[info]: [27.125.207.35]생성되었습니다.:\n14:17:31[info]: [27.125.207.36]생성되었습니다.:\n14:17:31[info]: [27.125.207.37]생성되었습니다.:\n14:17:31[info]: [27.125.207.38]생성되었습니다.:\n14:17:31[info]: [27.125.207.39]생성되었습니다.:\n14:17:31[info]: [27.125.207.40]생성되었습니다.:\n14:17:31[info]: [27.125.207.41]생성되었습니다.:\n14:17:31[info]: [27.125.207.42]생성되었습니다.:\n14:17:31[info]: [27.125.207.43]생성되었습니다.:\n14:17:31[info]: [27.125.207.44]생성되었습니다.:\n14:17:31[info]: [27.125.207.45]생성되었습니다.:\n14:17:31[info]: [27.125.207.46]생성되었습니다.:\n14:17:31[info]: [27.125.207.47]생성되었습니다.:\n14:17:31[info]: [27.125.207.48]생성되었습니다.:\n14:17:31[info]: [27.125.207.49]생성되었습니다.:\n14:17:31[info]: [27.125.207.50]생성되었습니다.:\n14:17:31[info]: [27.125.207.51]생성되었습니다.:\n14:17:31[info]: [27.125.207.52]생성되었습니다.:\n14:17:31[info]: [27.125.207.53]생성되었습니다.:\n14:17:31[info]: [27.125.207.54]생성되었습니다.:\n14:17:31[info]: [27.125.207.55]생성되었습니다.:\n14:17:31[info]: [27.125.207.56]생성되었습니다.:\n14:17:31[info]: [27.125.207.57]생성되었습니다.:\n14:17:31[info]: [27.125.207.58]생성되었습니다.:\n14:17:31[info]: [27.125.207.59]생성되었습니다.:\n14:17:31[info]: [27.125.207.60]생성되었습니다.:\n14:17:31[info]: [27.125.207.61]생성되었습니다.:\n14:17:31[info]: [27.125.207.62]생성되었습니다.:\n14:17:31[info]: [27.125.207.63]생성되었습니다.:\n14:17:31[info]: [27.125.207.64]생성되었습니다.:\n14:17:31[info]: [27.125.207.65]생성되었습니다.:\n14:17:31[info]: [27.125.207.66]생성되었습니다.:\n14:17:31[info]: [27.125.207.67]생성되었습니다.:\n14:17:31[info]: [27.125.207.68]생성되었습니다.:\n14:17:31[info]: [27.125.207.69]생성되었습니다.:\n14:17:31[info]: [27.125.207.70]생성되었습니다.:\n14:17:31[info]: [27.125.207.71]생성되었습니다.:\n14:17:31[info]: [27.125.207.72]생성되었습니다.:\n14:17:31[info]: [27.125.207.73]생성되었습니다.:\n14:17:31[info]: [27.125.207.74]생성되었습니다.:\n14:17:31[info]: [27.125.207.75]생성되었습니다.:\n14:17:31[info]: [27.125.207.76]생성되었습니다.:\n14:17:31[info]: [27.125.207.77]생성되었습니다.:\n14:17:31[info]: [27.125.207.78]생성되었습니다.:\n14:17:31[info]: [27.125.207.79]생성되었습니다.:\n14:17:31[info]: [27.125.207.80]생성되었습니다.:\n14:17:31[info]: [27.125.207.81]생성되었습니다.:\n14:17:31[info]: [27.125.207.82]생성되었습니다.:\n14:17:31[info]: [27.125.207.83]생성되었습니다.:\n14:17:31[info]: [27.125.207.84]생성되었습니다.:\n14:17:31[info]: [27.125.207.85]생성되었습니다.:\n14:17:31[info]: [27.125.207.86]생성되었습니다.:\n14:17:31[info]: [27.125.207.87]생성되었습니다.:\n14:17:31[info]: [27.125.207.88]생성되었습니다.:\n14:17:31[info]: [27.125.207.89]생성되었습니다.:\n14:17:31[info]: [27.125.207.90]생성되었습니다.:\n14:17:31[info]: [27.125.207.91]생성되었습니다.:\n14:17:31[info]: [27.125.207.92]생성되었습니다.:\n14:17:31[info]: [27.125.207.93]생성되었습니다.:\n14:17:31[info]: [27.125.207.94]생성되었습니다.:\n14:17:31[info]: [27.125.207.95]생성되었습니다.:\n14:17:31[info]: [27.125.207.96]생성되었습니다.:\n14:17:31[info]: [27.125.207.97]생성되었습니다.:\n14:17:31[info]: [27.125.207.98]생성되었습니다.:\n14:17:31[info]: [27.125.207.99]생성되었습니다.:\n14:17:31[info]: [27.125.207.100]생성되었습니다.:\n14:17:31[info]: [27.125.207.101]생성되었습니다.:\n14:17:31[info]: [27.125.207.102]생성되었습니다.:\n14:17:31[info]: [27.125.207.103]생성되었습니다.:\n14:17:31[info]: [27.125.207.104]생성되었습니다.:\n14:17:31[info]: [27.125.207.105]생성되었습니다.:\n14:17:31[info]: [27.125.207.106]생성되었습니다.:\n14:17:31[info]: [27.125.207.107]생성되었습니다.:\n14:17:31[info]: [27.125.207.108]생성되었습니다.:\n14:17:31[info]: [27.125.207.109]생성되었습니다.:\n14:17:31[info]: [27.125.207.110]생성되었습니다.:\n14:17:31[info]: [27.125.207.111]생성되었습니다.:\n14:17:31[info]: [27.125.207.112]생성되었습니다.:\n14:17:31[info]: [27.125.207.113]생성되었습니다.:\n14:17:31[info]: [27.125.207.114]생성되었습니다.:\n14:17:31[info]: [27.125.207.115]생성되었습니다.:\n14:17:31[info]: [27.125.207.116]생성되었습니다.:\n14:17:31[info]: [27.125.207.117]생성되었습니다.:\n14:17:31[info]: [27.125.207.118]생성되었습니다.:\n14:17:31[info]: [27.125.207.119]생성되었습니다.:\n14:17:31[info]: [27.125.207.120]생성되었습니다.:\n14:17:31[info]: [27.125.207.121]생성되었습니다.:\n14:17:31[info]: [27.125.207.122]생성되었습니다.:\n14:17:31[info]: [27.125.207.123]생성되었습니다.:\n14:17:31[info]: [27.125.207.124]생성되었습니다.:\n14:17:31[info]: [27.125.207.125]생성되었습니다.:\n14:17:31[info]: [27.125.207.126]생성되었습니다.:\n14:17:31[info]: [27.125.207.127]생성되었습니다.:\n14:17:31[info]: [27.125.207.128]생성되었습니다.:\n14:17:31[info]: [27.125.207.129]생성되었습니다.:\n14:17:31[info]: [27.125.207.130]생성되었습니다.:\n14:17:31[info]: [27.125.207.131]생성되었습니다.:\n14:17:31[info]: [27.125.207.132]생성되었습니다.:\n14:17:31[info]: [27.125.207.133]생성되었습니다.:\n14:17:31[info]: [27.125.207.134]생성되었습니다.:\n14:17:31[info]: [27.125.207.135]생성되었습니다.:\n14:17:31[info]: [27.125.207.136]생성되었습니다.:\n14:17:31[info]: [27.125.207.137]생성되었습니다.:\n14:17:31[info]: [27.125.207.138]생성되었습니다.:\n14:17:31[info]: [27.125.207.139]생성되었습니다.:\n14:17:31[info]: [27.125.207.140]생성되었습니다.:\n14:17:31[info]: [27.125.207.141]생성되었습니다.:\n14:17:31[info]: [27.125.207.142]생성되었습니다.:\n14:17:31[info]: [27.125.207.143]생성되었습니다.:\n14:17:31[info]: [27.125.207.144]생성되었습니다.:\n14:17:31[info]: [27.125.207.145]생성되었습니다.:\n14:17:31[info]: [27.125.207.146]생성되었습니다.:\n14:17:31[info]: [27.125.207.147]생성되었습니다.:\n14:17:31[info]: [27.125.207.148]생성되었습니다.:\n14:17:31[info]: [27.125.207.149]생성되었습니다.:\n14:17:31[info]: [27.125.207.150]생성되었습니다.:\n14:17:31[info]: [27.125.207.151]생성되었습니다.:\n14:17:31[info]: [27.125.207.152]생성되었습니다.:\n14:17:31[info]: [27.125.207.153]생성되었습니다.:\n14:17:31[info]: [27.125.207.154]생성되었습니다.:\n14:17:31[info]: [27.125.207.155]생성되었습니다.:\n14:17:31[info]: [27.125.207.156]생성되었습니다.:\n14:17:31[info]: [27.125.207.157]생성되었습니다.:\n14:17:31[info]: [27.125.207.158]생성되었습니다.:\n14:17:31[info]: [27.125.207.159]생성되었습니다.:\n14:17:31[info]: [27.125.207.160]생성되었습니다.:\n14:17:31[info]: [27.125.207.161]생성되었습니다.:\n14:17:31[info]: [27.125.207.162]생성되었습니다.:\n14:17:31[info]: [27.125.207.163]생성되었습니다.:\n14:17:31[info]: [27.125.207.164]생성되었습니다.:\n14:17:31[info]: [27.125.207.165]생성되었습니다.:\n14:17:31[info]: [27.125.207.166]생성되었습니다.:\n14:17:31[info]: [27.125.207.167]생성되었습니다.:\n14:17:31[info]: [27.125.207.168]생성되었습니다.:\n14:17:31[info]: [27.125.207.169]생성되었습니다.:\n14:17:31[info]: [27.125.207.170]생성되었습니다.:\n14:17:31[info]: [27.125.207.171]생성되었습니다.:\n14:17:31[info]: [27.125.207.172]생성되었습니다.:\n14:17:31[info]: [27.125.207.173]생성되었습니다.:\n14:17:31[info]: [27.125.207.174]생성되었습니다.:\n14:17:31[info]: [27.125.207.175]생성되었습니다.:\n14:17:31[info]: [27.125.207.176]생성되었습니다.:\n14:17:31[info]: [27.125.207.177]생성되었습니다.:\n14:17:31[info]: [27.125.207.178]생성되었습니다.:\n14:17:31[info]: [27.125.207.179]생성되었습니다.:\n14:17:31[info]: [27.125.207.180]생성되었습니다.:\n14:17:31[info]: [27.125.207.181]생성되었습니다.:\n14:17:31[info]: [27.125.207.182]생성되었습니다.:\n14:17:31[info]: [27.125.207.183]생성되었습니다.:\n14:17:31[info]: [27.125.207.184]생성되었습니다.:\n14:17:31[info]: [27.125.207.185]생성되었습니다.:\n14:17:31[info]: [27.125.207.186]생성되었습니다.:\n14:17:31[info]: [27.125.207.187]생성되었습니다.:\n14:17:31[info]: [27.125.207.188]생성되었습니다.:\n14:17:31[info]: [27.125.207.189]생성되었습니다.:\n14:17:31[info]: [27.125.207.190]생성되었습니다.:\n14:17:31[info]: [27.125.207.191]생성되었습니다.:\n14:17:31[info]: [27.125.207.192]생성되었습니다.:\n14:17:31[info]: [27.125.207.193]생성되었습니다.:\n14:17:31[info]: [27.125.207.194]생성되었습니다.:\n14:17:31[info]: [27.125.207.195]생성되었습니다.:\n14:17:31[info]: [27.125.207.196]생성되었습니다.:\n14:17:31[info]: [27.125.207.197]생성되었습니다.:\n14:17:31[info]: [27.125.207.198]생성되었습니다.:\n14:17:31[info]: [27.125.207.199]생성되었습니다.:\n14:17:31[info]: [27.125.207.200]생성되었습니다.:\n14:17:31[info]: [27.125.207.201]생성되었습니다.:\n14:17:31[info]: [27.125.207.202]생성되었습니다.:\n14:17:31[info]: [27.125.207.203]생성되었습니다.:\n14:17:31[info]: [27.125.207.204]생성되었습니다.:\n14:17:31[info]: [27.125.207.205]생성되었습니다.:\n14:17:31[info]: [27.125.207.206]생성되었습니다.:\n14:17:31[info]: [27.125.207.207]생성되었습니다.:\n14:17:31[info]: [27.125.207.208]생성되었습니다.:\n14:17:31[info]: [27.125.207.209]생성되었습니다.:\n14:17:31[info]: [27.125.207.210]생성되었습니다.:\n14:17:31[info]: [27.125.207.211]생성되었습니다.:\n14:17:31[info]: [27.125.207.212]생성되었습니다.:\n14:17:31[info]: [27.125.207.213]생성되었습니다.:\n14:17:31[info]: [27.125.207.214]생성되었습니다.:\n14:17:31[info]: [27.125.207.215]생성되었습니다.:\n14:17:31[info]: [27.125.207.216]생성되었습니다.:\n14:17:31[info]: [27.125.207.217]생성되었습니다.:\n14:17:31[info]: [27.125.207.218]생성되었습니다.:\n14:17:31[info]: [27.125.207.219]생성되었습니다.:\n14:17:31[info]: [27.125.207.220]생성되었습니다.:\n14:17:31[info]: [27.125.207.221]생성되었습니다.:\n14:17:31[info]: [27.125.207.222]생성되었습니다.:\n14:17:31[info]: [27.125.207.223]생성되었습니다.:\n14:17:31[info]: [27.125.207.224]생성되었습니다.:\n14:17:31[info]: [27.125.207.225]생성되었습니다.:\n14:17:31[info]: [27.125.207.226]생성되었습니다.:\n14:17:31[info]: [27.125.207.227]생성되었습니다.:\n14:17:31[info]: [27.125.207.228]생성되었습니다.:\n14:17:31[info]: [27.125.207.229]생성되었습니다.:\n14:17:31[info]: [27.125.207.230]생성되었습니다.:\n14:17:31[info]: [27.125.207.231]생성되었습니다.:\n14:17:31[info]: [27.125.207.232]생성되었습니다.:\n14:17:31[info]: [27.125.207.233]생성되었습니다.:\n14:17:31[info]: [27.125.207.234]생성되었습니다.:\n14:17:31[info]: [27.125.207.235]생성되었습니다.:\n14:17:31[info]: [27.125.207.236]생성되었습니다.:\n14:17:31[info]: [27.125.207.237]생성되었습니다.:\n14:17:31[info]: [27.125.207.238]생성되었습니다.:\n14:17:31[info]: [27.125.207.239]생성되었습니다.:\n14:17:31[info]: [27.125.207.240]생성되었습니다.:\n14:17:31[info]: [27.125.207.241]생성되었습니다.:\n14:17:31[info]: [27.125.207.242]생성되었습니다.:\n14:17:31[info]: [27.125.207.243]생성되었습니다.:\n14:17:31[info]: [27.125.207.244]생성되었습니다.:\n14:17:31[info]: [27.125.207.245]생성되었습니다.:\n14:17:31[info]: [27.125.207.246]생성되었습니다.:\n14:17:31[info]: [27.125.207.247]생성되었습니다.:\n14:17:31[info]: [27.125.207.248]생성되었습니다.:\n14:17:31[info]: [27.125.207.249]생성되었습니다.:\n14:17:31[info]: [27.125.207.250]생성되었습니다.:\n14:17:31[info]: [27.125.207.251]생성되었습니다.:\n14:17:31[info]: [27.125.207.252]생성되었습니다.:\n14:17:31[info]: [27.125.207.253]생성되었습니다.:\n14:17:31[info]: [27.125.207.254]생성되었습니다.:\n14:17:31[info]: [27.125.207.255]생성되었습니다.:','normal',NULL,'2025-08-20 05:17:31',NULL),(2,1,'Equipment/Line->create 작업이 성공적으로 완료되었습니다.','14:18:04[info]: [USEN-1 1G]생성되었습니다.:\n14:18:04[info]: [13.22.34.0]생성되었습니다.:\n14:18:04[info]: [13.22.34.1]생성되었습니다.:\n14:18:04[info]: [13.22.34.2]생성되었습니다.:\n14:18:04[info]: [13.22.34.3]생성되었습니다.:\n14:18:04[info]: [13.22.34.4]생성되었습니다.:\n14:18:04[info]: [13.22.34.5]생성되었습니다.:\n14:18:04[info]: [13.22.34.6]생성되었습니다.:\n14:18:04[info]: [13.22.34.7]생성되었습니다.:\n14:18:04[info]: [13.22.34.8]생성되었습니다.:\n14:18:04[info]: [13.22.34.9]생성되었습니다.:\n14:18:04[info]: [13.22.34.10]생성되었습니다.:\n14:18:04[info]: [13.22.34.11]생성되었습니다.:\n14:18:04[info]: [13.22.34.12]생성되었습니다.:\n14:18:04[info]: [13.22.34.13]생성되었습니다.:\n14:18:04[info]: [13.22.34.14]생성되었습니다.:\n14:18:04[info]: [13.22.34.15]생성되었습니다.:\n14:18:04[info]: [13.22.34.16]생성되었습니다.:\n14:18:04[info]: [13.22.34.17]생성되었습니다.:\n14:18:04[info]: [13.22.34.18]생성되었습니다.:\n14:18:04[info]: [13.22.34.19]생성되었습니다.:\n14:18:04[info]: [13.22.34.20]생성되었습니다.:\n14:18:04[info]: [13.22.34.21]생성되었습니다.:\n14:18:04[info]: [13.22.34.22]생성되었습니다.:\n14:18:04[info]: [13.22.34.23]생성되었습니다.:\n14:18:04[info]: [13.22.34.24]생성되었습니다.:\n14:18:04[info]: [13.22.34.25]생성되었습니다.:\n14:18:04[info]: [13.22.34.26]생성되었습니다.:\n14:18:04[info]: [13.22.34.27]생성되었습니다.:\n14:18:04[info]: [13.22.34.28]생성되었습니다.:\n14:18:04[info]: [13.22.34.29]생성되었습니다.:\n14:18:04[info]: [13.22.34.30]생성되었습니다.:\n14:18:04[info]: [13.22.34.31]생성되었습니다.:\n14:18:04[info]: [13.22.34.32]생성되었습니다.:\n14:18:04[info]: [13.22.34.33]생성되었습니다.:\n14:18:04[info]: [13.22.34.34]생성되었습니다.:\n14:18:04[info]: [13.22.34.35]생성되었습니다.:\n14:18:04[info]: [13.22.34.36]생성되었습니다.:\n14:18:04[info]: [13.22.34.37]생성되었습니다.:\n14:18:04[info]: [13.22.34.38]생성되었습니다.:\n14:18:04[info]: [13.22.34.39]생성되었습니다.:\n14:18:04[info]: [13.22.34.40]생성되었습니다.:\n14:18:04[info]: [13.22.34.41]생성되었습니다.:\n14:18:04[info]: [13.22.34.42]생성되었습니다.:\n14:18:04[info]: [13.22.34.43]생성되었습니다.:\n14:18:04[info]: [13.22.34.44]생성되었습니다.:\n14:18:04[info]: [13.22.34.45]생성되었습니다.:\n14:18:04[info]: [13.22.34.46]생성되었습니다.:\n14:18:04[info]: [13.22.34.47]생성되었습니다.:\n14:18:04[info]: [13.22.34.48]생성되었습니다.:\n14:18:04[info]: [13.22.34.49]생성되었습니다.:\n14:18:04[info]: [13.22.34.50]생성되었습니다.:\n14:18:04[info]: [13.22.34.51]생성되었습니다.:\n14:18:04[info]: [13.22.34.52]생성되었습니다.:\n14:18:04[info]: [13.22.34.53]생성되었습니다.:\n14:18:04[info]: [13.22.34.54]생성되었습니다.:\n14:18:04[info]: [13.22.34.55]생성되었습니다.:\n14:18:04[info]: [13.22.34.56]생성되었습니다.:\n14:18:04[info]: [13.22.34.57]생성되었습니다.:\n14:18:04[info]: [13.22.34.58]생성되었습니다.:\n14:18:04[info]: [13.22.34.59]생성되었습니다.:\n14:18:04[info]: [13.22.34.60]생성되었습니다.:\n14:18:04[info]: [13.22.34.61]생성되었습니다.:\n14:18:04[info]: [13.22.34.62]생성되었습니다.:\n14:18:04[info]: [13.22.34.63]생성되었습니다.:\n14:18:04[info]: [13.22.34.64]생성되었습니다.:\n14:18:04[info]: [13.22.34.65]생성되었습니다.:\n14:18:04[info]: [13.22.34.66]생성되었습니다.:\n14:18:04[info]: [13.22.34.67]생성되었습니다.:\n14:18:04[info]: [13.22.34.68]생성되었습니다.:\n14:18:04[info]: [13.22.34.69]생성되었습니다.:\n14:18:04[info]: [13.22.34.70]생성되었습니다.:\n14:18:04[info]: [13.22.34.71]생성되었습니다.:\n14:18:04[info]: [13.22.34.72]생성되었습니다.:\n14:18:04[info]: [13.22.34.73]생성되었습니다.:\n14:18:04[info]: [13.22.34.74]생성되었습니다.:\n14:18:04[info]: [13.22.34.75]생성되었습니다.:\n14:18:04[info]: [13.22.34.76]생성되었습니다.:\n14:18:04[info]: [13.22.34.77]생성되었습니다.:\n14:18:04[info]: [13.22.34.78]생성되었습니다.:\n14:18:04[info]: [13.22.34.79]생성되었습니다.:\n14:18:04[info]: [13.22.34.80]생성되었습니다.:\n14:18:04[info]: [13.22.34.81]생성되었습니다.:\n14:18:04[info]: [13.22.34.82]생성되었습니다.:\n14:18:04[info]: [13.22.34.83]생성되었습니다.:\n14:18:04[info]: [13.22.34.84]생성되었습니다.:\n14:18:04[info]: [13.22.34.85]생성되었습니다.:\n14:18:04[info]: [13.22.34.86]생성되었습니다.:\n14:18:04[info]: [13.22.34.87]생성되었습니다.:\n14:18:04[info]: [13.22.34.88]생성되었습니다.:\n14:18:04[info]: [13.22.34.89]생성되었습니다.:\n14:18:04[info]: [13.22.34.90]생성되었습니다.:\n14:18:04[info]: [13.22.34.91]생성되었습니다.:\n14:18:04[info]: [13.22.34.92]생성되었습니다.:\n14:18:04[info]: [13.22.34.93]생성되었습니다.:\n14:18:04[info]: [13.22.34.94]생성되었습니다.:\n14:18:04[info]: [13.22.34.95]생성되었습니다.:\n14:18:04[info]: [13.22.34.96]생성되었습니다.:\n14:18:04[info]: [13.22.34.97]생성되었습니다.:\n14:18:04[info]: [13.22.34.98]생성되었습니다.:\n14:18:04[info]: [13.22.34.99]생성되었습니다.:\n14:18:04[info]: [13.22.34.100]생성되었습니다.:\n14:18:04[info]: [13.22.34.101]생성되었습니다.:\n14:18:04[info]: [13.22.34.102]생성되었습니다.:\n14:18:04[info]: [13.22.34.103]생성되었습니다.:\n14:18:04[info]: [13.22.34.104]생성되었습니다.:\n14:18:04[info]: [13.22.34.105]생성되었습니다.:\n14:18:04[info]: [13.22.34.106]생성되었습니다.:\n14:18:04[info]: [13.22.34.107]생성되었습니다.:\n14:18:04[info]: [13.22.34.108]생성되었습니다.:\n14:18:04[info]: [13.22.34.109]생성되었습니다.:\n14:18:04[info]: [13.22.34.110]생성되었습니다.:\n14:18:04[info]: [13.22.34.111]생성되었습니다.:\n14:18:04[info]: [13.22.34.112]생성되었습니다.:\n14:18:04[info]: [13.22.34.113]생성되었습니다.:\n14:18:04[info]: [13.22.34.114]생성되었습니다.:\n14:18:04[info]: [13.22.34.115]생성되었습니다.:\n14:18:04[info]: [13.22.34.116]생성되었습니다.:\n14:18:04[info]: [13.22.34.117]생성되었습니다.:\n14:18:04[info]: [13.22.34.118]생성되었습니다.:\n14:18:04[info]: [13.22.34.119]생성되었습니다.:\n14:18:04[info]: [13.22.34.120]생성되었습니다.:\n14:18:04[info]: [13.22.34.121]생성되었습니다.:\n14:18:04[info]: [13.22.34.122]생성되었습니다.:\n14:18:04[info]: [13.22.34.123]생성되었습니다.:\n14:18:04[info]: [13.22.34.124]생성되었습니다.:\n14:18:04[info]: [13.22.34.125]생성되었습니다.:\n14:18:04[info]: [13.22.34.126]생성되었습니다.:\n14:18:04[info]: [13.22.34.127]생성되었습니다.:\n14:18:04[info]: [13.22.34.128]생성되었습니다.:\n14:18:04[info]: [13.22.34.129]생성되었습니다.:\n14:18:04[info]: [13.22.34.130]생성되었습니다.:\n14:18:04[info]: [13.22.34.131]생성되었습니다.:\n14:18:04[info]: [13.22.34.132]생성되었습니다.:\n14:18:04[info]: [13.22.34.133]생성되었습니다.:\n14:18:04[info]: [13.22.34.134]생성되었습니다.:\n14:18:04[info]: [13.22.34.135]생성되었습니다.:\n14:18:04[info]: [13.22.34.136]생성되었습니다.:\n14:18:04[info]: [13.22.34.137]생성되었습니다.:\n14:18:04[info]: [13.22.34.138]생성되었습니다.:\n14:18:04[info]: [13.22.34.139]생성되었습니다.:\n14:18:04[info]: [13.22.34.140]생성되었습니다.:\n14:18:04[info]: [13.22.34.141]생성되었습니다.:\n14:18:04[info]: [13.22.34.142]생성되었습니다.:\n14:18:04[info]: [13.22.34.143]생성되었습니다.:\n14:18:04[info]: [13.22.34.144]생성되었습니다.:\n14:18:04[info]: [13.22.34.145]생성되었습니다.:\n14:18:04[info]: [13.22.34.146]생성되었습니다.:\n14:18:04[info]: [13.22.34.147]생성되었습니다.:\n14:18:04[info]: [13.22.34.148]생성되었습니다.:\n14:18:04[info]: [13.22.34.149]생성되었습니다.:\n14:18:04[info]: [13.22.34.150]생성되었습니다.:\n14:18:04[info]: [13.22.34.151]생성되었습니다.:\n14:18:04[info]: [13.22.34.152]생성되었습니다.:\n14:18:04[info]: [13.22.34.153]생성되었습니다.:\n14:18:04[info]: [13.22.34.154]생성되었습니다.:\n14:18:04[info]: [13.22.34.155]생성되었습니다.:\n14:18:04[info]: [13.22.34.156]생성되었습니다.:\n14:18:04[info]: [13.22.34.157]생성되었습니다.:\n14:18:04[info]: [13.22.34.158]생성되었습니다.:\n14:18:04[info]: [13.22.34.159]생성되었습니다.:\n14:18:04[info]: [13.22.34.160]생성되었습니다.:\n14:18:04[info]: [13.22.34.161]생성되었습니다.:\n14:18:04[info]: [13.22.34.162]생성되었습니다.:\n14:18:04[info]: [13.22.34.163]생성되었습니다.:\n14:18:04[info]: [13.22.34.164]생성되었습니다.:\n14:18:04[info]: [13.22.34.165]생성되었습니다.:\n14:18:04[info]: [13.22.34.166]생성되었습니다.:\n14:18:04[info]: [13.22.34.167]생성되었습니다.:\n14:18:04[info]: [13.22.34.168]생성되었습니다.:\n14:18:04[info]: [13.22.34.169]생성되었습니다.:\n14:18:04[info]: [13.22.34.170]생성되었습니다.:\n14:18:04[info]: [13.22.34.171]생성되었습니다.:\n14:18:04[info]: [13.22.34.172]생성되었습니다.:\n14:18:04[info]: [13.22.34.173]생성되었습니다.:\n14:18:04[info]: [13.22.34.174]생성되었습니다.:\n14:18:04[info]: [13.22.34.175]생성되었습니다.:\n14:18:04[info]: [13.22.34.176]생성되었습니다.:\n14:18:04[info]: [13.22.34.177]생성되었습니다.:\n14:18:04[info]: [13.22.34.178]생성되었습니다.:\n14:18:04[info]: [13.22.34.179]생성되었습니다.:\n14:18:04[info]: [13.22.34.180]생성되었습니다.:\n14:18:04[info]: [13.22.34.181]생성되었습니다.:\n14:18:04[info]: [13.22.34.182]생성되었습니다.:\n14:18:04[info]: [13.22.34.183]생성되었습니다.:\n14:18:04[info]: [13.22.34.184]생성되었습니다.:\n14:18:04[info]: [13.22.34.185]생성되었습니다.:\n14:18:04[info]: [13.22.34.186]생성되었습니다.:\n14:18:04[info]: [13.22.34.187]생성되었습니다.:\n14:18:04[info]: [13.22.34.188]생성되었습니다.:\n14:18:04[info]: [13.22.34.189]생성되었습니다.:\n14:18:04[info]: [13.22.34.190]생성되었습니다.:\n14:18:04[info]: [13.22.34.191]생성되었습니다.:\n14:18:04[info]: [13.22.34.192]생성되었습니다.:\n14:18:04[info]: [13.22.34.193]생성되었습니다.:\n14:18:04[info]: [13.22.34.194]생성되었습니다.:\n14:18:04[info]: [13.22.34.195]생성되었습니다.:\n14:18:04[info]: [13.22.34.196]생성되었습니다.:\n14:18:04[info]: [13.22.34.197]생성되었습니다.:\n14:18:04[info]: [13.22.34.198]생성되었습니다.:\n14:18:04[info]: [13.22.34.199]생성되었습니다.:\n14:18:04[info]: [13.22.34.200]생성되었습니다.:\n14:18:04[info]: [13.22.34.201]생성되었습니다.:\n14:18:04[info]: [13.22.34.202]생성되었습니다.:\n14:18:04[info]: [13.22.34.203]생성되었습니다.:\n14:18:04[info]: [13.22.34.204]생성되었습니다.:\n14:18:04[info]: [13.22.34.205]생성되었습니다.:\n14:18:04[info]: [13.22.34.206]생성되었습니다.:\n14:18:04[info]: [13.22.34.207]생성되었습니다.:\n14:18:04[info]: [13.22.34.208]생성되었습니다.:\n14:18:04[info]: [13.22.34.209]생성되었습니다.:\n14:18:04[info]: [13.22.34.210]생성되었습니다.:\n14:18:04[info]: [13.22.34.211]생성되었습니다.:\n14:18:04[info]: [13.22.34.212]생성되었습니다.:\n14:18:04[info]: [13.22.34.213]생성되었습니다.:\n14:18:04[info]: [13.22.34.214]생성되었습니다.:\n14:18:04[info]: [13.22.34.215]생성되었습니다.:\n14:18:04[info]: [13.22.34.216]생성되었습니다.:\n14:18:04[info]: [13.22.34.217]생성되었습니다.:\n14:18:04[info]: [13.22.34.218]생성되었습니다.:\n14:18:04[info]: [13.22.34.219]생성되었습니다.:\n14:18:04[info]: [13.22.34.220]생성되었습니다.:\n14:18:04[info]: [13.22.34.221]생성되었습니다.:\n14:18:04[info]: [13.22.34.222]생성되었습니다.:\n14:18:04[info]: [13.22.34.223]생성되었습니다.:\n14:18:04[info]: [13.22.34.224]생성되었습니다.:\n14:18:04[info]: [13.22.34.225]생성되었습니다.:\n14:18:04[info]: [13.22.34.226]생성되었습니다.:\n14:18:04[info]: [13.22.34.227]생성되었습니다.:\n14:18:04[info]: [13.22.34.228]생성되었습니다.:\n14:18:04[info]: [13.22.34.229]생성되었습니다.:\n14:18:04[info]: [13.22.34.230]생성되었습니다.:\n14:18:04[info]: [13.22.34.231]생성되었습니다.:\n14:18:04[info]: [13.22.34.232]생성되었습니다.:\n14:18:04[info]: [13.22.34.233]생성되었습니다.:\n14:18:04[info]: [13.22.34.234]생성되었습니다.:\n14:18:04[info]: [13.22.34.235]생성되었습니다.:\n14:18:04[info]: [13.22.34.236]생성되었습니다.:\n14:18:04[info]: [13.22.34.237]생성되었습니다.:\n14:18:04[info]: [13.22.34.238]생성되었습니다.:\n14:18:04[info]: [13.22.34.239]생성되었습니다.:\n14:18:04[info]: [13.22.34.240]생성되었습니다.:\n14:18:04[info]: [13.22.34.241]생성되었습니다.:\n14:18:04[info]: [13.22.34.242]생성되었습니다.:\n14:18:04[info]: [13.22.34.243]생성되었습니다.:\n14:18:04[info]: [13.22.34.244]생성되었습니다.:\n14:18:04[info]: [13.22.34.245]생성되었습니다.:\n14:18:04[info]: [13.22.34.246]생성되었습니다.:\n14:18:04[info]: [13.22.34.247]생성되었습니다.:\n14:18:04[info]: [13.22.34.248]생성되었습니다.:\n14:18:04[info]: [13.22.34.249]생성되었습니다.:\n14:18:04[info]: [13.22.34.250]생성되었습니다.:\n14:18:04[info]: [13.22.34.251]생성되었습니다.:\n14:18:04[info]: [13.22.34.252]생성되었습니다.:\n14:18:04[info]: [13.22.34.253]생성되었습니다.:\n14:18:04[info]: [13.22.34.254]생성되었습니다.:\n14:18:04[info]: [13.22.34.255]생성되었습니다.:','normal',NULL,'2025-08-20 05:18:04',NULL),(3,1,'Customer/Account->create_form Undefined array key \"user_uid\"','15:08:31[debug]: Undefined array key "user_uid"','normal',NULL,'2025-08-20 06:08:31',NULL),(4,1,'Customer/Client->create Customer/Client 작업 데이터 검증 오류발생\nThe site field is required.\nThe name field is required.\nThe email field must contain a valid email address.\nThe role field is required.','15:51:38[debug]: Customer/Client 작업 데이터 검증 오류발생\nThe site field is required.\nThe name field is required.\nThe email field must contain a valid email address.\nThe role field is required.','normal',NULL,'2025-08-20 06:51:38',NULL),(5,1,'Customer/Client->create Customer/Client 작업 데이터 검증 오류발생\nThe site field is required.\nThe name field is required.\nThe role field is required.','15:56:15[debug]: Customer/Client 작업 데이터 검증 오류발생\nThe site field is required.\nThe name field is required.\nThe role field is required.','normal',NULL,'2025-08-20 06:56:15',NULL),(6,1,'Customer/Client->create Customer/Client 작업 데이터 검증 오류발생\nThe site field is required.\nThe name field is required.\nThe role field is required.','16:15:08[debug]: Customer/Client 작업 데이터 검증 오류발생\nThe site field is required.\nThe name field is required.\nThe role field is required.','normal',NULL,'2025-08-20 07:15:08',NULL),(7,1,'Equipment/CS->create_form Undefined array key \"clientinfo_uid\"','17:04:25[debug]: Undefined array key "clientinfo_uid"','normal',NULL,'2025-08-20 08:04:25',NULL); +INSERT INTO `user_history` VALUES (1,1,'Equipment/Line->create 작업이 성공적으로 완료되었습니다.','14:17:31[info]: [Softbank-1 10G]생성되었습니다.:\n14:17:31[info]: [27.125.207.0]생성되었습니다.:\n14:17:31[info]: [27.125.207.1]생성되었습니다.:\n14:17:31[info]: [27.125.207.2]생성되었습니다.:\n14:17:31[info]: [27.125.207.3]생성되었습니다.:\n14:17:31[info]: [27.125.207.4]생성되었습니다.:\n14:17:31[info]: [27.125.207.5]생성되었습니다.:\n14:17:31[info]: [27.125.207.6]생성되었습니다.:\n14:17:31[info]: [27.125.207.7]생성되었습니다.:\n14:17:31[info]: [27.125.207.8]생성되었습니다.:\n14:17:31[info]: [27.125.207.9]생성되었습니다.:\n14:17:31[info]: [27.125.207.10]생성되었습니다.:\n14:17:31[info]: [27.125.207.11]생성되었습니다.:\n14:17:31[info]: [27.125.207.12]생성되었습니다.:\n14:17:31[info]: [27.125.207.13]생성되었습니다.:\n14:17:31[info]: [27.125.207.14]생성되었습니다.:\n14:17:31[info]: [27.125.207.15]생성되었습니다.:\n14:17:31[info]: [27.125.207.16]생성되었습니다.:\n14:17:31[info]: [27.125.207.17]생성되었습니다.:\n14:17:31[info]: [27.125.207.18]생성되었습니다.:\n14:17:31[info]: [27.125.207.19]생성되었습니다.:\n14:17:31[info]: [27.125.207.20]생성되었습니다.:\n14:17:31[info]: [27.125.207.21]생성되었습니다.:\n14:17:31[info]: [27.125.207.22]생성되었습니다.:\n14:17:31[info]: [27.125.207.23]생성되었습니다.:\n14:17:31[info]: [27.125.207.24]생성되었습니다.:\n14:17:31[info]: [27.125.207.25]생성되었습니다.:\n14:17:31[info]: [27.125.207.26]생성되었습니다.:\n14:17:31[info]: [27.125.207.27]생성되었습니다.:\n14:17:31[info]: [27.125.207.28]생성되었습니다.:\n14:17:31[info]: [27.125.207.29]생성되었습니다.:\n14:17:31[info]: [27.125.207.30]생성되었습니다.:\n14:17:31[info]: [27.125.207.31]생성되었습니다.:\n14:17:31[info]: [27.125.207.32]생성되었습니다.:\n14:17:31[info]: [27.125.207.33]생성되었습니다.:\n14:17:31[info]: [27.125.207.34]생성되었습니다.:\n14:17:31[info]: [27.125.207.35]생성되었습니다.:\n14:17:31[info]: [27.125.207.36]생성되었습니다.:\n14:17:31[info]: [27.125.207.37]생성되었습니다.:\n14:17:31[info]: [27.125.207.38]생성되었습니다.:\n14:17:31[info]: [27.125.207.39]생성되었습니다.:\n14:17:31[info]: [27.125.207.40]생성되었습니다.:\n14:17:31[info]: [27.125.207.41]생성되었습니다.:\n14:17:31[info]: [27.125.207.42]생성되었습니다.:\n14:17:31[info]: [27.125.207.43]생성되었습니다.:\n14:17:31[info]: [27.125.207.44]생성되었습니다.:\n14:17:31[info]: [27.125.207.45]생성되었습니다.:\n14:17:31[info]: [27.125.207.46]생성되었습니다.:\n14:17:31[info]: [27.125.207.47]생성되었습니다.:\n14:17:31[info]: [27.125.207.48]생성되었습니다.:\n14:17:31[info]: [27.125.207.49]생성되었습니다.:\n14:17:31[info]: [27.125.207.50]생성되었습니다.:\n14:17:31[info]: [27.125.207.51]생성되었습니다.:\n14:17:31[info]: [27.125.207.52]생성되었습니다.:\n14:17:31[info]: [27.125.207.53]생성되었습니다.:\n14:17:31[info]: [27.125.207.54]생성되었습니다.:\n14:17:31[info]: [27.125.207.55]생성되었습니다.:\n14:17:31[info]: [27.125.207.56]생성되었습니다.:\n14:17:31[info]: [27.125.207.57]생성되었습니다.:\n14:17:31[info]: [27.125.207.58]생성되었습니다.:\n14:17:31[info]: [27.125.207.59]생성되었습니다.:\n14:17:31[info]: [27.125.207.60]생성되었습니다.:\n14:17:31[info]: [27.125.207.61]생성되었습니다.:\n14:17:31[info]: [27.125.207.62]생성되었습니다.:\n14:17:31[info]: [27.125.207.63]생성되었습니다.:\n14:17:31[info]: [27.125.207.64]생성되었습니다.:\n14:17:31[info]: [27.125.207.65]생성되었습니다.:\n14:17:31[info]: [27.125.207.66]생성되었습니다.:\n14:17:31[info]: [27.125.207.67]생성되었습니다.:\n14:17:31[info]: [27.125.207.68]생성되었습니다.:\n14:17:31[info]: [27.125.207.69]생성되었습니다.:\n14:17:31[info]: [27.125.207.70]생성되었습니다.:\n14:17:31[info]: [27.125.207.71]생성되었습니다.:\n14:17:31[info]: [27.125.207.72]생성되었습니다.:\n14:17:31[info]: [27.125.207.73]생성되었습니다.:\n14:17:31[info]: [27.125.207.74]생성되었습니다.:\n14:17:31[info]: [27.125.207.75]생성되었습니다.:\n14:17:31[info]: [27.125.207.76]생성되었습니다.:\n14:17:31[info]: [27.125.207.77]생성되었습니다.:\n14:17:31[info]: [27.125.207.78]생성되었습니다.:\n14:17:31[info]: [27.125.207.79]생성되었습니다.:\n14:17:31[info]: [27.125.207.80]생성되었습니다.:\n14:17:31[info]: [27.125.207.81]생성되었습니다.:\n14:17:31[info]: [27.125.207.82]생성되었습니다.:\n14:17:31[info]: [27.125.207.83]생성되었습니다.:\n14:17:31[info]: [27.125.207.84]생성되었습니다.:\n14:17:31[info]: [27.125.207.85]생성되었습니다.:\n14:17:31[info]: [27.125.207.86]생성되었습니다.:\n14:17:31[info]: [27.125.207.87]생성되었습니다.:\n14:17:31[info]: [27.125.207.88]생성되었습니다.:\n14:17:31[info]: [27.125.207.89]생성되었습니다.:\n14:17:31[info]: [27.125.207.90]생성되었습니다.:\n14:17:31[info]: [27.125.207.91]생성되었습니다.:\n14:17:31[info]: [27.125.207.92]생성되었습니다.:\n14:17:31[info]: [27.125.207.93]생성되었습니다.:\n14:17:31[info]: [27.125.207.94]생성되었습니다.:\n14:17:31[info]: [27.125.207.95]생성되었습니다.:\n14:17:31[info]: [27.125.207.96]생성되었습니다.:\n14:17:31[info]: [27.125.207.97]생성되었습니다.:\n14:17:31[info]: [27.125.207.98]생성되었습니다.:\n14:17:31[info]: [27.125.207.99]생성되었습니다.:\n14:17:31[info]: [27.125.207.100]생성되었습니다.:\n14:17:31[info]: [27.125.207.101]생성되었습니다.:\n14:17:31[info]: [27.125.207.102]생성되었습니다.:\n14:17:31[info]: [27.125.207.103]생성되었습니다.:\n14:17:31[info]: [27.125.207.104]생성되었습니다.:\n14:17:31[info]: [27.125.207.105]생성되었습니다.:\n14:17:31[info]: [27.125.207.106]생성되었습니다.:\n14:17:31[info]: [27.125.207.107]생성되었습니다.:\n14:17:31[info]: [27.125.207.108]생성되었습니다.:\n14:17:31[info]: [27.125.207.109]생성되었습니다.:\n14:17:31[info]: [27.125.207.110]생성되었습니다.:\n14:17:31[info]: [27.125.207.111]생성되었습니다.:\n14:17:31[info]: [27.125.207.112]생성되었습니다.:\n14:17:31[info]: [27.125.207.113]생성되었습니다.:\n14:17:31[info]: [27.125.207.114]생성되었습니다.:\n14:17:31[info]: [27.125.207.115]생성되었습니다.:\n14:17:31[info]: [27.125.207.116]생성되었습니다.:\n14:17:31[info]: [27.125.207.117]생성되었습니다.:\n14:17:31[info]: [27.125.207.118]생성되었습니다.:\n14:17:31[info]: [27.125.207.119]생성되었습니다.:\n14:17:31[info]: [27.125.207.120]생성되었습니다.:\n14:17:31[info]: [27.125.207.121]생성되었습니다.:\n14:17:31[info]: [27.125.207.122]생성되었습니다.:\n14:17:31[info]: [27.125.207.123]생성되었습니다.:\n14:17:31[info]: [27.125.207.124]생성되었습니다.:\n14:17:31[info]: [27.125.207.125]생성되었습니다.:\n14:17:31[info]: [27.125.207.126]생성되었습니다.:\n14:17:31[info]: [27.125.207.127]생성되었습니다.:\n14:17:31[info]: [27.125.207.128]생성되었습니다.:\n14:17:31[info]: [27.125.207.129]생성되었습니다.:\n14:17:31[info]: [27.125.207.130]생성되었습니다.:\n14:17:31[info]: [27.125.207.131]생성되었습니다.:\n14:17:31[info]: [27.125.207.132]생성되었습니다.:\n14:17:31[info]: [27.125.207.133]생성되었습니다.:\n14:17:31[info]: [27.125.207.134]생성되었습니다.:\n14:17:31[info]: [27.125.207.135]생성되었습니다.:\n14:17:31[info]: [27.125.207.136]생성되었습니다.:\n14:17:31[info]: [27.125.207.137]생성되었습니다.:\n14:17:31[info]: [27.125.207.138]생성되었습니다.:\n14:17:31[info]: [27.125.207.139]생성되었습니다.:\n14:17:31[info]: [27.125.207.140]생성되었습니다.:\n14:17:31[info]: [27.125.207.141]생성되었습니다.:\n14:17:31[info]: [27.125.207.142]생성되었습니다.:\n14:17:31[info]: [27.125.207.143]생성되었습니다.:\n14:17:31[info]: [27.125.207.144]생성되었습니다.:\n14:17:31[info]: [27.125.207.145]생성되었습니다.:\n14:17:31[info]: [27.125.207.146]생성되었습니다.:\n14:17:31[info]: [27.125.207.147]생성되었습니다.:\n14:17:31[info]: [27.125.207.148]생성되었습니다.:\n14:17:31[info]: [27.125.207.149]생성되었습니다.:\n14:17:31[info]: [27.125.207.150]생성되었습니다.:\n14:17:31[info]: [27.125.207.151]생성되었습니다.:\n14:17:31[info]: [27.125.207.152]생성되었습니다.:\n14:17:31[info]: [27.125.207.153]생성되었습니다.:\n14:17:31[info]: [27.125.207.154]생성되었습니다.:\n14:17:31[info]: [27.125.207.155]생성되었습니다.:\n14:17:31[info]: [27.125.207.156]생성되었습니다.:\n14:17:31[info]: [27.125.207.157]생성되었습니다.:\n14:17:31[info]: [27.125.207.158]생성되었습니다.:\n14:17:31[info]: [27.125.207.159]생성되었습니다.:\n14:17:31[info]: [27.125.207.160]생성되었습니다.:\n14:17:31[info]: [27.125.207.161]생성되었습니다.:\n14:17:31[info]: [27.125.207.162]생성되었습니다.:\n14:17:31[info]: [27.125.207.163]생성되었습니다.:\n14:17:31[info]: [27.125.207.164]생성되었습니다.:\n14:17:31[info]: [27.125.207.165]생성되었습니다.:\n14:17:31[info]: [27.125.207.166]생성되었습니다.:\n14:17:31[info]: [27.125.207.167]생성되었습니다.:\n14:17:31[info]: [27.125.207.168]생성되었습니다.:\n14:17:31[info]: [27.125.207.169]생성되었습니다.:\n14:17:31[info]: [27.125.207.170]생성되었습니다.:\n14:17:31[info]: [27.125.207.171]생성되었습니다.:\n14:17:31[info]: [27.125.207.172]생성되었습니다.:\n14:17:31[info]: [27.125.207.173]생성되었습니다.:\n14:17:31[info]: [27.125.207.174]생성되었습니다.:\n14:17:31[info]: [27.125.207.175]생성되었습니다.:\n14:17:31[info]: [27.125.207.176]생성되었습니다.:\n14:17:31[info]: [27.125.207.177]생성되었습니다.:\n14:17:31[info]: [27.125.207.178]생성되었습니다.:\n14:17:31[info]: [27.125.207.179]생성되었습니다.:\n14:17:31[info]: [27.125.207.180]생성되었습니다.:\n14:17:31[info]: [27.125.207.181]생성되었습니다.:\n14:17:31[info]: [27.125.207.182]생성되었습니다.:\n14:17:31[info]: [27.125.207.183]생성되었습니다.:\n14:17:31[info]: [27.125.207.184]생성되었습니다.:\n14:17:31[info]: [27.125.207.185]생성되었습니다.:\n14:17:31[info]: [27.125.207.186]생성되었습니다.:\n14:17:31[info]: [27.125.207.187]생성되었습니다.:\n14:17:31[info]: [27.125.207.188]생성되었습니다.:\n14:17:31[info]: [27.125.207.189]생성되었습니다.:\n14:17:31[info]: [27.125.207.190]생성되었습니다.:\n14:17:31[info]: [27.125.207.191]생성되었습니다.:\n14:17:31[info]: [27.125.207.192]생성되었습니다.:\n14:17:31[info]: [27.125.207.193]생성되었습니다.:\n14:17:31[info]: [27.125.207.194]생성되었습니다.:\n14:17:31[info]: [27.125.207.195]생성되었습니다.:\n14:17:31[info]: [27.125.207.196]생성되었습니다.:\n14:17:31[info]: [27.125.207.197]생성되었습니다.:\n14:17:31[info]: [27.125.207.198]생성되었습니다.:\n14:17:31[info]: [27.125.207.199]생성되었습니다.:\n14:17:31[info]: [27.125.207.200]생성되었습니다.:\n14:17:31[info]: [27.125.207.201]생성되었습니다.:\n14:17:31[info]: [27.125.207.202]생성되었습니다.:\n14:17:31[info]: [27.125.207.203]생성되었습니다.:\n14:17:31[info]: [27.125.207.204]생성되었습니다.:\n14:17:31[info]: [27.125.207.205]생성되었습니다.:\n14:17:31[info]: [27.125.207.206]생성되었습니다.:\n14:17:31[info]: [27.125.207.207]생성되었습니다.:\n14:17:31[info]: [27.125.207.208]생성되었습니다.:\n14:17:31[info]: [27.125.207.209]생성되었습니다.:\n14:17:31[info]: [27.125.207.210]생성되었습니다.:\n14:17:31[info]: [27.125.207.211]생성되었습니다.:\n14:17:31[info]: [27.125.207.212]생성되었습니다.:\n14:17:31[info]: [27.125.207.213]생성되었습니다.:\n14:17:31[info]: [27.125.207.214]생성되었습니다.:\n14:17:31[info]: [27.125.207.215]생성되었습니다.:\n14:17:31[info]: [27.125.207.216]생성되었습니다.:\n14:17:31[info]: [27.125.207.217]생성되었습니다.:\n14:17:31[info]: [27.125.207.218]생성되었습니다.:\n14:17:31[info]: [27.125.207.219]생성되었습니다.:\n14:17:31[info]: [27.125.207.220]생성되었습니다.:\n14:17:31[info]: [27.125.207.221]생성되었습니다.:\n14:17:31[info]: [27.125.207.222]생성되었습니다.:\n14:17:31[info]: [27.125.207.223]생성되었습니다.:\n14:17:31[info]: [27.125.207.224]생성되었습니다.:\n14:17:31[info]: [27.125.207.225]생성되었습니다.:\n14:17:31[info]: [27.125.207.226]생성되었습니다.:\n14:17:31[info]: [27.125.207.227]생성되었습니다.:\n14:17:31[info]: [27.125.207.228]생성되었습니다.:\n14:17:31[info]: [27.125.207.229]생성되었습니다.:\n14:17:31[info]: [27.125.207.230]생성되었습니다.:\n14:17:31[info]: [27.125.207.231]생성되었습니다.:\n14:17:31[info]: [27.125.207.232]생성되었습니다.:\n14:17:31[info]: [27.125.207.233]생성되었습니다.:\n14:17:31[info]: [27.125.207.234]생성되었습니다.:\n14:17:31[info]: [27.125.207.235]생성되었습니다.:\n14:17:31[info]: [27.125.207.236]생성되었습니다.:\n14:17:31[info]: [27.125.207.237]생성되었습니다.:\n14:17:31[info]: [27.125.207.238]생성되었습니다.:\n14:17:31[info]: [27.125.207.239]생성되었습니다.:\n14:17:31[info]: [27.125.207.240]생성되었습니다.:\n14:17:31[info]: [27.125.207.241]생성되었습니다.:\n14:17:31[info]: [27.125.207.242]생성되었습니다.:\n14:17:31[info]: [27.125.207.243]생성되었습니다.:\n14:17:31[info]: [27.125.207.244]생성되었습니다.:\n14:17:31[info]: [27.125.207.245]생성되었습니다.:\n14:17:31[info]: [27.125.207.246]생성되었습니다.:\n14:17:31[info]: [27.125.207.247]생성되었습니다.:\n14:17:31[info]: [27.125.207.248]생성되었습니다.:\n14:17:31[info]: [27.125.207.249]생성되었습니다.:\n14:17:31[info]: [27.125.207.250]생성되었습니다.:\n14:17:31[info]: [27.125.207.251]생성되었습니다.:\n14:17:31[info]: [27.125.207.252]생성되었습니다.:\n14:17:31[info]: [27.125.207.253]생성되었습니다.:\n14:17:31[info]: [27.125.207.254]생성되었습니다.:\n14:17:31[info]: [27.125.207.255]생성되었습니다.:','normal',NULL,'2025-08-20 05:17:31',NULL),(2,1,'Equipment/Line->create 작업이 성공적으로 완료되었습니다.','14:18:04[info]: [USEN-1 1G]생성되었습니다.:\n14:18:04[info]: [13.22.34.0]생성되었습니다.:\n14:18:04[info]: [13.22.34.1]생성되었습니다.:\n14:18:04[info]: [13.22.34.2]생성되었습니다.:\n14:18:04[info]: [13.22.34.3]생성되었습니다.:\n14:18:04[info]: [13.22.34.4]생성되었습니다.:\n14:18:04[info]: [13.22.34.5]생성되었습니다.:\n14:18:04[info]: [13.22.34.6]생성되었습니다.:\n14:18:04[info]: [13.22.34.7]생성되었습니다.:\n14:18:04[info]: [13.22.34.8]생성되었습니다.:\n14:18:04[info]: [13.22.34.9]생성되었습니다.:\n14:18:04[info]: [13.22.34.10]생성되었습니다.:\n14:18:04[info]: [13.22.34.11]생성되었습니다.:\n14:18:04[info]: [13.22.34.12]생성되었습니다.:\n14:18:04[info]: [13.22.34.13]생성되었습니다.:\n14:18:04[info]: [13.22.34.14]생성되었습니다.:\n14:18:04[info]: [13.22.34.15]생성되었습니다.:\n14:18:04[info]: [13.22.34.16]생성되었습니다.:\n14:18:04[info]: [13.22.34.17]생성되었습니다.:\n14:18:04[info]: [13.22.34.18]생성되었습니다.:\n14:18:04[info]: [13.22.34.19]생성되었습니다.:\n14:18:04[info]: [13.22.34.20]생성되었습니다.:\n14:18:04[info]: [13.22.34.21]생성되었습니다.:\n14:18:04[info]: [13.22.34.22]생성되었습니다.:\n14:18:04[info]: [13.22.34.23]생성되었습니다.:\n14:18:04[info]: [13.22.34.24]생성되었습니다.:\n14:18:04[info]: [13.22.34.25]생성되었습니다.:\n14:18:04[info]: [13.22.34.26]생성되었습니다.:\n14:18:04[info]: [13.22.34.27]생성되었습니다.:\n14:18:04[info]: [13.22.34.28]생성되었습니다.:\n14:18:04[info]: [13.22.34.29]생성되었습니다.:\n14:18:04[info]: [13.22.34.30]생성되었습니다.:\n14:18:04[info]: [13.22.34.31]생성되었습니다.:\n14:18:04[info]: [13.22.34.32]생성되었습니다.:\n14:18:04[info]: [13.22.34.33]생성되었습니다.:\n14:18:04[info]: [13.22.34.34]생성되었습니다.:\n14:18:04[info]: [13.22.34.35]생성되었습니다.:\n14:18:04[info]: [13.22.34.36]생성되었습니다.:\n14:18:04[info]: [13.22.34.37]생성되었습니다.:\n14:18:04[info]: [13.22.34.38]생성되었습니다.:\n14:18:04[info]: [13.22.34.39]생성되었습니다.:\n14:18:04[info]: [13.22.34.40]생성되었습니다.:\n14:18:04[info]: [13.22.34.41]생성되었습니다.:\n14:18:04[info]: [13.22.34.42]생성되었습니다.:\n14:18:04[info]: [13.22.34.43]생성되었습니다.:\n14:18:04[info]: [13.22.34.44]생성되었습니다.:\n14:18:04[info]: [13.22.34.45]생성되었습니다.:\n14:18:04[info]: [13.22.34.46]생성되었습니다.:\n14:18:04[info]: [13.22.34.47]생성되었습니다.:\n14:18:04[info]: [13.22.34.48]생성되었습니다.:\n14:18:04[info]: [13.22.34.49]생성되었습니다.:\n14:18:04[info]: [13.22.34.50]생성되었습니다.:\n14:18:04[info]: [13.22.34.51]생성되었습니다.:\n14:18:04[info]: [13.22.34.52]생성되었습니다.:\n14:18:04[info]: [13.22.34.53]생성되었습니다.:\n14:18:04[info]: [13.22.34.54]생성되었습니다.:\n14:18:04[info]: [13.22.34.55]생성되었습니다.:\n14:18:04[info]: [13.22.34.56]생성되었습니다.:\n14:18:04[info]: [13.22.34.57]생성되었습니다.:\n14:18:04[info]: [13.22.34.58]생성되었습니다.:\n14:18:04[info]: [13.22.34.59]생성되었습니다.:\n14:18:04[info]: [13.22.34.60]생성되었습니다.:\n14:18:04[info]: [13.22.34.61]생성되었습니다.:\n14:18:04[info]: [13.22.34.62]생성되었습니다.:\n14:18:04[info]: [13.22.34.63]생성되었습니다.:\n14:18:04[info]: [13.22.34.64]생성되었습니다.:\n14:18:04[info]: [13.22.34.65]생성되었습니다.:\n14:18:04[info]: [13.22.34.66]생성되었습니다.:\n14:18:04[info]: [13.22.34.67]생성되었습니다.:\n14:18:04[info]: [13.22.34.68]생성되었습니다.:\n14:18:04[info]: [13.22.34.69]생성되었습니다.:\n14:18:04[info]: [13.22.34.70]생성되었습니다.:\n14:18:04[info]: [13.22.34.71]생성되었습니다.:\n14:18:04[info]: [13.22.34.72]생성되었습니다.:\n14:18:04[info]: [13.22.34.73]생성되었습니다.:\n14:18:04[info]: [13.22.34.74]생성되었습니다.:\n14:18:04[info]: [13.22.34.75]생성되었습니다.:\n14:18:04[info]: [13.22.34.76]생성되었습니다.:\n14:18:04[info]: [13.22.34.77]생성되었습니다.:\n14:18:04[info]: [13.22.34.78]생성되었습니다.:\n14:18:04[info]: [13.22.34.79]생성되었습니다.:\n14:18:04[info]: [13.22.34.80]생성되었습니다.:\n14:18:04[info]: [13.22.34.81]생성되었습니다.:\n14:18:04[info]: [13.22.34.82]생성되었습니다.:\n14:18:04[info]: [13.22.34.83]생성되었습니다.:\n14:18:04[info]: [13.22.34.84]생성되었습니다.:\n14:18:04[info]: [13.22.34.85]생성되었습니다.:\n14:18:04[info]: [13.22.34.86]생성되었습니다.:\n14:18:04[info]: [13.22.34.87]생성되었습니다.:\n14:18:04[info]: [13.22.34.88]생성되었습니다.:\n14:18:04[info]: [13.22.34.89]생성되었습니다.:\n14:18:04[info]: [13.22.34.90]생성되었습니다.:\n14:18:04[info]: [13.22.34.91]생성되었습니다.:\n14:18:04[info]: [13.22.34.92]생성되었습니다.:\n14:18:04[info]: [13.22.34.93]생성되었습니다.:\n14:18:04[info]: [13.22.34.94]생성되었습니다.:\n14:18:04[info]: [13.22.34.95]생성되었습니다.:\n14:18:04[info]: [13.22.34.96]생성되었습니다.:\n14:18:04[info]: [13.22.34.97]생성되었습니다.:\n14:18:04[info]: [13.22.34.98]생성되었습니다.:\n14:18:04[info]: [13.22.34.99]생성되었습니다.:\n14:18:04[info]: [13.22.34.100]생성되었습니다.:\n14:18:04[info]: [13.22.34.101]생성되었습니다.:\n14:18:04[info]: [13.22.34.102]생성되었습니다.:\n14:18:04[info]: [13.22.34.103]생성되었습니다.:\n14:18:04[info]: [13.22.34.104]생성되었습니다.:\n14:18:04[info]: [13.22.34.105]생성되었습니다.:\n14:18:04[info]: [13.22.34.106]생성되었습니다.:\n14:18:04[info]: [13.22.34.107]생성되었습니다.:\n14:18:04[info]: [13.22.34.108]생성되었습니다.:\n14:18:04[info]: [13.22.34.109]생성되었습니다.:\n14:18:04[info]: [13.22.34.110]생성되었습니다.:\n14:18:04[info]: [13.22.34.111]생성되었습니다.:\n14:18:04[info]: [13.22.34.112]생성되었습니다.:\n14:18:04[info]: [13.22.34.113]생성되었습니다.:\n14:18:04[info]: [13.22.34.114]생성되었습니다.:\n14:18:04[info]: [13.22.34.115]생성되었습니다.:\n14:18:04[info]: [13.22.34.116]생성되었습니다.:\n14:18:04[info]: [13.22.34.117]생성되었습니다.:\n14:18:04[info]: [13.22.34.118]생성되었습니다.:\n14:18:04[info]: [13.22.34.119]생성되었습니다.:\n14:18:04[info]: [13.22.34.120]생성되었습니다.:\n14:18:04[info]: [13.22.34.121]생성되었습니다.:\n14:18:04[info]: [13.22.34.122]생성되었습니다.:\n14:18:04[info]: [13.22.34.123]생성되었습니다.:\n14:18:04[info]: [13.22.34.124]생성되었습니다.:\n14:18:04[info]: [13.22.34.125]생성되었습니다.:\n14:18:04[info]: [13.22.34.126]생성되었습니다.:\n14:18:04[info]: [13.22.34.127]생성되었습니다.:\n14:18:04[info]: [13.22.34.128]생성되었습니다.:\n14:18:04[info]: [13.22.34.129]생성되었습니다.:\n14:18:04[info]: [13.22.34.130]생성되었습니다.:\n14:18:04[info]: [13.22.34.131]생성되었습니다.:\n14:18:04[info]: [13.22.34.132]생성되었습니다.:\n14:18:04[info]: [13.22.34.133]생성되었습니다.:\n14:18:04[info]: [13.22.34.134]생성되었습니다.:\n14:18:04[info]: [13.22.34.135]생성되었습니다.:\n14:18:04[info]: [13.22.34.136]생성되었습니다.:\n14:18:04[info]: [13.22.34.137]생성되었습니다.:\n14:18:04[info]: [13.22.34.138]생성되었습니다.:\n14:18:04[info]: [13.22.34.139]생성되었습니다.:\n14:18:04[info]: [13.22.34.140]생성되었습니다.:\n14:18:04[info]: [13.22.34.141]생성되었습니다.:\n14:18:04[info]: [13.22.34.142]생성되었습니다.:\n14:18:04[info]: [13.22.34.143]생성되었습니다.:\n14:18:04[info]: [13.22.34.144]생성되었습니다.:\n14:18:04[info]: [13.22.34.145]생성되었습니다.:\n14:18:04[info]: [13.22.34.146]생성되었습니다.:\n14:18:04[info]: [13.22.34.147]생성되었습니다.:\n14:18:04[info]: [13.22.34.148]생성되었습니다.:\n14:18:04[info]: [13.22.34.149]생성되었습니다.:\n14:18:04[info]: [13.22.34.150]생성되었습니다.:\n14:18:04[info]: [13.22.34.151]생성되었습니다.:\n14:18:04[info]: [13.22.34.152]생성되었습니다.:\n14:18:04[info]: [13.22.34.153]생성되었습니다.:\n14:18:04[info]: [13.22.34.154]생성되었습니다.:\n14:18:04[info]: [13.22.34.155]생성되었습니다.:\n14:18:04[info]: [13.22.34.156]생성되었습니다.:\n14:18:04[info]: [13.22.34.157]생성되었습니다.:\n14:18:04[info]: [13.22.34.158]생성되었습니다.:\n14:18:04[info]: [13.22.34.159]생성되었습니다.:\n14:18:04[info]: [13.22.34.160]생성되었습니다.:\n14:18:04[info]: [13.22.34.161]생성되었습니다.:\n14:18:04[info]: [13.22.34.162]생성되었습니다.:\n14:18:04[info]: [13.22.34.163]생성되었습니다.:\n14:18:04[info]: [13.22.34.164]생성되었습니다.:\n14:18:04[info]: [13.22.34.165]생성되었습니다.:\n14:18:04[info]: [13.22.34.166]생성되었습니다.:\n14:18:04[info]: [13.22.34.167]생성되었습니다.:\n14:18:04[info]: [13.22.34.168]생성되었습니다.:\n14:18:04[info]: [13.22.34.169]생성되었습니다.:\n14:18:04[info]: [13.22.34.170]생성되었습니다.:\n14:18:04[info]: [13.22.34.171]생성되었습니다.:\n14:18:04[info]: [13.22.34.172]생성되었습니다.:\n14:18:04[info]: [13.22.34.173]생성되었습니다.:\n14:18:04[info]: [13.22.34.174]생성되었습니다.:\n14:18:04[info]: [13.22.34.175]생성되었습니다.:\n14:18:04[info]: [13.22.34.176]생성되었습니다.:\n14:18:04[info]: [13.22.34.177]생성되었습니다.:\n14:18:04[info]: [13.22.34.178]생성되었습니다.:\n14:18:04[info]: [13.22.34.179]생성되었습니다.:\n14:18:04[info]: [13.22.34.180]생성되었습니다.:\n14:18:04[info]: [13.22.34.181]생성되었습니다.:\n14:18:04[info]: [13.22.34.182]생성되었습니다.:\n14:18:04[info]: [13.22.34.183]생성되었습니다.:\n14:18:04[info]: [13.22.34.184]생성되었습니다.:\n14:18:04[info]: [13.22.34.185]생성되었습니다.:\n14:18:04[info]: [13.22.34.186]생성되었습니다.:\n14:18:04[info]: [13.22.34.187]생성되었습니다.:\n14:18:04[info]: [13.22.34.188]생성되었습니다.:\n14:18:04[info]: [13.22.34.189]생성되었습니다.:\n14:18:04[info]: [13.22.34.190]생성되었습니다.:\n14:18:04[info]: [13.22.34.191]생성되었습니다.:\n14:18:04[info]: [13.22.34.192]생성되었습니다.:\n14:18:04[info]: [13.22.34.193]생성되었습니다.:\n14:18:04[info]: [13.22.34.194]생성되었습니다.:\n14:18:04[info]: [13.22.34.195]생성되었습니다.:\n14:18:04[info]: [13.22.34.196]생성되었습니다.:\n14:18:04[info]: [13.22.34.197]생성되었습니다.:\n14:18:04[info]: [13.22.34.198]생성되었습니다.:\n14:18:04[info]: [13.22.34.199]생성되었습니다.:\n14:18:04[info]: [13.22.34.200]생성되었습니다.:\n14:18:04[info]: [13.22.34.201]생성되었습니다.:\n14:18:04[info]: [13.22.34.202]생성되었습니다.:\n14:18:04[info]: [13.22.34.203]생성되었습니다.:\n14:18:04[info]: [13.22.34.204]생성되었습니다.:\n14:18:04[info]: [13.22.34.205]생성되었습니다.:\n14:18:04[info]: [13.22.34.206]생성되었습니다.:\n14:18:04[info]: [13.22.34.207]생성되었습니다.:\n14:18:04[info]: [13.22.34.208]생성되었습니다.:\n14:18:04[info]: [13.22.34.209]생성되었습니다.:\n14:18:04[info]: [13.22.34.210]생성되었습니다.:\n14:18:04[info]: [13.22.34.211]생성되었습니다.:\n14:18:04[info]: [13.22.34.212]생성되었습니다.:\n14:18:04[info]: [13.22.34.213]생성되었습니다.:\n14:18:04[info]: [13.22.34.214]생성되었습니다.:\n14:18:04[info]: [13.22.34.215]생성되었습니다.:\n14:18:04[info]: [13.22.34.216]생성되었습니다.:\n14:18:04[info]: [13.22.34.217]생성되었습니다.:\n14:18:04[info]: [13.22.34.218]생성되었습니다.:\n14:18:04[info]: [13.22.34.219]생성되었습니다.:\n14:18:04[info]: [13.22.34.220]생성되었습니다.:\n14:18:04[info]: [13.22.34.221]생성되었습니다.:\n14:18:04[info]: [13.22.34.222]생성되었습니다.:\n14:18:04[info]: [13.22.34.223]생성되었습니다.:\n14:18:04[info]: [13.22.34.224]생성되었습니다.:\n14:18:04[info]: [13.22.34.225]생성되었습니다.:\n14:18:04[info]: [13.22.34.226]생성되었습니다.:\n14:18:04[info]: [13.22.34.227]생성되었습니다.:\n14:18:04[info]: [13.22.34.228]생성되었습니다.:\n14:18:04[info]: [13.22.34.229]생성되었습니다.:\n14:18:04[info]: [13.22.34.230]생성되었습니다.:\n14:18:04[info]: [13.22.34.231]생성되었습니다.:\n14:18:04[info]: [13.22.34.232]생성되었습니다.:\n14:18:04[info]: [13.22.34.233]생성되었습니다.:\n14:18:04[info]: [13.22.34.234]생성되었습니다.:\n14:18:04[info]: [13.22.34.235]생성되었습니다.:\n14:18:04[info]: [13.22.34.236]생성되었습니다.:\n14:18:04[info]: [13.22.34.237]생성되었습니다.:\n14:18:04[info]: [13.22.34.238]생성되었습니다.:\n14:18:04[info]: [13.22.34.239]생성되었습니다.:\n14:18:04[info]: [13.22.34.240]생성되었습니다.:\n14:18:04[info]: [13.22.34.241]생성되었습니다.:\n14:18:04[info]: [13.22.34.242]생성되었습니다.:\n14:18:04[info]: [13.22.34.243]생성되었습니다.:\n14:18:04[info]: [13.22.34.244]생성되었습니다.:\n14:18:04[info]: [13.22.34.245]생성되었습니다.:\n14:18:04[info]: [13.22.34.246]생성되었습니다.:\n14:18:04[info]: [13.22.34.247]생성되었습니다.:\n14:18:04[info]: [13.22.34.248]생성되었습니다.:\n14:18:04[info]: [13.22.34.249]생성되었습니다.:\n14:18:04[info]: [13.22.34.250]생성되었습니다.:\n14:18:04[info]: [13.22.34.251]생성되었습니다.:\n14:18:04[info]: [13.22.34.252]생성되었습니다.:\n14:18:04[info]: [13.22.34.253]생성되었습니다.:\n14:18:04[info]: [13.22.34.254]생성되었습니다.:\n14:18:04[info]: [13.22.34.255]생성되었습니다.:','normal',NULL,'2025-08-20 05:18:04',NULL),(3,1,'Customer/Account->create_form Undefined array key \"user_uid\"','15:08:31[debug]: Undefined array key "user_uid"','normal',NULL,'2025-08-20 06:08:31',NULL),(4,1,'Customer/Client->create Customer/Client 작업 데이터 검증 오류발생\nThe site field is required.\nThe name field is required.\nThe email field must contain a valid email address.\nThe role field is required.','15:51:38[debug]: Customer/Client 작업 데이터 검증 오류발생\nThe site field is required.\nThe name field is required.\nThe email field must contain a valid email address.\nThe role field is required.','normal',NULL,'2025-08-20 06:51:38',NULL),(5,1,'Customer/Client->create Customer/Client 작업 데이터 검증 오류발생\nThe site field is required.\nThe name field is required.\nThe role field is required.','15:56:15[debug]: Customer/Client 작업 데이터 검증 오류발생\nThe site field is required.\nThe name field is required.\nThe role field is required.','normal',NULL,'2025-08-20 06:56:15',NULL),(6,1,'Customer/Client->create Customer/Client 작업 데이터 검증 오류발생\nThe site field is required.\nThe name field is required.\nThe role field is required.','16:15:08[debug]: Customer/Client 작업 데이터 검증 오류발생\nThe site field is required.\nThe name field is required.\nThe role field is required.','normal',NULL,'2025-08-20 07:15:08',NULL),(7,1,'Equipment/CS->create_form Undefined array key \"clientinfo_uid\"','17:04:25[debug]: Undefined array key "clientinfo_uid"','normal',NULL,'2025-08-20 08:04:25',NULL),(8,1,'Equipment/Server->create_form Invalid file: \"admin/server/create_form.php\"','09:09:26[debug]: Invalid file: "admin/server/create_form.php"','normal',NULL,'2025-08-21 00:09:26',NULL),(9,1,'Equipment/Server->create_form Undefined array key \"serviceinfo_uid\"','10:59:09[debug]: Undefined array key "serviceinfo_uid"','normal',NULL,'2025-08-21 01:59:09',NULL),(10,1,'Equipment/Server->create_form Undefined array key \"serviceinfo_uid\"','10:59:14[debug]: Undefined array key "serviceinfo_uid"','normal',NULL,'2025-08-21 01:59:14',NULL),(11,1,'Equipment/Server->create_form Undefined array key \"serviceinfo_uid\"','10:59:16[debug]: Undefined array key "serviceinfo_uid"','normal',NULL,'2025-08-21 01:59:16',NULL),(12,1,'Equipment/Server->create_form Undefined array key \"serviceinfo_uid\"','10:59:19[debug]: Undefined array key "serviceinfo_uid"','normal',NULL,'2025-08-21 01:59:19',NULL),(13,1,'Equipment/Server->create_form Undefined array key \"serviceinfo_uid\"','10:59:21[debug]: Undefined array key "serviceinfo_uid"','normal',NULL,'2025-08-21 01:59:21',NULL),(14,1,'Equipment/Server->create_form Undefined array key \"serviceinfo_uid\"','11:00:08[debug]: Undefined array key "serviceinfo_uid"','normal',NULL,'2025-08-21 02:00:08',NULL),(15,1,'Equipment/Server->create_form Undefined array key \"control\"','15:03:04[debug]: Undefined array key "control"','normal',NULL,'2025-08-21 06:03:04',NULL),(16,1,'Equipment/Server->create_form Undefined array key \"control\"','15:13:01[debug]: Undefined array key "control"','normal',NULL,'2025-08-21 06:13:01',NULL),(17,1,'Equipment/Server->create_form Undefined array key \"control\"','15:15:23[debug]: Undefined array key "control"','normal',NULL,'2025-08-21 06:15:23',NULL),(18,1,'Equipment/Server->create_form Undefined array key \"control\"','15:17:18[debug]: Undefined array key "control"','normal',NULL,'2025-08-21 06:17:18',NULL),(19,1,'Equipment/Server->create_form Undefined array key \"control\"','15:19:07[debug]: Undefined array key "control"','normal',NULL,'2025-08-21 06:19:07',NULL),(20,1,'Equipment/Server->create_form Undefined array key \"control\"','15:19:24[debug]: Undefined array key "control"','normal',NULL,'2025-08-21 06:19:24',NULL),(21,1,'Equipment/Server->create_form Undefined array key \"control\"','15:19:35[debug]: Undefined array key "control"','normal',NULL,'2025-08-21 06:19:35',NULL); /*!40000 ALTER TABLE `user_history` ENABLE KEYS */; UNLOCK TABLES; /*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */; @@ -583,4 +584,4 @@ UNLOCK TABLES; /*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */; /*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */; --- Dump completed on 2025-08-20 18:54:51 +-- Dump completed on 2025-08-21 15:32:02 diff --git a/app/Entities/CommonEntity.php b/app/Entities/CommonEntity.php index d42c655..3b2c36d 100644 --- a/app/Entities/CommonEntity.php +++ b/app/Entities/CommonEntity.php @@ -17,7 +17,7 @@ abstract class CommonEntity extends Entity parent::__construct($data); } - public function getPK(): string + public function getPK(): int|string|null { $field = constant("static::PK"); return $this->attributes[$field]; diff --git a/app/Entities/Equipment/PartEntity.php b/app/Entities/Equipment/PartEntity.php index fbf609b..9a8dd7d 100644 --- a/app/Entities/Equipment/PartEntity.php +++ b/app/Entities/Equipment/PartEntity.php @@ -12,4 +12,9 @@ class PartEntity extends EquipmentEntity const STATUS_OCCUPIED = "occupied"; const STATUS_FORBIDDEN = "forbidden"; const DEFAULT_STATUS = self::STATUS_AVAILABLE; + + public function getType(): string + { + return $this->attributes['type']; + } } diff --git a/app/Helpers/CommonHelper.php b/app/Helpers/CommonHelper.php index 22c5cfd..0ac208b 100644 --- a/app/Helpers/CommonHelper.php +++ b/app/Helpers/CommonHelper.php @@ -210,19 +210,24 @@ class CommonHelper } // header.php에서 getFieldForm_Helper사용 - protected function form_dropdown_disabled(string $field, mixed $value, array $formOptions, array $extras = [], mixed $disabledKey = null): string + protected function form_dropdown_disabled(string $field, mixed $value, array $viewDatas, array $extras = [], mixed $disabledKey = null): string { - // $formOptions는 필터 옵션 배열로, key는 필터 엔티티의 PK, value는 필터 엔티티 객체 $extra = ""; - foreach ($extras as $option_tag => $option_value) { - $extra = sprintf(" %s=\"%s\"", $option_tag, htmlspecialchars($option_value, ENT_QUOTES, 'UTF-8')); + foreach ($extras as $extra_tag => $extra_value) { + $extra .= sprintf(" %s=\"%s\"", $extra_tag, htmlspecialchars($extra_value, ENT_QUOTES, 'UTF-8')); } + // 필터 옵션이 없으면 빈 배열로 초기화 + if (!array_key_exists($field, $viewDatas['control']['filter_optons'])) { + return $field; // 필터 옵션이 없으면 빈 문자열 반환 + } + // $formOptions는 필터 옵션 배열로, key는 필터 엔티티의 PK, value는 필터 엔티티 객체 $html = sprintf("'; return $html; @@ -253,7 +258,7 @@ class CommonHelper } $form = implode(" ", $forms); } else { - $form = $this->form_dropdown_disabled($field, $value, $viewDatas['control']['filter_optons'][$field], $extras); + $form = $this->form_dropdown_disabled($field, $value, $viewDatas, $extras); } break; case 'issue_at': @@ -261,8 +266,6 @@ class CommonHelper case 'billing_at': case 'start_at': case 'end_at': - case 'manufactur_at': - case 'format_at': case 'updated_at': case 'created_at': $extras['class'] = array_key_exists('class', $extras) ? $extras['class'] . ' calender' : 'calender'; @@ -279,15 +282,12 @@ class CommonHelper case 'clientinfo_uid': case 'serviceinfo_uid': case 'serverinfo_uid': - case 'partinfo_uid': - case 'ipinfo_uid': - case 'csinfo_uid': $extras['class'] = array_key_exists('class', $extras) ? $extras['class'] . ' select-field' : 'select-field'; - $form = $this->form_dropdown_disabled($field, $value, $viewDatas['control']['filter_optons'][$field], $extras); + $form = $this->form_dropdown_disabled($field, $value, $viewDatas, $extras); break; default: if (in_array($field, $viewDatas['control']['filter_fields'])) { - $form = $this->form_dropdown_disabled($field, $value, $viewDatas['control']['filter_optons'][$field], $extras); + $form = $this->form_dropdown_disabled($field, $value, $viewDatas, $extras); } else { $form = form_input($field, $value ?? "", $extras); } @@ -295,7 +295,6 @@ class CommonHelper } return $form; } - public function getFieldView(string $field, mixed $value, array $viewDatas, array $extras = []): string|null { switch ($field) { @@ -342,6 +341,20 @@ class CommonHelper } return $value; } + public function getListFilter(string $field, mixed $value, array $viewDatas, array $extras = []): string + { + if (!array_key_exists($field, $viewDatas['control']['filter_optons'])) { + throw new \Exception(__METHOD__ . "에서 {$field}의 field_options가 정의되지 않았습니다."); + } + if (!is_array($viewDatas['control']['filter_optons'][$field])) { + throw new \Exception(__METHOD__ . "에서 {$field}의 field_options가 array형태가 아닙니다."); + } + $options = ["" => lang("{$viewDatas['class_path']}.label.{$field}") . " 선택"]; + foreach ($viewDatas['control']['filter_optons'][$field] as $key => $entity) { + $options[$key] = $entity->getTitle(); + } + return form_dropdown($field, $options, $value, $extras);; + } public function getListLabel(string $field, string $label, array $viewDatas, array $extras = []): string { switch ($field) { diff --git a/app/Helpers/Customer/CustomerHelper.php b/app/Helpers/Customer/CustomerHelper.php index b6f19f8..cb28dde 100644 --- a/app/Helpers/Customer/CustomerHelper.php +++ b/app/Helpers/Customer/CustomerHelper.php @@ -10,4 +10,22 @@ abstract class CustomerHelper extends CommonHelper { parent::__construct(); } + + public function getListFilter(string $field, mixed $value, array $viewDatas, array $extras = []): string + { + switch ($field) { + case 'user_uid': + case 'old_clientinfo_uid': + case 'clientinfo_uid': + case 'serviceinfo_uid': + case 'serverinfo_uid': + $extras['class'] = array_key_exists('class', $extras) ? $extras['class'] . ' select-field' : 'select-field'; + $form = parent::getListFilter($field, $value, $viewDatas, $extras); + break; + default: + $form = parent::getListFilter($field, $value, $viewDatas, $extras); + break; + } + return $form; + } } diff --git a/app/Helpers/Customer/ServiceHelper.php b/app/Helpers/Customer/ServiceHelper.php index bc31fb5..e6df7c2 100644 --- a/app/Helpers/Customer/ServiceHelper.php +++ b/app/Helpers/Customer/ServiceHelper.php @@ -48,7 +48,7 @@ class ServiceHelper extends CustomerHelper switch ($field) { case 'switchinfo_uid': $extras['class'] = array_key_exists('class', $extras) ? $extras['class'] . ' select-field' : 'select-field'; - $form = $this->form_dropdown_disabled($field, $value, $viewDatas['control']['filter_optons'][$field], $extras); + $form = $this->form_dropdown_disabled($field, $value, $viewDatas, $extras); break; default: $form = parent::getFieldForm($field, $value, $viewDatas, $extras); diff --git a/app/Helpers/Equipment/EquipmentHelper.php b/app/Helpers/Equipment/EquipmentHelper.php index fc41676..00d2469 100644 --- a/app/Helpers/Equipment/EquipmentHelper.php +++ b/app/Helpers/Equipment/EquipmentHelper.php @@ -10,4 +10,22 @@ abstract class EquipmentHelper extends CommonHelper { parent::__construct(); } + + public function getListFilter(string $field, mixed $value, array $viewDatas, array $extras = []): string + { + switch ($field) { + case 'user_uid': + case 'old_clientinfo_uid': + case 'clientinfo_uid': + case 'serviceinfo_uid': + case 'serverinfo_uid': + $extras['class'] = array_key_exists('class', $extras) ? $extras['class'] . ' select-field' : 'select-field'; + $form = parent::getListFilter($field, $value, $viewDatas, $extras); + break; + default: + $form = parent::getListFilter($field, $value, $viewDatas, $extras); + break; + } + return $form; + } } diff --git a/app/Helpers/Equipment/ServerHelper.php b/app/Helpers/Equipment/ServerHelper.php index c07f5e7..ecad150 100644 --- a/app/Helpers/Equipment/ServerHelper.php +++ b/app/Helpers/Equipment/ServerHelper.php @@ -11,4 +11,61 @@ class ServerHelper extends EquipmentHelper parent::__construct(); $this->setTitleField(field: ServerModel::TITLE); } + private function getPartFormOption(string $field, array $viewDatas): array + { + $options = ["" => lang("{$viewDatas['class_path']}.label.{$field}") . " 선택"]; + foreach ($viewDatas['control']['filter_optons'][$field] as $key => $entity) { + $options[$key] = $entity->getTitle(); + } + // foreach ($viewDatas['control']['filter_optons'][$field] as $key => $entity) { + // if (!array_key_exists($entity->getType(), $options)) { + // $options[$entity->getType()] = []; + // } + // $options[$entity->getType()][$key] = $entity->getTitle(); + // } + return $options; + } + public function getFieldForm(string $field, mixed $value, array $viewDatas, array $extras = []): string + { + switch ($field) { + case 'manufactur_at': + case 'format_at': + $extras['class'] = array_key_exists('class', $extras) ? $extras['class'] . ' calender' : 'calender'; + $form = form_input($field, $value ?? "", $extras); + break; + case 'partinfo_uid': + $extras['class'] = array_key_exists('class', $extras) ? $extras['class'] . ' select-field' : 'select-field'; + $form = form_dropdown($field, $this->getPartFormOption($field, $viewDatas), $value, $extras); + $form .= " 갯수 " . form_dropdown("{$field}_cnt", $viewDatas['partinfo_cnt_range'], $value ?? 1); + $form .= " 옵션 " . form_dropdown("{$field}_extra", $viewDatas['partinfo_extra_options'], $value ?? 1); + break; + case 'ipinfo_uid': + case 'csinfo_uid': + $extras['class'] = array_key_exists('class', $extras) ? $extras['class'] . ' select-field' : 'select-field'; + $form = $this->form_dropdown_disabled($field, $value, $viewDatas, $extras); + break; + default: + $form = parent::getFieldForm($field, $value, $viewDatas, $extras); + break; + } + return $form; + } + public function getListFilter(string $field, mixed $value, array $viewDatas, array $extras = []): string + { + switch ($field) { + case 'cs_uid': + case 'ipinfo_uid': + $extras['class'] = array_key_exists('class', $extras) ? $extras['class'] . ' select-field' : 'select-field'; + $form = parent::getListFilter($field, $value, $viewDatas, $extras); + break; + case 'partinfo_uid': + $extras['class'] = array_key_exists('class', $extras) ? $extras['class'] . ' select-field' : 'select-field'; + $form = form_dropdown($field, $this->getPartFormOption($field, $viewDatas), $value, $extras); + break; + default: + $form = parent::getListFilter($field, $value, $viewDatas, $extras); + break; + } + return $form; + } } diff --git a/app/Language/en/Equipment/Part.php b/app/Language/en/Equipment/Part.php index 854e2af..53cb49e 100644 --- a/app/Language/en/Equipment/Part.php +++ b/app/Language/en/Equipment/Part.php @@ -12,9 +12,9 @@ return [ ], "TYPE" => [ "CPU" => "CPU", - "RAM" => "RAM", - "DISK" => "DISK", - "SOFTWARE" => "SOFTWARE", + "RAM" => "메모리", + "DISK" => "저장장치", + "SOFTWARE" => "소프트웨어", ], "STATUS" => [ 'available' => "사용가능", diff --git a/app/Language/en/Equipment/Server.php b/app/Language/en/Equipment/Server.php index 5444582..71940e6 100644 --- a/app/Language/en/Equipment/Server.php +++ b/app/Language/en/Equipment/Server.php @@ -19,6 +19,14 @@ return [ "ipinfo_uid" => "IP정보", "csinfo_uid" => "CS정보", ], + "TITLE" => [ + 'HP DL360 Gen6' => "HP DL360 Gen6", + "HP DL360 Gen7" => "HP DL360 Gen7", + "HP DL360 Gen8" => "HP DL360 Gen8", + "HP DL360 Gen9" => "HP DL360 Gen9", + "HP DL360 Gen10" => "HP DL360 Gen10", + "Hitach HA3000" => "Hitach HA3000", + ], "TYPE" => [ 'hp' => "HP", "del" => "DELL", @@ -29,4 +37,11 @@ return [ 'occupied' => "서비스중", 'forbidden' => "사용불가", ], + "EXTRAS" => [ + 'RAID0' => "RAID0", + 'RAID1' => "RAID1", + 'RAID5' => "RAID5", + 'RAID6' => "RAID6", + 'RAID10' => "RAID10", + ], ]; diff --git a/app/Models/CommonModel.php b/app/Models/CommonModel.php index 34b7857..fbe962f 100644 --- a/app/Models/CommonModel.php +++ b/app/Models/CommonModel.php @@ -84,7 +84,7 @@ abstract class CommonModel extends Model // 수동입력인 경우 if (!$this->useAutoIncrement) { $rule = "required|regex_match[/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}/]"; - $rule .= in_array($action, ["create", "create_form"]) ? "|is_unique[{$this->table}.{$field}]" : ""; + $rule .= in_array($action, ["create", "create_form"]) ? "|is_unique[" . $this->getTable() . "." . $field . "]" : ""; } else { $rule = "required|numeric"; } @@ -92,6 +92,10 @@ abstract class CommonModel extends Model case $this->getTitleField(): $rule = "required|trim|string"; break; + case "code": + $rule = "required|regex_match[/^[a-zA-Z0-9\-]+$/]|min_length[4]|max_length[20]"; + $rule .= in_array($action, ["create", "create_form"]) ? "|is_unique[" . $this->getTable() . "." . $field . "]" : ""; + break; case 'picture': $rule = "is_image[{$field}]|mime_in[{$field},image/jpg,image/jpeg,image/gif,image/png,image/webp]|max_size[{$field},300]|max_dims[{$field},2048,768]"; break; @@ -240,7 +244,7 @@ abstract class CommonModel extends Model //List 검색용 //FormFilter 조건절 처리 - final public function setList_FormFilter(string $field, mixed $filter_value): void {} + final public function setList_FormFilter(string $field, mixed $default_value): void {} //검색어조건절처리 final public function setList_WordFilter(string $word): void {} //날자검색 diff --git a/app/Models/Customer/CustomerModel.php b/app/Models/Customer/CustomerModel.php index 9615dfe..d2220f1 100644 --- a/app/Models/Customer/CustomerModel.php +++ b/app/Models/Customer/CustomerModel.php @@ -31,10 +31,6 @@ abstract class CustomerModel extends CommonModel $rule = "required|trim|string"; $rule .= in_array($action, ["create", "create_form"]) ? "|is_unique[" . $this->getTable() . "." . $field . "]" : ""; break; - case "code": - $rule = "required|trim|alpha_numeric|min_length[4]|max_length[20]"; - $rule .= in_array($action, ["create", "create_form"]) ? "|is_unique[" . $this->getTable() . "." . $field . "]" : ""; - break; case "status": $rule = "permit_empty|trim|string"; break; diff --git a/app/Models/Equipment/EquipmentModel.php b/app/Models/Equipment/EquipmentModel.php index fe7028c..2750400 100644 --- a/app/Models/Equipment/EquipmentModel.php +++ b/app/Models/Equipment/EquipmentModel.php @@ -21,10 +21,6 @@ abstract class EquipmentModel extends CommonModel $rule = "required|trim|string"; $rule .= in_array($action, ["create", "create_form"]) ? "|is_unique[" . $this->getTable() . "." . $field . "]" : ""; break; - case "code": - $rule = "required|trim|alpha_numeric|min_length[4]|max_length[20]"; - $rule .= in_array($action, ["create", "create_form"]) ? "|is_unique[" . $this->getTable() . "." . $field . "]" : ""; - break; case "clientinfo_uid": case "serviceinfo_uid": case "serverinfo_uid": diff --git a/app/Models/Equipment/ServerModel.php b/app/Models/Equipment/ServerModel.php index f72ec0f..b9cb274 100644 --- a/app/Models/Equipment/ServerModel.php +++ b/app/Models/Equipment/ServerModel.php @@ -57,4 +57,12 @@ class ServerModel extends EquipmentModel } return $rule; } + + //create용 장비코드 마지막번호 가져오기 + final public function getLastestCode(int $default = 1): string + { + $entity = $this->selectMax($this->primaryKey)->first(); + $pk = (int) ($entity->getPK() ?? $default); // 정수로 강제 변환 + return sprintf("%s-M%03d", date('ymd'), $pk); + } } diff --git a/app/Services/CommonService.php b/app/Services/CommonService.php index 088f712..e60ded5 100644 --- a/app/Services/CommonService.php +++ b/app/Services/CommonService.php @@ -132,7 +132,6 @@ abstract class CommonService foreach (lang($this->getClassName() . '.' . strtoupper($field)) as $key => $value) { $options[$key] = new FormOptionEntity(['uid' => $key, 'title' => $value]); } - // dd($options); break; } if (!is_array($options)) { @@ -196,12 +195,12 @@ abstract class CommonService $this->getModel()->offset($offset); } //FormFilter 조건절 처리 - public function setList_FormFilter(string $field, mixed $filter_value): void + public function setList_FormFilter(string $field, mixed $default_value): void { switch ($field) { default: //일반검색 - $this->getModel()->where("{$this->getModel()->getTable()}.{$field}", $filter_value); + $this->getModel()->where("{$this->getModel()->getTable()}.{$field}", $default_value); break; } } diff --git a/app/Services/Customer/ClientService.php b/app/Services/Customer/ClientService.php index 06e14ea..aa64d4b 100644 --- a/app/Services/Customer/ClientService.php +++ b/app/Services/Customer/ClientService.php @@ -105,16 +105,16 @@ class ClientService extends CustomerService //List 검색용 //FormFilter 조건절 처리 - public function setList_FormFilter(string $field, mixed $filter_value): void + public function setList_FormFilter(string $field, mixed $default_value): void { switch ($field) { case 'role': - $where = "FIND_IN_SET(" . $this->getModel()->escape($filter_value) . ", {$this->getModel()->getTable()}.{$field}) > 0"; + $where = "FIND_IN_SET(" . $this->getModel()->escape($default_value) . ", {$this->getModel()->getTable()}.{$field}) > 0"; //FIND_IN_SET()은 MySQL 함수이므로 CodeIgniter가 이를 일반 컬럼명으로 착각하고 escape하게 되면 오류가 발생합니다. 따라서 ->where($sql, null, false)로 명시하여 escape를 꺼줘야 정상 작동 $this->getModel()->where($where, null, false); break; default: - parent::setList_FormFilter($field, $filter_value); + parent::setList_FormFilter($field, $default_value); break; } } diff --git a/app/Services/Equipment/ServerService.php b/app/Services/Equipment/ServerService.php index e6f7d59..8c35a64 100644 --- a/app/Services/Equipment/ServerService.php +++ b/app/Services/Equipment/ServerService.php @@ -21,22 +21,19 @@ class ServerService extends EquipmentService public function getFormFields(): array { return [ - "serviceinfo_uid", "code", "type", "title", + "partinfo_uid", "price", "manufactur_at", "format_at", "status", - "partinfo_uid", - "ipinfo_uid", - "csinfo_uid", ]; } public function getFilterFields(): array { - return ['clientinfo_uid', 'serviceinfo_uid', 'type', 'status', 'partinfo_uid', 'ipinfo_uid', 'csinfo_uid']; + return ['clientinfo_uid', 'serviceinfo_uid', 'type', 'title', 'status', 'partinfo_uid']; } public function getBatchJobFields(): array { @@ -75,11 +72,13 @@ class ServerService extends EquipmentService case 'partinfo_uid': $options = $this->getPartService()->getEntities(['status' => PartEntity::STATUS_AVAILABLE]); break; - case 'ipinfo_uid': - $options = $this->getIPService()->getEntities(['status' => IPEntity::STATUS_AVAILABLE]); + case 'ipinfo_uid': //수정때문에 전체가 필요 + // $options = $this->getIPService()->getEntities(['status' => IPEntity::STATUS_AVAILABLE]); + $options = $this->getIPService()->getEntities(); break; - case 'csinfo_uid': - $options = $this->getCSService()->getEntities(['status' => CSEntity::STATUS_AVAILABLE]); + case 'csinfo_uid': //수정때문에 전체가 필요 + // $options = $this->getCSService()->getEntities(['status' => CSEntity::STATUS_AVAILABLE]); + $options = $this->getCSService()->getEntities(); break; default: $options = parent::getFormFieldOption($field, $options); @@ -87,6 +86,11 @@ class ServerService extends EquipmentService } return $options; } + //create용 장비코드 마지막번호 가져오기 + final public function getLastestCode(int $default = 1): string + { + return $this->getModel()->getLastestCode($default); + } //List 검색용 //OrderBy 처리 public function setOrderBy(mixed $field = null, mixed $value = null): void diff --git a/app/Services/Equipment/SwitchService.php b/app/Services/Equipment/SwitchService.php index 06d00f1..f6db7e2 100644 --- a/app/Services/Equipment/SwitchService.php +++ b/app/Services/Equipment/SwitchService.php @@ -31,7 +31,7 @@ class SwitchService extends EquipmentService } public function getIndexFields(): array { - return ['code', 'clientinfo_uid', 'serviceinfo_uid', 'serverinfo_uid', 'status']; + return ['code', 'status', 'clientinfo_uid', 'serviceinfo_uid', 'serverinfo_uid']; } //기본기능 //FieldForm관련용 diff --git a/app/Services/UserService.php b/app/Services/UserService.php index 1c6d5af..651e353 100644 --- a/app/Services/UserService.php +++ b/app/Services/UserService.php @@ -54,16 +54,16 @@ class UserService extends CommonService } //List 검색용 //FormFilter 조건절 처리 - public function setList_FormFilter(string $field, mixed $filter_value): void + public function setList_FormFilter(string $field, mixed $default_value): void { switch ($field) { case 'role': - $where = "FIND_IN_SET(" . $this->getModel()->escape($filter_value) . ", {$this->getModel()->getTable()}.{$field}) > 0"; + $where = "FIND_IN_SET(" . $this->getModel()->escape($default_value) . ", {$this->getModel()->getTable()}.{$field}) > 0"; //FIND_IN_SET()은 MySQL 함수이므로 CodeIgniter가 이를 일반 컬럼명으로 착각하고 escape하게 되면 오류가 발생합니다. 따라서 ->where($sql, null, false)로 명시하여 escape를 꺼줘야 정상 작동 $this->getModel()->where($where, null, false); break; default: - parent::setList_FormFilter($field, $filter_value); + parent::setList_FormFilter($field, $default_value); break; } } diff --git a/app/Views/admin/create_form.php b/app/Views/admin/create_form.php index 149122a..3f71364 100644 --- a/app/Views/admin/create_form.php +++ b/app/Views/admin/create_form.php @@ -10,7 +10,7 @@ getFieldLabel($field, lang("{$viewDatas['class_path']}.label.{$field}"), $viewDatas) ?> - getFieldForm($field, old($field) ?? ($viewDatas['control']['filter_values'][$field] ?? null), $viewDatas) ?> + getFieldForm($field, old($field) ?? ($viewDatas['control']['default_values'][$field] ?? null), $viewDatas) ?> diff --git a/app/Views/admin/popup/create_form.php b/app/Views/admin/popup/create_form.php index 149122a..3f71364 100644 --- a/app/Views/admin/popup/create_form.php +++ b/app/Views/admin/popup/create_form.php @@ -10,7 +10,7 @@ getFieldLabel($field, lang("{$viewDatas['class_path']}.label.{$field}"), $viewDatas) ?> - getFieldForm($field, old($field) ?? ($viewDatas['control']['filter_values'][$field] ?? null), $viewDatas) ?> + getFieldForm($field, old($field) ?? ($viewDatas['control']['default_values'][$field] ?? null), $viewDatas) ?> diff --git a/app/Views/admin/server/index.php b/app/Views/admin/server/index.php index 5fef52a..40df972 100644 --- a/app/Views/admin/server/index.php +++ b/app/Views/admin/server/index.php @@ -32,7 +32,7 @@ - getStatus() === $viewDatas['entity']::DEFAULT_STATUS ? "" : 'class="table-danger"' ?>> + getListRowColor($entity) ?>> getListButton('modify', '', $viewDatas) ?> diff --git a/app/Views/templates/admin/index_content_bottom.php b/app/Views/templates/admin/index_content_bottom.php index 8336b1d..5ec867e 100644 --- a/app/Views/templates/admin/index_content_bottom.php +++ b/app/Views/templates/admin/index_content_bottom.php @@ -3,7 +3,7 @@ - getFieldForm($field, null, $viewDatas, ['data-batchjob' => 'true']) ?>  + getListFilter($field, null, $viewDatas, ['data-batchjob' => 'true']) ?>  $label): ?> diff --git a/app/Views/templates/admin/index_content_top.php b/app/Views/templates/admin/index_content_top.php index d428bdd..a24c191 100644 --- a/app/Views/templates/admin/index_content_top.php +++ b/app/Views/templates/admin/index_content_top.php @@ -4,7 +4,7 @@