dbmsv4 init...2

This commit is contained in:
최준흠 2025-12-04 13:53:56 +09:00
parent 747f42c6b0
commit 7bb89cfcb6
13 changed files with 146 additions and 156 deletions

View File

@ -420,58 +420,6 @@ define("SITES", [
define("SERVICE", [
"NEW_INTERVAL" => $_ENV['SERVICE_NEW_INTERVAL'] ?? $_SERVER['SERVICE_NEW_INTERVAL'] ?? 7,
]);
//서버 관련
define("SERVER", [
"TYPES" => [
"NORMAL" => 'normal',
"DEFENCE" => 'defence',
"DEDICATED" => 'dedicated',
"VPN" => 'vpn',
"EVENT" => 'event',
"TEST" => 'test',
"ALTERNATIVE" => 'alternative',
"OURS" => 'ours',
"COLOCATION" => 'colocation'
],
"CHASSISES" => [
"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-9" => "데탑 I5 9세대",
"DESKTOP I5-10" => "데탑 I5 10세대",
"DESKTOP I5-12" => "데탑 I5 12세대",
"DESKTOP I7-9" => "데탑 I5 9세대",
"DESKTOP I7-10" => "데탑 I5 10세대",
"DESKTOP I7-12" => "데탑 I5 12세대",
"MINI I5-12" => "Mini I5 12세대",
"VPC" => "아마존-VPN",
"KCS" => "KT-VPN",
],
"STOCKS" => [
"HP DL360 GEN6B" => 100,
"HP DL360 GEN7C" => 100,
"HP DL360 GEN7D" => 100,
"HP DL360 GEN8D" => 100,
"HP DL360 GEN8E" => 100,
"HP DL360 GEN9E" => 100,
"HP DL360 GEN10" => 100,
"Hitach HA3000" => 100,
"DESKTOP I5-9" => 100,
"DESKTOP I5-10" => 100,
"DESKTOP I5-12" => 100,
"DESKTOP I7-9" => 100,
"DESKTOP I7-10" => 100,
"DESKTOP I7-12" => 100,
"MINI I5-12" => 100,
"VPC" => 100,
"KCS" => 100,
]
]);
//서버파트 관련
define("SERVERPART", [
"CNT_RANGE" => array_combine(range(1, 10), range(1, 10)),
@ -479,53 +427,55 @@ define("SERVERPART", [
"SERVICE_PARTTYPES" => ['SOFTWARE', 'CS', 'IP'],
"ALL_PARTTYPES" => ['CPU', 'RAM', 'DISK', 'SOFTWARE', 'IP', 'CS'],
"CPU" => [
"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" => ""]],
"DESKTOP I5-9" => [["UID" => 7, "CNT" => 1, "EXTRA" => ""]],
"DESKTOP I5-10" => [["UID" => 8, "CNT" => 1, "EXTRA" => ""]],
"DESKTOP I5-12" => [["UID" => 9, "CNT" => 1, "EXTRA" => ""]],
"DESKTOP I7-9" => [["UID" => 10, "CNT" => 1, "EXTRA" => ""]],
"DESKTOP I7-10" => [["UID" => 11, "CNT" => 1, "EXTRA" => ""]],
"DESKTOP I7-12" => [["UID" => 12, "CNT" => 1, "EXTRA" => ""]],
1 => [["UID" => 1, "CNT" => 2, "EXTRA" => ""]],
2 => [["UID" => 2, "CNT" => 2, "EXTRA" => ""]],
3 => [["UID" => 3, "CNT" => 2, "EXTRA" => ""]],
4 => [["UID" => 3, "CNT" => 2, "EXTRA" => ""]],
5 => [["UID" => 4, "CNT" => 2, "EXTRA" => ""]],
6 => [["UID" => 4, "CNT" => 2, "EXTRA" => ""]],
7 => [["UID" => 5, "CNT" => 2, "EXTRA" => ""]],
8 => [["UID" => 5, "CNT" => 2, "EXTRA" => ""]],
101 => [["UID" => 7, "CNT" => 1, "EXTRA" => ""]],
102 => [["UID" => 8, "CNT" => 1, "EXTRA" => ""]],
103 => [["UID" => 9, "CNT" => 1, "EXTRA" => ""]],
111 => [["UID" => 10, "CNT" => 1, "EXTRA" => ""]],
112 => [["UID" => 11, "CNT" => 1, "EXTRA" => ""]],
113 => [["UID" => 12, "CNT" => 1, "EXTRA" => ""]],
201 => [["UID" => 9, "CNT" => 1, "EXTRA" => ""]],
],
"RAM" => [
"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" => ""]],
"DESKTOP I5-9" => [["UID" => 9, "CNT" => 1, "EXTRA" => ""]],
"DESKTOP I5-10" => [["UID" => 9, "CNT" => 1, "EXTRA" => ""]],
"DESKTOP I5-12" => [["UID" => 10, "CNT" => 1, "EXTRA" => ""]],
"DESKTOP I7-9" => [["UID" => 9, "CNT" => 1, "EXTRA" => ""]],
"DESKTOP I7-10" => [["UID" => 9, "CNT" => 1, "EXTRA" => ""]],
"DESKTOP I7-12" => [["UID" => 10, "CNT" => 1, "EXTRA" => ""]],
1 => [["UID" => 2, "CNT" => 1, "EXTRA" => ""]],
2 => [["UID" => 2, "CNT" => 2, "EXTRA" => ""]],
3 => [["UID" => 2, "CNT" => 2, "EXTRA" => ""]],
4 => [["UID" => 3, "CNT" => 2, "EXTRA" => ""]],
5 => [["UID" => 3, "CNT" => 4, "EXTRA" => ""]],
6 => [["UID" => 4, "CNT" => 4, "EXTRA" => ""]],
7 => [["UID" => 5, "CNT" => 2, "EXTRA" => ""]],
8 => [["UID" => 5, "CNT" => 2, "EXTRA" => ""]],
101 => [["UID" => 9, "CNT" => 1, "EXTRA" => ""]],
102 => [["UID" => 9, "CNT" => 1, "EXTRA" => ""]],
103 => [["UID" => 10, "CNT" => 1, "EXTRA" => ""]],
111 => [["UID" => 9, "CNT" => 1, "EXTRA" => ""]],
112 => [["UID" => 9, "CNT" => 1, "EXTRA" => ""]],
113 => [["UID" => 10, "CNT" => 1, "EXTRA" => ""]],
201 => [["UID" => 11, "CNT" => 1, "EXTRA" => ""]],
],
"DISK" => [
"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 GEN8E" => [["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"],],
"DESKTOP I5-9" => [["UID" => 8, "CNT" => 1, "EXTRA" => ""]],
"DESKTOP I5-10" => [["UID" => 8, "CNT" => 1, "EXTRA" => ""]],
"DESKTOP I5-12" => [["UID" => 9, "CNT" => 1, "EXTRA" => ""]],
"DESKTOP I7-9" => [["UID" => 8, "CNT" => 1, "EXTRA" => ""]],
"DESKTOP I7-10" => [["UID" => 8, "CNT" => 1, "EXTRA" => ""]],
"DESKTOP I7-12" => [["UID" => 9, "CNT" => 1, "EXTRA" => ""]],
1 => [["UID" => 8, "CNT" => 2, "EXTRA" => "RAID1"], ["UID" => 9, "CNT" => 2, "EXTRA" => "RAID1"],],
2 => [["UID" => 8, "CNT" => 2, "EXTRA" => "RAID1"], ["UID" => 9, "CNT" => 2, "EXTRA" => "RAID1"],],
3 => [["UID" => 8, "CNT" => 2, "EXTRA" => "RAID1"], ["UID" => 9, "CNT" => 2, "EXTRA" => "RAID1"],],
4 => [["UID" => 8, "CNT" => 2, "EXTRA" => "RAID1"], ["UID" => 9, "CNT" => 2, "EXTRA" => "RAID1"],],
5 => [["UID" => 8, "CNT" => 2, "EXTRA" => "RAID1"], ["UID" => 9, "CNT" => 2, "EXTRA" => "RAID1"],],
6 => [["UID" => 8, "CNT" => 2, "EXTRA" => "RAID1"], ["UID" => 9, "CNT" => 2, "EXTRA" => "RAID1"],],
7 => [["UID" => 8, "CNT" => 2, "EXTRA" => "RAID1"], ["UID" => 9, "CNT" => 2, "EXTRA" => "RAID1"],],
8 => [["UID" => 8, "CNT" => 2, "EXTRA" => "RAID1"], ["UID" => 9, "CNT" => 2, "EXTRA" => "RAID1"],],
101 => [["UID" => 8, "CNT" => 1, "EXTRA" => ""]],
102 => [["UID" => 8, "CNT" => 1, "EXTRA" => ""]],
103 => [["UID" => 9, "CNT" => 1, "EXTRA" => ""]],
111 => [["UID" => 8, "CNT" => 1, "EXTRA" => ""]],
112 => [["UID" => 8, "CNT" => 1, "EXTRA" => ""]],
113 => [["UID" => 9, "CNT" => 1, "EXTRA" => ""]],
201 => [["UID" => 9, "CNT" => 1, "EXTRA" => ""]],
]
]);
//결제 관련

