HM-SPMS/product/src/gui/plugin/AlarmManageWidget/AlarmManageWidget.cpp
2025-03-17 09:23:17 +08:00

1194 lines
36 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 "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();
}
QDir dir(QString::fromStdString(iot_public::CFileUtil::getCurModuleDir()));
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);
m_pWriteDb = new iot_dbms::CDbApi(DB_CONN_MODEL_WRITE);
m_pReadDb = new iot_dbms::CDbApi(DB_CONN_MODEL_READ);
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;
iot_service::CPermMngApiPtr permMngPtr = iot_service::getPermMngInstance("base");
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());
}
}
}