Пример #1
0
bool AreaItemModel::loadJsonDocument(const char filename[]){
    QFile jsonFile(filename);
    if (! jsonFile.open(QIODevice::ReadOnly)){
        qWarning("Couldn't open area.json");

        return false;
    }
    else {
        QJsonParseError json_error;
        QByteArray dataArray = jsonFile.readAll();
        QJsonDocument jsonDoc(QJsonDocument::fromJson(dataArray, &json_error));
        if (json_error.error == QJsonParseError::NoError){
            if (jsonDoc.isArray()){
                QJsonArray jsonArray = jsonDoc.array();
                foreach(QJsonValue value, jsonArray){
                    if (value.isObject()){
                        QJsonObject jsonObj = value.toObject();
                        QString value = this->read(jsonObj, "label");
                        list << value;
                    }
                }

            }
        }
        jsonFile.close();
        return true;
    }
Пример #2
0
bool CharactersManager::loadCharacters()
{
    const QString path = QStandardPaths::locate(QStandardPaths::StandardLocation::DataLocation,
                                                QStringLiteral(JS_FILE),
                                                QStandardPaths::LocateOption::LocateFile);

    QFile loadFile(path);

    if(!loadFile.open(QFile::OpenModeFlag::ReadOnly))
    {
        qWarning("Can't load file");
        return false;
    }

    QByteArray byteArray = loadFile.readAll();
    QJsonParseError error;
    QJsonDocument jsonDoc(QJsonDocument::fromJson(byteArray, &error));

    if(error.error != QJsonParseError::ParseError::NoError)
    {
        qWarning("Can't read json object");
        qWarning() << error.errorString();
        return false;
    }

    this->readCharacters(jsonDoc.object());

    return true;
}
Пример #3
0
void ConnectionGateKeeper::validate()
{
    DEBUG("Validation connection -> sending ping");
    QJsonObject json;
    json["command"] = "Ping";
    QJsonDocument jsonDoc(json);
    emit outgoingMessage(_d->connectionId, jsonDoc.toJson());
    _d->timer.start();
}
Пример #4
0
void OrderDownload::downloadNextOrders()
{
    if (_ohData._currentIndex >= _ohData._total)
    {
        setOrderGetFromKJTTime();   // 执行结束,修改系统参数的时间

        _optType = OTOrderDownloadEnd;
        if (_ohData._success)
            _ohData._msgList.append(tr("下载订单结束."));
        _timer->start(1000);
        return;
    }

    QMap<QString, QString> paramsMap(g_paramsMap);
    paramsMap["method"] = "Order.OrderInfoBatchGet";    // 由接口提供方指定的接口标识符
    paramsMap["timestamp"] = QDateTime::currentDateTime().toString("yyyyMMddhhmmss");       // 调用方时间戳,格式为“4 位年+2 位月+2 位日+2 位小时(24 小时制)+2 位分+2 位秒”
    paramsMap["nonce"] = QString::number(100000 + qrand() % (999999 - 100000)); // QString::number(100000 + qrand() % (999999 - 100000));

    QJsonObject json;
    QJsonArray orderIdListArray;
    foreach (int orderId, _ohData._orderIdList.mid(_ohData._currentIndex, 20)) {
        orderIdListArray.append(QJsonValue(orderId));
    }
    _ohData._currentIndex += 20;
    json["OrderIDList"] = orderIdListArray;
    QJsonDocument jsonDoc(json);
//    QFile file("11.txt");
//    if (file.open(QIODevice::WriteOnly))
//    {
//        QTextStream out(&file);
//        out << jsonDoc.toJson(QJsonDocument::Compact);
//        file.close();
//    }
    qDebug() << jsonDoc.toJson(QJsonDocument::Compact);

    paramsMap["data"] = jsonDoc.toJson(QJsonDocument::Compact);
    qDebug() << paramsMap;

    QString params;
    QMapIterator<QString, QString> i(paramsMap);
    while (i.hasNext())
    {
        i.next();
        params.append(i.key()).append("=").append(i.value().toUtf8().toPercentEncoding()).append("&");
    }

    params.append(g_config.kjtSecretkey());
    urlencodePercentConvert(params);
    qDebug() << params;
    QString sign = QCryptographicHash::hash(params.toLatin1(), QCryptographicHash::Md5).toHex();

    QString url;
    url.append(g_config.kjtUrl()).append("?").append(params).append("&sign=").append(sign);

    qDebug() << url;
    _manager->get(QNetworkRequest(QUrl(url)));
}
Пример #5
0
void OrderDownload::downloadOrderIdList()
{
    QMap<QString, QString> paramsMap(g_paramsMap);
    paramsMap["method"] = "Order.OrderIDQuery";    // 由接口提供方指定的接口标识符
    paramsMap["timestamp"] = QDateTime::currentDateTime().toString("yyyyMMddhhmmss");       // 调用方时间戳,格式为“4 位年+2 位月+2 位日+2 位小时(24 小时制)+2 位分+2 位秒”
    paramsMap["nonce"] = QString::number(100000 + qrand() % (999999 - 100000)); // QString::number(100000 + qrand() % (999999 - 100000));

    /// 获取上次运行的结束日期,作为本次的起始日期
    QDateTime dateStart;
    QSqlQuery query;
    query.prepare(tr("select 参数内容Date from 系统参数 where 参数分组='跨境通' and 参数名称='订单下载结束时间'"));
    if (!query.exec())
        qInfo() << query.lastError().text();
    else if (query.first())
        dateStart = query.value(tr("参数内容Date")).toDateTime();

    if (!dateStart.isValid())
        dateStart = QDateTime(QDate(1900, 1, 1));
    qDebug() << dateStart;
    _ohData._dateStart = dateStart;
    _ohData._dateEnd = QDateTime::currentDateTime();
//    _ohData._dateEnd = QDateTime(QDate(2016, 3, 15), QTime(11, 0, 0));  // test

    QJsonObject json;
    json["OrderDateBegin"] = dateStart.toString("yyyy-MM-dd hh:mm:ss");
    json["OrderDateEnd"] = _ohData._dateEnd.toString("yyyy-MM-dd hh:mm:ss");
    QJsonDocument jsonDoc(json);
    QFile file("11.txt");
    if (file.open(QIODevice::WriteOnly))
    {
        QTextStream out(&file);
        out << jsonDoc.toJson(QJsonDocument::Compact);
        file.close();
    }
    qDebug() << jsonDoc.toJson(QJsonDocument::Compact);
    paramsMap["data"] = jsonDoc.toJson(QJsonDocument::Compact);
    qDebug() << paramsMap;

    QString params;
    QMapIterator<QString, QString> i(paramsMap);
    while (i.hasNext())
    {
        i.next();
        params.append(i.key()).append("=").append(i.value().toUtf8().toPercentEncoding()).append("&");
    }

    params.append(g_config.kjtSecretkey());
    urlencodePercentConvert(params);
    qDebug() << params;
    QString sign = QCryptographicHash::hash(params.toLatin1(), QCryptographicHash::Md5).toHex();

    QString url;
    url.append(g_config.kjtUrl()).append("?").append(params).append("&sign=").append(sign);

    qDebug() << url;
    _manager->get(QNetworkRequest(QUrl(url)));
}
Пример #6
0
void MainWindow::on_pushButton_3_clicked()
{
    _synchronizeType = STOrderCreateKJTToERP;
    _orderCreateKJTToERPData._success = true;

//    _orderCreateKJTToERP->run(ui->dateTimeEdit->dateTime(), ui->dateTimeEdit_2->dateTime());

    QMap<QString, QString> paramsMap(g_paramsMap);
    paramsMap["method"] = "Order.OrderIDQuery";    // 由接口提供方指定的接口标识符
    paramsMap["timestamp"] = QDateTime::currentDateTime().toString("yyyyMMddhhmmss");       // 调用方时间戳,格式为“4 位年+2 位月+2 位日+2 位小时(24 小时制)+2 位分+2 位秒”
    paramsMap["nonce"] = QString::number(100000 + qrand() % (999999 - 100000)); // QString::number(100000 + qrand() % (999999 - 100000));

    /// 获取上次运行的结束日期,作为本次的起始日期
    QDateTime dateStart;
    QSqlQuery query;
    query.prepare(tr("select 参数内容Date from 系统参数 where 参数分组='跨境通' and 参数名称='订单下载结束时间'"));
    if (!query.exec())
        qInfo() << query.lastError().text();
    else if (query.first())
        dateStart = query.value(tr("参数内容Date")).toDateTime();

    if (!dateStart.isValid())
        dateStart = QDateTime(QDate(1900, 1, 1));
    qDebug() << dateStart;
    _orderCreateKJTToERPData._dateStart = dateStart;
    _orderCreateKJTToERPData._dateEnd = QDateTime::currentDateTime();

    QJsonObject json;
    json["OrderDateBegin"] = dateStart.toString("yyyy-MM-dd hh:mm:ss");
    json["OrderDateEnd"] = _orderCreateKJTToERPData._dateEnd.toString("yyyy-MM-dd hh:mm:ss");
    QJsonDocument jsonDoc(json);
    qDebug() << jsonDoc.toJson(QJsonDocument::Compact);

    paramsMap["data"] = jsonDoc.toJson(QJsonDocument::Compact);
    qDebug() << paramsMap;

    QString params;
    QMapIterator<QString, QString> i(paramsMap);
    while (i.hasNext())
    {
        i.next();
        params.append(i.key()).append("=").append(i.value().toUtf8().toPercentEncoding()).append("&");
    }

    params.append(g_config.kjtSecretkey());
    urlencodePercentConvert(params);
    qDebug() << params;
    QString sign = QCryptographicHash::hash(params.toLatin1(), QCryptographicHash::Md5).toHex();

    QString url;
    url.append(g_config.kjtUrl()).append("?").append(params).append("&sign=").append(sign);

    qDebug() << url;
    _manager->get(QNetworkRequest(QUrl(url)));
}
QByteArray FreyaBaseData::Serialize(const FreyaBaseData &data)
{
    QByteArray ba;
    QDataStream stream(&ba, QIODevice::WriteOnly);
    QVariantMap varMap;
    varMap.insert(FREYALIB_TYP_CMD, data.command);
    varMap.insert(FREYALIB_TYP_ARG, data.arguments);
    QJsonDocument jsonDoc(QJsonObject::fromVariantMap(varMap));
    stream<<data.dataID<<jsonDoc.toJson();
    return ba;
}
void SecretManager::saveCache()
{
    QFile file(cachePath());
    if (!file.open(QIODevice::WriteOnly))
    {
        qDebug() << "Couldn't write samba file!";
        return;
    }
    QJsonDocument jsonDoc(m_smbLoginObjs);
    file.write(jsonDoc.toJson());
    file.close();
}
Пример #9
0
void MainWindow::orderInfoBatchGet()
{
    _synchronizeType = STOrderInfoBatchGet;
    if (_orderCreateKJTToERPData._currentIndex >= _orderCreateKJTToERPData._total)
    {
        setOrderGetFromKJTTime();   // 执行结束,修改系统参数的时间

        /// 执行结束,归为,30分钟后再次执行
        _synchronizeType = STNone;
        _timer->start(1800000);

        return;
    }

    QMap<QString, QString> paramsMap(g_paramsMap);
    paramsMap["method"] = "Order.OrderInfoBatchGet";    // 由接口提供方指定的接口标识符
    paramsMap["timestamp"] = QDateTime::currentDateTime().toString("yyyyMMddhhmmss");       // 调用方时间戳,格式为“4 位年+2 位月+2 位日+2 位小时(24 小时制)+2 位分+2 位秒”
    paramsMap["nonce"] = QString::number(100000 + qrand() % (999999 - 100000)); // QString::number(100000 + qrand() % (999999 - 100000));

    QJsonObject json;
    QJsonArray orderIdListArray;
    foreach (int orderId, _orderCreateKJTToERPData._orderIdList.mid(_orderCreateKJTToERPData._currentIndex, 20)) {
        orderIdListArray.append(QJsonValue(orderId));
    }
    _orderCreateKJTToERPData._currentIndex += 20;
    json["OrderIDList"] = orderIdListArray;
    QJsonDocument jsonDoc(json);
    qDebug() << jsonDoc.toJson(QJsonDocument::Compact);

    paramsMap["data"] = jsonDoc.toJson(QJsonDocument::Compact);
    qDebug() << paramsMap;

    QString params;
    QMapIterator<QString, QString> i(paramsMap);
    while (i.hasNext())
    {
        i.next();
        params.append(i.key()).append("=").append(i.value().toUtf8().toPercentEncoding()).append("&");
    }

    params.append(g_config.kjtSecretkey());
    urlencodePercentConvert(params);
    qDebug() << params;
    QString sign = QCryptographicHash::hash(params.toLatin1(), QCryptographicHash::Md5).toHex();

    QString url;
    url.append(g_config.kjtUrl()).append("?").append(params).append("&sign=").append(sign);

    qDebug() << url;
    _manager->get(QNetworkRequest(QUrl(url)));
}
QString AuthorizationHandler::getAuthErrorMessage()
{
    QJsonObject errorJson;
    ErrorResponse::getInstance()->getErrorJson(ErrorReason::user_token_invalid,&errorJson);

   QJsonObject responseJson;

   responseJson.insert("error",errorJson);
   responseJson.insert("action","authorize");
   responseJson.insert("requestId",m_pVissrequest -> getRequestId());

   QJsonDocument jsonDoc(responseJson);
   QString message = jsonDoc.toJson();

   return message;
}
Пример #11
0
void SecretManager::loadCache()
{
    //Migration for old config files, and rmove that codes for further
    FileUtils::migrateConfigFileFromCache("samba");

    QFile file(cachePath());
    if (!file.open(QIODevice::ReadOnly))
    {
        qDebug() << "Couldn't write samba file!";
        return;
    }
    QByteArray data = file.readAll();
    QJsonDocument jsonDoc(QJsonDocument::fromJson(data));
    m_smbLoginObjs = jsonDoc.object();
    file.close();
    qDebug() << m_smbLoginObjs;
}
QString AuthorizationHandler::AddToAuthManager(QString zePayload)
{
    QJsonDocument doc2;
    doc2 = QJsonDocument::fromJson(zePayload.toUtf8());

    QJsonObject tokenpl = doc2.object();
    QString issuer = tokenpl["iss"].toString();
    TRACE("Server", QString("Token issuer : %1").arg(issuer));

    QString valid_from = tokenpl["ValidFrom"].toString();
    QString valid_to = tokenpl["ValidTo"].toString();
    TRACE("Server", QString("Token valid from : %1, to : %2").arg(valid_from, valid_to));

    QString path = tokenpl["path"].toString();
    TRACE("Server", QString("Token signal path : %1").arg(path));

    QString actions = tokenpl["actions"].toString();
    TRACE("Server", QString("Token actions : %1").arg(actions));

    // calulate TTL time to live in milliseconds
    qint64 validFrom = valid_from.toLongLong();
    qint64 validTo = valid_to.toLongLong();
    qint64 timeToLive = validTo - validFrom; // yes use current time but wtf
    TRACE("Server",QString("Auth TTL is : %1").arg(timeToLive));

    QString time = QString::number(QDateTime::currentDateTime().toTime_t());


    QJsonObject response;
    response.insert("action", "authorize");
    response.insert("requestId", m_pVissrequest -> getRequestId());
    response.insert("TTL", timeToLive);
    response.insert("timestamp", time);

    QJsonDocument jsonDoc(response);
    QString message = jsonDoc.toJson();

    // create authData object and add to managerclass.
    AuthData authdata(path,actions,validFrom,validTo);
    AuthorizationManager* authMan = AuthorizationManager::getInstance();
    authMan -> insertAuthData(m_pClient -> getSocket(),&authdata);

    return message;
}
Пример #13
0
bool CharactersManager::writeCharacters() const
{
    const QString path = QStandardPaths::writableLocation(QStandardPaths::StandardLocation::DataLocation);

    QFile saveFile(path);

    if(!saveFile.open(QFile::OpenModeFlag::WriteOnly))
    {
        qWarning("Can't write file");
        return false;
    }

    QJsonObject writeJson;
    writeCharacters(writeJson);
    QJsonDocument jsonDoc(writeJson);
    saveFile.write(jsonDoc.toJson());

    return true;
}
Пример #14
0
void MainWindow::on_pushButton_clicked()
{
    QString url = "http://preapi.kjt.com/open.api";     //接口测试地址
    QString secretkey = "kjt@345";              // 由接口提供方分配给接口调用方的验签密钥

    QMap<QString, QString> paramsMap;
    paramsMap["appid"] = "seller345";           // 由接口提供方分配给接口调用方的身份标识符
    paramsMap["method"] = "Product.ProudctInfoBatchGet";    // 由接口提供方指定的接口标识符
    paramsMap["version"] = "1.0";               // 由接口提供方指定的接口版本
    paramsMap["format"] = "json";               // 接口返回结果类型:json
    paramsMap["timestamp"] = QDateTime::currentDateTime().toString("yyyyMMddhhmmss");       // 调用方时间戳,格式为“4 位年+2 位月+2 位日+2 位小时(24 小时制)+2 位分+2 位秒”
//    qsrand(time(NULL));
    paramsMap["nonce"] = QString::number(100000 + qrand() % (999999 - 100000)); // QString::number(100000 + qrand() % (999999 - 100000));

    QJsonObject json;
    QJsonArray jsonArray;
    jsonArray.append(QJsonValue("345JPA018400002"));
    json["ProductIDs"] = jsonArray;
    json["SaleChannelSysNo"] = g_config.kjtSaleschannelsysno();
    QJsonDocument jsonDoc(json);
    qDebug() << jsonDoc.toJson(QJsonDocument::Compact);

    paramsMap["data"] = jsonDoc.toJson(QJsonDocument::Compact);
    qDebug() << paramsMap;

    QString params;
    QMapIterator<QString, QString> i(paramsMap);
    while (i.hasNext())
    {
        i.next();
        params.append(i.key()).append("=").append(i.value().toLatin1().toPercentEncoding()).append("&");
    }

    params.append(secretkey);
    qDebug() << params;
    QString sign = QCryptographicHash::hash(params.toLatin1(), QCryptographicHash::Md5).toHex();

    url.append("?").append(params).append("&sign=").append(sign);

    qDebug() << url;
    _manager->get(QNetworkRequest(QUrl(url)));
}
Пример #15
0
void CClientApp::ReplyUDPServerInfo()
{
    QString currentIP = "";
    for (const QHostAddress &address : QNetworkInterface::allAddresses()) {
        if (address.protocol() == QAbstractSocket::IPv4Protocol && address != QHostAddress(QHostAddress::LocalHost))
        {
            currentIP = address.toString();
        }
    }
    currentIP = "192.168.0.120";

    if (currentIP.isEmpty())
    {
        return;
    }

    QJsonObject jsonObj;
    jsonObj.insert("uid", "fakemonitor");
    jsonObj.insert("DisplayName", "Monitor Device");
    jsonObj.insert("ip", currentIP);
    jsonObj.insert("type", "xxXxx");

    QJsonDocument jsonDoc(jsonObj);
    QByteArray bytedata = jsonDoc.toJson();

    //broadCastSendSocket->write(bytedata);
    QHostAddress address;
    address.setAddress(serverIP);
    quint64 byteWritten = broadCastSendSocket->writeDatagram(bytedata.data(), bytedata.size(), address, 3479);

    bool bWritten = byteWritten > 0;//broadCastSendSocket->waitForBytesWritten();
    QString result = (bWritten ? "true" : "false");

    QString kText("CurrentIP: " + currentIP + "\n");
    kText += "WritingServer: " + QString::fromLatin1(bytedata) + "\n";
    kText += "UDP Written: " + QString::number(byteWritten) + "\n";
    Q_EMIT m_pSender->commandReturned(kText, true);
}
Пример #16
0
void MainWindow::synchronizeProductCreate()
{
    if (_productIdQueue.isEmpty())
    {
        on_pushButton_3_clicked();
        return;
    }

    _currentLocalId = _productIdQueue.dequeue();

    QSqlQuery query;
    query.prepare(tr("select * from 商品 "
                     "where 商品KID=:id "));
    query.bindValue(":id", _currentLocalId);
    if (!query.exec())
    {
//        qFatal(query.lastError().text().toStdString().c_str());
        qInfo() << query.lastError().text();
        return;
    }

    if (query.first())
    {
        /// 商品属于保税仓(p1=1),则上传,否则跳过
        if (1 != query.value("p1").toInt())
        {
            _timer->start(1000);
            return;
        }

        qDebug() << query.value(tr("商品KID")).toInt() << "\t" << query.value(tr("商品名称")).toString();

        QString url = "http://preapi.kjt.com/open.api";     //接口测试地址
        QString secretkey = "kjt@345";              // 由接口提供方分配给接口调用方的验签密钥

        QMap<QString, QString> paramsMap;
        paramsMap["appid"] = "seller345";           // 由接口提供方分配给接口调用方的身份标识符
        paramsMap["method"] = "Product.ProductCreate";    // 由接口提供方指定的接口标识符
        paramsMap["version"] = "1.0";               // 由接口提供方指定的接口版本
        paramsMap["format"] = "json";               // 接口返回结果类型:json
        paramsMap["timestamp"] = QDateTime::currentDateTime().toString("yyyyMMddhhmmss");       // 调用方时间戳,格式为“4 位年+2 位月+2 位日+2 位小时(24 小时制)+2 位分+2 位秒”
        paramsMap["nonce"] = QString::number(100000 + qrand() % (999999 - 100000)); // QString::number(100000 + qrand() % (999999 - 100000));

        QJsonObject json;
        json["IsSettledDown"] = query.value(tr("入住商品")).toInt();                // 是否为入驻商品。0 = 否 1 = 是
        json["MerchantProductID"] = query.value(tr("商品KID")).toString();            // 商户商品 ID
        json["ProductName"] = query.value(tr("商品名称")).toString();               // 商品名称
        json["BriefName"] = "HW"; // query.value(tr("品名简称")).toString();        // 商品简称
        json["BrandCode"] = "950"; // query.value(tr("商品品牌ID")).toString();     // 品牌编号 code
        json["C3Code"] = "A46"; // query.value(tr("商品分类ID")).toString();        // 三级分类 code
        json["ProductTradeType"] = query.value(tr("贸易类型")).toInt();             // 贸易类型  0 = 直邮 1 = 自贸
        json["OriginCode"] = "JP";  // query.value(tr("产地")).toString();            // 产地,两位字母
        json["ProductDesc"] = query.value(tr("商品简述")).toString();               // 商品简述

        QJsonObject productPriceInfoJsonObject;                     // 商品价格信息
        productPriceInfoJsonObject["CurrentPrice"] = query.value(tr("销售价")).toDouble();
        json["ProductPriceInfo"] = productPriceInfoJsonObject;

        QJsonObject productEntryInfoJsonObject;                     // 商品备案信息
        productEntryInfoJsonObject["ProductNameEN"] = query.value(tr("商品英文名称")).toString();
        productEntryInfoJsonObject["Specifications"] = tr("30*10片");   // ?? 30*10 // query.value(tr("商品规格")).toString();
        productEntryInfoJsonObject["TaxUnit"] = "g";   // query.value(tr("计税单位")).toString(); // 计税单位, 不能为空!!
        /// 海关关区根据商品所入仓库对应的四位数关区代码填写
        /// 2244 – 直邮进口模式
        /// 2216 – 浦东机场自贸模式
        /// 2249 – 洋山港自贸模式
        /// 2218 – 外高桥自贸模式
        productEntryInfoJsonObject["CustomsCode"] = "2244"; // query.value(tr("关区代码")).toString();  // 海关关区根据商品所入仓库对应的四位数关区代码填写
        productEntryInfoJsonObject["StoreType"] = 0;    // query.value(tr("运输方式")).toInt();         // 运输方式(默认0,常温) 0 = 常温 1 = 冷藏 2 = 冷冻
        productEntryInfoJsonObject["ApplyUnit"] = "123";    // query.value(tr("申报单位")).toString();  // 申报单位, 不能为空
        productEntryInfoJsonObject["ApplyQty"] = 123;   // query.value(tr("申报数量")).toInt();  // 申报数量, 不能为空
        productEntryInfoJsonObject["GrossWeight"] = 12.0;   // query.value(tr("商品毛重")).toDouble();
        productEntryInfoJsonObject["SuttleWeight"] = 10.0;  // query.value(tr("商品净重")).toDouble();
        json["ProductEntryInfo"] = productEntryInfoJsonObject;

        QJsonObject productMaintainInfoJsonObject;                      // 商品维护信息
        productMaintainInfoJsonObject["ProductModel"] = "123";  // query.value(tr("商品型号")).toString();
        productMaintainInfoJsonObject["Weight"] = 10.0;     // query.value(tr("商品物流重量")).toDouble();
        productMaintainInfoJsonObject["Length"] = query.value(tr("长度")).toDouble();
        productMaintainInfoJsonObject["Width"] = query.value(tr("宽度")).toDouble();
        productMaintainInfoJsonObject["Height"] = query.value(tr("高度")).toDouble();
        json["ProductMaintainInfo"] = productMaintainInfoJsonObject;


        QJsonDocument jsonDoc(json);
//        QFile file("11.txt");
//        if (file.open(QIODevice::WriteOnly))
//        {
//            QTextStream out(&file);
//            out << jsonDoc.toJson(QJsonDocument::Compact);
//            file.close();
//        }
        qDebug() << jsonDoc.toJson(QJsonDocument::Compact);

        paramsMap["data"] = jsonDoc.toJson(QJsonDocument::Compact);
        qDebug() << paramsMap;

        QString params;
        QMapIterator<QString, QString> i(paramsMap);
        while (i.hasNext())
        {
            i.next();
            params.append(i.key()).append("=").append(i.value().toLatin1().toPercentEncoding()).append("&");
        }
//        params.append(secretkey);
        QString sign = QCryptographicHash::hash(QString(params + secretkey).toLatin1(), QCryptographicHash::Md5).toHex();
        params.append("sign=").append(sign);
        qDebug() << params.toLatin1();

//        url.append("?").append(params).append("&sign=").append(sign);

        qDebug() << url;
        QNetworkRequest req;
        req.setUrl(QUrl(url));
        req.setHeader(QNetworkRequest::ContentTypeHeader, "application/x-www-form-urlencoded");
        req.setHeader(QNetworkRequest::ContentLengthHeader, params.toLatin1().length());
        _manager->post(req, params.toLatin1());
    }
}