Newer
Older
AutomaticVerification / softwareDirectory / AutoVerScheme / checkwindow.cpp
陈实 on 3 Apr 2024 37 KB 增加通信地址保存按钮
#include "checkwindow.h"
#include "ui_checkwindow.h"
#include "dialogcheckresult.h"
#include <QMessageBox>
#include "basecommonapi.h"
#include <QInputDialog>
#include "newcheckmethod.h"
#include "formcheckpoint.h"

CheckWindow::CheckWindow(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::CheckWindow)
{
    ui->setupUi(this);
    //ui->tableWidgetDevice->setColumnCount(8);
    //ui->tableWidgetMethod->setColumnCount(7);
    ui->tableWidgetDevice->verticalHeader()->setParent(nullptr);
    for(int i=2;i<8;i++)
        ui->tableWidgetDevice->horizontalHeader()->setSectionResizeMode(i,QHeaderView::Stretch);
    ui->tableWidgetMethod->verticalHeader()->setParent(nullptr); //隐藏行头
    for(int i=1;i<5;i++)
        ui->tableWidgetMethod->horizontalHeader()->setSectionResizeMode(i,QHeaderView::Stretch);
    ui->tableWidgetMethod->setColumnWidth(0, 60);
    ui->tableWidgetMethod->setColumnWidth(5, 100);
    ui->tableWidget_3->verticalHeader()->setParent(nullptr);
    for(int i=0;i<2;i++)
        ui->tableWidget_3->horizontalHeader()->setSectionResizeMode(i,QHeaderView::Stretch);
    ui->tableWidget_3->setSelectionBehavior(QAbstractItemView::SelectRows);
    ui->tableWidget_Point->verticalHeader()->setParent(nullptr);
    ui->tableWidget_Point->setColumnWidth(0, 60);
    for(int i=1;i<3;i++)
        ui->tableWidget_Point->horizontalHeader()->setSectionResizeMode(i,QHeaderView::Stretch);
    ui->tableWidget_Standard->verticalHeader()->setParent(nullptr);
    for(int i=0;i<2;i++)
        ui->tableWidget_Standard->horizontalHeader()->setSectionResizeMode(i,QHeaderView::Stretch);
    ui->tableWidgetStd->verticalHeader()->setParent(nullptr); //隐藏行头
    for(int i=1;i<7;i++)
        ui->tableWidgetStd->horizontalHeader()->setSectionResizeMode(i,QHeaderView::Stretch);
    ui->tableWidgetStd->setColumnWidth(0, 60);
    ui->tableWidgetCheck->verticalHeader()->setParent(nullptr);
    ui->comboBoxName->addItem("ALL");
    ui->comboBoxModal->addItem("ALL");
    ui->comboBoxCustomer->addItem("ALL");

    //统一定义单位转换系数
    unitTransList.insert("V",1);
    unitTransList.insert("MV",1000);
    unitTransList.insert("A",1);
    unitTransList.insert("MA",1000);
    unitTransList.insert("UA",1000000);
    unitTransList.insert("W",1);
    unitTransList.insert("KW",0.001);
    unitTransList.insert("Ω",1);
    unitTransList.insert("KΩ",0.001);
    unitTransList.insert("KΩ",0.000001);
    getCheckDevice();
    //ui->stackedWidget_2->setCurrentIndex(1);
    //ui->tableWidgetDevice->verticalHeader()->sectionResizeMode(QHeaderView::Stretch);
}

CheckWindow::~CheckWindow()
{
    myTaskList.clear();
    programList.clear();
    connectList.clear();
    selectTaskList.clear();
    headList.clear();
    calibrationList.clear();
    measureCalList.clear();
    delete ui;
}

void CheckWindow::showMethod()
{
    selectTaskList.clear();
    QString ids;
    for(int i=0;i<ui->tableWidgetDevice->rowCount();i++){
        Qt::CheckState state = ui->tableWidgetDevice->item(i,0)->checkState();
        if(state == Qt::Checked){
            selectTaskList.append(myTaskList[i]);
            measureInfo.order_id = myTaskList[i].id;
            /*if(ids=="")
                ids = myTaskList[i].id;
            else
                ids +=";"+ myTaskList[i].id;*/
            //break;
        }
    }
    if(selectTaskList.length()==0){
        QMessageBox::warning(this, "提示", "请选择被检设备!");
    }else{
        //qDebug() << "select ids:" << ids;
        ui->stackedWidget->setCurrentIndex(1);
        getCheckMethod();
    }
}

