|
|
@@ -5,6 +5,20 @@
|
|
|
#include "../DataPrecessDog/dataprecess.h"
|
|
|
#include "waterMk01.h"
|
|
|
|
|
|
+// 1. 提取硬编码魔法值为常量,便于统一修改和维护
|
|
|
+const QString MQTT_ID = "a71c40bb-5b02-4741-881b-24449f699db9";
|
|
|
+const QString ACTION_TYPE = "transpush";
|
|
|
+const QString PROVIDER = "Usky";
|
|
|
+const QString DEVICE_TYPE = "xiaofangshuiya";
|
|
|
+const QString DATA_TYPE = "deviceInfo";
|
|
|
+const QString SOFT_VERSION = "1.00.00";
|
|
|
+const QString HARD_VERSION = "0.1";
|
|
|
+const QString SENSOR_DESC = "";
|
|
|
+const QString SENSOR_UNIT = "MPa";
|
|
|
+const double LOW_THRESHOLD = 0.07;
|
|
|
+const double HIGH_THRESHOLD = 1.2;
|
|
|
+const QString API_URL = "http://47.98.201.73:55126";
|
|
|
+
|
|
|
#define comm_debug
|
|
|
#define UN_REFERENCED_PARAMETER(x) {(x) = (x);}
|
|
|
|
|
|
@@ -34,15 +48,19 @@ MKCore::MKCore(QObject *parent) :
|
|
|
connect(repThread[i],&ttsThreads::ttslog,this,&MKCore::repLog);
|
|
|
wssThread[i] = new ttsThreads(this,i,"47.98.201.73","/report",55125);
|
|
|
connect(wssThread[i],&ttsThreads::ttslog,this,&MKCore::repLog);
|
|
|
+ lhThread[i] = new ttsThreads(this,i,"47.98.201.73","/report",55126);
|
|
|
+ connect(lhThread[i],&ttsThreads::ttslog,this,&MKCore::repLog);
|
|
|
wxThreads[3][i]->start();
|
|
|
wxThreads[2][i]->start();
|
|
|
wxThreads[1][i]->start();
|
|
|
wxThreads[0][i]->start();
|
|
|
wssThread[i]->start();
|
|
|
repThread[i]->start();
|
|
|
+ lhThread[i]->start();
|
|
|
}
|
|
|
wxcur = 0;
|
|
|
repcur = 0;
|
|
|
+ lhcur = 0;
|
|
|
DevIdx3 = -1;
|
|
|
mkwaterserver = new Mkwaterserver(this);
|
|
|
connect(mkwaterserver,&Mkwaterserver::getCommData,this,&MKCore::getCommData);
|
|
|
@@ -167,6 +185,134 @@ void MKCore::getValue(QString deviceidx, QString d1, int d2, int d3, double d4,
|
|
|
dbThread->appendSql(QString::fromUtf8("update sp_owner_status set point_data=%1, data_time='%2' where device_id='%3' and point_code=2").arg(d2).arg(t.toString("yyyy-MM-dd HH:mm:ss")).arg(deviceidx),1);
|
|
|
dbThread->appendSql(QString::fromUtf8("update sp_owner_status set point_data=%1, data_time='%2' where device_id='%3' and point_code=3").arg(d3).arg(t.toString("yyyy-MM-dd HH:mm:ss")).arg(deviceidx),1);
|
|
|
dbThread->appendSql(QString::fromUtf8("update sp_owner_status set point_data=%1, data_time='%2' where device_id='%3' and point_code=4").arg(d4).arg(t.toString("yyyy-MM-dd HH:mm:ss")).arg(deviceidx),1);
|
|
|
+
|
|
|
+ QStringList strArray = {"SHYT25100007","SHYT25100006","SHYT25100009","SHYT25100004","SHYT25100005","SHYT25100008","SHYT25100001","SHYT25100002","SHYT25100003"};
|
|
|
+ if(strArray.contains(deviceidx)){
|
|
|
+ QJsonObject jqhsdata;
|
|
|
+ QJsonObject jqhsRTU;
|
|
|
+ jqhsRTU.insert("provider", "Usky");
|
|
|
+ jqhsRTU.insert("deviceType", "xiaofangshuiya");
|
|
|
+ jqhsRTU.insert("dataType", "deviceInfo");
|
|
|
+ jqhsRTU.insert("softVersion", "1.00.00");
|
|
|
+ jqhsRTU.insert("hardVersion", "0.1");
|
|
|
+ QJsonArray jajsonArray;
|
|
|
+ QJsonObject jaobjRTU;
|
|
|
+ for(int i=0;i<10240;i++){
|
|
|
+ if(QString::compare(QString(mkList->sensors[i].Device_Code),deviceidx)==0){
|
|
|
+ jaobjRTU.insert("sensorId", mkList->sensors[i].id);
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ jaobjRTU.insert("desc", "");
|
|
|
+ jaobjRTU.insert("status", 0);
|
|
|
+ jaobjRTU.insert("pointValue", round(d4 * 10000) / 10000.0);
|
|
|
+ jaobjRTU.insert("unit", "MPa");
|
|
|
+ jaobjRTU.insert("lowThreshold", 0.07);
|
|
|
+ jaobjRTU.insert("highThreshold", 1.2);
|
|
|
+ jaobjRTU.insert("sendTime", QDateTime::currentDateTimeUtc().toSecsSinceEpoch());
|
|
|
+ jajsonArray.append(jaobjRTU);
|
|
|
+ jqhsRTU.insert("sensorList", jajsonArray);
|
|
|
+
|
|
|
+ QString rep = QString("{\"mqttId\":\"a71c40bb-5b02-4741-881b-24449f699db9\",\"action\":\"transpush\",\"data\": %1}").arg(QString(QJsonDocument(jqhsRTU).toJson()));
|
|
|
+ lhThread[lhcur]->appendData(rep);
|
|
|
+ printf("lh rep:%s\n",rep.toUtf8().data());
|
|
|
+ lhcur++;
|
|
|
+ lhcur &= 0x0f;
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+// QJsonObject mainJson; // 优化命名:jqhsdata -> mainJson(见名知义)
|
|
|
+// QJsonObject rtuJson; // 优化命名:jqhsRTU -> rtuJson
|
|
|
+
|
|
|
+// // 构建RTU基础信息(保留原始赋值逻辑)
|
|
|
+// rtuJson.insert("provider", PROVIDER);
|
|
|
+// rtuJson.insert("deviceType", DEVICE_TYPE);
|
|
|
+// rtuJson.insert("dataType", DATA_TYPE);
|
|
|
+// rtuJson.insert("softVersion", SOFT_VERSION);
|
|
|
+// rtuJson.insert("hardVersion", HARD_VERSION);
|
|
|
+
|
|
|
+// // 构建主JSON基础信息
|
|
|
+// mainJson.insert("mqttId", MQTT_ID);
|
|
|
+// mainJson.insert("action", ACTION_TYPE);
|
|
|
+
|
|
|
+// QJsonArray sensorArray; // 优化命名:jajsonArray -> sensorArray
|
|
|
+// QJsonObject sensorJson; // 优化命名:jaobjRTU -> sensorJson
|
|
|
+
|
|
|
+// // 2. 修复数组越界风险:用传感器实际数量替代固定10240
|
|
|
+// // 若 mkList->sensors 是 QList 类型:
|
|
|
+// for(int i=0;i<10240;i++){
|
|
|
+// if(QString::compare(QString(mkList->sensors[i].Device_Code),deviceidx)==0){
|
|
|
+// sensorJson.insert("sensorId", mkList->sensors[i].id);
|
|
|
+// break;
|
|
|
+// }
|
|
|
+// }
|
|
|
+
|
|
|
+// // 填充传感器数据(保留原始逻辑)
|
|
|
+// sensorJson.insert("desc", SENSOR_DESC);
|
|
|
+// sensorJson.insert("status", 0);
|
|
|
+// sensorJson.insert("pointValue", d4);
|
|
|
+// sensorJson.insert("unit", SENSOR_UNIT);
|
|
|
+// sensorJson.insert("lowThreshold", LOW_THRESHOLD);
|
|
|
+// sensorJson.insert("highThreshold", HIGH_THRESHOLD);
|
|
|
+// sensorJson.insert("sendTime", QDateTime::currentDateTimeUtc().toSecsSinceEpoch());
|
|
|
+
|
|
|
+// // 组装传感器数组
|
|
|
+// sensorArray.append(sensorJson);
|
|
|
+// rtuJson.insert("sensorList", sensorArray);
|
|
|
+// mainJson.insert("data", rtuJson);
|
|
|
+
|
|
|
+// // 3. 修复JSON打印问题:通过QJsonDocument转换后输出
|
|
|
+// QJsonDocument jsonDoc(mainJson);
|
|
|
+// QString debugJsonStr = jsonDoc.toJson(QJsonDocument::Indented); // 格式化输出,便于调试
|
|
|
+// qDebug() << "待发送JSON数据:\n" << debugJsonStr;
|
|
|
+// // 若坚持使用printf(需转换为C风格字符串)
|
|
|
+// printf("jqhsdata %s\n", debugJsonStr.toUtf8().constData());
|
|
|
+
|
|
|
+// // 4. 修复JSON转QByteArray问题:正确转换为HTTP请求所需数据
|
|
|
+// QByteArray requestData = debugJsonStr.toUtf8(); // 紧凑格式,减少传输体积
|
|
|
+
|
|
|
+// // 5. 修复内存泄漏:使用栈上QNetworkRequest,无需动态分配
|
|
|
+// QNetworkRequest request;
|
|
|
+// QUrl apiUrl(API_URL);
|
|
|
+// if (!apiUrl.isValid()) { // 增加URL有效性检查,提升健壮性
|
|
|
+// qCritical() << "接口URL无效:" << API_URL;
|
|
|
+// return;
|
|
|
+// }
|
|
|
+// request.setUrl(apiUrl);
|
|
|
+// request.setHeader(QNetworkRequest::ContentTypeHeader, "application/json; charset=UTF-8");
|
|
|
+// request.setRawHeader("User-Agent", "QtNetwork/5.15.2"); // 必填
|
|
|
+// request.setRawHeader("Accept", "*/*");
|
|
|
+// request.setRawHeader("Connection", "keep-alive");
|
|
|
+
|
|
|
+// // 6. 发送POST请求,并处理响应和内存释放
|
|
|
+// QNetworkReply *reply = netAccessManager->post(request, requestData);
|
|
|
+// // 绑定finished信号,使用lambda表达式处理响应,自动释放reply内存
|
|
|
+// QObject::connect(reply, &QNetworkReply::finished, [=]() {
|
|
|
+// reply->deleteLater(); // 自动释放reply,避免内存泄漏
|
|
|
+
|
|
|
+// // 处理请求结果
|
|
|
+// if (reply->error() != QNetworkReply::NoError) {
|
|
|
+// // 打印错误信息,便于问题排查
|
|
|
+// qCritical() << "HTTP POST请求失败:" << reply->errorString() << "错误码:" << reply->error();
|
|
|
+// return;
|
|
|
+// }
|
|
|
+
|
|
|
+// // 读取并打印成功响应
|
|
|
+// QByteArray responseData = reply->readAll();
|
|
|
+// qInfo() << "HTTP POST请求成功,响应数据:" << responseData;
|
|
|
+
|
|
|
+// // 可选:解析响应JSON(增强功能性)
|
|
|
+// QJsonParseError jsonError;
|
|
|
+// QJsonDocument responseDoc = QJsonDocument::fromJson(responseData, &jsonError);
|
|
|
+// if (jsonError.error != QJsonParseError::NoError) {
|
|
|
+// qWarning() << "响应JSON解析失败:" << jsonError.errorString();
|
|
|
+// return;
|
|
|
+// }
|
|
|
+// qDebug() << "解析后的响应JSON:\n" << responseDoc.toJson(QJsonDocument::Indented);
|
|
|
+// });
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
void MKCore::getCoverValue(QString deviceidx, QString iotId, int repackage, int sensor_status, int manhole_cover_position_state, int lean_angle, double battery_voltage,int temperature,long etime,int serviceId)
|