add recall reply

This commit is contained in:
lnk
2025-09-15 16:36:21 +08:00
parent a298ff847a
commit f27d208959
6 changed files with 271 additions and 152 deletions

View File

@@ -77,7 +77,7 @@ extern std::vector<std::string> TESTARRAY;
////////////////////////////////////////////////////////////////////////////////////////////////////////外部文件函数声明
extern void execute_bash(std::string fun,int process_num,std::string type);
extern int recall_json_handle(const std::string& jstr);
extern int recall_json_handle_from_mq(const std::string& body);
//////////////////////////////////////////////////////////////////////////////////////////////////////本文件函数向前声明
@@ -373,62 +373,6 @@ std::string find_guid_index_from_dev_id(const std::string& dev_id) {
/////////////////////////////////////////////////////////////////////////////////////////////////回调函数的json处理
std::string parseJsonMessageRC(const std::string& inputJson) {
// 解析输入 JSON 字符串
json root;
try {
root = json::parse(inputJson);
} catch (const std::exception& e) {
std::cerr << "Error parsing JSON: " << e.what() << std::endl;
return "";
}
// 提取 "messageBody" 部分(它是一个字符串)
if (!root.contains("messageBody") || !root["messageBody"].is_string()) {
std::cerr << "'messageBody' is missing or is not a string" << std::endl;
return "";
}
std::string messageBodyStr = root["messageBody"].get<std::string>();
if (messageBodyStr.empty()) {
std::cerr << "'messageBody' is empty" << std::endl;
return "";
}
// 解析 messageBody 中的 JSON 字符串
json messageBody;
try {
messageBody = json::parse(messageBodyStr);
} catch (const std::exception& e) {
std::cerr << "Failed to parse 'messageBody' JSON: " << e.what() << std::endl;
return "";
}
// 提取 "guid" 部分
if (!messageBody.contains("guid") || !messageBody["guid"].is_string()) {
std::cerr << "'guid' is missing or is not a string" << std::endl;
return "";
}
std::string guid = messageBody["guid"].get<std::string>();
// 发送 guid 回复
send_reply_to_queue(guid, "1", "收到补招指令");
// 提取 "data" 部分
if (!messageBody.contains("data") || !messageBody["data"].is_array()) {
std::cerr << "'data' is missing or is not an array" << std::endl;
return "";
}
// 返回 "data" 数组的字符串形式
try {
return messageBody["data"].dump(); // 默认带缩进如需去除缩进dump(-1)
} catch (const std::exception& e) {
std::cerr << "Error converting 'data' to string: " << e.what() << std::endl;
return "";
}
}
bool parseJsonMessageRT(const std::string& body,std::string& devSeries,ushort& line,bool& realData,bool& soeData,int& limit){
json root;
try {
@@ -873,6 +817,17 @@ rocketmq::ConsumeStatus myMessageCallbackrtdata(const rocketmq::MQMessageExt& ms
// 加锁访问台账
if( !devid.empty() && line > 0){
//不再使用文件触发方式,直接调用接口向终端发起请求
//不注册guid直接将请求指令下发装置排队处理
//添加在线判断
if (ClientManager::instance().get_dev_status(devid) != 1) {
std::cout << "devid对应装置不在线: " << devid << std::endl;
// 记录日志不响应 web 端
DIY_ERRORLOG("process","【ERROR】前置的%d号进程处理topic:%s_%s的补招触发消息失败,装置%s不在线", g_front_seg_index,FRONT_INST.c_str(), G_MQCONSUMER_TOPIC_RT.c_str(),devid.c_str());
return rocketmq::CONSUME_SUCCESS;
}
ClientManager::instance().set_real_state_count(devid, 60, line);//一秒询问一次询问60次,下一次同一个测点调用的话就会刷新
}
else{
@@ -1002,17 +957,7 @@ rocketmq::ConsumeStatus myMessageCallbackrecall(const rocketmq::MQMessageExt& ms
}
// 解析 JSON 字符串
std::string result = parseJsonMessageRC(body); // 使用 std::string 接收解析结果
std::cout << "parseJsonMessageRC: " << result << std::endl;
if (!result.empty()) {
recall_json_handle(result);//不再使用文件补招方式
} else {
std::cerr << "recall data is NULL." << std::endl;
DIY_ERRORLOG("process","【ERROR】前置的%d号进程处理topic:%s_%s的补招触发消息失败,消息的json结构不正确", g_front_seg_index,FRONT_INST.c_str(), G_MQCONSUMER_TOPIC_RC.c_str());
}
recall_json_handle_from_mq(body);//不再使用文件补招方式
return rocketmq::CONSUME_SUCCESS;
}