void CheckWindow::showStandard(){
    QString sId="";
    for(int i=0;i<ui->tableWidgetMethod->rowCount();i++){
        Qt::CheckState state = ui->tableWidgetMethod->item(i,0)->checkState();
        if(state == Qt::Checked){
            sId = programList[i].id;
            break;
        }
    }
    if(sId==""){
        QMessageBox::warning(this, "提示", "请选择检定程序!");
    }else{
        programInfo = BaseCommonApi::getVerificationProgramInfo(sId);
        QStringList idList;
        int rowCount=0;
        int row=0;
        ui->tableWidgetStd->clearContents();
        ui->tableWidgetStd->setRowCount(0);
        catDeviceList.clear();
        if(programInfo.standard_device_id!=""){
            idList = programInfo.standard_device_id.split(",");
            for(const QString& id : idList)
            {
                QList<CatDeviceInfor> result = BaseCommonApi::getCatDeviceInfor(id);
                if(result.length()>0){
                    catDeviceList.append(result[0]);
                    //更新标准设备表格
                    rowCount = ui->tableWidgetStd->rowCount();
                    ui->tableWidgetStd->insertRow(rowCount);
                    QTableWidgetItem* p_check = new QTableWidgetItem();
                    p_check->setCheckState(Qt::Unchecked);        //设置首列为 CheckBox 控件
                    ui->tableWidgetStd->setItem(row,0,p_check);
                    ui->tableWidgetStd->setItem(row, 1, new QTableWidgetItem(result[0].equipment_name));
                    ui->tableWidgetStd->setItem(row, 2, new QTableWidgetItem(result[0].model)); //设置数据
                    ui->tableWidgetStd->setItem(row, 3, new QTableWidgetItem(result[0].manufacture_no));
                    ui->tableWidgetStd->setItem(row, 4, new QTableWidgetItem(result[0].dept_name));
                    ui->tableWidgetStd->setItem(row, 5, new QTableWidgetItem(result[0].director_name));
                    ui->tableWidgetStd->setItem(row, 6, new QTableWidgetItem(result[0].measure_valid_date));
                    row++;
                }
                result.clear();
            }
            idList.clear();
        }
        ui->stackedWidget->setCurrentIndex(2);
    }
}

void CheckWindow::showDevice()
{
    QStringList idList = programInfo.standard_device_id.split(",");
    QString sId="";
    for(int i=0;i<ui->tableWidgetStd->rowCount();i++){
        Qt::CheckState state = ui->tableWidgetStd->item(i,0)->checkState();
        if(state == Qt::Checked){
            sId = idList[i];
            break;
        }
    }
    if(sId==""){
        QMessageBox::warning(this, "提示", "请选择标准设备!");
    }else{
        //programInfo = BaseCommonApi::getVerificationProgramInfo(sId);
        initDeviceInfo(sId);
        ui->stackedWidget->setCurrentIndex(3);
    }
}

void CheckWindow::initDeviceInfo(QString sId)
{
    standardId = sId;
    QString strStyle = QString("QLabel{image:url(%1);}").arg(programInfo.img_path);
    qDebug() << "strStyle:" << strStyle;
    ui->label_8->setStyleSheet(strStyle);


    ui->tableWidget_3->clearContents();
    ui->tableWidget_3->setRowCount(0);
    ui->tableWidget_Standard->clearContents();
    ui->tableWidget_Standard->setRowCount(0);
    QStringList idList;
    int rowCount=0;
    int row=0;
    connectList.clear();
    if(selectTaskList.length()>0)
    {
        QList<DeviceMeasureEquipmentCatory> catory = BaseCommonApi::getDeviceMeasureEquipmentCatory(selectTaskList[0].sample_id);
        if(catory.length() > 0 ){
            ui->lineEdit_category->setText(catory[0].item_category_name);
        }
        //idList = programInfo.tested_device_id.split(",");
        for(const Dept& task : selectTaskList)
        {
            ConnectInfo info;
            info.id = task.sample_id;
            info.type = 0;
            info.state="未连接";
            info.deviceName = task.sample_name;
            QList<VerificationProgramConfigInterface> addrList = BaseCommonApi::getVerificationProgramConfigInterface(info.id);
            if(addrList.length()>0){
                info.programInterface = addrList[0];
            }
            info.cmdList = BaseCommonApi::getInstructionLib(programInfo.id);
            connectList.append(info);
            addrList.clear();
        }
        idList.clear();
    }

    if(programInfo.standard_device_id!=""){
        idList = programInfo.standard_device_id.split(",");
        for(const QString& id : idList)
        {
            if(id!=sId)
                continue;
            ConnectInfo info;
            info.id = id;
            info.type = 1;
            info.state="未连接";
            QList<CatDeviceInfor> result = BaseCommonApi::getCatDeviceInfor(id);
            if(result.length()>0){
                info.deviceName = result[0].equipment_name;

                //更新标准设备表格
                rowCount = ui->tableWidget_Standard->rowCount();
                ui->tableWidget_Standard->insertRow(rowCount);
                ui->tableWidget_Standard->setItem(row, 0, new QTableWidgetItem(info.deviceName));
                ui->tableWidget_Standard->setItem(row, 1, new QTableWidgetItem("OFF")); //设置数据
                row++;
            }
            result.clear();
            QList<VerificationProgramConfigInterface> addrList = BaseCommonApi::getVerificationProgramConfigInterface(id);
            if(addrList.length()>0){
                info.programInterface = addrList[0];
            }
            info.cmdList = BaseCommonApi::getInstructionLib(id);
            connectList.append(info);
            addrList.clear();
        }
        idList.clear();
    }
    rowCount=0;
    row=0;
    for(const ConnectInfo& info : connectList){
        rowCount = ui->tableWidget_3->rowCount();
        ui->tableWidget_3->insertRow(rowCount);
        ui->tableWidget_3->setItem(row, 0, new QTableWidgetItem(info.deviceName));
        ui->tableWidget_3->setItem(row, 1, new QTableWidgetItem(info.state)); //设置数据
        row++;
    }
    ui->tableWidget_3->selectRow(0);
}

