SourceCode/Bond/Servo/AlarmManager.cpp
@@ -694,6 +694,67 @@
    return lastInsertId;
}
// 通过 alarm_event_id 解除报警(更新结束时间)
bool AlarmManager::clearAlarmByEventId(int alarmEventId, const std::string& endTime) {
    if (!m_pDB) {
        return false;
    }
    bool result = true;
    auto it = m_mapCache.find(alarmEventId);
    if (it != m_mapCache.end()) {
        std::lock_guard<std::mutex> lock(m_mutex);
        std::ostringstream query;
        query << "UPDATE alarms SET end_time = '" << endTime << "' WHERE alarm_event_id = " << alarmEventId << ";";
        bool result = m_pDB->executeQuery(query.str());
        if (result) {
            m_mapCache.erase(it);
        }
    }
    return result;
}
// 通过多个属性查找并解除报警(更新结束时间)
bool AlarmManager::clearAlarmByAttributes(int nId, int nSeverityLevel, int nDeviceId, int nUnitId, const std::string& strDescription, const std::string& endTime) {
    if (!m_pDB) {
        return false;
    }
    std::lock_guard<std::mutex> lock(m_mutex);
    // 先在缓存中查找匹配的 alarm_event_id
    int alarmEventId = -1;
    for (AlarmDataMap::const_iterator it = m_mapCache.begin(); it != m_mapCache.end(); ++it) {
        const AlarmData& alarm = it->second;
        if (alarm.nId == nId &&
            alarm.nSeverityLevel == nSeverityLevel &&
            alarm.nDeviceId == nDeviceId &&
            alarm.nUnitId == nUnitId &&
            alarm.strDescription == strDescription) {
            alarmEventId = it->first;
            break;
        }
    }
    // 如果没找到匹配的记录,则直接返回 false
    if (alarmEventId == -1) {
        return false;
    }
    // 构建 SQL 语句,使用找到的 alarm_event_id 来更新结束时间
    std::ostringstream query;
    query << "UPDATE alarms SET end_time = '" << endTime << "' WHERE alarm_event_id = " << alarmEventId << ";";
    bool result = m_pDB->executeQuery(query.str());
    if (result) {
        m_mapCache.erase(alarmEventId);
    }
    return result;
}
// 读取报警文件
bool AlarmManager::readAlarmFile(const std::string& filename) {
    std::ifstream file(filename);