From ecc0c572fc5293e6c27df07434c027efb3aba9eb Mon Sep 17 00:00:00 2001 From: "choi.jh" Date: Tue, 21 Oct 2025 13:57:13 +0900 Subject: [PATCH] dbmsv3 init...1 --- app/Cells/Equipment/ServerCell.php | 2 +- app/Config/Constants.php | 40 ++++++++++++------- app/Controllers/Admin/BoardController.php | 6 +-- app/Controllers/Admin/Home.php | 22 ++++++---- app/Controllers/Admin/Part/DISKController.php | 2 +- app/Database/dbmsv3_test1.sql | 11 ++--- app/Language/en/Board.php | 2 +- app/Language/en/Equipment/Server.php | 29 ++++++++------ app/Services/BoardService.php | 15 ++++++- app/Services/Equipment/ServerPartService.php | 7 +--- app/Services/Equipment/ServerService.php | 10 +++++ app/Views/admin/popup/view.php | 2 +- app/Views/admin/view.php | 2 +- app/Views/admin/welcome/banner.php | 6 +-- app/Views/admin/welcome/index.php | 8 +--- app/Views/admin/welcome/stock.php | 10 ++--- app/Views/cells/part/disk_stock.php | 25 +++++++++--- app/Views/cells/part/ram_stock.php | 22 +++++++--- app/Views/cells/server/stock.php | 12 +++--- app/Views/layouts/admin/left_menu.php | 1 + app/Views/layouts/admin/left_menu/base.php | 6 --- app/Views/layouts/admin/left_menu/board.php | 17 ++++++++ 22 files changed, 162 insertions(+), 95 deletions(-) create mode 100644 app/Views/layouts/admin/left_menu/board.php diff --git a/app/Cells/Equipment/ServerCell.php b/app/Cells/Equipment/ServerCell.php index 05bc356..e839906 100644 --- a/app/Cells/Equipment/ServerCell.php +++ b/app/Cells/Equipment/ServerCell.php @@ -70,7 +70,7 @@ class ServerCell extends EquipmentCell 'partCellDatas' => [ 'control' => $this->getService()->getControlDatas(), 'service' => $this->getService(), - 'entities' => $this->getService()->getEntities(), + 'rows' => $this->getService()->getStockCount(), ], ]); } diff --git a/app/Config/Constants.php b/app/Config/Constants.php index 895b0a0..b5181b4 100644 --- a/app/Config/Constants.php +++ b/app/Config/Constants.php @@ -420,25 +420,34 @@ define("SERVERPART", [ "SERVICE_PARTTYPES" => ['SOFTWARE', 'CS', 'IP'], "ALL_PARTTYPES" => ['CPU', 'RAM', 'DISK', 'SOFTWARE', 'IP', 'CS'], "CPU" => [ - "ATYPE" => [["UID" => 1, "CNT" => 1, "EXTRA" => ""]], - "BTYPE" => [["UID" => 2, "CNT" => 1, "EXTRA" => ""]], - "CTYPE" => [["UID" => 3, "CNT" => 2, "EXTRA" => ""]], - "DTYPE" => [["UID" => 4, "CNT" => 2, "EXTRA" => ""]], - "ETYPE" => [["UID" => 5, "CNT" => 2, "EXTRA" => ""]], + "HP DL360 Gen6B" => [["UID" => 1, "CNT" => 2, "EXTRA" => ""]], + "HP DL360 Gen7C" => [["UID" => 2, "CNT" => 2, "EXTRA" => ""]], + "HP DL360 Gen7D" => [["UID" => 3, "CNT" => 2, "EXTRA" => ""]], + "HP DL360 Gen8D" => [["UID" => 3, "CNT" => 2, "EXTRA" => ""]], + "HP DL360 Gen8E" => [["UID" => 4, "CNT" => 2, "EXTRA" => ""]], + "HP DL360 Gen9E" => [["UID" => 4, "CNT" => 2, "EXTRA" => ""]], + "HP DL360 Gen10" => [["UID" => 5, "CNT" => 2, "EXTRA" => ""]], + "Hitach HA3000" => [["UID" => 5, "CNT" => 2, "EXTRA" => ""]], ], "RAM" => [ - "ATYPE" => [["UID" => 3, "CNT" => 1, "EXTRA" => ""]], - "BTYPE" => [["UID" => 3, "CNT" => 1, "EXTRA" => ""]], - "CTYPE" => [["UID" => 3, "CNT" => 2, "EXTRA" => ""]], - "DTYPE" => [["UID" => 3, "CNT" => 2, "EXTRA" => ""]], - "ETYPE" => [["UID" => 3, "CNT" => 4, "EXTRA" => ""]], + "HP DL360 Gen6B" => [["UID" => 2, "CNT" => 1, "EXTRA" => ""]], + "HP DL360 Gen7C" => [["UID" => 2, "CNT" => 2, "EXTRA" => ""]], + "HP DL360 Gen7D" => [["UID" => 2, "CNT" => 2, "EXTRA" => ""]], + "HP DL360 Gen8D" => [["UID" => 3, "CNT" => 2, "EXTRA" => ""]], + "HP DL360 Gen8E" => [["UID" => 3, "CNT" => 4, "EXTRA" => ""]], + "HP DL360 Gen9E" => [["UID" => 4, "CNT" => 4, "EXTRA" => ""]], + "HP DL360 Gen10" => [["UID" => 5, "CNT" => 2, "EXTRA" => ""]], + "Hitach HA3000" => [["UID" => 5, "CNT" => 2, "EXTRA" => ""]], ], "DISK" => [ - "ATYPE" => [["UID" => 8, "CNT" => 2, "EXTRA" => "RAID1"], ["UID" => 9, "CNT" => 2, "EXTRA" => "RAID1"],], - "BTYPE" => [["UID" => 8, "CNT" => 2, "EXTRA" => "RAID1"], ["UID" => 9, "CNT" => 2, "EXTRA" => "RAID1"],], - "CTYPE" => [["UID" => 8, "CNT" => 2, "EXTRA" => "RAID1"], ["UID" => 9, "CNT" => 2, "EXTRA" => "RAID1"],], - "DTYPE" => [["UID" => 8, "CNT" => 2, "EXTRA" => "RAID1"], ["UID" => 9, "CNT" => 2, "EXTRA" => "RAID1"],], - "ETYPE" => [["UID" => 8, "CNT" => 2, "EXTRA" => "RAID1"], ["UID" => 9, "CNT" => 2, "EXTRA" => "RAID1"],], + "HP DL360 Gen6B" => [["UID" => 8, "CNT" => 2, "EXTRA" => "RAID1"], ["UID" => 9, "CNT" => 2, "EXTRA" => "RAID1"],], + "HP DL360 Gen7C" => [["UID" => 8, "CNT" => 2, "EXTRA" => "RAID1"], ["UID" => 9, "CNT" => 2, "EXTRA" => "RAID1"],], + "HP DL360 Gen7D" => [["UID" => 8, "CNT" => 2, "EXTRA" => "RAID1"], ["UID" => 9, "CNT" => 2, "EXTRA" => "RAID1"],], + "HP DL360 Gen8C" => [["UID" => 8, "CNT" => 2, "EXTRA" => "RAID1"], ["UID" => 9, "CNT" => 2, "EXTRA" => "RAID1"],], + "HP DL360 Gen8D" => [["UID" => 8, "CNT" => 2, "EXTRA" => "RAID1"], ["UID" => 9, "CNT" => 2, "EXTRA" => "RAID1"],], + "HP DL360 Gen9E" => [["UID" => 8, "CNT" => 2, "EXTRA" => "RAID1"], ["UID" => 9, "CNT" => 2, "EXTRA" => "RAID1"],], + "HP DL360 Gen10" => [["UID" => 8, "CNT" => 2, "EXTRA" => "RAID1"], ["UID" => 9, "CNT" => 2, "EXTRA" => "RAID1"],], + "Hitach HA3000" => [["UID" => 8, "CNT" => 2, "EXTRA" => "RAID1"], ["UID" => 9, "CNT" => 2, "EXTRA" => "RAID1"],], ] ]); //결제 관련 @@ -461,4 +470,5 @@ define("BOARD", [ 'WORKING' => 'working', 'REQUESTTASK' => 'requesttask' ], + 'LATEST_LIMIT' => 3, ]); diff --git a/app/Controllers/Admin/BoardController.php b/app/Controllers/Admin/BoardController.php index 8564f65..77b4b68 100644 --- a/app/Controllers/Admin/BoardController.php +++ b/app/Controllers/Admin/BoardController.php @@ -31,9 +31,9 @@ class BoardController extends AdminController //전달값정의 $this->getService()->setFormDatas($this->request->getGet()); $formDatas = $this->getSErvice()->getFormDatas(); - return $this->response->setJSON($this->getService()->latest( - ['category' => array_key_exists('category', $formDatas) && $formDatas['category'] ? $formDatas['category'] : 'notice'], - array_key_exists('limit', $formDatas) ? $formDatas['limit'] : 3 + return $this->response->setJSON($this->getService()->getLatest( + array_key_exists('category', $formDatas) && $formDatas['category'] ? $formDatas['category'] : BOARD['CATEGORY']['NOTICE'], + array_key_exists('limit', $formDatas) ? $formDatas['limit'] : BOARD['LATEST_LIMIT'] )); } } diff --git a/app/Controllers/Admin/Home.php b/app/Controllers/Admin/Home.php index 65cdb58..3a03d7b 100644 --- a/app/Controllers/Admin/Home.php +++ b/app/Controllers/Admin/Home.php @@ -2,6 +2,7 @@ namespace App\Controllers\Admin; +use App\Services\BoardService; use App\Services\Customer\ServiceService; use CodeIgniter\HTTP\RedirectResponse; use CodeIgniter\HTTP\RequestInterface; @@ -11,6 +12,7 @@ use Psr\Log\LoggerInterface; class Home extends AdminController { private $_service = null; + private ?BoardService $_boardService = null; public function initController(RequestInterface $request, ResponseInterface $response, LoggerInterface $logger) { parent::initController($request, $response, $logger); @@ -27,7 +29,13 @@ class Home extends AdminController } return $this->_service; } - + final public function getBoardService(): BoardService + { + if (!$this->_boardService) { + $this->_boardService = new BoardService(); + } + return $this->_boardService; + } protected function getResultSuccess(string $message = MESSAGES["SUCCESS"], ?string $actionTemplate = null): RedirectResponse|string { switch ($this->getService()->getAction()) { @@ -61,20 +69,20 @@ class Home extends AdminController $this->getService()->setFormRules(); $this->getService()->setFormOptions(); //요청업무 - + $this->boardRequestTaskCount = $this->getBoardService()->getRequestTaskCount($this->getMyAuth()->getUIDByAuthInfo()); //Total 서버 현황 //interval을 기준으로 최근 신규 서비스정보 가져오기 $this->interval = intval($this->request->getVar('interval') ?? SERVICE['NEW_INTERVAL']); $this->newServiceEntities = $this->getService()->getNewServiceEntities($this->interval); $this->newServiceCount = count($this->newServiceEntities); //서비스별 미납 Count - $totalUnPaidCount = $totalUnPaidAmount = 0; + $unPaidTotalCount = $unPaidTotalAmount = 0; foreach (array_values($this->getService()->getPaymentService()->getUnPaids('serviceinfo_uid')) as $unPaid) { - $totalUnPaidCount += $unPaid['cnt']; - $totalUnPaidAmount += $unPaid['amount']; + $unPaidTotalCount += $unPaid['cnt']; + $unPaidTotalAmount += $unPaid['amount']; } - $this->totalUnPaidCount = $totalUnPaidCount; - $this->totalUnPaidAmount = $totalUnPaidAmount; + $this->unPaidTotalCount = $unPaidTotalCount; + $this->unPaidTotalAmount = $unPaidTotalAmount; helper(['form']); return $this->getResultSuccess(); } diff --git a/app/Controllers/Admin/Part/DISKController.php b/app/Controllers/Admin/Part/DISKController.php index 1014302..40850ab 100644 --- a/app/Controllers/Admin/Part/DISKController.php +++ b/app/Controllers/Admin/Part/DISKController.php @@ -46,7 +46,7 @@ class DISKController extends PartController $formDatas['stock'] = $entity->getStock() + $entity->getFormat(); $this->entity = $this->getService()->modify($entity, $formDatas); $db->transCommit(); - return $this->getResultSuccess("포맷완료 처리가되었습니다."); + return ""; } catch (\Exception $e) { $db->transRollback(); return $this->getResultFail($e->getMessage()); diff --git a/app/Database/dbmsv3_test1.sql b/app/Database/dbmsv3_test1.sql index 44dfafb..942c913 100644 --- a/app/Database/dbmsv3_test1.sql +++ b/app/Database/dbmsv3_test1.sql @@ -64,6 +64,7 @@ DROP TABLE IF EXISTS `boardinfo`; CREATE TABLE `boardinfo` ( `uid` int(11) NOT NULL AUTO_INCREMENT, `user_uid` int(11) NOT NULL, + `worker_uid` int(11) DEFAULT NULL, `category` varchar(20) NOT NULL DEFAULT 'notice', `title` varchar(255) NOT NULL, `content` text DEFAULT NULL, @@ -72,7 +73,7 @@ CREATE TABLE `boardinfo` ( `created_at` datetime DEFAULT current_timestamp(), `deleted_at` datetime DEFAULT NULL, PRIMARY KEY (`uid`) -) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8; +) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -81,7 +82,7 @@ CREATE TABLE `boardinfo` ( LOCK TABLES `boardinfo` WRITE; /*!40000 ALTER TABLE `boardinfo` DISABLE KEYS */; -INSERT INTO `boardinfo` VALUES (1,1,'notice','테스트공지2222','<p>테스트공지2222<br>테스트공지2222<br>테스트공지2222</p>','available',NULL,'2025-10-20 14:55:36',NULL),(2,1,'notice','테스트공지333','<p>테스트공지333<br><span style="color: #e03e2d;">테스트공지333</span><br>테스트공지333</p>','available',NULL,'2025-10-20 14:56:20',NULL); +INSERT INTO `boardinfo` VALUES (1,1,NULL,'notice','테스트공지2222','<p>테스트공지2222<br>테스트공지2222<br>테스트공지2222</p>','available',NULL,'2025-10-20 14:55:36',NULL),(2,1,NULL,'notice','테스트공지333','<p>테스트공지333<br><span style="color: #e03e2d;">테스트공지333</span><br>테스트공지333</p>','available',NULL,'2025-10-20 14:56:20',NULL),(3,1,43,'requesttask','test요청1111','<p>test요청1111<br>test요청1111<br>test요청1111</p>','available',NULL,'2025-10-21 10:04:42',NULL); /*!40000 ALTER TABLE `boardinfo` ENABLE KEYS */; UNLOCK TABLES; @@ -495,7 +496,7 @@ CREATE TABLE `serverinfo` ( LOCK TABLES `serverinfo` WRITE; /*!40000 ALTER TABLE `serverinfo` DISABLE KEYS */; -INSERT INTO `serverinfo` VALUES (17,1186,61,'2526A-M1','normal','C03PA19','13.220.20.5','UBUNTU24.04','HP DL360 Gen6',1000000,'2025-08-31 15:00:00','2025-10-02 15:00:00','occupied','2025-10-16 01:54:10','2025-09-22 02:19:25',NULL),(18,1161,53,'2537B-M18','normal','C03PA08','13.220.20.28','UBUNTU24.04','HP DL360 Gen7',400000,'2025-09-01 15:00:00','2025-10-01 15:00:00','occupied','2025-10-16 00:58:10','2025-09-22 02:21:51',NULL),(19,1087,54,'2528C-M19','normal','C03PA06','13.220.20.10','WINDOWS2008R2','HP DL360 Gen8',800000,'2025-09-02 15:00:00','2025-10-12 15:00:00','occupied','2025-10-16 00:58:28','2025-09-22 02:22:14',NULL),(20,820,52,'2529D-M20','normal','C03PA07','13.220.20.27','CENTOS9','HP DL360 Gen9',600000,'2025-09-03 15:00:00','2025-10-01 15:00:00','occupied','2025-10-16 00:57:48','2025-09-22 02:22:39',NULL),(21,1186,60,'2520Z-M21','vpn','C03PA17','13.220.20.30','WINDOWS2016R2','HP DL360 Gen10',700000,'2025-09-04 15:00:00','2025-10-01 15:00:00','occupied','2025-10-16 01:53:52','2025-09-22 02:23:08',NULL),(22,820,56,'2530Z-M22','dedicated','C03PA16','23.125.207.27','WINDOWS2019R2','Hitach HA3000',800000,'2025-09-05 15:00:00','2025-09-29 15:00:00','occupied','2025-10-16 06:45:46','2025-09-22 02:23:36',NULL),(23,819,57,'JPN-S23','event','C03PA01','13.220.20.1','CENTOS9','INTEL I5',200000,'2025-10-01 15:00:00',NULL,'occupied','2025-10-16 01:04:24','2025-10-01 08:16:56',NULL),(24,1087,54,'JPN-S24','alternative','C03PA14','13.220.20.122','WINDOWS2008R2','INTEL I7',200000,'2025-10-01 15:00:00','2025-10-12 15:00:00','occupied','2025-10-16 00:58:44','2025-10-01 08:52:19',NULL),(25,NULL,NULL,'2548E-M25','alternative',NULL,'13.220.20.94',NULL,'HP DL360 Gen8',700000,'2025-09-30 15:00:00','2025-10-15 15:00:00','available','2025-10-15 23:21:11','2025-10-02 03:55:46',NULL),(26,NULL,NULL,'2547C-M26','alternative',NULL,NULL,NULL,'HP DL360 Gen7',500000,'2025-09-30 15:00:00','2025-10-02 15:00:00','available','2025-10-03 01:00:57','2025-10-02 03:58:53',NULL),(27,711,58,'2548D-M27','normal','C03PA15','13.220.20.63','WINDOWS11','HP DL360 Gen8',900000,'2025-10-01 15:00:00',NULL,'occupied','2025-10-16 01:48:27','2025-10-02 04:02:16',NULL),(31,1185,59,'2412E-M29','normal','C03PA21','13.220.20.34','DEBIAN10','HP DL360 Gen9',500000,'2025-10-03 15:00:00',NULL,'occupied','2025-10-16 01:53:30','2025-10-03 01:08:32',NULL),(32,1155,64,'2543E-M32','normal','C01PA45','13.220.20.25','UBUNTU22.04','HP DL360 Gen6',500000,'2025-10-03 15:00:00',NULL,'occupied','2025-10-17 06:22:15','2025-10-03 01:10:09',NULL),(55,NULL,NULL,'KCS-M33','alternative',NULL,'28.23.54.22',NULL,'KCS',150000,'2025-10-01 15:00:00','2025-10-16 15:00:00','available','2025-10-17 02:33:55','2025-10-03 05:32:51',NULL),(63,842,62,'254D9-M56','defence','C02PA09','13.220.20.9','CENTOS9','HP DL360 Gen9',400000,'2025-10-08 15:00:00',NULL,'occupied','2025-10-16 01:54:24','2025-10-15 07:06:56',NULL),(64,842,63,'2549D-M64','normal','C03PA02','13.220.20.7','UBUNTU24.04','HP DL360 Gen9',400000,'2025-10-08 15:00:00',NULL,'occupied','2025-10-16 01:54:36','2025-10-15 07:23:19',NULL); +INSERT INTO `serverinfo` VALUES (17,1186,61,'2526A-M1','normal','C03PA19','13.220.20.5','UBUNTU24.04','HP DL360 Gen6B',1000000,'2025-08-31 15:00:00','2025-10-02 15:00:00','occupied','2025-10-16 01:54:10','2025-09-22 02:19:25',NULL),(18,1161,53,'2537B-M18','normal','C03PA08','13.220.20.28','UBUNTU24.04','HP DL360 Gen7C',400000,'2025-09-01 15:00:00','2025-10-01 15:00:00','occupied','2025-10-16 00:58:10','2025-09-22 02:21:51',NULL),(19,1087,54,'2528C-M19','normal','C03PA06','13.220.20.10','WINDOWS2008R2','HP DL360 Gen8D',800000,'2025-09-02 15:00:00','2025-10-12 15:00:00','occupied','2025-10-16 00:58:28','2025-09-22 02:22:14',NULL),(20,820,52,'2529D-M20','normal','C03PA07','13.220.20.27','CENTOS9','HP DL360 Gen9E',600000,'2025-09-03 15:00:00','2025-10-01 15:00:00','occupied','2025-10-16 00:57:48','2025-09-22 02:22:39',NULL),(21,1186,60,'2520Z-M21','vpn','C03PA17','13.220.20.30','WINDOWS2016R2','HP DL360 Gen10',700000,'2025-09-04 15:00:00','2025-10-01 15:00:00','occupied','2025-10-16 01:53:52','2025-09-22 02:23:08',NULL),(22,820,56,'2530Z-M22','dedicated','C03PA16','23.125.207.27','WINDOWS2019R2','Hitach HA3000',800000,'2025-09-05 15:00:00','2025-09-29 15:00:00','occupied','2025-10-16 06:45:46','2025-09-22 02:23:36',NULL),(23,819,57,'JPN-S23','event','C03PA01','13.220.20.1','CENTOS9','DESKTOP I5',200000,'2025-10-01 15:00:00',NULL,'occupied','2025-10-16 01:04:24','2025-10-01 08:16:56',NULL),(24,1087,54,'JPN-S24','alternative','C03PA14','13.220.20.122','WINDOWS2008R2','DESKTOP I7',200000,'2025-10-01 15:00:00','2025-10-12 15:00:00','occupied','2025-10-16 00:58:44','2025-10-01 08:52:19',NULL),(25,NULL,NULL,'2548E-M25','alternative',NULL,'13.220.20.94',NULL,'HP DL360 Gen8D',700000,'2025-09-30 15:00:00','2025-10-15 15:00:00','available','2025-10-15 23:21:11','2025-10-02 03:55:46',NULL),(26,NULL,NULL,'2547C-M26','alternative',NULL,NULL,NULL,'HP DL360 Gen7C',500000,'2025-09-30 15:00:00','2025-10-02 15:00:00','available','2025-10-03 01:00:57','2025-10-02 03:58:53',NULL),(27,711,58,'2548D-M27','normal','C03PA15','13.220.20.63','WINDOWS11','HP DL360 Gen8D',900000,'2025-10-01 15:00:00',NULL,'occupied','2025-10-16 01:48:27','2025-10-02 04:02:16',NULL),(31,1185,59,'2412E-M29','normal','C03PA21','13.220.20.34','DEBIAN10','HP DL360 Gen9E',500000,'2025-10-03 15:00:00',NULL,'occupied','2025-10-16 01:53:30','2025-10-03 01:08:32',NULL),(32,1155,64,'2543E-M32','normal','C01PA45','13.220.20.25','UBUNTU22.04','HP DL360 Gen6B',500000,'2025-10-03 15:00:00',NULL,'occupied','2025-10-17 06:22:15','2025-10-03 01:10:09',NULL),(55,NULL,NULL,'KCS-M33','alternative',NULL,'28.23.54.22',NULL,'KCS',150000,'2025-10-01 15:00:00','2025-10-16 15:00:00','available','2025-10-17 02:33:55','2025-10-03 05:32:51',NULL),(63,842,62,'254D9-M56','defence','C02PA09','13.220.20.9','CENTOS9','HP DL360 Gen9E',400000,'2025-10-08 15:00:00',NULL,'occupied','2025-10-16 01:54:24','2025-10-15 07:06:56',NULL),(64,842,63,'2549D-M64','normal','C03PA02','13.220.20.7','UBUNTU24.04','HP DL360 Gen9E',400000,'2025-10-08 15:00:00',NULL,'occupied','2025-10-16 01:54:36','2025-10-15 07:23:19',NULL); /*!40000 ALTER TABLE `serverinfo` ENABLE KEYS */; UNLOCK TABLES; @@ -692,7 +693,7 @@ CREATE TABLE `user` ( LOCK TABLES `user` WRITE; /*!40000 ALTER TABLE `user` DISABLE KEYS */; -INSERT INTO `user` VALUES (1,'choi.jh','$2y$10$.vl2FtwJsjMNFCJJm3ISDu7m3vBB85mZ5fRQxcfI0uK/2D1e8Xora','최준흠','choi.jh@prime-idc.jp','0434434327','manager,cloudflare,security,director,master','available','2025-10-02 08:12:39','2023-03-23 06:50:04',NULL),(2,'cho.jh','$2y$10$ot/aUXR/W1n4Q3dZA2dZCOxQrpVb2Bq31Y7xFQS3G6D1gtImmyBjm','조준희','cho.jh@prime-idc.jp','','manager,cloudflare,security','available','2025-10-02 08:12:46','2023-03-24 02:20:48',NULL),(4,'kimdy','$2y$10$18uyn94xdprzAnt.oYZ5weAvb8rRLhkz/SdQrjEK7yuGhCr9PlUCC','김동윤','kimdy@prime-idc.jp','','manager,cloudflare,security','available','2025-10-02 08:12:51','2023-03-24 02:21:50',NULL),(5,'kimhy','$2y$10$.yEKVqY.F7HoSOZijl4uyeulUtfAQ4EDRiyR2JpgFYBuKw.mZoZvG','김효영','khy@prime-idc.jp',NULL,'manager,security,director','available','2025-06-24 01:11:41','2023-03-24 02:23:18',NULL),(6,'kim.eh','$2y$10$YmwicI.Br4XNyGamfRADMOu.qlkwKd2fmnNkL7YIkNHGndvqYPnCq','김은혁','kim.eh@prime-idc.jp',NULL,'manager,cloudflare,security','available','2025-06-24 01:09:38','2023-03-24 02:23:52',NULL),(7,'leeph','$2y$10$lR739WzJsW6rDLgchYs7buek4BYeTlKHTQY60RDqRms9Io7RSY3AC','이풍호','leeph@prime-idc.jp','','manager,cloudflare,security','available','2025-10-02 08:13:18','2023-03-24 02:24:21',NULL),(8,'jinmingyu','$2y$10$PI8WA6d/z4hDE6hxJoUhbuMH3vTTWH0Ry2Z6fTLUUpwQGaE/9bEZa','김명옥','jinmingyu@idcjp.jp',NULL,'manager,cloudflare,security','available','2025-06-24 01:09:47','2023-03-24 02:25:00',NULL),(9,'kangdh','$2y$10$gu9OS2DDQQ5H.Hh61t3BSOUp87l35q.xsduVSxvCcn8IgA4jrATgG','강동헌','kang.dh@idcjp.jp','','manager,cloudflare,security','available','2025-10-02 08:13:26','2023-03-24 02:25:48',NULL),(10,'yoohs','$2y$10$TGASk98FuZ6Ux6FDquu1aO3rztA01MCle/Vs1.3iaEMQzakAbCzJy','유혜성','yoo.hs@idcjp.jp','','manager,cloudflare,security','available','2025-10-02 08:13:33','2023-03-24 02:26:31',NULL),(11,'kim.yh','$2y$10$8GciQXpKYiR3TDWQfh9JjOQAQ.YWGoOSCL0a0/w4XACO0mUgjjbWy','김영환','kim.yh@idcjp.jp','','manager,cloudflare,security','available','2025-10-02 08:13:39','2023-03-24 02:27:05',NULL),(12,'yunmuj','$2y$10$zkgwGVj2JSOVIsxLe8fePe1gvWWaCemfZMktzBlrN8oLb3CKydkZC','윤무정','yunmuj@idcjp.jp','','manager,cloudflare,security','available','2025-10-02 08:13:50','2023-03-24 02:27:59',NULL),(13,'kim.mt','$2y$10$3dfkA0oq4LqiJOmjbBGKe.p0Dhj/MDqjoTdw11BOPF/H2qJqnEuHO','김문태','kim.mt@idcjp.jp','','manager,cloudflare,security','available','2025-10-02 08:13:56','2023-03-24 02:28:31',NULL),(14,'shin.ms','$2y$10$.jaDkGtm/gZK3ZDF.fJUGOwMI7Zif5588X5AxSMvvk238RDI7spQ6','신민수','shin.ms@idcjp.jp','','manager,cloudflare','terminated','2025-10-02 08:11:11','2023-03-24 02:29:00',NULL),(15,'park.sm','$2y$10$RgDY4f9kuryRNDJVJU5pn.JV.38ZWA9UTgmONBlP74WwIqamMbnY2','박선미','park.sm@idcjp.jp','','manager,cloudflare,security','available','2025-10-13 05:24:59','2023-03-24 02:29:34',NULL),(24,'kobn','$2y$10$pWM/XFfSNeSng32sypbDX.WaR4UlM4EDkYKCQfFkYIOC7Ppg0nc5G','고병남','ko@prime-idc.jp',NULL,'manager,cloudflare,security','available','2025-06-24 01:10:02','2024-10-29 06:30:19',NULL),(25,'jeong.sg','$2y$10$OzH6140JztiUEs4s/VHbPOxfxubFooqwqVhGpdFG8OJCGAFXNu546','정상구','jeong.sg@prime-idc.jp','','manager,cloudflare,security','available','2025-10-02 08:14:21','2025-01-23 00:29:46',NULL),(43,'test1234','$2y$10$21wlqjmdfDlIr0vAjDzs6ubIchc1DwOG61GGkZUwY7gb9GMTxA96K','test1234','test@gmail.com','0434434327','manager,cloudflare','terminated','2025-09-09 05:23:09','2025-07-01 06:05:11',NULL),(44,'test233332','$2y$10$9FqxChYQ3qlbGL0dFvHsQuEl3ELiH3R5kDytQqmFa2b2i9RYpjeQy','123423422','test2333@co.kr22','2343422','manager','terminated','2025-10-02 08:14:44','2025-07-11 07:23:13',NULL),(45,'kim.jh','$2y$10$voCle9yFWWhGhQ0JrH46puLYySJYq6O41/BSrKxx0MHWyO8KDf97u','김준한','kim.jh@prime-idc.jp','','manager,cloudflare,security','available','2025-10-02 08:14:32','2025-08-08 02:27:49',NULL); +INSERT INTO `user` VALUES (1,'choi.jh','$2y$10$.vl2FtwJsjMNFCJJm3ISDu7m3vBB85mZ5fRQxcfI0uK/2D1e8Xora','최준흠','choi.jh@prime-idc.jp','0434434327','manager,cloudflare,security,director,master','available','2025-10-02 08:12:39','2023-03-23 06:50:04',NULL),(2,'cho.jh','$2y$10$ot/aUXR/W1n4Q3dZA2dZCOxQrpVb2Bq31Y7xFQS3G6D1gtImmyBjm','조준희','cho.jh@prime-idc.jp','','manager,cloudflare,security','available','2025-10-02 08:12:46','2023-03-24 02:20:48',NULL),(4,'kimdy','$2y$10$18uyn94xdprzAnt.oYZ5weAvb8rRLhkz/SdQrjEK7yuGhCr9PlUCC','김동윤','kimdy@prime-idc.jp','','manager,cloudflare,security','available','2025-10-02 08:12:51','2023-03-24 02:21:50',NULL),(5,'kimhy','$2y$10$.yEKVqY.F7HoSOZijl4uyeulUtfAQ4EDRiyR2JpgFYBuKw.mZoZvG','김효영','khy@prime-idc.jp',NULL,'manager,security,director','available','2025-06-24 01:11:41','2023-03-24 02:23:18',NULL),(6,'kim.eh','$2y$10$YmwicI.Br4XNyGamfRADMOu.qlkwKd2fmnNkL7YIkNHGndvqYPnCq','김은혁','kim.eh@prime-idc.jp',NULL,'manager,cloudflare,security','available','2025-06-24 01:09:38','2023-03-24 02:23:52',NULL),(7,'leeph','$2y$10$lR739WzJsW6rDLgchYs7buek4BYeTlKHTQY60RDqRms9Io7RSY3AC','이풍호','leeph@prime-idc.jp','','manager,cloudflare,security','available','2025-10-02 08:13:18','2023-03-24 02:24:21',NULL),(8,'jinmingyu','$2y$10$PI8WA6d/z4hDE6hxJoUhbuMH3vTTWH0Ry2Z6fTLUUpwQGaE/9bEZa','김명옥','jinmingyu@idcjp.jp',NULL,'manager,cloudflare,security','available','2025-06-24 01:09:47','2023-03-24 02:25:00',NULL),(9,'kangdh','$2y$10$gu9OS2DDQQ5H.Hh61t3BSOUp87l35q.xsduVSxvCcn8IgA4jrATgG','강동헌','kang.dh@idcjp.jp','','manager,cloudflare,security','available','2025-10-02 08:13:26','2023-03-24 02:25:48',NULL),(10,'yoohs','$2y$10$TGASk98FuZ6Ux6FDquu1aO3rztA01MCle/Vs1.3iaEMQzakAbCzJy','유혜성','yoo.hs@idcjp.jp','','manager,cloudflare,security','available','2025-10-02 08:13:33','2023-03-24 02:26:31',NULL),(11,'kim.yh','$2y$10$8GciQXpKYiR3TDWQfh9JjOQAQ.YWGoOSCL0a0/w4XACO0mUgjjbWy','김영환','kim.yh@idcjp.jp','','manager,cloudflare,security','available','2025-10-02 08:13:39','2023-03-24 02:27:05',NULL),(12,'yunmuj','$2y$10$zkgwGVj2JSOVIsxLe8fePe1gvWWaCemfZMktzBlrN8oLb3CKydkZC','윤무정','yunmuj@idcjp.jp','','manager,cloudflare,security','available','2025-10-02 08:13:50','2023-03-24 02:27:59',NULL),(13,'kim.mt','$2y$10$3dfkA0oq4LqiJOmjbBGKe.p0Dhj/MDqjoTdw11BOPF/H2qJqnEuHO','김문태','kim.mt@idcjp.jp','','manager,cloudflare,security','available','2025-10-02 08:13:56','2023-03-24 02:28:31',NULL),(14,'shin.ms','$2y$10$.jaDkGtm/gZK3ZDF.fJUGOwMI7Zif5588X5AxSMvvk238RDI7spQ6','신민수','shin.ms@idcjp.jp','','manager,cloudflare','terminated','2025-10-02 08:11:11','2023-03-24 02:29:00',NULL),(15,'park.sm','$2y$10$RgDY4f9kuryRNDJVJU5pn.JV.38ZWA9UTgmONBlP74WwIqamMbnY2','박선미','park.sm@idcjp.jp','','manager,cloudflare,security','available','2025-10-13 05:24:59','2023-03-24 02:29:34',NULL),(24,'kobn','$2y$10$pWM/XFfSNeSng32sypbDX.WaR4UlM4EDkYKCQfFkYIOC7Ppg0nc5G','고병남','ko@prime-idc.jp',NULL,'manager,cloudflare,security','available','2025-06-24 01:10:02','2024-10-29 06:30:19',NULL),(25,'jeong.sg','$2y$10$OzH6140JztiUEs4s/VHbPOxfxubFooqwqVhGpdFG8OJCGAFXNu546','정상구','jeong.sg@prime-idc.jp','','manager,cloudflare,security','available','2025-10-02 08:14:21','2025-01-23 00:29:46',NULL),(43,'test1234','$2y$10$y47tGsZ7YTta16nD.wPtkuS./9EjeNQYAjVhsZR448.sL..dHFBsK','test1234','test@gmail.com','0434434327','manager,cloudflare','available','2025-10-21 01:00:16','2025-07-01 06:05:11',NULL),(44,'test333','$2y$10$h7dD8XYN9osH2pzxP7lqdeOrQJQ12d.WK6Yp1WUx7139VUx8IQrba','test333','test2333@co.kr22','2343422','manager','available','2025-10-21 01:00:51','2025-07-11 07:23:13',NULL),(45,'kim.jh','$2y$10$voCle9yFWWhGhQ0JrH46puLYySJYq6O41/BSrKxx0MHWyO8KDf97u','김준한','kim.jh@prime-idc.jp','','manager,cloudflare,security','available','2025-10-02 08:14:32','2025-08-08 02:27:49',NULL); /*!40000 ALTER TABLE `user` ENABLE KEYS */; UNLOCK TABLES; @@ -736,4 +737,4 @@ UNLOCK TABLES; /*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */; /*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */; --- Dump completed on 2025-10-21 9:15:22 +-- Dump completed on 2025-10-21 13:06:30 diff --git a/app/Language/en/Board.php b/app/Language/en/Board.php index 12b145e..e8956aa 100644 --- a/app/Language/en/Board.php +++ b/app/Language/en/Board.php @@ -21,6 +21,6 @@ return [ "STATUS" => [ STATUS['AVAILABLE'] => "사용중", STATUS['PAUSE'] => "일시정지", - STATUS['TERMINATED'] => "삭제", + STATUS['TERMINATED'] => "완료", ], ]; diff --git a/app/Language/en/Equipment/Server.php b/app/Language/en/Equipment/Server.php index 1332c16..d9e9e9d 100644 --- a/app/Language/en/Equipment/Server.php +++ b/app/Language/en/Equipment/Server.php @@ -31,18 +31,23 @@ return [ SERVER['TYPES']["COLOCATION"] => "코로케이션", ], "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", - "INTEL I3" => "INTEL I3", - "INTEL I5" => "INTEL I5", - "INTEL I7" => "INTEL I7", - "INTEL I9" => "INTEL I9", - "VPC" => "아마존-VPN", - "KCS" => "KT-VPN", + "HP DL360 Gen6B" => "HP DL360 Gen6 B", + "HP DL360 Gen7C" => "HP DL360 Gen7 C", + "HP DL360 Gen7D" => "HP DL360 Gen7 D", + "HP DL360 Gen8D" => "HP DL360 Gen8 D", + "HP DL360 Gen8E" => "HP DL360 Gen8 E", + "HP DL360 Gen9E" => "HP DL360 Gen9 E", + "HP DL360 Gen10" => "HP DL360 Gen10", + "Hitach HA3000" => "Hitach HA3000", + "DESKTOP I5" => "데탑 I5", + "DESKTOP I5-9" => "데탑 I5 9세대", + "DESKTOP I5-10" => "데탑 I5 10세대", + "DESKTOP I5-12" => "데탑 I5 12세대", + "DESKTOP I7" => "데탑 I7", + "DESKTOP I7-10" => "데탑 I7 10세대", + "MINI I5-12" => "Mini I5 12세대", + "VPC" => "아마존-VPN", + "KCS" => "KT-VPN", ], "STATUS" => [ STATUS['AVAILABLE'] => "사용가능", diff --git a/app/Services/BoardService.php b/app/Services/BoardService.php index 36189df..2fd2bae 100644 --- a/app/Services/BoardService.php +++ b/app/Services/BoardService.php @@ -62,13 +62,14 @@ class BoardService extends CommonService return $options; } //기본 기능부분 - public function latest(array $where, int $limit = 3): array + //Category별 최근 $limit갯수만큼 게시물 + public function getLatest(string $category, int $limit): array { //관리자정보 $userEntities = $this->getUserService()->getEntities(); $this->getModel()->limit($limit); $datas = []; - foreach ($this->getEntities($where) as $entity) { + foreach ($this->getEntities(['category' => $category, 'status' => STATUS['AVAILABLE']]) as $entity) { $datas[] = [ 'title' => "", 'created_at' => date('Y-m-d H:m', strtotime($entity->getCreatedAT())), @@ -77,4 +78,14 @@ class BoardService extends CommonService } return $datas; } + //요청업무 게시물 + public function getRequestTaskCount(int $worker_uid): int + { + $where = [ + 'category' => BOARD['CATEGORY']['REQUESTTASK'], + 'worker_uid' => $worker_uid, + 'status' => STATUS['AVAILABLE'], + ]; + return count($this->getEntities($where)); + } } diff --git a/app/Services/Equipment/ServerPartService.php b/app/Services/Equipment/ServerPartService.php index b8ad9ea..f4d285c 100644 --- a/app/Services/Equipment/ServerPartService.php +++ b/app/Services/Equipment/ServerPartService.php @@ -208,12 +208,7 @@ class ServerPartService extends EquipmentService implements ServerInterface { switch ($action) { case 'create': - //서버의 Type별 서버파트정보등록(서버파트연결 자동등록용) - $codes = str_split($serverEntity->getCode()); - // $server_ year = $codes[0].$codes[1]; // 1,2번째(ex: 21-> 21년) - // $server_quarter = $codes[2]; // 3번째(ex: 1-> 1분기) - // $server_brand = $codes[3]; // 4번째(ex: 6-> HP DL360 Gen6) - $server_type = strtoupper($codes[4]) . "TYPE"; // 5번째(ex: A-> ATYPE Server) + $server_type = strtoupper($serverEntity->getTitle()); //서버의 Title로 구분해서 기본부품 추가 foreach (SERVERPART['SERVER_PARTTYPES'] as $parttype) { //해당 server_type의 정의된 상수값이 있으면 if (array_key_exists($server_type, SERVERPART[$parttype])) { diff --git a/app/Services/Equipment/ServerService.php b/app/Services/Equipment/ServerService.php index 602a046..dc0237e 100644 --- a/app/Services/Equipment/ServerService.php +++ b/app/Services/Equipment/ServerService.php @@ -169,6 +169,16 @@ class ServerService extends EquipmentService implements ServiceInterface } return $rows; } + final public function getStockCount(): array + { + $builder = $this->getModel()->select('title,COUNT(*) AS cnt')->groupBy('title')->builder(); + // echo $builder->getCompiledSelect(false); //초기화 없이 SQL만 보고 싶을 때: getCompiledSelect(false) ← 꼭 false! + $rows = $builder->get()->getResult(); + if (!count($rows)) { + return []; + } + return $rows; + } //서비스정보 설정 public function setService(string $action, ServiceEntity $serviceEntity, array $serviceFormDatas): ServiceEntity { diff --git a/app/Views/admin/popup/view.php b/app/Views/admin/popup/view.php index ddf121c..ec6f762 100644 --- a/app/Views/admin/popup/view.php +++ b/app/Views/admin/popup/view.php @@ -7,7 +7,7 @@ - + diff --git a/app/Views/admin/view.php b/app/Views/admin/view.php index ddf121c..ec6f762 100644 --- a/app/Views/admin/view.php +++ b/app/Views/admin/view.php @@ -7,7 +7,7 @@
getHelper()->getFieldLabel($field, lang("{$viewDatas['class_path']}.label.{$field}"), $viewDatas) ?>getHelper()->getFieldLabel($field, lang("{$viewDatas['class_path']}.label.{$field}"), $viewDatas) ?> getHelper()->getFieldView($field, $viewDatas['entity']->$field, $viewDatas) ?>
- + diff --git a/app/Views/admin/welcome/banner.php b/app/Views/admin/welcome/banner.php index dbab1f5..6b11e4c 100644 --- a/app/Views/admin/welcome/banner.php +++ b/app/Views/admin/welcome/banner.php @@ -65,12 +65,12 @@
-
+
-
0
+
요청업무 알림
@@ -102,7 +102,7 @@
-
건/
+
건/
금일 기준 미납 서비스
diff --git a/app/Views/admin/welcome/index.php b/app/Views/admin/welcome/index.php index 67c2354..bf1c451 100644 --- a/app/Views/admin/welcome/index.php +++ b/app/Views/admin/welcome/index.php @@ -17,15 +17,9 @@
include("{$viewDatas['layout']}/welcome/total_service"); ?> include("{$viewDatas['layout']}/welcome/new_service"); ?> -
-
- include("{$viewDatas['layout']}/welcome/user_history"); ?> -
-
-
-
include("{$viewDatas['layout']}/welcome/stock"); ?>
+
include("{$viewDatas['layout']}/welcome/user_history"); ?>
diff --git a/app/Views/admin/welcome/stock.php b/app/Views/admin/welcome/stock.php index b902661..51f709b 100644 --- a/app/Views/admin/welcome/stock.php +++ b/app/Views/admin/welcome/stock.php @@ -10,16 +10,14 @@
getHelper()->getFieldLabel($field, lang("{$viewDatas['class_path']}.label.{$field}"), $viewDatas) ?>getHelper()->getFieldLabel($field, lang("{$viewDatas['class_path']}.label.{$field}"), $viewDatas) ?> getHelper()->getFieldView($field, $viewDatas['entity']->$field, $viewDatas) ?>
- - - - + + + + - -
메모리저장장치서버데스크탑서버메모리저장장치
준비중...준비중...
diff --git a/app/Views/cells/part/disk_stock.php b/app/Views/cells/part/disk_stock.php index 99f6aaf..215cd13 100644 --- a/app/Views/cells/part/disk_stock.php +++ b/app/Views/cells/part/disk_stock.php @@ -1,15 +1,28 @@ - - - + + + - - - + + +
항목갯수포맷항목갯수포맷대기
getHelper()->getFieldView($field, $entity->$field, $partCellDatas) ?> + getTitle(), + 'disk_modify', + [ + "data-src" => "admin/part/disk/modify/" . $entity->getPK(), + "data-bs-toggle" => "modal", + "data-bs-target" => "#modal_action_form", + "class" => "text-primary form-label-sm", + ] + ); + ?> + getStock() ?>getHelper()->getFieldView('format', $entity->format, $partCellDatas) ?>
\ No newline at end of file diff --git a/app/Views/cells/part/ram_stock.php b/app/Views/cells/part/ram_stock.php index 718e7fc..9208cb5 100644 --- a/app/Views/cells/part/ram_stock.php +++ b/app/Views/cells/part/ram_stock.php @@ -1,14 +1,26 @@ - - + + - - - + +
항목갯수항목갯수
getHelper()->getFieldView($field, $entity->$field, $partCellDatas) ?> + getTitle(), + 'disk_modify', + [ + "data-src" => "admin/part/ram/modify/" . $entity->getPK(), + "data-bs-toggle" => "modal", + "data-bs-target" => "#modal_action_form", + "class" => "text-primary form-label-sm", + ] + ); + ?> + getStock() ?>
\ No newline at end of file diff --git a/app/Views/cells/server/stock.php b/app/Views/cells/server/stock.php index 718e7fc..f57a2ef 100644 --- a/app/Views/cells/server/stock.php +++ b/app/Views/cells/server/stock.php @@ -1,14 +1,12 @@ - - + + - - + - - - + +
항목갯수항목갯수
getHelper()->getFieldView($field, $entity->$field, $partCellDatas) ?>title ?>cnt ?>
\ No newline at end of file diff --git a/app/Views/layouts/admin/left_menu.php b/app/Views/layouts/admin/left_menu.php index ddfbb3b..1691c06 100644 --- a/app/Views/layouts/admin/left_menu.php +++ b/app/Views/layouts/admin/left_menu.php @@ -7,6 +7,7 @@ Main include(LAYOUTS[$viewDatas['layout']]['path'] . '/left_menu/base'); ?> + include(LAYOUTS[$viewDatas['layout']]['path'] . '/left_menu/board'); ?> include(LAYOUTS[$viewDatas['layout']]['path'] . '/left_menu/customer'); ?> include(LAYOUTS[$viewDatas['layout']]['path'] . '/left_menu/equipment'); ?> include(LAYOUTS[$viewDatas['layout']]['path'] . '/left_menu/part'); ?> diff --git a/app/Views/layouts/admin/left_menu/base.php b/app/Views/layouts/admin/left_menu/base.php index 172ec9c..aeed902 100644 --- a/app/Views/layouts/admin/left_menu/base.php +++ b/app/Views/layouts/admin/left_menu/base.php @@ -1,9 +1,3 @@
계정 관리 -
-
- 게시판 관리 -
-
- Log 관리
\ No newline at end of file diff --git a/app/Views/layouts/admin/left_menu/board.php b/app/Views/layouts/admin/left_menu/board.php new file mode 100644 index 0000000..bcbef69 --- /dev/null +++ b/app/Views/layouts/admin/left_menu/board.php @@ -0,0 +1,17 @@ +

+ +

+
+ + + +
\ No newline at end of file