1.简化了授权按钮,只剩下普通版、教育版、专业版三个按钮
2.授权时对授权进行记录或者更新
3.加密解密同步进行简化,采用与中核软件统一的加密解密流程
4个文件已修改
537 ■■■■ 已修改文件
LicenseAdministrator.pro 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
mainwindow.cpp 351 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
mainwindow.h 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
mainwindow.ui 165 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
LicenseAdministrator.pro
@@ -1,4 +1,4 @@
QT       += core gui
QT       += core gui xlsx
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
mainwindow.cpp
@@ -8,18 +8,53 @@
#include <QFileDialog>
#include <QMessageBox>
#include <QProcess>
#include <qbytearray.h>
#include "QtXlsx/xlsxdocument.h"
#include "QtXlsx/xlsxworksheet.h"
#include "QtXlsx/xlsxformat.h"
using namespace QXlsx;
MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    setFixedSize(680, 600);
    initUI();
}
MainWindow::~MainWindow()
{
    delete ui;
}
void MainWindow::initUI()
{
    //将旧版本的按钮隐藏
    ui->pushButton_accreditall->setVisible(false);
    ui->pushButton_accreditcell->setVisible(false);
    ui->pushButton_accreditaquifer->setVisible(false);
    ui->pushButton_deaccreditall->setVisible(false);
    ui->pushButton_accreditpipe->setVisible(false);
    ui->pushButton_accreditnetwork->setVisible(false);
    ui->pushButton_dateset->setVisible(false);
    ui->pushButton_adddate->setVisible(false);
    ui->pushButton_reducedate->setVisible(false);
    //前七条是简化加密数据必用的,在这里设定好方便对应
    m_numToInfo.insert("1","Baseboard_Uuid");
    m_numToInfo.insert("2","CPU_Processorid");
    m_numToInfo.insert("3","Username");
    m_numToInfo.insert("4","LicensedDuration_start");
    m_numToInfo.insert("5","LicensedDuration_end");
    m_numToInfo.insert("6","Productid");
    m_numToInfo.insert("7","Versionid");
    m_numToInfo.insert("8","ActiveState");
    //后边的是排除后不参与加密的数据信息
    m_numToInfo.insert("9","Bios_Serialnumber");
    m_numToInfo.insert("10","IsEnabled_cell");
    m_numToInfo.insert("11","IsEnabled_aquifer");
    m_numToInfo.insert("12","IsEnabled_pipe");
    m_numToInfo.insert("13","IsEnabled_network");
    m_numToInfo.insert("14","Baseboard_Serialnumber");
}
QString MainWindow::toUpperAndLower(QString src)
@@ -81,6 +116,14 @@
    return QString::fromLatin1(QAESEncryption::RemovePadding(deBA, QAESEncryption::PKCS7));
}
QByteArray MainWindow::AES_decryption_byte(const QString &data, const QString &key)
{
    QAESEncryption encryption(QAESEncryption::AES_256, QAESEncryption::ECB, QAESEncryption::PKCS7);
    QByteArray  enBA = QByteArray::fromBase64(data.toUtf8());
    QByteArray deBA = encryption.decode(enBA, key.toUtf8());
    return deBA;
}
QString MainWindow::getEncrypt(const QString &data, QString key)
{
    QString str_encode_text;
@@ -100,6 +143,14 @@
    QString hashkey32 = EncryptData(hashkey64,QCryptographicHash::Md5);
    QString AESresult = AES_decryption(b64result,hashkey32);
    decodedText = DecodebyBase64(AESresult);
    qDebug()<<"AESresult"<<AESresult;
    qDebug()<<"decodedText"<<decodedText;
    //添加解压缩的操作
    QByteArray text = decodedText.toLocal8Bit();
    QByteArray jsonData = qUncompress(text.fromBase64(text));
    qDebug()<<"jsonData"<<jsonData;
//    decodedText = DecodebyBase64(QString::fromLocal8Bit(jsonData));
    decodedText = QString(jsonData);
    return decodedText;
}
@@ -119,6 +170,9 @@
        ui->pushButton_setproid->setEnabled(false);
        ui->lineEdit_setversion->setEnabled(false);
        ui->lineEdit_setproid->setEnabled(false);
        ui->pushButton_normal->setEnabled(false);
        ui->pushButton_education->setEnabled(false);
        ui->pushButton_profession->setEnabled(false);
        ui->lineEdit_basenum->setText("");
        ui->lineEdit_baseuuid->setText("");
@@ -148,6 +202,9 @@
        ui->pushButton_setproid->setEnabled(true);
        ui->lineEdit_setversion->setEnabled(true);
        ui->lineEdit_setproid->setEnabled(true);
        ui->pushButton_normal->setEnabled(true);
        ui->pushButton_education->setEnabled(true);
        ui->pushButton_profession->setEnabled(true);
        ui->lineEdit_basenum->setText(localinfo.Baseboard_Serialnumber);
        ui->lineEdit_baseuuid->setText(localinfo.Baseboard_Uuid);