void CheckWindow::showCheck()
{
    deleteItem(ui->horizontalLayout_14);
    int idx=0;
    for (const Dept& task : selectTaskList)
    {
        QPushButton *btn_1 = new QPushButton();
        btn_1->setText(task.sample_name);
        btn_1->setStyleSheet("QPushButton{"
                             "background-color:rgb(240,240,240);"
                             "color:rgb(51,51,51);"
                             "}");
        //btn_1->setSizePolicy(QSizePolicy::Preferred,QSizePolicy::Fixed);
        QFont font;
        font.setPointSize(12);//字体大小
        font.setBold(true);
        btn_1->setFont(font);
        btn_1->setCursor(Qt::PointingHandCursor);
        connect(btn_1, &QPushButton::clicked, this, [this,task,idx]() {
            on_deviceButton_clicked(task,idx);
        });
        ui->horizontalLayout_14->addWidget(btn_1);
        idx++;
    }
    on_deviceButton_clicked(selectTaskList[0],0);
    ui->horizontalLayout_14->addStretch();

    if(selectTaskList.length()>0)
    {
        //QStringList idList=programInfo.tested_device_id.split(",");
        QString deviceId = selectTaskList[0].sample_id;
        QList<JudgeCalibrationTable> CliTable = BaseCommonApi::getJudgeCalibrationTable(deviceId);
        if(CliTable.length()>0){
            iEquipType = CliTable[0].belong_standard_equipment.toInt();
        }
        //QStringList headlist;
        headList.clear();
        calibrationList.clear();
        headTableList.clear();
        //calibrationList =BaseCommonApi::Search_CalibrationTable(deviceId,&headList);
        caliDataList = BaseCommonApi::Search_CalibrationTableClass(deviceId,&headTableList);

        //tableWidgetItem
        ui->tableWidget_Point->clearContents();
        ui->tableWidget_Point->setRowCount(0);
        deleteItem(ui->HeadListLayout);
        //循环数据
        int rowCount=0;
        int row=0;
//        for (const QStringList& item : calibrationList)
//        {
//            //获取行号 并进行添加行
//            rowCount = ui->tableWidget_Point->rowCount();
//            ui->tableWidget_Point->insertRow(rowCount);
//            QTableWidgetItem* p_check = new QTableWidgetItem();
//            p_check->setCheckState(Qt::Unchecked);        //设置首列为 CheckBox 控件
//            ui->tableWidget_Point->setItem(row,0,p_check);
//            ui->tableWidget_Point->setItem(row, 1, new QTableWidgetItem(item[8]));
//            ui->tableWidget_Point->setItem(row, 2, new QTableWidgetItem("1"));
//            row++;
//        }
        int index=0;
        for (const auto &item : headTableList) {
           // ========================================================================================
           // 数据循环显示
           // ===================================================================================
           QString sLabel = headTableList.keys()[index];
            const auto &dataRes = caliDataList.value(sLabel);
           //tableWidget->setRowCount(data.count());

           for (int i = 0; i < dataRes.count(); ++i) {
               //获取行号 并进行添加行
               rowCount = ui->tableWidget_Point->rowCount();
               ui->tableWidget_Point->insertRow(rowCount);
               if(i==0)
                   ui->tableWidget_Point->setItem(row, 0, new QTableWidgetItem(dataRes[i][1]));
               ui->tableWidget_Point->setItem(row, 1, new QTableWidgetItem(dataRes[i][5]));
               ui->tableWidget_Point->setItem(row, 2, new QTableWidgetItem("1"));
               row++;
           }
           // ========================================================================================
           // 按钮设置显示
           // ====================================================================================
           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);
               initCheckTable(index);
           });
           ++index;
       }
        ui->HeadListLayout->addStretch();
    }
    ui->stackedWidget_2->setCurrentIndex(1);
    initCheckTable(0);
}

