Newer
Older
AutomaticVerification / softwareDirectory / AutoVerScheme / dialogcheckresult.cpp
陈实 on 10 Apr 2024 14 KB 压力检定修改
#include "dialogcheckresult.h"
#include "ui_dialogcheckresult.h"
#include <QMessageBox>
#include <QDesktopServices>

DialogCheckResult::DialogCheckResult(QWidget *parent) :
    QDialog(parent),
    ui(new Ui::DialogCheckResult)
{
    ui->setupUi(this);
    ui->tableWidget->verticalHeader()->setParent(nullptr);
}

DialogCheckResult::~DialogCheckResult()
{
    delete ui;
}

void DialogCheckResult::deleteItem(QLayout *layout)
{
    QLayoutItem *child;
    while ((child = layout->takeAt(0)) != nullptr)
    {
        //setParent为NULL,防止删除之后界面不消失
        if(child->widget())
        {
            child->widget()->setParent(nullptr);
            delete child->widget();
        }
        else if (child->layout())
        {
            deleteItem(child->layout());
            child->layout()->deleteLater();
        }
        delete child;
    }
}
void DialogCheckResult::initCalDataTable(int idx)
{
    if(curHeadIdx==idx)
        return;
    curHeadIdx = idx;
    QString sLabel = headTableList->keys()[curHeadIdx];
    const auto &dataRes = caliDataList->value(sLabel);
    const auto &headrs = headTableList->value(sLabel);
    ui->tableWidget->clearContents();
    ui->tableWidget->setRowCount(0);
    ui->tableWidget->setColumnCount(0);
    ui->tableWidget->setColumnCount(headrs.count());
    ui->tableWidget->setHorizontalHeaderLabels(headrs);
    for(int i=0;i<headrs.count();i++)
    {
        ui->tableWidget->horizontalHeader()->setSectionResizeMode(i,QHeaderView::Stretch);
    }
    //tableWidget->setRowCount(data.count());
    int rowCount = 0;
    for (int i = 0; i < dataRes.count(); ++i) {
        //获取行号 并进行添加行
        rowCount = ui->tableWidget->rowCount();
        ui->tableWidget->insertRow(rowCount);
        ui->tableWidget->setItem(i, 0, new QTableWidgetItem(QString::number(i+1)));
        for(int j=1;j<dataRes[i].count();j++)
        {
           ui->tableWidget->setItem(i, j, new QTableWidgetItem(dataRes[i][j]));
        }
    }
}


void DialogCheckResult::initCheckTable(QMap<QString, QList<QStringList>> *measList,QMap<QString, QStringList> *headList,QString sID)
{
    caliDataList = measList;
    headTableList = headList;
    stdId = sID;
    ui->tableWidget->clearContents();
    ui->tableWidget->setRowCount(0);
    deleteItem(ui->HeadListLayout);
    int index=0;
    for (const auto &item : *headTableList) {
       // ========================================================================================
       // 数据循环显示
       // ===================================================================================
       QString sLabel = headTableList->keys()[index];
       // ========================================================================================
       // 按钮设置显示
       // ====================================================================================
       QPushButton *button = new QPushButton(sLabel, this);
       //设置样式
       // 设置按钮大小为 56x20
       button->setFixedSize(85, 40);
       button->setCheckable(true);
       button->setAutoExclusive(true);
       //设置第一个按钮选中状态
       if(index==0){  button->setChecked(true);}
       //button->setc(true);
       // 设置按钮样式表
       button->setStyleSheet("QPushButton {"
                               "border: 1px solid white;" // 白色边框
                               "border-bottom: 2px solid rgba(0, 255, 255, 1);" // 浅蓝色下划线
                               "background-color: rgba(242, 242, 242, 1);" // 浅灰色背景
                               "}"
                               "QPushButton:hover {"
                               "background-color: rgba(215, 215, 215, 1);;" // 鼠标悬停时变为深灰色背景
                               "}"
                               "QPushButton:checked {"
                               "color: white;"
                               "background-color: rgb(74, 102, 186);" // 选中时变为蓝色背景
                               "}");

       ui->HeadListLayout->addWidget(button);
       connect(button, &QPushButton::clicked, this, [this,index]() {
           //tackedWidget->setCurrentIndex(index);
           initCalDataTable(index);
       });
       ++index;
   }
   ui->HeadListLayout->addStretch();
   initCalDataTable(0);

   QList<JudgeCalibrationTable> CliTable = BaseCommonApi::getJudgeCalibrationTable(deviceId);
   if(CliTable.length()>0){
       iEquipType = CliTable[0].belong_standard_equipment.toInt();
   }
   catoryList = BaseCommonApi::getDeviceMeasureEquipmentCatory(deviceId);
}

QString DialogCheckResult::getValueByHeader(int idx,QString sLabel,QString sName){
    QList<QStringList> dataRes = caliDataList->value(sLabel);
    const auto &headrs = headTableList->value(sLabel);
    for(int i=0;i<headrs.length();i++){
        if(headrs[i]==sName)
            return dataRes[idx][i];
    }
    return "";
}