@@ -157,10 +214,15 @@
        ui->lineEdit_date->setText(localinfo.LicensedDuration_end);
        ui->lineEdit_version->setText(localinfo.Versionid);
        ui->lineEdit_proid->setText(localinfo.Productid);
        ui->label_iscell->setText(localinfo.IsEnabled_cell==0?QStringLiteral("未激活"):QStringLiteral("已激活"));
        ui->label_isaquifer->setText(localinfo.IsEnabled_aquifer==0?QStringLiteral("未激活"):QStringLiteral("已激活"));
        ui->label_ispipe->setText(localinfo.IsEnabled_pipe==0?QStringLiteral("未激活"):QStringLiteral("已激活"));
        ui->label_isnetwork->setText(localinfo.IsEnabled_network==0?QStringLiteral("未激活"):QStringLiteral("已激活"));
//        ui->label_iscell->setText(localinfo.IsEnabled_cell==0?QStringLiteral("未激活"):QStringLiteral("已激活"));
//        ui->label_isaquifer->setText(localinfo.IsEnabled_aquifer==0?QStringLiteral("未激活"):QStringLiteral("已激活"));
//        ui->label_ispipe->setText(localinfo.IsEnabled_pipe==0?QStringLiteral("未激活"):QStringLiteral("已激活"));
//        ui->label_isnetwork->setText(localinfo.IsEnabled_network==0?QStringLiteral("未激活"):QStringLiteral("已激活"));
        //当前授权是统一的,只需要判断一个是否激活的参数就行
        ui->label_iscell->setText(localinfo.ActiveState==0?QStringLiteral("未激活"):QStringLiteral("已激活"));
        ui->label_isaquifer->setText(localinfo.ActiveState==0?QStringLiteral("未激活"):QStringLiteral("已激活"));
        ui->label_ispipe->setText(localinfo.ActiveState==0?QStringLiteral("未激活"):QStringLiteral("已激活"));
        ui->label_isnetwork->setText(localinfo.ActiveState==0?QStringLiteral("未激活"):QStringLiteral("已激活"));
    }
    if(licenseinfo.Username==""){
        ui->lineEdit_basenum_2->setText("");
@@ -186,10 +248,14 @@
        ui->lineEdit_setversion->setText(licenseinfo.Versionid);
        ui->lineEdit_proid_2->setText(licenseinfo.Productid);
        ui->lineEdit_setproid->setText(licenseinfo.Productid);
        ui->label_iscell_2->setText(licenseinfo.IsEnabled_cell==0?QStringLiteral("未激活"):QStringLiteral("已激活"));
        ui->label_isaquifer_2->setText(licenseinfo.IsEnabled_aquifer==0?QStringLiteral("未激活"):QStringLiteral("已激活"));
        ui->label_ispipe_2->setText(licenseinfo.IsEnabled_pipe==0?QStringLiteral("未激活"):QStringLiteral("已激活"));
        ui->label_isnetwork_2->setText(licenseinfo.IsEnabled_network==0?QStringLiteral("未激活"):QStringLiteral("已激活"));
//        ui->label_iscell_2->setText(licenseinfo.IsEnabled_cell==0?QStringLiteral("未激活"):QStringLiteral("已激活"));
//        ui->label_isaquifer_2->setText(licenseinfo.IsEnabled_aquifer==0?QStringLiteral("未激活"):QStringLiteral("已激活"));
//        ui->label_ispipe_2->setText(licenseinfo.IsEnabled_pipe==0?QStringLiteral("未激活"):QStringLiteral("已激活"));
//        ui->label_isnetwork_2->setText(licenseinfo.IsEnabled_network==0?QStringLiteral("未激活"):QStringLiteral("已激活"));
        ui->label_iscell_2->setText(localinfo.ActiveState==0?QStringLiteral("未激活"):QStringLiteral("已激活"));
        ui->label_isaquifer_2->setText(localinfo.ActiveState==0?QStringLiteral("未激活"):QStringLiteral("已激活"));
        ui->label_ispipe_2->setText(localinfo.ActiveState==0?QStringLiteral("未激活"):QStringLiteral("已激活"));
        ui->label_isnetwork_2->setText(localinfo.ActiveState==0?QStringLiteral("未激活"):QStringLiteral("已激活"));
    }
}
@@ -197,9 +263,11 @@
{
    QString encryptlocalid = ui->textEdit_localid->toPlainText();
    QString localid = getDecrypt(encryptlocalid,key);
    qDebug()<<"localid"<<localid;
    QByteArray localidbyte = localid.toLocal8Bit();
    qDebug()<<"localidbyte"<<localidbyte;
    QJsonParseError err_rpt;
    QJsonDocument localidjsondoc(QJsonDocument::fromJson(localidbyte, &err_rpt));//字符串格式化为JSON
    QJsonDocument localidjsondoc(QJsonDocument::fromJson(localid.toUtf8(), &err_rpt));//字符串格式化为JSON
    if(err_rpt.error != QJsonParseError::NoError)
    {
        localinfo = LicenseInfo();
@@ -221,20 +289,35 @@
        workingjsondoc = QJsonDocument(QJsonDocument::fromJson(localidbyte));
        QJsonObject localid_Obj = localidjsondoc.object();
        localinfo.Baseboard_Serialnumber = localid_Obj.value("Baseboard_Serialnumber").toString();
        localinfo.Baseboard_Uuid = localid_Obj.value("Baseboard_Uuid").toString();
        localinfo.Bios_Serialnumber = localid_Obj.value("Bios_Serialnumber").toString();
        localinfo.CPU_Processorid = localid_Obj.value("CPU_Processorid").toString();
        localinfo.Username = localid_Obj.value("Username").toString();
        localinfo.IsEnabled_cell = localid_Obj.value("IsEnabled_cell").toInt();
        localinfo.IsEnabled_aquifer = localid_Obj.value("IsEnabled_aquifer").toInt();
        localinfo.IsEnabled_pipe = localid_Obj.value("IsEnabled_pipe").toInt();
        localinfo.IsEnabled_network = localid_Obj.value("IsEnabled_network").toInt();
        localinfo.LicensedDuration_end = localid_Obj.value("LicensedDuration_end").toString();
        localinfo.LicensedDuration_start = localid_Obj.value("LicensedDuration_start").toString();
        localinfo.Productid = localid_Obj.value("Productid").toString();
        localinfo.Versionid = localid_Obj.value("Versionid").toString();
//        localinfo.Baseboard_Serialnumber = localid_Obj.value("Baseboard_Serialnumber").toString();
//        localinfo.Baseboard_Uuid = localid_Obj.value("Baseboard_Uuid").toString();
//        localinfo.Bios_Serialnumber = localid_Obj.value("Bios_Serialnumber").toString();
//        localinfo.CPU_Processorid = localid_Obj.value("CPU_Processorid").toString();
//        localinfo.Username = localid_Obj.value("Username").toString();
//        localinfo.IsEnabled_cell = localid_Obj.value("IsEnabled_cell").toInt();
//        localinfo.IsEnabled_aquifer = localid_Obj.value("IsEnabled_aquifer").toInt();
//        localinfo.IsEnabled_pipe = localid_Obj.value("IsEnabled_pipe").toInt();
//        localinfo.IsEnabled_network = localid_Obj.value("IsEnabled_network").toInt();
//        localinfo.LicensedDuration_end = localid_Obj.value("LicensedDuration_end").toString();
//        localinfo.LicensedDuration_start = localid_Obj.value("LicensedDuration_start").toString();
//        localinfo.Productid = localid_Obj.value("Productid").toString();
//        localinfo.Versionid = localid_Obj.value("Versionid").toString();
        //与之前的加密对应,且去掉冗余信息
//        localinfo.Baseboard_Serialnumber = localid_Obj.value(m_numToInfo.key("Baseboard_Serialnumber")).toString();
        localinfo.Baseboard_Uuid = localid_Obj.value(m_numToInfo.key("Baseboard_Uuid")).toString();
//        localinfo.Bios_Serialnumber = localid_Obj.value(m_numToInfo.key("Bios_Serialnumber")).toString();
        localinfo.CPU_Processorid = localid_Obj.value(m_numToInfo.key("CPU_Processorid")).toString();
        localinfo.Username = localid_Obj.value(m_numToInfo.key("Username")).toString();
//        localinfo.IsEnabled_cell = localid_Obj.value(m_numToInfo.key("IsEnabled_cell")).toInt();
//        localinfo.IsEnabled_aquifer = localid_Obj.value(m_numToInfo.key("IsEnabled_aquifer")).toInt();
//        localinfo.IsEnabled_pipe = localid_Obj.value(m_numToInfo.key("IsEnabled_pipe")).toInt();
//        localinfo.IsEnabled_network = localid_Obj.value(m_numToInfo.key("IsEnabled_network")).toInt();
        localinfo.LicensedDuration_end = localid_Obj.value(m_numToInfo.key("LicensedDuration_end")).toString();
        localinfo.LicensedDuration_start = localid_Obj.value(m_numToInfo.key("LicensedDuration_start")).toString();
        localinfo.Productid = localid_Obj.value(m_numToInfo.key("Productid")).toString();
        localinfo.Versionid = localid_Obj.value(m_numToInfo.key("Versionid")).toString();
        localinfo.ActiveState = localid_Obj.value(m_numToInfo.key("ActiveState")).toInt();
        licenseinfo = LicenseInfo(localinfo);
        changeUIstate();
    }
@@ -278,7 +361,8 @@
void MainWindow::on_pushButton_accreditpipe_clicked()
{
    QJsonObject licensekey_Obj = workingjsondoc.object();
    licensekey_Obj["IsEnabled_pipe"] = 1;
//    licensekey_Obj["IsEnabled_pipe"] = 1;
    licensekey_Obj["8"] = 1;
    workingjsondoc.setObject(licensekey_Obj);
    QByteArray jsonbytearray = workingjsondoc.toJson();
    ui->textEdit_licensekey->setPlainText("");
@@ -333,19 +417,20 @@
void MainWindow::setLicenseinfo(const QJsonObject licensekey_Obj)
{
    licenseinfo.Baseboard_Serialnumber = licensekey_Obj.value("Baseboard_Serialnumber").toString();
    licenseinfo.Baseboard_Uuid = licensekey_Obj.value("Baseboard_Uuid").toString();
    licenseinfo.Bios_Serialnumber = licensekey_Obj.value("Bios_Serialnumber").toString();
    licenseinfo.CPU_Processorid = licensekey_Obj.value("CPU_Processorid").toString();
    licenseinfo.Username = licensekey_Obj.value("Username").toString();
    licenseinfo.IsEnabled_cell = licensekey_Obj.value("IsEnabled_cell").toInt();
    licenseinfo.IsEnabled_aquifer = licensekey_Obj.value("IsEnabled_aquifer").toInt();
    licenseinfo.IsEnabled_pipe = licensekey_Obj.value("IsEnabled_pipe").toInt();
    licenseinfo.IsEnabled_network = licensekey_Obj.value("IsEnabled_network").toInt();
    licenseinfo.LicensedDuration_end = licensekey_Obj.value("LicensedDuration_end").toString();
    licenseinfo.LicensedDuration_start = licensekey_Obj.value("LicensedDuration_start").toString();
    licenseinfo.Productid = licensekey_Obj.value("Productid").toString();
    licenseinfo.Versionid = licensekey_Obj.value("Versionid").toString();
    licenseinfo.Baseboard_Serialnumber = licensekey_Obj.value(m_numToInfo.key("Baseboard_Serialnumber")).toString();
    licenseinfo.Baseboard_Uuid = licensekey_Obj.value(m_numToInfo.key("Baseboard_Uuid")).toString();
    licenseinfo.Bios_Serialnumber = licensekey_Obj.value(m_numToInfo.key("Bios_Serialnumber")).toString();
    licenseinfo.CPU_Processorid = licensekey_Obj.value(m_numToInfo.key("CPU_Processorid")).toString();
    licenseinfo.Username = licensekey_Obj.value(m_numToInfo.key("Username")).toString();
    licenseinfo.IsEnabled_cell = licensekey_Obj.value(m_numToInfo.key("IsEnabled_cell")).toInt();
    licenseinfo.IsEnabled_aquifer = licensekey_Obj.value(m_numToInfo.key("IsEnabled_aquifer")).toInt();
    licenseinfo.IsEnabled_pipe = licensekey_Obj.value(m_numToInfo.key("IsEnabled_pipe")).toInt();
    licenseinfo.IsEnabled_network = licensekey_Obj.value(m_numToInfo.key("IsEnabled_network")).toInt();
    licenseinfo.LicensedDuration_end = licensekey_Obj.value(m_numToInfo.key("LicensedDuration_end")).toString();
    licenseinfo.LicensedDuration_start = licensekey_Obj.value(m_numToInfo.key("LicensedDuration_start")).toString();
    licenseinfo.Productid = licensekey_Obj.value(m_numToInfo.key("Productid")).toString();
    licenseinfo.Versionid = licensekey_Obj.value(m_numToInfo.key("Versionid")).toString();
    licenseinfo.ActiveState = licensekey_Obj.value(m_numToInfo.key("ActiveState")).toInt();
    changeUIstate();
}
@@ -368,22 +453,38 @@
    QJsonDocument json_doc;//创建json文件
    QJsonObject json_obj;//创建json对象
    json_obj.insert("Username",localinfo.Username);
    json_obj.insert("CPU_Processorid",localinfo.CPU_Processorid);
    json_obj.insert("Bios_Serialnumber",localinfo.Bios_Serialnumber);
    json_obj.insert("Baseboard_Serialnumber",localinfo.Baseboard_Serialnumber);
    json_obj.insert("Baseboard_Uuid",localinfo.Baseboard_Uuid);
    json_obj.insert("IsEnabled_cell",localinfo.IsEnabled_cell);
    json_obj.insert("IsEnabled_aquifer",localinfo.IsEnabled_aquifer);
    json_obj.insert("IsEnabled_pipe",localinfo.IsEnabled_pipe);
    json_obj.insert("IsEnabled_network",localinfo.IsEnabled_network);
    json_obj.insert("LicensedDuration_start",localinfo.LicensedDuration_start);
    json_obj.insert("LicensedDuration_end",localinfo.LicensedDuration_end);
    json_obj.insert("Productid",localinfo.Productid);
    json_obj.insert("Versionid",localinfo.Versionid);
    json_doc.setObject(json_obj);//将json对象转为json文件
    QByteArray jsonbytearray = json_doc.toJson();
    localid = QString(jsonbytearray);
//    json_obj.insert("Username",localinfo.Username);
//    json_obj.insert("CPU_Processorid",localinfo.CPU_Processorid);
//    json_obj.insert("Bios_Serialnumber",localinfo.Bios_Serialnumber);
//    json_obj.insert("Baseboard_Serialnumber",localinfo.Baseboard_Serialnumber);
//    json_obj.insert("Baseboard_Uuid",localinfo.Baseboard_Uuid);
//    json_obj.insert("IsEnabled_cell",localinfo.IsEnabled_cell);
//    json_obj.insert("IsEnabled_aquifer",localinfo.IsEnabled_aquifer);
//    json_obj.insert("IsEnabled_pipe",localinfo.IsEnabled_pipe);
//    json_obj.insert("IsEnabled_network",localinfo.IsEnabled_network);
//    json_obj.insert("LicensedDuration_start",localinfo.LicensedDuration_start);
//    json_obj.insert("LicensedDuration_end",localinfo.LicensedDuration_end);
//    json_obj.insert("Productid",localinfo.Productid);
//    json_obj.insert("Versionid",localinfo.Versionid);
//    json_doc.setObject(json_obj);//将json对象转为json文件
//    QByteArray jsonbytearray = json_doc.toJson();
//    localid = QString(jsonbytearray);
    //其实主要加密的数据是value(电脑的具体参数信息),前边的描述是可以简写的,按照设定好的规则,只存储简单的key值
    //这里只获取我们优化后要选择加密的数据
    json_obj.insert(m_numToInfo.key("Username"),localinfo.Username);
    json_obj.insert(m_numToInfo.key("CPU_Processorid"),localinfo.CPU_Processorid);
    json_obj.insert(m_numToInfo.key("Baseboard_Uuid"),localinfo.Baseboard_Uuid);
    json_obj.insert(m_numToInfo.key("LicensedDuration_start"),localinfo.LicensedDuration_start);
    json_obj.insert(m_numToInfo.key("LicensedDuration_end"),localinfo.LicensedDuration_end);
    json_obj.insert(m_numToInfo.key("Productid"),localinfo.Productid);
    json_obj.insert(m_numToInfo.key("Versionid"),localinfo.Versionid);
    json_obj.insert(m_numToInfo.key("ActiveState"),localinfo.ActiveState);
    QByteArray compressedArray = QJsonDocument(json_obj).toJson(QJsonDocument::Compact);
    QByteArray jsonbytearray = qCompress(compressedArray,9);
    localid = jsonbytearray.toBase64();
    return localid;
}
@@ -401,6 +502,108 @@
    result = result.simplified();
    p.close();
    return result;
}
void MainWindow::giveLicense(int time)
{
    QJsonObject licensekey_Obj = workingjsondoc.object();
//    licensekey_Obj[m_numToInfo.key("IsEnabled_cell")] = 1;
//    licensekey_Obj[m_numToInfo.key("IsEnabled_aquifer")] = 1;
//    licensekey_Obj[m_numToInfo.key("IsEnabled_pipe")] = 1;
//    licensekey_Obj[m_numToInfo.key("IsEnabled_network")] = 1;
    licensekey_Obj[m_numToInfo.key("ActiveState")] = 1;
    QDateTime licensedate = QDateTime::fromString(licensekey_Obj[m_numToInfo.key("LicensedDuration_end")].toString(),"yyyy-MM-dd hh:mm:ss");
    if(licensedate.isNull()){
        qDebug()<<"licenseTime is Null";
        licensedate = QDateTime::currentDateTime();
    }
    QDateTime newlicensedate = licensedate.addMonths(time);
    QString licensedatestr = newlicensedate.toString("yyyy-MM-dd hh:mm:ss");
    licensekey_Obj[m_numToInfo.key("LicensedDuration_end")] = licensedatestr;
    workingjsondoc.setObject(licensekey_Obj);
    //数据压缩,去空格换行等多余无用信息
    QByteArray compressedArray = QJsonDocument(licensekey_Obj).toJson(QJsonDocument::Compact);
    QByteArray jsonbytearray = qCompress(compressedArray,9);
    QString testid = jsonbytearray.toBase64();
    ui->textEdit_licensekey->setPlainText("");
    ui->textEdit_licensekey->setPlainText(getEncrypt(QString(testid),key));
    setLicenseinfo(licensekey_Obj);
    //将授权信息记录到excel表中
    QString edition ="";
    if(time == 3){
        edition = "normal";
    }else if(time == 6){
        edition = "educational";
    }else if(time == 12){
        edition = "professional";
    }
    ActiveRecord(licensekey_Obj,edition,ui->textEdit_licensekey->toPlainText());
}
void MainWindow::ActiveRecord(QJsonObject jsonObj,QString edition, QString licenseKey)
{
    qDebug()<<"ActiveRecord"<<edition<<licenseKey;
    QString Baseboard_Uuid = jsonObj[m_numToInfo.key("Baseboard_Uuid")].toString();
    QString src = QApplication::applicationDirPath();
    QDir dir(src);
    QString file_name("activeList.xlsx");
    QString filepath=dir.path()+"/"+file_name;
    if(!dir.exists(file_name)){
        Document xlsx;
        // 设置列标题
        QStringList headers = {
            "Baseboard_Uuid",
            "edition",
            "LicensedDuration_start",
            "LicensedDuration_end",
            "Productid",
            "Versionid",
            "licenseKey"
        };
        // 写入标题行
        for (int col = 1; col <= headers.size(); ++col) {
            xlsx.write(1, col, headers[col - 1]);
        }
        xlsx.saveAs(filepath);
    }
    QXlsx::Document xlsx(filepath);
    int uuidColumn = -1;
    //先查找是否已经存在该项记录
    for(int i = 2; i <= xlsx.dimension().rowCount(); i++){
        QXlsx::Cell* headerCell = xlsx.cellAt(i, 1);
        if (headerCell) {
            QString headerValue = headerCell->value().toString();
            qDebug()<<"headerValue"<<headerValue<<Baseboard_Uuid;
            if (headerValue.compare(Baseboard_Uuid, Qt::CaseInsensitive) == 0) {
                uuidColumn = i;
                break;
            }
        }
    }
    qDebug()<<"uuidColumn"<<uuidColumn;
    if(uuidColumn == -1){
        //如果没有这条记录就写入新的
        qDebug()<<"here";
        int rowCount = xlsx.dimension().rowCount()+1;
        xlsx.write(rowCount, 1, jsonObj[m_numToInfo.key("Baseboard_Uuid")].toString());
        xlsx.write(rowCount, 2, edition);
        xlsx.write(rowCount, 3, jsonObj[m_numToInfo.key("LicensedDuration_start")].toString());
        xlsx.write(rowCount, 4, jsonObj[m_numToInfo.key("LicensedDuration_end")].toString());
        xlsx.write(rowCount, 5, jsonObj[m_numToInfo.key("Productid")].toString());
        xlsx.write(rowCount, 6, jsonObj[m_numToInfo.key("Versionid")].toString());
        xlsx.write(rowCount, 7, licenseKey);
    }else{
        //如果存在这条记录就更新数据信息
        xlsx.write(uuidColumn, 1, jsonObj[m_numToInfo.key("Baseboard_Uuid")].toString());
        xlsx.write(uuidColumn, 2, edition);
        xlsx.write(uuidColumn, 3, jsonObj[m_numToInfo.key("LicensedDuration_start")].toString());
        xlsx.write(uuidColumn, 4, jsonObj[m_numToInfo.key("LicensedDuration_end")].toString());
        xlsx.write(uuidColumn, 5, jsonObj[m_numToInfo.key("Productid")].toString());
        xlsx.write(uuidColumn, 6, jsonObj[m_numToInfo.key("Versionid")].toString());
        xlsx.write(uuidColumn, 7, licenseKey);
    }
    xlsx.save();
}
@@ -522,21 +725,51 @@
void MainWindow::on_pushButton_setproid_clicked()
{
    QJsonObject licensekey_Obj = workingjsondoc.object();
    licensekey_Obj["Productid"] = ui->lineEdit_setproid->text();
    licensekey_Obj[m_numToInfo.key("Productid")] = ui->lineEdit_setproid->text();
    workingjsondoc.setObject(licensekey_Obj);
    QByteArray jsonbytearray = workingjsondoc.toJson();
    QByteArray compressedArray = QJsonDocument(licensekey_Obj).toJson(QJsonDocument::Compact);
    QByteArray jsonbytearray = qCompress(compressedArray,9);
    QString testid = jsonbytearray.toBase64();
    ui->textEdit_licensekey->setPlainText("");
    ui->textEdit_licensekey->setPlainText(getEncrypt(QString(jsonbytearray),key));
    ui->textEdit_licensekey->setPlainText(getEncrypt(QString(testid),key));
//    QByteArray jsonbytearray = workingjsondoc.toJson();
//    ui->textEdit_licensekey->setPlainText("");
//    ui->textEdit_licensekey->setPlainText(getEncrypt(QString(jsonbytearray),key));
    setLicenseinfo(licensekey_Obj);
}
void MainWindow::on_pushButton_setversion_clicked()
{
    QJsonObject licensekey_Obj = workingjsondoc.object();
    licensekey_Obj["Versionid"] = ui->lineEdit_setversion->text();
    licensekey_Obj[m_numToInfo.key("Versionid")] = ui->lineEdit_setversion->text();
    workingjsondoc.setObject(licensekey_Obj);
    QByteArray jsonbytearray = workingjsondoc.toJson();
    QByteArray compressedArray = QJsonDocument(licensekey_Obj).toJson(QJsonDocument::Compact);
    QByteArray jsonbytearray = qCompress(compressedArray,9);
    QString testid = jsonbytearray.toBase64();
    ui->textEdit_licensekey->setPlainText("");
    ui->textEdit_licensekey->setPlainText(getEncrypt(QString(jsonbytearray),key));
    ui->textEdit_licensekey->setPlainText(getEncrypt(QString(testid),key));
//    QByteArray jsonbytearray = workingjsondoc.toJson();
//    ui->textEdit_licensekey->setPlainText("");
//    ui->textEdit_licensekey->setPlainText(getEncrypt(QString(jsonbytearray),key));
    setLicenseinfo(licensekey_Obj);
}
void MainWindow::on_pushButton_normal_clicked()
{
    giveLicense(3);
}
void MainWindow::on_pushButton_education_clicked()
{
    giveLicense(6);
}
void MainWindow::on_pushButton_profession_clicked()
{
    giveLicense(12);
}
mainwindow.h
@@ -5,6 +5,7 @@
#include <QCryptographicHash>
#include <QJsonDocument>
#include <QJsonObject>
#include <QMap>
QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
@@ -16,6 +17,7 @@
    QString Bios_Serialnumber = "";
    QString CPU_Processorid = "";
    QString Username = "";
    int ActiveState = 0;
    int IsEnabled_cell = 0;
    int IsEnabled_aquifer = 0;
    int IsEnabled_pipe = 0;
