2025-08-26 23:55:59 +08:00

1387 lines
46 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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