finish file recall

This commit is contained in:
lnk
2025-09-12 17:08:25 +08:00
parent 58ffb3a6aa
commit e434f66986
4 changed files with 722 additions and 64 deletions

View File

@@ -49,6 +49,78 @@ public:
std::string VOLTAGE; //补招暂态事件标识 0-不补招1-补招
};
// ====== ★新增:下载/列目录阶段枚举与结果枚举 ======
enum class RecallPhase {
IDLE = 0,
LISTING, // 正在请求并等待“目录文件名列表”
DOWNLOADING // 正在按队列逐个下载
};
enum class ActionResult {
PENDING = -1, // 还未返回
FAIL = 0,
OK = 1
};
// ====== ★修改:扩展 RecallFile支持“多目录 + 文件筛选 + 串行下载”的状态机 ======
class RecallFile
{
public:
int recall_status; // 补招状态 0-未补招 1-补招中 2-补招完成 3-补招失败
std::string StartTime; // 数据补招起始时间yyyy-MM-dd HH:mm:ss
std::string EndTime; // 数据补招结束时间yyyy-MM-dd HH:mm:ss
std::string STEADY; // 补招历史统计数据标识 0-不补招1-补招
std::string VOLTAGE; // 补招暂态事件标识 0-不补招1-补招
//暂态文件用
bool direct_mode = false; // 直下文件开关true 表示不按时间窗,仅按目标文件名
std::string target_filename; // 直下文件名(不含目录)
std::list<std::string> file_paths; // 已下载/要上报的完整路径(用于最终结果)
// ★新增:按“目录名 -> 文件名列表”的映射;由“其他线程”在目录请求成功后回填
std::map<std::string, std::vector<tag_dir_info>> dir_files;
// ★新增:候选目录(可扩展)
std::vector<std::string> dir_candidates{
"/cf/COMTRADE",
"/bd0/COMTRADE",
"/sd0/COMTRADE",
"/sd0:1/COMTRADE"
};
// ★新增:状态机运行时变量
RecallPhase phase = RecallPhase::IDLE;
int cur_dir_index = 0; // 正在尝试的目录下标
std::string cur_dir; // 正在处理的目录
// ★新增:列目录/下载请求“回执位”,由其他线程置位
ActionResult list_result = ActionResult::PENDING; // 当前目录的列举结果
ActionResult download_result = ActionResult::PENDING; // 当前文件的下载结果
// ★新增:下载队列(已筛选出在时间窗内的文件,含完整路径)
std::list<std::string> download_queue;
std::string downloading_file; // 当前正在下载的文件(完整路径)
// ★新增:一个便捷复位
void reset_runtime(bool keep_direct = false)
{
phase = RecallPhase::IDLE;
cur_dir_index = 0;
cur_dir.clear();
list_result = ActionResult::PENDING;
download_result = ActionResult::PENDING;
download_queue.clear();
downloading_file.clear();
dir_files.clear();
// ★新增:按需保留直下文件开关和目标名
if (!keep_direct) {
direct_mode = false;
target_filename.clear();
}
}
};
enum class RecallStatus {
NOT_STARTED = 0, // 未补招
RUNNING = 1, // 补招中
@@ -127,7 +199,8 @@ public:
qvvr_event qvvrevent;
//补招列表
std::list<RecallMonitor> recall_list;
std::list<RecallMonitor> recall_list; //事件
std::list<RecallFile> recall_list_static;//稳态文件
//定值list
std::list<float> set_values;
@@ -579,6 +652,15 @@ void on_device_response_minimal(int response_code,
//处理补招的任务
void check_recall_event();
void check_recall_file();
//缓存目录信息
void filemenu_cache_put(const std::string& dev_id,
std::vector<tag_dir_info> FileList);
//提取目录信息
bool filemenu_cache_take(const std::string& dev_id, std::vector<tag_dir_info>& out);
//小工具
inline std::string trim_cstr(const char* s, size_t n) {