dbmsv3 init...1

This commit is contained in:
choi.jh 2025-10-14 10:11:14 +09:00
parent 5d89fc7639
commit f0bb0bbff4
15 changed files with 110 additions and 115 deletions

View File

@ -395,9 +395,20 @@ define("STATUS_ICONS", [
]);
//List의 Page당 갯수
define('DEFAULT_LIST_PERPAGE', $_ENV['LIST_PERPAGE'] ?? $_SERVER['LIST_PERPAGE'] ?? 20);
//서버 관련
define("SERVER", []);
define("SERVER", [
"TYPES" => [
"NORMAL" => 'normal',
"DEFENCE" => 'defence',
"DEDICATED" => 'dedicated',
"VPN" => 'vpn',
"EVENT" => 'event',
"TEST" => 'test',
"ALTERNATIVE" => 'alternative',
"OURS" => 'ours',
"COLOCATION" => 'colocation'
],
]);
//서비스 관련
define("SERVICE", [
"NEW_INTERVAL" => $_ENV['SERVICE_NEW_INTERVAL'] ?? $_SERVER['SERVICE_NEW_INTERVAL'] ?? 7,
@ -406,7 +417,7 @@ define("SERVICE", [
define("SERVERPART", [
"CNT_RANGE" => array_combine(range(1, 10), range(1, 10)),
"SERVER_PARTTYPES" => ['CPU', 'RAM', 'DISK'],
"SERVICE_PARTTYPES" => ['SWITCH', 'IP', 'OS', 'SOFTWARE', 'CS'],
"SERVICE_PARTTYPES" => ['SWITCH', 'OS', 'SOFTWARE', 'CS', 'IP'],
"ALL_PARTTYPES" => ['CPU', 'RAM', 'DISK', 'OS', 'SOFTWARE', 'SWITCH', 'IP', 'CS'],
"CPU" => [
"ATYPE" => [["UID" => 1, "CNT" => 1, "EXTRA" => ""]],

View File

@ -126,7 +126,7 @@ $routes->group('admin', ['namespace' => 'App\Controllers\Admin', 'filter' => 'au
$routes->get('download/(:alpha)', 'ServiceController::download/$1');
$routes->get('addServer/(:num)', 'ServiceController::addServer_form/$1');
$routes->post('addServer/(:num)', 'ServiceController::addServer/$1');
$routes->get('changeServere/(:num)', 'ServiceController::changeServere/$1');
$routes->get('changeServer/(:num)', 'ServiceController::changeServer/$1');
$routes->get('terminateServer/(:num)', 'ServiceController::terminateServer/$1');
$routes->post('history/(:num)', 'ServiceController::history/$1');
});

View File

@ -168,7 +168,7 @@ class ServiceController extends CustomerController
}
}
//대체서버를 MAIN서버로 설정
public function changeServere(mixed $uid): RedirectResponse|string
public function changeServer(mixed $uid): RedirectResponse|string
{
//Transaction Start
$db = \Config\Database::connect();
@ -191,7 +191,7 @@ class ServiceController extends CustomerController
throw new \Exception("서비스의 메인서버로 설정할 서버정보가 없습니다.");
}
//서버정보설정
$this->getService()->changeServere($entity, $formDatas);
$this->getService()->changeServer($entity, $formDatas);
$db->transCommit();
return $this->getResultSuccess('메인서버 설정이 바뀌었습니다.');
} catch (\Exception $e) {

File diff suppressed because one or more lines are too long

View File

@ -75,20 +75,18 @@ class ServerPartHelper extends EquipmentHelper
{
switch ($field) {
case 'SERVER':
if (array_key_exists('serverEntity', $viewDatas)) {
$value = $viewDatas['serviceinfo_serverinfo_uid'] == $viewDatas['serverEntity']->getPK() ? "📌" : "<a href=\"/admin/customer/service/changeServere/{$viewDatas['serverEntity']->getServiceInfoUID()}?serverinfo_uid={$viewDatas['serverEntity']->getPK()}\">✔️</a>";
$value .= form_label(
"[" . lang("Equipment/Server.TYPE")[$viewDatas['serverEntity']->getType()] . "] " . $viewDatas['serverEntity']->getCode(),
$field,
[
"data-src" => "/admin/equipment/server/modify/{$viewDatas['serverEntity']->getPK()}?ActionTemplate=popup/server",
"data-bs-toggle" => "modal",
"data-bs-target" => "#index_action_form",
"class" => "btn btn-sm btn-outline btn-circle form-label-sm",
"target" => "_self",
]
);
}
$value = $viewDatas['serviceinfo_serverinfo_uid'] == $viewDatas['serverEntity']->getPK() ? "📌" : "<a href=\"/admin/customer/service/changeServer/{$viewDatas['serverEntity']->getServiceInfoUID()}?serverinfo_uid={$viewDatas['serverEntity']->getPK()}\">✔️</a>";
$value .= form_label(
sprintf("[%s] %s / %s", lang("Equipment/Server.TYPE")[$viewDatas['serverEntity']->getType()], $viewDatas['serverEntity']->getCode(), $viewDatas['serverEntity']->getIP()),
$field,
[
"data-src" => "/admin/equipment/server/modify/{$viewDatas['serverEntity']->getPK()}?ActionTemplate=server",
"data-bs-toggle" => "modal",
"data-bs-target" => "#index_action_form",
"class" => "btn btn-sm btn-outline btn-circle form-label-sm",
"target" => "_self",
]
);
break;
case 'CPU':
case 'RAM':

View File

@ -18,15 +18,15 @@ return [
"serverpartinfo" => "부품정보",
],
"TYPE" => [
"normal" => "일반",
"defence" => "방어",
"dedicated" => "전용",
"vpn" => "VPN",
"event" => "이벤트",
"test" => "테스트",
"alternative" => "대체",
"ours" => "자사용",
"colocation" => "코로케이션",
SERVER['TYPES']["NORMAL"] => "일반",
SERVER['TYPES']["DEFENCE"] => "방어",
SERVER['TYPES']["DEDICATED"] => "전용",
SERVER['TYPES']["VPN"] => "VPN",
SERVER['TYPES']["EVENT"] => "이벤트",
SERVER['TYPES']["TEST"] => "테스트",
SERVER['TYPES']["ALTERNATIVE"] => "대체",
SERVER['TYPES']["OURS"] => "자사용",
SERVER['TYPES']["COLOCATION"] => "코로케이션",
],
"TITLE" => [
"HP DL360 Gen6" => "HP DL360 Gen6",

View File

@ -174,12 +174,15 @@ class ServiceService extends CustomerService
//총서비스금액 계산
//기본:상면비+회선비+서버금액(price)+서버파트연결(월비용)-할인액
$caculatedAmount = $entity->getRack() + $entity->getLine() + $entity->getServerEntity()->getPrice();
// echo "기본금액: {$entity->getRack()} + {$entity->getLine()} + {$entity->getServerEntity()->getPrice()} = {$caculatedAmount}\n";
//해당 서비스(서버) 관련 결제방식(Billing)이 Month인 ServerPart 전체를 다시 검사하여 월청구액을 합산한다.
foreach ($this->getServerPartService()->getEntities(['serverinfo_uid' => $entity->getServerEntity()->getPK()]) as $serverPartEntity) {
if ($serverPartEntity->getBilling() === PAYMENT['BILLING']['MONTH']) { //월비용일때만 적용
$caculatedAmount += $serverPartEntity->getTotalAmount(); //단가*Cnt
}
}
// echo "총서비스금액: {$caculatedAmount} - 할인액: {$entity->getSale()} = 최종금액: " . ($caculatedAmount - $entity->getSale()) . "\n";
// exit;
return $caculatedAmount - $entity->getSale();
}
//서비스 총금액설정
@ -230,9 +233,10 @@ class ServiceService extends CustomerService
{
//수정전 정보
$oldEntity = clone $entity; //반드시 clone 할것
//서비스 금액 재계산 후 서비스정보 수정
$formDatas['amount'] = $this->getCaculatedAmount($entity);
//서비스정보 수정
$entity = parent::modify($entity, $formDatas);
//서비스 금액 재계산
$entity = $this->setAmount($entity);
//기존 서버정보와 다르다면 서버변경
if ($oldEntity->getServerEntity()->getPK() != $formDatas['serverinfo_uid']) {
//기존서버처리
@ -241,13 +245,15 @@ class ServiceService extends CustomerService
$entity = $this->getServerService()->setService('create', $entity, $formDatas);
}
//전체 서비스금액 설정
return $this->getPaymentService()->setService('modify', $entity, $formDatas);
return $this->getPaymentService()->setService('modify', $entity, []);
}
//삭제
public function delete(mixed $entity): ServiceEntity
{
//서버해지
$entity = $this->getServerService()->setService('delete', $entity, []);
//서비스서버해지
foreach ($this->getServerService()->getEntities(['serviceinfo_uid' => $entity->getPK()]) as $serverEntity) {
$this->getServerService()->setService('delete', $entity, ['serverinfo_uid' => $serverEntity->getPK()]);
}
return parent::delete($entity);
}
//비고(History)설정
@ -259,26 +265,28 @@ class ServiceService extends CustomerService
public function addServer(ServiceEntity $entity, array $formDatas): ServiceEntity
{
//대체서버추가 및 결제처리는 하지않음
$formDatas['type'] = 'alternative';
return $this->getServerService()->setService('create', $entity, $formDatas);
return $this->getServerService()->setService('create', $entity, ['type' => SERVER['TYPES']['ALTERNATIVE']]);
}
//대체서버를 메인서버로 설정
public function changeServere(ServiceEntity $entity, array $formDatas): ServiceEntity
public function changeServer(ServiceEntity $entity, array $formDatas): ServiceEntity
{
$serverEntity = $entity->getServerEntity();
if (!$serverEntity instanceof ServerEntity) {
//수정전 정보
$oldEntity = clone $entity; //반드시 clone 할것
$oldServerEntity = $oldEntity->getServerEntity();
if (!$oldServerEntity instanceof ServerEntity) {
throw new \Exception(__METHOD__ . "에서 오류발생: 기존 메인 서버정보를 찾을수 없습니다.");
}
//기존메인서버 정보회수처리용
$entity = $this->getServerService()->setService('delete', $entity, $formDatas);
//메인서버로 선정된 대체서버정보
$formDatas['type'] = $serverEntity->getType();
$entity = $this->getServerService()->setService('create', $entity, $formDatas);
//서비스 금액 재계산 후 서비스정보 수정
$formDatas['amount'] = $this->getCaculatedAmount($entity);
//서비스정보 수정
$entity = parent::modify($entity, $formDatas);
//서비스 금액 재계산
$entity = $this->setAmount($entity);
//메인서버로 선정된 대체서버정보 Type을 기존 메인서버의 Type으로 변경
$entity = $this->getServerService()->setService('modify', $entity, ['type' => $oldServerEntity->getType()]);
//전체 서비스금액 설정
return $this->getPaymentService()->setService('modify', $entity, $formDatas);
$entity = $this->getPaymentService()->setService('modify', $entity, []);
//기존메인서버 정보를 대체서버로 변경
$oldEntity = $this->getServerService()->setService('modify', $oldEntity, ['type' => SERVER['TYPES']['ALTERNATIVE']]);
return $entity;
}
//대체서버해지(대체서버는 해지는 가격변동은 없음)
public function terminateServer(ServiceEntity $entity, array $formDatas): ServiceEntity
@ -287,6 +295,6 @@ class ServiceService extends CustomerService
throw new \Exception(__METHOD__ . "에서 오류발생: 서비스의 메인 서버정보는 해지할 수 없습니다.");
}
//대체서버해지 및 결제처리는 하지않음
return $this->getServerService()->setService('delete', $entity, $formDatas);
return $this->getServerService()->setService('delete', $entity, ['serverinfo_uid' => $formDatas['serverinfo_uid']]);
}
}

View File

@ -401,7 +401,7 @@ class ServerPartService extends EquipmentService implements ServerInterface
//Type에 따른 부품서비스 정의
$this->getPartService($entity->getType())->setServerPart('delete', $entity, []);
if ($entity->getServiceInfoUID() !== null) { //서비스가 정의되어 있으면
$entity = $this->getServiceService()->setAmount($this->getServiceService()->getEntity($entity->getServiceInfoUID()));
$this->getServiceService()->setAmount($this->getServiceService()->getEntity($entity->getServiceInfoUID()));
}
return parent::delete($entity);
}

View File

@ -139,11 +139,11 @@ class ServerService extends EquipmentService implements ServiceInterface
switch ($action) {
case 'create':
if (!array_key_exists('serverinfo_uid', $serviceFormDatas)) {
throw new \Exception(__METHOD__ . "/{$action}에서 오류발생: 서버가 지정되지 않았습니다.");
throw new \Exception(__METHOD__ . "에서 {$action}오류발생: 서버가 지정되지 않았습니다.");
}
$entity = $this->getEntity($serviceFormDatas['serverinfo_uid']);
if (!$entity instanceof ServerEntity || $entity->getStatus() != STATUS['AVAILABLE']) {
throw new \Exception(__METHOD__ . "에서 오류발생:{$serviceFormDatas['serverinfo_uid']}에 대한 서버정보를 찾을수 없거나, 사용가능 서버가 아닙니다.");
throw new \Exception(__METHOD__ . "에서 {$action}오류발생: {$serviceFormDatas['serverinfo_uid']}에 대한 서버정보를 찾을수 없거나, 사용가능 서버가 아닙니다.");
}
$formDatas = [];
//대체서버 추가용인지 확인
@ -155,13 +155,24 @@ class ServerService extends EquipmentService implements ServiceInterface
$formDatas['status'] = STATUS['OCCUPIED'];
$entity = parent::modify($entity, $formDatas);
break;
case 'modify':
$entity = $serviceEntity->getServerEntity();
if (!$entity instanceof ServerEntity) {
throw new \Exception(__METHOD__ . "에서 {$action}오류발생: {$serviceFormDatas['serverinfo_uid']}에 대한 서버정보를 찾을수 없거나, 사용가능 서버가 아닙니다.");
}
$formDatas = [];
if (array_key_exists('type', $serviceFormDatas)) {
$formDatas['type'] = $serviceFormDatas['type'];
}
$entity = parent::modify($entity, $formDatas);
break;
case 'delete':
if (!array_key_exists('serverinfo_uid', $serviceFormDatas)) {
throw new \Exception(__METHOD__ . "/{$action}에서 오류발생: 서버가 지정되지 않았습니다.");
throw new \Exception(__METHOD__ . "에서 {$action}오류발생: 서버가 지정되지 않았습니다.");
}
$entity = $this->getEntity($serviceFormDatas['serverinfo_uid']);
if (!$entity instanceof ServerEntity) {
throw new \Exception(__METHOD__ . "에서 오류발생:해지 할 서버정보를 찾을수 없습니다.");
throw new \Exception(__METHOD__ . "에서 {$action}오류발생: 해지 할 서버정보를 찾을수 없습니다.");
}
$formDatas = [];
$formDatas['clientinfo_uid'] = null;

View File

@ -147,6 +147,7 @@ class IPService extends PartService implements ServerInterface
$formDatas['clientinfo_uid'] = null;
$formDatas['serviceinfo_uid'] = null;
$formDatas['serverinfo_uid'] = null;
$formDatas['old_clientinfo_uid'] = $serverEntity->getClientInfoUID() ?? null;
$formDatas['status'] = STATUS['AVAILABLE'];
if (!array_key_exists('status', $formDatas)) {
throw new \Exception(__METHOD__ . ":{$action}에서 오류발생: IP상태가 설정되지 않았습니다.");
@ -193,6 +194,7 @@ class IPService extends PartService implements ServerInterface
$formDatas['clientinfo_uid'] = null;
$formDatas['serviceinfo_uid'] = null;
$formDatas['serverinfo_uid'] = null;
$formDatas['old_clientinfo_uid'] = $serverPartEntity->getClientInfoUID() ?? null;
$formDatas['status'] = STATUS['AVAILABLE'];
if (!array_key_exists('status', $formDatas)) {
throw new \Exception(__METHOD__ . ":{$action}에서 오류발생: IP상태가 설정되지 않았습니다.");

View File

@ -1,40 +0,0 @@
<?= $this->extend(LAYOUTS[$viewDatas['layout']]['path']) ?>
<?= $this->section('content') ?>
<?php if ($error = session('error')): echo $viewDatas['service']->getHelper()->alert($error) ?><?php endif ?>
<div id="container" class="content">
<div class="form_top"><?= $this->include("templates/{$viewDatas['layout']}/form_content_top"); ?></div>
<table class="table table-bordered">
<tr>
<th>서버정보</th>
<th>추가정보</th>
</tr>
<tr>
<td nowrap>
<div class="action_form">
<?= form_open(current_url(), $viewDatas['forms']['attributes'], $viewDatas['forms']['hiddens']) ?>
<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>
<td nowrap class="text-start">
<?= $viewDatas['service']->getHelper()->getFieldForm($field, old($field) ?? ($viewDatas['entity']->$field ?? null), $viewDatas) ?>
<span><?= validation_show_error($field); ?></span>
</td>
</tr>
<?php endforeach; ?>
</table>
<div class="text-center"><?= form_submit('', '수정', array("class" => "btn btn-outline btn-primary")); ?></div>
<?= form_close(); ?>
</div>
</td>
<td>
<?= view_cell("\App\Cells\Equipment\ServerPartCell::parttable", [
'serverinfo_uid' => $viewDatas['entity']->getPK(),
'types' => SERVERPART['ALL_PARTTYPES']
]) ?>
</td>
</tr>
</table>
<div class="form_bottom"><?= $this->include("templates/{$viewDatas['layout']}/form_content_bottom"); ?></div>
</div>
<?= $this->endSection() ?>

View File

@ -74,8 +74,9 @@
</td>
<td nowrap>
<?= $viewDatas['service']->getHelper()->getFieldView('clientinfo_uid', $entity->getClientInfoUID(), $viewDatas) ?>
<BR><?= $viewDatas['service']->getHelper()->getFieldView('code', $entity->getCode(), $viewDatas) ?>
</td>
<td nowrap><?= implode("", $viewDatas['childServers'][$entity->getPK()]) ?></td>
<td><?= implode("", $viewDatas['childServers'][$entity->getPK()]) ?></td>
<td nowrap class="text-end">
<?= $viewDatas['service']->getHelper()->getFieldView('sale', $entity->getSale(), $viewDatas) ?>
</td>

View File

@ -15,7 +15,7 @@
<?php $view_texts[] = implode(',', $texts[$type]) ?>
<?php endforeach ?>
<?php $text = implode(" / ", $view_texts) ?>
<span class="rounded border border-primary" style="cursor:pointer;" onClick="copyServerPartToClipboard('<?= $text ?>')" text-data="<?= $text ?>">📋</span>
<span class="serverparts rounded border border-primary" style="cursor:pointer;" onClick="copyServerPartToClipboard('<?= $text ?>')" text-data="<?= $text ?>">📋</span>
<?php $view_htmls = [] ?>
<?php foreach ($htmls as $type => $datas): ?>
<?php $view_htmls[] = $serverPartCellDatas['service']->getHelper()->getListButton($type, '', $serverPartCellDatas) . implode(",", $datas) ?>

View File

@ -14,13 +14,17 @@
<?php foreach ($htmls as $type => $datas): ?>
<?php $view_htmls[] = $serverPartCellDatas['service']->getHelper()->getListButton($type, '', $serverPartCellDatas) . implode(",", $datas) ?>
<?php endforeach ?>
<?php $view_texts = [!$serverPartCellDatas['serverEntity'] ? "" : $serverPartCellDatas['serverEntity']->getCode()] ?>
<?php $view_texts = [] ?>
<?php if (array_key_exists('serverEntity', $serverPartCellDatas) && $serverPartCellDatas['serverEntity']): ?>
<?php $view_texts[] = $serverPartCellDatas['serverEntity']->getCode() ?>
<?php $view_texts[] = $serverPartCellDatas['serverEntity']->getIP() ?>
<?php endif ?>
<?php foreach ($texts as $type => $datas): ?>
<?php $view_texts[] = implode(',', $datas) ?>
<?php endforeach ?>
<div class="text-nowrap">
<?php $text = implode(" / ", $view_texts) ?>
<span class="rounded border border-primary" style="cursor:pointer;" onClick="copyServerPartToClipboard('<?= $text ?>')" text-data="<?= $text ?>">📋</span>
<span class="serverparts rounded border border-primary" style="cursor:pointer;" onClick="copyServerPartToClipboard('<?= $text ?>')" text-data="<?= $text ?>">📋</span>
<?= implode(" / ", $view_htmls) ?>
<?php if ($serverPartCellDatas['serverEntity']): ?>
<a href="/admin/customer/service/terminateServer/<?= $serverPartCellDatas['serverEntity']->getServiceInfoUID() ?>?serverinfo_uid=<?= $serverPartCellDatas['serverEntity']->getPK() ?>"></a>

View File

@ -11,7 +11,7 @@ function copyServerPartToClipboard(text) {
temp.value = text;
document.body.appendChild(temp);
temp.select();
document.execCommand("copy");
// document.execCommand("copy"); --- DEPRECATED ---
document.body.removeChild(temp);
alert(text + "\n 복사되었습니다.");
}