1387 lines
46 KiB
C++
1387 lines
46 KiB
C++
#include "systemconfigwizard.h"
|
||
#include <QVBoxLayout>
|
||
#include <QTableWidget>
|
||
#include <QLabel>
|
||
#include <QTextEdit>
|
||
#include <QHeaderView>
|
||
#include <QPushButton>
|
||
#include "pub_widget/MessageBox.h"
|
||
#include <QComboBox>
|
||
#include <QListView>
|
||
#include <QProcess>
|
||
#include <QNetworkInterface>
|
||
#include <QDir>
|
||
#include "kbdtabledatamgr.h"
|
||
#include "kbddbdesign.h"
|
||
#include "common_global.h"
|
||
#include "kbdregexpvalidator.h"
|
||
#include <QHostInfo>
|
||
#include <QLineEdit>
|
||
|
||
|
||
SystemConfigWizard::SystemConfigWizard(QWidget *parent) : QWizard(parent)
|
||
{
|
||
setWindowTitle(tr("系统拓扑配置向导"));
|
||
setWizardStyle(QWizard::ClassicStyle);
|
||
addPage(createLocationPage());
|
||
addPage(createNodePage());
|
||
addPage(createDbNodePage());
|
||
resize(940,580);
|
||
}
|
||
|
||
bool SystemConfigWizard::validateCurrentPage()
|
||
{
|
||
if(currentId() == 0)
|
||
{
|
||
if(checkLocationInfo())
|
||
setNodetableDelegate();
|
||
else
|
||
return false;
|
||
}
|
||
else if(currentId() == 1)
|
||
{
|
||
if(checkNodeInfo())
|
||
{
|
||
setDbNodetableDelegate();
|
||
UpdateNoUseNode();
|
||
}
|
||
else
|
||
return false;
|
||
}
|
||
|
||
return true;
|
||
}
|
||
|
||
QWizardPage* SystemConfigWizard::createLocationPage()
|
||
{
|
||
QWizardPage* page = new QWizardPage(this);
|
||
QVBoxLayout* vlayout = new QVBoxLayout;
|
||
QHBoxLayout* hLayout = new QHBoxLayout;
|
||
|
||
QLabel*lableTitle = new QLabel(tr("位置配置"));
|
||
QPushButton* btnAdd = new QPushButton(tr("增加"),this);
|
||
QPushButton* btnDelete = new QPushButton(tr("删除"),this);
|
||
hLayout->addWidget(lableTitle);
|
||
hLayout->addStretch();
|
||
hLayout->addWidget(btnAdd);
|
||
hLayout->addWidget(btnDelete);
|
||
vlayout->addLayout(hLayout);
|
||
|
||
|
||
m_tableLocation = new QTableWidget(this);
|
||
QLabel* lable = new QLabel(tr("提示:"),this);
|
||
|
||
m_textLocationNote = new QTextEdit(this);
|
||
m_textLocationNote->setMaximumWidth(200);
|
||
vlayout->addWidget(m_tableLocation);
|
||
|
||
hLayout = new QHBoxLayout;
|
||
hLayout->addLayout(vlayout);
|
||
|
||
vlayout = new QVBoxLayout;
|
||
vlayout->addWidget(lable);
|
||
vlayout->addWidget(m_textLocationNote);
|
||
hLayout->addLayout(vlayout);
|
||
|
||
hLayout->setMargin(0);
|
||
page->setLayout(hLayout);
|
||
|
||
initLocationPageData();
|
||
|
||
connect(btnAdd,&QPushButton::clicked,this,&SystemConfigWizard::onAddLocationPageData);
|
||
connect(btnDelete,&QPushButton::clicked,this,&SystemConfigWizard::onDeleteLocationPageData);
|
||
return page;
|
||
}
|
||
|
||
QWizardPage* SystemConfigWizard::createNodePage()
|
||
{
|
||
QWizardPage* page = new QWizardPage(this);
|
||
QVBoxLayout* vlayout = new QVBoxLayout;
|
||
QHBoxLayout* hlayout = new QHBoxLayout;
|
||
|
||
QLabel*lableTitle = new QLabel(tr("节点配置"));
|
||
QPushButton* btnAdd = new QPushButton(tr("增加"),this);
|
||
QPushButton* btnDelete = new QPushButton(tr("删除"),this);
|
||
|
||
hlayout->addWidget(lableTitle);
|
||
hlayout->addStretch();
|
||
hlayout->addWidget(btnAdd);
|
||
hlayout->addWidget(btnDelete);
|
||
vlayout->addLayout(hlayout);
|
||
|
||
m_tableNode = new QTableWidget(this);
|
||
vlayout->addWidget(m_tableNode);
|
||
|
||
hlayout = new QHBoxLayout;
|
||
QLabel* lableNet = new QLabel(tr("节点网卡"),this);
|
||
QPushButton* btnNetAdd = new QPushButton(tr("增加"),this);
|
||
QPushButton* btnNetDelete = new QPushButton(tr("删除"),this);
|
||
|
||
hlayout->addWidget(lableNet);
|
||
hlayout->addStretch();
|
||
hlayout->addWidget(btnNetAdd);
|
||
hlayout->addWidget(btnNetDelete);
|
||
vlayout->addLayout(hlayout);
|
||
|
||
m_tableNetworkCard = new QTableWidget(this);
|
||
vlayout->addWidget(m_tableNetworkCard);
|
||
|
||
QLabel* lable = new QLabel(tr("提示:"),this);
|
||
m_textNodeNote = new QTextEdit(this);
|
||
m_textNodeNote->setMaximumWidth(200);
|
||
|
||
hlayout = new QHBoxLayout;
|
||
hlayout->addLayout(vlayout);
|
||
|
||
vlayout = new QVBoxLayout;
|
||
vlayout->addWidget(lable);
|
||
vlayout->addWidget(m_textNodeNote);
|
||
hlayout->addLayout(vlayout);
|
||
|
||
hlayout->setMargin(0);
|
||
page->setLayout(hlayout);
|
||
|
||
initNodePageData();
|
||
setNodetableDelegate();
|
||
|
||
connect(btnAdd,&QPushButton::clicked,this,&SystemConfigWizard::onAddNodePageData);
|
||
connect(btnDelete,&QPushButton::clicked,this,&SystemConfigWizard::onDeleteNodePageData);
|
||
connect(btnNetAdd,&QPushButton::clicked,this,&SystemConfigWizard::onAddNetworkCardData);
|
||
connect(btnNetDelete,&QPushButton::clicked,this,&SystemConfigWizard::onDeleteNetworkCardData);
|
||
connect(m_tableNode,&QTableWidget::itemSelectionChanged,this,&SystemConfigWizard::onNodeTableClieck);
|
||
connect(m_tableNode,&QTableWidget::itemChanged,this,&SystemConfigWizard::onNicNumChange);
|
||
connect(m_tableNetworkCard,&QTableWidget::itemChanged,this,&SystemConfigWizard::onSaveNetworkCardData);
|
||
return page;
|
||
}
|
||
|
||
QWizardPage* SystemConfigWizard::createDbNodePage()
|
||
{
|
||
QWizardPage* page = new QWizardPage(this);
|
||
QVBoxLayout* vlayout = new QVBoxLayout;
|
||
QHBoxLayout* hlayout = new QHBoxLayout;
|
||
|
||
QLabel*lableTitle = new QLabel(tr("数据库节点配置"));
|
||
QPushButton* btnAdd = new QPushButton(tr("增加"),this);
|
||
QPushButton* btnDelete = new QPushButton(tr("删除"),this);
|
||
|
||
hlayout->addWidget(lableTitle);
|
||
hlayout->addStretch();
|
||
hlayout->addWidget(btnAdd);
|
||
hlayout->addWidget(btnDelete);
|
||
vlayout->addLayout(hlayout);
|
||
|
||
m_tableDbNode = new QTableWidget(this);
|
||
vlayout->addWidget(m_tableDbNode);
|
||
|
||
hlayout = new QHBoxLayout;
|
||
lableTitle = new QLabel(tr("虚拟节点配置"));
|
||
QPushButton* btnAddVirtual = new QPushButton(tr("增加"), this);
|
||
QPushButton* btnDeleteVirtual = new QPushButton(tr("删除"), this);
|
||
|
||
hlayout->addWidget(lableTitle);
|
||
hlayout->addStretch();
|
||
hlayout->addWidget(btnAddVirtual);
|
||
hlayout->addWidget(btnDeleteVirtual);
|
||
vlayout->addLayout(hlayout);
|
||
|
||
m_tableVirtualNode = new QTableWidget(this);
|
||
vlayout->addWidget(m_tableVirtualNode);
|
||
|
||
QLabel* lable = new QLabel(tr("提示:"),this);
|
||
m_textDbNodeNote = new QTextEdit(this);
|
||
m_textDbNodeNote->setMaximumWidth(200);
|
||
|
||
hlayout = new QHBoxLayout;
|
||
hlayout->addLayout(vlayout);
|
||
|
||
vlayout = new QVBoxLayout;
|
||
vlayout->addWidget(lable);
|
||
vlayout->addWidget(m_textDbNodeNote);
|
||
hlayout->addLayout(vlayout);
|
||
|
||
hlayout->setMargin(0);
|
||
page->setLayout(hlayout);
|
||
|
||
initDbNodePageData();
|
||
setDbNodetableDelegate();
|
||
|
||
connect(btnAdd,&QPushButton::clicked,this,&SystemConfigWizard::onAddDbNodeData);
|
||
connect(btnDelete,&QPushButton::clicked,this,&SystemConfigWizard::onDeleteDbNodeData);
|
||
connect(btnAddVirtual,&QPushButton::clicked,this,&SystemConfigWizard::onAddVirtualNodeData);
|
||
connect(btnDeleteVirtual,&QPushButton::clicked,this,&SystemConfigWizard::onDeleteVirtualNodeData);
|
||
return page;
|
||
}
|
||
|
||
void SystemConfigWizard::initLocationPageData()
|
||
{
|
||
m_textLocationNote->setPlainText(tr("1,根据实际工程情况添加位置信息。\n2,若工程已经搭建完成,删除原有的位置可导致原位置下的工程数据被删除。"));
|
||
m_textLocationNote->setReadOnly(true);
|
||
QStringList listLabels;
|
||
listLabels << tr("ID") << tr("标签名") << tr("描述");
|
||
m_tableLocation->setColumnCount(listLabels.size());
|
||
m_tableLocation->horizontalHeader()->setStretchLastSection(true);
|
||
m_tableLocation->setHorizontalHeaderLabels(listLabels);
|
||
m_tableLocation->setSelectionBehavior(QAbstractItemView::SelectRows);
|
||
m_tableLocation->setSelectionMode(QAbstractItemView::SingleSelection);
|
||
|
||
m_tableLocation->setItemDelegateForColumn(1,new ClineEditDelegate(8,"^([A-Za-z]|[0-9]|[#_\\-])+$",this));
|
||
|
||
KbdTableModel* m_modelLocation = KbdTableDataMgr::getInstance()->createModel(TBL_LOCATION);
|
||
if(m_modelLocation == NULL)
|
||
return;
|
||
m_modelLocation->load(true);
|
||
const ColMgrDataList& modelCols = m_modelLocation->getHeadCols();
|
||
m_tableLocation->setRowCount(m_modelLocation->rowCount());
|
||
for(int i = 0;i < m_modelLocation->rowCount();i++)
|
||
{
|
||
QStringList data = m_modelLocation->getRowData(i);
|
||
QTableWidgetItem* item = new QTableWidgetItem(data.at(modelCols.findCol(CN_LOCATION_ID)));
|
||
item->setFlags(Qt::ItemIsEnabled | Qt::ItemIsSelectable);
|
||
m_tableLocation->setItem(i,0,item);
|
||
|
||
item = new QTableWidgetItem(data.at(modelCols.findCol(CN_TAG_NAME)));
|
||
m_tableLocation->setItem(i,1,item);
|
||
|
||
item = new QTableWidgetItem(data.at(modelCols.findCol(CN_DESC)));
|
||
m_tableLocation->setItem(i,2,item);
|
||
}
|
||
}
|
||
|
||
void SystemConfigWizard::initNodePageData()
|
||
{
|
||
m_textNodeNote->setPlainText(tr("1,根据实际工程情况添加节点信息。\n"
|
||
"2,选中节点添加对应节点网卡信息。\n"
|
||
"3,数据库服务器的网卡名称必须是电脑实际的网卡名称。\n"
|
||
"4,网卡名称示例,windows: Realtek PCIe GBE Family Controller ,linux:eth1。"));
|
||
m_textNodeNote->setReadOnly(true);
|
||
|
||
QStringList listLabels;
|
||
listLabels << tr("节点名") << tr("主机描述") << tr("节点类型") << tr("部署类型")
|
||
<< tr("所属位置") << tr("是否使用") << tr("网卡个数");
|
||
m_tableNode->setColumnCount(listLabels.size());
|
||
m_tableNode->horizontalHeader()->setStretchLastSection(true);
|
||
m_tableNode->setHorizontalHeaderLabels(listLabels);
|
||
m_tableNode->setSelectionBehavior(QAbstractItemView::SelectRows);
|
||
m_tableNode->setSelectionMode(QAbstractItemView::SingleSelection);
|
||
|
||
// 注释主机描述的正则表达式限制
|
||
//m_tableNode->setItemDelegateForColumn(1,new ClineEditDelegate(64,"^([A-Za-z]|[0-9]|[#_\\-])+$",this));
|
||
m_tableNode->setItemDelegateForColumn(6,new ClineEditDelegate(2,"^([1-2])",this));
|
||
|
||
listLabels.clear();
|
||
listLabels << tr("网卡名称") << tr("IP地址") << tr("子网掩码")<< tr("网关");
|
||
m_tableNetworkCard->setColumnCount(listLabels.size());
|
||
m_tableNetworkCard->horizontalHeader()->setStretchLastSection(true);
|
||
m_tableNetworkCard->setHorizontalHeaderLabels(listLabels);
|
||
m_tableNetworkCard->setSelectionBehavior(QAbstractItemView::SelectRows);
|
||
m_tableNetworkCard->setSelectionMode(QAbstractItemView::SingleSelection);
|
||
|
||
QString sreReg = "^$|^(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9])\\.(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9]|0)\\.(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9]|0)\\.(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[0-9])$";
|
||
m_tableNetworkCard->setItemDelegateForColumn(1,new ClineEditDelegate(16,sreReg,this));
|
||
m_tableNetworkCard->setItemDelegateForColumn(2,new ClineEditDelegate(16,sreReg,this));
|
||
m_tableNetworkCard->setItemDelegateForColumn(3,new ClineEditDelegate(16,sreReg,this));
|
||
|
||
KbdTableModel* m_modelNode = KbdTableDataMgr::getInstance()->createModel("sys_model_node_info.xml");
|
||
if(m_modelNode == NULL)
|
||
return;
|
||
m_modelNode->load(true);
|
||
const ColMgrDataList& modelCols = m_modelNode->getHeadCols();
|
||
|
||
QList<QStringList> listDatas;
|
||
for (int i = 0; i < m_modelNode->rowCount(); i++)
|
||
{
|
||
QStringList data = m_modelNode->getRowData(i);
|
||
if (data.at(modelCols.findCol("NODE_TYPE")) == tr("4:虚拟节点"))
|
||
{
|
||
m_virtualNodeTag = data.at(modelCols.findCol("NODE_NAME"));
|
||
continue;
|
||
}
|
||
|
||
listDatas << data;
|
||
}
|
||
|
||
m_tableNode->setRowCount(listDatas.size());
|
||
for(int i = 0;i < listDatas.size();i++)
|
||
{
|
||
QStringList data = listDatas.at(i);
|
||
QTableWidgetItem* item = new QTableWidgetItem(data.at(modelCols.findCol("NODE_NAME")));
|
||
m_tableNode->setItem(i,0,item);
|
||
|
||
item = new QTableWidgetItem(data.at(modelCols.findCol(CN_DESC)));
|
||
m_tableNode->setItem(i,1,item);
|
||
|
||
item = new QTableWidgetItem(data.at(modelCols.findCol("NODE_TYPE")));
|
||
m_tableNode->setItem(i,2,item);
|
||
|
||
item = new QTableWidgetItem(getDeploytype(data.at(modelCols.findCol("NODE_NAME"))));
|
||
m_tableNode->setItem(i,3,item);
|
||
|
||
item = new QTableWidgetItem(data.at(modelCols.findCol("LOCATION_ID")));
|
||
m_tableNode->setItem(i,4,item);
|
||
|
||
item = new QTableWidgetItem(data.at(modelCols.findCol("IS_USED")));
|
||
m_tableNode->setItem(i,5,item);
|
||
|
||
QString nic_num = data.at(modelCols.findCol("NIC_NUM"));
|
||
item = new QTableWidgetItem(nic_num);
|
||
m_tableNode->setItem(i,6,item);
|
||
|
||
QStringList nicInfo;
|
||
QList<QStringList> listNicInfo;
|
||
nicInfo << data.at(modelCols.findCol("NIC1_NAME"));
|
||
nicInfo << data.at(modelCols.findCol("NIC1_ADDRESS"));
|
||
nicInfo << data.at(modelCols.findCol("NIC1_NETMASK"));
|
||
nicInfo << data.at(modelCols.findCol("NIC1_GATEWAY"));
|
||
listNicInfo << nicInfo;
|
||
|
||
if(nic_num == "2")
|
||
{
|
||
nicInfo.clear();
|
||
nicInfo << data.at(modelCols.findCol("NIC2_NAME"));
|
||
nicInfo << data.at(modelCols.findCol("NIC2_ADDRESS"));
|
||
nicInfo << data.at(modelCols.findCol("NIC2_NETMASK"));
|
||
nicInfo << data.at(modelCols.findCol("NIC2_GATEWAY"));
|
||
listNicInfo << nicInfo;
|
||
}
|
||
m_mapNetworkCard.insert(m_tableNode->item(i,0),listNicInfo);
|
||
}
|
||
}
|
||
|
||
void SystemConfigWizard::initDbNodePageData()
|
||
{
|
||
m_textDbNodeNote->setPlainText(tr("1,根据实际情况配置相应数据库节点的连接信息。\n"
|
||
"2,一个数据库服务器节点时,不配置虚拟节点信息\n"
|
||
"3,存在两个及以上数据库服务器节点时,必须配置虚拟节点信息,用于数据库同步。"));
|
||
m_textDbNodeNote->setReadOnly(true);
|
||
|
||
QStringList listLabels;
|
||
listLabels << tr("数据库标识") << tr("节点名称") << tr("数据库类型") << tr("数据库名")
|
||
<< tr("数据库用户名") << tr("数据库密码") << tr("数据库端口");
|
||
m_tableDbNode->setColumnCount(listLabels.size());
|
||
m_tableDbNode->horizontalHeader()->setStretchLastSection(true);
|
||
m_tableDbNode->setHorizontalHeaderLabels(listLabels);
|
||
m_tableDbNode->setSelectionBehavior(QAbstractItemView::SelectRows);
|
||
m_tableDbNode->setSelectionMode(QAbstractItemView::SingleSelection);
|
||
|
||
KbdTableModel* m_modelDbNode = KbdTableDataMgr::getInstance()->createModel("sys_model_dbconfig_node.xml");
|
||
if(m_modelDbNode == NULL)
|
||
return;
|
||
m_modelDbNode->load(true);
|
||
const ColMgrDataList& modelCols = m_modelDbNode->getHeadCols();
|
||
|
||
QList<QStringList> listDatas;
|
||
for (int i = 0; i < m_modelDbNode->rowCount(); i++)
|
||
{
|
||
QStringList data = m_modelDbNode->getRowData(i);
|
||
if(data.at(modelCols.findCol("NODE_NAME")).split(":").first() == m_virtualNodeTag)
|
||
continue;
|
||
listDatas << data;
|
||
}
|
||
|
||
m_tableDbNode->setRowCount(listDatas.size());
|
||
for(int i = 0;i < listDatas.size();i++)
|
||
{
|
||
QStringList data = listDatas.at(i);
|
||
QTableWidgetItem* item = new QTableWidgetItem(data.at(modelCols.findCol("DB_NAME")));
|
||
m_tableDbNode->setItem(i,0,item);
|
||
|
||
item = new QTableWidgetItem(data.at(modelCols.findCol("NODE_NAME")));
|
||
m_tableDbNode->setItem(i,1,item);
|
||
|
||
item = new QTableWidgetItem(data.at(modelCols.findCol("DB_TYPE")));
|
||
m_tableDbNode->setItem(i,2,item);
|
||
|
||
item = new QTableWidgetItem(data.at(modelCols.findCol("DB_SERVICE_NAME")));
|
||
m_tableDbNode->setItem(i,3,item);
|
||
|
||
item = new QTableWidgetItem(data.at(modelCols.findCol("USER_NAME")));
|
||
m_tableDbNode->setItem(i,4,item);
|
||
|
||
item = new QTableWidgetItem(data.at(modelCols.findCol("USER_PASSWORD")));
|
||
m_tableDbNode->setItem(i,5,item);
|
||
|
||
item = new QTableWidgetItem(data.at(modelCols.findCol("DB_PORT")));
|
||
m_tableDbNode->setItem(i,6,item);
|
||
}
|
||
|
||
listLabels.clear();
|
||
listLabels << tr("虚拟节点IP") << tr("子网掩码") << tr("网关");
|
||
m_tableVirtualNode->setColumnCount(listLabels.size());
|
||
m_tableVirtualNode->horizontalHeader()->setStretchLastSection(true);
|
||
m_tableVirtualNode->setHorizontalHeaderLabels(listLabels);
|
||
m_tableVirtualNode->setSelectionBehavior(QAbstractItemView::SelectRows);
|
||
m_tableVirtualNode->setSelectionMode(QAbstractItemView::SingleSelection);
|
||
|
||
QString sreReg = "^$|^(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9])\\.(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9]|0)\\.(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9]|0)\\.(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[0-9])$";
|
||
m_tableVirtualNode->setItemDelegateForColumn(0,new ClineEditDelegate(16,sreReg,this));
|
||
m_tableVirtualNode->setItemDelegateForColumn(1,new ClineEditDelegate(16,sreReg,this));
|
||
m_tableVirtualNode->setItemDelegateForColumn(2,new ClineEditDelegate(16,sreReg,this));
|
||
|
||
KbdTableModel* model = KbdTableDataMgr::getInstance()->createModel("sys_model_node_info.xml");
|
||
if (model == NULL)
|
||
return;
|
||
const ColMgrDataList& modelNewcols = model->getHeadCols();
|
||
for (int i = 0; i < model->rowCount(); i++)
|
||
{
|
||
QStringList data = model->getRowData(i);
|
||
if (data.at(modelNewcols.findCol("NODE_TYPE")) == "4:虚拟节点")
|
||
{
|
||
QString nic_num = data.at(modelNewcols.findCol("NIC_NUM"));
|
||
m_tableVirtualNode->setRowCount(1);
|
||
QTableWidgetItem* item = new QTableWidgetItem(data.at(modelNewcols.findCol("NIC1_ADDRESS")));
|
||
m_tableVirtualNode->setItem(0,0,item);
|
||
|
||
item = new QTableWidgetItem(data.at(modelNewcols.findCol("NIC1_NETMASK")));
|
||
m_tableVirtualNode->setItem(0,1,item);
|
||
|
||
item = new QTableWidgetItem(data.at(modelNewcols.findCol("NIC1_GATEWAY")));
|
||
m_tableVirtualNode->setItem(0,2,item);
|
||
|
||
if(nic_num == "2")
|
||
{
|
||
m_tableVirtualNode->setRowCount(2);
|
||
QTableWidgetItem* item = new QTableWidgetItem(data.at(modelNewcols.findCol("NIC2_ADDRESS")));
|
||
m_tableVirtualNode->setItem(1,0,item);
|
||
|
||
item = new QTableWidgetItem(data.at(modelNewcols.findCol("NIC2_NETMASK")));
|
||
m_tableVirtualNode->setItem(1,1,item);
|
||
|
||
item = new QTableWidgetItem(data.at(modelNewcols.findCol("NIC2_GATEWAY")));
|
||
m_tableVirtualNode->setItem(1,2,item);
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
void SystemConfigWizard::setNodetableDelegate()
|
||
{
|
||
QList<QStringList> listData;
|
||
listData << (QStringList() << tr("1:工作站") << "1");
|
||
listData << (QStringList() << tr("2:应用服务器") << "2");
|
||
listData << (QStringList() << tr("3:数据库服务器") << "3");
|
||
m_tableNode->setItemDelegateForColumn(2,new CboxDelegate(listData,this));
|
||
|
||
listData.clear();
|
||
listData << (QStringList() << tr("0:主服务器") << "0");
|
||
listData << (QStringList() << tr("1:备服务器") << "1");
|
||
m_tableNode->setItemDelegateForColumn(3,new CboxDelegate(listData,this));
|
||
|
||
listData.clear();
|
||
for(int i = 0;i < m_tableLocation->rowCount();i++)
|
||
{
|
||
QString locationID = m_tableLocation->item(i,0)->text();
|
||
QString des = m_tableLocation->item(i,2)->text();
|
||
|
||
listData << (QStringList() << locationID + ":" + des << locationID);
|
||
}
|
||
m_tableNode->setItemDelegateForColumn(4,new CboxDelegate(listData,this));
|
||
|
||
listData.clear();
|
||
listData << (QStringList() << tr("1:使用") << "1");
|
||
listData << (QStringList() << tr("0:不使用") << "0");
|
||
m_tableNode->setItemDelegateForColumn(5,new CboxDelegate(listData,this));
|
||
}
|
||
|
||
void SystemConfigWizard::setDbNodetableDelegate()
|
||
{
|
||
m_listNodeNoUse.clear();
|
||
QList<QStringList> listData;
|
||
listData << (QStringList() << tr("0:主数据库") << "0");
|
||
listData << (QStringList() << tr("1:备数据库") << "1");
|
||
m_tableDbNode->setItemDelegateForColumn(0,new CboxDelegate(listData,this));
|
||
|
||
listData.clear();
|
||
for(int i = 0;i < m_tableNode->rowCount();i++)
|
||
{
|
||
QString bUse = m_tableNode->item(i,5)->text().split(":").first();
|
||
QString nodeTag = m_tableNode->item(i,0)->text();
|
||
QString des = m_tableNode->item(i,1)->text();
|
||
if(bUse == "0")
|
||
{
|
||
m_listNodeNoUse << nodeTag + ":" + des;
|
||
continue;
|
||
}
|
||
|
||
listData << (QStringList() << nodeTag + ":" + des << nodeTag);
|
||
}
|
||
m_tableDbNode->setItemDelegateForColumn(1,new CboxDelegate(listData,this));
|
||
|
||
listData.clear();
|
||
listData << (QStringList() << tr("0:无效") << "0");
|
||
listData << (QStringList() << tr("1:Oracle") << "1");
|
||
listData << (QStringList() << tr("2:MySQL") << "2");
|
||
listData << (QStringList() << tr("3:openGauss") << "3");
|
||
listData << (QStringList() << tr("4:Kingbase") << "4");
|
||
m_tableDbNode->setItemDelegateForColumn(2,new CboxDelegate(listData,this));
|
||
}
|
||
|
||
void SystemConfigWizard::useLocalNic()
|
||
{
|
||
QList<QNetworkInterface> listInterface = QNetworkInterface::allInterfaces();
|
||
for(int i = 0; i < listInterface.size();i++)
|
||
{
|
||
if(!listInterface.at(i).isValid())
|
||
continue;
|
||
if(!listInterface.at(i).flags().testFlag(QNetworkInterface::IsRunning) || listInterface.at(i).flags().testFlag(QNetworkInterface::IsLoopBack))
|
||
continue;
|
||
if(listInterface.at(i).humanReadableName().contains("VMware"))
|
||
continue;
|
||
}
|
||
}
|
||
|
||
void SystemConfigWizard::UpdateNoUseNode()
|
||
{
|
||
for(int i = 0;i < m_tableDbNode->rowCount();i++)
|
||
{
|
||
QString node = m_tableDbNode->item(i,1)->text();
|
||
if(m_listNodeNoUse.contains(node))
|
||
m_tableDbNode->removeRow(i);
|
||
}
|
||
}
|
||
|
||
QString SystemConfigWizard::getDeploytype(QString nodeName)
|
||
{
|
||
QString deploytype;
|
||
KbdDbDesign ds;
|
||
QString sql = "select NODE1 from sys_model_deploy_info where APP_ID = '2';";
|
||
|
||
QStringList result;
|
||
ds.getOneColumnResult(sql,result);
|
||
|
||
if(result.isEmpty())
|
||
return QString(tr("0:主服务器"));
|
||
|
||
if(result.at(0) == nodeName)
|
||
deploytype = tr("0:主服务器");
|
||
else
|
||
deploytype = tr("1:备服务器");
|
||
return deploytype;
|
||
}
|
||
|
||
void SystemConfigWizard::onAddLocationPageData()
|
||
{
|
||
int nCount = m_tableLocation->rowCount();
|
||
m_tableLocation->setRowCount(nCount + 1);
|
||
|
||
QTableWidgetItem* item = new QTableWidgetItem(QString::number(nCount + 1));
|
||
item->setFlags(Qt::ItemIsEnabled | Qt::ItemIsSelectable);
|
||
m_tableLocation->setItem(nCount,0,item);
|
||
|
||
item = new QTableWidgetItem;
|
||
m_tableLocation->setItem(nCount,1,item);
|
||
|
||
item = new QTableWidgetItem;
|
||
m_tableLocation->setItem(nCount,2,item);
|
||
}
|
||
|
||
void SystemConfigWizard::onDeleteLocationPageData()
|
||
{
|
||
m_tableLocation->removeRow(m_tableLocation->currentRow());
|
||
for(int i = 0;i < m_tableLocation->rowCount();i++)
|
||
m_tableLocation->item(i,0)->setText(QString::number(i+1));
|
||
}
|
||
|
||
void SystemConfigWizard::onAddNodePageData()
|
||
{
|
||
int nCount = m_tableNode->rowCount();
|
||
m_tableNode->setRowCount(nCount + 1);
|
||
|
||
QTableWidgetItem* item = new QTableWidgetItem(QHostInfo::localHostName());
|
||
m_tableNode->setItem(nCount,0,item);
|
||
|
||
item = new QTableWidgetItem;
|
||
m_tableNode->setItem(nCount,1,item);
|
||
|
||
item = new QTableWidgetItem(tr("2:应用服务器"));
|
||
m_tableNode->setItem(nCount,2,item);
|
||
|
||
item = new QTableWidgetItem;
|
||
if(nCount == 0)
|
||
item->setText(tr("0:主服务器"));
|
||
else
|
||
item->setText(tr("1:备服务器"));
|
||
m_tableNode->setItem(nCount,3,item);
|
||
|
||
item = new QTableWidgetItem;
|
||
m_tableNode->setItem(nCount,4,item);
|
||
|
||
item = new QTableWidgetItem(tr("1:使用"));
|
||
m_tableNode->setItem(nCount,5,item);
|
||
|
||
item = new QTableWidgetItem("1");
|
||
m_tableNode->setItem(nCount,6,item);
|
||
|
||
QList<QStringList> listNic;
|
||
m_mapNetworkCard.insert(m_tableNode->item(nCount,0),listNic);
|
||
}
|
||
|
||
void SystemConfigWizard::onDeleteNodePageData()
|
||
{
|
||
int nRow = m_tableNode->currentRow();
|
||
m_mapNetworkCard.erase(m_mapNetworkCard.find(m_tableNode->item(nRow, 0)));
|
||
m_tableNode->removeRow(nRow);
|
||
}
|
||
|
||
void SystemConfigWizard::onAddNetworkCardData()
|
||
{
|
||
int nCount = m_tableNetworkCard->rowCount();
|
||
if(nCount > 1)
|
||
{
|
||
onMsg(tr("最多支持两个网卡地址!"));
|
||
return;
|
||
}
|
||
|
||
int nNodeRow = m_tableNode->currentRow();
|
||
if ( nNodeRow < 0 )
|
||
return;
|
||
|
||
int nNicNum = m_tableNode->item(nNodeRow,6)->text().toInt();
|
||
|
||
if(nNicNum > 2 || nNicNum < 1)
|
||
{
|
||
onMsg(tr("网卡个数配置错误"));
|
||
return;
|
||
}
|
||
|
||
if(nNicNum == nCount)
|
||
{
|
||
onMsg(tr("当前已达到网卡个数上限"));
|
||
return;
|
||
}
|
||
|
||
auto iter = m_mapNetworkCard.find(m_tableNode->item(nNodeRow,0));
|
||
QStringList nic;
|
||
nic << "NIC" << "127.0.0.1" << "255.255.255.0" << "127.0.0.1";
|
||
(*iter) << nic;
|
||
|
||
m_tableNetworkCard->setRowCount(nCount + 1);
|
||
|
||
QTableWidgetItem* item = new QTableWidgetItem("NIC");
|
||
m_tableNetworkCard->setItem(nCount,0,item);
|
||
|
||
item = new QTableWidgetItem("127.0.0.1");
|
||
m_tableNetworkCard->setItem(nCount,1,item);
|
||
|
||
item = new QTableWidgetItem("255.255.255.0");
|
||
m_tableNetworkCard->setItem(nCount,2,item);
|
||
|
||
item = new QTableWidgetItem("127.0.0.1");
|
||
m_tableNetworkCard->setItem(nCount,3,item);
|
||
}
|
||
|
||
void SystemConfigWizard::onDeleteNetworkCardData()
|
||
{
|
||
int nRow = m_tableNetworkCard->currentRow();
|
||
if(nRow == -1)
|
||
nRow = m_tableNetworkCard->rowCount() - 1;
|
||
|
||
m_tableNetworkCard->removeRow(nRow);
|
||
|
||
int nNodeRow = m_tableNode->currentRow();
|
||
auto iterCard = m_mapNetworkCard.find(m_tableNode->item(nNodeRow,0));
|
||
(*iterCard).removeAt(nRow);
|
||
}
|
||
|
||
void SystemConfigWizard::onAddDbNodeData()
|
||
{
|
||
int nCount = m_tableDbNode->rowCount();
|
||
m_tableDbNode->setRowCount(nCount + 1);
|
||
|
||
QTableWidgetItem* item = new QTableWidgetItem("2:MySQL");
|
||
m_tableDbNode->setItem(nCount,2,item);
|
||
|
||
item = new QTableWidgetItem(EMS_DEFAULT_DATABASE);
|
||
m_tableDbNode->setItem(nCount,3,item);
|
||
|
||
item = new QTableWidgetItem("root");
|
||
m_tableDbNode->setItem(nCount,4,item);
|
||
|
||
item = new QTableWidgetItem(EMS_DEFAULT_PASSWD);
|
||
m_tableDbNode->setItem(nCount,5,item);
|
||
|
||
item = new QTableWidgetItem("3306");
|
||
m_tableDbNode->setItem(nCount,6,item);
|
||
|
||
item = new QTableWidgetItem;
|
||
|
||
if(nCount == 0)
|
||
item->setText(tr("0:主数据库"));
|
||
else
|
||
item->setText(tr("1:备数据库"));
|
||
m_tableDbNode->setItem(nCount,0,item);
|
||
|
||
item = new QTableWidgetItem;
|
||
m_tableDbNode->setItem(nCount,1,item);
|
||
}
|
||
|
||
void SystemConfigWizard::onAddVirtualNodeData()
|
||
{
|
||
int nCount = m_tableVirtualNode->rowCount();
|
||
if (nCount > 1)
|
||
{
|
||
onMsg(tr("最多支持两个网卡地址!"));
|
||
return;
|
||
}
|
||
m_tableVirtualNode->setRowCount(nCount + 1);
|
||
QTableWidgetItem* item = new QTableWidgetItem("127.0.0.1");
|
||
m_tableVirtualNode->setItem(nCount, 0, item);
|
||
|
||
item = new QTableWidgetItem("255.255.255.0");
|
||
m_tableVirtualNode->setItem(nCount, 1, item);
|
||
|
||
item = new QTableWidgetItem("127.0.0.1");
|
||
m_tableVirtualNode->setItem(nCount, 2, item);
|
||
|
||
}
|
||
void SystemConfigWizard::onDeleteVirtualNodeData()
|
||
{
|
||
m_tableVirtualNode->removeRow(m_tableVirtualNode->currentRow());
|
||
}
|
||
|
||
void SystemConfigWizard::onDeleteDbNodeData()
|
||
{
|
||
m_tableDbNode->removeRow(m_tableDbNode->currentRow());
|
||
}
|
||
|
||
void SystemConfigWizard::onNodeTableClieck()
|
||
{
|
||
m_tableNetworkCard->reset();
|
||
int nRow = m_tableNode->currentRow();
|
||
auto iterNic = m_mapNetworkCard.find(m_tableNode->item(nRow,0));
|
||
|
||
if (iterNic == m_mapNetworkCard.end())
|
||
return;
|
||
|
||
m_tableNetworkCard->setRowCount(iterNic->size());
|
||
for(int i = 0;i < iterNic->size();i++)
|
||
{
|
||
QTableWidgetItem* item = new QTableWidgetItem(iterNic->at(i).at(0));
|
||
m_tableNetworkCard->setItem(i,0,item);
|
||
|
||
item = new QTableWidgetItem(iterNic->at(i).at(1));
|
||
m_tableNetworkCard->setItem(i,1,item);
|
||
|
||
item = new QTableWidgetItem(iterNic->at(i).at(2));
|
||
m_tableNetworkCard->setItem(i,2,item);
|
||
|
||
item = new QTableWidgetItem(iterNic->at(i).at(3));
|
||
m_tableNetworkCard->setItem(i,3,item);
|
||
}
|
||
}
|
||
|
||
void SystemConfigWizard::onSaveNetworkCardData(QTableWidgetItem *item)
|
||
{
|
||
int nNodeRow = m_tableNode->currentRow();
|
||
int nNicRow = item->row();
|
||
int nNicCol = item->column();
|
||
|
||
auto iter = m_mapNetworkCard.find(m_tableNode->item(nNodeRow,0));
|
||
(*iter)[nNicRow].replace(nNicCol,item->text());
|
||
}
|
||
|
||
void SystemConfigWizard::onNicNumChange(QTableWidgetItem *item)
|
||
{
|
||
int nNicCol = item->column();
|
||
if(nNicCol != 6)
|
||
return;
|
||
int nNicNum = item->text().toInt();
|
||
|
||
if(nNicNum > 2 || nNicNum < 1)
|
||
{
|
||
onMsg(tr("网卡个数配置错误"));
|
||
item->setText("1");
|
||
return;
|
||
}
|
||
|
||
if(nNicNum == 2 && m_tableNetworkCard->rowCount() == 1)
|
||
onAddNetworkCardData();
|
||
if(nNicNum == 1 && m_tableNetworkCard->rowCount() == 2)
|
||
onDeleteNetworkCardData();
|
||
}
|
||
|
||
bool SystemConfigWizard::checkLocationInfo()
|
||
{
|
||
if (m_tableLocation->rowCount() == 0)
|
||
{
|
||
onMsg(tr("未配置位置信息"));
|
||
return false;
|
||
}
|
||
for(int i = 0;i < m_tableLocation->rowCount();i++)
|
||
{
|
||
if(m_tableLocation->item(i,1)->text().isEmpty())
|
||
{
|
||
onMsg(tr("位置标签名不能为空"));
|
||
return false;
|
||
}
|
||
|
||
if(m_tableLocation->item(i,2)->text().isEmpty())
|
||
{
|
||
onMsg(tr("位置描述不能为空"));
|
||
return false;
|
||
}
|
||
}
|
||
return true;
|
||
}
|
||
|
||
bool SystemConfigWizard::checkNodeInfo()
|
||
{
|
||
if (m_tableNode->rowCount() == 0)
|
||
{
|
||
onMsg(tr("未配置节点信息"));
|
||
return false;
|
||
}
|
||
for(int i = 0;i < m_tableNode->rowCount();i++)
|
||
{
|
||
QString nodeName = m_tableNode->item(i,0)->text();
|
||
if(nodeName.isEmpty())
|
||
{
|
||
onMsg(tr("节点名不能为空"));
|
||
return false;
|
||
}
|
||
|
||
if(m_tableNode->item(i,1)->text().isEmpty())
|
||
{
|
||
onMsg(tr("主机描述描述不能为空"));
|
||
return false;
|
||
}
|
||
|
||
if(m_tableNode->item(i,4)->text().isEmpty())
|
||
{
|
||
onMsg(tr("所属位置不能为空"));
|
||
return false;
|
||
}
|
||
|
||
QString bUse = m_tableNode->item(i,5)->text().split(":").first();
|
||
|
||
auto iter = m_mapNetworkCard.find(m_tableNode->item(i,0));
|
||
if (iter != m_mapNetworkCard.end())
|
||
{
|
||
if (iter->isEmpty())
|
||
{
|
||
onMsg(tr("存在未配置网卡信息的节点"));
|
||
return false;
|
||
}
|
||
|
||
for(int j = 0;j < iter->size();j++)
|
||
{
|
||
if(bUse == "0")
|
||
continue;
|
||
if(iter->at(j).at(1).startsWith("127."))
|
||
{
|
||
if(nodeName != QHostInfo::localHostName())
|
||
{
|
||
onMsg(QString(tr("节点%1,非本机节点,不能配置本地回环地址")).arg(nodeName));
|
||
return false;
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
int nNum = 0;
|
||
for(int i = 0;i < m_tableNode->rowCount();i++)
|
||
{
|
||
if(m_tableNode->item(i,3)->text().split(":").first() == "0")
|
||
nNum++;
|
||
}
|
||
if(nNum > 1)
|
||
{
|
||
onMsg(tr("最多一个主服务器节点"));
|
||
return false;
|
||
}
|
||
return true;
|
||
}
|
||
|
||
bool SystemConfigWizard::checkDbNodeInfo()
|
||
{
|
||
if (m_tableDbNode->rowCount() == 0)
|
||
{
|
||
onMsg(tr("未配置数据库节点信息"));
|
||
return false;
|
||
}
|
||
|
||
if(m_tableDbNode->rowCount() > 1)
|
||
{
|
||
if(m_tableVirtualNode->rowCount() < 1)
|
||
{
|
||
onMsg(tr("当前存在多个数据库节点,请添加虚拟节点配置信息!"));
|
||
return false;
|
||
}
|
||
}
|
||
|
||
QSet<QString> setDbType;
|
||
int nNum = 0;
|
||
for(int i = 0;i < m_tableDbNode->rowCount();i++)
|
||
{
|
||
if(m_tableDbNode->item(i,1)->text().isEmpty())
|
||
{
|
||
onMsg(tr("节点名称不能为空"));
|
||
return false;
|
||
}
|
||
|
||
if (m_tableDbNode->item(i, 0)->text() == "0:主数据库")
|
||
nNum++;
|
||
|
||
setDbType << m_tableDbNode->item(i, 2)->text();
|
||
}
|
||
|
||
if (nNum > 1)
|
||
{
|
||
onMsg(tr("只能有一个主数据库节点"));
|
||
return false;
|
||
}
|
||
|
||
if(setDbType.size() > 1)
|
||
{
|
||
onMsg(tr("多个数据库节点只能使用同一种数据库类型"));
|
||
return false;
|
||
}
|
||
return true;
|
||
}
|
||
|
||
void SystemConfigWizard::writeConfigToDb()
|
||
{
|
||
bool success = false;
|
||
QString retStr = KbdTableDataMgr::getInstance()->startTransaction();
|
||
if(!retStr.isEmpty())
|
||
{
|
||
onMsg(retStr);
|
||
return;
|
||
}
|
||
|
||
do
|
||
{
|
||
if(!createDomain())
|
||
break;
|
||
if(!createStation())
|
||
break;
|
||
if(!createNode())
|
||
break;
|
||
if(!createDeploy())
|
||
break;
|
||
if(!createDbNode())
|
||
break;
|
||
if(!createDbDomain())
|
||
break;
|
||
success = true;
|
||
}while(false);
|
||
|
||
if(KbdTableDataMgr::getInstance()->commit()?false:((success=false)||true))
|
||
onMsg(tr("此次修改失败,已启动回滚!"));
|
||
|
||
if(success)
|
||
{
|
||
onMsg(tr("配置成功"));
|
||
int nRtn = N_MessageBox::information(this,tr("消息"),tr("是否导出全部配置?"),N_MessageBox::Yes,N_MessageBox::No);
|
||
if(nRtn == N_MessageBox::Yes)
|
||
{
|
||
if(configExportAll())
|
||
onMsg(tr("导出成功"));
|
||
else
|
||
onMsg(tr("导出失败"));
|
||
}
|
||
}
|
||
}
|
||
|
||
bool SystemConfigWizard::configExportAll()
|
||
{
|
||
if(Common::isSysRun())
|
||
{
|
||
onMsg(tr("当前系统正在运行,配置未导出"));
|
||
return false;
|
||
}
|
||
|
||
QDir dir(Common::getSysModelPath());
|
||
if(!dir.exists())
|
||
{
|
||
dir.mkpath(Common::getSysModelPath());
|
||
}
|
||
|
||
bool bSuccess = false;
|
||
QString filePath;
|
||
do
|
||
{
|
||
KbdTableModel* model = KbdTableDataMgr::getInstance()->createModel("sys_model_app_info.xml");
|
||
filePath = Common::getSysModelPath() + "/" + model->getTableName() + ".xml";
|
||
if(!model->exportFile(filePath))
|
||
break;
|
||
|
||
model = KbdTableDataMgr::getInstance()->createModel("sys_model_dbconfig_domain.xml");
|
||
filePath = Common::getSysModelPath() + "/" + model->getTableName() + ".xml";
|
||
if(!model->exportFile(filePath))
|
||
break;
|
||
|
||
model = KbdTableDataMgr::getInstance()->createModel("sys_model_dbconfig_node.xml");
|
||
filePath = Common::getSysModelPath() + "/" + model->getTableName() + ".xml";
|
||
if(!model->exportFile(filePath))
|
||
break;
|
||
|
||
model = KbdTableDataMgr::getInstance()->createModel("sys_model_deploy_info.xml");
|
||
filePath = Common::getSysModelPath() + "/" + model->getTableName() + ".xml";
|
||
if(!model->exportFile(filePath))
|
||
break;
|
||
|
||
model = KbdTableDataMgr::getInstance()->createModel("sys_model_domain_info.xml");
|
||
filePath = Common::getSysModelPath() + "/" + model->getTableName() + ".xml";
|
||
if(!model->exportFile(filePath))
|
||
break;
|
||
|
||
model = KbdTableDataMgr::getInstance()->createModel("sys_model_location_info.xml");
|
||
filePath = Common::getSysModelPath() + "/" + model->getTableName() + ".xml";
|
||
if(!model->exportFile(filePath))
|
||
break;
|
||
|
||
model = KbdTableDataMgr::getInstance()->createModel("SYS_MODEL_MSG_RELAY.xml");
|
||
filePath = Common::getSysModelPath() + "/" + model->getTableName() + ".xml";
|
||
if(!model->exportFile(filePath))
|
||
break;
|
||
|
||
model = KbdTableDataMgr::getInstance()->createModel("sys_model_node_info.xml");
|
||
filePath = Common::getSysModelPath() + "/" + model->getTableName() + ".xml";
|
||
if(!model->exportFile(filePath))
|
||
break;
|
||
|
||
model = KbdTableDataMgr::getInstance()->createModel("sys_model_process_info.xml");
|
||
filePath = Common::getSysModelPath() + "/" + model->getTableName() + ".xml";
|
||
if(!model->exportFile(filePath))
|
||
break;
|
||
|
||
model = KbdTableDataMgr::getInstance()->createModel("sys_model_sub_system_info.xml");
|
||
filePath = Common::getSysModelPath() + "/" + model->getTableName() + ".xml";
|
||
if(!model->exportFile(filePath))
|
||
break;
|
||
|
||
bSuccess = true;
|
||
}while(false);
|
||
|
||
if(!bSuccess)
|
||
onMsg(QString(tr("文件:%1,导出失败!").arg(filePath)));
|
||
|
||
Common::reloadKeepalived();
|
||
|
||
return bSuccess;
|
||
}
|
||
|
||
void SystemConfigWizard::accept()
|
||
{
|
||
if (!checkDbNodeInfo())
|
||
return;
|
||
writeConfigToDb();
|
||
QWizard::accept();
|
||
}
|
||
|
||
bool SystemConfigWizard::createDomain()
|
||
{
|
||
//删除原位置,节点,应用部署信息,数据库节点,数据库部署信息;
|
||
QStringList listSql;
|
||
listSql << "DELETE FROM sys_model_domain_info;";
|
||
listSql << "DELETE FROM sys_model_location_info;";
|
||
listSql << "DELETE FROM sys_model_node_info;";
|
||
listSql << "DELETE FROM sys_model_deploy_info;";
|
||
listSql << "DELETE FROM sys_model_dbconfig_node;";
|
||
listSql << "DELETE FROM sys_model_dbconfig_domain;";
|
||
if(!KbdTableDataMgr::getInstance()->executeOnly(listSql))
|
||
{
|
||
onMsg(tr("清理配置表失败!"));
|
||
return false;
|
||
}
|
||
|
||
QString sql = "INSERT INTO sys_model_domain_info VALUES (1,'domain1',1,'监控中心域');";
|
||
if(!KbdTableDataMgr::getInstance()->executeOnly(sql))
|
||
{
|
||
onMsg(tr("创建域节点失败!"));
|
||
return false;
|
||
}
|
||
return true;
|
||
}
|
||
|
||
bool SystemConfigWizard::createStation()
|
||
{
|
||
//写入位置配置信息
|
||
QStringList listLocation;
|
||
for(int i = 0;i < m_tableLocation->rowCount();i++)
|
||
{
|
||
QStringList cfgInfo;
|
||
cfgInfo << m_tableLocation->item(i,0)->text();
|
||
cfgInfo << m_tableLocation->item(i,1)->text().replace("'", "''");
|
||
cfgInfo << m_tableLocation->item(i,2)->text().replace("'", "''");
|
||
cfgInfo << "1";
|
||
cfgInfo << m_tableLocation->item(i,0)->text();
|
||
listLocation << "('" + cfgInfo.join("','") + "')";
|
||
}
|
||
QString sql = "INSERT INTO sys_model_location_info (LOCATION_ID,TAG_NAME,DESCRIPTION,DOMAIN_ID,LOCATION_NO) VALUES %1;";
|
||
if(!KbdTableDataMgr::getInstance()->executeOnly(sql.arg(listLocation.join(","))))
|
||
{
|
||
onMsg(tr("创建位置信息失败!"));
|
||
return false;
|
||
}
|
||
return true;
|
||
}
|
||
|
||
bool SystemConfigWizard::createNode()
|
||
{
|
||
//写入节点配置信息
|
||
QStringList listSql;
|
||
for(int i = 0;i < m_tableNode->rowCount();i++)
|
||
{
|
||
QString nodeName = m_tableNode->item(i,0)->text();
|
||
QString des = m_tableNode->item(i,1)->text();
|
||
QString nodeType = m_tableNode->item(i,2)->text().split(":").first();
|
||
QString location = m_tableNode->item(i,4)->text().split(":").first();
|
||
QString isUsed = m_tableNode->item(i,5)->text().split(":").first();
|
||
QString nicNum = m_tableNode->item(i,6)->text();
|
||
|
||
auto iter = m_mapNetworkCard.find(m_tableNode->item(i,0));
|
||
QString nicName,nicIP,nicNetMask,nicGateway;
|
||
QString nic2Name,nic2IP,nic2NetMask,nic2Gateway;
|
||
|
||
if(iter == m_mapNetworkCard.end())
|
||
return false;
|
||
nicName = iter->at(0).at(0);
|
||
nicIP = iter->at(0).at(1);
|
||
nicNetMask = iter->at(0).at(2);
|
||
nicGateway = iter->at(0).at(3);
|
||
if(iter->size() == 2)
|
||
{
|
||
nic2Name = iter->at(1).at(0);
|
||
nic2IP = iter->at(1).at(1);
|
||
nic2NetMask = iter->at(1).at(2);
|
||
nic2Gateway = iter->at(1).at(3);
|
||
}
|
||
|
||
QString sql = "insert into sys_model_node_info "
|
||
"(NODE_NAME,LOCATION_ID,DESCRIPTION,NODE_TYPE,IS_USED,NIC_NUM,NIC1_NAME,NIC1_ADDRESS,NIC1_NETMASK,NIC1_GATEWAY,NIC2_NAME,NIC2_ADDRESS,NIC2_NETMASK,NIC2_GATEWAY)"
|
||
"values ('%1','%2','%3','%4','%5','%6','%7','%8','%9','%10','%11','%12','%13','%14');";
|
||
|
||
listSql << sql.arg(nodeName).arg(location).arg(des).arg(nodeType).arg(isUsed).arg(nicNum)
|
||
.arg(nicName).arg(nicIP).arg(nicNetMask).arg(nicGateway)
|
||
.arg(nic2Name).arg(nic2IP).arg(nic2NetMask).arg(nic2Gateway);
|
||
|
||
}
|
||
|
||
if (m_tableDbNode->rowCount() > 1)
|
||
{
|
||
QString nodeName = "virtual-node";
|
||
QString des = "虚拟节点";
|
||
QString nodeType = "4";
|
||
QString location = "1";
|
||
QString isUsed = "1";
|
||
QString nicNum = QString::number(m_tableVirtualNode->rowCount());
|
||
|
||
QString nicName, nicIP, nicNetMask, nicGateway;
|
||
QString nic2Name, nic2IP, nic2NetMask, nic2Gateway;
|
||
nicName = "NIC1";
|
||
nicIP = m_tableVirtualNode->item(0,0)->text();
|
||
nicNetMask = m_tableVirtualNode->item(0, 1)->text();
|
||
nicGateway = m_tableVirtualNode->item(0, 2)->text();
|
||
if (nicNum == "2")
|
||
{
|
||
nic2Name = "NIC2";
|
||
nic2IP = m_tableVirtualNode->item(1, 0)->text();
|
||
nic2NetMask = m_tableVirtualNode->item(1, 1)->text();
|
||
nic2Gateway = m_tableVirtualNode->item(1, 2)->text();
|
||
}
|
||
|
||
QString sql = "insert into sys_model_node_info "
|
||
"(NODE_NAME,LOCATION_ID,DESCRIPTION,NODE_TYPE,IS_USED,NIC_NUM,NIC1_NAME,NIC1_ADDRESS,NIC1_NETMASK,NIC1_GATEWAY,NIC2_NAME,NIC2_ADDRESS,NIC2_NETMASK,NIC2_GATEWAY)"
|
||
"values ('%1','%2','%3','%4','%5','%6','%7','%8','%9','%10','%11','%12','%13','%14');";
|
||
|
||
listSql << sql.arg(nodeName).arg(location).arg(des).arg(nodeType).arg(isUsed).arg(nicNum)
|
||
.arg(nicName).arg(nicIP).arg(nicNetMask).arg(nicGateway)
|
||
.arg(nic2Name).arg(nic2IP).arg(nic2NetMask).arg(nic2Gateway);
|
||
}
|
||
|
||
if(!KbdTableDataMgr::getInstance()->executeOnly(listSql))
|
||
{
|
||
onMsg(tr("创建节点信息失败!"));
|
||
return false;
|
||
}
|
||
return true;
|
||
}
|
||
|
||
bool SystemConfigWizard::createDeploy()
|
||
{
|
||
QStringList listNode;
|
||
for(int i = 0;i < m_tableNode->rowCount();i++)
|
||
{
|
||
QString nodeType = m_tableNode->item(i,2)->text().split(":").first();
|
||
QString deployType = m_tableNode->item(i,3)->text().split(":").first();
|
||
QString bUse = m_tableNode->item(i,5)->text().split(":").first();
|
||
if(bUse == "0")
|
||
continue;
|
||
if(nodeType == "2")
|
||
{
|
||
if(deployType == "0")
|
||
listNode.insert(0,m_tableNode->item(i,0)->text());
|
||
else
|
||
listNode << m_tableNode->item(i,0)->text();
|
||
}
|
||
}
|
||
if(listNode.empty())
|
||
{
|
||
onMsg(tr("未配置有效应用服务器节点!"));
|
||
return false;
|
||
}
|
||
|
||
QStringList listSql;
|
||
QString nodeNum = QString::number(listNode.size());
|
||
|
||
while(listNode.size() < 8)
|
||
listNode << QString();
|
||
|
||
bool success;
|
||
QString sql;
|
||
sql = "insert into sys_model_deploy_info (DOMAIN_ID,APP_ID,DESCRIPTION,NUM,NODE1,NODE2,NODE3,NODE4,NODE5,NODE6,NODE7,NODE8)" \
|
||
"values ('1','%1','%2','%3','%4','%5','%6','%7','%8','%9','%10','%11');";
|
||
|
||
listSql << sql.arg("2").arg("公共应用").arg(nodeNum).arg(listNode.at(0)).arg(listNode.at(1)).arg(listNode.at(2))
|
||
.arg(listNode.at(3)).arg(listNode.at(4)).arg(listNode.at(5)).arg(listNode.at(6)).arg(listNode.at(7));
|
||
listSql << sql.arg("3").arg("通用应用").arg(nodeNum).arg(listNode.at(0)).arg(listNode.at(1)).arg(listNode.at(2))
|
||
.arg(listNode.at(3)).arg(listNode.at(4)).arg(listNode.at(5)).arg(listNode.at(6)).arg(listNode.at(7));
|
||
listSql << sql.arg("4").arg("电力监控").arg(nodeNum).arg(listNode.at(0)).arg(listNode.at(1)).arg(listNode.at(2))
|
||
.arg(listNode.at(3)).arg(listNode.at(4)).arg(listNode.at(5)).arg(listNode.at(6)).arg(listNode.at(7));
|
||
success = KbdTableDataMgr::getInstance()->executeOnly(listSql);
|
||
if(!success)
|
||
{
|
||
onMsg(tr("创建域节点失败!"));
|
||
return false;
|
||
}
|
||
|
||
return true;
|
||
}
|
||
|
||
bool SystemConfigWizard::createDbNode()
|
||
{
|
||
QStringList listSql;
|
||
QString sql = "insert into sys_model_dbconfig_node (NODE_NAME,DB_TYPE,DB_SERVICE_NAME,USER_NAME,USER_PASSWORD,NIC_CUR_ID,DB_NAME,DB_HOST_PRIOR,IS_DB_SWITCH,IS_DIRECT_ACCESS,DB_PORT)" \
|
||
"values ('%1','%2','%3','%4','%5','1','%6','1','1','1','%7');";
|
||
for(int i = 0;i < m_tableDbNode->rowCount();i++)
|
||
{
|
||
QString dbName = m_tableDbNode->item(i,0)->text().split(":").first();
|
||
QString nodeName = m_tableDbNode->item(i,1)->text().split(":").first();
|
||
QString dbType = m_tableDbNode->item(i,2)->text().split(":").first();
|
||
QString dbServerName = m_tableDbNode->item(i,3)->text();
|
||
QString userName = m_tableDbNode->item(i,4)->text();
|
||
QString userPass = m_tableDbNode->item(i,5)->text();
|
||
QString dbPort = m_tableDbNode->item(i,6)->text();
|
||
|
||
listSql << sql.arg(nodeName).arg(dbType).arg(dbServerName).arg(userName).arg(userPass).arg(dbName).arg(dbPort);
|
||
|
||
if (dbName == "0" && m_tableDbNode->rowCount() > 1)
|
||
{
|
||
listSql << sql.arg("virtual-node").arg(dbType).arg(dbServerName).arg(userName).arg(userPass).arg("1").arg(dbPort);
|
||
}
|
||
}
|
||
|
||
if(!KbdTableDataMgr::getInstance()->executeOnly(listSql))
|
||
{
|
||
onMsg(tr("创建数据库节点失败!"));
|
||
return false;
|
||
}
|
||
return true;
|
||
}
|
||
|
||
bool SystemConfigWizard::createDbDomain()
|
||
{
|
||
QStringList listNode;
|
||
for(int i = 0;i < m_tableDbNode->rowCount();i++)
|
||
{
|
||
listNode << m_tableDbNode->item(i,1)->text().split(":").first();
|
||
}
|
||
|
||
QString sql;
|
||
if(listNode.size() == 1)
|
||
{
|
||
sql = QString("insert into sys_model_dbconfig_domain (DOMAIN_ID,FIRST_CONNECT,NUM1,LOCAL1)" \
|
||
"values ('1','%1','1','%1');").arg(listNode.at(0));
|
||
}
|
||
else
|
||
{
|
||
int nodeNum = listNode.size();
|
||
while(listNode.size() < 4)
|
||
listNode << QString();
|
||
|
||
sql = QString("insert into sys_model_dbconfig_domain (DOMAIN_ID,FIRST_CONNECT,NUM1,LOCAL1,LOCAL2,LOCAL3,LOCAL4)" \
|
||
"values ('1','%1','%2','%3','%4','%5','%6');").arg("virtual-node").arg(nodeNum).arg(listNode.at(0))
|
||
.arg(listNode.at(1)).arg(listNode.at(2)).arg(listNode.at(3));
|
||
|
||
}
|
||
|
||
if(!KbdTableDataMgr::getInstance()->executeOnly(sql))
|
||
{
|
||
onMsg(tr("创建数据库部署失败!"));
|
||
return false;
|
||
}
|
||
return true;
|
||
}
|
||
|
||
void SystemConfigWizard::onMsg(const QString &text)
|
||
{
|
||
N_MessageBox::information(this,tr("消息"),text);
|
||
}
|
||
|
||
CboxDelegate::CboxDelegate(QList<QStringList> listBoxData,QObject *parent) : QItemDelegate(parent)
|
||
{
|
||
m_cbBoxData = listBoxData;
|
||
}
|
||
CboxDelegate::~CboxDelegate()
|
||
{
|
||
|
||
}
|
||
|
||
QWidget* CboxDelegate::createEditor(QWidget *parent,const QStyleOptionViewItem &,const QModelIndex &) const
|
||
{
|
||
QComboBox* cbBox = new QComboBox(parent);
|
||
cbBox->setView(new QListView);
|
||
for(int i = 0;i < m_cbBoxData.size();i++)
|
||
cbBox->addItem(m_cbBoxData[i].first(),m_cbBoxData[i].last());
|
||
return cbBox;
|
||
}
|
||
|
||
void CboxDelegate::setEditorData(QWidget *editor, const QModelIndex &index) const
|
||
{
|
||
QString strValue = index.data().toString();
|
||
QComboBox *cb = static_cast<QComboBox *>(editor);
|
||
cb->setCurrentText(strValue);
|
||
}
|
||
|
||
void CboxDelegate::setModelData(QWidget *editor, QAbstractItemModel *model, const QModelIndex &index) const
|
||
{
|
||
QComboBox *cb = static_cast<QComboBox *>(editor);
|
||
model->setData(index,cb->currentText());
|
||
model->setData(index,cb->currentData(),Qt::UserRole);
|
||
}
|
||
|
||
|
||
ClineEditDelegate::ClineEditDelegate(int length,QString regExp,QObject *parent) : QItemDelegate(parent)
|
||
{
|
||
m_length = length;
|
||
m_regExp = regExp;
|
||
}
|
||
|
||
ClineEditDelegate::~ClineEditDelegate()
|
||
{
|
||
|
||
}
|
||
|
||
QWidget * ClineEditDelegate::createEditor(QWidget *parent,const QStyleOptionViewItem &,const QModelIndex &) const
|
||
{
|
||
QLineEdit* lintEdit = new QLineEdit(parent);
|
||
lintEdit->setMaxLength(m_length);
|
||
lintEdit->setValidator(new KbdRegExpValidator(m_regExp, lintEdit));
|
||
return lintEdit;
|
||
}
|
||
|
||
void ClineEditDelegate::setEditorData(QWidget *editor, const QModelIndex &index) const
|
||
{
|
||
QString strValue = index.data().toString();
|
||
QLineEdit *lintEdit = static_cast<QLineEdit *>(editor);
|
||
lintEdit->setText(strValue);
|
||
}
|
||
|
||
void ClineEditDelegate::setModelData(QWidget *editor, QAbstractItemModel *model, const QModelIndex &index) const
|
||
{
|
||
QLineEdit *lintEdit = static_cast<QLineEdit *>(editor);
|
||
model->setData(index,lintEdit->text());
|
||
}
|