#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 #include #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"); qRegisterMetaType("QStringList"); qRegisterMetaType >("ListPointInfoPtr"); qRegisterMetaType >("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()<<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::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::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()<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 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 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 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 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 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 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 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 pointList; foreach (QModelIndex index, aiList) { pointList.append(m_pAiPointTableModel->getPointInfoByRow(index.row())); } QString condition=QString(); QString calCondition=QString(); for(int conIndex = 0;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 pointList; foreach (QModelIndex index, diList) { pointList.append(m_pDiPointTableModel->getPointInfoByRow(index.row())); } QString condition=QString(); QString calCondition=QString(); for(int conIndex = 0;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::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 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 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 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 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 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()); } } }