From 9ebcd5d443232780c12c40f65d790d98f35e7cf0 Mon Sep 17 00:00:00 2001 From: lnk Date: Wed, 9 Jul 2025 09:39:29 +0800 Subject: [PATCH] use interface send statistic data to mq --- LFtid1056/cloudfront/code/interface.h | 16 ++++++- LFtid1056/dealMsg.cpp | 65 +++++++++++++++++++++++++-- 2 files changed, 75 insertions(+), 6 deletions(-) diff --git a/LFtid1056/cloudfront/code/interface.h b/LFtid1056/cloudfront/code/interface.h index 9f74f13..3f897e0 100644 --- a/LFtid1056/cloudfront/code/interface.h +++ b/LFtid1056/cloudfront/code/interface.h @@ -409,9 +409,21 @@ void to_json(nlohmann::json& j, const DataArrayItem& d); void to_json(nlohmann::json& j, const MsgObj& m); void to_json(nlohmann::json& j, const FullObj& f); -////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////提供给通讯部分调用的函数 -std::vector GenerateDeviceInfoFromLedger(const std::vector& terminal_devlist); +std::vector GenerateDeviceInfoFromLedger(const std::vector& terminal_devlist);//接口读取台账后,再调用这个将台账拷贝过来 + +std::string generate_json( //构造装置主动上送数据的报文 + int Mid, //需应答的报文订阅者收到后需以此ID应答,无需应答填入“-1” + int Did, //设备唯一标识Ldid,填入0代表Ndid。 + int Pri, //报文处理的优先级 + int Type, //消息类型 + int Cldid, //逻辑子设备ID,0-逻辑设备本身,无填-1 + int DataType, //数据类型,0-表示以数据集方式上送 + int DataAttr, //数据属性:无“0”、实时“1”、统计“2”等。 + int DsNameIdx, //数据集序号(以数据集方式上送),无填-1 + const std::vector& dataArray //数据数组。 +); ////////////////////////////////////////////////////////////////////////////////////////////////////////////////// diff --git a/LFtid1056/dealMsg.cpp b/LFtid1056/dealMsg.cpp index 56c145d..9dddd4c 100644 --- a/LFtid1056/dealMsg.cpp +++ b/LFtid1056/dealMsg.cpp @@ -7,12 +7,31 @@ #include #include #include -#include "client2.h" + #include + +#include "cloudfront/code/interface.h" //lnk20250708 +#include "cloudfront/code/rocketmq.h" //lnk20250708 +#include "client2.h" + using namespace std; SafeMessageQueue message_queue; // ȫϢ +//ʱת +time_t ConvertToTimestamp(const tagPqData_Float& data) { + struct tm t = {}; + t.tm_year = data.time.DeviceYear - 1900; // tm_year 1900 ʼ + t.tm_mon = data.time.DeviceMonth - 1; // tm_mon 01£ʼ + t.tm_mday = data.time.DeviceDay; + t.tm_hour = data.time.DeviceHour; + t.tm_min = data.time.DeviceMinute; + t.tm_sec = data.time.DeviceSecond; + + // ʱʱ䣩 + return mktime(&t); +} + void process_received_message(string mac, string id,const char* data, size_t length) { // ʵʵϢ߼ // ҵ @@ -150,11 +169,49 @@ void process_received_message(string mac, string id,const char* data, size_t len tagPqData_Float cp95_data = all_data[3]; // תΪBase64ַ - std::string base64Str = max_data.ConvertToBase64(); + std::string max_base64Str = max_data.ConvertToBase64(); + std::string min_base64Str = min_data.ConvertToBase64(); + std::string avg_base64Str = avg_data.ConvertToBase64(); + std::string cp95_base64Str = cp95_data.ConvertToBase64(); + + //lnk20250708ʹýӿڷ + time_t data_time = ConvertToTimestamp(avg_data); + + std::vector arr; + arr.push_back({1, // -1-ޣ 0-Rt,1-Max,2-Min,3-Avg,4-Cp95 + data_time, //תʱ䣬ʱ꣬1970룬Ч롰-1 + -1, //ʱ꣬΢ӣЧ롰-1 + 0, //ݱʶ1-ʶ쳣 + max_base64Str}); + arr.push_back({2, data_time, -1, 0, min_base64Str}); + arr.push_back({3, data_time, -1, 0, avg_base64Str}); + arr.push_back({4, data_time, -1, 0, cp95_base64Str}); + + std::string js = generate_json( + -1, //ӦıĶյԴIDӦӦ롰-1 + 123456, //豸ΨһʶLdid0Ndid + 1, //Ĵȼ + 0x1302, //豸͵ + max_data.name, //߼豸ID0-߼豸-1 + max_data.Data_Type, // + 2, //ԣޡ0ʵʱ1ͳơ2 + 1, //ݼţݼʽͣ-1 + arr // + ); + std::cout << js << std::endl; + + queue_data_t data; + data.monitor_no = 1; + data.strTopic = TOPIC_STAT; + data.strText = js; + data.mp_id = "test"; + std::lock_guard lock(queue_data_list_mutex); + queue_data_list.push_back(data); + // - std::cout << "Base64 Encoded Data (" << max_data.CalculateFloatCount() - << " floats): " << base64Str << std::endl; + //std::cout << "Base64 Encoded Data (" << max_data.CalculateFloatCount() + // << " floats): " << base64Str << std::endl; } }