mrDarker
2025-04-03 39e5424c8ce474c09ef9939f28e07232dedf3113
SourceCode/Bond/Servo/AlarmDlg.cpp
@@ -9,7 +9,7 @@
#include "Common.h"
#include <iomanip>
#define PAGE_SIZE                  10
#define PAGE_SIZE                  100
#define PAGE_BACKGROUND_COLOR         RGB(252, 252, 255)
// CAlarmDlg 对话框
@@ -53,38 +53,12 @@
         pAny->addRef();
         int code = pAny->getCode();
         if (RX_CODE_STEP_EVENT_READDATA == code) {
            LOGI("<CAlarmDlg> Accept RX_CODE_STEP_EVENT_READDATA successfully!");
            // 通知设备状态
            SERVO::CEqAlarmStep* pStep = nullptr;
            if (pAny->getPtrValue("ptr", (void*&)pStep)) {
               if (pStep != nullptr) {
                  // 获取 AlarmManager 单例
                  AlarmManager& alarmManager = AlarmManager::getInstance();
                  // 从 pStep 获取需要的参数,假设这些值是从 pStep 中获取的
                  AlarmData alarmData;
                  alarmData.nId = pStep->getAlarmId();
                  alarmData.nSeverityLevel = pStep->getAlarmLevel();
                  alarmData.nDeviceId = pStep->getEquipment()->getID();
                  alarmData.nUnitId = pStep->getUnitId();
                  alarmData.strDeviceName = alarmManager.getDeviceNameById(alarmData.nDeviceId);
                  alarmData.strUnitName = alarmManager.getUnitNameById(alarmData.nDeviceId, alarmData.nUnitId);
                  alarmData.strStartTime = getCurrentTimeString();
                  alarmData.strEndTime = "2000-01-01 00:00";
                  const AlarmInfo* pAlarmInfo = alarmManager.getAlarmInfoByID(pStep->getAlarmId());
                  alarmData.strDescription = pAlarmInfo != nullptr ? pAlarmInfo->strAlarmText : "";
                  // 插入列表控件
                  CListCtrl* pListCtrl = (CListCtrl*)GetDlgItem(IDC_LIST_ALARM);
                  if (pListCtrl != nullptr) {
                     InsertAlarmData(pListCtrl, alarmData);
                  }
               }
            }
         if (RX_CODE_ALARM_SET == code) {
            UpdatePageData();
         }
         else if (RX_CODE_ALARM_CLEAR == code) {
            UpdatePageData();
         }
      pAny->release();
      }, [&]() -> void {
@@ -141,7 +115,6 @@
   GetDlgItem(IDC_BUTTON_NEXT_PAGE)->EnableWindow(m_nCurPage < m_nTotalPages);
}
static char* pszAlarmLevel[] = {"Warning", "Error"};
void CAlarmDlg::FillDataToListCtrl(CListCtrl* pListCtrl, const std::vector<AlarmData>& vecData)
{
   if (pListCtrl == nullptr || pListCtrl->m_hWnd == nullptr) {
@@ -153,17 +126,7 @@
   // 遍历数据并插入到CListCtrl中
   for (const auto& alarm : vecData) {
      int nItem = pListCtrl->InsertItem(pListCtrl->GetItemCount(), _T(""));    // 插入新行
      CString str;
      // 设置列内容
      str.Format(_T("%d"), alarm.nId);
      pListCtrl->SetItemText(nItem, 1, str);                                // 报警ID
      pListCtrl->SetItemText(nItem, 2, pszAlarmLevel[alarm.nSeverityLevel % 2]);                                 // 等级
      pListCtrl->SetItemText(nItem, 3, alarm.strDeviceName.c_str());                // 设备名称
      pListCtrl->SetItemText(nItem, 4, alarm.strUnitName.c_str());                  // 单元名称
      pListCtrl->SetItemText(nItem, 5, alarm.strStartTime.c_str());                 // 开始时间
      pListCtrl->SetItemText(nItem, 6, alarm.strEndTime.c_str());                   // 结束时间
      pListCtrl->SetItemText(nItem, 7, alarm.strDescription.c_str());               // 描述
      InsertAlarmData(pListCtrl, alarm);
   }
   // 获取列数
@@ -171,6 +134,7 @@
   pListCtrl->SetColumnWidth(nColCount - 1, LVSCW_AUTOSIZE_USEHEADER);
}
static char* pszAlarmLevel[] = { "Warning", "Error" };
void CAlarmDlg::InsertAlarmData(CListCtrl* pListCtrl, const AlarmData& alarmData)
{
   if (pListCtrl == nullptr || pListCtrl->m_hWnd == nullptr) {
@@ -188,8 +152,7 @@
   CString str;
   str.Format(_T("%d"), alarmData.nId);
   pListCtrl->SetItemText(nNewItem, 1, str);                                 // 报警ID
   str.Format(_T("%d"), alarmData.nSeverityLevel);
   pListCtrl->SetItemText(nNewItem, 2, str);                                 // 等级
   pListCtrl->SetItemText(nNewItem, 2, pszAlarmLevel[alarmData.nSeverityLevel % 2]);   // 等级
   pListCtrl->SetItemText(nNewItem, 3, alarmData.strDeviceName.c_str());               // 设备名称
   pListCtrl->SetItemText(nNewItem, 4, alarmData.strUnitName.c_str());                 // 单元名称
   pListCtrl->SetItemText(nNewItem, 5, alarmData.strStartTime.c_str());                // 开始时间