void CheckWindow::on_deviceButton_clicked(Dept task,int idx)
{
    for(int i=0;i<selectTaskList.length();i++){
        QLayoutItem *child = ui->horizontalLayout_14->itemAt(i);
        QPushButton *btn_1 = qobject_cast<QPushButton *>(child->widget());
        if(i==idx){
            btn_1->setStyleSheet("QPushButton{"
                                 "background-color:rgb(55,83,123);"
                                 "color:rgb(255,255,255);"
                                 "}");
        }else{
            btn_1->setStyleSheet("QPushButton{"
                                 "background-color:rgb(240,240,240);"
                                 "color:rgb(51,51,51);"
                                 "}");
        }
    }
    ui->label_21->setText(QString("设备名称: %1").arg(task.sample_name));
    ui->label_22->setText(QString("型号规格: %1").arg(task.sample_model));
    ui->label_23->setText(QString("出厂编号: %1").arg(task.manufacture_no));
    ui->label_24->setText(QString("生产厂家: %1").arg(task.manufacturer));
}

void CheckWindow::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 CheckWindow::showMethodWidget()
{
    ui->stackedWidget_2->setCurrentIndex(0);
    ui->stackedWidget->setCurrentIndex(0);
    getCheckDevice();
}

void CheckWindow::showResult()
{
    DialogCheckResult* dlg = new DialogCheckResult;
    dlg->taskList =selectTaskList;
    dlg->deviceId = selectTaskList[0].sample_id;
    dlg->initCheckTable(&caliDataList,&headTableList,standardId);
    dlg->setModal(true);
    dlg->show();
}

void CheckWindow::SetHomePaheCombox(Dept task)
{
    if(comboBoxContainsItem(ui->comboBoxName,task.sample_name)){
        ui->comboBoxName->addItem(task.sample_name);
    }
    if(comboBoxContainsItem(ui->comboBoxModal,task.sample_model)){
        ui->comboBoxModal->addItem(task.sample_model);
    }
    if(comboBoxContainsItem(ui->comboBoxCustomer,task.customer_name)){
        ui->comboBoxCustomer->addItem(task.customer_name);
    }
}

bool CheckWindow::comboBoxContainsItem(QComboBox *comboBox, const QString &itemText)
{
    for (int i = 0; i < comboBox->count(); ++i) {
        if (comboBox->itemText(i) == itemText) {
            return false; // 找到匹配项,返回 true
        }
    }
    return true; // 没有找到匹配项,返回 false
}

void CheckWindow::getCheckDevice(bool bInit)
{
    myTaskList.clear();
    ui->tableWidgetDevice->clearContents();
    ui->tableWidgetDevice->setRowCount(0);
    //模拟用户ID
    QString userId="1695282436182188034";
    //myTaskList = BaseCommonApi::getMyTasks(userId,"3");
    myTaskList = BaseCommonApi::getAllData();
    if(bInit){
        for (int i=0;i<myTaskList.length();i++){
            if(myTaskList[i].measure_status=="3")
                SetHomePaheCombox(myTaskList[i]);
        }
        ui->comboBoxName->setCurrentIndex(0);
        ui->comboBoxModal->setCurrentIndex(0);
        ui->comboBoxCustomer->setCurrentIndex(0);
        ui->lineEditNo->setText("");
    }
    QString sFilterName = ui->comboBoxName->currentText();
    QString sFilterModal = ui->comboBoxModal->currentText();
    QString sFilterCustomer = ui->comboBoxCustomer->currentText();
    QString sFilterNo = ui->lineEditNo->text();
    for (int i=myTaskList.length()-1;i>=0;i--){
        bool bAdd=true;
        if(sFilterName!="ALL"&&myTaskList[i].sample_name!=sFilterName){
            bAdd=false;
        }
        if(sFilterModal!="ALL"&&myTaskList[i].sample_model!=sFilterModal){
            bAdd=false;
        }
        if(sFilterCustomer!="ALL"&&myTaskList[i].customer_name!=sFilterCustomer){
            bAdd=false;
        }
        if(sFilterNo!=""&&!myTaskList[i].manufacture_no.contains(sFilterNo)){
            bAdd=false;
        }
        if(!bAdd||myTaskList[i].measure_status!="3"){
            myTaskList.removeAt(i);
        }
    }
    int rowCount = 0;
    int row=0;
    QString State;
    for (const Dept& myTask : myTaskList) {
        rowCount = ui->tableWidgetDevice->rowCount();

        ui->tableWidgetDevice->insertRow(rowCount);
        QTableWidgetItem* p_check = new QTableWidgetItem();
        p_check->setCheckState(Qt::Unchecked);        //设置首列为 CheckBox 控件
        ui->tableWidgetDevice->setItem(row,0,p_check);

        ui->tableWidgetDevice->setItem(row, 1, new QTableWidgetItem(QString::number(row+1)));
        //ui->tableWidget->setItem(row, 0, new QTableWidgetItem(dept.id));
        ui->tableWidgetDevice->setItem(row, 2, new QTableWidgetItem(myTask.sample_name)); //设置数据
        ui->tableWidgetDevice->setItem(row, 3, new QTableWidgetItem(myTask.sample_model)); //设置数据
        ui->tableWidgetDevice->setItem(row, 4, new QTableWidgetItem(myTask.help_instruction)); //设置数据
        ui->tableWidgetDevice->setItem(row, 5, new QTableWidgetItem(myTask.manufacture_no)); //设置数据
        ui->tableWidgetDevice->setItem(row, 6, new QTableWidgetItem(myTask.manufacturer)); //设置数据
        ui->tableWidgetDevice->setItem(row, 7, new QTableWidgetItem(myTask.customer_name)); //设置数据
        row++;
    }
}

