Newer
Older
AutomaticVerification / softwareDirectory / AutoVerScheme / dialogverifyresult.cpp
陈实 on 28 Apr 2024 13 KB 自动核查修改
#include "dialogverifyresult.h"
#include "ui_dialogverifyresult.h"
#include "basecommonapi.h"
#include <QMessageBox>

DialogVerifyResult::DialogVerifyResult(QWidget *parent) :
    QDialog(parent),
    ui(new Ui::DialogVerifyResult)
{
    ui->setupUi(this);
    QStringList headers;
    headers <<"序号"<<"设备名称"<<"型号规格"<<"出厂编号"<<"制造厂"<<"证书有效期"<<"备注";;
    ui->tableWidgetStd->setColumnCount(headers.count());
    ui->tableWidgetStd->setHorizontalHeaderLabels(headers);
    ui->tableWidgetChecker->setColumnCount(headers.count());
    ui->tableWidgetChecker->setHorizontalHeaderLabels(headers);
    for(int i=1;i<headers.count();i++)
    {
        ui->tableWidgetStd->horizontalHeader()->setSectionResizeMode(i,QHeaderView::Stretch);
        ui->tableWidgetChecker->horizontalHeader()->setSectionResizeMode(i,QHeaderView::Stretch);
    }
    ui->tableWidgetStd->verticalHeader()->setParent(nullptr);
    ui->tableWidgetChecker->verticalHeader()->setParent(nullptr);
    ui->tableWidgetCheck->verticalHeader()->setParent(nullptr);
    ui->tableWidgetCheckStable->verticalHeader()->setParent(nullptr);
}

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

void DialogVerifyResult::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 DialogVerifyResult::setData(int iType,QMap<QString,QMap<QString, QList<QStringList>>>* data,
                                 QMap<QString,QMap<QString, QStringList>>* header,CheckProgramManage* program,QString stdId,QString bizIds)
{
    iEquipType=iType;
    veriDataMapList=data;
    veriHeadList = header;
    programInfo=program;
    selectStdIds = stdId;
    selectBizIds=bizIds;

    QStringList idList = selectStdIds.split(",");
    int rowCount=0;
    int row=0;
    for(const QString& id : idList)
    {
        //<<"序号"<<"设备名称"<<"型号规格"<<"出厂编号"<<"制造厂"<<"证书有效期"<<"备注";
        QList<CatDeviceInfor> result = BaseCommonApi::getCatDeviceInfor(id);
        if(result.length()>0){
            CatDeviceInfor item = result[0];
            rowCount = ui->tableWidgetStd->rowCount();
            ui->tableWidgetStd->insertRow(rowCount);
            ui->tableWidgetStd->setItem(row, 0, new QTableWidgetItem(QString::number(row+1)));
            ui->tableWidgetStd->setItem(row, 1, new QTableWidgetItem(item.equipment_name));
            ui->tableWidgetStd->setItem(row, 2, new QTableWidgetItem(item.model)); //设置数据
            ui->tableWidgetStd->setItem(row, 3, new QTableWidgetItem(item.manufacture_no));
            ui->tableWidgetStd->setItem(row, 4, new QTableWidgetItem(item.manufacturer));
            ui->tableWidgetStd->setItem(row, 5, new QTableWidgetItem(item.measure_valid_date));
            ui->tableWidgetStd->setItem(row, 6, new QTableWidgetItem(item.remark));
            row++;
        }
        result.clear();
    }
    idList.clear();

    idList = selectBizIds.split(",");
    rowCount=0;
    row=0;
    for(const QString& id : idList)
    {
        QList<CatDeviceInfor> result = BaseCommonApi::getCatDeviceInfor(id);
        if(result.length()>0){
            CatDeviceInfor item = result[0];
            rowCount = ui->tableWidgetChecker->rowCount();
            ui->tableWidgetChecker->insertRow(rowCount);
            ui->tableWidgetChecker->setItem(row, 0, new QTableWidgetItem(QString::number(row+1)));
            ui->tableWidgetChecker->setItem(row, 1, new QTableWidgetItem(item.equipment_name));
            ui->tableWidgetChecker->setItem(row, 2, new QTableWidgetItem(item.model)); //设置数据
            ui->tableWidgetChecker->setItem(row, 3, new QTableWidgetItem(item.manufacture_no));
            ui->tableWidgetChecker->setItem(row, 4, new QTableWidgetItem(item.manufacturer));
            ui->tableWidgetChecker->setItem(row, 5, new QTableWidgetItem(item.measure_valid_date));
            ui->tableWidgetChecker->setItem(row, 6, new QTableWidgetItem(item.remark));
            row++;
        }
        result.clear();
    }
    idList.clear();

    deleteItem(ui->horizontalLayoutMain);
    mainTabIdx=-1;
    int index=0;
    for (const auto &item : veriHeadList->keys()) {
        // ========================================================================================
        // 按钮设置显示
        // ====================================================================================
        QPushButton *button = new QPushButton(item, 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);" // 浅灰色背景
                              "height:40px;"
                              "padding:5px;"
                              "}"
                              "QPushButton:hover {"
                              "background-color: rgba(215, 215, 215, 1);;" // 鼠标悬停时变为深灰色背景
                              "}"
                              "QPushButton:checked {"
                              "color: white;"
                              "background-color: rgb(74, 102, 186);" // 选中时变为蓝色背景
                              "}");

        ui->horizontalLayoutMain->addWidget(button);
        connect(button, &QPushButton::clicked, this, [this,index]() {
            //tackedWidget->setCurrentIndex(index);
            initCheckTable(index);
        });
        //pageButtons.append(button);
        ++index;
    }
    ui->horizontalLayoutMain->addStretch();
    initCheckTable(0);
}

