dbmsv3 init...1

This commit is contained in:
choi.jh 2025-10-21 13:57:13 +09:00
parent 1ddf06ff3e
commit ecc0c572fc
22 changed files with 162 additions and 95 deletions

View File

@ -70,7 +70,7 @@ class ServerCell extends EquipmentCell
'partCellDatas' => [
'control' => $this->getService()->getControlDatas(),
'service' => $this->getService(),
'entities' => $this->getService()->getEntities(),
'rows' => $this->getService()->getStockCount(),
],
]);
}

View File

@ -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,
]);

View File

@ -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']
));
}
}

View File

@ -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();
}

View File

@ -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 "<script>alert('포맷처리가 완료되었습니다.'); history.back();</script>";
} catch (\Exception $e) {
$db->transRollback();
return $this->getResultFail($e->getMessage());

View File

@ -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','&lt;p&gt;테스트공지2222&lt;br&gt;테스트공지2222&lt;br&gt;테스트공지2222&lt;/p&gt;','available',NULL,'2025-10-20 14:55:36',NULL),(2,1,'notice','테스트공지333','&lt;p&gt;테스트공지333&lt;br&gt;&lt;span style=&quot;color: #e03e2d;&quot;&gt;테스트공지333&lt;/span&gt;&lt;br&gt;테스트공지333&lt;/p&gt;','available',NULL,'2025-10-20 14:56:20',NULL);
INSERT INTO `boardinfo` VALUES (1,1,NULL,'notice','테스트공지2222','&lt;p&gt;테스트공지2222&lt;br&gt;테스트공지2222&lt;br&gt;테스트공지2222&lt;/p&gt;','available',NULL,'2025-10-20 14:55:36',NULL),(2,1,NULL,'notice','테스트공지333','&lt;p&gt;테스트공지333&lt;br&gt;&lt;span style=&quot;color: #e03e2d;&quot;&gt;테스트공지333&lt;/span&gt;&lt;br&gt;테스트공지333&lt;/p&gt;','available',NULL,'2025-10-20 14:56:20',NULL),(3,1,43,'requesttask','test요청1111','&lt;p&gt;test요청1111&lt;br&gt;test요청1111&lt;br&gt;test요청1111&lt;/p&gt;','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

View File

@ -21,6 +21,6 @@ return [
"STATUS" => [
STATUS['AVAILABLE'] => "사용중",
STATUS['PAUSE'] => "일시정지",
STATUS['TERMINATED'] => "삭제",
STATUS['TERMINATED'] => "완료",
],
];

View File

@ -31,16 +31,21 @@ 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 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",
"INTEL I3" => "INTEL I3",
"INTEL I5" => "INTEL I5",
"INTEL I7" => "INTEL I7",
"INTEL I9" => "INTEL I9",
"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",
],

View File

@ -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' => "<label for=\"view\" data-src=\"/admin/board/view/{$entity->getPK()}\" data-bs-toggle=\"modal\" data-bs-target=\" #modal_action_form\" class=\"text-primary form-label-sm\">{$entity->getTitle()}</label>",
'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));
}
}

View File