void CheckWindow::getCheckMethod()
{
    programList.clear();
    ui->tableWidgetMethod->clearContents();
    ui->tableWidgetMethod->setRowCount(0);
    //programList = BaseCommonApi::getVerificationProgramInfoMain();
    programList = BaseCommonApi::getVerificationProgramInfoByDeviceId(selectTaskList[0].sample_id);
    QString sFilterName = ui->lineEditName->text();
    QString sFilterUser = ui->lineEditCreator->text();
    for(int i=programList.length()-1;i>=0;i--){
        bool bAdd=true;
        if(sFilterName!=""&&!programList[i].program_name.contains(sFilterName)){
            bAdd=false;
        }
        if(sFilterUser!=""&&!programList[i].create_name.contains(sFilterUser)){
            bAdd=false;
        }
        if(!bAdd){
            programList.removeAt(i);
        }
    }
    int rowCount = 0;
    int row=0;
    for (const VerificationProgramInfo& program : programList) {
         rowCount = ui->tableWidgetMethod->rowCount();

         ui->tableWidgetMethod->insertRow(rowCount);
         QTableWidgetItem* p_check = new QTableWidgetItem();
         //p_check->setCheckState(Qt::Checked);        //设置首列为 CheckBox 控件
         p_check->setCheckState(Qt::Unchecked);
         ui->tableWidgetMethod->setItem(row,0,p_check);
         ui->tableWidgetMethod->setItem(row, 1, new QTableWidgetItem(program.program_name)); //设置数据
         ui->tableWidgetMethod->setItem(row, 2, new QTableWidgetItem(program.create_name)); //设置数据
         ui->tableWidgetMethod->setItem(row, 3, new QTableWidgetItem(program.create_time.toString())); //设置数据
         ui->tableWidgetMethod->setItem(row, 4, new QTableWidgetItem(program.remark)); //设置数据

         QPushButton *btn_1 = new QPushButton();
         btn_1->setText(tr("详情"));
         btn_1->setStyleSheet("QPushButton{"
                              "background-color:rgba(255,255,255,0);"
                              "color:rgba(0,0,255,100);"
                              "text-decoration:underline;"
                              "}");
         btn_1->setCursor(Qt::PointingHandCursor);
         connect(btn_1,SIGNAL(clicked()),this,SLOT(on_editButton_clicked()));

         btn_1->setIconSize(QSize(16,16));
         btn_1->setIcon(QIcon(":/image/Index/u2324.svg"));
         QWidget *tmp_widget = new QWidget();
         QHBoxLayout *tmp_layout = new QHBoxLayout(tmp_widget);
         tmp_layout->addWidget(btn_1);
         tmp_layout->setMargin(0);
         ui->tableWidgetMethod->setCellWidget(row,5,tmp_widget);
         row++;
    }
}

void CheckWindow::on_editButton_clicked()
{
    QPushButton *pushButton_ = dynamic_cast<QPushButton*>(this->sender());
    if(NULL == pushButton_)
    {
        return;
    }
    // 获取按钮的x坐标和y坐标
    int x = pushButton_->parentWidget()->frameGeometry().x();
    int y = pushButton_->parentWidget()->frameGeometry().y();
    // 根据按钮的x和y坐标来定位对应的单元格
    QModelIndex index = ui->tableWidgetMethod->indexAt(QPoint(x, y));
    // 获取该按钮所在表格的行号和列号
    int editIdx = index.row();
    //int column = index.column();
    QString sId =  programList[editIdx].id;
    NewCheckMethod* checkWindow = new NewCheckMethod(nullptr,sId,false);
    //checkWindow->checkManageWnd=this;
    checkWindow->setWindowState(Qt::WindowMaximized);
    checkWindow->setWindowModality(Qt::ApplicationModal);
    checkWindow->show();
}