void DialogVerifyResult::initCheckTable(int idx)
{
    if(mainTabIdx==idx||veriHeadList->keys().count()==0)
        return;
    mainTabIdx = idx;
    QString sLabel = veriHeadList->keys()[mainTabIdx];
    QString sLabel2 = "重复性";
    const auto veriData = veriDataMapList->value(sLabel);
    auto dataRes = veriData.value(sLabel2);
    const auto headDta = veriHeadList->value(sLabel);
    auto headrs = headDta.value(sLabel2);
    ui->tableWidgetCheck->clearContents();
    ui->tableWidgetCheck->setRowCount(0);
    ui->tableWidgetCheck->setColumnCount(0);
    ui->tableWidgetCheck->setColumnCount(headrs.count());
    ui->tableWidgetCheck->setHorizontalHeaderLabels(headrs);
    for(int i=0;i<headrs.count();i++)
    {
        ui->tableWidgetCheck->horizontalHeader()->setSectionResizeMode(i,QHeaderView::Stretch);
    }
    int rowCount = 0;
    for (int i = 0; i < dataRes.count(); ++i) {
        //获取行号 并进行添加行
        rowCount = ui->tableWidgetCheck->rowCount();
        ui->tableWidgetCheck->insertRow(rowCount);
        ui->tableWidgetCheck->setItem(i, 0, new QTableWidgetItem(QString::number(i+1)));
        for(int j=1;j<dataRes[i].count();j++)
        {
            ui->tableWidgetCheck->setItem(i, j, new QTableWidgetItem(dataRes[i][j]));
        }
    }

    sLabel2 = "稳定性";
    dataRes = veriData.value(sLabel2);
    headrs = headDta.value(sLabel2);
    ui->tableWidgetCheckStable->clearContents();
    ui->tableWidgetCheckStable->setRowCount(0);
    ui->tableWidgetCheckStable->setColumnCount(0);
    ui->tableWidgetCheckStable->setColumnCount(headrs.count());
    ui->tableWidgetCheckStable->setHorizontalHeaderLabels(headrs);
    for(int i=0;i<headrs.count();i++)
    {
        ui->tableWidgetCheckStable->horizontalHeader()->setSectionResizeMode(i,QHeaderView::Stretch);
    }
    rowCount = 0;
    for (int i = 0; i < dataRes.count(); ++i) {
        //获取行号 并进行添加行
        rowCount = ui->tableWidgetCheckStable->rowCount();
        ui->tableWidgetCheckStable->insertRow(rowCount);
        ui->tableWidgetCheckStable->setItem(i, 0, new QTableWidgetItem(QString::number(i+1)));
        for(int j=1;j<dataRes[i].count();j++)
        {
            ui->tableWidgetCheckStable->setItem(i, j, new QTableWidgetItem(dataRes[i][j]));
        }
    }
}

QString DialogVerifyResult::getValueByHeader(QStringList dataList,QStringList headList,QString sName){
    for(int i=0;i<headList.length();i++){
        if(headList[i]==sName)
            return dataList[i];
    }
    return "";
}