@ -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])) {

View File

@ -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
{

View File

@ -7,7 +7,7 @@
<table class="table table-bordered">
<?php foreach ($viewDatas['control']['actionFields'] as $field): ?>
<tr>
<th nowrap class="text-end"><?= $viewDatas['service']->getHelper()->getFieldLabel($field, lang("{$viewDatas['class_path']}.label.{$field}"), $viewDatas) ?></th>
<th nowrap class="text-end" width="20%"><?= $viewDatas['service']->getHelper()->getFieldLabel($field, lang("{$viewDatas['class_path']}.label.{$field}"), $viewDatas) ?></th>
<td nowrap class="text-start"><?= $viewDatas['service']->getHelper()->getFieldView($field, $viewDatas['entity']->$field, $viewDatas) ?></td>
</tr>
<?php endforeach; ?>

View File

@ -7,7 +7,7 @@
<table class="table table-bordered">
<?php foreach ($viewDatas['control']['actionFields'] as $field): ?>
<tr>
<th nowrap class="text-end"><?= $viewDatas['service']->getHelper()->getFieldLabel($field, lang("{$viewDatas['class_path']}.label.{$field}"), $viewDatas) ?></th>
<th nowrap class="text-end" width="20%"><?= $viewDatas['service']->getHelper()->getFieldLabel($field, lang("{$viewDatas['class_path']}.label.{$field}"), $viewDatas) ?></th>
<td nowrap class="text-start"><?= $viewDatas['service']->getHelper()->getFieldView($field, $viewDatas['entity']->$field, $viewDatas) ?></td>
</tr>
<?php endforeach; ?>

View File

@ -65,12 +65,12 @@
</head>
<div class="row">
<div class="col-lg">
<div class="card dashboard-card bg-blue card-clickable" onclick="document.location.href='/admin/board?category=requesttask';">
<div class="card dashboard-card bg-blue card-clickable" onclick="document.location.href='/admin/board?category=<?= BOARD['CATEGORY']['REQUESTTASK'] ?>&worker_uid=<?= $viewDatas['myAuthUID'] ?>';">
<div class=" card-body">
<div class="row">
<div class="col-4"><i class="fa fa-comments fa-5x"></i></div>
<div class="col-8 text-end">
<div class="huge">0</div>
<div class="huge"><?= $viewDatas['boardRequestTaskCount'] ?></div>
<div class="bg-blue">요청업무 알림</div>
</div>
</div>
@ -102,7 +102,7 @@
<div class="row">
<div class="col-4"><i class="fa fa-support fa-5x"></i></div>
<div class="col-8 text-end">
<div class="huge"><?= number_format($viewDatas['totalUnPaidCount']) ?>건/<?= number_format($viewDatas['totalUnPaidAmount']) ?>원</div>
<div class="huge"><?= number_format($viewDatas['unPaidTotalCount']) ?>건/<?= number_format($viewDatas['unPaidTotalAmount']) ?>원</div>
<div><?= date("Y-m-d") ?> 금일 기준 미납 서비스</div>
</div>
</div>

View File

@ -17,15 +17,9 @@
<div class="col-8">
<?= $this->include("{$viewDatas['layout']}/welcome/total_service"); ?>
<?= $this->include("{$viewDatas['layout']}/welcome/new_service"); ?>
</div>
<div class="col-4">
<?= $this->include("{$viewDatas['layout']}/welcome/user_history"); ?>
</div>
</div>
<div class="row align-items-start mt-3">
<div class="col">
<?= $this->include("{$viewDatas['layout']}/welcome/stock"); ?>
</div>
<div class="col-4"><?= $this->include("{$viewDatas['layout']}/welcome/user_history"); ?></div>
</div>
<!-- Layout Right End -->
</td>

View File

@ -10,16 +10,14 @@
<div style="border-left: 1px solid black; border-right: 1px solid black; padding:20px;">
<table class="table table-bordered table-striped">
<tr>
<th width="20%">메모리</th>
<th width="20%">저장장치</th>
<th width="30%">서버</th>
<th width="30%">데스크탑</th>
<th class="text-center" width="30%">서버</th>
<th class="text-center" width="30%">메모리</th>
<th class="text-center" width="40%">저장장치</th>
</tr>
<tr>
<td><?= view_cell("\App\Cells\Equipment\ServerCell::stock") ?></td>
<td><?= view_cell("\App\Cells\Part\RAMCell::stock") ?></td>
<td><?= view_cell("\App\Cells\Part\DISKCell::stock") ?></td>
<td>준비중...</td>
<td>준비중...</td>
</tr>
</table>
</div>

View File

@ -1,15 +1,28 @@
<table class="table table-bordered table-hover table-striped">
<tr>
<th>항목</th>
<th>갯수</th>
<th>포맷</th>
<th class="text-center">항목</th>
<th class="text-center">갯수</th>
<th class="text-center">포맷대기</th>
</tr>
<?php foreach ($partCellDatas['entities'] as $entity): ?>
<?php $partCellDatas['entity'] = $entity; ?>
<tr>
<?php foreach (['title', 'stock', 'format'] as $field): ?>
<td nowrap><?= $partCellDatas['service']->getHelper()->getFieldView($field, $entity->$field, $partCellDatas) ?></td>
<?php endforeach ?>
<td class="text-end" nowrap>
<?=
form_label(
$entity->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",
]
);
?>
</td>
<td class="text-center" nowrap width="20%"><?= $entity->getStock() ?></td>
<td nowrap width="20%"><?= $partCellDatas['service']->getHelper()->getFieldView('format', $entity->format, $partCellDatas) ?></td>
</tr>
<?php endforeach ?>
</table>

View File

@ -1,14 +1,26 @@
<table class="table table-bordered table-hover table-striped">
<tr>
<th>항목</th>
<th>갯수</th>
<th class="text-center">항목</th>
<th class="text-center">갯수</th>
</tr>
<?php foreach ($partCellDatas['entities'] as $entity): ?>
<?php $partCellDatas['entity'] = $entity; ?>
<tr>
<?php foreach (['title', 'stock'] as $field): ?>
<td nowrap><?= $partCellDatas['service']->getHelper()->getFieldView($field, $entity->$field, $partCellDatas) ?></td>
<?php endforeach ?>
<td class="text-end" nowrap>
<?=
form_label(
$entity->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",
]
);
?>
</td>
<td class="text-center" nowrap width="30%"><?= $entity->getStock() ?></td>
</tr>
<?php endforeach ?>
</table>