void CheckWindow::on_tableWidgetDevice_cellChanged(int row, int column)
{

}

void CheckWindow::on_tableWidgetMethod_cellChanged(int row, int column)
{
    Qt::CheckState state = ui->tableWidgetMethod->item(row,0)->checkState();
    if(state == Qt::Checked)
    {
        for(int i=0;i<ui->tableWidgetMethod->rowCount();i++){
            if(i!=row)
            {
                ui->tableWidgetMethod->item(i,0)->setCheckState(Qt::Unchecked);
            }
        }
    }
}

void CheckWindow::on_pushButton_9_clicked()
{
    //showDevice();
    showStandard();
}

void CheckWindow::on_tableWidget_3_currentCellChanged(int currentRow, int currentColumn, int previousRow, int previousColumn)
{
    if(currentRow>=0&&currentRow<connectList.length()){
        currConnectIdx = currentRow;
        ConnectInfo info= connectList[currentRow];
        VerificationProgramConfigInterface addr = info.programInterface;
        if(addr.communication_type == "SerialPort")
            ui->radioButton_serial->setChecked(true);
        else
            ui->radioButton_visa->setChecked(true);
        ui->comboBox_visa->setCurrentText(addr.visa);
        if(addr.serial_port!=""){
            QStringList sList = addr.serial_port.split(";");
            if(sList.length()==5){
                ui->comboBox_port->setCurrentText(sList[0]);
                ui->comboBox_baurt->setCurrentText(sList[1]);
                ui->comboBox_check->setCurrentText(sList[2]);
                ui->comboBox_data->setCurrentText(sList[3]);
                ui->comboBox_stop->setCurrentText(sList[4]);
            }
        }
    }
}

void CheckWindow::initCheckTable(int idx)
{
//    ui->tableWidgetCheck->clearContents();
//    ui->tableWidgetCheck->setRowCount(0);
//    ui->tableWidgetCheck->setColumnCount(0);
//    int rowCount = 0;
//    int row=0;
//    ui->tableWidgetCheck->setColumnCount(headList.count());
//    ui->tableWidgetCheck->setHorizontalHeaderLabels(headList);
//    for(int i=0;i<headList.count();i++)
//    {
//        ui->tableWidgetCheck->horizontalHeader()->setSectionResizeMode(i,QHeaderView::Stretch);
//    }
//    measureCalList.clear();
//    for(int i=0;i<ui->tableWidget_Point->rowCount();i++){
//        Qt::CheckState state = ui->tableWidget_Point->item(i,0)->checkState();
//        if(state == Qt::Checked){
//            QStringList& item = calibrationList[i];
//            int cnt = ui->tableWidget_Point->item(i,2)->text().toInt();
//            for(int j=0;j<cnt;j++){
//                rowCount = ui->tableWidgetCheck->rowCount();
//                ui->tableWidgetCheck->insertRow(rowCount);
//                ui->tableWidgetCheck->setItem(row, 0, new QTableWidgetItem(QString::number(row+1)));
//                //循环读取值  headlist,count是列的数量
//                for(int k=1;k<headList.count();k++)
//                {
//                    ui->tableWidgetCheck->setItem(row, k, new QTableWidgetItem(item[k]));
//                }
//                SaveDeviceMeasureCalibrator measItem;
//                measItem.item_data_id = item[1];
//                measItem.maximum_error_formula = item[10];//最大允许误差(公式)
//                measItem.error_param_a = item[11];//误差参数a
//                measItem.error_param_b = item[12];//误差参数b
//                measItem.params = item[2];//参数
//                measItem.capacity=item[3];//量
//                measItem.unit=item[4];//单位
//                measItem.frequency=item[5];//频率
//                measItem.frequency_unit=item[6];//频率单位
//                measItem.range_range=item[7];//量程
//                measItem.standard_value=item[8];//标准值(输入字段,特殊:指针式万用表输出字段)
//                measItem.indicating_value=item[15];//示值(输出字段,特殊:指针式万用表输入字段)
//                measItem.maximum_error=item[10];//最大允许误差(值)
//                //measItem.absolute_error=item[11];//绝对误差
//                measItem.resolution=item[9];//分辨力
//                measItem.measure_indication_value=item[19];//被检表示值
//                measureCalList.append(measItem);
//                row++;
//            }
//        }
//    }
    if(curHeadIdx==idx)
        return;
    curHeadIdx = idx;
    QString sLabel = headTableList.keys()[curHeadIdx];
    const auto &dataRes = caliDataList.value(sLabel);
    const auto &headrs = headTableList.value(sLabel);
    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);
    }
    //tableWidget->setRowCount(data.count());
    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]));
        }
    }
}