void DialogCheckResult::on_pushButton_3_clicked()
{
    SaveDeviceMeasureInfo measInfo;
    BaseCommonApi api;
    measInfo.id = QString::number(api.generateId());
    //measInfo.data_no;
    measInfo.order_id = taskList[0].id;
    measInfo.sample_id=deviceId;
    measInfo.sample_name = taskList[0].sample_name;
    measInfo.model = taskList[0].sample_model;
    measInfo.manufacturer = taskList[0].manufacturer;
    measInfo.manufacture_no = taskList[0].manufacture_no;
    measInfo.measure_category = catoryList[0].item_category_name;
    measInfo.item_id=catoryList[0].eqptDeviceModelId;
    measInfo.temperature = ui->lineEditTemp->text();
    measInfo.humidity =ui->lineEdit_Hum->text();
    measInfo.measure_address=ui->comboBoxPlace->currentText();
    measInfo.trace_date = ui->dateEditCheck->date();
    measInfo.measure_valid_date = ui->dateEdit_Valid->dateTime();
    measInfo.outcome = ui->lineEdit_Cons->text();
    if(BaseCommonApi::InsertSaveDeviceMeasureInfo(measInfo)){
        QStringList idList = stdId.split(",");
        for(const QString& id : idList)
        {
            DeviceMeasureEquipment equipment;
            equipment.id=QString::number(api.generateId());
            equipment.data_id = measInfo.id;
            equipment.equipment_id = id;
            equipment.create_time=equipment.update_time=QDateTime::currentDateTime();
            BaseCommonApi::InsertDeviceMeasureEquipment(equipment);
        }
        for (int k=0;k<headTableList->keys().length();k++) {
           QString sLabel = headTableList->keys()[k];
           const auto &dataRes = caliDataList->value(sLabel);
           //tableWidget->setRowCount(data.count());
           //多功能校准源
           if(iEquipType==1){
               for (int i = 0; i < dataRes.count(); ++i) {
                   SaveDeviceMeasureCalibrator measItem;
                   measItem.id = QString::number(api.generateId());
                   measItem.data_id = measInfo.id;
                   measItem.item_data_id = getValueByHeader(i,sLabel,"序号");
                   measItem.maximum_error_formula = getValueByHeader(i,sLabel,"最大允许误差");//最大允许误差(公式)
                   //measItem.error_param_a = item[11];//误差参数a
                   //measItem.error_param_b = item[12];//误差参数b
                   measItem.params = getValueByHeader(i,sLabel,"检定项目");//参数
                   measItem.capacity=getValueByHeader(i,sLabel,"量");//量
                   measItem.unit=getValueByHeader(i,sLabel,"单位");//单位
                   //measItem.frequency=item[5];//频率
                   //measItem.frequency_unit=item[6];//频率单位
                   measItem.range_range=getValueByHeader(i,sLabel,"量程");//量程
                   measItem.standard_value=getValueByHeader(i,sLabel,"标准值");//标准值(输入字段,特殊:指针式万用表输出字段)
                   measItem.indicating_value=getValueByHeader(i,sLabel,"示值");//示值(输出字段,特殊:指针式万用表输入字段)
                   measItem.maximum_error=getValueByHeader(i,sLabel,"最大允许误差");//最大允许误差(值)
                   measItem.absolute_error=getValueByHeader(i,sLabel,"绝对误差");//绝对误差
                   measItem.resolution=getValueByHeader(i,sLabel,"分辨力");//分辨力
                   measItem.measure_indication_value=getValueByHeader(i,sLabel,"示值");//被检表示值
                   BaseCommonApi::InsertVerMultiCal(measItem);
               }
           }
           //0.02压力活塞计
           else if(iEquipType==4){
               for (int i = 0; i < dataRes.count(); ++i) {
                   DeviceMeasureDataPistonGauge measItem;
                   measItem.id = QString::number(api.generateId());
                   measItem.data_id = measInfo.id;
                   if(sLabel=="示值误差"||sLabel=="回程误差"||sLabel=="轻敲位移")
                       measItem.data_type = "1";
                   else
                       measItem.data_type = "2";
                   measItem.data_category = "1";
                   measItem.before_friction_forward_stroke = getValueByHeader(i,sLabel,"轻敲前示值-正");
                   measItem.before_friction_reverse_stroke = getValueByHeader(i,sLabel,"轻敲前示值-反");
                   measItem.after_friction_forward_stroke = getValueByHeader(i,sLabel,"轻敲后示值-正");
                   measItem.after_friction_reverse_stroke = getValueByHeader(i,sLabel,"轻敲后示值-反");
                   measItem.variation_forward_stroke = getValueByHeader(i,sLabel,"轻敲前后变动量-正");
                   measItem.variation_reverse_stroke = getValueByHeader(i,sLabel,"轻敲前后变动量-反");
                   measItem.indicating_value=getValueByHeader(i,sLabel,"标准器示值");
                   BaseCommonApi::InsertDeviceMeasureDataPistonGauge(measItem);
               }
           }
        }
//        for(SaveDeviceMeasureCalibrator& item:measureCalList){
//            item.id = QString::number(api.generateId());
//            item.data_id = measInfo.id;
//            BaseCommonApi::InsertVerMultiCal(item);
//        }
       QMessageBox::information(this, "提示", "保存成功!");
    }
    else
    {
        QMessageBox::warning(this, "警告", "保存失败!");
    }
}