@@ -34,6 +36,8 @@
    MainWindow(QWidget *parent = nullptr);
    ~MainWindow();
    void initUI();
    QString toUpperAndLower(QString src);
    QString EncodebyBase64(const QString &src);
@@ -46,6 +50,8 @@
    QString AES_decryption(const QString &data, const QString &key);
    QByteArray AES_decryption_byte(const QString &data, const QString &key);
    QString getEncrypt(const QString &data, QString key);
    QString getDecrypt(const QString &data, QString key);
@@ -56,6 +62,11 @@
    QString getLocalID();
    QString getWindowsInfo(const QString &cmd);
    //授权集中在一起,不同点在于时间
    void giveLicense(int time);
    void ActiveRecord(QJsonObject jsonObj,QString edition, QString licenseKey);
private slots:
    void on_pushButton_decrypt_clicked();
@@ -91,6 +102,12 @@
    void on_pushButton_setversion_clicked();
    void on_pushButton_normal_clicked();
    void on_pushButton_education_clicked();
    void on_pushButton_profession_clicked();
private:
    Ui::MainWindow *ui;
@@ -100,5 +117,7 @@
    QJsonDocument workingjsondoc;
    QString key = "9aFUEFjsqHsde4DOhirdskgdznSDHlfb0ae";
    QMap<QString,QString> m_numToInfo;
};
#endif // MAINWINDOW_H
mainwindow.ui
@@ -7,7 +7,7 @@
    <x>0</x>
    <y>0</y>
    <width>750</width>
    <height>600</height>
    <height>638</height>
   </rect>
  </property>
  <property name="windowTitle">