void CheckWindow::connectDevice(){
    if(connectList.length()>0&&connectList[0].type==0)
        deviceEngine.openDevice(connectList[0].programInterface.visa,"Visa");
    if(connectList.length()>1&&connectList[1].type==1)
        standardEngine.openDevice(connectList[1].programInterface.visa,"Visa");
}

InstructionLib* CheckWindow::getCmdByCheckName(int idx,QString name)
{
    if(idx>=0&&idx<connectList.length()){
        for (InstructionLib& item : connectList[idx].cmdList) {
            if(item.belong_vername==name)
                return &item;
        }
    }
    return nullptr;
}

int CheckWindow::getIndexByHeader(QString sLabel,QString sName){
     const auto &headrs = headTableList.value(sLabel);
     for(int i=0;i<headrs.length();i++){
         if(headrs[i]==sName)
             return i;
     }
     return -1;
}

double CheckWindow::transUnit(QString sData,QString sUnit){
    double dTmp = sData.toDouble();
    if(unitTransList.contains(sUnit.toUpper())){
        dTmp*=unitTransList.value(sUnit.toUpper());
    }
    return dTmp;
}

void CheckWindow::on_pushButton_start_clicked()
{
    connectDevice();
    for(int i=0;i<headTableList.keys().length();i++)
    {
        initCheckTable(i);
        QString sLabel = headTableList.keys()[i];
        QList<QStringList> dataRes = caliDataList.value(sLabel);

        for (int i = 0; i < dataRes.count(); ++i) {
            QString sRet="";
            double dStdValue,dError;
            //标准器输出
            int idx= getIndexByHeader(sLabel,"检定项目");
            QString sParam = dataRes[i][idx];
            if(standardEngine.getState()){
                InstructionLib *instrcutLib = getCmdByCheckName(1,sParam);
                if(instrcutLib!=nullptr){
                    QStringList sList = instrcutLib->instruct_config.split(";");
                    if(sList.length()>0){
                        for (QString& sCmd : sList){
                            standardEngine.sendData(sCmd);
                            qDebug() << "standard cmds:" << sCmd;
                        }
                    }
                }
            }
            //被检设备读数
            if(deviceEngine.getState()){
                InstructionLib *instrcutLib = getCmdByCheckName(0,sParam);
                if(instrcutLib!=nullptr){
                    QStringList sList = instrcutLib->instruct_config.split(";");
                    if(sList.length()>0){
                        for (QString& sCmd : sList){
                            deviceEngine.sendData(sCmd);
                            qDebug() << "config cmds:" << sCmd;
                        }
                    }
                    Delay_MSec(2000);
                    qDebug() << "query cmds:" << instrcutLib->instruct_read;
                    sRet = deviceEngine.queryData(instrcutLib->instruct_read);
                    idx= getIndexByHeader(sLabel,"单位");
                    dStdValue = transUnit(sRet,dataRes[i][idx]);
                }
            }
            //
            if(sRet==""){
                bool bOk = false;
                dStdValue = QInputDialog::getDouble(this,"手动测试","请输入被检示值",0,-100000,	100000,1,&bOk);

                if (bOk) {
                    sRet = QString::number(dStdValue);
                    //idx= getIndexByHeader(sLabel,"单位");
                    //dStdValue = transUnit(sRet,dataRes[i][idx]);
                    //sRet = QString::number(dStdValue);
                }
            }
            //item.measure_indication_value = sRet;
            if(iEquipType==1){
                idx= getIndexByHeader(sLabel,"示值");
                dataRes[i][idx] = QString::number(dStdValue);
                ui->tableWidgetCheck->setItem(i,idx,new QTableWidgetItem(QString::number(dStdValue))); //示值
                idx= getIndexByHeader(sLabel,"标准值");
                double dTmp = dataRes[i][idx].toDouble();
                dError = dStdValue-dTmp;
                idx= getIndexByHeader(sLabel,"绝对误差");
                dataRes[i][idx] = QString::number(dError);
                ui->tableWidgetCheck->setItem(i,idx,new QTableWidgetItem(QString::number(dError))); //示值
            }
            //ui->tableWidgetCheck->setItem(i,19,new QTableWidgetItem(sRet));
        }
        caliDataList.insert(sLabel,dataRes);
    }
//    initCheckTable();
//    for(int i=0;i<measureCalList.length();i++)
//    {
//        SaveDeviceMeasureCalibrator& item = measureCalList[i];
//        QString sRet="";
//        //标准器输出
//        if(standardEngine.getState()){
//            InstructionLib *instrcutLib = getCmdByCheckName(1,item.params);
//            if(instrcutLib!=nullptr){
//                QStringList sList = instrcutLib->instruct_config.split(";");
//                if(sList.length()>0){
//                    for (QString& sCmd : sList){
//                        standardEngine.sendData(sCmd);
//                    }
//                }
//            }
//        }
//        //被检设备读数
//        if(deviceEngine.getState()){
//            InstructionLib *instrcutLib = getCmdByCheckName(0,item.params);
//            if(instrcutLib!=nullptr){
//                QStringList sList = instrcutLib->instruct_config.split(";");
//                if(sList.length()>0){
//                    for (QString& sCmd : sList){
//                        deviceEngine.sendData(sCmd);
//                    }
//                }
//                Delay_MSec(2000);
//                sRet = deviceEngine.queryData(instrcutLib->instruct_read);
//            }
//        }
//        //
//        if(sRet==""){
//            bool bOk = false;
//            double dRet = QInputDialog::getDouble(this,"手动测试","请输入被检示值",0,-100000,	100000,1,&bOk);

//            if (bOk) {
//                sRet = QString::number(dRet);
//            }
//        }
//        item.measure_indication_value = sRet;
//        ui->tableWidgetCheck->setItem(i,15,new QTableWidgetItem(sRet)); //示值
//        ui->tableWidgetCheck->setItem(i,19,new QTableWidgetItem(sRet));
//    }
}