void DialogCheckResult::on_pushButton_2_clicked()
{
    QString strPath =QCoreApplication::applicationDirPath()+"//checkTemplate.doc";
    if(QFile::exists(strPath)){
        WordEngine engine;
        engine.open(strPath);
        QStringList itemList;
        QStringList conentList;
        itemList <<"unit"<<"address"<<"jianAddr"<<"time2"<<"temperature"<<"humidity";
        conentList <<""<<""<<ui->comboBoxPlace->currentText()<<ui->dateEditCheck->text()<<ui->lineEditTemp->text()<<ui->lineEdit_Hum->text();
        engine.setMarks("unit",taskList[0].customer_name);
        engine.setMarks("address","");
        engine.setMarks("name",taskList[0].sample_name);
        engine.setMarks("type",taskList[0].sample_model);
        engine.setMarks("serial",taskList[0].manufacture_no);
        engine.setMarks("factory",taskList[0].manufacturer);
        engine.setMarks("jianAddr",ui->comboBoxPlace->currentText());
        engine.setMarks("time2",ui->dateEditCheck->text());
        engine.setMarks("temperature",ui->lineEditTemp->text());
        engine.setMarks("humidity",ui->lineEdit_Hum->text());
        QList<CatDeviceInfor> result = BaseCommonApi::getCatDeviceInfor(stdId);
        if(result.length()>0){
            engine.setMarks("stdname",result[0].equipment_name);
            engine.setMarks("stdtype",result[0].model);
            engine.setMarks("stdno",result[0].manufacture_no);
            engine.setMarks("stduncert","");
            engine.setMarks("stdvalid",result[0].measure_valid_date);
        }

        //engine.setBatchMarks(itemList,conentLis;t)
        QString strLabel = "result";
        //engine.setMarks(strLabel,"1.表格1");

        for (int k=headTableList->keys().length()-1;k>=0;k--) {
           QString sLabel = headTableList->keys()[k];
           QString strTitle = QString("%1.%2").arg(k+2).arg(sLabel);
           const auto &headrs = headTableList->value(sLabel);
           const auto &dataRes = caliDataList->value(sLabel);
           int rows = dataRes.count()+1;
           int cols = headrs.length();
           QAxObject* pTable = engine.insertTable(strLabel,rows,cols,strTitle);
           for (int i=0;i<cols;i++){
               engine.setCellString(pTable,1,i+1,headrs[i]);
           }
           //tableWidget->setRowCount(data.count());
           for (int i = 0; i < dataRes.count(); ++i) {
               engine.setCellString(pTable,i+2,1,QString::number(i+1));
               for(int j=1;j<dataRes[i].count();j++)
               {
                   engine.setCellString(pTable,i+2,j+1,dataRes[i][j]);
               }
           }
        }
//        QString strTitle = "1.表格1";
//        int rows = measureCalList.length()+1;
//        int cols = measHeadList.length();
//        QAxObject* pTable = engine.insertTable(strLabel,rows,cols,strTitle);
//        for (int i=0;i<cols;i++){
//            engine.setCellString(pTable,1,i,measHeadList[i]);
//        }
//        for(int j=2;j<=rows;j++){
//            SaveDeviceMeasureCalibrator measItem =measureCalList[j-2];
//            engine.setCellString(pTable,j, 2, measItem.params);
//            engine.setCellString(pTable,j, 3, measItem.capacity);
//            engine.setCellString(pTable,j, 4, measItem.unit);
//            engine.setCellString(pTable,j, 5, measItem.frequency);
//            engine.setCellString(pTable,j, 6, measItem.frequency_unit);
//            engine.setCellString(pTable,j, 7, measItem.range_range);
//            engine.setCellString(pTable,j, 8, measItem.standard_value);
//            engine.setCellString(pTable,j, 9, measItem.resolution);
//            engine.setCellString(pTable,j, 10, measItem.maximum_error);
//            engine.setCellString(pTable,j, 11, measItem.error_param_a);
//            engine.setCellString(pTable,j, 12, measItem.error_param_b);
//            engine.setCellString(pTable,j, 15, measItem.indicating_value);
//            engine.setCellString(pTable,j, 19, measItem.measure_indication_value);
//        }
        QString savePath=QCoreApplication::applicationDirPath()+"//检定证书预览.doc";
        engine.saveAs(savePath);
        QUrl fileUrl = QUrl::fromLocalFile(savePath);
        QDesktopServices::openUrl(fileUrl);
    }else{
         QMessageBox::warning(this, "警告", strPath+"文件不存在!");
    }
}

void DialogCheckResult::on_pushButton_clicked()
{

}