HM-SPMS/product/src/gui/plugin/AlarmManageWidget/AlarmManageWidget.cpp

1194 lines
36 KiB
C++
Raw Normal View History

2025-03-14 17:05:48 +08:00
#include "AlarmManageWidget.h"
#include "ui_AlarmManageWidget.h"
#include "pub_logger_api/logger.h"
#include "perm_mng_api/PermMngApi.h"
#include "boost/asio/ip/host_name.hpp"
#include <QThread>
#include <QtWidgets>
#include "net_msg_bus_api/MsgBusApi.h"
#include "AlarmDevTreeView.h"
#include "AlarmDevTreeModel.h"
#include "AlarmMng.h"
#include "AlarmPointTableModel.h"
#include "AlarmManageCommon.h"
#include "AddObjAlarmDialog.h"
#include "pub_utility_api/I18N.h"
#include "pub_utility_api/FileUtil.h"
AlarmManageWidget::AlarmManageWidget(QWidget *parent, bool editMode) :
QWidget(parent),
ui(new Ui::AlarmManageWidget),
m_pDevTreeModel(Q_NULLPTR),
m_pAiPointTableModel(Q_NULLPTR),
m_pDiPointTableModel(Q_NULLPTR),
m_pThread(Q_NULLPTR),
m_pReadDb(Q_NULLPTR),
m_pWriteDb(Q_NULLPTR),
m_bIsEditMode(editMode),
m_devgName(QString()),
m_buttonGroup(Q_NULLPTR),
m_curStackIndex(0)
{
ui->setupUi(this);
m_strMediaPath = "";
qRegisterMetaType<PointInfo>("PointInfo");
qRegisterMetaType<QStringList>("QStringList");
qRegisterMetaType<QList<PointInfoPtr> >("ListPointInfoPtr");
qRegisterMetaType<QList<AlarmCalcInfoPtr> >("ListAlarmCalcInfoPtr");
initLayout();
if(!m_bIsEditMode)
{
m_buttonGroup = new QButtonGroup;
m_buttonGroup->setExclusive(true);
m_buttonGroup->addButton(ui->aibt,0);
m_buttonGroup->addButton(ui->dibt,1);
initMember();
initData();
initCurUser();
initConnect();
initView();
m_pThread->start();
}
2025-03-17 09:23:17 +08:00
QDir dir(QString::fromStdString(iot_public::CFileUtil::getCurModuleDir()));
2025-03-14 17:05:48 +08:00
dir.cdUp();
dir.cdUp();
dir.cd("data");
dir.cd("sound");
m_strMediaPath = dir.absolutePath();
}
AlarmManageWidget::~AlarmManageWidget()
{
AlarmMng::instance()->destory();
delete ui;
}
void AlarmManageWidget::initLayout()
{
ui->hsplitter->setSizes(QList<int>()<<200<<900<<300);
ui->cbAlarmPriority->setView(new QListView());
ui->cbIfLimit->setView(new QListView());
ui->cbIfObj->setView(new QListView());
ui->cbLevel->setView(new QListView());
}
void AlarmManageWidget::initMember()
{
initModel();
if(m_pThread == NULL)
{
m_pThread = new QThread();
}
AlarmMng::instance()->moveToThread(m_pThread);
2025-03-17 09:23:17 +08:00
m_pWriteDb = new iot_dbms::CDbApi(DB_CONN_MODEL_WRITE);
m_pReadDb = new iot_dbms::CDbApi(DB_CONN_MODEL_READ);
2025-03-14 17:05:48 +08:00
if(!m_pWriteDb->open())
{
LOGERROR("打开数据库失败,error:%s",m_pWriteDb->getLastErrorString().toStdString().c_str());
}
if(!m_pReadDb->open())
{
LOGERROR("打开数据库失败,error:%s",m_pReadDb->getLastErrorString().toStdString().c_str());
}
m_hostName = QString::fromStdString(boost::asio::ip::host_name());
ui->widget_3->setMinimumWidth(300);
}
void AlarmManageWidget::initModel()
{
if(m_pDevTreeModel == NULL)
{
m_pDevTreeModel = new AlarmDevTreeModel(this,ui->devTreeView);
}
//ui->devTreeView->header()->setHidden(true);
ui->devTreeView->setModel(m_pDevTreeModel);
ui->devTreeView->expandAll();
if(m_pAiPointTableModel == NULL)
{
m_pAiPointTableModel = new AlarmPointTableModel(this,ui->aitableView);
}
ui->aitableView->setModel(m_pAiPointTableModel);
ui->aitableView->setColumnWidth(0,200);
ui->aitableView->setColumnWidth(1,140);
ui->aitableView->setColumnWidth(2,180);
ui->aitableView->setColumnWidth(3,140);
ui->aitableView->setColumnWidth(4,60);
if(m_pDiPointTableModel == NULL)
{
m_pDiPointTableModel = new AlarmPointTableModel(this,ui->ditableView);
}
ui->ditableView->setModel(m_pDiPointTableModel);
ui->ditableView->setColumnWidth(0,200);
ui->ditableView->setColumnWidth(1,140);
ui->ditableView->setColumnWidth(2,180);
ui->ditableView->setColumnWidth(3,140);
ui->ditableView->setColumnWidth(4,60);
}
void AlarmManageWidget::initData()
{
ui->cbIfObj->clear();
ui->cbIfObj->addItem(tr(""),1);
ui->cbIfObj->addItem(tr(""),0);
ui->cbIfObj->setCurrentIndex(1);
ui->cbAlarmPriority->clear();
m_alarmLevelMap = AlarmMng::instance()->getAlarmLevel();
int index = 0;
QMap<int,QString >::iterator it_level = m_alarmLevelMap.begin();
while (it_level != m_alarmLevelMap.end()) {
ui->cbAlarmPriority->addItem(it_level.value(),it_level.key());
m_alarmLevelIndexMap[it_level.key()] = index++;
it_level++;
}
m_alarmLevelActionMap = AlarmMng::instance()->getAlarmLevelAction();
m_alarmActionMap = AlarmMng::instance()->getAlarmAction();
QHBoxLayout *hLayout = new QHBoxLayout;
QVBoxLayout *vLayout0 = new QVBoxLayout;
QVBoxLayout *vLayout1 = new QVBoxLayout;
index = 0;
QMap<int,QString >::iterator it = m_alarmActionMap.begin();
while (it != m_alarmActionMap.end()) {
QCheckBox *box = new QCheckBox(it.value(),ui->widget_4);
m_alarmActionCheckMap[it.key()] = box;
if(index % 2 == 0)
{
vLayout0->addWidget(box);
}else if(index % 2 == 1)
{
vLayout1->addWidget(box);
}
index++;
it++;
}
vLayout0->addStretch(100);
vLayout1->addStretch(100);
//vLayout2->addStretch(100);
hLayout->addLayout(vLayout0);
hLayout->addLayout(vLayout1);
//hLayout->addLayout(vLayout2);
ui->widget_4->setLayout(hLayout);
ui->widget_4->setEnabled(false);
alarmActionCheckChange(0);
ui->cbIfLimit->clear();
ui->cbIfLimit->addItem(tr(""),1);
ui->cbIfLimit->addItem(tr(""),0);
ui->cbLevel->clear();
ui->cbLevel->addItem(tr("0"),0);
ui->cbLevel->addItem(tr("1"),1);
ui->cbLevel->addItem(tr("2"),2);
setEnableProperty(false);
}
bool AlarmManageWidget::initCurUser()
{
m_userId = -1;
m_usergId = -1;
2025-03-17 09:23:17 +08:00
iot_service::CPermMngApiPtr permMngPtr = iot_service::getPermMngInstance("base");
2025-03-14 17:05:48 +08:00
if(permMngPtr == NULL || (PERM_NORMAL != permMngPtr->PermDllInit()))
{
LOGERROR("权限接口初始化失败!");
return false;
}
int userId;
int usergId;
int level;
int loginSec;
std::string name;
std::string userName;
std::string usergName;
if(permMngPtr->CurUser(userName,usergName,level,loginSec,name) == 0)
{
//qDebug()<<QString::fromStdString(usergName);
}
if(permMngPtr->CurUser(userId, usergId,level,loginSec,name) == 0)
{
m_userId = userId;
m_usergId = usergId;
}else
{
LOGERROR("获取当前登录用户失败!");
return false;
}
return true;
}
void AlarmManageWidget::initConnect()
{
connect(ui->lineEdit, &QLineEdit::returnPressed, this, &AlarmManageWidget::filter); //过滤
connect(ui->search,&QPushButton::clicked,this,&AlarmManageWidget::filter); //过滤
connect(AlarmMng::instance(),&AlarmMng::addAiPoint,m_pAiPointTableModel,&AlarmPointTableModel::addPoint,Qt::QueuedConnection);
connect(AlarmMng::instance(),&AlarmMng::addDiPoint,m_pDiPointTableModel,&AlarmPointTableModel::addPoint,Qt::QueuedConnection);
connect(ui->cbAlarmPriority,SIGNAL(currentIndexChanged(int)),this,SLOT(alarmActionCheckChange(int)));
connect(ui->cbIfLimit,&QComboBox::currentTextChanged,this,&AlarmManageWidget::ifLimitChange);
connect(ui->cbIfObj,&QComboBox::currentTextChanged,this,&AlarmManageWidget::ifObjChange);
connect(ui->push,&QPushButton::clicked,this,&AlarmManageWidget::getPushPicPath);
connect(ui->voice,&QPushButton::clicked,this,&AlarmManageWidget::getVoicePath);
// connect(ui->aitableView,&AlarmPointTableView::clicked,this,&AlarmManageWidget::showAiAlarmProperty);
// connect(ui->ditableView,&AlarmPointTableView::clicked,this,&AlarmManageWidget::showDiAlarmProperty);
connect(ui->devTreeView,&AlarmDevTreeView::clicked,this,&AlarmManageWidget::checkClick,Qt::QueuedConnection);
connect(this,&AlarmManageWidget::sigSelectPoint,AlarmMng::instance(),&AlarmMng::slotSelectPoint,Qt::QueuedConnection);
connect(this,&AlarmManageWidget::sigClearPointTable,m_pAiPointTableModel,&AlarmPointTableModel::slotClearPointTable,Qt::QueuedConnection);
connect(this,&AlarmManageWidget::sigClearPointTable,m_pDiPointTableModel,&AlarmPointTableModel::slotClearPointTable,Qt::QueuedConnection);
connect(ui->cbLevel,&QComboBox::currentTextChanged,this,&AlarmManageWidget::ifLimitLevelChange);
connect(ui->pushButton_5,&QPushButton::clicked,this,&AlarmManageWidget::save);
connect(ui->pushButton_2,&QPushButton::clicked,this,&AlarmManageWidget::addObjAlarm);
connect(m_buttonGroup,SIGNAL(buttonClicked(int)),this,SLOT(updateStack(int)));
connect(ui->pointFilter,&QPushButton::clicked,this,&AlarmManageWidget::filterPoint);
connect(ui->checkBox,&QCheckBox::stateChanged,this,&AlarmManageWidget::sigOrMul);
connect(ui->aitableView,&AlarmPointTableView::sigBrushProperty,this,&AlarmManageWidget::showAiProperty);
connect(ui->ditableView,&AlarmPointTableView::sigBrushProperty,this,&AlarmManageWidget::showDiProperty);
}
void AlarmManageWidget::setEnableProperty(bool enable)
{
ui->widget_3->setEnabled(enable);
}
void AlarmManageWidget::setEnableDesc(bool enable)
{
ui->groupBox_4->setEnabled(enable);
}
void AlarmManageWidget::setEnableObjAlarm(bool enable)
{
ui->groupBox_2->setEnabled(enable);
ui->groupBox_2->setHidden(!enable);
}
void AlarmManageWidget::setEnableLimitAlarm(bool enable)
{
ui->groupBox_3->setEnabled(enable);
ui->groupBox_3->setHidden(!enable);
}
void AlarmManageWidget::saveAi()
{
QModelIndexList aiList = ui->aitableView->selectionModel()->selectedRows(0);
if(aiList.size() < 1)
{
return ;
}
if(aiList.size() == 1)
{
QString desc = ui->lineEdit_3->text();
if(desc.isEmpty())
{
QMessageBox::warning(0,tr("提示"),tr("点描述不能为空!"));
return ;
}
}
if(!checkAiIfSave())
{
return ;
}
//1越限首先要修改点表然后去修改越限表
QString desc = ui->lineEdit_3->text();
m_pWriteDb->transaction();
//先修改描述(描述应不支持批量修改)
QList<PointInfoPtr> pointList;
foreach (QModelIndex index, aiList) {
pointList.append(m_pAiPointTableModel->getPointInfoByRow(index.row()));
}
if(pointList.size() == 1)
{
QString sqlUpTag =QString("update %1 set description ='%2' where tag_name ='%3'").arg("analog").arg(desc).arg(pointList.at(0)->m_tag);
m_pWriteDb->execute(sqlUpTag);
}else
{
desc = QString();
}
QString condition=QString();
for(int conIndex = 0;conIndex <pointList.size();conIndex++)
{
condition+= QString("'%1', ").arg(pointList.at(conIndex)->m_tag);
}
if(!condition.isEmpty())
{
condition.resize(condition.size() - 2);
condition = QString("%1 in (%2)").arg("tag_name").arg(condition);
}
double limitup1 = ui->doubleSpinBox->value();
double limitup2 = ui->doubleSpinBox_3->value();
double limitlow1 = ui->doubleSpinBox_2->value();
double limitlow2 = ui->doubleSpinBox_4->value();
int obj = ui->cbIfObj->currentData().toInt();
int priority = ui->cbAlarmPriority->currentData().toInt();
QString push = ui->pushText->text();
QString voice = ui->voiceText->text();
int isLimit = ui->cbIfLimit->currentData().toInt();
QString sqlupdate;
sqlupdate = QString("update %1 set is_limit = %2,sound_name1 ='%3' where %4 ").arg("analog").arg(isLimit).arg(voice).arg(condition);
m_pWriteDb->execute(sqlupdate);
QString sqldelete;
sqldelete = QString("delete from %1 where %4").arg("analog_limit_info").arg(condition);
m_pWriteDb->execute(sqldelete);
int limitLevel = ui->cbLevel->currentData().toInt();
if(isLimit == 1)
{
QString sqlinsert;
sqlinsert = QString("insert into %1 (tag_name,location_id,sub_system,limit_type,limit_num,limit_up1,limit_low1,limit_up2,limit_low2,cross_percent,return_percent,is_obj_alm_manner,alarm_priority,pic_name,is_water_alm) values ").arg("analog_limit_info");
for(int idx = 0; idx <pointList.size();idx++)
{
sqlinsert += QString(" ('%1',%2,%3,%4,%5,%6,%7,%8,%9,%10,%11,%12,%13,'%14',1), ").arg(pointList.at(idx)->m_tag).arg(pointList.at(idx)->m_loc).arg(pointList.at(idx)->m_sub).arg(1).arg(limitLevel).
arg(limitup1).arg(limitlow1).arg(limitup2).arg(limitlow2).arg(5).arg(5).arg(obj).arg(priority).arg(push);
}
sqlinsert.resize(sqlinsert.size() - 2);
m_pWriteDb->execute(sqlinsert);
}
if(!m_pWriteDb->commit())
{
QMessageBox::warning(0,tr("提示"),tr("保存失败!正在回滚事务~"));
LOGERROR("保存失败!error:%s",m_pWriteDb->getLastErrorString().toStdString().c_str());
m_pWriteDb->rollback();
}else
{
for(int index = 0;index <pointList.size();index++)
{
pointList.at(index)->m_desc =desc.isEmpty() ? pointList.at(index)->m_desc : desc;
pointList.at(index)->m_obj = isLimit == 1 ? obj: 0;
pointList.at(index)->m_priority = isLimit == 1 ? priority: -1;
}
QMessageBox::information(0,tr("提示"),tr("保存成功!"));
}
}
void AlarmManageWidget::saveDi()
{
QModelIndexList diList = ui->ditableView->selectionModel()->selectedRows(0);
if(diList.size() < 1)
{
return ;
}
if(diList.size() == 1)
{
QString desc = ui->lineEdit_3->text();
if(desc.isEmpty())
{
QMessageBox::warning(0,tr("提示"),tr("点描述不能为空!"));
return ;
}
}
QString desc = ui->lineEdit_3->text();
m_pWriteDb->transaction();
//先修改描述(描述应不支持批量修改)
QList<PointInfoPtr> pointList;
foreach (QModelIndex index, diList) {
pointList.append(m_pDiPointTableModel->getPointInfoByRow(index.row()));
}
if(pointList.size() == 1)
{
QString sqlUpTag =QString("update %1 set description ='%2' where tag_name ='%3'").arg("digital").arg(desc).arg(pointList.at(0)->m_tag);
m_pWriteDb->execute(sqlUpTag);
}else
{
desc = QString();
}
QString condition=QString();
for(int conIndex = 0;conIndex <pointList.size();conIndex++)
{
condition+= QString("'%1', ").arg(pointList.at(conIndex)->m_tag);
}
if(!condition.isEmpty())
{
condition.resize(condition.size() - 2);
condition = QString("%1 in (%2)").arg("tag_name").arg(condition);
}
int obj = ui->cbIfObj->currentData().toInt();
int priority = ui->cbAlarmPriority->currentData().toInt();
QString push = ui->pushText->text();
QString voice = ui->voiceText->text();
QString sql = QString("update %1 set is_obj_alm_manner = %2,alarm_priority = %3,pic_name ='%4' ,sound_name1= '%5' where"
" %6 ").arg("digital").arg(obj).arg(priority).arg(push).arg(voice).arg(condition);
m_pWriteDb->execute(sql);
if(!m_pWriteDb->commit())
{
QMessageBox::warning(0,tr("提示"),tr("保存失败!正在回滚事务~"));
LOGERROR("保存失败!error:%s",m_pWriteDb->getLastErrorString().toStdString().c_str());
m_pWriteDb->rollback();
}else
{
for(int index = 0;index <pointList.size();index++)
{
pointList.at(index)->m_desc =desc.isEmpty() ? pointList.at(index)->m_desc : desc;
pointList.at(index)->m_obj = obj;
pointList.at(index)->m_priority = priority;
}
QMessageBox::information(0,tr("提示"),tr("保存成功!"));
}
}
void AlarmManageWidget::showShieldProperty()
{
ui->widget_6->setEnabled(true);
}
void AlarmManageWidget::initView()
{
//禁用属性框
setEnableProperty(false);
//清空点表格
emit sigClearPointTable();
//初始化属性窗
initProperty();
initHide();
}
void AlarmManageWidget::initProperty()
{
ui->lineEdit_3->setText(""); //点标签初始化为空
ui->cbIfObj->setCurrentIndex(0);
ui->cbAlarmPriority->setCurrentIndex(0);
ui->pushText->setText("");
ui->voiceText->setText("");
ui->cbIfLimit->setCurrentIndex(1);
ui->cbLevel->setCurrentIndex(0);
ui->doubleSpinBox->setValue(0.0);
ui->doubleSpinBox_2->setValue(0.0);
ui->doubleSpinBox_3->setValue(0.0);
ui->doubleSpinBox_4->setValue(0.0);
}
void AlarmManageWidget::initHide()
{
ifLimitChange("");
ifObjChange("");
ifLimitLevelChange("");
}
void AlarmManageWidget::reLoadData(const QString &filter)
{
if(!m_devgName.isEmpty())
{
emit sigSelectPoint(m_devgName,m_curStackIndex,filter);
}
}
void AlarmManageWidget::deleteAi()
{
QModelIndexList aiList = ui->aitableView->selectionModel()->selectedRows(0);
if(aiList.size() < 1)
{
return ;
}
if(QMessageBox::No == QMessageBox::question(0, tr("提示"), tr("确认删除?")))
{
return;
}
//1删除越限表中信息 2删除测点表中信息 3删除计算量输出表中信息
m_pWriteDb->transaction();
QList<PointInfoPtr> pointList;
foreach (QModelIndex index, aiList) {
pointList.append(m_pAiPointTableModel->getPointInfoByRow(index.row()));
}
QString condition=QString();
QString calCondition=QString();
for(int conIndex = 0;conIndex <pointList.size();conIndex++)
{
condition+= QString("'%1', ").arg(pointList.at(conIndex)->m_tag);
calCondition+= QString("'analog.%1.value', ").arg(pointList.at(conIndex)->m_tag);
}
if(!condition.isEmpty())
{
condition.resize(condition.size() - 2);
condition = QString("%1 in (%2)").arg("tag_name").arg(condition);
}
if(!calCondition.isEmpty())
{
calCondition.resize(calCondition.size() - 2);
calCondition = QString("%1 in (%2)").arg("key_id_tag").arg(calCondition);
}
QString sqldel;
sqldel = QString("delete from %1 where %2").arg("analog").arg(condition);
m_pWriteDb->execute(sqldel);
sqldel = QString("delete from %1 where %4").arg("analog_limit_info").arg(condition);
m_pWriteDb->execute(sqldel);
sqldel = QString("delete from %1 where %2").arg("calc_out_para").arg(calCondition);
m_pWriteDb->execute(sqldel);
if(!m_pWriteDb->commit())
{
QMessageBox::warning(0,tr("提示"),tr("删除失败!正在回滚事务~"));
LOGERROR("删除失败!error:%s",m_pWriteDb->getLastErrorString().toStdString().c_str());
m_pWriteDb->rollback();
}else
{
initView();
reLoadData();
}
}
void AlarmManageWidget::deleteDi()
{
QModelIndexList diList = ui->ditableView->selectionModel()->selectedRows(0);
if(diList.size() < 1)
{
return ;
}
if(QMessageBox::No == QMessageBox::question(0, tr("提示"), tr("确认删除?")))
{
return;
}
m_pWriteDb->transaction();
QList<PointInfoPtr> pointList;
foreach (QModelIndex index, diList) {
pointList.append(m_pDiPointTableModel->getPointInfoByRow(index.row()));
}
QString condition=QString();
QString calCondition=QString();
for(int conIndex = 0;conIndex <pointList.size();conIndex++)
{
condition+= QString("'%1', ").arg(pointList.at(conIndex)->m_tag);
calCondition+= QString("'digital.%1.value', ").arg(pointList.at(conIndex)->m_tag);
}
if(!condition.isEmpty())
{
condition.resize(condition.size() - 2);
condition = QString("%1 in (%2)").arg("tag_name").arg(condition);
}
if(!calCondition.isEmpty())
{
calCondition.resize(calCondition.size() - 2);
calCondition = QString("%1 in (%2)").arg("key_id_tag").arg(calCondition);
}
QString sqldel;
sqldel = QString("delete from %1 where %2").arg("digital").arg(condition);
m_pWriteDb->execute(sqldel);
sqldel = QString("delete from %1 where %2").arg("calc_out_para").arg(calCondition);
m_pWriteDb->execute(sqldel);
if(!m_pWriteDb->commit())
{
QMessageBox::warning(0,tr("提示"),tr("删除失败!正在回滚事务~"));
LOGERROR("删除失败!error:%s",m_pWriteDb->getLastErrorString().toStdString().c_str());
m_pWriteDb->rollback();
}else
{
initView();
reLoadData();
}
}
void AlarmManageWidget::filter()
{
QString searchText = ui->lineEdit->text();
m_pDevTreeModel->setFilter(searchText);
}
void AlarmManageWidget::alarmActionCheckChange(int index)
{
Q_UNUSED(index);
int priority = ui->cbAlarmPriority->currentData().toInt();
int act = m_alarmLevelActionMap.value(priority,0);
QMap<int,QCheckBox*>::iterator it = m_alarmActionCheckMap.begin();
while (it != m_alarmActionCheckMap.end()) {
it.value()->setChecked(false);
if(act>>(it.key()-1) & 0x0001)
{
it.value()->setChecked(true);
}
it++;
}
}
void AlarmManageWidget::ifLimitChange(const QString &)
{
int index = ui->cbIfLimit->currentData().toInt();
if(index == 1)
{
ui->widget_7->setEnabled(true);
ui->widget_7->setHidden(false);
ui->widget_10->setHidden(false);
setEnableObjAlarm(true);
}else if(index == 0)
{
ui->widget_7->setEnabled(false);
ui->widget_10->setHidden(true);
setEnableObjAlarm(false);
}
}
void AlarmManageWidget::ifObjChange(const QString &)
{
int index = ui->cbIfObj->currentData().toInt();
if(index == 1)
{
ui->cbAlarmPriority->setEnabled(true);
}else if(index == 0)
{
ui->cbAlarmPriority->setEnabled(false);
}
}
void AlarmManageWidget::getPushPicPath()
{
QString fileName = QFileDialog::getOpenFileName(this,
tr("Open Pic"), "../../data/pic", tr("Pic Files (*.glx)"));
if(!fileName.isEmpty())
{
QStringList list = fileName.split("pic/");
ui->pushText->setText(list.at(list.size()-1));
}
}
void AlarmManageWidget::getVoicePath()
{
QString fileName = QFileDialog::getOpenFileName(this,
tr("Open Voice"), m_strMediaPath, tr("Pic Files (*.wav)"));
if(!fileName.isEmpty())
{
QStringList list = fileName.split("/");
ui->voiceText->setText(list.at(list.size()-1));
}
}
void AlarmManageWidget::showAiAlarmProperty(const QModelIndex &cur)
{
initProperty();
initHide();
setEnableProperty(true);
setEnableDesc(true);
setEnableObjAlarm(true);
setEnableLimitAlarm(true);
ui->widget_10->setHidden(false);
QModelIndexList indexList = ui->aitableView->selectionModel()->selectedRows(0);
QList<int> rowList;
QString strText;
for(QModelIndex index :indexList)
{
rowList.append(index.row());
strText = QString("%1 %2").arg(strText).arg(index.row());
}
int size = rowList.size();
if(size < 1)
{
setEnableProperty(false);
setEnableLimitAlarm(true);
setEnableObjAlarm(false);
ui->widget_10->setHidden(true);
return ;
}
PointInfoPtr info;
if(rowList.contains(cur.row()))
{
info = m_pAiPointTableModel->getPointInfoByRow(cur.row());
}else
{
info = m_pAiPointTableModel->getPointInfoByRow(rowList.last());
}
ui->lineEdit_3->setText(info->m_desc);
ST_LIMIT_INFO limitInfo;
ST_OBJ_INFO objInfo;
bool isLimit = AlarmMng::instance()->isAiObjAlarm(info,objInfo,limitInfo);
if(isLimit)
{
setEnableObjAlarm(true);
ui->cbIfLimit->setCurrentIndex(0);
ui->cbLevel->setCurrentIndex(limitInfo.iLevel);
ui->doubleSpinBox->setValue(limitInfo.dLimitUp1);
ui->doubleSpinBox_2->setValue(limitInfo.dLimitDown1);
ui->doubleSpinBox_3->setValue(limitInfo.dLimitUp2);
ui->doubleSpinBox_4->setValue(limitInfo.dLimitDown2);
ui->voiceText->setText(objInfo.strVoice);
ui->pushText->setText(objInfo.strPushPic);
ui->cbIfObj->setCurrentIndex(objInfo.bIsObj ? 0:1);
ui->cbAlarmPriority->setCurrentIndex(m_alarmLevelIndexMap.value(objInfo.iPriority));
}else
{
ui->cbIfLimit->setCurrentIndex(1);
ui->widget_10->setHidden(true);
ui->doubleSpinBox->setValue(0.0);
ui->doubleSpinBox_2->setValue(0.0);
ui->doubleSpinBox_3->setValue(0.0);
ui->doubleSpinBox_4->setValue(0.0);
}
ifLimitChange("");
ifObjChange("");
if(size > 1)
{
ui->lineEdit_3->setText(""); //点标签初始化为空
setEnableDesc(false);
}
}
void AlarmManageWidget::showDiAlarmProperty(const QModelIndex &index)
{
initProperty();
initHide();
setEnableProperty(true);
setEnableDesc(true);
setEnableObjAlarm(true);
setEnableLimitAlarm(false);
ui->widget_10->setHidden(false);
QModelIndexList indexList = ui->ditableView->selectionModel()->selectedRows(0);
QList<int> rowList;
for(QModelIndex index :indexList)
{
rowList.append(index.row());
}
int size = rowList.size();
if(size < 1)
{
setEnableProperty(false);
return ;
}
PointInfoPtr info;
if(indexList.contains(index))
{
info = m_pDiPointTableModel->getPointInfoByRow(index.row());
}else
{
info = m_pDiPointTableModel->getPointInfoByRow(rowList.last());
}
ui->lineEdit_3->setText(info->m_desc);
ST_OBJ_INFO objInfo;
bool isObj = AlarmMng::instance()->isDiObjAlarm(info,objInfo);
ui->pushText->setText(objInfo.strPushPic);
ui->voiceText->setText(objInfo.strVoice);
ui->cbIfObj->setCurrentIndex(isObj ? 0:1);
ui->cbAlarmPriority->setCurrentIndex(m_alarmLevelIndexMap.value(objInfo.iPriority));
ifObjChange("");
if(size > 1)
{
ui->lineEdit_3->setText(""); //点标签初始化为空
setEnableDesc(false);
}
}
void AlarmManageWidget::showAiProperty()
{
initProperty();
initHide();
setEnableProperty(true);
setEnableDesc(true);
setEnableObjAlarm(true);
setEnableLimitAlarm(true);
ui->widget->setHidden(false);
QModelIndexList indexList = ui->aitableView->selectionModel()->selectedRows(0);
QList<int> rowList;
for(QModelIndex index :indexList)
{
rowList.append(index.row());
}
int size = rowList.size();
if(size < 1)
{
setEnableProperty(false);
setEnableLimitAlarm(true);
setEnableObjAlarm(false);
ui->widget_10->setHidden(true);
return ;
}
PointInfoPtr info = m_pAiPointTableModel->getPointInfoByRow(rowList.last());
ui->lineEdit_3->setText(info->m_desc);
ST_LIMIT_INFO limitInfo;
ST_OBJ_INFO objInfo;
bool isLimit = AlarmMng::instance()->isAiObjAlarm(info,objInfo,limitInfo);
if(isLimit)
{
setEnableObjAlarm(true);
ui->cbIfLimit->setCurrentIndex(0);
ui->cbLevel->setCurrentIndex(limitInfo.iLevel);
ui->doubleSpinBox->setValue(limitInfo.dLimitUp1);
ui->doubleSpinBox_2->setValue(limitInfo.dLimitDown1);
ui->doubleSpinBox_3->setValue(limitInfo.dLimitUp2);
ui->doubleSpinBox_4->setValue(limitInfo.dLimitDown2);
ui->voiceText->setText(objInfo.strVoice);
ui->pushText->setText(objInfo.strPushPic);
ui->cbIfObj->setCurrentIndex(objInfo.bIsObj ? 0:1);
ui->cbAlarmPriority->setCurrentIndex(m_alarmLevelIndexMap.value(objInfo.iPriority));
}else
{
ui->cbIfLimit->setCurrentIndex(1);
ui->widget_10->setHidden(true);
ui->doubleSpinBox->setValue(0.0);
ui->doubleSpinBox_2->setValue(0.0);
ui->doubleSpinBox_3->setValue(0.0);
ui->doubleSpinBox_4->setValue(0.0);
}
ifLimitChange("");
ifObjChange("");
if(size > 1)
{
ui->lineEdit_3->setText(""); //点标签初始化为空
setEnableDesc(false);
}
}
void AlarmManageWidget::showDiProperty()
{
initProperty();
initHide();
setEnableProperty(true);
setEnableDesc(true);
setEnableObjAlarm(true);
setEnableLimitAlarm(false);
ui->widget_10->setHidden(false);
QModelIndexList indexList = ui->ditableView->selectionModel()->selectedRows(0);
QList<int> rowList;
for(QModelIndex index :indexList)
{
rowList.append(index.row());
}
int size = rowList.size();
if(size < 1)
{
setEnableProperty(false);
return ;
}
PointInfoPtr info = m_pDiPointTableModel->getPointInfoByRow(rowList.last());
ui->lineEdit_3->setText(info->m_desc);
ST_OBJ_INFO objInfo;
bool isObj = AlarmMng::instance()->isDiObjAlarm(info,objInfo);
ui->pushText->setText(objInfo.strPushPic);
ui->voiceText->setText(objInfo.strVoice);
ui->cbIfObj->setCurrentIndex(isObj ? 0:1);
ui->cbAlarmPriority->setCurrentIndex(m_alarmLevelIndexMap.value(objInfo.iPriority));
ifObjChange("");
if(size > 1)
{
ui->lineEdit_3->setText(""); //点标签初始化为空
setEnableDesc(false);
}
}
void AlarmManageWidget::checkClick(const QModelIndex &index)
{
int type =index.data(Qt::UserRole+1).toInt();
initView();
m_devgName = QString();
if(type != DEV_GROUP_TYPE)
{
return;
}
m_devgName = index.data(Qt::UserRole).toString();
reLoadData();
if(m_curStackIndex == EN_POINT_AI_INDEX)
{
setEnableObjAlarm(false);
setEnableLimitAlarm(true);
ui->widget_10->setHidden(true);
}else
{
setEnableLimitAlarm(false);
setEnableObjAlarm(true);
ui->widget_10->setHidden(false);
}
}
void AlarmManageWidget::ifLimitLevelChange(const QString &)
{
int index = ui->cbLevel->currentData().toInt();
if(index == 1)
{
ui->doubleSpinBox->setEnabled(true);
ui->doubleSpinBox_2->setEnabled(true);
ui->doubleSpinBox_3->setEnabled(false);
ui->doubleSpinBox_4->setEnabled(false);
}else if(index == 2)
{
ui->doubleSpinBox->setEnabled(true);
ui->doubleSpinBox_2->setEnabled(true);
ui->doubleSpinBox_3->setEnabled(true);
ui->doubleSpinBox_4->setEnabled(true);
}else if(index == 0)
{
ui->doubleSpinBox->setEnabled(false);
ui->doubleSpinBox_2->setEnabled(false);
ui->doubleSpinBox_3->setEnabled(false);
ui->doubleSpinBox_4->setEnabled(false);
}
}
void AlarmManageWidget::save()
{
if(!AlarmMng::instance()->getNomRptEditPerm())
{
QMessageBox::warning(this,tr("提示"),tr("当前登录用户无修改权限!"));
return;
}
if(m_curStackIndex == EN_POINT_AI_INDEX)
{
saveAi();
}else if(m_curStackIndex == EN_POINT_DI_INDEX)
{
saveDi();
}
}
bool AlarmManageWidget::checkAiIfSave()
{
int isLimit = ui->cbIfLimit->currentData().toInt();
if(isLimit == 1)
{
int level = ui->cbLevel->currentData().toInt();
double limitup1 = ui->doubleSpinBox->value();
double limitup2 = ui->doubleSpinBox_3->value();
double limitlow1 = ui->doubleSpinBox_2->value();
double limitlow2 = ui->doubleSpinBox_4->value();
if(level == 2)
{
if(limitlow2 >= limitlow1)
{
QMessageBox::warning(0,tr("提示"),tr("越下下限值必须小于越下限值"));
return false;
}
if(limitlow1>= limitup1)
{
QMessageBox::warning(0,tr("提示"),tr("越下限值必须小于越上限值"));
return false;
}
if(limitup1>=limitup2)
{
QMessageBox::warning(0,tr("提示"),tr("越上限值必须小于越上上限值"));
return false;
}
}else if(level == 1)
{
if(limitlow1>=limitup1)
{
QMessageBox::warning(0,tr("提示"),tr("越下限值必须小于越上限值"));
return false;
}
}
}
return true;
}
void AlarmManageWidget::addObjAlarm()
{
if(!AlarmMng::instance()->getNomRptEditPerm())
{
QMessageBox::warning(this,tr("提示"),tr("当前登录用户无新增告警点权限!"));
return;
}
if(m_devgName.isEmpty())
{
QMessageBox::warning(this,tr("提示"),tr("请选择要添加自定义告警的设备组!"));
return ;
}
QList<ST_DEV_INFO> devList;
devList = AlarmMng::instance()->getDevInfoByDevGroup(m_devgName);
if(devList.isEmpty())
{
QMessageBox::warning(this,tr("提示"),tr("此设备组下无可用设备,请重新选择设备组!"));
return ;
}
AddObjAlarmDialog dlg(devList,this);
dlg.setModal(true);
if(dlg.exec() == QDialog::Accepted)
{
initView();
reLoadData();//重新刷新数据,防止数据不一致
}
}
void AlarmManageWidget::updateStack(int index)
{
if(m_curStackIndex == index)
{
return ;
}
m_curStackIndex = index;
initView();
reLoadData();
ui->stackedWidget->setCurrentIndex(index);
if(m_curStackIndex == EN_POINT_AI_INDEX)
{
setEnableObjAlarm(false);
setEnableLimitAlarm(true);
ui->widget_10->setHidden(true);
}else
{
setEnableLimitAlarm(false);
setEnableObjAlarm(true);
ui->widget_10->setHidden(false);
}
}
void AlarmManageWidget::filterPoint()
{
QString searchText = ui->pointFilterLineEdit->text();
initView();
reLoadData(searchText);
}
void AlarmManageWidget::sigOrMul(int checked)
{
ui->aitableView->clearSelection();
ui->ditableView->clearSelection();
if(checked == 2)
{
ui->aitableView->setSelectionMode(QAbstractItemView::MultiSelection);
ui->ditableView->setSelectionMode(QAbstractItemView::MultiSelection);
}else if(checked == 0)
{
ui->aitableView->setSelectionMode(QAbstractItemView::SingleSelection);
ui->ditableView->setSelectionMode(QAbstractItemView::SingleSelection);
}
initProperty();
setEnableProperty(false);
}
void AlarmManageWidget::contextMenuEvent(QContextMenuEvent *event)
{
QWidget::contextMenuEvent(event);
if(m_curStackIndex == EN_POINT_AI_INDEX)
{
if(!m_pAiPointTableModel)
{
return ;
}
if(event->pos().x() < ui->aitableView->pos().x())
{
return;
}
QRect headerRect = ui->aitableView->horizontalHeader()->rect();
headerRect.moveTopLeft(ui->aitableView->mapTo(this, QPoint()));
if(!headerRect.contains(event->pos()))
{
QModelIndex index_ = ui->aitableView->indexAt(ui->aitableView->mapFromGlobal(event->globalPos() - QPoint(0, headerRect.height())));
if(!index_.isValid())
{
return;
}
QMenu menu(this);
if(!ui->checkBox->isChecked())
{
// showAiProperty();
// return ;
}else
{
QAction * selectAction = menu.addAction(tr("全选"));
connect(selectAction, &QAction::triggered, [=](){ui->aitableView->selectAll();showAiProperty();});
}
QAction * cancleAction = menu.addAction(tr("全不选"));
connect(cancleAction,&QAction::triggered,[=](){ui->aitableView->clearSelection();setEnableProperty(false);initProperty();});
QAction * delAction = menu.addAction(tr("删除"));
connect(delAction,&QAction::triggered,[=](){deleteAi();});
menu.exec(QCursor::pos());
}
}else
{
if(!m_pDiPointTableModel)
{
return ;
}
if(event->pos().x() < ui->ditableView->pos().x())
{
return;
}
QRect headerRect = ui->ditableView->horizontalHeader()->rect();
headerRect.moveTopLeft(ui->ditableView->mapTo(this, QPoint()));
if(!headerRect.contains(event->pos()))
{
QModelIndex index_ = ui->ditableView->indexAt(ui->ditableView->mapFromGlobal(event->globalPos() - QPoint(0, headerRect.height())));
if(!index_.isValid())
{
return;
}
QMenu menu(this);
if(!ui->checkBox->isChecked())
{
// showDiProperty();
// return ;
}else
{
QAction * selectAction = menu.addAction(tr("全选"));
connect(selectAction, &QAction::triggered, [=](){ui->ditableView->selectAll();showDiProperty();});
}
QAction * cancleAction = menu.addAction(tr("全不选"));
connect(cancleAction,&QAction::triggered,[=](){ui->ditableView->clearSelection();setEnableProperty(false);initProperty();});
QAction * delAction = menu.addAction(tr("删除"));
connect(delAction,&QAction::triggered,[=](){deleteDi();});
menu.exec(QCursor::pos());
}
}
}