void CheckWindow::Delay_MSec(unsigned int msec)
{
    QTime _Timer = QTime::currentTime().addMSecs(msec);
    while( QTime::currentTime() < _Timer )
        QCoreApplication::processEvents(QEventLoop::AllEvents, 100);
}

void CheckWindow::on_pushButton_pause_clicked()
{

}

void CheckWindow::on_pushButton_stop_clicked()
{

}

void CheckWindow::on_pushButton_clicked()
{
    getCheckDevice(false);
}

void CheckWindow::on_pushButton_2_clicked()
{
    ui->comboBoxName->setCurrentIndex(0);
    ui->comboBoxModal->setCurrentIndex(0);
    ui->comboBoxCustomer->setCurrentIndex(0);
    ui->lineEditNo->setText("");
    getCheckDevice(false);
}

void CheckWindow::on_pushButton_10_clicked()
{
    getCheckMethod();
}

void CheckWindow::on_pushButton_11_clicked()
{
    ui->lineEditName->setText("");
    ui->lineEditCreator->setText("");
    getCheckMethod();
}

void CheckWindow::on_pushButton_4_clicked()
{

}

void CheckWindow::on_pushButton_5_clicked()
{

}

void CheckWindow::on_pushButton_6_clicked()
{
    showDevice();
}

void CheckWindow::on_pushButton_7_clicked()
{
    FormCheckPoint *checkWindow = new FormCheckPoint(nullptr,selectTaskList[0].sample_id);
    checkWindow->setWindowState(Qt::WindowMaximized);
    checkWindow->setWindowModality(Qt::ApplicationModal);
    checkWindow->show();
}

void CheckWindow::on_pushButton_8_clicked()
{
    ConnectInfo& item = connectList[currConnectIdx];
    if(item.programInterface.id==""){
        BaseCommonApi baseApi;
        qint64 id = baseApi.generateId();
        item.programInterface.id = QString::number(id);
        item.programInterface.device_id = item.id;
        if(ui->radioButton_serial->isChecked())
            item.programInterface.communication_type = "SerialPort";
        else
            item.programInterface.communication_type = "Visa";
        item.programInterface.serial_port = QString("%1;%2;%3;%4;%5").arg(ui->comboBox_port->currentText()).arg(ui->comboBox_baurt->currentText()).arg(ui->comboBox_check->currentText())
                .arg(ui->comboBox_data->currentText()).arg(ui->comboBox_stop->currentText());
        item.programInterface.visa = ui->comboBox_visa->currentText();
        if(BaseCommonApi::InsertVerificationProgramConfigInterface(item.programInterface)){
            QMessageBox::information(this, "提示", "保存成功!");
        }
        else
        {
            QMessageBox::warning(this, "警告", "保存失败!");
        }
    }else{
        if(ui->radioButton_serial->isChecked())
            item.programInterface.communication_type = "SerialPort";
        else
            item.programInterface.communication_type = "Visa";
        item.programInterface.serial_port = QString("%1;%2;%3;%4;%5").arg(ui->comboBox_port->currentText()).arg(ui->comboBox_baurt->currentText()).arg(ui->comboBox_check->currentText())
                .arg(ui->comboBox_data->currentText()).arg(ui->comboBox_stop->currentText());
        item.programInterface.visa = ui->comboBox_visa->currentText();
        if(BaseCommonApi::UpdateVerificationProgramConfigInterface(item.programInterface)){
             QMessageBox::information(this, "提示", "保存成功!");
        }else{
            QMessageBox::warning(this, "警告", "保存失败!");
        }
    }
}