View File

@ -9,6 +9,7 @@ class ServerDTO extends CommonDTO
public ?int $uid = null;
public ?string $code = null;
public ?string $type = null;
public ?int $chassisinfo_uid = null;
public ?int $switchinfo_uid = null;
public ?string $ip = null;
public ?string $os = null;

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -16,6 +16,10 @@ class ServerEntity extends EquipmentEntity
{
return $this->attributes['serviceinfo_uid'] ?? null;
}
final public function getChassisInfoUID(): int|null
{
return $this->attributes['chassisinfo_uid'] ?? null;
}
final public function getSwitchInfoUID(): int|null
{
return $this->attributes['switchinfo_uid'] ?? null;

View File

@ -18,6 +18,7 @@ class ServerForm extends EquipmentForm
case "title":
$rule = "required|trim|string";
break;
case "chassisinfo_uid":
case "price":
$rule = "required|numeric";
break;
@ -78,6 +79,24 @@ class ServerForm extends EquipmentForm
}
$options['options'] = $tempOptions;
break;
case 'chassisinfo_uid':
$tempOptions = [
"" => [
'value' => "",
'text' => lang("{$this->getAttribute('class_path')}.label.{$field}") . " 선택"
]
];
foreach ($this->getFormOption_process(service('part_chassisservice'), $action, $field, $formDatas) as $tempEntity) {
$tempOptions[$tempEntity->getPK()] = [
'value' => $tempEntity->getPK(),
'text' => $tempEntity->getTitle(),
'data-title' => $tempEntity->getTitle(),
'data-price' => $tempEntity->getPrice()
];
}
$options['options'] = $tempOptions;
// dd($options);
break;
case 'switchinfo_uid':
foreach ($this->getFormOption_process(service('part_switchservice'), $action, $field, $formDatas) as $tempEntity) {
$tempOptions[$tempEntity->getPK()] = $tempEntity->getTitle();
@ -91,7 +110,7 @@ class ServerForm extends EquipmentForm
$tempOptions[$tempEntity->getTitle()] = $tempEntity->getTitle();
// $options['attributes'][$tempEntity->getPK()] = ['data-role' => implode(DEFAULTS['DELIMITER_ROLE'], $tempEntity->getRole())];
}
//formDatas에 값이 있고, $tempOptions에 없다면 추가(VPN의 경우)
//formDatas에 값이 있고, $tempOptions에 없다면 추가(VPN의 Customer IP 경우)
if (array_key_exists($field, $formDatas) && $formDatas[$field]) {
if (!array_key_exists($formDatas[$field], $tempOptions)) {
$tempOptions[$formDatas[$field]] = $formDatas[$field];

View File

@ -49,7 +49,6 @@ abstract class CommonHelper
*/
final public function form_dropdown_custom(string $name, array $options, mixed $selected, array $extras = []): string
{
// dd($options);
//Extra처리
$extra = "";
foreach ($extras as $extras_key => $extras_value) {
@ -66,7 +65,9 @@ abstract class CommonHelper
// data-* 속성 추출 및 조합
foreach ($val as $attrKey => $attrValue) {
// 'value'와 'text'는 <option> 속성이 아니므로 제외
if ($attrKey !== 'value' && $attrKey !== 'text') {
if ($attrKey == 'value' || $attrKey == 'text') {
continue;
} else {
$optionAttributes .= sprintf(" %s=\"%s\"", esc($attrKey), esc($attrValue));
}
}

View File

@ -17,13 +17,17 @@ class ServerHelper extends EquipmentHelper
$extras['class'] = array_key_exists('class', $extras) ? $extras['class'] . ' select-field' : 'select-field';
$form = form_dropdown($field, $viewDatas['formOptions'][$field]['options'], $value, $extras);
break;
case 'chassisinfo_uid':
$extras['class'] = array_key_exists('class', $extras) ? $extras['class'] . ' select-field' : 'select-field';
$extras['onChange'] = "document.querySelector('input[name=\'title\']').value = this.options[this.selectedIndex].getAttribute('data-title'); document.querySelector('input[name=\'price\']').value = this.options[this.selectedIndex].getAttribute('data-price');";
$form = $this->form_dropdown_custom($field, $viewDatas['formOptions'][$field]['options'], $value, $extras);
break;
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 'ip':
case 'title':
$extras['class'] = array_key_exists('class', $extras) ? $extras['class'] . ' select-field' : 'select-field';
$form = parent::getFieldForm($field, $value, $viewDatas, $extras);
break;
@ -36,10 +40,13 @@ class ServerHelper extends EquipmentHelper
public function getFieldView(string $field, mixed $value, array $viewDatas, array $extras = []): string|null
{
switch ($field) {
case 'ip': //값 그대료 표시
case 'chassisinfo_uid':
if (!array_key_exists($value, $viewDatas['formOptions'][$field]['options'])) {
throw new \Exception(__METHOD__ . "에서 오류발생: {$field}에서 {$value}에 해당하는 값이 존재하지 않습니다.");
}
$value = $viewDatas['formOptions'][$field]['options'][$value]['text'];
break;
case 'title':
$value = parent::getFieldView($field, $value, $viewDatas, $extras);
case 'ip': //값 그대료 표시
break;
case 'price':
$value = number_format($value) . "";
@ -65,11 +72,15 @@ class ServerHelper extends EquipmentHelper
public function getListFilter(string $field, mixed $value, array $viewDatas, array $extras = []): string
{
switch ($field) {
case 'switch':
case 'switchinfo_uid':
case 'ip':
case 'title':
$extras['class'] = array_key_exists('class', $extras) ? $extras['class'] . ' select-field' : 'select-field';
$filter = parent::getListFilter($field, $value, $viewDatas, $extras);
break;
case 'chassisinfo_uid':
$extras['class'] = array_key_exists('class', $extras) ? $extras['class'] . ' select-field' : 'select-field';
$filter = $this->form_dropdown_custom($field, $viewDatas['formOptions'][$field]['options'], $value, $extras);
break;
default:
$filter = parent::getListFilter($field, $value, $viewDatas, $extras);
break;

View File

@ -6,6 +6,7 @@ return [
'serviceinfo_uid' => "서비스번호",
'code' => "장비번호",
'type' => "형식",
'chassisinfo_uid' => "샷시명",
'switchinfo_uid' => "스위치",
'ip' => "IP",
'os' => "OS",
@ -21,17 +22,16 @@ return [
"serverpartinfo" => "부품정보",
],
"TYPE" => [
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"] => "코로케이션",
'normal' => "일반",
'defence' => "방어",
'dedicated' => "전용",
'vpn' => "VPN",
'event' => "이벤트",
'test' => "테스트",
'alternative' => "대체",
'ours' => "자사용",
'colocation' => "코로케이션",
],
"TITLE" => SERVER['CHASSISES'],
"STATUS" => [
STATUS['AVAILABLE'] => "사용가능",
STATUS['OCCUPIED'] => "서비스중",

View File

@ -178,9 +178,9 @@ class ServerPartService extends EquipmentService
{
//*서버의 Title 대소문자구분 필요->서버의 Title로 구분해서 기본부품 추가
foreach (SERVERPART['SERVER_PARTTYPES'] as $parttype) {
//해당 server_type의 정의된 상수값이 있으면
if (array_key_exists($serverEntity->getTitle(), SERVERPART[$parttype])) {
foreach (SERVERPART[$parttype][$serverEntity->getTitle()] as $part) {
//해당 서버의 chassis_uid에 해당하는 상수값이 있는지 체크
if (array_key_exists($serverEntity->getChassisInfoUID(), SERVERPART[$parttype])) {
foreach (SERVERPART[$parttype][$serverEntity->getChassisInfoUID()] as $part) {
//해당 파트정보 가져오기
$partEntity = $this->getPartService($parttype)->getEntity($part['UID']);
if (!$partEntity instanceof PartEntity) {
@ -200,11 +200,10 @@ class ServerPartService extends EquipmentService
$fields = array_keys($formDatas);
$this->getFormService()->setFormFields($fields);
$this->getFormService()->setFormRules('create', $fields);
$entity = $this->create_process($formDatas);
if (!$entity instanceof ServerPartEntity) {
throw new \Exception(__METHOD__ . "에서 오류발생: Return Type은 ServerPartEntity만 가능합니다.");
}
$this->create_process($formDatas);
}
} else {
log_message("warning", __METHOD__ . "에서 결고발생: {$parttype} 파트 => SERVERPART[{$serverEntity->getChassisInfoUID()}] Default값이 정의되지 않았습니다.");
}
}
}

View File

@ -8,7 +8,6 @@ use App\Helpers\Equipment\ServerHelper;
use App\Forms\Equipment\ServerForm;
use App\Entities\Equipment\ServerEntity;
use App\Entities\Customer\ServiceEntity;
use App\Entities\CommonEntity;
use App\DTOs\Equipment\ServerDTO;
class ServerService extends EquipmentService
@ -65,6 +64,7 @@ class ServerService extends EquipmentService
$fields = [
"code",
"type",
"chassisinfo_uid",
"switchinfo_uid",
"ip",
"title",
@ -75,15 +75,15 @@ class ServerService extends EquipmentService
];
$filters = [
"clientinfo_uid",
'title',
'type',
"chassisinfo_uid",
'switchinfo_uid',
'ip',
'os',
"status",
];
$indexFilter = $filters;
$batchjobFilters = ['type', 'title', 'switchinfo_uid', 'ip', 'os', 'status'];
$batchjobFilters = ['type', 'switchinfo_uid', 'ip', 'os', 'status'];
switch ($action) {
case 'create':
case 'create_form':

View File

@ -37,6 +37,9 @@
<li class="nav-item">
<span class="nav-link active" aria-current="page" style="cursor:pointer;"><a href="/admin/part/cs">CS정보</a></span>
</li>
<li class="nav-item">
<span class="nav-link active" aria-current="page" style="cursor:pointer;"><a href="/admin/part/chassis">서버샷시정보</a></span>
</li>
<li class="nav-item">
<span class="nav-link active" aria-current="page" style="cursor:pointer;"><a href="/admin/part/cpu">CPU정보</a></span>
</li>