View File

@ -1,14 +1,12 @@
<table class="table table-bordered table-hover table-striped">
<tr>
<th>항목</th>
<th>갯수</th>
<th class="text-center">항목</th>
<th class="text-center">갯수</th>
</tr>
<?php foreach ($partCellDatas['entities'] as $entity): ?>
<?php $partCellDatas['entity'] = $entity; ?>
<?php foreach ($partCellDatas['rows'] as $row): ?>
<tr>
<?php foreach (['title', 'stock'] as $field): ?>
<td nowrap><?= $partCellDatas['service']->getHelper()->getFieldView($field, $entity->$field, $partCellDatas) ?></td>
<?php endforeach ?>
<td class="text-end" nowrap><?= $row->title ?></td>
<td class="text-center" nowrap width="30%"><?= $row->cnt ?></td>
</tr>
<?php endforeach ?>
</table>

View File

@ -7,6 +7,7 @@
<a href="/admin"><?= ICONS["HOME"] ?> Main</a>
</div>
<?= $this->include(LAYOUTS[$viewDatas['layout']]['path'] . '/left_menu/base'); ?>
<?= $this->include(LAYOUTS[$viewDatas['layout']]['path'] . '/left_menu/board'); ?>
<?= $this->include(LAYOUTS[$viewDatas['layout']]['path'] . '/left_menu/customer'); ?>
<?= $this->include(LAYOUTS[$viewDatas['layout']]['path'] . '/left_menu/equipment'); ?>
<?= $this->include(LAYOUTS[$viewDatas['layout']]['path'] . '/left_menu/part'); ?>

View File

@ -1,9 +1,3 @@
<div class="accordion-item">
<a href="/admin/user"><?= ICONS['MEMBER'] ?> 계정 관리</a>
</div>
<div class="accordion-item">
<a href="/admin/board"><?= ICONS['CLOUD'] ?> 게시판 관리</a>
</div>
<div class="accordion-item">
<a href="/admin/mylog"><?= ICONS['HISTORY'] ?> Log 관리</a>
</div>

View File

@ -0,0 +1,17 @@
<h2 class="accordion-header">
<button class="accordion-button collapsed" type="button" data-bs-toggle="collapse"
data-bs-target="#flush-board" aria-expanded="true"
aria-controls="flush-board"><b><?= ICONS['DEVICE'] ?>게시판관리 </b>
</button>
</h2>
<div id="flush-board" class="accordion-collapse collapse" aria-labelledby="flush-board">
<div class="accordion-item">
<a href="/admin/board?category=<?= BOARD['CATEGORY']['NOTICE'] ?>"><?= ICONS['SERVICE_ITEM_LINE'] ?>공지사항</a>
</div>
<div class="accordion-item">
<a href="/admin/board?category=<?= BOARD['CATEGORY']['WORKING'] ?>"><?= ICONS['SERVICE_ITEM_SERVER'] ?>작업일지</a>
</div>
<div class="accordion-item">
<a href="/admin/board?category=<?= BOARD['CATEGORY']['REQUESTTASK'] ?>"><?= ICONS['SERVICE_ITEM_SERVER'] ?>요청업무</a>
</div>
</div>