@@ -100,7 +100,7 @@
    </item>
    <item row="2" column="0">
     <layout class="QGridLayout" name="gridLayout_6">
      <item row="3" column="0">
      <item row="4" column="0">
       <widget class="QPushButton" name="pushButton_dateset">
        <property name="enabled">
         <bool>false</bool>
@@ -110,53 +110,10 @@
        </property>
       </widget>
      </item>
      <item row="1" column="2">
       <widget class="QPushButton" name="pushButton_accreditaquifer">
      <item row="6" column="1" colspan="2">
       <widget class="QLineEdit" name="lineEdit_setversion">
        <property name="enabled">
         <bool>false</bool>
        </property>
        <property name="text">
         <string>授权含水通道</string>
        </property>
       </widget>
      </item>
      <item row="2" column="1">
       <widget class="QPushButton" name="pushButton_accreditpipe">
        <property name="enabled">
         <bool>false</bool>
        </property>
        <property name="text">
         <string>授权单裂隙</string>
        </property>
       </widget>
      </item>
      <item row="3" column="1">
       <widget class="QPushButton" name="pushButton_adddate">
        <property name="enabled">
         <bool>false</bool>
        </property>
        <property name="text">
         <string>+1个月</string>
        </property>
       </widget>
      </item>
      <item row="1" column="1">
       <widget class="QPushButton" name="pushButton_accreditcell">
        <property name="enabled">
         <bool>false</bool>
        </property>
        <property name="text">
         <string>授权孔隙单元</string>
        </property>
       </widget>
      </item>
      <item row="2" column="2">
       <widget class="QPushButton" name="pushButton_accreditnetwork">
        <property name="enabled">
         <bool>false</bool>
        </property>
        <property name="text">
         <string>授权裂隙网络</string>
        </property>
       </widget>
      </item>
