diff --git a/LFtid1056/cloudfront/code/interface.cpp b/LFtid1056/cloudfront/code/interface.cpp index 638d62a..457faef 100644 --- a/LFtid1056/cloudfront/code/interface.cpp +++ b/LFtid1056/cloudfront/code/interface.cpp @@ -1246,6 +1246,9 @@ int transfer_json_qvvr_data(const std::string& dev_id, ushort monitor_id, get_terminal_name_by_terminal_id(dev_id, devname); get_monitor_name_by_monitor_id(mpid, mpname); + const char* showName_d = devname.empty() ? dev_id.c_str() : devname.c_str(); + const char* showName_m = devname.empty() ? mpid.c_str() : mpname.c_str(); + root["monitorId"] = mpid; root["devId"] = dev_id; root["CpuNo"] = monitor_id; @@ -1289,7 +1292,7 @@ int transfer_json_qvvr_data(const std::string& dev_id, ushort monitor_id, // 有效响应,略过 } catch (...) { // 响应异常,保存 json - DIY_ERRORLOG_CODE(mpid.c_str(),2,LOG_CODE_TRANSIENT_COMM, "暂态接口响应异常,无法上送装置%s - 监测点%s的暂态事件",devname.c_str(), mpname.c_str()); + DIY_ERRORLOG_CODE(mpid.c_str(),2,LOG_CODE_TRANSIENT_COMM, "暂态接口响应异常,无法上送装置%s - 监测点%s的暂态事件",showName_d, showName_m); std::cout << "qvvr send fail ,store in local" << std::endl; std::string qvvrDir = FRONT_PATH + "/dat/qvvr/"; @@ -1299,7 +1302,7 @@ int transfer_json_qvvr_data(const std::string& dev_id, ushort monitor_id, } } else { // 无响应,保存 json - DIY_ERRORLOG_CODE(mpid.c_str(),2,LOG_CODE_TRANSIENT_COMM,"暂态接口无响应,无法上送装置%s - 监测点%s的暂态事件",devname.c_str(), mpname.c_str()); + DIY_ERRORLOG_CODE(mpid.c_str(),2,LOG_CODE_TRANSIENT_COMM,"暂态接口无响应,无法上送装置%s - 监测点%s的暂态事件",showName_d, showName_m); std::cout << "qvvr send fail ,store in local" << std::endl; std::string qvvrDir = FRONT_PATH + "/dat/qvvr/"; @@ -1395,33 +1398,88 @@ bool get_monitor_id_by_dev_and_seq(const std::string& terminal_id, return false; } -// 根据 monitor_id 查 monitor_name -bool get_monitor_name_by_monitor_id(const std::string& monitor_id, - std::string& out_monitor_name) -{ - std::lock_guard lk(ledgermtx); +////////////////////////////////////////////////////////////////////////// - for (const auto& dev : terminal_devlist) { - for (const auto& mon : dev.line) { - if (mon.monitor_id == monitor_id) { - out_monitor_name = mon.monitor_name; - return true; - } - } - } - return false; +static std::string normalize_id(std::string s) +{ + // 去首尾空白和 CRLF + auto is_space = [](char c) { + return c == ' ' || c == '\t' || c == '\r' || c == '\n'; + }; + + // trim left + size_t start = 0; + while (start < s.size() && is_space(s[start])) ++start; + + // trim right + size_t end = s.size(); + while (end > start && is_space(s[end - 1])) --end; + + s = s.substr(start, end - start); + + // 如有需要可统一大小写(terminal_id 一般是 hex) + // std::transform(s.begin(), s.end(), s.begin(), ::tolower); + + return s; } bool get_terminal_name_by_terminal_id(const std::string& terminal_id, std::string& out_terminal_name) { + std::string key = normalize_id(terminal_id); + std::lock_guard lk(ledgermtx); for (const auto& dev : terminal_devlist) { - if (dev.terminal_id == terminal_id) { + std::string dev_id = normalize_id(dev.terminal_id); + if (dev_id == key) { out_terminal_name = dev.terminal_name; return true; } } + + // ❌ 没找到,打印诊断日志(只在失败时) + std::ostringstream oss; + oss << "terminal_id not found: '" << terminal_id + << "' (normalized='" << key << "'), existing ids: "; + + int cnt = 0; + for (const auto& dev : terminal_devlist) { + if (cnt++ >= 5) { oss << "..."; break; } // 防止日志过长 + oss << "'" << dev.terminal_id << "' "; + } + + std::cerr << "[LEDGER] " << oss.str() << std::endl; + + out_terminal_name.clear(); return false; -} \ No newline at end of file +} + + +bool get_monitor_name_by_monitor_id(const std::string& monitor_id, + std::string& out_monitor_name) +{ + std::string key = normalize_id(monitor_id); + + std::lock_guard lk(ledgermtx); + + for (const auto& dev : terminal_devlist) { + for (const auto& mon : dev.line) { + std::string mon_id = normalize_id(mon.monitor_id); + if (mon_id == key) { + out_monitor_name = mon.monitor_name; + return true; + } + } + } + + // ❌ 诊断输出 + std::ostringstream oss; + oss << "monitor_id not found: '" << monitor_id + << "' (normalized='" << key << "')"; + + std::cerr << "[LEDGER] " << oss.str() << std::endl; + + out_monitor_name.clear(); + return false; +} diff --git a/LFtid1056/cloudfront/code/rocketmq.cpp b/LFtid1056/cloudfront/code/rocketmq.cpp index 1b00d60..dee7932 100644 --- a/LFtid1056/cloudfront/code/rocketmq.cpp +++ b/LFtid1056/cloudfront/code/rocketmq.cpp @@ -1051,8 +1051,25 @@ rocketmq::ConsumeStatus myMessageCallbackrtdata(const rocketmq::MQMessageExt& ms return rocketmq::RECONSUME_LATER; } + //20260109添加装置判断流程 + { + std::lock_guard lock(ledgermtx); + const terminal_dev* targetDev = NULL; + for (std::vector::const_iterator it = terminal_devlist.begin(); it != terminal_devlist.end(); ++it) { + if (it->terminal_id == devid) { targetDev = &(*it); break; } + } + if (!targetDev) { + std::cout << "terminalId未匹配当前进程内装置: " << devid << std::endl; + return rocketmq::CONSUME_SUCCESS; + } + } + get_terminal_name_by_terminal_id(devid, devname); + const char* showName = devname.empty() ? devid.c_str() : devname.c_str(); + + std::cout << "[DBG] showName used in log = '" << showName << "'" << std::endl; + // 加锁访问台账 if( !devid.empty() && line > 0){ //不再使用文件触发方式,直接调用接口向终端发起请求 @@ -1063,7 +1080,7 @@ rocketmq::ConsumeStatus myMessageCallbackrtdata(const rocketmq::MQMessageExt& ms if (ClientManager::instance().get_dev_status(devid) != 1) { std::cout << "devid对应装置不在线: " << devid << std::endl; // 记录日志不响应 web 端 - DIY_ERRORLOG_CODE("process",0,LOG_CODE_COMM,"主题:%s - tag:%s的实时数据触发消息失败,装置%s不在线", G_MQCONSUMER_TOPIC_RT.c_str(),FRONT_INST.c_str(),devname.c_str()); + DIY_ERRORLOG_CODE("process",0,LOG_CODE_COMM,"主题:%s - tag:%s的实时数据触发消息失败,装置:%s 不在线", G_MQCONSUMER_TOPIC_RT.c_str(),FRONT_INST.c_str(),showName); return rocketmq::CONSUME_SUCCESS; }