diff --git a/LFtid1056/cloudfront/code/cfg_parser.cpp b/LFtid1056/cloudfront/code/cfg_parser.cpp index c60484a..ea7603c 100644 --- a/LFtid1056/cloudfront/code/cfg_parser.cpp +++ b/LFtid1056/cloudfront/code/cfg_parser.cpp @@ -3320,93 +3320,102 @@ bool update_qvvr_file_download(const std::string& filename_with_mac_in, const st // 找到其中的 .cfg 文件进行匹配 for (const auto& fpath : qfile.file_download) { std::string fname = extract_filename1(fpath); - if (fname.size() >= 4 && fname.substr(fname.size() - 4) == ".cfg") { - // 提取文件时标和监测点事件的时标匹配 - qvvr_data matched; - if (compare_qvvr_and_file(fpath, monitor.qvvrevent.qvvrdata,matched)) { - qfile.is_pair = true; // 文件与事件匹配成功 + if (fname.size() >= 4) { + std::string ext = fname.substr(fname.size() - 4); + std::transform(ext.begin(), ext.end(), ext.begin(), ::tolower); + if (ext == ".cfg") { + //if (fname.size() >= 4 && fname.substr(fname.size() - 4) == ".cfg") { + // 提取文件时标和监测点事件的时标匹配 + qvvr_data matched; + if (compare_qvvr_and_file(fpath, monitor.qvvrevent.qvvrdata,matched)) { + qfile.is_pair = true; // 文件与事件匹配成功 - // ★新增:上传前拷贝“将要上传的文件列表”,避免锁外用容器引用 - std::vector files_to_send(qfile.file_download.begin(), - qfile.file_download.end()); + // ★新增:上传前拷贝“将要上传的文件列表”,避免锁外用容器引用 + std::vector files_to_send(qfile.file_download.begin(), + qfile.file_download.end()); - // ★新增:构造一个临时 qvvr_file,仅用于上传(不改动原结构) - qvvr_file tmp_send; - tmp_send.file_download.assign(files_to_send.begin(), files_to_send.end()); + // ★新增:构造一个临时 qvvr_file,仅用于上传(不改动原结构) + qvvr_file tmp_send; + tmp_send.file_download.assign(files_to_send.begin(), files_to_send.end()); - // 发送所有文件(已下载完成) - std::string wavepath; + // 发送所有文件(已下载完成) + std::string wavepath; - // ★在解锁前,备份“签名”,用于回锁后定位同一个 qfile - std::set sig_names(qfile.file_name.begin(), qfile.file_name.end()); - std::set sig_downs(qfile.file_download.begin(), qfile.file_download.end()); + // ★在解锁前,备份“签名”,用于回锁后定位同一个 qfile + std::set sig_names(qfile.file_name.begin(), qfile.file_name.end()); + std::set sig_downs(qfile.file_download.begin(), qfile.file_download.end()); - // ★修改:把上传与上送 JSON 放到“解锁区间” - lock.unlock(); // ★新增:提前解锁 + // ★修改:把上传与上送 JSON 放到“解锁区间” + lock.unlock(); // ★新增:提前解锁 - if (SendAllQvvrFiles(qfile, wavepath)) { - //文件发送成功后更新事件 - - transfer_json_qvvr_data(terminal_id, - logical_seq, - matched.QVVR_Amg, - matched.QVVR_PerTime, - matched.QVVR_time, - matched.QVVR_type, - matched.phase, - wavepath); + if (SendAllQvvrFiles(qfile, wavepath)) { + //文件发送成功后更新事件 - // ★新增:上传成功后再加锁,准备修改台账 - lock.lock(); + transfer_json_qvvr_data(terminal_id, + logical_seq, + matched.QVVR_Amg, + matched.QVVR_PerTime, + matched.QVVR_time, + matched.QVVR_type, + matched.phase, + wavepath); - // 删除上传成功的文件 - for (const auto& uploaded_file : qfile.file_download) { - if (std::remove(uploaded_file.c_str()) != 0) { - std::cerr << "[Cleanup] Failed to delete file: " << uploaded_file << "\n"; - } else { - std::cout << "[Cleanup] Deleted uploaded file: " << uploaded_file << "\n"; + // ★新增:上传成功后再加锁,准备修改台账 + lock.lock(); + + // 删除上传成功的文件 + for (const auto& uploaded_file : qfile.file_download) { + if (std::remove(uploaded_file.c_str()) != 0) { + std::cerr << "[Cleanup] Failed to delete file: " << uploaded_file << "\n"; + } else { + std::cout << "[Cleanup] Deleted uploaded file: " << uploaded_file << "\n"; + } } - } - // ★替换原来的 i n(x.file_name.begin(), x.file_name.end()); - std::set d(x.file_download.begin(), x.file_download.end()); - return n==sig_names && d==sig_downs; - }); - - if (it_qf != monitor.qvvrevent.qvvrfile.end()) { - monitor.qvvrevent.qvvrfile.erase(it_qf); // ✔ 删到同一条 - } else { - std::cerr << "[Cleanup] qvvrfile changed; target group not found, skip erase\n"; - } + // ★替换原来的 i n(x.file_name.begin(), x.file_name.end()); + std::set d(x.file_download.begin(), x.file_download.end()); + return n==sig_names && d==sig_downs; + }); + + if (it_qf != monitor.qvvrevent.qvvrfile.end()) { + monitor.qvvrevent.qvvrfile.erase(it_qf); // ✔ 删到同一条 + } else { + std::cerr << "[Cleanup] qvvrfile changed; target group not found, skip erase\n"; + } - //清除暂态事件 - auto it = std::find_if( - monitor.qvvrevent.qvvrdata.begin(), - monitor.qvvrevent.qvvrdata.end(), - [&](const qvvr_data& d) { - return d.QVVR_time == matched.QVVR_time; - }); - - if (it != monitor.qvvrevent.qvvrdata.end()) { - monitor.qvvrevent.qvvrdata.erase(it); - } - } + //清除暂态事件 + auto it = std::find_if( + monitor.qvvrevent.qvvrdata.begin(), + monitor.qvvrevent.qvvrdata.end(), + [&](const qvvr_data& d) { + return d.QVVR_time == matched.QVVR_time; + }); + + if (it != monitor.qvvrevent.qvvrdata.end()) { + monitor.qvvrevent.qvvrdata.erase(it); + } + } + else { + lock.lock(); // ★新增:失败时补回锁 + std::cerr << "[update_qvvr_file_download] Failed to send qvvr files for logical_seq=" << logical_seq << std::endl; + } + } else { - lock.lock(); // ★新增:失败时补回锁 - std::cerr << "[update_qvvr_file_download] Failed to send qvvr files for logical_seq=" << logical_seq << std::endl; - } - } - else { - std::cout << "[update_qvvr_file_download] No matching qvvr_data found for cfg file: " << fpath << std::endl; - } - break; // 只处理第一个 cfg 文件 + std::cout << "[update_qvvr_file_download] No matching qvvr_data found for cfg file: " << fpath << std::endl; + } + + break; // 只处理第一个 cfg 文件 + }//end if ext==.cfg } - } + else { + std::cout << "[update_qvvr_file_download] Filename too short to check extension: " << fname << std::endl; + } + }//end for file_download } else{ std::cout << "qvvr file still imcomplete!!!" << std::endl; @@ -3414,12 +3423,12 @@ bool update_qvvr_file_download(const std::string& filename_with_mac_in, const st lock.unlock(); return true; // 当前文件处理成功 } - } + }//end for qvvrfile std::cout << "file name doesnt match any file in this monitor!!!" << std::endl; - } - } + }//end for monitor + }//end for dev lock.unlock(); return false; // 未匹配到终端ID或逻辑序号对应的监测点 }