void DialogVerifyResult::on_pushButtonSave_2_clicked()
{
    StandardCheckInfo baseInfo;
    BaseCommonApi api;
    baseInfo.id = QString::number(api.generateId());
    baseInfo.data_no=ui->lineEditNo->text();//数据编号
    baseInfo.check_date=ui->dateEditTime->text();//核查日期
    baseInfo.check_address=ui->comboBoxPlace->currentText();//核查地点
    baseInfo.temperature=ui->lineEditTemp->text();//温度
    baseInfo.humidity=ui->lineEdit_Hum->text();//湿度
    baseInfo.check_accord=ui->lineEditRule->text();//核查依据(即标准装置的作业指导书文件minio文件名,多个分号分割)
    baseInfo.stability_examine=ui->comboBoxExam->currentText()=="是"?"1":"0";//是否用于稳定性考核(1/0)
    baseInfo.standard_equipment_id=programInfo->belong_standard_equipment_name;//被核查标准装置id
    //QString equipment_id;//被核查设备id
    baseInfo.item_category_id=programInfo->equipment_type;//核查项分类id
    baseInfo.conclusion=ui->comboBoxConclusion->currentText();//结论(字典value)
    baseInfo.remark=ui->lineEditNote->text();//备注
    //QString create_user_id;//核查员id
    baseInfo.create_user_name=ui->comboBox_User->currentText();//核查员
    baseInfo.create_time=baseInfo.update_time=QDateTime::currentDateTime();
    if(BaseCommonApi::InsertStandardCheckInfo(baseInfo)){
        switch (iEquipType) {
        case 1:
            for(QString sLabel : veriHeadList->keys()){
                QMap<QString, QStringList> items = veriHeadList->value(sLabel);
                for(QString sLabel2 : items.keys()){
                    QList<QStringList> dataRes = veriDataMapList->value(sLabel).value(sLabel2);
                    QStringList headers = items.value(sLabel2);
                    for (int i = 0; i < dataRes.count(); ++i) {
                        StandardCheckDataCalibrator calData;
                        calData.id= QString::number(api.generateId());
                        calData.data_id = baseInfo.id;//核查数据管理基础信息表id
                        calData.check_type=getValueByHeader(dataRes[i],headers,"核查类型");//核查类型(直接存字典value)
                        calData.test_type=getValueByHeader(dataRes[i],headers,"核查点类型");
                        calData.params=getValueByHeader(dataRes[i],headers,"核查项目");
                        calData.unit=getValueByHeader(dataRes[i],headers,"单位");
                        calData.frequency=getValueByHeader(dataRes[i],headers,"频率");
                        calData.frequency_unit=getValueByHeader(dataRes[i],headers,"频率单位");
                        calData.check_point=getValueByHeader(dataRes[i],headers,"核查点");
                        calData.unit=getValueByHeader(dataRes[i],headers,"单位");

                        if(sLabel2=="重复性"){
                            calData.test_value_one=getValueByHeader(dataRes[i],headers,"示值1");
                            calData.test_value_two=getValueByHeader(dataRes[i],headers,"示值2");
                            calData.test_value_three=getValueByHeader(dataRes[i],headers,"示值3");
                            calData.test_value_four=getValueByHeader(dataRes[i],headers,"示值4");
                            calData.test_value_five=getValueByHeader(dataRes[i],headers,"示值5");
                            calData.test_value_six=getValueByHeader(dataRes[i],headers,"示值6");
                            calData.average_value=getValueByHeader(dataRes[i],headers,"算数平均值");
                            calData.standard_deviation=getValueByHeader(dataRes[i],headers,"标准偏差S(X)");
                            calData.relative_repeatability=getValueByHeader(dataRes[i],headers,"相对重复性");
                        }else{
                            for(int k=0;k<headers.count();k++){
                                if(headers[k]=="算数平均值"){
                                    calData.average_value=dataRes[i][k];
                                    calData.test_value_six=dataRes[i][k-1];
                                    break;
                                }
                            }
                            calData.standard_deviation=getValueByHeader(dataRes[i],headers,"标准偏差S(X)");
                            calData.relative_repeatability=getValueByHeader(dataRes[i],headers,"相对重复性");
                            calData.urel=getValueByHeader(dataRes[i],headers,"Urel");
                            calData.less_than=getValueByHeader(dataRes[i],headers,"相对重复性是否小于相对扩展不确定度Urel");
                        }
                        calData.create_time=calData.update_time=QDateTime::currentDateTime();
                        BaseCommonApi::InsertStandardCheckDataCalibrator(calData);
                    }
                }
            }
            break;
        }
         QMessageBox::information(this, "提示", "保存成功!");
    }else{
        QMessageBox::warning(this, "警告", "保存失败!");
    }
}