@@ -167,24 +124,17 @@
        </property>
       </widget>
      </item>
      <item row="5" column="1" colspan="2">
       <widget class="QLineEdit" name="lineEdit_setversion">
        <property name="enabled">
         <bool>false</bool>
        </property>
       </widget>
      </item>
      <item row="2" column="0">
       <widget class="QPushButton" name="pushButton_deaccreditall">
      <item row="2" column="1">
       <widget class="QPushButton" name="pushButton_accreditcell">
        <property name="enabled">
         <bool>false</bool>
        </property>
        <property name="text">
         <string>解除所有授权</string>
         <string>授权孔隙单元</string>
        </property>
       </widget>
      </item>
      <item row="1" column="0">
      <item row="2" column="0">
       <widget class="QPushButton" name="pushButton_accreditall">
        <property name="enabled">
         <bool>false</bool>
@@ -194,27 +144,37 @@
        </property>
       </widget>
      </item>
      <item row="5" column="0">
       <widget class="QPushButton" name="pushButton_setversion">
        <property name="enabled">
         <bool>false</bool>
        </property>
        <property name="text">
         <string>设置版本</string>
        </property>
       </widget>
      </item>
      <item row="3" column="2">
       <widget class="QPushButton" name="pushButton_reducedate">
       <widget class="QPushButton" name="pushButton_accreditnetwork">
        <property name="enabled">
         <bool>false</bool>
        </property>
        <property name="text">
         <string>-1个月</string>
         <string>授权裂隙网络</string>
        </property>
       </widget>
      </item>
      <item row="4" column="0">
      <item row="3" column="1">
       <widget class="QPushButton" name="pushButton_accreditpipe">
        <property name="enabled">
         <bool>false</bool>
        </property>
        <property name="text">
         <string>授权单裂隙</string>
        </property>
       </widget>
      </item>
      <item row="4" column="1">
       <widget class="QPushButton" name="pushButton_adddate">
        <property name="enabled">
         <bool>false</bool>
        </property>
        <property name="text">
         <string>+1个月</string>
        </property>
       </widget>
      </item>
      <item row="5" column="0">
       <widget class="QPushButton" name="pushButton_setproid">
        <property name="enabled">
         <bool>false</bool>
