2025-03-12 10:03:16 +08:00
|
|
|
|
#include "MainWindow.h"
|
|
|
|
|
|
#include "ui_mainwindow.h"
|
|
|
|
|
|
#include "MonitorCommon.h"
|
|
|
|
|
|
#include "StartUpForm.h"
|
|
|
|
|
|
#include "SheetStyle.h"
|
|
|
|
|
|
#include "AppMngForm.h"
|
|
|
|
|
|
#include "ProcMngForm.h"
|
|
|
|
|
|
#include "DataMng.h"
|
|
|
|
|
|
#include "ButtonForm.h"
|
|
|
|
|
|
#include "BrushDataThread.h"
|
|
|
|
|
|
#include "StatusForm.h"
|
|
|
|
|
|
#include "VersionForm.h"
|
|
|
|
|
|
#include "SetupFunc.h"
|
2025-06-16 20:27:07 +08:00
|
|
|
|
#include <QPicture>
|
|
|
|
|
|
#include <QPixmap>
|
|
|
|
|
|
#include <QTabWidget>
|
2025-03-12 10:03:16 +08:00
|
|
|
|
#include <QLocalSocket>
|
|
|
|
|
|
#include <QLocalServer>
|
|
|
|
|
|
#include <QGridLayout>
|
|
|
|
|
|
#include <QVBoxLayout>
|
|
|
|
|
|
#include <QHBoxLayout>
|
|
|
|
|
|
#include <QTimer>
|
|
|
|
|
|
#include <QThread>
|
|
|
|
|
|
#include <QMessageBox>
|
|
|
|
|
|
#include <QTextCodec>
|
|
|
|
|
|
#include <QNetworkConfigurationManager>
|
|
|
|
|
|
#include <QCloseEvent>
|
|
|
|
|
|
#include <QMenu>
|
|
|
|
|
|
#include <QIcon>
|
|
|
|
|
|
#include <QFile>
|
|
|
|
|
|
#include <QDomComment>
|
|
|
|
|
|
#include <QString>
|
|
|
|
|
|
#include "pub_utility_api/FileUtil.h"
|
|
|
|
|
|
|
2025-06-16 20:27:07 +08:00
|
|
|
|
#include <QTabBar>
|
|
|
|
|
|
|
2025-03-12 10:03:16 +08:00
|
|
|
|
using namespace sys_startup;
|
2025-03-12 14:17:53 +08:00
|
|
|
|
using namespace iot_public;
|
|
|
|
|
|
using namespace iot_idl;
|
|
|
|
|
|
using namespace iot_sys;
|
2025-03-12 10:03:16 +08:00
|
|
|
|
|
|
|
|
|
|
static QString restartAppName = QString();
|
|
|
|
|
|
|
|
|
|
|
|
MainWindow::MainWindow(bool isZh, QWidget *parent) :
|
|
|
|
|
|
QMainWindow(parent),
|
|
|
|
|
|
ui(new Ui::MainWindow),
|
|
|
|
|
|
m_bRunning(false),
|
|
|
|
|
|
m_pLocalServer(Q_NULLPTR),
|
|
|
|
|
|
m_bIsZh(isZh),
|
|
|
|
|
|
m_pStartUp(Q_NULLPTR),
|
|
|
|
|
|
m_pAppMng(Q_NULLPTR),
|
|
|
|
|
|
m_pProcMng(Q_NULLPTR),
|
|
|
|
|
|
m_pStatusMng(Q_NULLPTR),
|
|
|
|
|
|
m_pVersionMng(Q_NULLPTR),
|
|
|
|
|
|
m_pSysTrayIcon(Q_NULLPTR),
|
|
|
|
|
|
m_updateTreeTimer(Q_NULLPTR),
|
2025-06-16 20:27:07 +08:00
|
|
|
|
m_startOrStopButtonTimer(Q_NULLPTR),
|
2025-03-12 10:03:16 +08:00
|
|
|
|
m_updateSysTimer(Q_NULLPTR),
|
|
|
|
|
|
m_startSysTimer(Q_NULLPTR),
|
|
|
|
|
|
m_stopSysTimer(Q_NULLPTR),
|
|
|
|
|
|
m_appRestartTimer(Q_NULLPTR),
|
|
|
|
|
|
m_dogAndLocalNetTimer(Q_NULLPTR),
|
|
|
|
|
|
m_hmiAutoStartTimer(Q_NULLPTR),
|
|
|
|
|
|
m_brushDataThread(Q_NULLPTR),
|
|
|
|
|
|
m_checkObj(Q_NULLPTR),
|
|
|
|
|
|
m_checkThread(Q_NULLPTR),
|
|
|
|
|
|
m_pProcess(Q_NULLPTR),
|
|
|
|
|
|
m_ptrDogAuthApi(Q_NULLPTR),
|
|
|
|
|
|
m_bLastDogStatus(false),
|
|
|
|
|
|
m_pDogMessBox(Q_NULLPTR),
|
|
|
|
|
|
m_pShowAction(nullptr),
|
|
|
|
|
|
m_pExitAction(nullptr)
|
|
|
|
|
|
{
|
|
|
|
|
|
ui->setupUi(this);
|
|
|
|
|
|
|
|
|
|
|
|
DataMng::instance();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
initLog();
|
|
|
|
|
|
|
|
|
|
|
|
initMsgBus();
|
|
|
|
|
|
|
|
|
|
|
|
// 初始化变量
|
|
|
|
|
|
initVariables();
|
|
|
|
|
|
|
|
|
|
|
|
// 初始化界面
|
|
|
|
|
|
initUi();
|
|
|
|
|
|
|
|
|
|
|
|
//初始化信号槽
|
|
|
|
|
|
initConn();
|
|
|
|
|
|
|
|
|
|
|
|
// 加载qss样式
|
|
|
|
|
|
initSheet();
|
|
|
|
|
|
|
|
|
|
|
|
//校验ip
|
|
|
|
|
|
verifyIp();
|
|
|
|
|
|
|
|
|
|
|
|
//启动线程和定时器
|
|
|
|
|
|
startThread();
|
|
|
|
|
|
|
|
|
|
|
|
initLocalConnection();
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
MainWindow::~MainWindow()
|
|
|
|
|
|
{
|
|
|
|
|
|
if(m_pDogMessBox)
|
|
|
|
|
|
{
|
|
|
|
|
|
delete m_pDogMessBox;
|
|
|
|
|
|
}
|
|
|
|
|
|
m_pDogMessBox = Q_NULLPTR;
|
|
|
|
|
|
|
|
|
|
|
|
if(m_pProcess)
|
|
|
|
|
|
{
|
|
|
|
|
|
delete m_pProcess;
|
|
|
|
|
|
}
|
|
|
|
|
|
m_pProcess = Q_NULLPTR;
|
|
|
|
|
|
|
|
|
|
|
|
if(m_startSysTimer)
|
|
|
|
|
|
{
|
|
|
|
|
|
m_startSysTimer->stop();
|
|
|
|
|
|
delete m_startSysTimer;
|
|
|
|
|
|
}
|
|
|
|
|
|
m_startSysTimer = Q_NULLPTR;
|
|
|
|
|
|
|
|
|
|
|
|
if(m_stopSysTimer)
|
|
|
|
|
|
{
|
|
|
|
|
|
m_stopSysTimer->stop();
|
|
|
|
|
|
delete m_stopSysTimer;
|
|
|
|
|
|
}
|
|
|
|
|
|
m_stopSysTimer = Q_NULLPTR;
|
|
|
|
|
|
|
|
|
|
|
|
if(m_dogAndLocalNetTimer)
|
|
|
|
|
|
{
|
|
|
|
|
|
m_dogAndLocalNetTimer->stop();
|
|
|
|
|
|
delete m_dogAndLocalNetTimer;
|
|
|
|
|
|
}
|
|
|
|
|
|
m_dogAndLocalNetTimer = Q_NULLPTR;
|
|
|
|
|
|
|
|
|
|
|
|
if(m_hmiAutoStartTimer)
|
|
|
|
|
|
{
|
|
|
|
|
|
m_hmiAutoStartTimer->stop();
|
|
|
|
|
|
delete m_hmiAutoStartTimer;
|
|
|
|
|
|
}
|
|
|
|
|
|
m_hmiAutoStartTimer = Q_NULLPTR;
|
|
|
|
|
|
|
|
|
|
|
|
if(m_appRestartTimer)
|
|
|
|
|
|
{
|
|
|
|
|
|
m_appRestartTimer->stop();
|
|
|
|
|
|
delete m_appRestartTimer;
|
|
|
|
|
|
}
|
|
|
|
|
|
m_appRestartTimer = Q_NULLPTR;
|
|
|
|
|
|
|
|
|
|
|
|
if(m_updateTreeTimer)
|
|
|
|
|
|
{
|
|
|
|
|
|
m_updateTreeTimer->stop();
|
|
|
|
|
|
delete m_updateTreeTimer;
|
|
|
|
|
|
}
|
|
|
|
|
|
m_updateTreeTimer = Q_NULLPTR;
|
2025-06-16 20:27:07 +08:00
|
|
|
|
if(m_startOrStopButtonTimer)
|
|
|
|
|
|
{
|
|
|
|
|
|
m_startOrStopButtonTimer->stop();
|
|
|
|
|
|
delete m_startOrStopButtonTimer;
|
|
|
|
|
|
}
|
|
|
|
|
|
m_startOrStopButtonTimer = Q_NULLPTR;
|
2025-03-12 10:03:16 +08:00
|
|
|
|
|
|
|
|
|
|
if(m_updateSysTimer)
|
|
|
|
|
|
{
|
|
|
|
|
|
m_updateSysTimer->stop();
|
|
|
|
|
|
delete m_updateSysTimer;
|
|
|
|
|
|
}
|
|
|
|
|
|
m_updateSysTimer = Q_NULLPTR;
|
|
|
|
|
|
|
|
|
|
|
|
if(m_checkThread)
|
|
|
|
|
|
{
|
|
|
|
|
|
m_checkThread->exit();
|
|
|
|
|
|
m_checkThread->wait();
|
|
|
|
|
|
delete m_checkThread;
|
|
|
|
|
|
}
|
|
|
|
|
|
m_checkThread = Q_NULLPTR;
|
|
|
|
|
|
|
|
|
|
|
|
if(m_brushDataThread)
|
|
|
|
|
|
{
|
|
|
|
|
|
m_brushDataThread->suspend();
|
|
|
|
|
|
m_brushDataThread->quit();
|
|
|
|
|
|
m_brushDataThread.reset();
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
if(m_pSysTrayIcon)
|
|
|
|
|
|
{
|
|
|
|
|
|
delete m_pSysTrayIcon;
|
|
|
|
|
|
}
|
|
|
|
|
|
m_pSysTrayIcon = Q_NULLPTR;
|
|
|
|
|
|
|
|
|
|
|
|
DataMng::instance()->destory();
|
|
|
|
|
|
|
2025-03-12 14:17:53 +08:00
|
|
|
|
if(! iot_net::releaseMsgBus())
|
2025-03-12 10:03:16 +08:00
|
|
|
|
{
|
|
|
|
|
|
LOGERROR("释放消息总线失败");
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2025-03-12 14:17:53 +08:00
|
|
|
|
iot_public::StopLogSystem();
|
2025-03-12 10:03:16 +08:00
|
|
|
|
|
|
|
|
|
|
if (m_pLocalServer)
|
|
|
|
|
|
{
|
|
|
|
|
|
delete m_pLocalServer;
|
|
|
|
|
|
m_pLocalServer = NULL;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
if(m_pStopProcess)
|
|
|
|
|
|
{
|
|
|
|
|
|
delete m_pStopProcess;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
delete ui;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
bool MainWindow::isRunning()
|
|
|
|
|
|
{
|
|
|
|
|
|
return m_bRunning;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void MainWindow::initLocalConnection()
|
|
|
|
|
|
{
|
|
|
|
|
|
// 已经用了SingleApplication,为什么还要增加这种方式:
|
|
|
|
|
|
// SingleApplication只能解决同一个文件执行多次的情况
|
|
|
|
|
|
// 如果是不同的文件,比如安装了两份软件在不同目录,要靠本函数的机制防止
|
|
|
|
|
|
m_bRunning = false;
|
|
|
|
|
|
QLocalSocket socket;
|
|
|
|
|
|
socket.connectToServer(STARTUP_SERVER_NAME);
|
|
|
|
|
|
if(socket.waitForConnected(500))
|
|
|
|
|
|
{
|
|
|
|
|
|
m_bRunning = true;
|
|
|
|
|
|
return;
|
|
|
|
|
|
}
|
|
|
|
|
|
newLocalServer();
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void MainWindow::newLocalServer()
|
|
|
|
|
|
{
|
|
|
|
|
|
m_pLocalServer = new QLocalServer(this);
|
|
|
|
|
|
if(!m_pLocalServer->listen(STARTUP_SERVER_NAME))
|
|
|
|
|
|
{
|
|
|
|
|
|
if(m_pLocalServer->serverError() == QAbstractSocket::AddressInUseError)
|
|
|
|
|
|
{
|
|
|
|
|
|
QLocalServer::removeServer(STARTUP_SERVER_NAME);
|
|
|
|
|
|
m_pLocalServer->listen(STARTUP_SERVER_NAME);
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void MainWindow::startWork()
|
|
|
|
|
|
{
|
|
|
|
|
|
m_brushDataThread->resume();
|
|
|
|
|
|
m_updateTreeTimer->start();
|
2025-06-16 20:27:07 +08:00
|
|
|
|
m_startOrStopButtonTimer->start();
|
2025-03-12 10:03:16 +08:00
|
|
|
|
m_updateSysTimer->start();
|
|
|
|
|
|
m_dogAndLocalNetTimer->start();
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void MainWindow::stopWork()
|
|
|
|
|
|
{
|
|
|
|
|
|
m_dogAndLocalNetTimer->stop();
|
|
|
|
|
|
m_updateSysTimer->stop();
|
|
|
|
|
|
m_updateTreeTimer->stop();
|
2025-06-16 20:27:07 +08:00
|
|
|
|
m_startOrStopButtonTimer->stop();
|
2025-03-12 10:03:16 +08:00
|
|
|
|
m_brushDataThread->suspend();
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void MainWindow::startAutoStartHmiTimer()
|
|
|
|
|
|
{
|
|
|
|
|
|
m_hmiAutoStartTimer->start();
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void MainWindow::initSheet()
|
|
|
|
|
|
{
|
|
|
|
|
|
SheetStyle sheetStyle;
|
|
|
|
|
|
QString sheet;
|
|
|
|
|
|
if(sheetStyle.getSheet(sheet))
|
|
|
|
|
|
{
|
|
|
|
|
|
setStyleSheet(sheet);
|
|
|
|
|
|
}else
|
|
|
|
|
|
{
|
|
|
|
|
|
LOGERROR("MainWindow::initSheet():获取样式文件失败!");
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void MainWindow::initVariables()
|
|
|
|
|
|
{
|
|
|
|
|
|
if(m_pStartUp == Q_NULLPTR)
|
|
|
|
|
|
{
|
|
|
|
|
|
m_pStartUp = new StartUpForm;
|
2025-06-16 20:27:07 +08:00
|
|
|
|
//ui->startUpFrame->setHidden(true);
|
2025-03-12 10:03:16 +08:00
|
|
|
|
}
|
|
|
|
|
|
if(m_pAppMng == Q_NULLPTR)
|
|
|
|
|
|
{
|
|
|
|
|
|
m_pAppMng = new AppMngForm;
|
|
|
|
|
|
}
|
|
|
|
|
|
if(m_pProcMng == Q_NULLPTR)
|
|
|
|
|
|
{
|
|
|
|
|
|
m_pProcMng = new ProcMngForm;
|
|
|
|
|
|
}
|
|
|
|
|
|
if(m_pStatusMng == Q_NULLPTR)
|
|
|
|
|
|
{
|
|
|
|
|
|
m_pStatusMng = new StatusForm;
|
|
|
|
|
|
}
|
|
|
|
|
|
if(m_pVersionMng == Q_NULLPTR)
|
|
|
|
|
|
{
|
|
|
|
|
|
m_pVersionMng = new VersionForm;
|
|
|
|
|
|
}
|
|
|
|
|
|
if(m_pSysTrayIcon == Q_NULLPTR)
|
|
|
|
|
|
{
|
|
|
|
|
|
m_pSysTrayIcon = new QSystemTrayIcon;
|
|
|
|
|
|
QString sysIcon = DataMng::instance()->getSysIcon();
|
|
|
|
|
|
if(sysIcon.isEmpty())
|
|
|
|
|
|
m_pSysTrayIcon->setIcon(QIcon(":/sys_startup.ico"));
|
|
|
|
|
|
else
|
|
|
|
|
|
m_pSysTrayIcon->setIcon(QIcon(sysIcon));
|
|
|
|
|
|
|
|
|
|
|
|
QMenu* pMenu = new QMenu(this);
|
|
|
|
|
|
m_pShowAction = pMenu->addAction(tr("显示"));
|
|
|
|
|
|
m_pExitAction = pMenu->addAction(tr("退出"));
|
|
|
|
|
|
connect(m_pShowAction, &QAction::triggered, [=](){
|
|
|
|
|
|
startWork();
|
|
|
|
|
|
this->show();
|
|
|
|
|
|
this->showNormal();
|
|
|
|
|
|
this->activateWindow();
|
|
|
|
|
|
});
|
|
|
|
|
|
connect(m_pExitAction, &QAction::triggered, [=](){
|
|
|
|
|
|
qApp->quit();
|
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
|
|
m_pSysTrayIcon->setContextMenu(pMenu);
|
|
|
|
|
|
m_pSysTrayIcon->show();
|
|
|
|
|
|
}
|
|
|
|
|
|
QString sysIcon = DataMng::instance()->getSysIcon();
|
|
|
|
|
|
if(sysIcon.isEmpty())
|
|
|
|
|
|
{
|
|
|
|
|
|
setWindowIcon(QIcon(":/sys_startup.ico"));
|
|
|
|
|
|
}else
|
|
|
|
|
|
{
|
|
|
|
|
|
setWindowIcon(QIcon(sysIcon));
|
|
|
|
|
|
}
|
|
|
|
|
|
m_brushDataThread = boost::make_shared<BrushDataThread>();
|
|
|
|
|
|
m_brushDataThread->initialize(DataMng::instance()->getDomainId(),1);
|
|
|
|
|
|
m_updateTreeTimer = new QTimer;
|
|
|
|
|
|
m_updateTreeTimer->setInterval(1000);
|
2025-06-16 20:27:07 +08:00
|
|
|
|
m_startOrStopButtonTimer = new QTimer;
|
|
|
|
|
|
m_startOrStopButtonTimer->setInterval(1000);
|
2025-03-12 10:03:16 +08:00
|
|
|
|
m_checkObj = new OnTimeCheckThread(nullptr);
|
|
|
|
|
|
m_checkThread = new QThread();
|
|
|
|
|
|
m_checkObj->moveToThread(m_checkThread);
|
|
|
|
|
|
m_updateSysTimer = new QTimer;
|
|
|
|
|
|
m_updateSysTimer->setInterval(1000);
|
|
|
|
|
|
m_pProcess=new QProcess(this);
|
|
|
|
|
|
{
|
2025-03-12 14:17:53 +08:00
|
|
|
|
const std::string strProc = std::move( iot_public::CFileUtil::getPathOfBinFile(
|
2025-06-16 20:27:07 +08:00
|
|
|
|
std::string("sys_ctrl") + iot_public::CFileUtil::getProcSuffix()));
|
2025-03-12 10:03:16 +08:00
|
|
|
|
if(strProc.empty())
|
|
|
|
|
|
LOGERROR("未找到可执行文件sys_ctrl");
|
|
|
|
|
|
else
|
|
|
|
|
|
m_strSysCtrlPath = QString::fromStdString(strProc);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
m_startSysTimer = new QTimer;
|
|
|
|
|
|
m_startSysTimer->setInterval(1000);
|
|
|
|
|
|
|
|
|
|
|
|
m_stopSysTimer = new QTimer;
|
|
|
|
|
|
m_stopSysTimer->setInterval(1000);
|
|
|
|
|
|
|
|
|
|
|
|
m_appRestartTimer = new QTimer;
|
|
|
|
|
|
m_appRestartTimer->setInterval(1000);
|
|
|
|
|
|
|
|
|
|
|
|
m_dogAndLocalNetTimer = new QTimer;
|
|
|
|
|
|
m_dogAndLocalNetTimer->setInterval(60000);
|
|
|
|
|
|
|
|
|
|
|
|
m_hmiAutoStartTimer = new QTimer;
|
|
|
|
|
|
m_hmiAutoStartTimer->setInterval(2000);
|
|
|
|
|
|
|
|
|
|
|
|
m_nStartStopResult = E_PROCESS_DEFAULT;
|
|
|
|
|
|
|
|
|
|
|
|
m_ptrDogAuthApi = getDogAuthInstance();
|
|
|
|
|
|
if (!m_ptrDogAuthApi)
|
|
|
|
|
|
{
|
|
|
|
|
|
LOGERROR("创建加密狗实例失败");
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void MainWindow::initUi()
|
|
|
|
|
|
{
|
2025-07-05 13:36:53 +08:00
|
|
|
|
QString title = DataMng::instance()->getTitle();
|
2025-03-12 10:03:16 +08:00
|
|
|
|
setWindowFlags( Qt::Window | Qt::CustomizeWindowHint | Qt::WindowTitleHint | Qt::WindowSystemMenuHint| Qt::WindowCloseButtonHint );
|
2025-06-16 20:27:07 +08:00
|
|
|
|
ui->label->setStyleSheet("");
|
2025-03-12 10:03:16 +08:00
|
|
|
|
//标题栏
|
|
|
|
|
|
if(m_bIsZh)
|
|
|
|
|
|
{
|
2025-06-16 20:27:07 +08:00
|
|
|
|
//setWindowTitle(DataMng::instance()->getZhTitle());
|
|
|
|
|
|
setWindowTitle("运行管理器");
|
|
|
|
|
|
m_pSysTrayIcon->setToolTip("运行管理器");
|
2025-03-12 10:03:16 +08:00
|
|
|
|
}else
|
|
|
|
|
|
{
|
2025-06-16 20:27:07 +08:00
|
|
|
|
//setWindowTitle(DataMng::instance()->getEnTitle());
|
|
|
|
|
|
setWindowTitle("Run Manager");
|
|
|
|
|
|
m_pSysTrayIcon->setToolTip("Run Manager");
|
2025-03-12 10:03:16 +08:00
|
|
|
|
}
|
2025-07-05 13:36:53 +08:00
|
|
|
|
ui->label_2->setStyleSheet("font-size:20pt; color:#52a6ff");
|
|
|
|
|
|
ui->label_2->setText(title);
|
2025-03-12 10:03:16 +08:00
|
|
|
|
//进度条
|
|
|
|
|
|
QGridLayout *startUpLayout = new QGridLayout(ui->startUpFrame);
|
|
|
|
|
|
startUpLayout->setSpacing(6);
|
|
|
|
|
|
startUpLayout->setContentsMargins(0, 0, 0, 0);
|
|
|
|
|
|
startUpLayout->addWidget(m_pStartUp);
|
|
|
|
|
|
|
|
|
|
|
|
//应用树
|
|
|
|
|
|
QGridLayout * appLayout = new QGridLayout(ui->appFrame);
|
|
|
|
|
|
appLayout->setSpacing(6);
|
|
|
|
|
|
appLayout->setContentsMargins(0, 0, 0, 0);
|
|
|
|
|
|
appLayout->addWidget(m_pAppMng);
|
|
|
|
|
|
|
|
|
|
|
|
//进程表格
|
|
|
|
|
|
QGridLayout *procLayout = new QGridLayout(ui->procWidget);
|
|
|
|
|
|
procLayout->setSpacing(6);
|
|
|
|
|
|
procLayout->setContentsMargins(0, 0, 0, 0);
|
|
|
|
|
|
procLayout->addWidget(m_pProcMng);
|
|
|
|
|
|
|
|
|
|
|
|
//首页快捷按钮
|
|
|
|
|
|
ButtonForm *page1form = new ButtonForm(EN_SYS_STARTUP_PAGE1,m_bIsZh,this);
|
2025-06-16 20:27:07 +08:00
|
|
|
|
//page1form->setTitleHide(true);
|
2025-03-12 10:03:16 +08:00
|
|
|
|
QVector<QString> buttons = DataMng::instance()->getPage1ButtonInfo();
|
|
|
|
|
|
page1form->addToolButtons(buttons);
|
|
|
|
|
|
connect(page1form,&ButtonForm::sigLogText,m_pStatusMng,&StatusForm::slotLogText);
|
2025-06-16 20:27:07 +08:00
|
|
|
|
connect(page1form,&ButtonForm::sigButtonClick,this,&MainWindow::slotStartOrStop);
|
|
|
|
|
|
connect(this,&MainWindow::sigButtonStatus,page1form,&ButtonForm::sigEnableStatus);
|
2025-03-12 10:03:16 +08:00
|
|
|
|
QGridLayout *page1layout = new QGridLayout(ui->customWidget);
|
|
|
|
|
|
page1layout->setSpacing(0);
|
|
|
|
|
|
page1layout->setContentsMargins(0,0,0,0);
|
|
|
|
|
|
page1layout->addWidget(page1form);
|
|
|
|
|
|
|
2025-06-16 20:27:07 +08:00
|
|
|
|
|
2025-03-12 10:03:16 +08:00
|
|
|
|
|
|
|
|
|
|
//状态栏视图
|
|
|
|
|
|
QGridLayout *statusLayout = new QGridLayout(ui->status_mng);
|
|
|
|
|
|
statusLayout->setSpacing(6);
|
|
|
|
|
|
statusLayout->setContentsMargins(0, 0, 0, 0);
|
|
|
|
|
|
statusLayout->addWidget(m_pStatusMng);
|
2025-06-16 20:27:07 +08:00
|
|
|
|
m_pStatusMng->setStyleSheet("background-color: #eaf9ea;");
|
2025-03-12 10:03:16 +08:00
|
|
|
|
|
2025-06-16 20:27:07 +08:00
|
|
|
|
ui->label->setPixmap(QPixmap(":/images/hmlogo.png"));
|
2025-03-12 10:03:16 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void MainWindow::initConn()
|
|
|
|
|
|
{
|
|
|
|
|
|
connect(m_updateTreeTimer,&QTimer::timeout,m_pAppMng,&AppMngForm::updateAppTree);
|
2025-06-16 20:27:07 +08:00
|
|
|
|
connect(m_startOrStopButtonTimer,&QTimer::timeout,this,&MainWindow::slotUpdataStartOrStopStatus);
|
2025-03-12 10:03:16 +08:00
|
|
|
|
|
|
|
|
|
|
connect(m_updateSysTimer,&QTimer::timeout,m_checkObj,&OnTimeCheckThread::brush,Qt::QueuedConnection);
|
|
|
|
|
|
connect(m_checkObj,&OnTimeCheckThread::changeTab,m_pStartUp,&StartUpForm::changeIndex,Qt::QueuedConnection);
|
|
|
|
|
|
|
|
|
|
|
|
connect(m_checkThread, &QThread::finished, m_checkObj, &QObject::deleteLater);
|
|
|
|
|
|
connect(m_checkThread, &QThread::finished, m_updateSysTimer, &QTimer::deleteLater);
|
|
|
|
|
|
|
|
|
|
|
|
connect(m_pStartUp,&StartUpForm::sigStartSystem,this,&MainWindow::slotStartSystem);
|
|
|
|
|
|
connect(m_pStartUp,&StartUpForm::sigStopSystem,this,&MainWindow::slotStopSystem);
|
2025-06-16 20:27:07 +08:00
|
|
|
|
connect(this,&MainWindow::sigStartFormCanClickButton,m_pStartUp,&StartUpForm::slotStartFormCanClickButton);
|
2025-03-12 10:03:16 +08:00
|
|
|
|
connect(m_pProcess,SIGNAL(readyReadStandardOutput()),this,SLOT(outPut()));
|
|
|
|
|
|
connect(m_pProcess,SIGNAL(finished(int,QProcess::ExitStatus)),this,SLOT(finish(int,QProcess::ExitStatus)));
|
|
|
|
|
|
|
|
|
|
|
|
connect(m_startSysTimer,&QTimer::timeout,this,&MainWindow::startPercent);
|
|
|
|
|
|
connect(m_stopSysTimer,&QTimer::timeout,this,&MainWindow::stopPercent);
|
|
|
|
|
|
|
|
|
|
|
|
connect(this,&MainWindow::changeTab,m_pStartUp,&StartUpForm::changeIndex);
|
|
|
|
|
|
connect(m_pAppMng,&AppMngForm::sigReloadAppAndProc,this,&MainWindow::reloadData);
|
|
|
|
|
|
connect(m_pAppMng,&AppMngForm::sigStartApp,this,&MainWindow::startApp);
|
|
|
|
|
|
connect(m_pAppMng,&AppMngForm::sigStopApp,this,&MainWindow::stopApp);
|
|
|
|
|
|
connect(m_pAppMng,&AppMngForm::sigRestartApp,this,&MainWindow::restartApp);
|
|
|
|
|
|
|
|
|
|
|
|
connect(m_appRestartTimer,&QTimer::timeout,this,&MainWindow::ifStartApp);
|
|
|
|
|
|
|
|
|
|
|
|
connect(m_pProcMng,&ProcMngForm::sigReloadAppAndProc,this,&MainWindow::reloadData);
|
|
|
|
|
|
connect(m_pProcMng,&ProcMngForm::sigStartProc,this,&MainWindow::startProc);
|
|
|
|
|
|
connect(m_pProcMng,&ProcMngForm::sigStopProc,this,&MainWindow::stopProc);
|
|
|
|
|
|
connect(m_pProcMng,&ProcMngForm::sigRestartProc,this,&MainWindow::reStartProc);
|
|
|
|
|
|
connect(m_pProcMng,&ProcMngForm::sigForceStopProc,this,&MainWindow::forceStopProc);
|
|
|
|
|
|
|
|
|
|
|
|
connect(m_dogAndLocalNetTimer,&QTimer::timeout,this,&MainWindow::dogAndNetCheck);
|
|
|
|
|
|
|
|
|
|
|
|
connect(m_hmiAutoStartTimer,&QTimer::timeout,this,&MainWindow::autoStartHmi);
|
|
|
|
|
|
connect(m_pSysTrayIcon,&QSystemTrayIcon::activated,this,&MainWindow::iconActived);
|
|
|
|
|
|
|
|
|
|
|
|
connect(ui->tabWidget,&QTabWidget::currentChanged,this,&MainWindow::tabWidget_currentIdxChanged);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void MainWindow::initLog()
|
|
|
|
|
|
{
|
|
|
|
|
|
//注册日志
|
2025-03-12 14:17:53 +08:00
|
|
|
|
iot_public::StartLogSystem(CN_AppName_BASE.c_str(),STARTUP_SERVER_NAME);
|
2025-03-12 10:03:16 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void MainWindow::initMsgBus()
|
|
|
|
|
|
{
|
|
|
|
|
|
//初始化消息总线
|
2025-03-12 14:17:53 +08:00
|
|
|
|
if(! iot_net::initMsgBus(STARTUP_SERVER_NAME,STARTUP_SERVER_NAME))
|
2025-03-12 10:03:16 +08:00
|
|
|
|
{
|
|
|
|
|
|
LOGERROR("初始化消息总线失败");
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void MainWindow::startThread()
|
|
|
|
|
|
{
|
|
|
|
|
|
dogAndNetCheck();
|
|
|
|
|
|
m_checkThread->start();
|
|
|
|
|
|
startWork();
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void MainWindow::showMessDialog(const QString &mess)
|
|
|
|
|
|
{
|
|
|
|
|
|
QMessageBox::warning(0,tr("提示"),mess);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void MainWindow::reloadAppTree()
|
|
|
|
|
|
{
|
|
|
|
|
|
m_pAppMng->initAppTree();
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void MainWindow::reloadProcTree()
|
|
|
|
|
|
{
|
|
|
|
|
|
m_pProcMng->initProcTree();
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void MainWindow::slotStartSystem()
|
|
|
|
|
|
{
|
|
|
|
|
|
//1.检查系统是否全部退出
|
|
|
|
|
|
if(OnTimeCheckThread::isSystemRunning())
|
|
|
|
|
|
{
|
|
|
|
|
|
LOGDEBUG("内存库可能被占用,现在先停止系统,清除共享内存!");
|
|
|
|
|
|
if(m_pStopProcess == nullptr)
|
|
|
|
|
|
{
|
|
|
|
|
|
m_pStopProcess = new QProcess;
|
|
|
|
|
|
}
|
|
|
|
|
|
else
|
|
|
|
|
|
{
|
|
|
|
|
|
m_pStopProcess->close();
|
|
|
|
|
|
}
|
|
|
|
|
|
disconnect(m_pStopProcess,SIGNAL(finished(int,QProcess::ExitStatus)),this,SLOT(startSystem(int,QProcess::ExitStatus)));
|
|
|
|
|
|
connect(m_pStopProcess,SIGNAL(finished(int,QProcess::ExitStatus)),this,SLOT(startSystem(int,QProcess::ExitStatus)));
|
|
|
|
|
|
m_pStopProcess->start(m_strSysCtrlPath + " -s");
|
|
|
|
|
|
return ;
|
|
|
|
|
|
}else
|
|
|
|
|
|
{
|
|
|
|
|
|
startSystem();
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void MainWindow::slotStopSystem()
|
|
|
|
|
|
{
|
|
|
|
|
|
//1.屏蔽信号
|
|
|
|
|
|
blockSignal(true);
|
|
|
|
|
|
|
|
|
|
|
|
//2.切换到正在停止界面
|
|
|
|
|
|
emit changeTab(EN_SYSTEM_STOPPING);
|
|
|
|
|
|
|
|
|
|
|
|
m_nStartStopResult = E_PROCESS_DEFAULT;
|
|
|
|
|
|
DataMng::instance()->setAllowedStatus(false);
|
|
|
|
|
|
|
|
|
|
|
|
m_pProcess->start(m_strSysCtrlPath + " -s");
|
|
|
|
|
|
|
|
|
|
|
|
//更新状态
|
2025-06-16 20:27:07 +08:00
|
|
|
|
QString text = tr("系统正在停止...");
|
2025-03-12 10:03:16 +08:00
|
|
|
|
m_pStatusMng->slotLogText(text);
|
|
|
|
|
|
m_stopSysTimer->start(); //启动停止定时器
|
|
|
|
|
|
m_pProcess->waitForStarted();
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void MainWindow::outPut()
|
|
|
|
|
|
{
|
|
|
|
|
|
QString ret = QString::fromLocal8Bit(m_pProcess->readAllStandardOutput());
|
|
|
|
|
|
ret=ret.trimmed();
|
|
|
|
|
|
QStringList list=ret.split("\n");
|
|
|
|
|
|
for(int i=0;i<list.size();++i)
|
|
|
|
|
|
{
|
|
|
|
|
|
if(list.at(i)!="")
|
|
|
|
|
|
{
|
|
|
|
|
|
m_pStatusMng->slotLogText(list.at(i));
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void MainWindow::finish(int res, QProcess::ExitStatus exit)
|
|
|
|
|
|
{
|
|
|
|
|
|
Q_UNUSED(exit);
|
|
|
|
|
|
m_nStartStopResult = (E_PROCESS_RESULT)res;
|
|
|
|
|
|
DataMng::instance()->setAllowedStatus(true);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void MainWindow::startPercent()
|
|
|
|
|
|
{
|
|
|
|
|
|
int num = 0;
|
|
|
|
|
|
emit changeTab(EN_SYSTEM_STARTING);
|
|
|
|
|
|
if(m_nStartStopResult == E_PROCESS_FAILD || m_nStartStopResult == E_PROCESS_SUCCEED)
|
|
|
|
|
|
{
|
|
|
|
|
|
m_startSysTimer->stop();
|
|
|
|
|
|
DataMng::instance()->setAllowedStatus(true);
|
|
|
|
|
|
blockSignal(false);
|
|
|
|
|
|
m_nStartStopResult = E_PROCESS_DEFAULT;
|
|
|
|
|
|
m_pStartUp->initStartValue();
|
|
|
|
|
|
return ;
|
|
|
|
|
|
}else
|
|
|
|
|
|
{
|
|
|
|
|
|
float disk = 0.0;
|
|
|
|
|
|
vector<SProcess> procVec ;
|
|
|
|
|
|
DataMng::instance()->getRunProcInfo(procVec,disk);
|
|
|
|
|
|
vector<SProcess>::iterator it = procVec.begin();
|
|
|
|
|
|
for(;it!=procVec.end();it++)
|
|
|
|
|
|
{
|
|
|
|
|
|
if(it->m_isStartUp == 1)
|
|
|
|
|
|
{
|
|
|
|
|
|
num++;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
int localProcNum = DataMng::instance()->getLocalProcNum();
|
|
|
|
|
|
|
|
|
|
|
|
m_pStartUp->changeStartValue(num*100/localProcNum);
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void MainWindow::stopPercent()
|
|
|
|
|
|
{
|
|
|
|
|
|
int num = 0;
|
|
|
|
|
|
emit changeTab(EN_SYSTEM_STOPPING);
|
|
|
|
|
|
if(m_nStartStopResult == E_PROCESS_FAILD || m_nStartStopResult == E_PROCESS_SUCCEED)
|
|
|
|
|
|
{
|
|
|
|
|
|
m_stopSysTimer->stop();
|
|
|
|
|
|
DataMng::instance()->setAllowedStatus(true);
|
|
|
|
|
|
blockSignal(false);
|
|
|
|
|
|
m_nStartStopResult = E_PROCESS_DEFAULT;
|
|
|
|
|
|
m_pStartUp->initStopValue();
|
|
|
|
|
|
return ;
|
|
|
|
|
|
}else
|
|
|
|
|
|
{
|
|
|
|
|
|
float disk = 0.0;
|
|
|
|
|
|
vector<SProcess> procVec ;
|
|
|
|
|
|
DataMng::instance()->getRunProcInfo(procVec,disk);
|
|
|
|
|
|
vector<SProcess>::iterator it = procVec.begin();
|
|
|
|
|
|
for(;it!=procVec.end();it++)
|
|
|
|
|
|
{
|
|
|
|
|
|
if(it->m_isStartUp == 0)
|
|
|
|
|
|
{
|
|
|
|
|
|
num++;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
int localProcNum = DataMng::instance()->getLocalProcNum();
|
|
|
|
|
|
|
|
|
|
|
|
m_pStartUp->changeStopValue(num*100/localProcNum);
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void MainWindow::reloadData()
|
|
|
|
|
|
{
|
|
|
|
|
|
DataMng::instance()->loadXml();
|
|
|
|
|
|
reloadAppTree();
|
|
|
|
|
|
reloadProcTree();
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void MainWindow::startApp(const QString appName)
|
|
|
|
|
|
{
|
|
|
|
|
|
DataMng::instance()->setAllowedStatus(false);
|
|
|
|
|
|
m_nStartStopResult = E_PROCESS_DEFAULT;
|
|
|
|
|
|
m_pProcess->start(QString("%1 -a %2").arg(m_strSysCtrlPath).arg(appName));
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void MainWindow::stopApp(const QString appName)
|
|
|
|
|
|
{
|
|
|
|
|
|
DataMng::instance()->setAllowedStatus(false);
|
|
|
|
|
|
m_nStartStopResult = E_PROCESS_DEFAULT;
|
|
|
|
|
|
m_pProcess->start(QString("%1 -s -a %2").arg(m_strSysCtrlPath).arg(appName));
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void MainWindow::restartApp(const QString appName)
|
|
|
|
|
|
{
|
|
|
|
|
|
restartAppName = appName;
|
|
|
|
|
|
stopApp(appName);
|
|
|
|
|
|
m_appRestartTimer->start();
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void MainWindow::ifStartApp()
|
|
|
|
|
|
{
|
|
|
|
|
|
if(m_nStartStopResult == E_PROCESS_FAILD)
|
|
|
|
|
|
{
|
|
|
|
|
|
m_appRestartTimer->stop();
|
|
|
|
|
|
m_nStartStopResult = E_PROCESS_DEFAULT;
|
|
|
|
|
|
}else if(m_nStartStopResult == E_PROCESS_SUCCEED)
|
|
|
|
|
|
{
|
|
|
|
|
|
m_appRestartTimer->stop();
|
|
|
|
|
|
m_nStartStopResult = E_PROCESS_DEFAULT;
|
|
|
|
|
|
QString appName = restartAppName;
|
|
|
|
|
|
restartAppName = QString();
|
|
|
|
|
|
startApp(appName);
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void MainWindow::startProc(int appId, const QString procName)
|
|
|
|
|
|
{
|
|
|
|
|
|
vector<SProcess> procVec;
|
|
|
|
|
|
float disk = 0.0;
|
|
|
|
|
|
DataMng::instance()->getRunProcInfo(procVec,disk);
|
|
|
|
|
|
for(size_t index(0);index<procVec.size();index++)
|
|
|
|
|
|
{
|
|
|
|
|
|
if(procVec[index].m_appId == appId && procVec[index].m_procName == procName.toStdString())
|
|
|
|
|
|
{
|
|
|
|
|
|
DataMng::instance()->setAllowedStatus(false);
|
|
|
|
|
|
QString logText = QString(tr("开始启动进程:%1")).arg(QString::fromStdString(procVec[index].m_procName));
|
|
|
|
|
|
LOGDEBUG("startProc()-%s",logText.toStdString().c_str());
|
|
|
|
|
|
m_pStatusMng->slotLogText(logText);
|
|
|
|
|
|
|
|
|
|
|
|
string strArgs;
|
|
|
|
|
|
|
|
|
|
|
|
if (appId != CN_AppId_BASE)
|
|
|
|
|
|
{
|
|
|
|
|
|
strArgs += "-a " + DataMng::instance()->getAppNameByAppId(appId);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
if (!procVec[index].m_procParam.empty())
|
|
|
|
|
|
{
|
|
|
|
|
|
strArgs += " " + procVec[index].m_procParam;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
string strModulePath;
|
|
|
|
|
|
CFileUtil::getPathOfBinFile(procName.toStdString() + CFileUtil::getProcSuffix(), &strModulePath);
|
|
|
|
|
|
|
|
|
|
|
|
if(!CProcUtil::startProcess(strModulePath, procName.toStdString(), procVec[index].m_procParam, false,false))
|
|
|
|
|
|
{
|
|
|
|
|
|
logText = QString(tr("启动进程:%1失败")).arg(QString::fromStdString(procVec[index].m_procName));
|
|
|
|
|
|
LOGERROR("startProc()-%s",logText.toStdString().c_str());
|
|
|
|
|
|
m_pStatusMng->slotLogText(logText);
|
|
|
|
|
|
}else
|
|
|
|
|
|
{
|
|
|
|
|
|
if(isProcStartSuccess(appId,procName))
|
|
|
|
|
|
{
|
|
|
|
|
|
logText = QString(tr("启动进程:%1成功")).arg(QString::fromStdString(procVec[index].m_procName));
|
|
|
|
|
|
LOGDEBUG("startProc()-%s",logText.toStdString().c_str());
|
|
|
|
|
|
m_pStatusMng->slotLogText(logText);
|
|
|
|
|
|
}
|
|
|
|
|
|
else
|
|
|
|
|
|
{
|
|
|
|
|
|
logText = QString(tr("启动进程:%1失败")).arg(QString::fromStdString(procVec[index].m_procName));
|
|
|
|
|
|
LOGDEBUG("startProc()-%s",logText.toStdString().c_str());
|
|
|
|
|
|
m_pStatusMng->slotLogText(logText);
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
DataMng::instance()->setAllowedStatus(true);
|
|
|
|
|
|
break;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
bool MainWindow::stopProc(int appId, const QString procName)
|
|
|
|
|
|
{
|
|
|
|
|
|
CRdbNetApi netApi;
|
|
|
|
|
|
netApi.connect(DataMng::instance()->getDomainId(),1);
|
|
|
|
|
|
|
|
|
|
|
|
vector<SProcess> procVec;
|
|
|
|
|
|
float disk = 0.0;
|
|
|
|
|
|
DataMng::instance()->getRunProcInfo(procVec,disk);
|
|
|
|
|
|
for(size_t index(0);index<procVec.size();index++)
|
|
|
|
|
|
{
|
|
|
|
|
|
if(procVec[index].m_appId == appId && procVec[index].m_procName == procName.toStdString())
|
|
|
|
|
|
{
|
|
|
|
|
|
DataMng::instance()->setAllowedStatus(false);
|
|
|
|
|
|
QString logText = QString(tr("开始停止进程:%1")).arg(QString::fromStdString(procVec[index].m_procName));
|
|
|
|
|
|
LOGDEBUG("stopProc()-%s",logText.toStdString().c_str());
|
|
|
|
|
|
m_pStatusMng->slotLogText(logText);
|
2025-03-12 14:17:53 +08:00
|
|
|
|
iot_idl::RdbUpdate rdbupdate;
|
2025-03-12 10:03:16 +08:00
|
|
|
|
|
|
|
|
|
|
rdbupdate.set_strtablename(CN_TN_SysRunProcInfo);
|
|
|
|
|
|
|
|
|
|
|
|
rdbupdate.add_msgcondition();
|
|
|
|
|
|
rdbupdate.mutable_msgcondition(0)->set_enlogic(enumCondAnd);
|
|
|
|
|
|
rdbupdate.mutable_msgcondition(0)->set_enrelation(enumCondEqual);
|
|
|
|
|
|
rdbupdate.mutable_msgcondition(0)->set_strcolumnname("node_name");
|
|
|
|
|
|
rdbupdate.mutable_msgcondition(0)->mutable_msgvalue()->set_edatatype(CN_DATATYPE_STRING);
|
|
|
|
|
|
rdbupdate.mutable_msgcondition(0)->mutable_msgvalue()->set_strvalue(procVec[index].m_nodeName);
|
|
|
|
|
|
|
|
|
|
|
|
rdbupdate.add_msgcondition();
|
|
|
|
|
|
rdbupdate.mutable_msgcondition(1)->set_enlogic(enumCondAnd);
|
|
|
|
|
|
rdbupdate.mutable_msgcondition(1)->set_enrelation(enumCondEqual);
|
|
|
|
|
|
rdbupdate.mutable_msgcondition(1)->set_strcolumnname("proc_name");
|
|
|
|
|
|
rdbupdate.mutable_msgcondition(1)->mutable_msgvalue()->set_edatatype(CN_DATATYPE_STRING);
|
|
|
|
|
|
rdbupdate.mutable_msgcondition(1)->mutable_msgvalue()->set_strvalue(procName.toStdString());
|
|
|
|
|
|
|
|
|
|
|
|
rdbupdate.add_msgcondition();
|
|
|
|
|
|
rdbupdate.mutable_msgcondition(2)->set_enlogic(enumCondAnd);
|
|
|
|
|
|
rdbupdate.mutable_msgcondition(2)->set_enrelation(enumCondEqual);
|
|
|
|
|
|
rdbupdate.mutable_msgcondition(2)->set_strcolumnname("app_id");
|
|
|
|
|
|
rdbupdate.mutable_msgcondition(2)->mutable_msgvalue()->set_edatatype(CN_DATATYPE_INT32);
|
|
|
|
|
|
rdbupdate.mutable_msgcondition(2)->mutable_msgvalue()->set_nvalue(appId);
|
|
|
|
|
|
|
|
|
|
|
|
rdbupdate.add_msgupdatevalue();
|
|
|
|
|
|
rdbupdate.mutable_msgupdatevalue(0)->set_strcolumnname("to_quit");
|
|
|
|
|
|
rdbupdate.mutable_msgupdatevalue(0)->mutable_msgvalue()->set_edatatype(CN_DATATYPE_INT32);
|
|
|
|
|
|
rdbupdate.mutable_msgupdatevalue(0)->mutable_msgvalue()->set_nvalue(1);
|
|
|
|
|
|
|
|
|
|
|
|
bool bRet = false;
|
|
|
|
|
|
bRet=netApi.update(rdbupdate);
|
|
|
|
|
|
if(bRet==false)
|
|
|
|
|
|
{
|
|
|
|
|
|
LOGERROR("stopProc()-写表失败:%s",netApi.getErr().c_str());
|
|
|
|
|
|
logText = QString(tr("停止进程:%1失败")).arg(QString::fromStdString(procVec[index].m_procName));
|
|
|
|
|
|
m_pStatusMng->slotLogText(logText);
|
|
|
|
|
|
DataMng::instance()->setAllowedStatus(true);
|
|
|
|
|
|
return false;
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
if(isProcStopSuccess(appId,procName))
|
|
|
|
|
|
{
|
|
|
|
|
|
logText = QString(tr("停止进程:%1成功")).arg(QString::fromStdString(procVec[index].m_procName));
|
|
|
|
|
|
LOGDEBUG("stopProc()-%s",logText.toStdString().c_str());
|
|
|
|
|
|
m_pStatusMng->slotLogText(logText);
|
|
|
|
|
|
DataMng::instance()->setAllowedStatus(true);
|
|
|
|
|
|
return true;
|
|
|
|
|
|
}
|
|
|
|
|
|
else
|
|
|
|
|
|
{
|
|
|
|
|
|
logText = QString(tr("停止进程:%1失败")).arg(QString::fromStdString(procVec[index].m_procName));
|
|
|
|
|
|
LOGERROR("stopProc()-%s",logText.toStdString().c_str());
|
|
|
|
|
|
m_pStatusMng->slotLogText(logText);
|
|
|
|
|
|
DataMng::instance()->setAllowedStatus(true);
|
|
|
|
|
|
return false;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
return false;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void MainWindow::reStartProc(int appId, const QString procName)
|
|
|
|
|
|
{
|
|
|
|
|
|
if(stopProc(appId,procName))
|
|
|
|
|
|
{
|
|
|
|
|
|
startProc(appId,procName);
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void MainWindow::forceStopProc(int appId, const QString procName)
|
|
|
|
|
|
{
|
|
|
|
|
|
CRdbNetApi netApi;
|
|
|
|
|
|
netApi.connect(DataMng::instance()->getDomainId(),1);
|
|
|
|
|
|
vector<SProcess> procVec;
|
|
|
|
|
|
float disk = 0.0;
|
|
|
|
|
|
DataMng::instance()->getRunProcInfo(procVec,disk);
|
|
|
|
|
|
for(size_t index(0);index<procVec.size();index++)
|
|
|
|
|
|
{
|
|
|
|
|
|
if(procVec[index].m_appId == appId && procVec[index].m_procName == procName.toStdString())
|
|
|
|
|
|
{
|
|
|
|
|
|
DataMng::instance()->setAllowedStatus(false);
|
|
|
|
|
|
QString logText = QString(tr("强制停止进程:%1")).arg(QString::fromStdString(procVec[index].m_procName));
|
|
|
|
|
|
LOGDEBUG("forceStopProc()-%s",logText.toStdString().c_str());
|
|
|
|
|
|
m_pStatusMng->slotLogText(logText);
|
2025-03-12 14:17:53 +08:00
|
|
|
|
iot_idl::RdbUpdate rdbupdate;
|
2025-03-12 10:03:16 +08:00
|
|
|
|
|
|
|
|
|
|
rdbupdate.set_strtablename(CN_TN_SysRunProcInfo);
|
|
|
|
|
|
|
|
|
|
|
|
rdbupdate.add_msgcondition();
|
|
|
|
|
|
rdbupdate.mutable_msgcondition(0)->set_enlogic(enumCondAnd);
|
|
|
|
|
|
rdbupdate.mutable_msgcondition(0)->set_enrelation(enumCondEqual);
|
|
|
|
|
|
rdbupdate.mutable_msgcondition(0)->set_strcolumnname("node_name");
|
|
|
|
|
|
rdbupdate.mutable_msgcondition(0)->mutable_msgvalue()->set_edatatype(CN_DATATYPE_STRING);
|
|
|
|
|
|
rdbupdate.mutable_msgcondition(0)->mutable_msgvalue()->set_strvalue(procVec[index].m_nodeName);
|
|
|
|
|
|
|
|
|
|
|
|
rdbupdate.add_msgcondition();
|
|
|
|
|
|
rdbupdate.mutable_msgcondition(1)->set_enlogic(enumCondAnd);
|
|
|
|
|
|
rdbupdate.mutable_msgcondition(1)->set_enrelation(enumCondEqual);
|
|
|
|
|
|
rdbupdate.mutable_msgcondition(1)->set_strcolumnname("proc_name");
|
|
|
|
|
|
rdbupdate.mutable_msgcondition(1)->mutable_msgvalue()->set_edatatype(CN_DATATYPE_STRING);
|
|
|
|
|
|
rdbupdate.mutable_msgcondition(1)->mutable_msgvalue()->set_strvalue(procName.toStdString());
|
|
|
|
|
|
|
|
|
|
|
|
rdbupdate.add_msgcondition();
|
|
|
|
|
|
rdbupdate.mutable_msgcondition(2)->set_enlogic(enumCondAnd);
|
|
|
|
|
|
rdbupdate.mutable_msgcondition(2)->set_enrelation(enumCondEqual);
|
|
|
|
|
|
rdbupdate.mutable_msgcondition(2)->set_strcolumnname("app_id");
|
|
|
|
|
|
rdbupdate.mutable_msgcondition(2)->mutable_msgvalue()->set_edatatype(CN_DATATYPE_INT32);
|
|
|
|
|
|
rdbupdate.mutable_msgcondition(2)->mutable_msgvalue()->set_nvalue(appId);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
rdbupdate.add_msgupdatevalue();
|
|
|
|
|
|
rdbupdate.mutable_msgupdatevalue(0)->set_strcolumnname("is_fault");
|
|
|
|
|
|
rdbupdate.mutable_msgupdatevalue(0)->mutable_msgvalue()->set_edatatype(CN_DATATYPE_INT32);
|
|
|
|
|
|
rdbupdate.mutable_msgupdatevalue(0)->mutable_msgvalue()->set_nvalue(0);
|
|
|
|
|
|
|
|
|
|
|
|
rdbupdate.add_msgupdatevalue();
|
|
|
|
|
|
rdbupdate.mutable_msgupdatevalue(1)->set_strcolumnname("is_startup");
|
|
|
|
|
|
rdbupdate.mutable_msgupdatevalue(1)->mutable_msgvalue()->set_edatatype(CN_DATATYPE_INT32);
|
|
|
|
|
|
rdbupdate.mutable_msgupdatevalue(1)->mutable_msgvalue()->set_nvalue(0);
|
|
|
|
|
|
|
|
|
|
|
|
rdbupdate.add_msgupdatevalue();
|
|
|
|
|
|
rdbupdate.mutable_msgupdatevalue(2)->set_strcolumnname("to_quit");
|
|
|
|
|
|
rdbupdate.mutable_msgupdatevalue(2)->mutable_msgvalue()->set_edatatype(CN_DATATYPE_INT32);
|
|
|
|
|
|
rdbupdate.mutable_msgupdatevalue(2)->mutable_msgvalue()->set_nvalue(1);
|
|
|
|
|
|
|
|
|
|
|
|
rdbupdate.add_msgupdatevalue();
|
|
|
|
|
|
rdbupdate.mutable_msgupdatevalue(3)->set_strcolumnname("is_quit");
|
|
|
|
|
|
rdbupdate.mutable_msgupdatevalue(3)->mutable_msgvalue()->set_edatatype(CN_DATATYPE_INT32);
|
|
|
|
|
|
rdbupdate.mutable_msgupdatevalue(3)->mutable_msgvalue()->set_nvalue(1);
|
|
|
|
|
|
|
|
|
|
|
|
rdbupdate.add_msgupdatevalue();
|
|
|
|
|
|
rdbupdate.mutable_msgupdatevalue(4)->set_strcolumnname("is_regist");
|
|
|
|
|
|
rdbupdate.mutable_msgupdatevalue(4)->mutable_msgvalue()->set_edatatype(CN_DATATYPE_INT32);
|
|
|
|
|
|
rdbupdate.mutable_msgupdatevalue(4)->mutable_msgvalue()->set_nvalue(0);
|
|
|
|
|
|
|
|
|
|
|
|
rdbupdate.add_msgupdatevalue();
|
|
|
|
|
|
rdbupdate.mutable_msgupdatevalue(5)->set_strcolumnname("is_active");
|
|
|
|
|
|
rdbupdate.mutable_msgupdatevalue(5)->mutable_msgvalue()->set_edatatype(CN_DATATYPE_INT32);
|
|
|
|
|
|
rdbupdate.mutable_msgupdatevalue(5)->mutable_msgvalue()->set_nvalue(0);
|
|
|
|
|
|
|
|
|
|
|
|
rdbupdate.add_msgupdatevalue();
|
|
|
|
|
|
rdbupdate.mutable_msgupdatevalue(6)->set_strcolumnname("is_master");
|
|
|
|
|
|
rdbupdate.mutable_msgupdatevalue(6)->mutable_msgvalue()->set_edatatype(CN_DATATYPE_INT32);
|
|
|
|
|
|
rdbupdate.mutable_msgupdatevalue(6)->mutable_msgvalue()->set_nvalue(0);
|
|
|
|
|
|
|
|
|
|
|
|
rdbupdate.add_msgupdatevalue();
|
|
|
|
|
|
rdbupdate.mutable_msgupdatevalue(7)->set_strcolumnname("is_slave");
|
|
|
|
|
|
rdbupdate.mutable_msgupdatevalue(7)->mutable_msgvalue()->set_edatatype(CN_DATATYPE_INT32);
|
|
|
|
|
|
rdbupdate.mutable_msgupdatevalue(7)->mutable_msgvalue()->set_nvalue(0);
|
|
|
|
|
|
|
|
|
|
|
|
bool bRet = false;
|
|
|
|
|
|
bRet=netApi.update(rdbupdate);
|
|
|
|
|
|
if(bRet==false)
|
|
|
|
|
|
{
|
|
|
|
|
|
LOGERROR("forceStopProc()写表失败:%s",netApi.getErr().c_str());
|
|
|
|
|
|
logText = QString(tr("停止进程:%1失败")).arg(QString::fromStdString(procVec[index].m_procName));
|
|
|
|
|
|
m_pStatusMng->slotLogText(logText);
|
|
|
|
|
|
DataMng::instance()->setAllowedStatus(true);
|
|
|
|
|
|
return ;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
if(procVec[index].m_procId <= 0)
|
|
|
|
|
|
{
|
|
|
|
|
|
logText = QString(tr("停止进程:%1成功")).arg(QString::fromStdString(procVec[index].m_procName));
|
|
|
|
|
|
LOGDEBUG("forceStopProc()-%s",logText.toStdString().c_str());
|
|
|
|
|
|
m_pStatusMng->slotLogText(logText);
|
|
|
|
|
|
DataMng::instance()->setAllowedStatus(true);
|
|
|
|
|
|
return ;
|
|
|
|
|
|
}
|
|
|
|
|
|
QProcess process;
|
|
|
|
|
|
QStringList stList;
|
|
|
|
|
|
#ifdef Q_OS_WIN
|
|
|
|
|
|
stList<<"TASKKILL"<<"/PID"<<QString::number(procVec[index].m_procId)<<"/T"<<"/F";
|
|
|
|
|
|
#else
|
|
|
|
|
|
stList<<"kill"<<"-9"<<QString::number(procVec[index].m_procId);
|
|
|
|
|
|
#endif
|
|
|
|
|
|
process.start( "cmd", stList);
|
|
|
|
|
|
process.waitForStarted();
|
|
|
|
|
|
logText = QString(tr("停止进程:%1成功")).arg(QString::fromStdString(procVec[index].m_procName));
|
|
|
|
|
|
LOGDEBUG("forceStopProc()-%s",logText.toStdString().c_str());
|
|
|
|
|
|
m_pStatusMng->slotLogText(logText);
|
|
|
|
|
|
|
|
|
|
|
|
DataMng::instance()->setAllowedStatus(true);
|
|
|
|
|
|
break;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void MainWindow::dogAndNetCheck()
|
|
|
|
|
|
{
|
|
|
|
|
|
checkNet();
|
|
|
|
|
|
checkDog();
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void MainWindow::autoStartHmi()
|
|
|
|
|
|
{
|
|
|
|
|
|
QString strHmiErr;
|
|
|
|
|
|
bool isHmi = false;
|
|
|
|
|
|
#ifdef OS_WINDOWS
|
2025-03-12 14:17:53 +08:00
|
|
|
|
isHmi = iot_sys::isSysStartupVbsExist();
|
2025-03-12 10:03:16 +08:00
|
|
|
|
#endif
|
|
|
|
|
|
#ifdef OS_LINUX
|
2025-03-12 14:17:53 +08:00
|
|
|
|
isHmi = iot_sys::isHmiAutoStart(strHmiErr);
|
2025-03-12 10:03:16 +08:00
|
|
|
|
#endif
|
|
|
|
|
|
if(!isHmi)
|
|
|
|
|
|
{
|
|
|
|
|
|
m_hmiAutoStartTimer->stop();
|
|
|
|
|
|
}else
|
|
|
|
|
|
{
|
|
|
|
|
|
if(DataMng::instance()->getBaseStatus())
|
|
|
|
|
|
{
|
|
|
|
|
|
m_hmiAutoStartTimer->stop();
|
|
|
|
|
|
openHmi();
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void MainWindow::iconActived(QSystemTrayIcon::ActivationReason reason)
|
|
|
|
|
|
{
|
|
|
|
|
|
switch (reason) {
|
|
|
|
|
|
case QSystemTrayIcon::DoubleClick:
|
|
|
|
|
|
LOGINFO("右下角双击应用图标,开始工作!");
|
|
|
|
|
|
startWork();
|
|
|
|
|
|
this->show();
|
|
|
|
|
|
this->showNormal();
|
|
|
|
|
|
this->activateWindow();
|
|
|
|
|
|
break;
|
|
|
|
|
|
case QSystemTrayIcon::Context:
|
|
|
|
|
|
{
|
|
|
|
|
|
if(!DataMng::instance()->getAllowedStatus())
|
|
|
|
|
|
m_pExitAction->setEnabled(false);
|
|
|
|
|
|
else
|
|
|
|
|
|
m_pExitAction->setEnabled(true);
|
|
|
|
|
|
break;
|
|
|
|
|
|
}
|
|
|
|
|
|
default:
|
|
|
|
|
|
break;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void MainWindow::startSystem(int res,QProcess::ExitStatus exit)
|
|
|
|
|
|
{
|
|
|
|
|
|
Q_UNUSED(exit);
|
|
|
|
|
|
Q_UNUSED(res);
|
|
|
|
|
|
//1.检查系统是否全部退出
|
|
|
|
|
|
if(OnTimeCheckThread::isSystemRunning())
|
|
|
|
|
|
{
|
|
|
|
|
|
QString mess = tr("系统启动失败,请检查所有配置工具和人机界面是否已经全部退出!");
|
|
|
|
|
|
m_pStatusMng->slotLogText(mess);
|
|
|
|
|
|
showMessDialog(mess);
|
|
|
|
|
|
return ;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
//2.重新加载数据、重新初始化应用树和进程树
|
|
|
|
|
|
reloadData();
|
|
|
|
|
|
|
|
|
|
|
|
//3.检查模型数据是否导出
|
|
|
|
|
|
if(DataMng::instance()->getLocalProcNum() <= 0)
|
|
|
|
|
|
{
|
|
|
|
|
|
QMessageBox::StandardButton result = QMessageBox::question(this,tr("错误"),tr("系统模型配置信息异常,是否打开系统建模工具检查配置并导出?"));
|
|
|
|
|
|
if(result == QMessageBox::Yes)
|
|
|
|
|
|
{
|
2025-03-12 14:17:53 +08:00
|
|
|
|
const std::string strProc = std::move( iot_public::CFileUtil::getPathOfBinFile(
|
2025-06-16 20:27:07 +08:00
|
|
|
|
std::string("model_system_config") + iot_public::CFileUtil::getProcSuffix()));
|
2025-03-12 10:03:16 +08:00
|
|
|
|
if(strProc.empty())
|
|
|
|
|
|
{
|
|
|
|
|
|
LOGERROR("未找到可执行文件model_system_config");
|
|
|
|
|
|
return;
|
|
|
|
|
|
}
|
|
|
|
|
|
QProcess::startDetached(strProc.c_str());
|
|
|
|
|
|
}
|
|
|
|
|
|
return ;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
//4.校验ip
|
|
|
|
|
|
verifyIp();
|
|
|
|
|
|
|
|
|
|
|
|
//5.屏蔽其他信号
|
|
|
|
|
|
blockSignal(true);
|
|
|
|
|
|
|
|
|
|
|
|
//6.切换到正在启动界面
|
|
|
|
|
|
emit changeTab(EN_SYSTEM_STARTING);
|
|
|
|
|
|
|
|
|
|
|
|
//7.启动系统
|
|
|
|
|
|
DataMng::instance()->setAllowedStatus(false);
|
2025-06-16 20:27:07 +08:00
|
|
|
|
//更新状态
|
|
|
|
|
|
QString text = tr("系统正在启动...");
|
|
|
|
|
|
m_pStatusMng->slotLogText(text);
|
2025-03-12 10:03:16 +08:00
|
|
|
|
m_pProcess->start(m_strSysCtrlPath);
|
|
|
|
|
|
m_startSysTimer->start();
|
|
|
|
|
|
m_pProcess->waitForStarted();
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void MainWindow::tabWidget_currentIdxChanged(int /*index*/)
|
|
|
|
|
|
{
|
|
|
|
|
|
if( ui->tabWidget->currentWidget() == ui->app_mng)
|
|
|
|
|
|
{
|
|
|
|
|
|
disconnect(m_updateTreeTimer,&QTimer::timeout,m_pProcMng,&ProcMngForm::updateProcTree);
|
|
|
|
|
|
connect(m_updateTreeTimer,&QTimer::timeout,m_pAppMng,&AppMngForm::updateAppTree);
|
|
|
|
|
|
}
|
|
|
|
|
|
else if( ui->tabWidget->currentWidget() == ui->proc_mng )
|
|
|
|
|
|
{
|
|
|
|
|
|
connect(m_updateTreeTimer,&QTimer::timeout,m_pProcMng,&ProcMngForm::updateProcTree);
|
|
|
|
|
|
disconnect(m_updateTreeTimer,&QTimer::timeout,m_pAppMng,&AppMngForm::updateAppTree);
|
|
|
|
|
|
}
|
|
|
|
|
|
else
|
|
|
|
|
|
{
|
|
|
|
|
|
disconnect(m_updateTreeTimer,&QTimer::timeout,m_pProcMng,&ProcMngForm::updateProcTree);
|
|
|
|
|
|
disconnect(m_updateTreeTimer,&QTimer::timeout,m_pAppMng,&AppMngForm::updateAppTree);
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2025-06-16 20:27:07 +08:00
|
|
|
|
void MainWindow::slotStartOrStop()
|
|
|
|
|
|
{
|
|
|
|
|
|
emit sigStartFormCanClickButton();
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void MainWindow::slotUpdataStartOrStopStatus()
|
|
|
|
|
|
{
|
|
|
|
|
|
bool enable =DataMng::instance()->getAllowedStatus();
|
|
|
|
|
|
emit sigButtonStatus(enable);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2025-03-12 10:03:16 +08:00
|
|
|
|
void MainWindow::closeEvent(QCloseEvent *event)
|
|
|
|
|
|
{
|
2025-03-13 11:50:23 +08:00
|
|
|
|
#ifdef KBD_ARM
|
|
|
|
|
|
QApplication::exit(0);
|
|
|
|
|
|
#endif
|
|
|
|
|
|
|
2025-03-12 10:03:16 +08:00
|
|
|
|
event->ignore();
|
|
|
|
|
|
this->hide();
|
|
|
|
|
|
LOGINFO("点击应用关闭按钮,停止工作!");
|
|
|
|
|
|
stopWork();
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void MainWindow::changeEvent(QEvent *e)
|
|
|
|
|
|
{
|
|
|
|
|
|
QWidget::changeEvent(e);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void MainWindow::keyPressEvent(QKeyEvent *event)
|
|
|
|
|
|
{
|
|
|
|
|
|
if(event->modifiers().testFlag(Qt::ControlModifier) &&
|
|
|
|
|
|
event->key() == Qt::Key_B)
|
|
|
|
|
|
{
|
|
|
|
|
|
DataMng::instance()->setAllowedStatus(true);
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
bool MainWindow::isProcStartSuccess(int appId, const QString &strProcName)
|
|
|
|
|
|
{
|
|
|
|
|
|
int checkCount =0;
|
|
|
|
|
|
while(true)
|
|
|
|
|
|
{
|
|
|
|
|
|
if(checkCount > processOptOuttime)
|
|
|
|
|
|
{
|
|
|
|
|
|
return false;
|
|
|
|
|
|
}
|
|
|
|
|
|
QEventLoop eventloop;
|
|
|
|
|
|
QTimer::singleShot(1000,&eventloop,SLOT(quit()));
|
|
|
|
|
|
eventloop.exec();
|
|
|
|
|
|
vector<SProcess> procVec;
|
|
|
|
|
|
float disk = 0.0;
|
|
|
|
|
|
DataMng::instance()->getRunProcInfo(procVec,disk);
|
|
|
|
|
|
for(size_t index(0);index<procVec.size();index++)
|
|
|
|
|
|
{
|
|
|
|
|
|
if(procVec[index].m_appId == appId && procVec[index].m_procName == strProcName.toStdString() && procVec[index].m_isStartUp == EN_PROC_RUNNING)
|
|
|
|
|
|
{
|
|
|
|
|
|
return true;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
checkCount++;
|
|
|
|
|
|
}
|
|
|
|
|
|
return false;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
bool MainWindow::isProcStopSuccess(int appId, const QString &strProcName)
|
|
|
|
|
|
{
|
|
|
|
|
|
int checkCount =0;
|
|
|
|
|
|
while(true)
|
|
|
|
|
|
{
|
|
|
|
|
|
if(checkCount > processOptOuttime)
|
|
|
|
|
|
{
|
|
|
|
|
|
return false;
|
|
|
|
|
|
}
|
|
|
|
|
|
QEventLoop eventloop;
|
|
|
|
|
|
QTimer::singleShot(1000,&eventloop,SLOT(quit()));
|
|
|
|
|
|
eventloop.exec();
|
|
|
|
|
|
vector<SProcess> procVec;
|
|
|
|
|
|
float disk = 0.0;
|
|
|
|
|
|
DataMng::instance()->getRunProcInfo(procVec,disk);
|
|
|
|
|
|
for(size_t index(0);index<procVec.size();index++)
|
|
|
|
|
|
{
|
|
|
|
|
|
if(procVec[index].m_appId == appId && procVec[index].m_procName == strProcName.toStdString() && procVec[index].m_isStartUp == EN_PROC_STOP)
|
|
|
|
|
|
{
|
|
|
|
|
|
return true;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
checkCount++;
|
|
|
|
|
|
}
|
|
|
|
|
|
return false;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void MainWindow::blockSignal(bool block)
|
|
|
|
|
|
{
|
|
|
|
|
|
m_updateSysTimer->blockSignals(block);
|
|
|
|
|
|
m_checkObj->blockSignals(block);
|
|
|
|
|
|
m_pAppMng->blockAppSignals(block);
|
|
|
|
|
|
m_pProcMng->blockAppSignals(block);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
bool MainWindow::checkNet()
|
|
|
|
|
|
{
|
|
|
|
|
|
QNetworkConfigurationManager manager;
|
|
|
|
|
|
|
2025-06-16 20:27:07 +08:00
|
|
|
|
#ifdef OS_LINUX
|
2025-03-12 10:03:16 +08:00
|
|
|
|
QList<QNetworkConfiguration> activeConfigs = manager.allConfigurations(QNetworkConfiguration::Active);
|
|
|
|
|
|
bool hasNonLocal = false;
|
|
|
|
|
|
for (int i = 0; i < activeConfigs.size(); i++)
|
|
|
|
|
|
{
|
|
|
|
|
|
|
2025-06-16 20:27:07 +08:00
|
|
|
|
if (!activeConfigs[i].identifier().contains("/org/freedesktop/NetworkManager/Settings/"))
|
|
|
|
|
|
{
|
|
|
|
|
|
hasNonLocal = true;
|
|
|
|
|
|
}
|
2025-03-12 10:03:16 +08:00
|
|
|
|
}
|
|
|
|
|
|
#endif
|
|
|
|
|
|
if(manager.isOnline()
|
|
|
|
|
|
#ifdef OS_LINUX
|
|
|
|
|
|
&& hasNonLocal
|
|
|
|
|
|
#endif
|
|
|
|
|
|
)
|
|
|
|
|
|
{
|
|
|
|
|
|
return true;
|
|
|
|
|
|
}
|
|
|
|
|
|
else
|
|
|
|
|
|
{
|
|
|
|
|
|
return false;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void MainWindow::checkDog()
|
|
|
|
|
|
{
|
|
|
|
|
|
if(!m_ptrDogAuthApi)
|
|
|
|
|
|
{
|
|
|
|
|
|
LOGERROR("创建加密狗实例失败");
|
|
|
|
|
|
return ;
|
|
|
|
|
|
}
|
2025-03-13 11:50:23 +08:00
|
|
|
|
if(iotSuccess != m_ptrDogAuthApi->checkAuthStatus())
|
2025-03-12 10:03:16 +08:00
|
|
|
|
{
|
|
|
|
|
|
if(m_bLastDogStatus == true)
|
|
|
|
|
|
{
|
|
|
|
|
|
m_bLastDogStatus = false;
|
|
|
|
|
|
if(m_pDogMessBox == Q_NULLPTR)
|
|
|
|
|
|
{
|
|
|
|
|
|
m_pDogMessBox = new QMessageBox(this);
|
|
|
|
|
|
m_pDogMessBox->setWindowTitle(tr("提示"));
|
|
|
|
|
|
m_pDogMessBox->setText(tr("加密狗退出"));
|
|
|
|
|
|
m_pDogMessBox->show();
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
else
|
|
|
|
|
|
{
|
|
|
|
|
|
m_bLastDogStatus = true;
|
|
|
|
|
|
if(m_pDogMessBox != Q_NULLPTR)
|
|
|
|
|
|
{
|
|
|
|
|
|
delete m_pDogMessBox;
|
|
|
|
|
|
}
|
|
|
|
|
|
m_pDogMessBox = Q_NULLPTR;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void MainWindow::verifyIp()
|
|
|
|
|
|
{
|
|
|
|
|
|
updateVerifyIp(checkNet() == true ? IP_VERIFY:IP_NOT_VERIFY);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void MainWindow::updateVerifyIp(int verifyValue)
|
|
|
|
|
|
{
|
2025-03-13 11:50:23 +08:00
|
|
|
|
return;//暂时不写sys_ctrl文件,一直写这个文件会存在问题, 在linux系统下,突然断电会经常导致此文件损坏
|
2025-03-12 14:17:53 +08:00
|
|
|
|
QString path = iot_public::CFileUtil::getPathOfCfgFile("sys_ctrl.xml",CN_DIR_PLATFORM).c_str();
|
2025-03-12 10:03:16 +08:00
|
|
|
|
QFile file(path);
|
|
|
|
|
|
if(!file.open(QFile::ReadOnly))
|
|
|
|
|
|
{
|
|
|
|
|
|
file.close();
|
|
|
|
|
|
LOGERROR("updateVerifyIp(): 文件打开失败,路径:[%s]",path.toStdString().c_str());
|
|
|
|
|
|
return ;
|
|
|
|
|
|
}
|
|
|
|
|
|
QDomDocument doc;
|
|
|
|
|
|
if(!doc.setContent(&file))
|
|
|
|
|
|
{
|
|
|
|
|
|
file.close();
|
|
|
|
|
|
LOGERROR("updateVerifyIp(): 文件读取失败,路径:[%s]",path.toStdString().c_str());
|
|
|
|
|
|
return ;
|
|
|
|
|
|
}
|
|
|
|
|
|
file.close();
|
|
|
|
|
|
QDomElement root=doc.documentElement();
|
|
|
|
|
|
if(root.tagName()!="root")
|
|
|
|
|
|
{
|
|
|
|
|
|
LOGERROR("updateVerifyIp(): 文件内容错误,不包含[root],路径:[%s]",path.toStdString().c_str());
|
|
|
|
|
|
return ;
|
|
|
|
|
|
}
|
|
|
|
|
|
QDomNode module=root.firstChild();
|
|
|
|
|
|
QDomElement element=module.toElement();
|
|
|
|
|
|
if(!element.isNull())
|
|
|
|
|
|
{
|
|
|
|
|
|
if(element.nodeName()=="module")
|
|
|
|
|
|
{
|
|
|
|
|
|
QDomNodeList list=element.childNodes();
|
|
|
|
|
|
for(int i=0;i<list.count();++i)
|
|
|
|
|
|
{
|
|
|
|
|
|
QDomNode node=list.at(i);
|
|
|
|
|
|
if(node.toElement().attribute("key")=="verify_ip")
|
|
|
|
|
|
{
|
|
|
|
|
|
node.toElement().setAttribute("value",verifyValue);
|
|
|
|
|
|
if(!file.open(QFile::WriteOnly|QFile::Truncate))
|
|
|
|
|
|
{
|
|
|
|
|
|
return ;
|
|
|
|
|
|
}
|
|
|
|
|
|
QTextStream ts(&file);
|
|
|
|
|
|
doc.save(ts,4);
|
|
|
|
|
|
file.close();
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void MainWindow::openHmi()
|
|
|
|
|
|
{
|
|
|
|
|
|
#ifdef Q_OS_WIN
|
|
|
|
|
|
const std::string strFileName = "hmi_explorer.bat";
|
2025-03-12 14:17:53 +08:00
|
|
|
|
const std::string strPath = std::move( iot_public::CFileUtil::getPathOfBinFile(strFileName));
|
2025-03-12 10:03:16 +08:00
|
|
|
|
if(strPath.empty())
|
|
|
|
|
|
{
|
|
|
|
|
|
LOGERROR("未找到脚本文件[%s]",strFileName.c_str());
|
|
|
|
|
|
return;
|
|
|
|
|
|
}
|
|
|
|
|
|
system(strPath.c_str());
|
|
|
|
|
|
#else
|
|
|
|
|
|
const std::string strFileName = "hmi_explorer.sh";
|
2025-03-12 14:17:53 +08:00
|
|
|
|
const std::string strPath = std::move( iot_public::CFileUtil::getPathOfBinFile(strFileName));
|
2025-03-12 10:03:16 +08:00
|
|
|
|
if(strPath.empty())
|
|
|
|
|
|
{
|
|
|
|
|
|
LOGERROR("未找到脚本文件[%s]",strFileName.c_str());
|
|
|
|
|
|
return;
|
|
|
|
|
|
}
|
|
|
|
|
|
QProcess::startDetached(QString("bash -c '%1'").arg(strPath.c_str()));
|
|
|
|
|
|
#endif
|
|
|
|
|
|
}
|