@@ -224,13 +184,74 @@
        </property>
       </widget>
      </item>
      <item row="4" column="1" colspan="2">
      <item row="2" column="2">
       <widget class="QPushButton" name="pushButton_accreditaquifer">
        <property name="enabled">
         <bool>false</bool>
        </property>
        <property name="text">
         <string>授权含水通道</string>
        </property>
       </widget>
      </item>
      <item row="5" column="1" colspan="2">
       <widget class="QLineEdit" name="lineEdit_setproid">
        <property name="enabled">
         <bool>false</bool>
        </property>
       </widget>
      </item>
      <item row="3" column="0">
       <widget class="QPushButton" name="pushButton_deaccreditall">
        <property name="enabled">
         <bool>false</bool>
        </property>
        <property name="text">
         <string>解除所有授权</string>
        </property>
       </widget>
      </item>
      <item row="6" column="0">
       <widget class="QPushButton" name="pushButton_setversion">
        <property name="enabled">
         <bool>false</bool>
        </property>
        <property name="text">
         <string>设置版本</string>
        </property>
       </widget>
      </item>
      <item row="4" column="2">
       <widget class="QPushButton" name="pushButton_reducedate">
        <property name="enabled">
         <bool>false</bool>
        </property>
        <property name="text">
         <string>-1个月</string>
        </property>
       </widget>
      </item>
      <item row="1" column="0">
       <widget class="QPushButton" name="pushButton_normal">
        <property name="text">
         <string>授权普通版</string>
        </property>
       </widget>
      </item>
      <item row="1" column="1">
       <widget class="QPushButton" name="pushButton_education">
        <property name="text">
         <string>授权教育版</string>
        </property>
       </widget>
      </item>
      <item row="1" column="2">
       <widget class="QPushButton" name="pushButton_profession">
        <property name="text">
         <string>授权专业版</string>
        </property>
       </widget>
      </item>
     </layout>
    </item>
    <item row="1" column="0">