diff --git a/softwareDirectory/AutoVerScheme/AutoVerScheme.pro b/softwareDirectory/AutoVerScheme/AutoVerScheme.pro index 145840b..bf70fab 100644 --- a/softwareDirectory/AutoVerScheme/AutoVerScheme.pro +++ b/softwareDirectory/AutoVerScheme/AutoVerScheme.pro @@ -48,12 +48,14 @@ inspectdataitem.cpp \ loginwindow.cpp \ main.cpp \ + mainsysdatabaseconnection.cpp \ mainwindow.cpp \ my_task.cpp \ newcheckmethod.cpp \ newverifymethod.cpp \ rulefileitem.cpp \ standard_deviceitem.cpp \ + synctask.cpp \ testdataitem.cpp \ testview.cpp \ verifydevice.cpp \ @@ -95,12 +97,14 @@ infomanageview.h \ inspectdataitem.h \ loginwindow.h \ + mainsysdatabaseconnection.h \ mainwindow.h \ my_task.h \ newcheckmethod.h \ newverifymethod.h \ rulefileitem.h \ standard_deviceitem.h \ + synctask.h \ testdataitem.h \ testview.h \ verifydevice.h \ diff --git a/softwareDirectory/AutoVerScheme/AutoVerScheme.pro b/softwareDirectory/AutoVerScheme/AutoVerScheme.pro index 145840b..bf70fab 100644 --- a/softwareDirectory/AutoVerScheme/AutoVerScheme.pro +++ b/softwareDirectory/AutoVerScheme/AutoVerScheme.pro @@ -48,12 +48,14 @@ inspectdataitem.cpp \ loginwindow.cpp \ main.cpp \ + mainsysdatabaseconnection.cpp \ mainwindow.cpp \ my_task.cpp \ newcheckmethod.cpp \ newverifymethod.cpp \ rulefileitem.cpp \ standard_deviceitem.cpp \ + synctask.cpp \ testdataitem.cpp \ testview.cpp \ verifydevice.cpp \ @@ -95,12 +97,14 @@ infomanageview.h \ inspectdataitem.h \ loginwindow.h \ + mainsysdatabaseconnection.h \ mainwindow.h \ my_task.h \ newcheckmethod.h \ newverifymethod.h \ rulefileitem.h \ standard_deviceitem.h \ + synctask.h \ testdataitem.h \ testview.h \ verifydevice.h \ diff --git a/softwareDirectory/AutoVerScheme/basecommonapi.cpp b/softwareDirectory/AutoVerScheme/basecommonapi.cpp index b8846b2..572246e 100644 --- a/softwareDirectory/AutoVerScheme/basecommonapi.cpp +++ b/softwareDirectory/AutoVerScheme/basecommonapi.cpp @@ -511,6 +511,37 @@ return isSuccess; } +//单独查询任务单表 +//更新 任务单 +InsertTask BaseCommonApi::SelectTaskSingle(QString order_id) +{ + InsertTask result; + QSqlQuery query; + query.prepare("SELECT * From biz_business_order_info WHERE id=:order_id"); + // 将参数绑定到占位符 + query.bindValue(":order_id", order_id); + if (query.exec()) { + while (query.next()) { + result.id = query.value("id").toString(); + result.customer_name = query.value("customer_name").toString(); + result.require_over_time = query.value("require_over_time").toString(); + result.deliverer = query.value("deliverer").toString(); + result.deliverer_tel = query.value("deliverer_tel").toString(); + result.undertaker_name = query.value("undertaker_name").toString(); + result.undertake_time = query.value("undertake_time").toString(); + bool is_urgent=false; + if(query.value("is_urgent").toString()=="是"){is_urgent=true;}else{is_urgent=false;}; + result.is_urgent = is_urgent; + result.receive_illustrate = query.value("receive_illustrate").toString(); + result.customer_id = query.value("customer_id").toString(); + + } + } else { + qDebug() << "Query execution failed: " << query.lastError().text(); + } + + return result; +} //删除任务单 bool BaseCommonApi::DeleteTask(QString id) { @@ -533,6 +564,38 @@ return allSuccessful; } +//删除任务单信息记录表同一任务ID的设备 +bool BaseCommonApi::DeleteTaskInfoRecordDevice(QString order_id) +{ + QSqlQuery query; + + //删除任务单样品表数据 + query.prepare("DELETE FROM biz_business_lab_executive_info WHERE order_id = :id"); + query.bindValue(":id", order_id); + + if (!query.exec()) { + qDebug() << "删除失败 " << query.lastError().text(); + return false; + } + + return true; +} +//删除任务详情表同一任务ID的设备 +bool BaseCommonApi::DeleteTaskSameDevice(QString order_id) +{ + QSqlQuery query; + + //删除任务单样品表数据 + query.prepare("DELETE FROM biz_business_order_sample_relation WHERE order_id = :id"); + query.bindValue(":id", order_id); + + if (!query.exec()) { + qDebug() << "删除失败 " << query.lastError().text(); + return false; + } + + return true; +} //删除任务单内设备 bool BaseCommonApi::DeleteTaskDevice(QString id) { @@ -821,8 +884,8 @@ */ //根据被检设备ID获取当前设备的 检定项目及检定点 -/* -QMap> BaseCommonApi::Search_CalibrationTable(QString DeiverId,QMap *HeadList) + +QMap> BaseCommonApi::Search_CalibrationTableClass(QString DeiverId,QMap *HeadList) { QMap> DataList; @@ -834,11 +897,11 @@ case 1: //CliTable[0].id //1717086652508487681 - DataList=BaseCommonApi::getVerMultiCal(CliTable[0].id,HeadList); + DataList=BaseCommonApi::getVerMultiCalClass(CliTable[0].id,HeadList); } return DataList; -}*/ +} //根据被检设备ID获取当前设备的 检定项目及检定点 QList BaseCommonApi::Search_CalibrationTable(QString DeiverId,QStringList *HeadList) { @@ -951,8 +1014,7 @@ return resultData; } //被检设备管理-检定项目及检定点-多功能校准源 -/* -QMap> BaseCommonApi::getVerMultiCal(QString itemId,QMap *headList) +QMap> BaseCommonApi::getVerMultiCalClass(QString itemId,QMap *headList) { QMap> DataMapList; QList resultData; @@ -998,7 +1060,7 @@ DataMapList= GetDataReturnItemList(resultData,DataMapList,headList); return DataMapList; } -*/ + QMap> BaseCommonApi::GetDataReturnItemList(QList ResultData,QMap> DataMapList,QMap *HeadMapList) { @@ -1052,7 +1114,7 @@ Data.append(row[9]); //分辨力 DCVList.append(Data); } - else if(ResultData[2].first()=="ACV") + else if(row[2]=="ACV") { QString VerificationItem=NULL; if(isFirst[1]) @@ -1086,7 +1148,7 @@ } Data.append(row[9]); //分辨力 ACVList.append(Data); - } else if(ResultData[2].first()=="DCI") + } else if(row[2]=="DCI") { QString VerificationItem=NULL; if(isFirst[2]) @@ -1122,7 +1184,7 @@ Data.append(row[9]); //分辨力 DCIList.append(Data); - } else if(ResultData[2].first()=="ACI") + } else if(row[2]=="ACI") { QString VerificationItem=NULL; if(isFirst[3]) @@ -1157,7 +1219,7 @@ } Data.append(row[9]); //分辨力 ACIList.append(Data); - } else if(ResultData[2].first()=="R") + } else if(row[2]=="R") { QString VerificationItem=NULL; if(isFirst[4]) diff --git a/softwareDirectory/AutoVerScheme/AutoVerScheme.pro b/softwareDirectory/AutoVerScheme/AutoVerScheme.pro index 145840b..bf70fab 100644 --- a/softwareDirectory/AutoVerScheme/AutoVerScheme.pro +++ b/softwareDirectory/AutoVerScheme/AutoVerScheme.pro @@ -48,12 +48,14 @@ inspectdataitem.cpp \ loginwindow.cpp \ main.cpp \ + mainsysdatabaseconnection.cpp \ mainwindow.cpp \ my_task.cpp \ newcheckmethod.cpp \ newverifymethod.cpp \ rulefileitem.cpp \ standard_deviceitem.cpp \ + synctask.cpp \ testdataitem.cpp \ testview.cpp \ verifydevice.cpp \ @@ -95,12 +97,14 @@ infomanageview.h \ inspectdataitem.h \ loginwindow.h \ + mainsysdatabaseconnection.h \ mainwindow.h \ my_task.h \ newcheckmethod.h \ newverifymethod.h \ rulefileitem.h \ standard_deviceitem.h \ + synctask.h \ testdataitem.h \ testview.h \ verifydevice.h \ diff --git a/softwareDirectory/AutoVerScheme/basecommonapi.cpp b/softwareDirectory/AutoVerScheme/basecommonapi.cpp index b8846b2..572246e 100644 --- a/softwareDirectory/AutoVerScheme/basecommonapi.cpp +++ b/softwareDirectory/AutoVerScheme/basecommonapi.cpp @@ -511,6 +511,37 @@ return isSuccess; } +//单独查询任务单表 +//更新 任务单 +InsertTask BaseCommonApi::SelectTaskSingle(QString order_id) +{ + InsertTask result; + QSqlQuery query; + query.prepare("SELECT * From biz_business_order_info WHERE id=:order_id"); + // 将参数绑定到占位符 + query.bindValue(":order_id", order_id); + if (query.exec()) { + while (query.next()) { + result.id = query.value("id").toString(); + result.customer_name = query.value("customer_name").toString(); + result.require_over_time = query.value("require_over_time").toString(); + result.deliverer = query.value("deliverer").toString(); + result.deliverer_tel = query.value("deliverer_tel").toString(); + result.undertaker_name = query.value("undertaker_name").toString(); + result.undertake_time = query.value("undertake_time").toString(); + bool is_urgent=false; + if(query.value("is_urgent").toString()=="是"){is_urgent=true;}else{is_urgent=false;}; + result.is_urgent = is_urgent; + result.receive_illustrate = query.value("receive_illustrate").toString(); + result.customer_id = query.value("customer_id").toString(); + + } + } else { + qDebug() << "Query execution failed: " << query.lastError().text(); + } + + return result; +} //删除任务单 bool BaseCommonApi::DeleteTask(QString id) { @@ -533,6 +564,38 @@ return allSuccessful; } +//删除任务单信息记录表同一任务ID的设备 +bool BaseCommonApi::DeleteTaskInfoRecordDevice(QString order_id) +{ + QSqlQuery query; + + //删除任务单样品表数据 + query.prepare("DELETE FROM biz_business_lab_executive_info WHERE order_id = :id"); + query.bindValue(":id", order_id); + + if (!query.exec()) { + qDebug() << "删除失败 " << query.lastError().text(); + return false; + } + + return true; +} +//删除任务详情表同一任务ID的设备 +bool BaseCommonApi::DeleteTaskSameDevice(QString order_id) +{ + QSqlQuery query; + + //删除任务单样品表数据 + query.prepare("DELETE FROM biz_business_order_sample_relation WHERE order_id = :id"); + query.bindValue(":id", order_id); + + if (!query.exec()) { + qDebug() << "删除失败 " << query.lastError().text(); + return false; + } + + return true; +} //删除任务单内设备 bool BaseCommonApi::DeleteTaskDevice(QString id) { @@ -821,8 +884,8 @@ */ //根据被检设备ID获取当前设备的 检定项目及检定点 -/* -QMap> BaseCommonApi::Search_CalibrationTable(QString DeiverId,QMap *HeadList) + +QMap> BaseCommonApi::Search_CalibrationTableClass(QString DeiverId,QMap *HeadList) { QMap> DataList; @@ -834,11 +897,11 @@ case 1: //CliTable[0].id //1717086652508487681 - DataList=BaseCommonApi::getVerMultiCal(CliTable[0].id,HeadList); + DataList=BaseCommonApi::getVerMultiCalClass(CliTable[0].id,HeadList); } return DataList; -}*/ +} //根据被检设备ID获取当前设备的 检定项目及检定点 QList BaseCommonApi::Search_CalibrationTable(QString DeiverId,QStringList *HeadList) { @@ -951,8 +1014,7 @@ return resultData; } //被检设备管理-检定项目及检定点-多功能校准源 -/* -QMap> BaseCommonApi::getVerMultiCal(QString itemId,QMap *headList) +QMap> BaseCommonApi::getVerMultiCalClass(QString itemId,QMap *headList) { QMap> DataMapList; QList resultData; @@ -998,7 +1060,7 @@ DataMapList= GetDataReturnItemList(resultData,DataMapList,headList); return DataMapList; } -*/ + QMap> BaseCommonApi::GetDataReturnItemList(QList ResultData,QMap> DataMapList,QMap *HeadMapList) { @@ -1052,7 +1114,7 @@ Data.append(row[9]); //分辨力 DCVList.append(Data); } - else if(ResultData[2].first()=="ACV") + else if(row[2]=="ACV") { QString VerificationItem=NULL; if(isFirst[1]) @@ -1086,7 +1148,7 @@ } Data.append(row[9]); //分辨力 ACVList.append(Data); - } else if(ResultData[2].first()=="DCI") + } else if(row[2]=="DCI") { QString VerificationItem=NULL; if(isFirst[2]) @@ -1122,7 +1184,7 @@ Data.append(row[9]); //分辨力 DCIList.append(Data); - } else if(ResultData[2].first()=="ACI") + } else if(row[2]=="ACI") { QString VerificationItem=NULL; if(isFirst[3]) @@ -1157,7 +1219,7 @@ } Data.append(row[9]); //分辨力 ACIList.append(Data); - } else if(ResultData[2].first()=="R") + } else if(row[2]=="R") { QString VerificationItem=NULL; if(isFirst[4]) diff --git a/softwareDirectory/AutoVerScheme/basecommonapi.h b/softwareDirectory/AutoVerScheme/basecommonapi.h index da7ce3c..098944a 100644 --- a/softwareDirectory/AutoVerScheme/basecommonapi.h +++ b/softwareDirectory/AutoVerScheme/basecommonapi.h @@ -920,7 +920,7 @@ //判断检定装置表并查询 参数设备id static QList Search_CalibrationTable(QString DeiverId,QStringList *HeadList); - //static QMap> Search_CalibrationTable(QString DeiverId,QMap *HeadList); + static QMap> Search_CalibrationTableClass(QString DeiverId,QMap *HeadList); //判断核查装置表并查询 参数设备id static QList Search_VerifyTable(QString DeiverId,QStringList *HeadList ); @@ -983,7 +983,7 @@ static JudgeCalibrationTable getJudgeVerifyTable(QString id); //被检设备管理-检定项目及检定点-多功能校准源 static QList getVerMultiCal(QString itemId,QStringList *headList); - //static QMap> getVerMultiCal(QString itemId,QMap *headList); + static QMap> getVerMultiCalClass(QString itemId,QMap *headList); static QMap> GetDataReturnItemList(QList ResultData, QMap> DataMapList, QMap *HeadMapList); @@ -1100,6 +1100,10 @@ static QList getMeasureModifyRecord(QString data_id); //查询最新结果保存记录 static SaveDeviceMeasureInfo getNewResultData(); + + static bool DeleteTaskSameDevice(QString order_id); + static bool DeleteTaskInfoRecordDevice(QString order_id); + static InsertTask SelectTaskSingle(QString order_id); }; diff --git a/softwareDirectory/AutoVerScheme/AutoVerScheme.pro b/softwareDirectory/AutoVerScheme/AutoVerScheme.pro index 145840b..bf70fab 100644 --- a/softwareDirectory/AutoVerScheme/AutoVerScheme.pro +++ b/softwareDirectory/AutoVerScheme/AutoVerScheme.pro @@ -48,12 +48,14 @@ inspectdataitem.cpp \ loginwindow.cpp \ main.cpp \ + mainsysdatabaseconnection.cpp \ mainwindow.cpp \ my_task.cpp \ newcheckmethod.cpp \ newverifymethod.cpp \ rulefileitem.cpp \ standard_deviceitem.cpp \ + synctask.cpp \ testdataitem.cpp \ testview.cpp \ verifydevice.cpp \ @@ -95,12 +97,14 @@ infomanageview.h \ inspectdataitem.h \ loginwindow.h \ + mainsysdatabaseconnection.h \ mainwindow.h \ my_task.h \ newcheckmethod.h \ newverifymethod.h \ rulefileitem.h \ standard_deviceitem.h \ + synctask.h \ testdataitem.h \ testview.h \ verifydevice.h \ diff --git a/softwareDirectory/AutoVerScheme/basecommonapi.cpp b/softwareDirectory/AutoVerScheme/basecommonapi.cpp index b8846b2..572246e 100644 --- a/softwareDirectory/AutoVerScheme/basecommonapi.cpp +++ b/softwareDirectory/AutoVerScheme/basecommonapi.cpp @@ -511,6 +511,37 @@ return isSuccess; } +//单独查询任务单表 +//更新 任务单 +InsertTask BaseCommonApi::SelectTaskSingle(QString order_id) +{ + InsertTask result; + QSqlQuery query; + query.prepare("SELECT * From biz_business_order_info WHERE id=:order_id"); + // 将参数绑定到占位符 + query.bindValue(":order_id", order_id); + if (query.exec()) { + while (query.next()) { + result.id = query.value("id").toString(); + result.customer_name = query.value("customer_name").toString(); + result.require_over_time = query.value("require_over_time").toString(); + result.deliverer = query.value("deliverer").toString(); + result.deliverer_tel = query.value("deliverer_tel").toString(); + result.undertaker_name = query.value("undertaker_name").toString(); + result.undertake_time = query.value("undertake_time").toString(); + bool is_urgent=false; + if(query.value("is_urgent").toString()=="是"){is_urgent=true;}else{is_urgent=false;}; + result.is_urgent = is_urgent; + result.receive_illustrate = query.value("receive_illustrate").toString(); + result.customer_id = query.value("customer_id").toString(); + + } + } else { + qDebug() << "Query execution failed: " << query.lastError().text(); + } + + return result; +} //删除任务单 bool BaseCommonApi::DeleteTask(QString id) { @@ -533,6 +564,38 @@ return allSuccessful; } +//删除任务单信息记录表同一任务ID的设备 +bool BaseCommonApi::DeleteTaskInfoRecordDevice(QString order_id) +{ + QSqlQuery query; + + //删除任务单样品表数据 + query.prepare("DELETE FROM biz_business_lab_executive_info WHERE order_id = :id"); + query.bindValue(":id", order_id); + + if (!query.exec()) { + qDebug() << "删除失败 " << query.lastError().text(); + return false; + } + + return true; +} +//删除任务详情表同一任务ID的设备 +bool BaseCommonApi::DeleteTaskSameDevice(QString order_id) +{ + QSqlQuery query; + + //删除任务单样品表数据 + query.prepare("DELETE FROM biz_business_order_sample_relation WHERE order_id = :id"); + query.bindValue(":id", order_id); + + if (!query.exec()) { + qDebug() << "删除失败 " << query.lastError().text(); + return false; + } + + return true; +} //删除任务单内设备 bool BaseCommonApi::DeleteTaskDevice(QString id) { @@ -821,8 +884,8 @@ */ //根据被检设备ID获取当前设备的 检定项目及检定点 -/* -QMap> BaseCommonApi::Search_CalibrationTable(QString DeiverId,QMap *HeadList) + +QMap> BaseCommonApi::Search_CalibrationTableClass(QString DeiverId,QMap *HeadList) { QMap> DataList; @@ -834,11 +897,11 @@ case 1: //CliTable[0].id //1717086652508487681 - DataList=BaseCommonApi::getVerMultiCal(CliTable[0].id,HeadList); + DataList=BaseCommonApi::getVerMultiCalClass(CliTable[0].id,HeadList); } return DataList; -}*/ +} //根据被检设备ID获取当前设备的 检定项目及检定点 QList BaseCommonApi::Search_CalibrationTable(QString DeiverId,QStringList *HeadList) { @@ -951,8 +1014,7 @@ return resultData; } //被检设备管理-检定项目及检定点-多功能校准源 -/* -QMap> BaseCommonApi::getVerMultiCal(QString itemId,QMap *headList) +QMap> BaseCommonApi::getVerMultiCalClass(QString itemId,QMap *headList) { QMap> DataMapList; QList resultData; @@ -998,7 +1060,7 @@ DataMapList= GetDataReturnItemList(resultData,DataMapList,headList); return DataMapList; } -*/ + QMap> BaseCommonApi::GetDataReturnItemList(QList ResultData,QMap> DataMapList,QMap *HeadMapList) { @@ -1052,7 +1114,7 @@ Data.append(row[9]); //分辨力 DCVList.append(Data); } - else if(ResultData[2].first()=="ACV") + else if(row[2]=="ACV") { QString VerificationItem=NULL; if(isFirst[1]) @@ -1086,7 +1148,7 @@ } Data.append(row[9]); //分辨力 ACVList.append(Data); - } else if(ResultData[2].first()=="DCI") + } else if(row[2]=="DCI") { QString VerificationItem=NULL; if(isFirst[2]) @@ -1122,7 +1184,7 @@ Data.append(row[9]); //分辨力 DCIList.append(Data); - } else if(ResultData[2].first()=="ACI") + } else if(row[2]=="ACI") { QString VerificationItem=NULL; if(isFirst[3]) @@ -1157,7 +1219,7 @@ } Data.append(row[9]); //分辨力 ACIList.append(Data); - } else if(ResultData[2].first()=="R") + } else if(row[2]=="R") { QString VerificationItem=NULL; if(isFirst[4]) diff --git a/softwareDirectory/AutoVerScheme/basecommonapi.h b/softwareDirectory/AutoVerScheme/basecommonapi.h index da7ce3c..098944a 100644 --- a/softwareDirectory/AutoVerScheme/basecommonapi.h +++ b/softwareDirectory/AutoVerScheme/basecommonapi.h @@ -920,7 +920,7 @@ //判断检定装置表并查询 参数设备id static QList Search_CalibrationTable(QString DeiverId,QStringList *HeadList); - //static QMap> Search_CalibrationTable(QString DeiverId,QMap *HeadList); + static QMap> Search_CalibrationTableClass(QString DeiverId,QMap *HeadList); //判断核查装置表并查询 参数设备id static QList Search_VerifyTable(QString DeiverId,QStringList *HeadList ); @@ -983,7 +983,7 @@ static JudgeCalibrationTable getJudgeVerifyTable(QString id); //被检设备管理-检定项目及检定点-多功能校准源 static QList getVerMultiCal(QString itemId,QStringList *headList); - //static QMap> getVerMultiCal(QString itemId,QMap *headList); + static QMap> getVerMultiCalClass(QString itemId,QMap *headList); static QMap> GetDataReturnItemList(QList ResultData, QMap> DataMapList, QMap *HeadMapList); @@ -1100,6 +1100,10 @@ static QList getMeasureModifyRecord(QString data_id); //查询最新结果保存记录 static SaveDeviceMeasureInfo getNewResultData(); + + static bool DeleteTaskSameDevice(QString order_id); + static bool DeleteTaskInfoRecordDevice(QString order_id); + static InsertTask SelectTaskSingle(QString order_id); }; diff --git a/softwareDirectory/AutoVerScheme/beexamined_deviceitem.cpp b/softwareDirectory/AutoVerScheme/beexamined_deviceitem.cpp index fef3880..00d746b 100644 --- a/softwareDirectory/AutoVerScheme/beexamined_deviceitem.cpp +++ b/softwareDirectory/AutoVerScheme/beexamined_deviceitem.cpp @@ -46,18 +46,7 @@ << "生产厂家"<<"所在单位" <<"使用部门"<<"计量标识"<<"检定周期"<<"证书有效期"<<"操作"; ui->tableWidget->setHorizontalHeaderLabels(headers); - //详情页面tableWidgetItem设置 - ui->tableWidgetItem->setStyleSheet("QHeaderView::section {" - "border: 1px solid rgba(197, 196, 196, 1);" - "border-left:none;" - "border-top:none;" - "background-color:white;" - "}"); - // ui->tableWidget->setRowCount(10); // 设置10行 - //ui->tableWidgetItem->setColumnCount(14); // 设置11列 - ui->tableWidgetItem->setColumnWidth(0, 80); // 设置第一列的宽度为100像素 - ui->tableWidgetItem->verticalHeader()->setParent(nullptr); //隐藏行头 } void BeExamined_DeviceItem::ShowMessageBox(QString title,QString value) { @@ -195,53 +184,116 @@ // 初始化检定项目及核查点 // ==================================================================================== - //获取核查点tablewight的数据 - QStringList headlist; - - QList Data=dbManager.Search_CalibrationTable(id,&headlist); - //QList Data; - //tableWidgetItem - ui->tableWidgetItem->setRowCount(0); - ui->tableWidgetItem->setColumnCount(headlist.count()); - ui->tableWidgetItem->setHorizontalHeaderLabels(headlist); - //循环数据 - int rowCount=0; - int row=0; - - for (const QStringList& item : Data) - { - //获取行号 并进行添加行 - rowCount = ui->tableWidgetItem->rowCount(); - ui->tableWidgetItem->insertRow(rowCount); - //添加 序号 - ui->tableWidgetItem->setItem(row, 0, new QTableWidgetItem(QString::number(row+1))); - //循环读取值 headlist,count是列的数量 - for(int i=1;itableWidgetItem->setItem(row, i, new QTableWidgetItem(item[i])); - } - - row++; - + //重写核查点显示 + //每个检定项目列头 + QMap headListItem; //例 + //每个检定项目数据 + QMap> dataListItem; //例 + dataListItem=dbManager.Search_CalibrationTableClass(id,&headListItem); + QHBoxLayout *layout = ui->HeadListLayout; + QStackedWidget *stackedWidget = ui->stackedWidgetData; + //数据清空 + // 清空QStackedWidget中的所有页 + while (stackedWidget->count() > 0) { + QWidget *widget = stackedWidget->widget(0); // 获取第一个子部件 + stackedWidget->removeWidget(widget); // 从堆叠部件中移除 + delete widget; // 删除部件,防止内存泄漏 } + // 清空QHBoxLayout中的所有QPushButton + while (QLayoutItem *item = layout->takeAt(0)) { + QWidget *widget = item->widget(); + if (widget && qobject_cast(widget)) { + // 移除并删除QPushButton + delete widget; + } + } + int index = 0; + for (const auto &item : headListItem) { + QTableWidget *tableWidget = new QTableWidget(this); + tableWidget->setColumnCount(item.count()); + tableWidget->setHorizontalHeaderLabels(item); + //设置tableWidget样式表 + tableWidget->verticalHeader()->setParent(nullptr); //隐藏行头 + tableWidget->setStyleSheet("QHeaderView::section {" + "border: 1px solid rgba(197, 196, 196, 1);" + "border-left:none;" + "border-top:none;" + "background-color:white;" + "}"); + + // ======================================================================================== + // 数据循环显示 + // ==================================================================================== + int rowCount=0; + const auto &dataRes = dataListItem.value(headListItem.keys()[index]); + //tableWidget->setRowCount(data.count()); + + for (int i = 0; i < dataRes.count(); ++i) { + //获取行号 并进行添加行 + rowCount = tableWidget->rowCount(); + tableWidget->insertRow(rowCount); + tableWidget->setItem(i, 0, new QTableWidgetItem(QString::number(i+1))); + for(int j=1;jsetItem(i, j, new QTableWidgetItem(dataRes[i][j])); + } + + } + + stackedWidget->insertWidget(index,tableWidget); + // ======================================================================================== + // 按钮设置显示 + // ==================================================================================== + QPushButton *button = new QPushButton(headListItem.keys()[index], 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 {" + "background-color: blue;" // 选中时变为蓝色背景 + "}"); + + layout->addWidget(button); + connect(button, &QPushButton::clicked, stackedWidget, [stackedWidget, index]() { + stackedWidget->setCurrentIndex(index); + }); + + ++index; + } + //默认启动第一个页面 + stackedWidget->setCurrentIndex(0); + } void BeExamined_DeviceItem::SetHomePaheCombox(TestedDevice entity) { if(comboBoxContainsItem(ui->name,entity.equipment_name)){ - ui->name->addItem(entity.model); + ui->name->addItem(entity.equipment_name); } if(comboBoxContainsItem(ui->mode,entity.model)){ - ui->mode->addItem(entity.equipment_name); + ui->mode->addItem(entity.model); } if(comboBoxContainsItem(ui->manufacturer_2,entity.manufacturer)){ ui->manufacturer_2->addItem(entity.manufacturer); } if(comboBoxContainsItem(ui->Buildinguser,entity.customer_name)){ - ui->Buildinguser->addItem(entity.manufacturer); + ui->Buildinguser->addItem(entity.customer_name); } if(comboBoxContainsItem(ui->dept_2,entity.FULL_NAME)){ - ui->dept_2->addItem(entity.manufacturer); + ui->dept_2->addItem(entity.FULL_NAME); } } diff --git a/softwareDirectory/AutoVerScheme/AutoVerScheme.pro b/softwareDirectory/AutoVerScheme/AutoVerScheme.pro index 145840b..bf70fab 100644 --- a/softwareDirectory/AutoVerScheme/AutoVerScheme.pro +++ b/softwareDirectory/AutoVerScheme/AutoVerScheme.pro @@ -48,12 +48,14 @@ inspectdataitem.cpp \ loginwindow.cpp \ main.cpp \ + mainsysdatabaseconnection.cpp \ mainwindow.cpp \ my_task.cpp \ newcheckmethod.cpp \ newverifymethod.cpp \ rulefileitem.cpp \ standard_deviceitem.cpp \ + synctask.cpp \ testdataitem.cpp \ testview.cpp \ verifydevice.cpp \ @@ -95,12 +97,14 @@ infomanageview.h \ inspectdataitem.h \ loginwindow.h \ + mainsysdatabaseconnection.h \ mainwindow.h \ my_task.h \ newcheckmethod.h \ newverifymethod.h \ rulefileitem.h \ standard_deviceitem.h \ + synctask.h \ testdataitem.h \ testview.h \ verifydevice.h \ diff --git a/softwareDirectory/AutoVerScheme/basecommonapi.cpp b/softwareDirectory/AutoVerScheme/basecommonapi.cpp index b8846b2..572246e 100644 --- a/softwareDirectory/AutoVerScheme/basecommonapi.cpp +++ b/softwareDirectory/AutoVerScheme/basecommonapi.cpp @@ -511,6 +511,37 @@ return isSuccess; } +//单独查询任务单表 +//更新 任务单 +InsertTask BaseCommonApi::SelectTaskSingle(QString order_id) +{ + InsertTask result; + QSqlQuery query; + query.prepare("SELECT * From biz_business_order_info WHERE id=:order_id"); + // 将参数绑定到占位符 + query.bindValue(":order_id", order_id); + if (query.exec()) { + while (query.next()) { + result.id = query.value("id").toString(); + result.customer_name = query.value("customer_name").toString(); + result.require_over_time = query.value("require_over_time").toString(); + result.deliverer = query.value("deliverer").toString(); + result.deliverer_tel = query.value("deliverer_tel").toString(); + result.undertaker_name = query.value("undertaker_name").toString(); + result.undertake_time = query.value("undertake_time").toString(); + bool is_urgent=false; + if(query.value("is_urgent").toString()=="是"){is_urgent=true;}else{is_urgent=false;}; + result.is_urgent = is_urgent; + result.receive_illustrate = query.value("receive_illustrate").toString(); + result.customer_id = query.value("customer_id").toString(); + + } + } else { + qDebug() << "Query execution failed: " << query.lastError().text(); + } + + return result; +} //删除任务单 bool BaseCommonApi::DeleteTask(QString id) { @@ -533,6 +564,38 @@ return allSuccessful; } +//删除任务单信息记录表同一任务ID的设备 +bool BaseCommonApi::DeleteTaskInfoRecordDevice(QString order_id) +{ + QSqlQuery query; + + //删除任务单样品表数据 + query.prepare("DELETE FROM biz_business_lab_executive_info WHERE order_id = :id"); + query.bindValue(":id", order_id); + + if (!query.exec()) { + qDebug() << "删除失败 " << query.lastError().text(); + return false; + } + + return true; +} +//删除任务详情表同一任务ID的设备 +bool BaseCommonApi::DeleteTaskSameDevice(QString order_id) +{ + QSqlQuery query; + + //删除任务单样品表数据 + query.prepare("DELETE FROM biz_business_order_sample_relation WHERE order_id = :id"); + query.bindValue(":id", order_id); + + if (!query.exec()) { + qDebug() << "删除失败 " << query.lastError().text(); + return false; + } + + return true; +} //删除任务单内设备 bool BaseCommonApi::DeleteTaskDevice(QString id) { @@ -821,8 +884,8 @@ */ //根据被检设备ID获取当前设备的 检定项目及检定点 -/* -QMap> BaseCommonApi::Search_CalibrationTable(QString DeiverId,QMap *HeadList) + +QMap> BaseCommonApi::Search_CalibrationTableClass(QString DeiverId,QMap *HeadList) { QMap> DataList; @@ -834,11 +897,11 @@ case 1: //CliTable[0].id //1717086652508487681 - DataList=BaseCommonApi::getVerMultiCal(CliTable[0].id,HeadList); + DataList=BaseCommonApi::getVerMultiCalClass(CliTable[0].id,HeadList); } return DataList; -}*/ +} //根据被检设备ID获取当前设备的 检定项目及检定点 QList BaseCommonApi::Search_CalibrationTable(QString DeiverId,QStringList *HeadList) { @@ -951,8 +1014,7 @@ return resultData; } //被检设备管理-检定项目及检定点-多功能校准源 -/* -QMap> BaseCommonApi::getVerMultiCal(QString itemId,QMap *headList) +QMap> BaseCommonApi::getVerMultiCalClass(QString itemId,QMap *headList) { QMap> DataMapList; QList resultData; @@ -998,7 +1060,7 @@ DataMapList= GetDataReturnItemList(resultData,DataMapList,headList); return DataMapList; } -*/ + QMap> BaseCommonApi::GetDataReturnItemList(QList ResultData,QMap> DataMapList,QMap *HeadMapList) { @@ -1052,7 +1114,7 @@ Data.append(row[9]); //分辨力 DCVList.append(Data); } - else if(ResultData[2].first()=="ACV") + else if(row[2]=="ACV") { QString VerificationItem=NULL; if(isFirst[1]) @@ -1086,7 +1148,7 @@ } Data.append(row[9]); //分辨力 ACVList.append(Data); - } else if(ResultData[2].first()=="DCI") + } else if(row[2]=="DCI") { QString VerificationItem=NULL; if(isFirst[2]) @@ -1122,7 +1184,7 @@ Data.append(row[9]); //分辨力 DCIList.append(Data); - } else if(ResultData[2].first()=="ACI") + } else if(row[2]=="ACI") { QString VerificationItem=NULL; if(isFirst[3]) @@ -1157,7 +1219,7 @@ } Data.append(row[9]); //分辨力 ACIList.append(Data); - } else if(ResultData[2].first()=="R") + } else if(row[2]=="R") { QString VerificationItem=NULL; if(isFirst[4]) diff --git a/softwareDirectory/AutoVerScheme/basecommonapi.h b/softwareDirectory/AutoVerScheme/basecommonapi.h index da7ce3c..098944a 100644 --- a/softwareDirectory/AutoVerScheme/basecommonapi.h +++ b/softwareDirectory/AutoVerScheme/basecommonapi.h @@ -920,7 +920,7 @@ //判断检定装置表并查询 参数设备id static QList Search_CalibrationTable(QString DeiverId,QStringList *HeadList); - //static QMap> Search_CalibrationTable(QString DeiverId,QMap *HeadList); + static QMap> Search_CalibrationTableClass(QString DeiverId,QMap *HeadList); //判断核查装置表并查询 参数设备id static QList Search_VerifyTable(QString DeiverId,QStringList *HeadList ); @@ -983,7 +983,7 @@ static JudgeCalibrationTable getJudgeVerifyTable(QString id); //被检设备管理-检定项目及检定点-多功能校准源 static QList getVerMultiCal(QString itemId,QStringList *headList); - //static QMap> getVerMultiCal(QString itemId,QMap *headList); + static QMap> getVerMultiCalClass(QString itemId,QMap *headList); static QMap> GetDataReturnItemList(QList ResultData, QMap> DataMapList, QMap *HeadMapList); @@ -1100,6 +1100,10 @@ static QList getMeasureModifyRecord(QString data_id); //查询最新结果保存记录 static SaveDeviceMeasureInfo getNewResultData(); + + static bool DeleteTaskSameDevice(QString order_id); + static bool DeleteTaskInfoRecordDevice(QString order_id); + static InsertTask SelectTaskSingle(QString order_id); }; diff --git a/softwareDirectory/AutoVerScheme/beexamined_deviceitem.cpp b/softwareDirectory/AutoVerScheme/beexamined_deviceitem.cpp index fef3880..00d746b 100644 --- a/softwareDirectory/AutoVerScheme/beexamined_deviceitem.cpp +++ b/softwareDirectory/AutoVerScheme/beexamined_deviceitem.cpp @@ -46,18 +46,7 @@ << "生产厂家"<<"所在单位" <<"使用部门"<<"计量标识"<<"检定周期"<<"证书有效期"<<"操作"; ui->tableWidget->setHorizontalHeaderLabels(headers); - //详情页面tableWidgetItem设置 - ui->tableWidgetItem->setStyleSheet("QHeaderView::section {" - "border: 1px solid rgba(197, 196, 196, 1);" - "border-left:none;" - "border-top:none;" - "background-color:white;" - "}"); - // ui->tableWidget->setRowCount(10); // 设置10行 - //ui->tableWidgetItem->setColumnCount(14); // 设置11列 - ui->tableWidgetItem->setColumnWidth(0, 80); // 设置第一列的宽度为100像素 - ui->tableWidgetItem->verticalHeader()->setParent(nullptr); //隐藏行头 } void BeExamined_DeviceItem::ShowMessageBox(QString title,QString value) { @@ -195,53 +184,116 @@ // 初始化检定项目及核查点 // ==================================================================================== - //获取核查点tablewight的数据 - QStringList headlist; - - QList Data=dbManager.Search_CalibrationTable(id,&headlist); - //QList Data; - //tableWidgetItem - ui->tableWidgetItem->setRowCount(0); - ui->tableWidgetItem->setColumnCount(headlist.count()); - ui->tableWidgetItem->setHorizontalHeaderLabels(headlist); - //循环数据 - int rowCount=0; - int row=0; - - for (const QStringList& item : Data) - { - //获取行号 并进行添加行 - rowCount = ui->tableWidgetItem->rowCount(); - ui->tableWidgetItem->insertRow(rowCount); - //添加 序号 - ui->tableWidgetItem->setItem(row, 0, new QTableWidgetItem(QString::number(row+1))); - //循环读取值 headlist,count是列的数量 - for(int i=1;itableWidgetItem->setItem(row, i, new QTableWidgetItem(item[i])); - } - - row++; - + //重写核查点显示 + //每个检定项目列头 + QMap headListItem; //例 + //每个检定项目数据 + QMap> dataListItem; //例 + dataListItem=dbManager.Search_CalibrationTableClass(id,&headListItem); + QHBoxLayout *layout = ui->HeadListLayout; + QStackedWidget *stackedWidget = ui->stackedWidgetData; + //数据清空 + // 清空QStackedWidget中的所有页 + while (stackedWidget->count() > 0) { + QWidget *widget = stackedWidget->widget(0); // 获取第一个子部件 + stackedWidget->removeWidget(widget); // 从堆叠部件中移除 + delete widget; // 删除部件,防止内存泄漏 } + // 清空QHBoxLayout中的所有QPushButton + while (QLayoutItem *item = layout->takeAt(0)) { + QWidget *widget = item->widget(); + if (widget && qobject_cast(widget)) { + // 移除并删除QPushButton + delete widget; + } + } + int index = 0; + for (const auto &item : headListItem) { + QTableWidget *tableWidget = new QTableWidget(this); + tableWidget->setColumnCount(item.count()); + tableWidget->setHorizontalHeaderLabels(item); + //设置tableWidget样式表 + tableWidget->verticalHeader()->setParent(nullptr); //隐藏行头 + tableWidget->setStyleSheet("QHeaderView::section {" + "border: 1px solid rgba(197, 196, 196, 1);" + "border-left:none;" + "border-top:none;" + "background-color:white;" + "}"); + + // ======================================================================================== + // 数据循环显示 + // ==================================================================================== + int rowCount=0; + const auto &dataRes = dataListItem.value(headListItem.keys()[index]); + //tableWidget->setRowCount(data.count()); + + for (int i = 0; i < dataRes.count(); ++i) { + //获取行号 并进行添加行 + rowCount = tableWidget->rowCount(); + tableWidget->insertRow(rowCount); + tableWidget->setItem(i, 0, new QTableWidgetItem(QString::number(i+1))); + for(int j=1;jsetItem(i, j, new QTableWidgetItem(dataRes[i][j])); + } + + } + + stackedWidget->insertWidget(index,tableWidget); + // ======================================================================================== + // 按钮设置显示 + // ==================================================================================== + QPushButton *button = new QPushButton(headListItem.keys()[index], 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 {" + "background-color: blue;" // 选中时变为蓝色背景 + "}"); + + layout->addWidget(button); + connect(button, &QPushButton::clicked, stackedWidget, [stackedWidget, index]() { + stackedWidget->setCurrentIndex(index); + }); + + ++index; + } + //默认启动第一个页面 + stackedWidget->setCurrentIndex(0); + } void BeExamined_DeviceItem::SetHomePaheCombox(TestedDevice entity) { if(comboBoxContainsItem(ui->name,entity.equipment_name)){ - ui->name->addItem(entity.model); + ui->name->addItem(entity.equipment_name); } if(comboBoxContainsItem(ui->mode,entity.model)){ - ui->mode->addItem(entity.equipment_name); + ui->mode->addItem(entity.model); } if(comboBoxContainsItem(ui->manufacturer_2,entity.manufacturer)){ ui->manufacturer_2->addItem(entity.manufacturer); } if(comboBoxContainsItem(ui->Buildinguser,entity.customer_name)){ - ui->Buildinguser->addItem(entity.manufacturer); + ui->Buildinguser->addItem(entity.customer_name); } if(comboBoxContainsItem(ui->dept_2,entity.FULL_NAME)){ - ui->dept_2->addItem(entity.manufacturer); + ui->dept_2->addItem(entity.FULL_NAME); } } diff --git a/softwareDirectory/AutoVerScheme/beexamined_deviceitem.ui b/softwareDirectory/AutoVerScheme/beexamined_deviceitem.ui index 0e06ed9..30ff535 100644 --- a/softwareDirectory/AutoVerScheme/beexamined_deviceitem.ui +++ b/softwareDirectory/AutoVerScheme/beexamined_deviceitem.ui @@ -32,7 +32,7 @@ - 0 + 1 @@ -793,7 +793,7 @@ XXX - 2 + 3 false @@ -811,16 +811,39 @@ - + - 核查项目及核查点: + 检定项目及检定点: - + + + + + + + + Qt::Horizontal + + + + 1506 + 20 + + + + + + + + + + + diff --git a/softwareDirectory/AutoVerScheme/AutoVerScheme.pro b/softwareDirectory/AutoVerScheme/AutoVerScheme.pro index 145840b..bf70fab 100644 --- a/softwareDirectory/AutoVerScheme/AutoVerScheme.pro +++ b/softwareDirectory/AutoVerScheme/AutoVerScheme.pro @@ -48,12 +48,14 @@ inspectdataitem.cpp \ loginwindow.cpp \ main.cpp \ + mainsysdatabaseconnection.cpp \ mainwindow.cpp \ my_task.cpp \ newcheckmethod.cpp \ newverifymethod.cpp \ rulefileitem.cpp \ standard_deviceitem.cpp \ + synctask.cpp \ testdataitem.cpp \ testview.cpp \ verifydevice.cpp \ @@ -95,12 +97,14 @@ infomanageview.h \ inspectdataitem.h \ loginwindow.h \ + mainsysdatabaseconnection.h \ mainwindow.h \ my_task.h \ newcheckmethod.h \ newverifymethod.h \ rulefileitem.h \ standard_deviceitem.h \ + synctask.h \ testdataitem.h \ testview.h \ verifydevice.h \ diff --git a/softwareDirectory/AutoVerScheme/basecommonapi.cpp b/softwareDirectory/AutoVerScheme/basecommonapi.cpp index b8846b2..572246e 100644 --- a/softwareDirectory/AutoVerScheme/basecommonapi.cpp +++ b/softwareDirectory/AutoVerScheme/basecommonapi.cpp @@ -511,6 +511,37 @@ return isSuccess; } +//单独查询任务单表 +//更新 任务单 +InsertTask BaseCommonApi::SelectTaskSingle(QString order_id) +{ + InsertTask result; + QSqlQuery query; + query.prepare("SELECT * From biz_business_order_info WHERE id=:order_id"); + // 将参数绑定到占位符 + query.bindValue(":order_id", order_id); + if (query.exec()) { + while (query.next()) { + result.id = query.value("id").toString(); + result.customer_name = query.value("customer_name").toString(); + result.require_over_time = query.value("require_over_time").toString(); + result.deliverer = query.value("deliverer").toString(); + result.deliverer_tel = query.value("deliverer_tel").toString(); + result.undertaker_name = query.value("undertaker_name").toString(); + result.undertake_time = query.value("undertake_time").toString(); + bool is_urgent=false; + if(query.value("is_urgent").toString()=="是"){is_urgent=true;}else{is_urgent=false;}; + result.is_urgent = is_urgent; + result.receive_illustrate = query.value("receive_illustrate").toString(); + result.customer_id = query.value("customer_id").toString(); + + } + } else { + qDebug() << "Query execution failed: " << query.lastError().text(); + } + + return result; +} //删除任务单 bool BaseCommonApi::DeleteTask(QString id) { @@ -533,6 +564,38 @@ return allSuccessful; } +//删除任务单信息记录表同一任务ID的设备 +bool BaseCommonApi::DeleteTaskInfoRecordDevice(QString order_id) +{ + QSqlQuery query; + + //删除任务单样品表数据 + query.prepare("DELETE FROM biz_business_lab_executive_info WHERE order_id = :id"); + query.bindValue(":id", order_id); + + if (!query.exec()) { + qDebug() << "删除失败 " << query.lastError().text(); + return false; + } + + return true; +} +//删除任务详情表同一任务ID的设备 +bool BaseCommonApi::DeleteTaskSameDevice(QString order_id) +{ + QSqlQuery query; + + //删除任务单样品表数据 + query.prepare("DELETE FROM biz_business_order_sample_relation WHERE order_id = :id"); + query.bindValue(":id", order_id); + + if (!query.exec()) { + qDebug() << "删除失败 " << query.lastError().text(); + return false; + } + + return true; +} //删除任务单内设备 bool BaseCommonApi::DeleteTaskDevice(QString id) { @@ -821,8 +884,8 @@ */ //根据被检设备ID获取当前设备的 检定项目及检定点 -/* -QMap> BaseCommonApi::Search_CalibrationTable(QString DeiverId,QMap *HeadList) + +QMap> BaseCommonApi::Search_CalibrationTableClass(QString DeiverId,QMap *HeadList) { QMap> DataList; @@ -834,11 +897,11 @@ case 1: //CliTable[0].id //1717086652508487681 - DataList=BaseCommonApi::getVerMultiCal(CliTable[0].id,HeadList); + DataList=BaseCommonApi::getVerMultiCalClass(CliTable[0].id,HeadList); } return DataList; -}*/ +} //根据被检设备ID获取当前设备的 检定项目及检定点 QList BaseCommonApi::Search_CalibrationTable(QString DeiverId,QStringList *HeadList) { @@ -951,8 +1014,7 @@ return resultData; } //被检设备管理-检定项目及检定点-多功能校准源 -/* -QMap> BaseCommonApi::getVerMultiCal(QString itemId,QMap *headList) +QMap> BaseCommonApi::getVerMultiCalClass(QString itemId,QMap *headList) { QMap> DataMapList; QList resultData; @@ -998,7 +1060,7 @@ DataMapList= GetDataReturnItemList(resultData,DataMapList,headList); return DataMapList; } -*/ + QMap> BaseCommonApi::GetDataReturnItemList(QList ResultData,QMap> DataMapList,QMap *HeadMapList) { @@ -1052,7 +1114,7 @@ Data.append(row[9]); //分辨力 DCVList.append(Data); } - else if(ResultData[2].first()=="ACV") + else if(row[2]=="ACV") { QString VerificationItem=NULL; if(isFirst[1]) @@ -1086,7 +1148,7 @@ } Data.append(row[9]); //分辨力 ACVList.append(Data); - } else if(ResultData[2].first()=="DCI") + } else if(row[2]=="DCI") { QString VerificationItem=NULL; if(isFirst[2]) @@ -1122,7 +1184,7 @@ Data.append(row[9]); //分辨力 DCIList.append(Data); - } else if(ResultData[2].first()=="ACI") + } else if(row[2]=="ACI") { QString VerificationItem=NULL; if(isFirst[3]) @@ -1157,7 +1219,7 @@ } Data.append(row[9]); //分辨力 ACIList.append(Data); - } else if(ResultData[2].first()=="R") + } else if(row[2]=="R") { QString VerificationItem=NULL; if(isFirst[4]) diff --git a/softwareDirectory/AutoVerScheme/basecommonapi.h b/softwareDirectory/AutoVerScheme/basecommonapi.h index da7ce3c..098944a 100644 --- a/softwareDirectory/AutoVerScheme/basecommonapi.h +++ b/softwareDirectory/AutoVerScheme/basecommonapi.h @@ -920,7 +920,7 @@ //判断检定装置表并查询 参数设备id static QList Search_CalibrationTable(QString DeiverId,QStringList *HeadList); - //static QMap> Search_CalibrationTable(QString DeiverId,QMap *HeadList); + static QMap> Search_CalibrationTableClass(QString DeiverId,QMap *HeadList); //判断核查装置表并查询 参数设备id static QList Search_VerifyTable(QString DeiverId,QStringList *HeadList ); @@ -983,7 +983,7 @@ static JudgeCalibrationTable getJudgeVerifyTable(QString id); //被检设备管理-检定项目及检定点-多功能校准源 static QList getVerMultiCal(QString itemId,QStringList *headList); - //static QMap> getVerMultiCal(QString itemId,QMap *headList); + static QMap> getVerMultiCalClass(QString itemId,QMap *headList); static QMap> GetDataReturnItemList(QList ResultData, QMap> DataMapList, QMap *HeadMapList); @@ -1100,6 +1100,10 @@ static QList getMeasureModifyRecord(QString data_id); //查询最新结果保存记录 static SaveDeviceMeasureInfo getNewResultData(); + + static bool DeleteTaskSameDevice(QString order_id); + static bool DeleteTaskInfoRecordDevice(QString order_id); + static InsertTask SelectTaskSingle(QString order_id); }; diff --git a/softwareDirectory/AutoVerScheme/beexamined_deviceitem.cpp b/softwareDirectory/AutoVerScheme/beexamined_deviceitem.cpp index fef3880..00d746b 100644 --- a/softwareDirectory/AutoVerScheme/beexamined_deviceitem.cpp +++ b/softwareDirectory/AutoVerScheme/beexamined_deviceitem.cpp @@ -46,18 +46,7 @@ << "生产厂家"<<"所在单位" <<"使用部门"<<"计量标识"<<"检定周期"<<"证书有效期"<<"操作"; ui->tableWidget->setHorizontalHeaderLabels(headers); - //详情页面tableWidgetItem设置 - ui->tableWidgetItem->setStyleSheet("QHeaderView::section {" - "border: 1px solid rgba(197, 196, 196, 1);" - "border-left:none;" - "border-top:none;" - "background-color:white;" - "}"); - // ui->tableWidget->setRowCount(10); // 设置10行 - //ui->tableWidgetItem->setColumnCount(14); // 设置11列 - ui->tableWidgetItem->setColumnWidth(0, 80); // 设置第一列的宽度为100像素 - ui->tableWidgetItem->verticalHeader()->setParent(nullptr); //隐藏行头 } void BeExamined_DeviceItem::ShowMessageBox(QString title,QString value) { @@ -195,53 +184,116 @@ // 初始化检定项目及核查点 // ==================================================================================== - //获取核查点tablewight的数据 - QStringList headlist; - - QList Data=dbManager.Search_CalibrationTable(id,&headlist); - //QList Data; - //tableWidgetItem - ui->tableWidgetItem->setRowCount(0); - ui->tableWidgetItem->setColumnCount(headlist.count()); - ui->tableWidgetItem->setHorizontalHeaderLabels(headlist); - //循环数据 - int rowCount=0; - int row=0; - - for (const QStringList& item : Data) - { - //获取行号 并进行添加行 - rowCount = ui->tableWidgetItem->rowCount(); - ui->tableWidgetItem->insertRow(rowCount); - //添加 序号 - ui->tableWidgetItem->setItem(row, 0, new QTableWidgetItem(QString::number(row+1))); - //循环读取值 headlist,count是列的数量 - for(int i=1;itableWidgetItem->setItem(row, i, new QTableWidgetItem(item[i])); - } - - row++; - + //重写核查点显示 + //每个检定项目列头 + QMap headListItem; //例 + //每个检定项目数据 + QMap> dataListItem; //例 + dataListItem=dbManager.Search_CalibrationTableClass(id,&headListItem); + QHBoxLayout *layout = ui->HeadListLayout; + QStackedWidget *stackedWidget = ui->stackedWidgetData; + //数据清空 + // 清空QStackedWidget中的所有页 + while (stackedWidget->count() > 0) { + QWidget *widget = stackedWidget->widget(0); // 获取第一个子部件 + stackedWidget->removeWidget(widget); // 从堆叠部件中移除 + delete widget; // 删除部件,防止内存泄漏 } + // 清空QHBoxLayout中的所有QPushButton + while (QLayoutItem *item = layout->takeAt(0)) { + QWidget *widget = item->widget(); + if (widget && qobject_cast(widget)) { + // 移除并删除QPushButton + delete widget; + } + } + int index = 0; + for (const auto &item : headListItem) { + QTableWidget *tableWidget = new QTableWidget(this); + tableWidget->setColumnCount(item.count()); + tableWidget->setHorizontalHeaderLabels(item); + //设置tableWidget样式表 + tableWidget->verticalHeader()->setParent(nullptr); //隐藏行头 + tableWidget->setStyleSheet("QHeaderView::section {" + "border: 1px solid rgba(197, 196, 196, 1);" + "border-left:none;" + "border-top:none;" + "background-color:white;" + "}"); + + // ======================================================================================== + // 数据循环显示 + // ==================================================================================== + int rowCount=0; + const auto &dataRes = dataListItem.value(headListItem.keys()[index]); + //tableWidget->setRowCount(data.count()); + + for (int i = 0; i < dataRes.count(); ++i) { + //获取行号 并进行添加行 + rowCount = tableWidget->rowCount(); + tableWidget->insertRow(rowCount); + tableWidget->setItem(i, 0, new QTableWidgetItem(QString::number(i+1))); + for(int j=1;jsetItem(i, j, new QTableWidgetItem(dataRes[i][j])); + } + + } + + stackedWidget->insertWidget(index,tableWidget); + // ======================================================================================== + // 按钮设置显示 + // ==================================================================================== + QPushButton *button = new QPushButton(headListItem.keys()[index], 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 {" + "background-color: blue;" // 选中时变为蓝色背景 + "}"); + + layout->addWidget(button); + connect(button, &QPushButton::clicked, stackedWidget, [stackedWidget, index]() { + stackedWidget->setCurrentIndex(index); + }); + + ++index; + } + //默认启动第一个页面 + stackedWidget->setCurrentIndex(0); + } void BeExamined_DeviceItem::SetHomePaheCombox(TestedDevice entity) { if(comboBoxContainsItem(ui->name,entity.equipment_name)){ - ui->name->addItem(entity.model); + ui->name->addItem(entity.equipment_name); } if(comboBoxContainsItem(ui->mode,entity.model)){ - ui->mode->addItem(entity.equipment_name); + ui->mode->addItem(entity.model); } if(comboBoxContainsItem(ui->manufacturer_2,entity.manufacturer)){ ui->manufacturer_2->addItem(entity.manufacturer); } if(comboBoxContainsItem(ui->Buildinguser,entity.customer_name)){ - ui->Buildinguser->addItem(entity.manufacturer); + ui->Buildinguser->addItem(entity.customer_name); } if(comboBoxContainsItem(ui->dept_2,entity.FULL_NAME)){ - ui->dept_2->addItem(entity.manufacturer); + ui->dept_2->addItem(entity.FULL_NAME); } } diff --git a/softwareDirectory/AutoVerScheme/beexamined_deviceitem.ui b/softwareDirectory/AutoVerScheme/beexamined_deviceitem.ui index 0e06ed9..30ff535 100644 --- a/softwareDirectory/AutoVerScheme/beexamined_deviceitem.ui +++ b/softwareDirectory/AutoVerScheme/beexamined_deviceitem.ui @@ -32,7 +32,7 @@ - 0 + 1 @@ -793,7 +793,7 @@ XXX - 2 + 3 false @@ -811,16 +811,39 @@ - + - 核查项目及核查点: + 检定项目及检定点: - + + + + + + + + Qt::Horizontal + + + + 1506 + 20 + + + + + + + + + + + diff --git a/softwareDirectory/AutoVerScheme/create_task.cpp b/softwareDirectory/AutoVerScheme/create_task.cpp index 52a0ba7..c9bdffa 100644 --- a/softwareDirectory/AutoVerScheme/create_task.cpp +++ b/softwareDirectory/AutoVerScheme/create_task.cpp @@ -231,7 +231,11 @@ // 编辑按钮 点击事件 进入详情页面 // ==================================================================================== //DeviceInfoInit(id); + + DisplayButton(); + //查询出所有委托方 + //SetPartPageComBox(); SelectPageData(id); TaskId=id; ui->TitleLable->setText("编辑任务单"); @@ -315,6 +319,7 @@ { if(ListId.count()!=0) { + SelectDataItem.clear(); _IdList=ListId; ui->tableWidgetItem->setRowCount(0); // 调用数据库管理器的函数获取数据 @@ -329,14 +334,14 @@ { rowCount = ui->tableWidgetItem->rowCount(); ui->tableWidgetItem->insertRow(rowCount); - ui->tableWidgetItem->setItem(row, 0, new QTableWidgetItem(QString::number(row+1))); - ui->tableWidgetItem->setItem(row, 1, new QTableWidgetItem(result[0].equipment_name)); - ui->tableWidgetItem->setItem(row, 2, new QTableWidgetItem(result[0].model)); - ui->tableWidgetItem->setItem(row, 3, new QTableWidgetItem(result[0].help_instruction)); - ui->tableWidgetItem->setItem(row, 4, new QTableWidgetItem(result[0].manufacture_no)); - ui->tableWidgetItem->setItem(row, 5, new QTableWidgetItem(result[0].manufacturer)); - ui->tableWidgetItem->setItem(row, 6, new QTableWidgetItem("点击编辑")); + ui->tableWidgetItem->setItem(row, 1, new QTableWidgetItem(QString::number(row+1))); + ui->tableWidgetItem->setItem(row, 2, new QTableWidgetItem(result[0].equipment_name)); + ui->tableWidgetItem->setItem(row, 3, new QTableWidgetItem(result[0].model)); + ui->tableWidgetItem->setItem(row, 4, new QTableWidgetItem(result[0].help_instruction)); + ui->tableWidgetItem->setItem(row, 5, new QTableWidgetItem(result[0].manufacture_no)); + ui->tableWidgetItem->setItem(row, 6, new QTableWidgetItem(result[0].manufacturer)); ui->tableWidgetItem->setItem(row, 7, new QTableWidgetItem("点击编辑")); + ui->tableWidgetItem->setItem(row, 8, new QTableWidgetItem("点击编辑")); row++; } @@ -353,36 +358,78 @@ // 保存任务单按钮 先新增任务单 后新增任务单设备 // ==================================================================================== bool IsSUCC=false; - //获取选中的委托人ID - QString CustomerID=""; - if(_model->rowCount()>0){ - QModelIndex currentIndex = _model->index(ui->customer_name->currentIndex(),0); - CustomerID=currentIndex.data().toString(); } + //获取检定人ID QString person_id=dbManager.ConvertStaffInfo("用户ID目前固定").id; + //根据用户查出部门ID + QString DeptId=dbManager.ConvertStaffInfo("函数内默认添加").dept_id; + if(State=="Update") { if(TaskId=="")return; - InsertTask insertTask; - insertTask.id=TaskId; + InsertTask insertTask=dbManager.SelectTaskSingle(TaskId); insertTask.order_no=ui->LineEditNumber->text(); - insertTask.customer_name=ui->customer_name->currentText(); insertTask.require_over_time=ui->require_over_time->text(); insertTask.deliverer=ui->deliverer->text(); insertTask.deliverer_tel=ui->deliverer_tel->text(); insertTask.undertaker_name=ui->undertaker_name->text(); insertTask.undertake_time=ui->undertake_time->text(); - - if(ui->is_urgent->currentText()=="是") - { - insertTask.is_urgent=true; - }else{insertTask.is_urgent=false;} insertTask.receive_illustrate=ui->receive_illustrate->text(); - insertTask.customer_id=CustomerID; - IsSUCC=dbManager.UpdateTask(insertTask); - //设备更新 编辑设备待写 + IsSUCC=dbManager.UpdateTask(insertTask); + //设备更新 编辑设备待写 + //1、先删除之前的设备 + dbManager.DeleteTaskSameDevice(TaskId); + dbManager.DeleteTaskInfoRecordDevice(TaskId); + qint64 id = dbManager.generateId(); + //2、将新的设置重新增加到这两张表 + int count=0; + if(SelectDataItem.count()!=0 && _IdList.count()!=0){ + //InsertOrderSampleRelation + foreach(TestedCatDevice DeviceInfo,SelectDataItem) + { + //样品表 + OrderSampleRelation orderSampleRelation; + id = dbManager.generateId(); + orderSampleRelation.id=QString::number(id); + orderSampleRelation.order_id=TaskId; + orderSampleRelation.sample_id=_IdList[count]; + orderSampleRelation.sample_name=DeviceInfo.equipment_name; + orderSampleRelation.sample_model=DeviceInfo.model; + orderSampleRelation.measure_complete_time=QDateTime::currentDateTime(); + IsSUCC=dbManager.InsertOrderSampleRelation(orderSampleRelation); + + //每条设备对应一个信息表数据 + //增加biz_business_lab_executive_info 总信息表 + biz_business_lab_executive_info entity; + entity.id=QString::number(dbManager.generateId()); + entity.order_id=TaskId; + entity.sample_id=_IdList[count]; + entity.create_user_id="函数内默认添加"; + entity.measure_dept_id=DeptId; // + entity.measure_person_id=person_id; + IsSUCC=dbManager.InsertTaskInfoRecord(entity); + + if(!IsSUCC){ShowMessageBox("提示",QString("设备名称为: 1% 添加失败").arg(DeviceInfo.equipment_name));} + count++; + } + }else{ + + biz_business_lab_executive_info entity; + entity.id=QString::number(dbManager.generateId()); + entity.order_id=TaskId; + entity.sample_id=""; + entity.create_user_id="函数内默认添加"; + entity.measure_dept_id=DeptId; // + entity.measure_person_id=person_id; + IsSUCC=dbManager.InsertTaskInfoRecord(entity); + } }else{ + //获取选中的委托人ID + QString CustomerID=""; + if(_model->rowCount()>0){ + QModelIndex currentIndex = _model->index(ui->customer_name->currentIndex(),0); + CustomerID=currentIndex.data().toString(); } //新增任务单 qint64 id = dbManager.generateId(); InsertTask insertTask; @@ -403,15 +450,12 @@ insertTask.receive_illustrate=ui->receive_illustrate->text(); insertTask.customer_id=CustomerID; IsSUCC=dbManager.InsertTaskBasic(insertTask); + //新增任务单设备 + QString NewTaskId=dbManager.getCreateTaskListNew()[0].id; if(IsSUCC) { - //根据用户查出部门ID - QString DeptId=dbManager.ConvertStaffInfo("函数内默认添加").dept_id; - - //新增任务单设备 - QString NewTaskId=dbManager.getCreateTaskListNew()[0].id; int count=0; if(SelectDataItem.count()!=0 && _IdList.count()!=0){ //InsertOrderSampleRelation diff --git a/softwareDirectory/AutoVerScheme/AutoVerScheme.pro b/softwareDirectory/AutoVerScheme/AutoVerScheme.pro index 145840b..bf70fab 100644 --- a/softwareDirectory/AutoVerScheme/AutoVerScheme.pro +++ b/softwareDirectory/AutoVerScheme/AutoVerScheme.pro @@ -48,12 +48,14 @@ inspectdataitem.cpp \ loginwindow.cpp \ main.cpp \ + mainsysdatabaseconnection.cpp \ mainwindow.cpp \ my_task.cpp \ newcheckmethod.cpp \ newverifymethod.cpp \ rulefileitem.cpp \ standard_deviceitem.cpp \ + synctask.cpp \ testdataitem.cpp \ testview.cpp \ verifydevice.cpp \ @@ -95,12 +97,14 @@ infomanageview.h \ inspectdataitem.h \ loginwindow.h \ + mainsysdatabaseconnection.h \ mainwindow.h \ my_task.h \ newcheckmethod.h \ newverifymethod.h \ rulefileitem.h \ standard_deviceitem.h \ + synctask.h \ testdataitem.h \ testview.h \ verifydevice.h \ diff --git a/softwareDirectory/AutoVerScheme/basecommonapi.cpp b/softwareDirectory/AutoVerScheme/basecommonapi.cpp index b8846b2..572246e 100644 --- a/softwareDirectory/AutoVerScheme/basecommonapi.cpp +++ b/softwareDirectory/AutoVerScheme/basecommonapi.cpp @@ -511,6 +511,37 @@ return isSuccess; } +//单独查询任务单表 +//更新 任务单 +InsertTask BaseCommonApi::SelectTaskSingle(QString order_id) +{ + InsertTask result; + QSqlQuery query; + query.prepare("SELECT * From biz_business_order_info WHERE id=:order_id"); + // 将参数绑定到占位符 + query.bindValue(":order_id", order_id); + if (query.exec()) { + while (query.next()) { + result.id = query.value("id").toString(); + result.customer_name = query.value("customer_name").toString(); + result.require_over_time = query.value("require_over_time").toString(); + result.deliverer = query.value("deliverer").toString(); + result.deliverer_tel = query.value("deliverer_tel").toString(); + result.undertaker_name = query.value("undertaker_name").toString(); + result.undertake_time = query.value("undertake_time").toString(); + bool is_urgent=false; + if(query.value("is_urgent").toString()=="是"){is_urgent=true;}else{is_urgent=false;}; + result.is_urgent = is_urgent; + result.receive_illustrate = query.value("receive_illustrate").toString(); + result.customer_id = query.value("customer_id").toString(); + + } + } else { + qDebug() << "Query execution failed: " << query.lastError().text(); + } + + return result; +} //删除任务单 bool BaseCommonApi::DeleteTask(QString id) { @@ -533,6 +564,38 @@ return allSuccessful; } +//删除任务单信息记录表同一任务ID的设备 +bool BaseCommonApi::DeleteTaskInfoRecordDevice(QString order_id) +{ + QSqlQuery query; + + //删除任务单样品表数据 + query.prepare("DELETE FROM biz_business_lab_executive_info WHERE order_id = :id"); + query.bindValue(":id", order_id); + + if (!query.exec()) { + qDebug() << "删除失败 " << query.lastError().text(); + return false; + } + + return true; +} +//删除任务详情表同一任务ID的设备 +bool BaseCommonApi::DeleteTaskSameDevice(QString order_id) +{ + QSqlQuery query; + + //删除任务单样品表数据 + query.prepare("DELETE FROM biz_business_order_sample_relation WHERE order_id = :id"); + query.bindValue(":id", order_id); + + if (!query.exec()) { + qDebug() << "删除失败 " << query.lastError().text(); + return false; + } + + return true; +} //删除任务单内设备 bool BaseCommonApi::DeleteTaskDevice(QString id) { @@ -821,8 +884,8 @@ */ //根据被检设备ID获取当前设备的 检定项目及检定点 -/* -QMap> BaseCommonApi::Search_CalibrationTable(QString DeiverId,QMap *HeadList) + +QMap> BaseCommonApi::Search_CalibrationTableClass(QString DeiverId,QMap *HeadList) { QMap> DataList; @@ -834,11 +897,11 @@ case 1: //CliTable[0].id //1717086652508487681 - DataList=BaseCommonApi::getVerMultiCal(CliTable[0].id,HeadList); + DataList=BaseCommonApi::getVerMultiCalClass(CliTable[0].id,HeadList); } return DataList; -}*/ +} //根据被检设备ID获取当前设备的 检定项目及检定点 QList BaseCommonApi::Search_CalibrationTable(QString DeiverId,QStringList *HeadList) { @@ -951,8 +1014,7 @@ return resultData; } //被检设备管理-检定项目及检定点-多功能校准源 -/* -QMap> BaseCommonApi::getVerMultiCal(QString itemId,QMap *headList) +QMap> BaseCommonApi::getVerMultiCalClass(QString itemId,QMap *headList) { QMap> DataMapList; QList resultData; @@ -998,7 +1060,7 @@ DataMapList= GetDataReturnItemList(resultData,DataMapList,headList); return DataMapList; } -*/ + QMap> BaseCommonApi::GetDataReturnItemList(QList ResultData,QMap> DataMapList,QMap *HeadMapList) { @@ -1052,7 +1114,7 @@ Data.append(row[9]); //分辨力 DCVList.append(Data); } - else if(ResultData[2].first()=="ACV") + else if(row[2]=="ACV") { QString VerificationItem=NULL; if(isFirst[1]) @@ -1086,7 +1148,7 @@ } Data.append(row[9]); //分辨力 ACVList.append(Data); - } else if(ResultData[2].first()=="DCI") + } else if(row[2]=="DCI") { QString VerificationItem=NULL; if(isFirst[2]) @@ -1122,7 +1184,7 @@ Data.append(row[9]); //分辨力 DCIList.append(Data); - } else if(ResultData[2].first()=="ACI") + } else if(row[2]=="ACI") { QString VerificationItem=NULL; if(isFirst[3]) @@ -1157,7 +1219,7 @@ } Data.append(row[9]); //分辨力 ACIList.append(Data); - } else if(ResultData[2].first()=="R") + } else if(row[2]=="R") { QString VerificationItem=NULL; if(isFirst[4]) diff --git a/softwareDirectory/AutoVerScheme/basecommonapi.h b/softwareDirectory/AutoVerScheme/basecommonapi.h index da7ce3c..098944a 100644 --- a/softwareDirectory/AutoVerScheme/basecommonapi.h +++ b/softwareDirectory/AutoVerScheme/basecommonapi.h @@ -920,7 +920,7 @@ //判断检定装置表并查询 参数设备id static QList Search_CalibrationTable(QString DeiverId,QStringList *HeadList); - //static QMap> Search_CalibrationTable(QString DeiverId,QMap *HeadList); + static QMap> Search_CalibrationTableClass(QString DeiverId,QMap *HeadList); //判断核查装置表并查询 参数设备id static QList Search_VerifyTable(QString DeiverId,QStringList *HeadList ); @@ -983,7 +983,7 @@ static JudgeCalibrationTable getJudgeVerifyTable(QString id); //被检设备管理-检定项目及检定点-多功能校准源 static QList getVerMultiCal(QString itemId,QStringList *headList); - //static QMap> getVerMultiCal(QString itemId,QMap *headList); + static QMap> getVerMultiCalClass(QString itemId,QMap *headList); static QMap> GetDataReturnItemList(QList ResultData, QMap> DataMapList, QMap *HeadMapList); @@ -1100,6 +1100,10 @@ static QList getMeasureModifyRecord(QString data_id); //查询最新结果保存记录 static SaveDeviceMeasureInfo getNewResultData(); + + static bool DeleteTaskSameDevice(QString order_id); + static bool DeleteTaskInfoRecordDevice(QString order_id); + static InsertTask SelectTaskSingle(QString order_id); }; diff --git a/softwareDirectory/AutoVerScheme/beexamined_deviceitem.cpp b/softwareDirectory/AutoVerScheme/beexamined_deviceitem.cpp index fef3880..00d746b 100644 --- a/softwareDirectory/AutoVerScheme/beexamined_deviceitem.cpp +++ b/softwareDirectory/AutoVerScheme/beexamined_deviceitem.cpp @@ -46,18 +46,7 @@ << "生产厂家"<<"所在单位" <<"使用部门"<<"计量标识"<<"检定周期"<<"证书有效期"<<"操作"; ui->tableWidget->setHorizontalHeaderLabels(headers); - //详情页面tableWidgetItem设置 - ui->tableWidgetItem->setStyleSheet("QHeaderView::section {" - "border: 1px solid rgba(197, 196, 196, 1);" - "border-left:none;" - "border-top:none;" - "background-color:white;" - "}"); - // ui->tableWidget->setRowCount(10); // 设置10行 - //ui->tableWidgetItem->setColumnCount(14); // 设置11列 - ui->tableWidgetItem->setColumnWidth(0, 80); // 设置第一列的宽度为100像素 - ui->tableWidgetItem->verticalHeader()->setParent(nullptr); //隐藏行头 } void BeExamined_DeviceItem::ShowMessageBox(QString title,QString value) { @@ -195,53 +184,116 @@ // 初始化检定项目及核查点 // ==================================================================================== - //获取核查点tablewight的数据 - QStringList headlist; - - QList Data=dbManager.Search_CalibrationTable(id,&headlist); - //QList Data; - //tableWidgetItem - ui->tableWidgetItem->setRowCount(0); - ui->tableWidgetItem->setColumnCount(headlist.count()); - ui->tableWidgetItem->setHorizontalHeaderLabels(headlist); - //循环数据 - int rowCount=0; - int row=0; - - for (const QStringList& item : Data) - { - //获取行号 并进行添加行 - rowCount = ui->tableWidgetItem->rowCount(); - ui->tableWidgetItem->insertRow(rowCount); - //添加 序号 - ui->tableWidgetItem->setItem(row, 0, new QTableWidgetItem(QString::number(row+1))); - //循环读取值 headlist,count是列的数量 - for(int i=1;itableWidgetItem->setItem(row, i, new QTableWidgetItem(item[i])); - } - - row++; - + //重写核查点显示 + //每个检定项目列头 + QMap headListItem; //例 + //每个检定项目数据 + QMap> dataListItem; //例 + dataListItem=dbManager.Search_CalibrationTableClass(id,&headListItem); + QHBoxLayout *layout = ui->HeadListLayout; + QStackedWidget *stackedWidget = ui->stackedWidgetData; + //数据清空 + // 清空QStackedWidget中的所有页 + while (stackedWidget->count() > 0) { + QWidget *widget = stackedWidget->widget(0); // 获取第一个子部件 + stackedWidget->removeWidget(widget); // 从堆叠部件中移除 + delete widget; // 删除部件,防止内存泄漏 } + // 清空QHBoxLayout中的所有QPushButton + while (QLayoutItem *item = layout->takeAt(0)) { + QWidget *widget = item->widget(); + if (widget && qobject_cast(widget)) { + // 移除并删除QPushButton + delete widget; + } + } + int index = 0; + for (const auto &item : headListItem) { + QTableWidget *tableWidget = new QTableWidget(this); + tableWidget->setColumnCount(item.count()); + tableWidget->setHorizontalHeaderLabels(item); + //设置tableWidget样式表 + tableWidget->verticalHeader()->setParent(nullptr); //隐藏行头 + tableWidget->setStyleSheet("QHeaderView::section {" + "border: 1px solid rgba(197, 196, 196, 1);" + "border-left:none;" + "border-top:none;" + "background-color:white;" + "}"); + + // ======================================================================================== + // 数据循环显示 + // ==================================================================================== + int rowCount=0; + const auto &dataRes = dataListItem.value(headListItem.keys()[index]); + //tableWidget->setRowCount(data.count()); + + for (int i = 0; i < dataRes.count(); ++i) { + //获取行号 并进行添加行 + rowCount = tableWidget->rowCount(); + tableWidget->insertRow(rowCount); + tableWidget->setItem(i, 0, new QTableWidgetItem(QString::number(i+1))); + for(int j=1;jsetItem(i, j, new QTableWidgetItem(dataRes[i][j])); + } + + } + + stackedWidget->insertWidget(index,tableWidget); + // ======================================================================================== + // 按钮设置显示 + // ==================================================================================== + QPushButton *button = new QPushButton(headListItem.keys()[index], 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 {" + "background-color: blue;" // 选中时变为蓝色背景 + "}"); + + layout->addWidget(button); + connect(button, &QPushButton::clicked, stackedWidget, [stackedWidget, index]() { + stackedWidget->setCurrentIndex(index); + }); + + ++index; + } + //默认启动第一个页面 + stackedWidget->setCurrentIndex(0); + } void BeExamined_DeviceItem::SetHomePaheCombox(TestedDevice entity) { if(comboBoxContainsItem(ui->name,entity.equipment_name)){ - ui->name->addItem(entity.model); + ui->name->addItem(entity.equipment_name); } if(comboBoxContainsItem(ui->mode,entity.model)){ - ui->mode->addItem(entity.equipment_name); + ui->mode->addItem(entity.model); } if(comboBoxContainsItem(ui->manufacturer_2,entity.manufacturer)){ ui->manufacturer_2->addItem(entity.manufacturer); } if(comboBoxContainsItem(ui->Buildinguser,entity.customer_name)){ - ui->Buildinguser->addItem(entity.manufacturer); + ui->Buildinguser->addItem(entity.customer_name); } if(comboBoxContainsItem(ui->dept_2,entity.FULL_NAME)){ - ui->dept_2->addItem(entity.manufacturer); + ui->dept_2->addItem(entity.FULL_NAME); } } diff --git a/softwareDirectory/AutoVerScheme/beexamined_deviceitem.ui b/softwareDirectory/AutoVerScheme/beexamined_deviceitem.ui index 0e06ed9..30ff535 100644 --- a/softwareDirectory/AutoVerScheme/beexamined_deviceitem.ui +++ b/softwareDirectory/AutoVerScheme/beexamined_deviceitem.ui @@ -32,7 +32,7 @@ - 0 + 1 @@ -793,7 +793,7 @@ XXX - 2 + 3 false @@ -811,16 +811,39 @@ - + - 核查项目及核查点: + 检定项目及检定点: - + + + + + + + + Qt::Horizontal + + + + 1506 + 20 + + + + + + + + + + + diff --git a/softwareDirectory/AutoVerScheme/create_task.cpp b/softwareDirectory/AutoVerScheme/create_task.cpp index 52a0ba7..c9bdffa 100644 --- a/softwareDirectory/AutoVerScheme/create_task.cpp +++ b/softwareDirectory/AutoVerScheme/create_task.cpp @@ -231,7 +231,11 @@ // 编辑按钮 点击事件 进入详情页面 // ==================================================================================== //DeviceInfoInit(id); + + DisplayButton(); + //查询出所有委托方 + //SetPartPageComBox(); SelectPageData(id); TaskId=id; ui->TitleLable->setText("编辑任务单"); @@ -315,6 +319,7 @@ { if(ListId.count()!=0) { + SelectDataItem.clear(); _IdList=ListId; ui->tableWidgetItem->setRowCount(0); // 调用数据库管理器的函数获取数据 @@ -329,14 +334,14 @@ { rowCount = ui->tableWidgetItem->rowCount(); ui->tableWidgetItem->insertRow(rowCount); - ui->tableWidgetItem->setItem(row, 0, new QTableWidgetItem(QString::number(row+1))); - ui->tableWidgetItem->setItem(row, 1, new QTableWidgetItem(result[0].equipment_name)); - ui->tableWidgetItem->setItem(row, 2, new QTableWidgetItem(result[0].model)); - ui->tableWidgetItem->setItem(row, 3, new QTableWidgetItem(result[0].help_instruction)); - ui->tableWidgetItem->setItem(row, 4, new QTableWidgetItem(result[0].manufacture_no)); - ui->tableWidgetItem->setItem(row, 5, new QTableWidgetItem(result[0].manufacturer)); - ui->tableWidgetItem->setItem(row, 6, new QTableWidgetItem("点击编辑")); + ui->tableWidgetItem->setItem(row, 1, new QTableWidgetItem(QString::number(row+1))); + ui->tableWidgetItem->setItem(row, 2, new QTableWidgetItem(result[0].equipment_name)); + ui->tableWidgetItem->setItem(row, 3, new QTableWidgetItem(result[0].model)); + ui->tableWidgetItem->setItem(row, 4, new QTableWidgetItem(result[0].help_instruction)); + ui->tableWidgetItem->setItem(row, 5, new QTableWidgetItem(result[0].manufacture_no)); + ui->tableWidgetItem->setItem(row, 6, new QTableWidgetItem(result[0].manufacturer)); ui->tableWidgetItem->setItem(row, 7, new QTableWidgetItem("点击编辑")); + ui->tableWidgetItem->setItem(row, 8, new QTableWidgetItem("点击编辑")); row++; } @@ -353,36 +358,78 @@ // 保存任务单按钮 先新增任务单 后新增任务单设备 // ==================================================================================== bool IsSUCC=false; - //获取选中的委托人ID - QString CustomerID=""; - if(_model->rowCount()>0){ - QModelIndex currentIndex = _model->index(ui->customer_name->currentIndex(),0); - CustomerID=currentIndex.data().toString(); } + //获取检定人ID QString person_id=dbManager.ConvertStaffInfo("用户ID目前固定").id; + //根据用户查出部门ID + QString DeptId=dbManager.ConvertStaffInfo("函数内默认添加").dept_id; + if(State=="Update") { if(TaskId=="")return; - InsertTask insertTask; - insertTask.id=TaskId; + InsertTask insertTask=dbManager.SelectTaskSingle(TaskId); insertTask.order_no=ui->LineEditNumber->text(); - insertTask.customer_name=ui->customer_name->currentText(); insertTask.require_over_time=ui->require_over_time->text(); insertTask.deliverer=ui->deliverer->text(); insertTask.deliverer_tel=ui->deliverer_tel->text(); insertTask.undertaker_name=ui->undertaker_name->text(); insertTask.undertake_time=ui->undertake_time->text(); - - if(ui->is_urgent->currentText()=="是") - { - insertTask.is_urgent=true; - }else{insertTask.is_urgent=false;} insertTask.receive_illustrate=ui->receive_illustrate->text(); - insertTask.customer_id=CustomerID; - IsSUCC=dbManager.UpdateTask(insertTask); - //设备更新 编辑设备待写 + IsSUCC=dbManager.UpdateTask(insertTask); + //设备更新 编辑设备待写 + //1、先删除之前的设备 + dbManager.DeleteTaskSameDevice(TaskId); + dbManager.DeleteTaskInfoRecordDevice(TaskId); + qint64 id = dbManager.generateId(); + //2、将新的设置重新增加到这两张表 + int count=0; + if(SelectDataItem.count()!=0 && _IdList.count()!=0){ + //InsertOrderSampleRelation + foreach(TestedCatDevice DeviceInfo,SelectDataItem) + { + //样品表 + OrderSampleRelation orderSampleRelation; + id = dbManager.generateId(); + orderSampleRelation.id=QString::number(id); + orderSampleRelation.order_id=TaskId; + orderSampleRelation.sample_id=_IdList[count]; + orderSampleRelation.sample_name=DeviceInfo.equipment_name; + orderSampleRelation.sample_model=DeviceInfo.model; + orderSampleRelation.measure_complete_time=QDateTime::currentDateTime(); + IsSUCC=dbManager.InsertOrderSampleRelation(orderSampleRelation); + + //每条设备对应一个信息表数据 + //增加biz_business_lab_executive_info 总信息表 + biz_business_lab_executive_info entity; + entity.id=QString::number(dbManager.generateId()); + entity.order_id=TaskId; + entity.sample_id=_IdList[count]; + entity.create_user_id="函数内默认添加"; + entity.measure_dept_id=DeptId; // + entity.measure_person_id=person_id; + IsSUCC=dbManager.InsertTaskInfoRecord(entity); + + if(!IsSUCC){ShowMessageBox("提示",QString("设备名称为: 1% 添加失败").arg(DeviceInfo.equipment_name));} + count++; + } + }else{ + + biz_business_lab_executive_info entity; + entity.id=QString::number(dbManager.generateId()); + entity.order_id=TaskId; + entity.sample_id=""; + entity.create_user_id="函数内默认添加"; + entity.measure_dept_id=DeptId; // + entity.measure_person_id=person_id; + IsSUCC=dbManager.InsertTaskInfoRecord(entity); + } }else{ + //获取选中的委托人ID + QString CustomerID=""; + if(_model->rowCount()>0){ + QModelIndex currentIndex = _model->index(ui->customer_name->currentIndex(),0); + CustomerID=currentIndex.data().toString(); } //新增任务单 qint64 id = dbManager.generateId(); InsertTask insertTask; @@ -403,15 +450,12 @@ insertTask.receive_illustrate=ui->receive_illustrate->text(); insertTask.customer_id=CustomerID; IsSUCC=dbManager.InsertTaskBasic(insertTask); + //新增任务单设备 + QString NewTaskId=dbManager.getCreateTaskListNew()[0].id; if(IsSUCC) { - //根据用户查出部门ID - QString DeptId=dbManager.ConvertStaffInfo("函数内默认添加").dept_id; - - //新增任务单设备 - QString NewTaskId=dbManager.getCreateTaskListNew()[0].id; int count=0; if(SelectDataItem.count()!=0 && _IdList.count()!=0){ //InsertOrderSampleRelation diff --git a/softwareDirectory/AutoVerScheme/create_task.ui b/softwareDirectory/AutoVerScheme/create_task.ui index 4f6f542..46e2f82 100644 --- a/softwareDirectory/AutoVerScheme/create_task.ui +++ b/softwareDirectory/AutoVerScheme/create_task.ui @@ -38,7 +38,7 @@ - 0 + 1 diff --git a/softwareDirectory/AutoVerScheme/AutoVerScheme.pro b/softwareDirectory/AutoVerScheme/AutoVerScheme.pro index 145840b..bf70fab 100644 --- a/softwareDirectory/AutoVerScheme/AutoVerScheme.pro +++ b/softwareDirectory/AutoVerScheme/AutoVerScheme.pro @@ -48,12 +48,14 @@ inspectdataitem.cpp \ loginwindow.cpp \ main.cpp \ + mainsysdatabaseconnection.cpp \ mainwindow.cpp \ my_task.cpp \ newcheckmethod.cpp \ newverifymethod.cpp \ rulefileitem.cpp \ standard_deviceitem.cpp \ + synctask.cpp \ testdataitem.cpp \ testview.cpp \ verifydevice.cpp \ @@ -95,12 +97,14 @@ infomanageview.h \ inspectdataitem.h \ loginwindow.h \ + mainsysdatabaseconnection.h \ mainwindow.h \ my_task.h \ newcheckmethod.h \ newverifymethod.h \ rulefileitem.h \ standard_deviceitem.h \ + synctask.h \ testdataitem.h \ testview.h \ verifydevice.h \ diff --git a/softwareDirectory/AutoVerScheme/basecommonapi.cpp b/softwareDirectory/AutoVerScheme/basecommonapi.cpp index b8846b2..572246e 100644 --- a/softwareDirectory/AutoVerScheme/basecommonapi.cpp +++ b/softwareDirectory/AutoVerScheme/basecommonapi.cpp @@ -511,6 +511,37 @@ return isSuccess; } +//单独查询任务单表 +//更新 任务单 +InsertTask BaseCommonApi::SelectTaskSingle(QString order_id) +{ + InsertTask result; + QSqlQuery query; + query.prepare("SELECT * From biz_business_order_info WHERE id=:order_id"); + // 将参数绑定到占位符 + query.bindValue(":order_id", order_id); + if (query.exec()) { + while (query.next()) { + result.id = query.value("id").toString(); + result.customer_name = query.value("customer_name").toString(); + result.require_over_time = query.value("require_over_time").toString(); + result.deliverer = query.value("deliverer").toString(); + result.deliverer_tel = query.value("deliverer_tel").toString(); + result.undertaker_name = query.value("undertaker_name").toString(); + result.undertake_time = query.value("undertake_time").toString(); + bool is_urgent=false; + if(query.value("is_urgent").toString()=="是"){is_urgent=true;}else{is_urgent=false;}; + result.is_urgent = is_urgent; + result.receive_illustrate = query.value("receive_illustrate").toString(); + result.customer_id = query.value("customer_id").toString(); + + } + } else { + qDebug() << "Query execution failed: " << query.lastError().text(); + } + + return result; +} //删除任务单 bool BaseCommonApi::DeleteTask(QString id) { @@ -533,6 +564,38 @@ return allSuccessful; } +//删除任务单信息记录表同一任务ID的设备 +bool BaseCommonApi::DeleteTaskInfoRecordDevice(QString order_id) +{ + QSqlQuery query; + + //删除任务单样品表数据 + query.prepare("DELETE FROM biz_business_lab_executive_info WHERE order_id = :id"); + query.bindValue(":id", order_id); + + if (!query.exec()) { + qDebug() << "删除失败 " << query.lastError().text(); + return false; + } + + return true; +} +//删除任务详情表同一任务ID的设备 +bool BaseCommonApi::DeleteTaskSameDevice(QString order_id) +{ + QSqlQuery query; + + //删除任务单样品表数据 + query.prepare("DELETE FROM biz_business_order_sample_relation WHERE order_id = :id"); + query.bindValue(":id", order_id); + + if (!query.exec()) { + qDebug() << "删除失败 " << query.lastError().text(); + return false; + } + + return true; +} //删除任务单内设备 bool BaseCommonApi::DeleteTaskDevice(QString id) { @@ -821,8 +884,8 @@ */ //根据被检设备ID获取当前设备的 检定项目及检定点 -/* -QMap> BaseCommonApi::Search_CalibrationTable(QString DeiverId,QMap *HeadList) + +QMap> BaseCommonApi::Search_CalibrationTableClass(QString DeiverId,QMap *HeadList) { QMap> DataList; @@ -834,11 +897,11 @@ case 1: //CliTable[0].id //1717086652508487681 - DataList=BaseCommonApi::getVerMultiCal(CliTable[0].id,HeadList); + DataList=BaseCommonApi::getVerMultiCalClass(CliTable[0].id,HeadList); } return DataList; -}*/ +} //根据被检设备ID获取当前设备的 检定项目及检定点 QList BaseCommonApi::Search_CalibrationTable(QString DeiverId,QStringList *HeadList) { @@ -951,8 +1014,7 @@ return resultData; } //被检设备管理-检定项目及检定点-多功能校准源 -/* -QMap> BaseCommonApi::getVerMultiCal(QString itemId,QMap *headList) +QMap> BaseCommonApi::getVerMultiCalClass(QString itemId,QMap *headList) { QMap> DataMapList; QList resultData; @@ -998,7 +1060,7 @@ DataMapList= GetDataReturnItemList(resultData,DataMapList,headList); return DataMapList; } -*/ + QMap> BaseCommonApi::GetDataReturnItemList(QList ResultData,QMap> DataMapList,QMap *HeadMapList) { @@ -1052,7 +1114,7 @@ Data.append(row[9]); //分辨力 DCVList.append(Data); } - else if(ResultData[2].first()=="ACV") + else if(row[2]=="ACV") { QString VerificationItem=NULL; if(isFirst[1]) @@ -1086,7 +1148,7 @@ } Data.append(row[9]); //分辨力 ACVList.append(Data); - } else if(ResultData[2].first()=="DCI") + } else if(row[2]=="DCI") { QString VerificationItem=NULL; if(isFirst[2]) @@ -1122,7 +1184,7 @@ Data.append(row[9]); //分辨力 DCIList.append(Data); - } else if(ResultData[2].first()=="ACI") + } else if(row[2]=="ACI") { QString VerificationItem=NULL; if(isFirst[3]) @@ -1157,7 +1219,7 @@ } Data.append(row[9]); //分辨力 ACIList.append(Data); - } else if(ResultData[2].first()=="R") + } else if(row[2]=="R") { QString VerificationItem=NULL; if(isFirst[4]) diff --git a/softwareDirectory/AutoVerScheme/basecommonapi.h b/softwareDirectory/AutoVerScheme/basecommonapi.h index da7ce3c..098944a 100644 --- a/softwareDirectory/AutoVerScheme/basecommonapi.h +++ b/softwareDirectory/AutoVerScheme/basecommonapi.h @@ -920,7 +920,7 @@ //判断检定装置表并查询 参数设备id static QList Search_CalibrationTable(QString DeiverId,QStringList *HeadList); - //static QMap> Search_CalibrationTable(QString DeiverId,QMap *HeadList); + static QMap> Search_CalibrationTableClass(QString DeiverId,QMap *HeadList); //判断核查装置表并查询 参数设备id static QList Search_VerifyTable(QString DeiverId,QStringList *HeadList ); @@ -983,7 +983,7 @@ static JudgeCalibrationTable getJudgeVerifyTable(QString id); //被检设备管理-检定项目及检定点-多功能校准源 static QList getVerMultiCal(QString itemId,QStringList *headList); - //static QMap> getVerMultiCal(QString itemId,QMap *headList); + static QMap> getVerMultiCalClass(QString itemId,QMap *headList); static QMap> GetDataReturnItemList(QList ResultData, QMap> DataMapList, QMap *HeadMapList); @@ -1100,6 +1100,10 @@ static QList getMeasureModifyRecord(QString data_id); //查询最新结果保存记录 static SaveDeviceMeasureInfo getNewResultData(); + + static bool DeleteTaskSameDevice(QString order_id); + static bool DeleteTaskInfoRecordDevice(QString order_id); + static InsertTask SelectTaskSingle(QString order_id); }; diff --git a/softwareDirectory/AutoVerScheme/beexamined_deviceitem.cpp b/softwareDirectory/AutoVerScheme/beexamined_deviceitem.cpp index fef3880..00d746b 100644 --- a/softwareDirectory/AutoVerScheme/beexamined_deviceitem.cpp +++ b/softwareDirectory/AutoVerScheme/beexamined_deviceitem.cpp @@ -46,18 +46,7 @@ << "生产厂家"<<"所在单位" <<"使用部门"<<"计量标识"<<"检定周期"<<"证书有效期"<<"操作"; ui->tableWidget->setHorizontalHeaderLabels(headers); - //详情页面tableWidgetItem设置 - ui->tableWidgetItem->setStyleSheet("QHeaderView::section {" - "border: 1px solid rgba(197, 196, 196, 1);" - "border-left:none;" - "border-top:none;" - "background-color:white;" - "}"); - // ui->tableWidget->setRowCount(10); // 设置10行 - //ui->tableWidgetItem->setColumnCount(14); // 设置11列 - ui->tableWidgetItem->setColumnWidth(0, 80); // 设置第一列的宽度为100像素 - ui->tableWidgetItem->verticalHeader()->setParent(nullptr); //隐藏行头 } void BeExamined_DeviceItem::ShowMessageBox(QString title,QString value) { @@ -195,53 +184,116 @@ // 初始化检定项目及核查点 // ==================================================================================== - //获取核查点tablewight的数据 - QStringList headlist; - - QList Data=dbManager.Search_CalibrationTable(id,&headlist); - //QList Data; - //tableWidgetItem - ui->tableWidgetItem->setRowCount(0); - ui->tableWidgetItem->setColumnCount(headlist.count()); - ui->tableWidgetItem->setHorizontalHeaderLabels(headlist); - //循环数据 - int rowCount=0; - int row=0; - - for (const QStringList& item : Data) - { - //获取行号 并进行添加行 - rowCount = ui->tableWidgetItem->rowCount(); - ui->tableWidgetItem->insertRow(rowCount); - //添加 序号 - ui->tableWidgetItem->setItem(row, 0, new QTableWidgetItem(QString::number(row+1))); - //循环读取值 headlist,count是列的数量 - for(int i=1;itableWidgetItem->setItem(row, i, new QTableWidgetItem(item[i])); - } - - row++; - + //重写核查点显示 + //每个检定项目列头 + QMap headListItem; //例 + //每个检定项目数据 + QMap> dataListItem; //例 + dataListItem=dbManager.Search_CalibrationTableClass(id,&headListItem); + QHBoxLayout *layout = ui->HeadListLayout; + QStackedWidget *stackedWidget = ui->stackedWidgetData; + //数据清空 + // 清空QStackedWidget中的所有页 + while (stackedWidget->count() > 0) { + QWidget *widget = stackedWidget->widget(0); // 获取第一个子部件 + stackedWidget->removeWidget(widget); // 从堆叠部件中移除 + delete widget; // 删除部件,防止内存泄漏 } + // 清空QHBoxLayout中的所有QPushButton + while (QLayoutItem *item = layout->takeAt(0)) { + QWidget *widget = item->widget(); + if (widget && qobject_cast(widget)) { + // 移除并删除QPushButton + delete widget; + } + } + int index = 0; + for (const auto &item : headListItem) { + QTableWidget *tableWidget = new QTableWidget(this); + tableWidget->setColumnCount(item.count()); + tableWidget->setHorizontalHeaderLabels(item); + //设置tableWidget样式表 + tableWidget->verticalHeader()->setParent(nullptr); //隐藏行头 + tableWidget->setStyleSheet("QHeaderView::section {" + "border: 1px solid rgba(197, 196, 196, 1);" + "border-left:none;" + "border-top:none;" + "background-color:white;" + "}"); + + // ======================================================================================== + // 数据循环显示 + // ==================================================================================== + int rowCount=0; + const auto &dataRes = dataListItem.value(headListItem.keys()[index]); + //tableWidget->setRowCount(data.count()); + + for (int i = 0; i < dataRes.count(); ++i) { + //获取行号 并进行添加行 + rowCount = tableWidget->rowCount(); + tableWidget->insertRow(rowCount); + tableWidget->setItem(i, 0, new QTableWidgetItem(QString::number(i+1))); + for(int j=1;jsetItem(i, j, new QTableWidgetItem(dataRes[i][j])); + } + + } + + stackedWidget->insertWidget(index,tableWidget); + // ======================================================================================== + // 按钮设置显示 + // ==================================================================================== + QPushButton *button = new QPushButton(headListItem.keys()[index], 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 {" + "background-color: blue;" // 选中时变为蓝色背景 + "}"); + + layout->addWidget(button); + connect(button, &QPushButton::clicked, stackedWidget, [stackedWidget, index]() { + stackedWidget->setCurrentIndex(index); + }); + + ++index; + } + //默认启动第一个页面 + stackedWidget->setCurrentIndex(0); + } void BeExamined_DeviceItem::SetHomePaheCombox(TestedDevice entity) { if(comboBoxContainsItem(ui->name,entity.equipment_name)){ - ui->name->addItem(entity.model); + ui->name->addItem(entity.equipment_name); } if(comboBoxContainsItem(ui->mode,entity.model)){ - ui->mode->addItem(entity.equipment_name); + ui->mode->addItem(entity.model); } if(comboBoxContainsItem(ui->manufacturer_2,entity.manufacturer)){ ui->manufacturer_2->addItem(entity.manufacturer); } if(comboBoxContainsItem(ui->Buildinguser,entity.customer_name)){ - ui->Buildinguser->addItem(entity.manufacturer); + ui->Buildinguser->addItem(entity.customer_name); } if(comboBoxContainsItem(ui->dept_2,entity.FULL_NAME)){ - ui->dept_2->addItem(entity.manufacturer); + ui->dept_2->addItem(entity.FULL_NAME); } } diff --git a/softwareDirectory/AutoVerScheme/beexamined_deviceitem.ui b/softwareDirectory/AutoVerScheme/beexamined_deviceitem.ui index 0e06ed9..30ff535 100644 --- a/softwareDirectory/AutoVerScheme/beexamined_deviceitem.ui +++ b/softwareDirectory/AutoVerScheme/beexamined_deviceitem.ui @@ -32,7 +32,7 @@ - 0 + 1 @@ -793,7 +793,7 @@ XXX - 2 + 3 false @@ -811,16 +811,39 @@ - + - 核查项目及核查点: + 检定项目及检定点: - + + + + + + + + Qt::Horizontal + + + + 1506 + 20 + + + + + + + + + + + diff --git a/softwareDirectory/AutoVerScheme/create_task.cpp b/softwareDirectory/AutoVerScheme/create_task.cpp index 52a0ba7..c9bdffa 100644 --- a/softwareDirectory/AutoVerScheme/create_task.cpp +++ b/softwareDirectory/AutoVerScheme/create_task.cpp @@ -231,7 +231,11 @@ // 编辑按钮 点击事件 进入详情页面 // ==================================================================================== //DeviceInfoInit(id); + + DisplayButton(); + //查询出所有委托方 + //SetPartPageComBox(); SelectPageData(id); TaskId=id; ui->TitleLable->setText("编辑任务单"); @@ -315,6 +319,7 @@ { if(ListId.count()!=0) { + SelectDataItem.clear(); _IdList=ListId; ui->tableWidgetItem->setRowCount(0); // 调用数据库管理器的函数获取数据 @@ -329,14 +334,14 @@ { rowCount = ui->tableWidgetItem->rowCount(); ui->tableWidgetItem->insertRow(rowCount); - ui->tableWidgetItem->setItem(row, 0, new QTableWidgetItem(QString::number(row+1))); - ui->tableWidgetItem->setItem(row, 1, new QTableWidgetItem(result[0].equipment_name)); - ui->tableWidgetItem->setItem(row, 2, new QTableWidgetItem(result[0].model)); - ui->tableWidgetItem->setItem(row, 3, new QTableWidgetItem(result[0].help_instruction)); - ui->tableWidgetItem->setItem(row, 4, new QTableWidgetItem(result[0].manufacture_no)); - ui->tableWidgetItem->setItem(row, 5, new QTableWidgetItem(result[0].manufacturer)); - ui->tableWidgetItem->setItem(row, 6, new QTableWidgetItem("点击编辑")); + ui->tableWidgetItem->setItem(row, 1, new QTableWidgetItem(QString::number(row+1))); + ui->tableWidgetItem->setItem(row, 2, new QTableWidgetItem(result[0].equipment_name)); + ui->tableWidgetItem->setItem(row, 3, new QTableWidgetItem(result[0].model)); + ui->tableWidgetItem->setItem(row, 4, new QTableWidgetItem(result[0].help_instruction)); + ui->tableWidgetItem->setItem(row, 5, new QTableWidgetItem(result[0].manufacture_no)); + ui->tableWidgetItem->setItem(row, 6, new QTableWidgetItem(result[0].manufacturer)); ui->tableWidgetItem->setItem(row, 7, new QTableWidgetItem("点击编辑")); + ui->tableWidgetItem->setItem(row, 8, new QTableWidgetItem("点击编辑")); row++; } @@ -353,36 +358,78 @@ // 保存任务单按钮 先新增任务单 后新增任务单设备 // ==================================================================================== bool IsSUCC=false; - //获取选中的委托人ID - QString CustomerID=""; - if(_model->rowCount()>0){ - QModelIndex currentIndex = _model->index(ui->customer_name->currentIndex(),0); - CustomerID=currentIndex.data().toString(); } + //获取检定人ID QString person_id=dbManager.ConvertStaffInfo("用户ID目前固定").id; + //根据用户查出部门ID + QString DeptId=dbManager.ConvertStaffInfo("函数内默认添加").dept_id; + if(State=="Update") { if(TaskId=="")return; - InsertTask insertTask; - insertTask.id=TaskId; + InsertTask insertTask=dbManager.SelectTaskSingle(TaskId); insertTask.order_no=ui->LineEditNumber->text(); - insertTask.customer_name=ui->customer_name->currentText(); insertTask.require_over_time=ui->require_over_time->text(); insertTask.deliverer=ui->deliverer->text(); insertTask.deliverer_tel=ui->deliverer_tel->text(); insertTask.undertaker_name=ui->undertaker_name->text(); insertTask.undertake_time=ui->undertake_time->text(); - - if(ui->is_urgent->currentText()=="是") - { - insertTask.is_urgent=true; - }else{insertTask.is_urgent=false;} insertTask.receive_illustrate=ui->receive_illustrate->text(); - insertTask.customer_id=CustomerID; - IsSUCC=dbManager.UpdateTask(insertTask); - //设备更新 编辑设备待写 + IsSUCC=dbManager.UpdateTask(insertTask); + //设备更新 编辑设备待写 + //1、先删除之前的设备 + dbManager.DeleteTaskSameDevice(TaskId); + dbManager.DeleteTaskInfoRecordDevice(TaskId); + qint64 id = dbManager.generateId(); + //2、将新的设置重新增加到这两张表 + int count=0; + if(SelectDataItem.count()!=0 && _IdList.count()!=0){ + //InsertOrderSampleRelation + foreach(TestedCatDevice DeviceInfo,SelectDataItem) + { + //样品表 + OrderSampleRelation orderSampleRelation; + id = dbManager.generateId(); + orderSampleRelation.id=QString::number(id); + orderSampleRelation.order_id=TaskId; + orderSampleRelation.sample_id=_IdList[count]; + orderSampleRelation.sample_name=DeviceInfo.equipment_name; + orderSampleRelation.sample_model=DeviceInfo.model; + orderSampleRelation.measure_complete_time=QDateTime::currentDateTime(); + IsSUCC=dbManager.InsertOrderSampleRelation(orderSampleRelation); + + //每条设备对应一个信息表数据 + //增加biz_business_lab_executive_info 总信息表 + biz_business_lab_executive_info entity; + entity.id=QString::number(dbManager.generateId()); + entity.order_id=TaskId; + entity.sample_id=_IdList[count]; + entity.create_user_id="函数内默认添加"; + entity.measure_dept_id=DeptId; // + entity.measure_person_id=person_id; + IsSUCC=dbManager.InsertTaskInfoRecord(entity); + + if(!IsSUCC){ShowMessageBox("提示",QString("设备名称为: 1% 添加失败").arg(DeviceInfo.equipment_name));} + count++; + } + }else{ + + biz_business_lab_executive_info entity; + entity.id=QString::number(dbManager.generateId()); + entity.order_id=TaskId; + entity.sample_id=""; + entity.create_user_id="函数内默认添加"; + entity.measure_dept_id=DeptId; // + entity.measure_person_id=person_id; + IsSUCC=dbManager.InsertTaskInfoRecord(entity); + } }else{ + //获取选中的委托人ID + QString CustomerID=""; + if(_model->rowCount()>0){ + QModelIndex currentIndex = _model->index(ui->customer_name->currentIndex(),0); + CustomerID=currentIndex.data().toString(); } //新增任务单 qint64 id = dbManager.generateId(); InsertTask insertTask; @@ -403,15 +450,12 @@ insertTask.receive_illustrate=ui->receive_illustrate->text(); insertTask.customer_id=CustomerID; IsSUCC=dbManager.InsertTaskBasic(insertTask); + //新增任务单设备 + QString NewTaskId=dbManager.getCreateTaskListNew()[0].id; if(IsSUCC) { - //根据用户查出部门ID - QString DeptId=dbManager.ConvertStaffInfo("函数内默认添加").dept_id; - - //新增任务单设备 - QString NewTaskId=dbManager.getCreateTaskListNew()[0].id; int count=0; if(SelectDataItem.count()!=0 && _IdList.count()!=0){ //InsertOrderSampleRelation diff --git a/softwareDirectory/AutoVerScheme/create_task.ui b/softwareDirectory/AutoVerScheme/create_task.ui index 4f6f542..46e2f82 100644 --- a/softwareDirectory/AutoVerScheme/create_task.ui +++ b/softwareDirectory/AutoVerScheme/create_task.ui @@ -38,7 +38,7 @@ - 0 + 1 diff --git a/softwareDirectory/AutoVerScheme/datasyncview.cpp b/softwareDirectory/AutoVerScheme/datasyncview.cpp index 74cd41d..fbf4508 100644 --- a/softwareDirectory/AutoVerScheme/datasyncview.cpp +++ b/softwareDirectory/AutoVerScheme/datasyncview.cpp @@ -1,5 +1,10 @@ #include "datasyncview.h" #include "ui_datasyncview.h" +#include "synctask.h" +#include "databaseconnection.h" +#include "mainsysdatabaseconnection.h" + + DataSyncView::DataSyncView(QWidget *parent) : QWidget(parent), @@ -38,7 +43,18 @@ QStringList headers; headers << "序号" << "同步时间" << "是否同步成功" << "备注" ; ui->tableWidget->setHorizontalHeaderLabels(headers); +} +void DataSyncView::on_DownloadDataButton_clicked() +{ + //从主系统下载 - - +} +void DataSyncView::syncTable() +{ + //连接两个数据库 + bool IsOpen=false; + DatabaseConnection *Conn=DatabaseConnection::getInstance(); + IsOpen=Conn->open(); + //MainSysDatabaseConnection *MainConn=MainSysDatabaseConnection::getInstance(); + //IsOpen=MainConn->open(); } diff --git a/softwareDirectory/AutoVerScheme/AutoVerScheme.pro b/softwareDirectory/AutoVerScheme/AutoVerScheme.pro index 145840b..bf70fab 100644 --- a/softwareDirectory/AutoVerScheme/AutoVerScheme.pro +++ b/softwareDirectory/AutoVerScheme/AutoVerScheme.pro @@ -48,12 +48,14 @@ inspectdataitem.cpp \ loginwindow.cpp \ main.cpp \ + mainsysdatabaseconnection.cpp \ mainwindow.cpp \ my_task.cpp \ newcheckmethod.cpp \ newverifymethod.cpp \ rulefileitem.cpp \ standard_deviceitem.cpp \ + synctask.cpp \ testdataitem.cpp \ testview.cpp \ verifydevice.cpp \ @@ -95,12 +97,14 @@ infomanageview.h \ inspectdataitem.h \ loginwindow.h \ + mainsysdatabaseconnection.h \ mainwindow.h \ my_task.h \ newcheckmethod.h \ newverifymethod.h \ rulefileitem.h \ standard_deviceitem.h \ + synctask.h \ testdataitem.h \ testview.h \ verifydevice.h \ diff --git a/softwareDirectory/AutoVerScheme/basecommonapi.cpp b/softwareDirectory/AutoVerScheme/basecommonapi.cpp index b8846b2..572246e 100644 --- a/softwareDirectory/AutoVerScheme/basecommonapi.cpp +++ b/softwareDirectory/AutoVerScheme/basecommonapi.cpp @@ -511,6 +511,37 @@ return isSuccess; } +//单独查询任务单表 +//更新 任务单 +InsertTask BaseCommonApi::SelectTaskSingle(QString order_id) +{ + InsertTask result; + QSqlQuery query; + query.prepare("SELECT * From biz_business_order_info WHERE id=:order_id"); + // 将参数绑定到占位符 + query.bindValue(":order_id", order_id); + if (query.exec()) { + while (query.next()) { + result.id = query.value("id").toString(); + result.customer_name = query.value("customer_name").toString(); + result.require_over_time = query.value("require_over_time").toString(); + result.deliverer = query.value("deliverer").toString(); + result.deliverer_tel = query.value("deliverer_tel").toString(); + result.undertaker_name = query.value("undertaker_name").toString(); + result.undertake_time = query.value("undertake_time").toString(); + bool is_urgent=false; + if(query.value("is_urgent").toString()=="是"){is_urgent=true;}else{is_urgent=false;}; + result.is_urgent = is_urgent; + result.receive_illustrate = query.value("receive_illustrate").toString(); + result.customer_id = query.value("customer_id").toString(); + + } + } else { + qDebug() << "Query execution failed: " << query.lastError().text(); + } + + return result; +} //删除任务单 bool BaseCommonApi::DeleteTask(QString id) { @@ -533,6 +564,38 @@ return allSuccessful; } +//删除任务单信息记录表同一任务ID的设备 +bool BaseCommonApi::DeleteTaskInfoRecordDevice(QString order_id) +{ + QSqlQuery query; + + //删除任务单样品表数据 + query.prepare("DELETE FROM biz_business_lab_executive_info WHERE order_id = :id"); + query.bindValue(":id", order_id); + + if (!query.exec()) { + qDebug() << "删除失败 " << query.lastError().text(); + return false; + } + + return true; +} +//删除任务详情表同一任务ID的设备 +bool BaseCommonApi::DeleteTaskSameDevice(QString order_id) +{ + QSqlQuery query; + + //删除任务单样品表数据 + query.prepare("DELETE FROM biz_business_order_sample_relation WHERE order_id = :id"); + query.bindValue(":id", order_id); + + if (!query.exec()) { + qDebug() << "删除失败 " << query.lastError().text(); + return false; + } + + return true; +} //删除任务单内设备 bool BaseCommonApi::DeleteTaskDevice(QString id) { @@ -821,8 +884,8 @@ */ //根据被检设备ID获取当前设备的 检定项目及检定点 -/* -QMap> BaseCommonApi::Search_CalibrationTable(QString DeiverId,QMap *HeadList) + +QMap> BaseCommonApi::Search_CalibrationTableClass(QString DeiverId,QMap *HeadList) { QMap> DataList; @@ -834,11 +897,11 @@ case 1: //CliTable[0].id //1717086652508487681 - DataList=BaseCommonApi::getVerMultiCal(CliTable[0].id,HeadList); + DataList=BaseCommonApi::getVerMultiCalClass(CliTable[0].id,HeadList); } return DataList; -}*/ +} //根据被检设备ID获取当前设备的 检定项目及检定点 QList BaseCommonApi::Search_CalibrationTable(QString DeiverId,QStringList *HeadList) { @@ -951,8 +1014,7 @@ return resultData; } //被检设备管理-检定项目及检定点-多功能校准源 -/* -QMap> BaseCommonApi::getVerMultiCal(QString itemId,QMap *headList) +QMap> BaseCommonApi::getVerMultiCalClass(QString itemId,QMap *headList) { QMap> DataMapList; QList resultData; @@ -998,7 +1060,7 @@ DataMapList= GetDataReturnItemList(resultData,DataMapList,headList); return DataMapList; } -*/ + QMap> BaseCommonApi::GetDataReturnItemList(QList ResultData,QMap> DataMapList,QMap *HeadMapList) { @@ -1052,7 +1114,7 @@ Data.append(row[9]); //分辨力 DCVList.append(Data); } - else if(ResultData[2].first()=="ACV") + else if(row[2]=="ACV") { QString VerificationItem=NULL; if(isFirst[1]) @@ -1086,7 +1148,7 @@ } Data.append(row[9]); //分辨力 ACVList.append(Data); - } else if(ResultData[2].first()=="DCI") + } else if(row[2]=="DCI") { QString VerificationItem=NULL; if(isFirst[2]) @@ -1122,7 +1184,7 @@ Data.append(row[9]); //分辨力 DCIList.append(Data); - } else if(ResultData[2].first()=="ACI") + } else if(row[2]=="ACI") { QString VerificationItem=NULL; if(isFirst[3]) @@ -1157,7 +1219,7 @@ } Data.append(row[9]); //分辨力 ACIList.append(Data); - } else if(ResultData[2].first()=="R") + } else if(row[2]=="R") { QString VerificationItem=NULL; if(isFirst[4]) diff --git a/softwareDirectory/AutoVerScheme/basecommonapi.h b/softwareDirectory/AutoVerScheme/basecommonapi.h index da7ce3c..098944a 100644 --- a/softwareDirectory/AutoVerScheme/basecommonapi.h +++ b/softwareDirectory/AutoVerScheme/basecommonapi.h @@ -920,7 +920,7 @@ //判断检定装置表并查询 参数设备id static QList Search_CalibrationTable(QString DeiverId,QStringList *HeadList); - //static QMap> Search_CalibrationTable(QString DeiverId,QMap *HeadList); + static QMap> Search_CalibrationTableClass(QString DeiverId,QMap *HeadList); //判断核查装置表并查询 参数设备id static QList Search_VerifyTable(QString DeiverId,QStringList *HeadList ); @@ -983,7 +983,7 @@ static JudgeCalibrationTable getJudgeVerifyTable(QString id); //被检设备管理-检定项目及检定点-多功能校准源 static QList getVerMultiCal(QString itemId,QStringList *headList); - //static QMap> getVerMultiCal(QString itemId,QMap *headList); + static QMap> getVerMultiCalClass(QString itemId,QMap *headList); static QMap> GetDataReturnItemList(QList ResultData, QMap> DataMapList, QMap *HeadMapList); @@ -1100,6 +1100,10 @@ static QList getMeasureModifyRecord(QString data_id); //查询最新结果保存记录 static SaveDeviceMeasureInfo getNewResultData(); + + static bool DeleteTaskSameDevice(QString order_id); + static bool DeleteTaskInfoRecordDevice(QString order_id); + static InsertTask SelectTaskSingle(QString order_id); }; diff --git a/softwareDirectory/AutoVerScheme/beexamined_deviceitem.cpp b/softwareDirectory/AutoVerScheme/beexamined_deviceitem.cpp index fef3880..00d746b 100644 --- a/softwareDirectory/AutoVerScheme/beexamined_deviceitem.cpp +++ b/softwareDirectory/AutoVerScheme/beexamined_deviceitem.cpp @@ -46,18 +46,7 @@ << "生产厂家"<<"所在单位" <<"使用部门"<<"计量标识"<<"检定周期"<<"证书有效期"<<"操作"; ui->tableWidget->setHorizontalHeaderLabels(headers); - //详情页面tableWidgetItem设置 - ui->tableWidgetItem->setStyleSheet("QHeaderView::section {" - "border: 1px solid rgba(197, 196, 196, 1);" - "border-left:none;" - "border-top:none;" - "background-color:white;" - "}"); - // ui->tableWidget->setRowCount(10); // 设置10行 - //ui->tableWidgetItem->setColumnCount(14); // 设置11列 - ui->tableWidgetItem->setColumnWidth(0, 80); // 设置第一列的宽度为100像素 - ui->tableWidgetItem->verticalHeader()->setParent(nullptr); //隐藏行头 } void BeExamined_DeviceItem::ShowMessageBox(QString title,QString value) { @@ -195,53 +184,116 @@ // 初始化检定项目及核查点 // ==================================================================================== - //获取核查点tablewight的数据 - QStringList headlist; - - QList Data=dbManager.Search_CalibrationTable(id,&headlist); - //QList Data; - //tableWidgetItem - ui->tableWidgetItem->setRowCount(0); - ui->tableWidgetItem->setColumnCount(headlist.count()); - ui->tableWidgetItem->setHorizontalHeaderLabels(headlist); - //循环数据 - int rowCount=0; - int row=0; - - for (const QStringList& item : Data) - { - //获取行号 并进行添加行 - rowCount = ui->tableWidgetItem->rowCount(); - ui->tableWidgetItem->insertRow(rowCount); - //添加 序号 - ui->tableWidgetItem->setItem(row, 0, new QTableWidgetItem(QString::number(row+1))); - //循环读取值 headlist,count是列的数量 - for(int i=1;itableWidgetItem->setItem(row, i, new QTableWidgetItem(item[i])); - } - - row++; - + //重写核查点显示 + //每个检定项目列头 + QMap headListItem; //例 + //每个检定项目数据 + QMap> dataListItem; //例 + dataListItem=dbManager.Search_CalibrationTableClass(id,&headListItem); + QHBoxLayout *layout = ui->HeadListLayout; + QStackedWidget *stackedWidget = ui->stackedWidgetData; + //数据清空 + // 清空QStackedWidget中的所有页 + while (stackedWidget->count() > 0) { + QWidget *widget = stackedWidget->widget(0); // 获取第一个子部件 + stackedWidget->removeWidget(widget); // 从堆叠部件中移除 + delete widget; // 删除部件,防止内存泄漏 } + // 清空QHBoxLayout中的所有QPushButton + while (QLayoutItem *item = layout->takeAt(0)) { + QWidget *widget = item->widget(); + if (widget && qobject_cast(widget)) { + // 移除并删除QPushButton + delete widget; + } + } + int index = 0; + for (const auto &item : headListItem) { + QTableWidget *tableWidget = new QTableWidget(this); + tableWidget->setColumnCount(item.count()); + tableWidget->setHorizontalHeaderLabels(item); + //设置tableWidget样式表 + tableWidget->verticalHeader()->setParent(nullptr); //隐藏行头 + tableWidget->setStyleSheet("QHeaderView::section {" + "border: 1px solid rgba(197, 196, 196, 1);" + "border-left:none;" + "border-top:none;" + "background-color:white;" + "}"); + + // ======================================================================================== + // 数据循环显示 + // ==================================================================================== + int rowCount=0; + const auto &dataRes = dataListItem.value(headListItem.keys()[index]); + //tableWidget->setRowCount(data.count()); + + for (int i = 0; i < dataRes.count(); ++i) { + //获取行号 并进行添加行 + rowCount = tableWidget->rowCount(); + tableWidget->insertRow(rowCount); + tableWidget->setItem(i, 0, new QTableWidgetItem(QString::number(i+1))); + for(int j=1;jsetItem(i, j, new QTableWidgetItem(dataRes[i][j])); + } + + } + + stackedWidget->insertWidget(index,tableWidget); + // ======================================================================================== + // 按钮设置显示 + // ==================================================================================== + QPushButton *button = new QPushButton(headListItem.keys()[index], 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 {" + "background-color: blue;" // 选中时变为蓝色背景 + "}"); + + layout->addWidget(button); + connect(button, &QPushButton::clicked, stackedWidget, [stackedWidget, index]() { + stackedWidget->setCurrentIndex(index); + }); + + ++index; + } + //默认启动第一个页面 + stackedWidget->setCurrentIndex(0); + } void BeExamined_DeviceItem::SetHomePaheCombox(TestedDevice entity) { if(comboBoxContainsItem(ui->name,entity.equipment_name)){ - ui->name->addItem(entity.model); + ui->name->addItem(entity.equipment_name); } if(comboBoxContainsItem(ui->mode,entity.model)){ - ui->mode->addItem(entity.equipment_name); + ui->mode->addItem(entity.model); } if(comboBoxContainsItem(ui->manufacturer_2,entity.manufacturer)){ ui->manufacturer_2->addItem(entity.manufacturer); } if(comboBoxContainsItem(ui->Buildinguser,entity.customer_name)){ - ui->Buildinguser->addItem(entity.manufacturer); + ui->Buildinguser->addItem(entity.customer_name); } if(comboBoxContainsItem(ui->dept_2,entity.FULL_NAME)){ - ui->dept_2->addItem(entity.manufacturer); + ui->dept_2->addItem(entity.FULL_NAME); } } diff --git a/softwareDirectory/AutoVerScheme/beexamined_deviceitem.ui b/softwareDirectory/AutoVerScheme/beexamined_deviceitem.ui index 0e06ed9..30ff535 100644 --- a/softwareDirectory/AutoVerScheme/beexamined_deviceitem.ui +++ b/softwareDirectory/AutoVerScheme/beexamined_deviceitem.ui @@ -32,7 +32,7 @@ - 0 + 1 @@ -793,7 +793,7 @@ XXX - 2 + 3 false @@ -811,16 +811,39 @@ - + - 核查项目及核查点: + 检定项目及检定点: - + + + + + + + + Qt::Horizontal + + + + 1506 + 20 + + + + + + + + + + + diff --git a/softwareDirectory/AutoVerScheme/create_task.cpp b/softwareDirectory/AutoVerScheme/create_task.cpp index 52a0ba7..c9bdffa 100644 --- a/softwareDirectory/AutoVerScheme/create_task.cpp +++ b/softwareDirectory/AutoVerScheme/create_task.cpp @@ -231,7 +231,11 @@ // 编辑按钮 点击事件 进入详情页面 // ==================================================================================== //DeviceInfoInit(id); + + DisplayButton(); + //查询出所有委托方 + //SetPartPageComBox(); SelectPageData(id); TaskId=id; ui->TitleLable->setText("编辑任务单"); @@ -315,6 +319,7 @@ { if(ListId.count()!=0) { + SelectDataItem.clear(); _IdList=ListId; ui->tableWidgetItem->setRowCount(0); // 调用数据库管理器的函数获取数据 @@ -329,14 +334,14 @@ { rowCount = ui->tableWidgetItem->rowCount(); ui->tableWidgetItem->insertRow(rowCount); - ui->tableWidgetItem->setItem(row, 0, new QTableWidgetItem(QString::number(row+1))); - ui->tableWidgetItem->setItem(row, 1, new QTableWidgetItem(result[0].equipment_name)); - ui->tableWidgetItem->setItem(row, 2, new QTableWidgetItem(result[0].model)); - ui->tableWidgetItem->setItem(row, 3, new QTableWidgetItem(result[0].help_instruction)); - ui->tableWidgetItem->setItem(row, 4, new QTableWidgetItem(result[0].manufacture_no)); - ui->tableWidgetItem->setItem(row, 5, new QTableWidgetItem(result[0].manufacturer)); - ui->tableWidgetItem->setItem(row, 6, new QTableWidgetItem("点击编辑")); + ui->tableWidgetItem->setItem(row, 1, new QTableWidgetItem(QString::number(row+1))); + ui->tableWidgetItem->setItem(row, 2, new QTableWidgetItem(result[0].equipment_name)); + ui->tableWidgetItem->setItem(row, 3, new QTableWidgetItem(result[0].model)); + ui->tableWidgetItem->setItem(row, 4, new QTableWidgetItem(result[0].help_instruction)); + ui->tableWidgetItem->setItem(row, 5, new QTableWidgetItem(result[0].manufacture_no)); + ui->tableWidgetItem->setItem(row, 6, new QTableWidgetItem(result[0].manufacturer)); ui->tableWidgetItem->setItem(row, 7, new QTableWidgetItem("点击编辑")); + ui->tableWidgetItem->setItem(row, 8, new QTableWidgetItem("点击编辑")); row++; } @@ -353,36 +358,78 @@ // 保存任务单按钮 先新增任务单 后新增任务单设备 // ==================================================================================== bool IsSUCC=false; - //获取选中的委托人ID - QString CustomerID=""; - if(_model->rowCount()>0){ - QModelIndex currentIndex = _model->index(ui->customer_name->currentIndex(),0); - CustomerID=currentIndex.data().toString(); } + //获取检定人ID QString person_id=dbManager.ConvertStaffInfo("用户ID目前固定").id; + //根据用户查出部门ID + QString DeptId=dbManager.ConvertStaffInfo("函数内默认添加").dept_id; + if(State=="Update") { if(TaskId=="")return; - InsertTask insertTask; - insertTask.id=TaskId; + InsertTask insertTask=dbManager.SelectTaskSingle(TaskId); insertTask.order_no=ui->LineEditNumber->text(); - insertTask.customer_name=ui->customer_name->currentText(); insertTask.require_over_time=ui->require_over_time->text(); insertTask.deliverer=ui->deliverer->text(); insertTask.deliverer_tel=ui->deliverer_tel->text(); insertTask.undertaker_name=ui->undertaker_name->text(); insertTask.undertake_time=ui->undertake_time->text(); - - if(ui->is_urgent->currentText()=="是") - { - insertTask.is_urgent=true; - }else{insertTask.is_urgent=false;} insertTask.receive_illustrate=ui->receive_illustrate->text(); - insertTask.customer_id=CustomerID; - IsSUCC=dbManager.UpdateTask(insertTask); - //设备更新 编辑设备待写 + IsSUCC=dbManager.UpdateTask(insertTask); + //设备更新 编辑设备待写 + //1、先删除之前的设备 + dbManager.DeleteTaskSameDevice(TaskId); + dbManager.DeleteTaskInfoRecordDevice(TaskId); + qint64 id = dbManager.generateId(); + //2、将新的设置重新增加到这两张表 + int count=0; + if(SelectDataItem.count()!=0 && _IdList.count()!=0){ + //InsertOrderSampleRelation + foreach(TestedCatDevice DeviceInfo,SelectDataItem) + { + //样品表 + OrderSampleRelation orderSampleRelation; + id = dbManager.generateId(); + orderSampleRelation.id=QString::number(id); + orderSampleRelation.order_id=TaskId; + orderSampleRelation.sample_id=_IdList[count]; + orderSampleRelation.sample_name=DeviceInfo.equipment_name; + orderSampleRelation.sample_model=DeviceInfo.model; + orderSampleRelation.measure_complete_time=QDateTime::currentDateTime(); + IsSUCC=dbManager.InsertOrderSampleRelation(orderSampleRelation); + + //每条设备对应一个信息表数据 + //增加biz_business_lab_executive_info 总信息表 + biz_business_lab_executive_info entity; + entity.id=QString::number(dbManager.generateId()); + entity.order_id=TaskId; + entity.sample_id=_IdList[count]; + entity.create_user_id="函数内默认添加"; + entity.measure_dept_id=DeptId; // + entity.measure_person_id=person_id; + IsSUCC=dbManager.InsertTaskInfoRecord(entity); + + if(!IsSUCC){ShowMessageBox("提示",QString("设备名称为: 1% 添加失败").arg(DeviceInfo.equipment_name));} + count++; + } + }else{ + + biz_business_lab_executive_info entity; + entity.id=QString::number(dbManager.generateId()); + entity.order_id=TaskId; + entity.sample_id=""; + entity.create_user_id="函数内默认添加"; + entity.measure_dept_id=DeptId; // + entity.measure_person_id=person_id; + IsSUCC=dbManager.InsertTaskInfoRecord(entity); + } }else{ + //获取选中的委托人ID + QString CustomerID=""; + if(_model->rowCount()>0){ + QModelIndex currentIndex = _model->index(ui->customer_name->currentIndex(),0); + CustomerID=currentIndex.data().toString(); } //新增任务单 qint64 id = dbManager.generateId(); InsertTask insertTask; @@ -403,15 +450,12 @@ insertTask.receive_illustrate=ui->receive_illustrate->text(); insertTask.customer_id=CustomerID; IsSUCC=dbManager.InsertTaskBasic(insertTask); + //新增任务单设备 + QString NewTaskId=dbManager.getCreateTaskListNew()[0].id; if(IsSUCC) { - //根据用户查出部门ID - QString DeptId=dbManager.ConvertStaffInfo("函数内默认添加").dept_id; - - //新增任务单设备 - QString NewTaskId=dbManager.getCreateTaskListNew()[0].id; int count=0; if(SelectDataItem.count()!=0 && _IdList.count()!=0){ //InsertOrderSampleRelation diff --git a/softwareDirectory/AutoVerScheme/create_task.ui b/softwareDirectory/AutoVerScheme/create_task.ui index 4f6f542..46e2f82 100644 --- a/softwareDirectory/AutoVerScheme/create_task.ui +++ b/softwareDirectory/AutoVerScheme/create_task.ui @@ -38,7 +38,7 @@ - 0 + 1 diff --git a/softwareDirectory/AutoVerScheme/datasyncview.cpp b/softwareDirectory/AutoVerScheme/datasyncview.cpp index 74cd41d..fbf4508 100644 --- a/softwareDirectory/AutoVerScheme/datasyncview.cpp +++ b/softwareDirectory/AutoVerScheme/datasyncview.cpp @@ -1,5 +1,10 @@ #include "datasyncview.h" #include "ui_datasyncview.h" +#include "synctask.h" +#include "databaseconnection.h" +#include "mainsysdatabaseconnection.h" + + DataSyncView::DataSyncView(QWidget *parent) : QWidget(parent), @@ -38,7 +43,18 @@ QStringList headers; headers << "序号" << "同步时间" << "是否同步成功" << "备注" ; ui->tableWidget->setHorizontalHeaderLabels(headers); +} +void DataSyncView::on_DownloadDataButton_clicked() +{ + //从主系统下载 - - +} +void DataSyncView::syncTable() +{ + //连接两个数据库 + bool IsOpen=false; + DatabaseConnection *Conn=DatabaseConnection::getInstance(); + IsOpen=Conn->open(); + //MainSysDatabaseConnection *MainConn=MainSysDatabaseConnection::getInstance(); + //IsOpen=MainConn->open(); } diff --git a/softwareDirectory/AutoVerScheme/datasyncview.h b/softwareDirectory/AutoVerScheme/datasyncview.h index 9a73de9..174480e 100644 --- a/softwareDirectory/AutoVerScheme/datasyncview.h +++ b/softwareDirectory/AutoVerScheme/datasyncview.h @@ -17,6 +17,9 @@ private slots: void initForm(); //初始化界面数据 + void on_DownloadDataButton_clicked(); + //异步更新 + void syncTable(); private: Ui::DataSyncView *ui; }; diff --git a/softwareDirectory/AutoVerScheme/AutoVerScheme.pro b/softwareDirectory/AutoVerScheme/AutoVerScheme.pro index 145840b..bf70fab 100644 --- a/softwareDirectory/AutoVerScheme/AutoVerScheme.pro +++ b/softwareDirectory/AutoVerScheme/AutoVerScheme.pro @@ -48,12 +48,14 @@ inspectdataitem.cpp \ loginwindow.cpp \ main.cpp \ + mainsysdatabaseconnection.cpp \ mainwindow.cpp \ my_task.cpp \ newcheckmethod.cpp \ newverifymethod.cpp \ rulefileitem.cpp \ standard_deviceitem.cpp \ + synctask.cpp \ testdataitem.cpp \ testview.cpp \ verifydevice.cpp \ @@ -95,12 +97,14 @@ infomanageview.h \ inspectdataitem.h \ loginwindow.h \ + mainsysdatabaseconnection.h \ mainwindow.h \ my_task.h \ newcheckmethod.h \ newverifymethod.h \ rulefileitem.h \ standard_deviceitem.h \ + synctask.h \ testdataitem.h \ testview.h \ verifydevice.h \ diff --git a/softwareDirectory/AutoVerScheme/basecommonapi.cpp b/softwareDirectory/AutoVerScheme/basecommonapi.cpp index b8846b2..572246e 100644 --- a/softwareDirectory/AutoVerScheme/basecommonapi.cpp +++ b/softwareDirectory/AutoVerScheme/basecommonapi.cpp @@ -511,6 +511,37 @@ return isSuccess; } +//单独查询任务单表 +//更新 任务单 +InsertTask BaseCommonApi::SelectTaskSingle(QString order_id) +{ + InsertTask result; + QSqlQuery query; + query.prepare("SELECT * From biz_business_order_info WHERE id=:order_id"); + // 将参数绑定到占位符 + query.bindValue(":order_id", order_id); + if (query.exec()) { + while (query.next()) { + result.id = query.value("id").toString(); + result.customer_name = query.value("customer_name").toString(); + result.require_over_time = query.value("require_over_time").toString(); + result.deliverer = query.value("deliverer").toString(); + result.deliverer_tel = query.value("deliverer_tel").toString(); + result.undertaker_name = query.value("undertaker_name").toString(); + result.undertake_time = query.value("undertake_time").toString(); + bool is_urgent=false; + if(query.value("is_urgent").toString()=="是"){is_urgent=true;}else{is_urgent=false;}; + result.is_urgent = is_urgent; + result.receive_illustrate = query.value("receive_illustrate").toString(); + result.customer_id = query.value("customer_id").toString(); + + } + } else { + qDebug() << "Query execution failed: " << query.lastError().text(); + } + + return result; +} //删除任务单 bool BaseCommonApi::DeleteTask(QString id) { @@ -533,6 +564,38 @@ return allSuccessful; } +//删除任务单信息记录表同一任务ID的设备 +bool BaseCommonApi::DeleteTaskInfoRecordDevice(QString order_id) +{ + QSqlQuery query; + + //删除任务单样品表数据 + query.prepare("DELETE FROM biz_business_lab_executive_info WHERE order_id = :id"); + query.bindValue(":id", order_id); + + if (!query.exec()) { + qDebug() << "删除失败 " << query.lastError().text(); + return false; + } + + return true; +} +//删除任务详情表同一任务ID的设备 +bool BaseCommonApi::DeleteTaskSameDevice(QString order_id) +{ + QSqlQuery query; + + //删除任务单样品表数据 + query.prepare("DELETE FROM biz_business_order_sample_relation WHERE order_id = :id"); + query.bindValue(":id", order_id); + + if (!query.exec()) { + qDebug() << "删除失败 " << query.lastError().text(); + return false; + } + + return true; +} //删除任务单内设备 bool BaseCommonApi::DeleteTaskDevice(QString id) { @@ -821,8 +884,8 @@ */ //根据被检设备ID获取当前设备的 检定项目及检定点 -/* -QMap> BaseCommonApi::Search_CalibrationTable(QString DeiverId,QMap *HeadList) + +QMap> BaseCommonApi::Search_CalibrationTableClass(QString DeiverId,QMap *HeadList) { QMap> DataList; @@ -834,11 +897,11 @@ case 1: //CliTable[0].id //1717086652508487681 - DataList=BaseCommonApi::getVerMultiCal(CliTable[0].id,HeadList); + DataList=BaseCommonApi::getVerMultiCalClass(CliTable[0].id,HeadList); } return DataList; -}*/ +} //根据被检设备ID获取当前设备的 检定项目及检定点 QList BaseCommonApi::Search_CalibrationTable(QString DeiverId,QStringList *HeadList) { @@ -951,8 +1014,7 @@ return resultData; } //被检设备管理-检定项目及检定点-多功能校准源 -/* -QMap> BaseCommonApi::getVerMultiCal(QString itemId,QMap *headList) +QMap> BaseCommonApi::getVerMultiCalClass(QString itemId,QMap *headList) { QMap> DataMapList; QList resultData; @@ -998,7 +1060,7 @@ DataMapList= GetDataReturnItemList(resultData,DataMapList,headList); return DataMapList; } -*/ + QMap> BaseCommonApi::GetDataReturnItemList(QList ResultData,QMap> DataMapList,QMap *HeadMapList) { @@ -1052,7 +1114,7 @@ Data.append(row[9]); //分辨力 DCVList.append(Data); } - else if(ResultData[2].first()=="ACV") + else if(row[2]=="ACV") { QString VerificationItem=NULL; if(isFirst[1]) @@ -1086,7 +1148,7 @@ } Data.append(row[9]); //分辨力 ACVList.append(Data); - } else if(ResultData[2].first()=="DCI") + } else if(row[2]=="DCI") { QString VerificationItem=NULL; if(isFirst[2]) @@ -1122,7 +1184,7 @@ Data.append(row[9]); //分辨力 DCIList.append(Data); - } else if(ResultData[2].first()=="ACI") + } else if(row[2]=="ACI") { QString VerificationItem=NULL; if(isFirst[3]) @@ -1157,7 +1219,7 @@ } Data.append(row[9]); //分辨力 ACIList.append(Data); - } else if(ResultData[2].first()=="R") + } else if(row[2]=="R") { QString VerificationItem=NULL; if(isFirst[4]) diff --git a/softwareDirectory/AutoVerScheme/basecommonapi.h b/softwareDirectory/AutoVerScheme/basecommonapi.h index da7ce3c..098944a 100644 --- a/softwareDirectory/AutoVerScheme/basecommonapi.h +++ b/softwareDirectory/AutoVerScheme/basecommonapi.h @@ -920,7 +920,7 @@ //判断检定装置表并查询 参数设备id static QList Search_CalibrationTable(QString DeiverId,QStringList *HeadList); - //static QMap> Search_CalibrationTable(QString DeiverId,QMap *HeadList); + static QMap> Search_CalibrationTableClass(QString DeiverId,QMap *HeadList); //判断核查装置表并查询 参数设备id static QList Search_VerifyTable(QString DeiverId,QStringList *HeadList ); @@ -983,7 +983,7 @@ static JudgeCalibrationTable getJudgeVerifyTable(QString id); //被检设备管理-检定项目及检定点-多功能校准源 static QList getVerMultiCal(QString itemId,QStringList *headList); - //static QMap> getVerMultiCal(QString itemId,QMap *headList); + static QMap> getVerMultiCalClass(QString itemId,QMap *headList); static QMap> GetDataReturnItemList(QList ResultData, QMap> DataMapList, QMap *HeadMapList); @@ -1100,6 +1100,10 @@ static QList getMeasureModifyRecord(QString data_id); //查询最新结果保存记录 static SaveDeviceMeasureInfo getNewResultData(); + + static bool DeleteTaskSameDevice(QString order_id); + static bool DeleteTaskInfoRecordDevice(QString order_id); + static InsertTask SelectTaskSingle(QString order_id); }; diff --git a/softwareDirectory/AutoVerScheme/beexamined_deviceitem.cpp b/softwareDirectory/AutoVerScheme/beexamined_deviceitem.cpp index fef3880..00d746b 100644 --- a/softwareDirectory/AutoVerScheme/beexamined_deviceitem.cpp +++ b/softwareDirectory/AutoVerScheme/beexamined_deviceitem.cpp @@ -46,18 +46,7 @@ << "生产厂家"<<"所在单位" <<"使用部门"<<"计量标识"<<"检定周期"<<"证书有效期"<<"操作"; ui->tableWidget->setHorizontalHeaderLabels(headers); - //详情页面tableWidgetItem设置 - ui->tableWidgetItem->setStyleSheet("QHeaderView::section {" - "border: 1px solid rgba(197, 196, 196, 1);" - "border-left:none;" - "border-top:none;" - "background-color:white;" - "}"); - // ui->tableWidget->setRowCount(10); // 设置10行 - //ui->tableWidgetItem->setColumnCount(14); // 设置11列 - ui->tableWidgetItem->setColumnWidth(0, 80); // 设置第一列的宽度为100像素 - ui->tableWidgetItem->verticalHeader()->setParent(nullptr); //隐藏行头 } void BeExamined_DeviceItem::ShowMessageBox(QString title,QString value) { @@ -195,53 +184,116 @@ // 初始化检定项目及核查点 // ==================================================================================== - //获取核查点tablewight的数据 - QStringList headlist; - - QList Data=dbManager.Search_CalibrationTable(id,&headlist); - //QList Data; - //tableWidgetItem - ui->tableWidgetItem->setRowCount(0); - ui->tableWidgetItem->setColumnCount(headlist.count()); - ui->tableWidgetItem->setHorizontalHeaderLabels(headlist); - //循环数据 - int rowCount=0; - int row=0; - - for (const QStringList& item : Data) - { - //获取行号 并进行添加行 - rowCount = ui->tableWidgetItem->rowCount(); - ui->tableWidgetItem->insertRow(rowCount); - //添加 序号 - ui->tableWidgetItem->setItem(row, 0, new QTableWidgetItem(QString::number(row+1))); - //循环读取值 headlist,count是列的数量 - for(int i=1;itableWidgetItem->setItem(row, i, new QTableWidgetItem(item[i])); - } - - row++; - + //重写核查点显示 + //每个检定项目列头 + QMap headListItem; //例 + //每个检定项目数据 + QMap> dataListItem; //例 + dataListItem=dbManager.Search_CalibrationTableClass(id,&headListItem); + QHBoxLayout *layout = ui->HeadListLayout; + QStackedWidget *stackedWidget = ui->stackedWidgetData; + //数据清空 + // 清空QStackedWidget中的所有页 + while (stackedWidget->count() > 0) { + QWidget *widget = stackedWidget->widget(0); // 获取第一个子部件 + stackedWidget->removeWidget(widget); // 从堆叠部件中移除 + delete widget; // 删除部件,防止内存泄漏 } + // 清空QHBoxLayout中的所有QPushButton + while (QLayoutItem *item = layout->takeAt(0)) { + QWidget *widget = item->widget(); + if (widget && qobject_cast(widget)) { + // 移除并删除QPushButton + delete widget; + } + } + int index = 0; + for (const auto &item : headListItem) { + QTableWidget *tableWidget = new QTableWidget(this); + tableWidget->setColumnCount(item.count()); + tableWidget->setHorizontalHeaderLabels(item); + //设置tableWidget样式表 + tableWidget->verticalHeader()->setParent(nullptr); //隐藏行头 + tableWidget->setStyleSheet("QHeaderView::section {" + "border: 1px solid rgba(197, 196, 196, 1);" + "border-left:none;" + "border-top:none;" + "background-color:white;" + "}"); + + // ======================================================================================== + // 数据循环显示 + // ==================================================================================== + int rowCount=0; + const auto &dataRes = dataListItem.value(headListItem.keys()[index]); + //tableWidget->setRowCount(data.count()); + + for (int i = 0; i < dataRes.count(); ++i) { + //获取行号 并进行添加行 + rowCount = tableWidget->rowCount(); + tableWidget->insertRow(rowCount); + tableWidget->setItem(i, 0, new QTableWidgetItem(QString::number(i+1))); + for(int j=1;jsetItem(i, j, new QTableWidgetItem(dataRes[i][j])); + } + + } + + stackedWidget->insertWidget(index,tableWidget); + // ======================================================================================== + // 按钮设置显示 + // ==================================================================================== + QPushButton *button = new QPushButton(headListItem.keys()[index], 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 {" + "background-color: blue;" // 选中时变为蓝色背景 + "}"); + + layout->addWidget(button); + connect(button, &QPushButton::clicked, stackedWidget, [stackedWidget, index]() { + stackedWidget->setCurrentIndex(index); + }); + + ++index; + } + //默认启动第一个页面 + stackedWidget->setCurrentIndex(0); + } void BeExamined_DeviceItem::SetHomePaheCombox(TestedDevice entity) { if(comboBoxContainsItem(ui->name,entity.equipment_name)){ - ui->name->addItem(entity.model); + ui->name->addItem(entity.equipment_name); } if(comboBoxContainsItem(ui->mode,entity.model)){ - ui->mode->addItem(entity.equipment_name); + ui->mode->addItem(entity.model); } if(comboBoxContainsItem(ui->manufacturer_2,entity.manufacturer)){ ui->manufacturer_2->addItem(entity.manufacturer); } if(comboBoxContainsItem(ui->Buildinguser,entity.customer_name)){ - ui->Buildinguser->addItem(entity.manufacturer); + ui->Buildinguser->addItem(entity.customer_name); } if(comboBoxContainsItem(ui->dept_2,entity.FULL_NAME)){ - ui->dept_2->addItem(entity.manufacturer); + ui->dept_2->addItem(entity.FULL_NAME); } } diff --git a/softwareDirectory/AutoVerScheme/beexamined_deviceitem.ui b/softwareDirectory/AutoVerScheme/beexamined_deviceitem.ui index 0e06ed9..30ff535 100644 --- a/softwareDirectory/AutoVerScheme/beexamined_deviceitem.ui +++ b/softwareDirectory/AutoVerScheme/beexamined_deviceitem.ui @@ -32,7 +32,7 @@ - 0 + 1 @@ -793,7 +793,7 @@ XXX - 2 + 3 false @@ -811,16 +811,39 @@ - + - 核查项目及核查点: + 检定项目及检定点: - + + + + + + + + Qt::Horizontal + + + + 1506 + 20 + + + + + + + + + + + diff --git a/softwareDirectory/AutoVerScheme/create_task.cpp b/softwareDirectory/AutoVerScheme/create_task.cpp index 52a0ba7..c9bdffa 100644 --- a/softwareDirectory/AutoVerScheme/create_task.cpp +++ b/softwareDirectory/AutoVerScheme/create_task.cpp @@ -231,7 +231,11 @@ // 编辑按钮 点击事件 进入详情页面 // ==================================================================================== //DeviceInfoInit(id); + + DisplayButton(); + //查询出所有委托方 + //SetPartPageComBox(); SelectPageData(id); TaskId=id; ui->TitleLable->setText("编辑任务单"); @@ -315,6 +319,7 @@ { if(ListId.count()!=0) { + SelectDataItem.clear(); _IdList=ListId; ui->tableWidgetItem->setRowCount(0); // 调用数据库管理器的函数获取数据 @@ -329,14 +334,14 @@ { rowCount = ui->tableWidgetItem->rowCount(); ui->tableWidgetItem->insertRow(rowCount); - ui->tableWidgetItem->setItem(row, 0, new QTableWidgetItem(QString::number(row+1))); - ui->tableWidgetItem->setItem(row, 1, new QTableWidgetItem(result[0].equipment_name)); - ui->tableWidgetItem->setItem(row, 2, new QTableWidgetItem(result[0].model)); - ui->tableWidgetItem->setItem(row, 3, new QTableWidgetItem(result[0].help_instruction)); - ui->tableWidgetItem->setItem(row, 4, new QTableWidgetItem(result[0].manufacture_no)); - ui->tableWidgetItem->setItem(row, 5, new QTableWidgetItem(result[0].manufacturer)); - ui->tableWidgetItem->setItem(row, 6, new QTableWidgetItem("点击编辑")); + ui->tableWidgetItem->setItem(row, 1, new QTableWidgetItem(QString::number(row+1))); + ui->tableWidgetItem->setItem(row, 2, new QTableWidgetItem(result[0].equipment_name)); + ui->tableWidgetItem->setItem(row, 3, new QTableWidgetItem(result[0].model)); + ui->tableWidgetItem->setItem(row, 4, new QTableWidgetItem(result[0].help_instruction)); + ui->tableWidgetItem->setItem(row, 5, new QTableWidgetItem(result[0].manufacture_no)); + ui->tableWidgetItem->setItem(row, 6, new QTableWidgetItem(result[0].manufacturer)); ui->tableWidgetItem->setItem(row, 7, new QTableWidgetItem("点击编辑")); + ui->tableWidgetItem->setItem(row, 8, new QTableWidgetItem("点击编辑")); row++; } @@ -353,36 +358,78 @@ // 保存任务单按钮 先新增任务单 后新增任务单设备 // ==================================================================================== bool IsSUCC=false; - //获取选中的委托人ID - QString CustomerID=""; - if(_model->rowCount()>0){ - QModelIndex currentIndex = _model->index(ui->customer_name->currentIndex(),0); - CustomerID=currentIndex.data().toString(); } + //获取检定人ID QString person_id=dbManager.ConvertStaffInfo("用户ID目前固定").id; + //根据用户查出部门ID + QString DeptId=dbManager.ConvertStaffInfo("函数内默认添加").dept_id; + if(State=="Update") { if(TaskId=="")return; - InsertTask insertTask; - insertTask.id=TaskId; + InsertTask insertTask=dbManager.SelectTaskSingle(TaskId); insertTask.order_no=ui->LineEditNumber->text(); - insertTask.customer_name=ui->customer_name->currentText(); insertTask.require_over_time=ui->require_over_time->text(); insertTask.deliverer=ui->deliverer->text(); insertTask.deliverer_tel=ui->deliverer_tel->text(); insertTask.undertaker_name=ui->undertaker_name->text(); insertTask.undertake_time=ui->undertake_time->text(); - - if(ui->is_urgent->currentText()=="是") - { - insertTask.is_urgent=true; - }else{insertTask.is_urgent=false;} insertTask.receive_illustrate=ui->receive_illustrate->text(); - insertTask.customer_id=CustomerID; - IsSUCC=dbManager.UpdateTask(insertTask); - //设备更新 编辑设备待写 + IsSUCC=dbManager.UpdateTask(insertTask); + //设备更新 编辑设备待写 + //1、先删除之前的设备 + dbManager.DeleteTaskSameDevice(TaskId); + dbManager.DeleteTaskInfoRecordDevice(TaskId); + qint64 id = dbManager.generateId(); + //2、将新的设置重新增加到这两张表 + int count=0; + if(SelectDataItem.count()!=0 && _IdList.count()!=0){ + //InsertOrderSampleRelation + foreach(TestedCatDevice DeviceInfo,SelectDataItem) + { + //样品表 + OrderSampleRelation orderSampleRelation; + id = dbManager.generateId(); + orderSampleRelation.id=QString::number(id); + orderSampleRelation.order_id=TaskId; + orderSampleRelation.sample_id=_IdList[count]; + orderSampleRelation.sample_name=DeviceInfo.equipment_name; + orderSampleRelation.sample_model=DeviceInfo.model; + orderSampleRelation.measure_complete_time=QDateTime::currentDateTime(); + IsSUCC=dbManager.InsertOrderSampleRelation(orderSampleRelation); + + //每条设备对应一个信息表数据 + //增加biz_business_lab_executive_info 总信息表 + biz_business_lab_executive_info entity; + entity.id=QString::number(dbManager.generateId()); + entity.order_id=TaskId; + entity.sample_id=_IdList[count]; + entity.create_user_id="函数内默认添加"; + entity.measure_dept_id=DeptId; // + entity.measure_person_id=person_id; + IsSUCC=dbManager.InsertTaskInfoRecord(entity); + + if(!IsSUCC){ShowMessageBox("提示",QString("设备名称为: 1% 添加失败").arg(DeviceInfo.equipment_name));} + count++; + } + }else{ + + biz_business_lab_executive_info entity; + entity.id=QString::number(dbManager.generateId()); + entity.order_id=TaskId; + entity.sample_id=""; + entity.create_user_id="函数内默认添加"; + entity.measure_dept_id=DeptId; // + entity.measure_person_id=person_id; + IsSUCC=dbManager.InsertTaskInfoRecord(entity); + } }else{ + //获取选中的委托人ID + QString CustomerID=""; + if(_model->rowCount()>0){ + QModelIndex currentIndex = _model->index(ui->customer_name->currentIndex(),0); + CustomerID=currentIndex.data().toString(); } //新增任务单 qint64 id = dbManager.generateId(); InsertTask insertTask; @@ -403,15 +450,12 @@ insertTask.receive_illustrate=ui->receive_illustrate->text(); insertTask.customer_id=CustomerID; IsSUCC=dbManager.InsertTaskBasic(insertTask); + //新增任务单设备 + QString NewTaskId=dbManager.getCreateTaskListNew()[0].id; if(IsSUCC) { - //根据用户查出部门ID - QString DeptId=dbManager.ConvertStaffInfo("函数内默认添加").dept_id; - - //新增任务单设备 - QString NewTaskId=dbManager.getCreateTaskListNew()[0].id; int count=0; if(SelectDataItem.count()!=0 && _IdList.count()!=0){ //InsertOrderSampleRelation diff --git a/softwareDirectory/AutoVerScheme/create_task.ui b/softwareDirectory/AutoVerScheme/create_task.ui index 4f6f542..46e2f82 100644 --- a/softwareDirectory/AutoVerScheme/create_task.ui +++ b/softwareDirectory/AutoVerScheme/create_task.ui @@ -38,7 +38,7 @@ - 0 + 1 diff --git a/softwareDirectory/AutoVerScheme/datasyncview.cpp b/softwareDirectory/AutoVerScheme/datasyncview.cpp index 74cd41d..fbf4508 100644 --- a/softwareDirectory/AutoVerScheme/datasyncview.cpp +++ b/softwareDirectory/AutoVerScheme/datasyncview.cpp @@ -1,5 +1,10 @@ #include "datasyncview.h" #include "ui_datasyncview.h" +#include "synctask.h" +#include "databaseconnection.h" +#include "mainsysdatabaseconnection.h" + + DataSyncView::DataSyncView(QWidget *parent) : QWidget(parent), @@ -38,7 +43,18 @@ QStringList headers; headers << "序号" << "同步时间" << "是否同步成功" << "备注" ; ui->tableWidget->setHorizontalHeaderLabels(headers); +} +void DataSyncView::on_DownloadDataButton_clicked() +{ + //从主系统下载 - - +} +void DataSyncView::syncTable() +{ + //连接两个数据库 + bool IsOpen=false; + DatabaseConnection *Conn=DatabaseConnection::getInstance(); + IsOpen=Conn->open(); + //MainSysDatabaseConnection *MainConn=MainSysDatabaseConnection::getInstance(); + //IsOpen=MainConn->open(); } diff --git a/softwareDirectory/AutoVerScheme/datasyncview.h b/softwareDirectory/AutoVerScheme/datasyncview.h index 9a73de9..174480e 100644 --- a/softwareDirectory/AutoVerScheme/datasyncview.h +++ b/softwareDirectory/AutoVerScheme/datasyncview.h @@ -17,6 +17,9 @@ private slots: void initForm(); //初始化界面数据 + void on_DownloadDataButton_clicked(); + //异步更新 + void syncTable(); private: Ui::DataSyncView *ui; }; diff --git a/softwareDirectory/AutoVerScheme/datasyncview.ui b/softwareDirectory/AutoVerScheme/datasyncview.ui index 1000b22..53c379c 100644 --- a/softwareDirectory/AutoVerScheme/datasyncview.ui +++ b/softwareDirectory/AutoVerScheme/datasyncview.ui @@ -131,7 +131,7 @@ - + background-color:#334582; font: bold 18px Arial, sans-serif; diff --git a/softwareDirectory/AutoVerScheme/AutoVerScheme.pro b/softwareDirectory/AutoVerScheme/AutoVerScheme.pro index 145840b..bf70fab 100644 --- a/softwareDirectory/AutoVerScheme/AutoVerScheme.pro +++ b/softwareDirectory/AutoVerScheme/AutoVerScheme.pro @@ -48,12 +48,14 @@ inspectdataitem.cpp \ loginwindow.cpp \ main.cpp \ + mainsysdatabaseconnection.cpp \ mainwindow.cpp \ my_task.cpp \ newcheckmethod.cpp \ newverifymethod.cpp \ rulefileitem.cpp \ standard_deviceitem.cpp \ + synctask.cpp \ testdataitem.cpp \ testview.cpp \ verifydevice.cpp \ @@ -95,12 +97,14 @@ infomanageview.h \ inspectdataitem.h \ loginwindow.h \ + mainsysdatabaseconnection.h \ mainwindow.h \ my_task.h \ newcheckmethod.h \ newverifymethod.h \ rulefileitem.h \ standard_deviceitem.h \ + synctask.h \ testdataitem.h \ testview.h \ verifydevice.h \ diff --git a/softwareDirectory/AutoVerScheme/basecommonapi.cpp b/softwareDirectory/AutoVerScheme/basecommonapi.cpp index b8846b2..572246e 100644 --- a/softwareDirectory/AutoVerScheme/basecommonapi.cpp +++ b/softwareDirectory/AutoVerScheme/basecommonapi.cpp @@ -511,6 +511,37 @@ return isSuccess; } +//单独查询任务单表 +//更新 任务单 +InsertTask BaseCommonApi::SelectTaskSingle(QString order_id) +{ + InsertTask result; + QSqlQuery query; + query.prepare("SELECT * From biz_business_order_info WHERE id=:order_id"); + // 将参数绑定到占位符 + query.bindValue(":order_id", order_id); + if (query.exec()) { + while (query.next()) { + result.id = query.value("id").toString(); + result.customer_name = query.value("customer_name").toString(); + result.require_over_time = query.value("require_over_time").toString(); + result.deliverer = query.value("deliverer").toString(); + result.deliverer_tel = query.value("deliverer_tel").toString(); + result.undertaker_name = query.value("undertaker_name").toString(); + result.undertake_time = query.value("undertake_time").toString(); + bool is_urgent=false; + if(query.value("is_urgent").toString()=="是"){is_urgent=true;}else{is_urgent=false;}; + result.is_urgent = is_urgent; + result.receive_illustrate = query.value("receive_illustrate").toString(); + result.customer_id = query.value("customer_id").toString(); + + } + } else { + qDebug() << "Query execution failed: " << query.lastError().text(); + } + + return result; +} //删除任务单 bool BaseCommonApi::DeleteTask(QString id) { @@ -533,6 +564,38 @@ return allSuccessful; } +//删除任务单信息记录表同一任务ID的设备 +bool BaseCommonApi::DeleteTaskInfoRecordDevice(QString order_id) +{ + QSqlQuery query; + + //删除任务单样品表数据 + query.prepare("DELETE FROM biz_business_lab_executive_info WHERE order_id = :id"); + query.bindValue(":id", order_id); + + if (!query.exec()) { + qDebug() << "删除失败 " << query.lastError().text(); + return false; + } + + return true; +} +//删除任务详情表同一任务ID的设备 +bool BaseCommonApi::DeleteTaskSameDevice(QString order_id) +{ + QSqlQuery query; + + //删除任务单样品表数据 + query.prepare("DELETE FROM biz_business_order_sample_relation WHERE order_id = :id"); + query.bindValue(":id", order_id); + + if (!query.exec()) { + qDebug() << "删除失败 " << query.lastError().text(); + return false; + } + + return true; +} //删除任务单内设备 bool BaseCommonApi::DeleteTaskDevice(QString id) { @@ -821,8 +884,8 @@ */ //根据被检设备ID获取当前设备的 检定项目及检定点 -/* -QMap> BaseCommonApi::Search_CalibrationTable(QString DeiverId,QMap *HeadList) + +QMap> BaseCommonApi::Search_CalibrationTableClass(QString DeiverId,QMap *HeadList) { QMap> DataList; @@ -834,11 +897,11 @@ case 1: //CliTable[0].id //1717086652508487681 - DataList=BaseCommonApi::getVerMultiCal(CliTable[0].id,HeadList); + DataList=BaseCommonApi::getVerMultiCalClass(CliTable[0].id,HeadList); } return DataList; -}*/ +} //根据被检设备ID获取当前设备的 检定项目及检定点 QList BaseCommonApi::Search_CalibrationTable(QString DeiverId,QStringList *HeadList) { @@ -951,8 +1014,7 @@ return resultData; } //被检设备管理-检定项目及检定点-多功能校准源 -/* -QMap> BaseCommonApi::getVerMultiCal(QString itemId,QMap *headList) +QMap> BaseCommonApi::getVerMultiCalClass(QString itemId,QMap *headList) { QMap> DataMapList; QList resultData; @@ -998,7 +1060,7 @@ DataMapList= GetDataReturnItemList(resultData,DataMapList,headList); return DataMapList; } -*/ + QMap> BaseCommonApi::GetDataReturnItemList(QList ResultData,QMap> DataMapList,QMap *HeadMapList) { @@ -1052,7 +1114,7 @@ Data.append(row[9]); //分辨力 DCVList.append(Data); } - else if(ResultData[2].first()=="ACV") + else if(row[2]=="ACV") { QString VerificationItem=NULL; if(isFirst[1]) @@ -1086,7 +1148,7 @@ } Data.append(row[9]); //分辨力 ACVList.append(Data); - } else if(ResultData[2].first()=="DCI") + } else if(row[2]=="DCI") { QString VerificationItem=NULL; if(isFirst[2]) @@ -1122,7 +1184,7 @@ Data.append(row[9]); //分辨力 DCIList.append(Data); - } else if(ResultData[2].first()=="ACI") + } else if(row[2]=="ACI") { QString VerificationItem=NULL; if(isFirst[3]) @@ -1157,7 +1219,7 @@ } Data.append(row[9]); //分辨力 ACIList.append(Data); - } else if(ResultData[2].first()=="R") + } else if(row[2]=="R") { QString VerificationItem=NULL; if(isFirst[4]) diff --git a/softwareDirectory/AutoVerScheme/basecommonapi.h b/softwareDirectory/AutoVerScheme/basecommonapi.h index da7ce3c..098944a 100644 --- a/softwareDirectory/AutoVerScheme/basecommonapi.h +++ b/softwareDirectory/AutoVerScheme/basecommonapi.h @@ -920,7 +920,7 @@ //判断检定装置表并查询 参数设备id static QList Search_CalibrationTable(QString DeiverId,QStringList *HeadList); - //static QMap> Search_CalibrationTable(QString DeiverId,QMap *HeadList); + static QMap> Search_CalibrationTableClass(QString DeiverId,QMap *HeadList); //判断核查装置表并查询 参数设备id static QList Search_VerifyTable(QString DeiverId,QStringList *HeadList ); @@ -983,7 +983,7 @@ static JudgeCalibrationTable getJudgeVerifyTable(QString id); //被检设备管理-检定项目及检定点-多功能校准源 static QList getVerMultiCal(QString itemId,QStringList *headList); - //static QMap> getVerMultiCal(QString itemId,QMap *headList); + static QMap> getVerMultiCalClass(QString itemId,QMap *headList); static QMap> GetDataReturnItemList(QList ResultData, QMap> DataMapList, QMap *HeadMapList); @@ -1100,6 +1100,10 @@ static QList getMeasureModifyRecord(QString data_id); //查询最新结果保存记录 static SaveDeviceMeasureInfo getNewResultData(); + + static bool DeleteTaskSameDevice(QString order_id); + static bool DeleteTaskInfoRecordDevice(QString order_id); + static InsertTask SelectTaskSingle(QString order_id); }; diff --git a/softwareDirectory/AutoVerScheme/beexamined_deviceitem.cpp b/softwareDirectory/AutoVerScheme/beexamined_deviceitem.cpp index fef3880..00d746b 100644 --- a/softwareDirectory/AutoVerScheme/beexamined_deviceitem.cpp +++ b/softwareDirectory/AutoVerScheme/beexamined_deviceitem.cpp @@ -46,18 +46,7 @@ << "生产厂家"<<"所在单位" <<"使用部门"<<"计量标识"<<"检定周期"<<"证书有效期"<<"操作"; ui->tableWidget->setHorizontalHeaderLabels(headers); - //详情页面tableWidgetItem设置 - ui->tableWidgetItem->setStyleSheet("QHeaderView::section {" - "border: 1px solid rgba(197, 196, 196, 1);" - "border-left:none;" - "border-top:none;" - "background-color:white;" - "}"); - // ui->tableWidget->setRowCount(10); // 设置10行 - //ui->tableWidgetItem->setColumnCount(14); // 设置11列 - ui->tableWidgetItem->setColumnWidth(0, 80); // 设置第一列的宽度为100像素 - ui->tableWidgetItem->verticalHeader()->setParent(nullptr); //隐藏行头 } void BeExamined_DeviceItem::ShowMessageBox(QString title,QString value) { @@ -195,53 +184,116 @@ // 初始化检定项目及核查点 // ==================================================================================== - //获取核查点tablewight的数据 - QStringList headlist; - - QList Data=dbManager.Search_CalibrationTable(id,&headlist); - //QList Data; - //tableWidgetItem - ui->tableWidgetItem->setRowCount(0); - ui->tableWidgetItem->setColumnCount(headlist.count()); - ui->tableWidgetItem->setHorizontalHeaderLabels(headlist); - //循环数据 - int rowCount=0; - int row=0; - - for (const QStringList& item : Data) - { - //获取行号 并进行添加行 - rowCount = ui->tableWidgetItem->rowCount(); - ui->tableWidgetItem->insertRow(rowCount); - //添加 序号 - ui->tableWidgetItem->setItem(row, 0, new QTableWidgetItem(QString::number(row+1))); - //循环读取值 headlist,count是列的数量 - for(int i=1;itableWidgetItem->setItem(row, i, new QTableWidgetItem(item[i])); - } - - row++; - + //重写核查点显示 + //每个检定项目列头 + QMap headListItem; //例 + //每个检定项目数据 + QMap> dataListItem; //例 + dataListItem=dbManager.Search_CalibrationTableClass(id,&headListItem); + QHBoxLayout *layout = ui->HeadListLayout; + QStackedWidget *stackedWidget = ui->stackedWidgetData; + //数据清空 + // 清空QStackedWidget中的所有页 + while (stackedWidget->count() > 0) { + QWidget *widget = stackedWidget->widget(0); // 获取第一个子部件 + stackedWidget->removeWidget(widget); // 从堆叠部件中移除 + delete widget; // 删除部件,防止内存泄漏 } + // 清空QHBoxLayout中的所有QPushButton + while (QLayoutItem *item = layout->takeAt(0)) { + QWidget *widget = item->widget(); + if (widget && qobject_cast(widget)) { + // 移除并删除QPushButton + delete widget; + } + } + int index = 0; + for (const auto &item : headListItem) { + QTableWidget *tableWidget = new QTableWidget(this); + tableWidget->setColumnCount(item.count()); + tableWidget->setHorizontalHeaderLabels(item); + //设置tableWidget样式表 + tableWidget->verticalHeader()->setParent(nullptr); //隐藏行头 + tableWidget->setStyleSheet("QHeaderView::section {" + "border: 1px solid rgba(197, 196, 196, 1);" + "border-left:none;" + "border-top:none;" + "background-color:white;" + "}"); + + // ======================================================================================== + // 数据循环显示 + // ==================================================================================== + int rowCount=0; + const auto &dataRes = dataListItem.value(headListItem.keys()[index]); + //tableWidget->setRowCount(data.count()); + + for (int i = 0; i < dataRes.count(); ++i) { + //获取行号 并进行添加行 + rowCount = tableWidget->rowCount(); + tableWidget->insertRow(rowCount); + tableWidget->setItem(i, 0, new QTableWidgetItem(QString::number(i+1))); + for(int j=1;jsetItem(i, j, new QTableWidgetItem(dataRes[i][j])); + } + + } + + stackedWidget->insertWidget(index,tableWidget); + // ======================================================================================== + // 按钮设置显示 + // ==================================================================================== + QPushButton *button = new QPushButton(headListItem.keys()[index], 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 {" + "background-color: blue;" // 选中时变为蓝色背景 + "}"); + + layout->addWidget(button); + connect(button, &QPushButton::clicked, stackedWidget, [stackedWidget, index]() { + stackedWidget->setCurrentIndex(index); + }); + + ++index; + } + //默认启动第一个页面 + stackedWidget->setCurrentIndex(0); + } void BeExamined_DeviceItem::SetHomePaheCombox(TestedDevice entity) { if(comboBoxContainsItem(ui->name,entity.equipment_name)){ - ui->name->addItem(entity.model); + ui->name->addItem(entity.equipment_name); } if(comboBoxContainsItem(ui->mode,entity.model)){ - ui->mode->addItem(entity.equipment_name); + ui->mode->addItem(entity.model); } if(comboBoxContainsItem(ui->manufacturer_2,entity.manufacturer)){ ui->manufacturer_2->addItem(entity.manufacturer); } if(comboBoxContainsItem(ui->Buildinguser,entity.customer_name)){ - ui->Buildinguser->addItem(entity.manufacturer); + ui->Buildinguser->addItem(entity.customer_name); } if(comboBoxContainsItem(ui->dept_2,entity.FULL_NAME)){ - ui->dept_2->addItem(entity.manufacturer); + ui->dept_2->addItem(entity.FULL_NAME); } } diff --git a/softwareDirectory/AutoVerScheme/beexamined_deviceitem.ui b/softwareDirectory/AutoVerScheme/beexamined_deviceitem.ui index 0e06ed9..30ff535 100644 --- a/softwareDirectory/AutoVerScheme/beexamined_deviceitem.ui +++ b/softwareDirectory/AutoVerScheme/beexamined_deviceitem.ui @@ -32,7 +32,7 @@ - 0 + 1 @@ -793,7 +793,7 @@ XXX - 2 + 3 false @@ -811,16 +811,39 @@ - + - 核查项目及核查点: + 检定项目及检定点: - + + + + + + + + Qt::Horizontal + + + + 1506 + 20 + + + + + + + + + + + diff --git a/softwareDirectory/AutoVerScheme/create_task.cpp b/softwareDirectory/AutoVerScheme/create_task.cpp index 52a0ba7..c9bdffa 100644 --- a/softwareDirectory/AutoVerScheme/create_task.cpp +++ b/softwareDirectory/AutoVerScheme/create_task.cpp @@ -231,7 +231,11 @@ // 编辑按钮 点击事件 进入详情页面 // ==================================================================================== //DeviceInfoInit(id); + + DisplayButton(); + //查询出所有委托方 + //SetPartPageComBox(); SelectPageData(id); TaskId=id; ui->TitleLable->setText("编辑任务单"); @@ -315,6 +319,7 @@ { if(ListId.count()!=0) { + SelectDataItem.clear(); _IdList=ListId; ui->tableWidgetItem->setRowCount(0); // 调用数据库管理器的函数获取数据 @@ -329,14 +334,14 @@ { rowCount = ui->tableWidgetItem->rowCount(); ui->tableWidgetItem->insertRow(rowCount); - ui->tableWidgetItem->setItem(row, 0, new QTableWidgetItem(QString::number(row+1))); - ui->tableWidgetItem->setItem(row, 1, new QTableWidgetItem(result[0].equipment_name)); - ui->tableWidgetItem->setItem(row, 2, new QTableWidgetItem(result[0].model)); - ui->tableWidgetItem->setItem(row, 3, new QTableWidgetItem(result[0].help_instruction)); - ui->tableWidgetItem->setItem(row, 4, new QTableWidgetItem(result[0].manufacture_no)); - ui->tableWidgetItem->setItem(row, 5, new QTableWidgetItem(result[0].manufacturer)); - ui->tableWidgetItem->setItem(row, 6, new QTableWidgetItem("点击编辑")); + ui->tableWidgetItem->setItem(row, 1, new QTableWidgetItem(QString::number(row+1))); + ui->tableWidgetItem->setItem(row, 2, new QTableWidgetItem(result[0].equipment_name)); + ui->tableWidgetItem->setItem(row, 3, new QTableWidgetItem(result[0].model)); + ui->tableWidgetItem->setItem(row, 4, new QTableWidgetItem(result[0].help_instruction)); + ui->tableWidgetItem->setItem(row, 5, new QTableWidgetItem(result[0].manufacture_no)); + ui->tableWidgetItem->setItem(row, 6, new QTableWidgetItem(result[0].manufacturer)); ui->tableWidgetItem->setItem(row, 7, new QTableWidgetItem("点击编辑")); + ui->tableWidgetItem->setItem(row, 8, new QTableWidgetItem("点击编辑")); row++; } @@ -353,36 +358,78 @@ // 保存任务单按钮 先新增任务单 后新增任务单设备 // ==================================================================================== bool IsSUCC=false; - //获取选中的委托人ID - QString CustomerID=""; - if(_model->rowCount()>0){ - QModelIndex currentIndex = _model->index(ui->customer_name->currentIndex(),0); - CustomerID=currentIndex.data().toString(); } + //获取检定人ID QString person_id=dbManager.ConvertStaffInfo("用户ID目前固定").id; + //根据用户查出部门ID + QString DeptId=dbManager.ConvertStaffInfo("函数内默认添加").dept_id; + if(State=="Update") { if(TaskId=="")return; - InsertTask insertTask; - insertTask.id=TaskId; + InsertTask insertTask=dbManager.SelectTaskSingle(TaskId); insertTask.order_no=ui->LineEditNumber->text(); - insertTask.customer_name=ui->customer_name->currentText(); insertTask.require_over_time=ui->require_over_time->text(); insertTask.deliverer=ui->deliverer->text(); insertTask.deliverer_tel=ui->deliverer_tel->text(); insertTask.undertaker_name=ui->undertaker_name->text(); insertTask.undertake_time=ui->undertake_time->text(); - - if(ui->is_urgent->currentText()=="是") - { - insertTask.is_urgent=true; - }else{insertTask.is_urgent=false;} insertTask.receive_illustrate=ui->receive_illustrate->text(); - insertTask.customer_id=CustomerID; - IsSUCC=dbManager.UpdateTask(insertTask); - //设备更新 编辑设备待写 + IsSUCC=dbManager.UpdateTask(insertTask); + //设备更新 编辑设备待写 + //1、先删除之前的设备 + dbManager.DeleteTaskSameDevice(TaskId); + dbManager.DeleteTaskInfoRecordDevice(TaskId); + qint64 id = dbManager.generateId(); + //2、将新的设置重新增加到这两张表 + int count=0; + if(SelectDataItem.count()!=0 && _IdList.count()!=0){ + //InsertOrderSampleRelation + foreach(TestedCatDevice DeviceInfo,SelectDataItem) + { + //样品表 + OrderSampleRelation orderSampleRelation; + id = dbManager.generateId(); + orderSampleRelation.id=QString::number(id); + orderSampleRelation.order_id=TaskId; + orderSampleRelation.sample_id=_IdList[count]; + orderSampleRelation.sample_name=DeviceInfo.equipment_name; + orderSampleRelation.sample_model=DeviceInfo.model; + orderSampleRelation.measure_complete_time=QDateTime::currentDateTime(); + IsSUCC=dbManager.InsertOrderSampleRelation(orderSampleRelation); + + //每条设备对应一个信息表数据 + //增加biz_business_lab_executive_info 总信息表 + biz_business_lab_executive_info entity; + entity.id=QString::number(dbManager.generateId()); + entity.order_id=TaskId; + entity.sample_id=_IdList[count]; + entity.create_user_id="函数内默认添加"; + entity.measure_dept_id=DeptId; // + entity.measure_person_id=person_id; + IsSUCC=dbManager.InsertTaskInfoRecord(entity); + + if(!IsSUCC){ShowMessageBox("提示",QString("设备名称为: 1% 添加失败").arg(DeviceInfo.equipment_name));} + count++; + } + }else{ + + biz_business_lab_executive_info entity; + entity.id=QString::number(dbManager.generateId()); + entity.order_id=TaskId; + entity.sample_id=""; + entity.create_user_id="函数内默认添加"; + entity.measure_dept_id=DeptId; // + entity.measure_person_id=person_id; + IsSUCC=dbManager.InsertTaskInfoRecord(entity); + } }else{ + //获取选中的委托人ID + QString CustomerID=""; + if(_model->rowCount()>0){ + QModelIndex currentIndex = _model->index(ui->customer_name->currentIndex(),0); + CustomerID=currentIndex.data().toString(); } //新增任务单 qint64 id = dbManager.generateId(); InsertTask insertTask; @@ -403,15 +450,12 @@ insertTask.receive_illustrate=ui->receive_illustrate->text(); insertTask.customer_id=CustomerID; IsSUCC=dbManager.InsertTaskBasic(insertTask); + //新增任务单设备 + QString NewTaskId=dbManager.getCreateTaskListNew()[0].id; if(IsSUCC) { - //根据用户查出部门ID - QString DeptId=dbManager.ConvertStaffInfo("函数内默认添加").dept_id; - - //新增任务单设备 - QString NewTaskId=dbManager.getCreateTaskListNew()[0].id; int count=0; if(SelectDataItem.count()!=0 && _IdList.count()!=0){ //InsertOrderSampleRelation diff --git a/softwareDirectory/AutoVerScheme/create_task.ui b/softwareDirectory/AutoVerScheme/create_task.ui index 4f6f542..46e2f82 100644 --- a/softwareDirectory/AutoVerScheme/create_task.ui +++ b/softwareDirectory/AutoVerScheme/create_task.ui @@ -38,7 +38,7 @@ - 0 + 1 diff --git a/softwareDirectory/AutoVerScheme/datasyncview.cpp b/softwareDirectory/AutoVerScheme/datasyncview.cpp index 74cd41d..fbf4508 100644 --- a/softwareDirectory/AutoVerScheme/datasyncview.cpp +++ b/softwareDirectory/AutoVerScheme/datasyncview.cpp @@ -1,5 +1,10 @@ #include "datasyncview.h" #include "ui_datasyncview.h" +#include "synctask.h" +#include "databaseconnection.h" +#include "mainsysdatabaseconnection.h" + + DataSyncView::DataSyncView(QWidget *parent) : QWidget(parent), @@ -38,7 +43,18 @@ QStringList headers; headers << "序号" << "同步时间" << "是否同步成功" << "备注" ; ui->tableWidget->setHorizontalHeaderLabels(headers); +} +void DataSyncView::on_DownloadDataButton_clicked() +{ + //从主系统下载 - - +} +void DataSyncView::syncTable() +{ + //连接两个数据库 + bool IsOpen=false; + DatabaseConnection *Conn=DatabaseConnection::getInstance(); + IsOpen=Conn->open(); + //MainSysDatabaseConnection *MainConn=MainSysDatabaseConnection::getInstance(); + //IsOpen=MainConn->open(); } diff --git a/softwareDirectory/AutoVerScheme/datasyncview.h b/softwareDirectory/AutoVerScheme/datasyncview.h index 9a73de9..174480e 100644 --- a/softwareDirectory/AutoVerScheme/datasyncview.h +++ b/softwareDirectory/AutoVerScheme/datasyncview.h @@ -17,6 +17,9 @@ private slots: void initForm(); //初始化界面数据 + void on_DownloadDataButton_clicked(); + //异步更新 + void syncTable(); private: Ui::DataSyncView *ui; }; diff --git a/softwareDirectory/AutoVerScheme/datasyncview.ui b/softwareDirectory/AutoVerScheme/datasyncview.ui index 1000b22..53c379c 100644 --- a/softwareDirectory/AutoVerScheme/datasyncview.ui +++ b/softwareDirectory/AutoVerScheme/datasyncview.ui @@ -131,7 +131,7 @@ - + background-color:#334582; font: bold 18px Arial, sans-serif; diff --git a/softwareDirectory/AutoVerScheme/mainsysdatabaseconnection.cpp b/softwareDirectory/AutoVerScheme/mainsysdatabaseconnection.cpp new file mode 100644 index 0000000..b9d4328 --- /dev/null +++ b/softwareDirectory/AutoVerScheme/mainsysdatabaseconnection.cpp @@ -0,0 +1,54 @@ +#include "mainsysdatabaseconnection.h" + + + + +MainSysDatabaseConnection* MainSysDatabaseConnection::Connect = nullptr; +QMutex MainSysDatabaseConnection::mutex; + +MainSysDatabaseConnection::MainSysDatabaseConnection() +{ + + // 连接数据库 + db = QSqlDatabase::addDatabase("QODBC"); + db.setHostName("111.198.10.15"); + db.setDatabaseName("casic_metering_xichang"); + db.setPort(21906); + db.setUserName("zdjdcs"); + db.setPassword("11111111"); + /* db.setHostName("localhost"); + db.setDatabaseName("zdjd"); + db.setPort(3306); + db.setUserName("root"); + db.setPassword("123456");*/ + + +} +MainSysDatabaseConnection::~MainSysDatabaseConnection() { + // 在析构函数中关闭数据库连接 + close(); +} +bool MainSysDatabaseConnection::open() { + return db.open(); +} +bool MainSysDatabaseConnection::isopen() { + return db.isOpen(); +} + +void MainSysDatabaseConnection::close() { + db.close(); +} + +QSqlDatabase& MainSysDatabaseConnection::getDatabase() { + return db; +} +MainSysDatabaseConnection* MainSysDatabaseConnection::getInstance() +{ + if (!Connect) { + QMutexLocker locker(&mutex); + if (!Connect) { + Connect = new MainSysDatabaseConnection(); + } + } + return Connect; +} diff --git a/softwareDirectory/AutoVerScheme/AutoVerScheme.pro b/softwareDirectory/AutoVerScheme/AutoVerScheme.pro index 145840b..bf70fab 100644 --- a/softwareDirectory/AutoVerScheme/AutoVerScheme.pro +++ b/softwareDirectory/AutoVerScheme/AutoVerScheme.pro @@ -48,12 +48,14 @@ inspectdataitem.cpp \ loginwindow.cpp \ main.cpp \ + mainsysdatabaseconnection.cpp \ mainwindow.cpp \ my_task.cpp \ newcheckmethod.cpp \ newverifymethod.cpp \ rulefileitem.cpp \ standard_deviceitem.cpp \ + synctask.cpp \ testdataitem.cpp \ testview.cpp \ verifydevice.cpp \ @@ -95,12 +97,14 @@ infomanageview.h \ inspectdataitem.h \ loginwindow.h \ + mainsysdatabaseconnection.h \ mainwindow.h \ my_task.h \ newcheckmethod.h \ newverifymethod.h \ rulefileitem.h \ standard_deviceitem.h \ + synctask.h \ testdataitem.h \ testview.h \ verifydevice.h \ diff --git a/softwareDirectory/AutoVerScheme/basecommonapi.cpp b/softwareDirectory/AutoVerScheme/basecommonapi.cpp index b8846b2..572246e 100644 --- a/softwareDirectory/AutoVerScheme/basecommonapi.cpp +++ b/softwareDirectory/AutoVerScheme/basecommonapi.cpp @@ -511,6 +511,37 @@ return isSuccess; } +//单独查询任务单表 +//更新 任务单 +InsertTask BaseCommonApi::SelectTaskSingle(QString order_id) +{ + InsertTask result; + QSqlQuery query; + query.prepare("SELECT * From biz_business_order_info WHERE id=:order_id"); + // 将参数绑定到占位符 + query.bindValue(":order_id", order_id); + if (query.exec()) { + while (query.next()) { + result.id = query.value("id").toString(); + result.customer_name = query.value("customer_name").toString(); + result.require_over_time = query.value("require_over_time").toString(); + result.deliverer = query.value("deliverer").toString(); + result.deliverer_tel = query.value("deliverer_tel").toString(); + result.undertaker_name = query.value("undertaker_name").toString(); + result.undertake_time = query.value("undertake_time").toString(); + bool is_urgent=false; + if(query.value("is_urgent").toString()=="是"){is_urgent=true;}else{is_urgent=false;}; + result.is_urgent = is_urgent; + result.receive_illustrate = query.value("receive_illustrate").toString(); + result.customer_id = query.value("customer_id").toString(); + + } + } else { + qDebug() << "Query execution failed: " << query.lastError().text(); + } + + return result; +} //删除任务单 bool BaseCommonApi::DeleteTask(QString id) { @@ -533,6 +564,38 @@ return allSuccessful; } +//删除任务单信息记录表同一任务ID的设备 +bool BaseCommonApi::DeleteTaskInfoRecordDevice(QString order_id) +{ + QSqlQuery query; + + //删除任务单样品表数据 + query.prepare("DELETE FROM biz_business_lab_executive_info WHERE order_id = :id"); + query.bindValue(":id", order_id); + + if (!query.exec()) { + qDebug() << "删除失败 " << query.lastError().text(); + return false; + } + + return true; +} +//删除任务详情表同一任务ID的设备 +bool BaseCommonApi::DeleteTaskSameDevice(QString order_id) +{ + QSqlQuery query; + + //删除任务单样品表数据 + query.prepare("DELETE FROM biz_business_order_sample_relation WHERE order_id = :id"); + query.bindValue(":id", order_id); + + if (!query.exec()) { + qDebug() << "删除失败 " << query.lastError().text(); + return false; + } + + return true; +} //删除任务单内设备 bool BaseCommonApi::DeleteTaskDevice(QString id) { @@ -821,8 +884,8 @@ */ //根据被检设备ID获取当前设备的 检定项目及检定点 -/* -QMap> BaseCommonApi::Search_CalibrationTable(QString DeiverId,QMap *HeadList) + +QMap> BaseCommonApi::Search_CalibrationTableClass(QString DeiverId,QMap *HeadList) { QMap> DataList; @@ -834,11 +897,11 @@ case 1: //CliTable[0].id //1717086652508487681 - DataList=BaseCommonApi::getVerMultiCal(CliTable[0].id,HeadList); + DataList=BaseCommonApi::getVerMultiCalClass(CliTable[0].id,HeadList); } return DataList; -}*/ +} //根据被检设备ID获取当前设备的 检定项目及检定点 QList BaseCommonApi::Search_CalibrationTable(QString DeiverId,QStringList *HeadList) { @@ -951,8 +1014,7 @@ return resultData; } //被检设备管理-检定项目及检定点-多功能校准源 -/* -QMap> BaseCommonApi::getVerMultiCal(QString itemId,QMap *headList) +QMap> BaseCommonApi::getVerMultiCalClass(QString itemId,QMap *headList) { QMap> DataMapList; QList resultData; @@ -998,7 +1060,7 @@ DataMapList= GetDataReturnItemList(resultData,DataMapList,headList); return DataMapList; } -*/ + QMap> BaseCommonApi::GetDataReturnItemList(QList ResultData,QMap> DataMapList,QMap *HeadMapList) { @@ -1052,7 +1114,7 @@ Data.append(row[9]); //分辨力 DCVList.append(Data); } - else if(ResultData[2].first()=="ACV") + else if(row[2]=="ACV") { QString VerificationItem=NULL; if(isFirst[1]) @@ -1086,7 +1148,7 @@ } Data.append(row[9]); //分辨力 ACVList.append(Data); - } else if(ResultData[2].first()=="DCI") + } else if(row[2]=="DCI") { QString VerificationItem=NULL; if(isFirst[2]) @@ -1122,7 +1184,7 @@ Data.append(row[9]); //分辨力 DCIList.append(Data); - } else if(ResultData[2].first()=="ACI") + } else if(row[2]=="ACI") { QString VerificationItem=NULL; if(isFirst[3]) @@ -1157,7 +1219,7 @@ } Data.append(row[9]); //分辨力 ACIList.append(Data); - } else if(ResultData[2].first()=="R") + } else if(row[2]=="R") { QString VerificationItem=NULL; if(isFirst[4]) diff --git a/softwareDirectory/AutoVerScheme/basecommonapi.h b/softwareDirectory/AutoVerScheme/basecommonapi.h index da7ce3c..098944a 100644 --- a/softwareDirectory/AutoVerScheme/basecommonapi.h +++ b/softwareDirectory/AutoVerScheme/basecommonapi.h @@ -920,7 +920,7 @@ //判断检定装置表并查询 参数设备id static QList Search_CalibrationTable(QString DeiverId,QStringList *HeadList); - //static QMap> Search_CalibrationTable(QString DeiverId,QMap *HeadList); + static QMap> Search_CalibrationTableClass(QString DeiverId,QMap *HeadList); //判断核查装置表并查询 参数设备id static QList Search_VerifyTable(QString DeiverId,QStringList *HeadList ); @@ -983,7 +983,7 @@ static JudgeCalibrationTable getJudgeVerifyTable(QString id); //被检设备管理-检定项目及检定点-多功能校准源 static QList getVerMultiCal(QString itemId,QStringList *headList); - //static QMap> getVerMultiCal(QString itemId,QMap *headList); + static QMap> getVerMultiCalClass(QString itemId,QMap *headList); static QMap> GetDataReturnItemList(QList ResultData, QMap> DataMapList, QMap *HeadMapList); @@ -1100,6 +1100,10 @@ static QList getMeasureModifyRecord(QString data_id); //查询最新结果保存记录 static SaveDeviceMeasureInfo getNewResultData(); + + static bool DeleteTaskSameDevice(QString order_id); + static bool DeleteTaskInfoRecordDevice(QString order_id); + static InsertTask SelectTaskSingle(QString order_id); }; diff --git a/softwareDirectory/AutoVerScheme/beexamined_deviceitem.cpp b/softwareDirectory/AutoVerScheme/beexamined_deviceitem.cpp index fef3880..00d746b 100644 --- a/softwareDirectory/AutoVerScheme/beexamined_deviceitem.cpp +++ b/softwareDirectory/AutoVerScheme/beexamined_deviceitem.cpp @@ -46,18 +46,7 @@ << "生产厂家"<<"所在单位" <<"使用部门"<<"计量标识"<<"检定周期"<<"证书有效期"<<"操作"; ui->tableWidget->setHorizontalHeaderLabels(headers); - //详情页面tableWidgetItem设置 - ui->tableWidgetItem->setStyleSheet("QHeaderView::section {" - "border: 1px solid rgba(197, 196, 196, 1);" - "border-left:none;" - "border-top:none;" - "background-color:white;" - "}"); - // ui->tableWidget->setRowCount(10); // 设置10行 - //ui->tableWidgetItem->setColumnCount(14); // 设置11列 - ui->tableWidgetItem->setColumnWidth(0, 80); // 设置第一列的宽度为100像素 - ui->tableWidgetItem->verticalHeader()->setParent(nullptr); //隐藏行头 } void BeExamined_DeviceItem::ShowMessageBox(QString title,QString value) { @@ -195,53 +184,116 @@ // 初始化检定项目及核查点 // ==================================================================================== - //获取核查点tablewight的数据 - QStringList headlist; - - QList Data=dbManager.Search_CalibrationTable(id,&headlist); - //QList Data; - //tableWidgetItem - ui->tableWidgetItem->setRowCount(0); - ui->tableWidgetItem->setColumnCount(headlist.count()); - ui->tableWidgetItem->setHorizontalHeaderLabels(headlist); - //循环数据 - int rowCount=0; - int row=0; - - for (const QStringList& item : Data) - { - //获取行号 并进行添加行 - rowCount = ui->tableWidgetItem->rowCount(); - ui->tableWidgetItem->insertRow(rowCount); - //添加 序号 - ui->tableWidgetItem->setItem(row, 0, new QTableWidgetItem(QString::number(row+1))); - //循环读取值 headlist,count是列的数量 - for(int i=1;itableWidgetItem->setItem(row, i, new QTableWidgetItem(item[i])); - } - - row++; - + //重写核查点显示 + //每个检定项目列头 + QMap headListItem; //例 + //每个检定项目数据 + QMap> dataListItem; //例 + dataListItem=dbManager.Search_CalibrationTableClass(id,&headListItem); + QHBoxLayout *layout = ui->HeadListLayout; + QStackedWidget *stackedWidget = ui->stackedWidgetData; + //数据清空 + // 清空QStackedWidget中的所有页 + while (stackedWidget->count() > 0) { + QWidget *widget = stackedWidget->widget(0); // 获取第一个子部件 + stackedWidget->removeWidget(widget); // 从堆叠部件中移除 + delete widget; // 删除部件,防止内存泄漏 } + // 清空QHBoxLayout中的所有QPushButton + while (QLayoutItem *item = layout->takeAt(0)) { + QWidget *widget = item->widget(); + if (widget && qobject_cast(widget)) { + // 移除并删除QPushButton + delete widget; + } + } + int index = 0; + for (const auto &item : headListItem) { + QTableWidget *tableWidget = new QTableWidget(this); + tableWidget->setColumnCount(item.count()); + tableWidget->setHorizontalHeaderLabels(item); + //设置tableWidget样式表 + tableWidget->verticalHeader()->setParent(nullptr); //隐藏行头 + tableWidget->setStyleSheet("QHeaderView::section {" + "border: 1px solid rgba(197, 196, 196, 1);" + "border-left:none;" + "border-top:none;" + "background-color:white;" + "}"); + + // ======================================================================================== + // 数据循环显示 + // ==================================================================================== + int rowCount=0; + const auto &dataRes = dataListItem.value(headListItem.keys()[index]); + //tableWidget->setRowCount(data.count()); + + for (int i = 0; i < dataRes.count(); ++i) { + //获取行号 并进行添加行 + rowCount = tableWidget->rowCount(); + tableWidget->insertRow(rowCount); + tableWidget->setItem(i, 0, new QTableWidgetItem(QString::number(i+1))); + for(int j=1;jsetItem(i, j, new QTableWidgetItem(dataRes[i][j])); + } + + } + + stackedWidget->insertWidget(index,tableWidget); + // ======================================================================================== + // 按钮设置显示 + // ==================================================================================== + QPushButton *button = new QPushButton(headListItem.keys()[index], 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 {" + "background-color: blue;" // 选中时变为蓝色背景 + "}"); + + layout->addWidget(button); + connect(button, &QPushButton::clicked, stackedWidget, [stackedWidget, index]() { + stackedWidget->setCurrentIndex(index); + }); + + ++index; + } + //默认启动第一个页面 + stackedWidget->setCurrentIndex(0); + } void BeExamined_DeviceItem::SetHomePaheCombox(TestedDevice entity) { if(comboBoxContainsItem(ui->name,entity.equipment_name)){ - ui->name->addItem(entity.model); + ui->name->addItem(entity.equipment_name); } if(comboBoxContainsItem(ui->mode,entity.model)){ - ui->mode->addItem(entity.equipment_name); + ui->mode->addItem(entity.model); } if(comboBoxContainsItem(ui->manufacturer_2,entity.manufacturer)){ ui->manufacturer_2->addItem(entity.manufacturer); } if(comboBoxContainsItem(ui->Buildinguser,entity.customer_name)){ - ui->Buildinguser->addItem(entity.manufacturer); + ui->Buildinguser->addItem(entity.customer_name); } if(comboBoxContainsItem(ui->dept_2,entity.FULL_NAME)){ - ui->dept_2->addItem(entity.manufacturer); + ui->dept_2->addItem(entity.FULL_NAME); } } diff --git a/softwareDirectory/AutoVerScheme/beexamined_deviceitem.ui b/softwareDirectory/AutoVerScheme/beexamined_deviceitem.ui index 0e06ed9..30ff535 100644 --- a/softwareDirectory/AutoVerScheme/beexamined_deviceitem.ui +++ b/softwareDirectory/AutoVerScheme/beexamined_deviceitem.ui @@ -32,7 +32,7 @@ - 0 + 1 @@ -793,7 +793,7 @@ XXX - 2 + 3 false @@ -811,16 +811,39 @@ - + - 核查项目及核查点: + 检定项目及检定点: - + + + + + + + + Qt::Horizontal + + + + 1506 + 20 + + + + + + + + + + + diff --git a/softwareDirectory/AutoVerScheme/create_task.cpp b/softwareDirectory/AutoVerScheme/create_task.cpp index 52a0ba7..c9bdffa 100644 --- a/softwareDirectory/AutoVerScheme/create_task.cpp +++ b/softwareDirectory/AutoVerScheme/create_task.cpp @@ -231,7 +231,11 @@ // 编辑按钮 点击事件 进入详情页面 // ==================================================================================== //DeviceInfoInit(id); + + DisplayButton(); + //查询出所有委托方 + //SetPartPageComBox(); SelectPageData(id); TaskId=id; ui->TitleLable->setText("编辑任务单"); @@ -315,6 +319,7 @@ { if(ListId.count()!=0) { + SelectDataItem.clear(); _IdList=ListId; ui->tableWidgetItem->setRowCount(0); // 调用数据库管理器的函数获取数据 @@ -329,14 +334,14 @@ { rowCount = ui->tableWidgetItem->rowCount(); ui->tableWidgetItem->insertRow(rowCount); - ui->tableWidgetItem->setItem(row, 0, new QTableWidgetItem(QString::number(row+1))); - ui->tableWidgetItem->setItem(row, 1, new QTableWidgetItem(result[0].equipment_name)); - ui->tableWidgetItem->setItem(row, 2, new QTableWidgetItem(result[0].model)); - ui->tableWidgetItem->setItem(row, 3, new QTableWidgetItem(result[0].help_instruction)); - ui->tableWidgetItem->setItem(row, 4, new QTableWidgetItem(result[0].manufacture_no)); - ui->tableWidgetItem->setItem(row, 5, new QTableWidgetItem(result[0].manufacturer)); - ui->tableWidgetItem->setItem(row, 6, new QTableWidgetItem("点击编辑")); + ui->tableWidgetItem->setItem(row, 1, new QTableWidgetItem(QString::number(row+1))); + ui->tableWidgetItem->setItem(row, 2, new QTableWidgetItem(result[0].equipment_name)); + ui->tableWidgetItem->setItem(row, 3, new QTableWidgetItem(result[0].model)); + ui->tableWidgetItem->setItem(row, 4, new QTableWidgetItem(result[0].help_instruction)); + ui->tableWidgetItem->setItem(row, 5, new QTableWidgetItem(result[0].manufacture_no)); + ui->tableWidgetItem->setItem(row, 6, new QTableWidgetItem(result[0].manufacturer)); ui->tableWidgetItem->setItem(row, 7, new QTableWidgetItem("点击编辑")); + ui->tableWidgetItem->setItem(row, 8, new QTableWidgetItem("点击编辑")); row++; } @@ -353,36 +358,78 @@ // 保存任务单按钮 先新增任务单 后新增任务单设备 // ==================================================================================== bool IsSUCC=false; - //获取选中的委托人ID - QString CustomerID=""; - if(_model->rowCount()>0){ - QModelIndex currentIndex = _model->index(ui->customer_name->currentIndex(),0); - CustomerID=currentIndex.data().toString(); } + //获取检定人ID QString person_id=dbManager.ConvertStaffInfo("用户ID目前固定").id; + //根据用户查出部门ID + QString DeptId=dbManager.ConvertStaffInfo("函数内默认添加").dept_id; + if(State=="Update") { if(TaskId=="")return; - InsertTask insertTask; - insertTask.id=TaskId; + InsertTask insertTask=dbManager.SelectTaskSingle(TaskId); insertTask.order_no=ui->LineEditNumber->text(); - insertTask.customer_name=ui->customer_name->currentText(); insertTask.require_over_time=ui->require_over_time->text(); insertTask.deliverer=ui->deliverer->text(); insertTask.deliverer_tel=ui->deliverer_tel->text(); insertTask.undertaker_name=ui->undertaker_name->text(); insertTask.undertake_time=ui->undertake_time->text(); - - if(ui->is_urgent->currentText()=="是") - { - insertTask.is_urgent=true; - }else{insertTask.is_urgent=false;} insertTask.receive_illustrate=ui->receive_illustrate->text(); - insertTask.customer_id=CustomerID; - IsSUCC=dbManager.UpdateTask(insertTask); - //设备更新 编辑设备待写 + IsSUCC=dbManager.UpdateTask(insertTask); + //设备更新 编辑设备待写 + //1、先删除之前的设备 + dbManager.DeleteTaskSameDevice(TaskId); + dbManager.DeleteTaskInfoRecordDevice(TaskId); + qint64 id = dbManager.generateId(); + //2、将新的设置重新增加到这两张表 + int count=0; + if(SelectDataItem.count()!=0 && _IdList.count()!=0){ + //InsertOrderSampleRelation + foreach(TestedCatDevice DeviceInfo,SelectDataItem) + { + //样品表 + OrderSampleRelation orderSampleRelation; + id = dbManager.generateId(); + orderSampleRelation.id=QString::number(id); + orderSampleRelation.order_id=TaskId; + orderSampleRelation.sample_id=_IdList[count]; + orderSampleRelation.sample_name=DeviceInfo.equipment_name; + orderSampleRelation.sample_model=DeviceInfo.model; + orderSampleRelation.measure_complete_time=QDateTime::currentDateTime(); + IsSUCC=dbManager.InsertOrderSampleRelation(orderSampleRelation); + + //每条设备对应一个信息表数据 + //增加biz_business_lab_executive_info 总信息表 + biz_business_lab_executive_info entity; + entity.id=QString::number(dbManager.generateId()); + entity.order_id=TaskId; + entity.sample_id=_IdList[count]; + entity.create_user_id="函数内默认添加"; + entity.measure_dept_id=DeptId; // + entity.measure_person_id=person_id; + IsSUCC=dbManager.InsertTaskInfoRecord(entity); + + if(!IsSUCC){ShowMessageBox("提示",QString("设备名称为: 1% 添加失败").arg(DeviceInfo.equipment_name));} + count++; + } + }else{ + + biz_business_lab_executive_info entity; + entity.id=QString::number(dbManager.generateId()); + entity.order_id=TaskId; + entity.sample_id=""; + entity.create_user_id="函数内默认添加"; + entity.measure_dept_id=DeptId; // + entity.measure_person_id=person_id; + IsSUCC=dbManager.InsertTaskInfoRecord(entity); + } }else{ + //获取选中的委托人ID + QString CustomerID=""; + if(_model->rowCount()>0){ + QModelIndex currentIndex = _model->index(ui->customer_name->currentIndex(),0); + CustomerID=currentIndex.data().toString(); } //新增任务单 qint64 id = dbManager.generateId(); InsertTask insertTask; @@ -403,15 +450,12 @@ insertTask.receive_illustrate=ui->receive_illustrate->text(); insertTask.customer_id=CustomerID; IsSUCC=dbManager.InsertTaskBasic(insertTask); + //新增任务单设备 + QString NewTaskId=dbManager.getCreateTaskListNew()[0].id; if(IsSUCC) { - //根据用户查出部门ID - QString DeptId=dbManager.ConvertStaffInfo("函数内默认添加").dept_id; - - //新增任务单设备 - QString NewTaskId=dbManager.getCreateTaskListNew()[0].id; int count=0; if(SelectDataItem.count()!=0 && _IdList.count()!=0){ //InsertOrderSampleRelation diff --git a/softwareDirectory/AutoVerScheme/create_task.ui b/softwareDirectory/AutoVerScheme/create_task.ui index 4f6f542..46e2f82 100644 --- a/softwareDirectory/AutoVerScheme/create_task.ui +++ b/softwareDirectory/AutoVerScheme/create_task.ui @@ -38,7 +38,7 @@ - 0 + 1 diff --git a/softwareDirectory/AutoVerScheme/datasyncview.cpp b/softwareDirectory/AutoVerScheme/datasyncview.cpp index 74cd41d..fbf4508 100644 --- a/softwareDirectory/AutoVerScheme/datasyncview.cpp +++ b/softwareDirectory/AutoVerScheme/datasyncview.cpp @@ -1,5 +1,10 @@ #include "datasyncview.h" #include "ui_datasyncview.h" +#include "synctask.h" +#include "databaseconnection.h" +#include "mainsysdatabaseconnection.h" + + DataSyncView::DataSyncView(QWidget *parent) : QWidget(parent), @@ -38,7 +43,18 @@ QStringList headers; headers << "序号" << "同步时间" << "是否同步成功" << "备注" ; ui->tableWidget->setHorizontalHeaderLabels(headers); +} +void DataSyncView::on_DownloadDataButton_clicked() +{ + //从主系统下载 - - +} +void DataSyncView::syncTable() +{ + //连接两个数据库 + bool IsOpen=false; + DatabaseConnection *Conn=DatabaseConnection::getInstance(); + IsOpen=Conn->open(); + //MainSysDatabaseConnection *MainConn=MainSysDatabaseConnection::getInstance(); + //IsOpen=MainConn->open(); } diff --git a/softwareDirectory/AutoVerScheme/datasyncview.h b/softwareDirectory/AutoVerScheme/datasyncview.h index 9a73de9..174480e 100644 --- a/softwareDirectory/AutoVerScheme/datasyncview.h +++ b/softwareDirectory/AutoVerScheme/datasyncview.h @@ -17,6 +17,9 @@ private slots: void initForm(); //初始化界面数据 + void on_DownloadDataButton_clicked(); + //异步更新 + void syncTable(); private: Ui::DataSyncView *ui; }; diff --git a/softwareDirectory/AutoVerScheme/datasyncview.ui b/softwareDirectory/AutoVerScheme/datasyncview.ui index 1000b22..53c379c 100644 --- a/softwareDirectory/AutoVerScheme/datasyncview.ui +++ b/softwareDirectory/AutoVerScheme/datasyncview.ui @@ -131,7 +131,7 @@ - + background-color:#334582; font: bold 18px Arial, sans-serif; diff --git a/softwareDirectory/AutoVerScheme/mainsysdatabaseconnection.cpp b/softwareDirectory/AutoVerScheme/mainsysdatabaseconnection.cpp new file mode 100644 index 0000000..b9d4328 --- /dev/null +++ b/softwareDirectory/AutoVerScheme/mainsysdatabaseconnection.cpp @@ -0,0 +1,54 @@ +#include "mainsysdatabaseconnection.h" + + + + +MainSysDatabaseConnection* MainSysDatabaseConnection::Connect = nullptr; +QMutex MainSysDatabaseConnection::mutex; + +MainSysDatabaseConnection::MainSysDatabaseConnection() +{ + + // 连接数据库 + db = QSqlDatabase::addDatabase("QODBC"); + db.setHostName("111.198.10.15"); + db.setDatabaseName("casic_metering_xichang"); + db.setPort(21906); + db.setUserName("zdjdcs"); + db.setPassword("11111111"); + /* db.setHostName("localhost"); + db.setDatabaseName("zdjd"); + db.setPort(3306); + db.setUserName("root"); + db.setPassword("123456");*/ + + +} +MainSysDatabaseConnection::~MainSysDatabaseConnection() { + // 在析构函数中关闭数据库连接 + close(); +} +bool MainSysDatabaseConnection::open() { + return db.open(); +} +bool MainSysDatabaseConnection::isopen() { + return db.isOpen(); +} + +void MainSysDatabaseConnection::close() { + db.close(); +} + +QSqlDatabase& MainSysDatabaseConnection::getDatabase() { + return db; +} +MainSysDatabaseConnection* MainSysDatabaseConnection::getInstance() +{ + if (!Connect) { + QMutexLocker locker(&mutex); + if (!Connect) { + Connect = new MainSysDatabaseConnection(); + } + } + return Connect; +} diff --git a/softwareDirectory/AutoVerScheme/mainsysdatabaseconnection.h b/softwareDirectory/AutoVerScheme/mainsysdatabaseconnection.h new file mode 100644 index 0000000..88ab1e7 --- /dev/null +++ b/softwareDirectory/AutoVerScheme/mainsysdatabaseconnection.h @@ -0,0 +1,39 @@ +#ifndef DATABASECONNECTION_H +#define DATABASECONNECTION_H +#include +#include +#include + +class MainSysDatabaseConnection +{ + + +public: + //获取数据库实例 + static MainSysDatabaseConnection* getInstance(); + + MainSysDatabaseConnection(); + ~MainSysDatabaseConnection(); + bool open(); + bool isopen(); + void close(); + QSqlDatabase& getDatabase(); +private: + //单列模式 保证MainSysDatabaseConnection的唯一性 + static MainSysDatabaseConnection* Connect; + //QMutex 来确保在多线程环境下单例的正确创建。 + static QMutex mutex; + + //这是拷贝构造函数的声明,后面跟着 = delete; 表示这个构造函数被删除了。 + //这意味着你不能通过拷贝另一个 DatabaseConnection 对象来创建新的 DatabaseConnection 对象。 + //如果尝试这样做,编译器会报错。 + MainSysDatabaseConnection(const MainSysDatabaseConnection&) = delete; + //这是拷贝赋值运算符的声明,同样后面跟着 = delete; 表示这个运算符被删除了。 + //这意味着你不能将一个 DatabaseConnection 对象赋值给另一个 DatabaseConnection 对象。 + //如果尝试这样做,编译器同样会报错。 + MainSysDatabaseConnection& operator=(const MainSysDatabaseConnection&) = delete; + //数据库db类 + QSqlDatabase db; +}; + +#endif // DATABASECONNECTION_H diff --git a/softwareDirectory/AutoVerScheme/AutoVerScheme.pro b/softwareDirectory/AutoVerScheme/AutoVerScheme.pro index 145840b..bf70fab 100644 --- a/softwareDirectory/AutoVerScheme/AutoVerScheme.pro +++ b/softwareDirectory/AutoVerScheme/AutoVerScheme.pro @@ -48,12 +48,14 @@ inspectdataitem.cpp \ loginwindow.cpp \ main.cpp \ + mainsysdatabaseconnection.cpp \ mainwindow.cpp \ my_task.cpp \ newcheckmethod.cpp \ newverifymethod.cpp \ rulefileitem.cpp \ standard_deviceitem.cpp \ + synctask.cpp \ testdataitem.cpp \ testview.cpp \ verifydevice.cpp \ @@ -95,12 +97,14 @@ infomanageview.h \ inspectdataitem.h \ loginwindow.h \ + mainsysdatabaseconnection.h \ mainwindow.h \ my_task.h \ newcheckmethod.h \ newverifymethod.h \ rulefileitem.h \ standard_deviceitem.h \ + synctask.h \ testdataitem.h \ testview.h \ verifydevice.h \ diff --git a/softwareDirectory/AutoVerScheme/basecommonapi.cpp b/softwareDirectory/AutoVerScheme/basecommonapi.cpp index b8846b2..572246e 100644 --- a/softwareDirectory/AutoVerScheme/basecommonapi.cpp +++ b/softwareDirectory/AutoVerScheme/basecommonapi.cpp @@ -511,6 +511,37 @@ return isSuccess; } +//单独查询任务单表 +//更新 任务单 +InsertTask BaseCommonApi::SelectTaskSingle(QString order_id) +{ + InsertTask result; + QSqlQuery query; + query.prepare("SELECT * From biz_business_order_info WHERE id=:order_id"); + // 将参数绑定到占位符 + query.bindValue(":order_id", order_id); + if (query.exec()) { + while (query.next()) { + result.id = query.value("id").toString(); + result.customer_name = query.value("customer_name").toString(); + result.require_over_time = query.value("require_over_time").toString(); + result.deliverer = query.value("deliverer").toString(); + result.deliverer_tel = query.value("deliverer_tel").toString(); + result.undertaker_name = query.value("undertaker_name").toString(); + result.undertake_time = query.value("undertake_time").toString(); + bool is_urgent=false; + if(query.value("is_urgent").toString()=="是"){is_urgent=true;}else{is_urgent=false;}; + result.is_urgent = is_urgent; + result.receive_illustrate = query.value("receive_illustrate").toString(); + result.customer_id = query.value("customer_id").toString(); + + } + } else { + qDebug() << "Query execution failed: " << query.lastError().text(); + } + + return result; +} //删除任务单 bool BaseCommonApi::DeleteTask(QString id) { @@ -533,6 +564,38 @@ return allSuccessful; } +//删除任务单信息记录表同一任务ID的设备 +bool BaseCommonApi::DeleteTaskInfoRecordDevice(QString order_id) +{ + QSqlQuery query; + + //删除任务单样品表数据 + query.prepare("DELETE FROM biz_business_lab_executive_info WHERE order_id = :id"); + query.bindValue(":id", order_id); + + if (!query.exec()) { + qDebug() << "删除失败 " << query.lastError().text(); + return false; + } + + return true; +} +//删除任务详情表同一任务ID的设备 +bool BaseCommonApi::DeleteTaskSameDevice(QString order_id) +{ + QSqlQuery query; + + //删除任务单样品表数据 + query.prepare("DELETE FROM biz_business_order_sample_relation WHERE order_id = :id"); + query.bindValue(":id", order_id); + + if (!query.exec()) { + qDebug() << "删除失败 " << query.lastError().text(); + return false; + } + + return true; +} //删除任务单内设备 bool BaseCommonApi::DeleteTaskDevice(QString id) { @@ -821,8 +884,8 @@ */ //根据被检设备ID获取当前设备的 检定项目及检定点 -/* -QMap> BaseCommonApi::Search_CalibrationTable(QString DeiverId,QMap *HeadList) + +QMap> BaseCommonApi::Search_CalibrationTableClass(QString DeiverId,QMap *HeadList) { QMap> DataList; @@ -834,11 +897,11 @@ case 1: //CliTable[0].id //1717086652508487681 - DataList=BaseCommonApi::getVerMultiCal(CliTable[0].id,HeadList); + DataList=BaseCommonApi::getVerMultiCalClass(CliTable[0].id,HeadList); } return DataList; -}*/ +} //根据被检设备ID获取当前设备的 检定项目及检定点 QList BaseCommonApi::Search_CalibrationTable(QString DeiverId,QStringList *HeadList) { @@ -951,8 +1014,7 @@ return resultData; } //被检设备管理-检定项目及检定点-多功能校准源 -/* -QMap> BaseCommonApi::getVerMultiCal(QString itemId,QMap *headList) +QMap> BaseCommonApi::getVerMultiCalClass(QString itemId,QMap *headList) { QMap> DataMapList; QList resultData; @@ -998,7 +1060,7 @@ DataMapList= GetDataReturnItemList(resultData,DataMapList,headList); return DataMapList; } -*/ + QMap> BaseCommonApi::GetDataReturnItemList(QList ResultData,QMap> DataMapList,QMap *HeadMapList) { @@ -1052,7 +1114,7 @@ Data.append(row[9]); //分辨力 DCVList.append(Data); } - else if(ResultData[2].first()=="ACV") + else if(row[2]=="ACV") { QString VerificationItem=NULL; if(isFirst[1]) @@ -1086,7 +1148,7 @@ } Data.append(row[9]); //分辨力 ACVList.append(Data); - } else if(ResultData[2].first()=="DCI") + } else if(row[2]=="DCI") { QString VerificationItem=NULL; if(isFirst[2]) @@ -1122,7 +1184,7 @@ Data.append(row[9]); //分辨力 DCIList.append(Data); - } else if(ResultData[2].first()=="ACI") + } else if(row[2]=="ACI") { QString VerificationItem=NULL; if(isFirst[3]) @@ -1157,7 +1219,7 @@ } Data.append(row[9]); //分辨力 ACIList.append(Data); - } else if(ResultData[2].first()=="R") + } else if(row[2]=="R") { QString VerificationItem=NULL; if(isFirst[4]) diff --git a/softwareDirectory/AutoVerScheme/basecommonapi.h b/softwareDirectory/AutoVerScheme/basecommonapi.h index da7ce3c..098944a 100644 --- a/softwareDirectory/AutoVerScheme/basecommonapi.h +++ b/softwareDirectory/AutoVerScheme/basecommonapi.h @@ -920,7 +920,7 @@ //判断检定装置表并查询 参数设备id static QList Search_CalibrationTable(QString DeiverId,QStringList *HeadList); - //static QMap> Search_CalibrationTable(QString DeiverId,QMap *HeadList); + static QMap> Search_CalibrationTableClass(QString DeiverId,QMap *HeadList); //判断核查装置表并查询 参数设备id static QList Search_VerifyTable(QString DeiverId,QStringList *HeadList ); @@ -983,7 +983,7 @@ static JudgeCalibrationTable getJudgeVerifyTable(QString id); //被检设备管理-检定项目及检定点-多功能校准源 static QList getVerMultiCal(QString itemId,QStringList *headList); - //static QMap> getVerMultiCal(QString itemId,QMap *headList); + static QMap> getVerMultiCalClass(QString itemId,QMap *headList); static QMap> GetDataReturnItemList(QList ResultData, QMap> DataMapList, QMap *HeadMapList); @@ -1100,6 +1100,10 @@ static QList getMeasureModifyRecord(QString data_id); //查询最新结果保存记录 static SaveDeviceMeasureInfo getNewResultData(); + + static bool DeleteTaskSameDevice(QString order_id); + static bool DeleteTaskInfoRecordDevice(QString order_id); + static InsertTask SelectTaskSingle(QString order_id); }; diff --git a/softwareDirectory/AutoVerScheme/beexamined_deviceitem.cpp b/softwareDirectory/AutoVerScheme/beexamined_deviceitem.cpp index fef3880..00d746b 100644 --- a/softwareDirectory/AutoVerScheme/beexamined_deviceitem.cpp +++ b/softwareDirectory/AutoVerScheme/beexamined_deviceitem.cpp @@ -46,18 +46,7 @@ << "生产厂家"<<"所在单位" <<"使用部门"<<"计量标识"<<"检定周期"<<"证书有效期"<<"操作"; ui->tableWidget->setHorizontalHeaderLabels(headers); - //详情页面tableWidgetItem设置 - ui->tableWidgetItem->setStyleSheet("QHeaderView::section {" - "border: 1px solid rgba(197, 196, 196, 1);" - "border-left:none;" - "border-top:none;" - "background-color:white;" - "}"); - // ui->tableWidget->setRowCount(10); // 设置10行 - //ui->tableWidgetItem->setColumnCount(14); // 设置11列 - ui->tableWidgetItem->setColumnWidth(0, 80); // 设置第一列的宽度为100像素 - ui->tableWidgetItem->verticalHeader()->setParent(nullptr); //隐藏行头 } void BeExamined_DeviceItem::ShowMessageBox(QString title,QString value) { @@ -195,53 +184,116 @@ // 初始化检定项目及核查点 // ==================================================================================== - //获取核查点tablewight的数据 - QStringList headlist; - - QList Data=dbManager.Search_CalibrationTable(id,&headlist); - //QList Data; - //tableWidgetItem - ui->tableWidgetItem->setRowCount(0); - ui->tableWidgetItem->setColumnCount(headlist.count()); - ui->tableWidgetItem->setHorizontalHeaderLabels(headlist); - //循环数据 - int rowCount=0; - int row=0; - - for (const QStringList& item : Data) - { - //获取行号 并进行添加行 - rowCount = ui->tableWidgetItem->rowCount(); - ui->tableWidgetItem->insertRow(rowCount); - //添加 序号 - ui->tableWidgetItem->setItem(row, 0, new QTableWidgetItem(QString::number(row+1))); - //循环读取值 headlist,count是列的数量 - for(int i=1;itableWidgetItem->setItem(row, i, new QTableWidgetItem(item[i])); - } - - row++; - + //重写核查点显示 + //每个检定项目列头 + QMap headListItem; //例 + //每个检定项目数据 + QMap> dataListItem; //例 + dataListItem=dbManager.Search_CalibrationTableClass(id,&headListItem); + QHBoxLayout *layout = ui->HeadListLayout; + QStackedWidget *stackedWidget = ui->stackedWidgetData; + //数据清空 + // 清空QStackedWidget中的所有页 + while (stackedWidget->count() > 0) { + QWidget *widget = stackedWidget->widget(0); // 获取第一个子部件 + stackedWidget->removeWidget(widget); // 从堆叠部件中移除 + delete widget; // 删除部件,防止内存泄漏 } + // 清空QHBoxLayout中的所有QPushButton + while (QLayoutItem *item = layout->takeAt(0)) { + QWidget *widget = item->widget(); + if (widget && qobject_cast(widget)) { + // 移除并删除QPushButton + delete widget; + } + } + int index = 0; + for (const auto &item : headListItem) { + QTableWidget *tableWidget = new QTableWidget(this); + tableWidget->setColumnCount(item.count()); + tableWidget->setHorizontalHeaderLabels(item); + //设置tableWidget样式表 + tableWidget->verticalHeader()->setParent(nullptr); //隐藏行头 + tableWidget->setStyleSheet("QHeaderView::section {" + "border: 1px solid rgba(197, 196, 196, 1);" + "border-left:none;" + "border-top:none;" + "background-color:white;" + "}"); + + // ======================================================================================== + // 数据循环显示 + // ==================================================================================== + int rowCount=0; + const auto &dataRes = dataListItem.value(headListItem.keys()[index]); + //tableWidget->setRowCount(data.count()); + + for (int i = 0; i < dataRes.count(); ++i) { + //获取行号 并进行添加行 + rowCount = tableWidget->rowCount(); + tableWidget->insertRow(rowCount); + tableWidget->setItem(i, 0, new QTableWidgetItem(QString::number(i+1))); + for(int j=1;jsetItem(i, j, new QTableWidgetItem(dataRes[i][j])); + } + + } + + stackedWidget->insertWidget(index,tableWidget); + // ======================================================================================== + // 按钮设置显示 + // ==================================================================================== + QPushButton *button = new QPushButton(headListItem.keys()[index], 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 {" + "background-color: blue;" // 选中时变为蓝色背景 + "}"); + + layout->addWidget(button); + connect(button, &QPushButton::clicked, stackedWidget, [stackedWidget, index]() { + stackedWidget->setCurrentIndex(index); + }); + + ++index; + } + //默认启动第一个页面 + stackedWidget->setCurrentIndex(0); + } void BeExamined_DeviceItem::SetHomePaheCombox(TestedDevice entity) { if(comboBoxContainsItem(ui->name,entity.equipment_name)){ - ui->name->addItem(entity.model); + ui->name->addItem(entity.equipment_name); } if(comboBoxContainsItem(ui->mode,entity.model)){ - ui->mode->addItem(entity.equipment_name); + ui->mode->addItem(entity.model); } if(comboBoxContainsItem(ui->manufacturer_2,entity.manufacturer)){ ui->manufacturer_2->addItem(entity.manufacturer); } if(comboBoxContainsItem(ui->Buildinguser,entity.customer_name)){ - ui->Buildinguser->addItem(entity.manufacturer); + ui->Buildinguser->addItem(entity.customer_name); } if(comboBoxContainsItem(ui->dept_2,entity.FULL_NAME)){ - ui->dept_2->addItem(entity.manufacturer); + ui->dept_2->addItem(entity.FULL_NAME); } } diff --git a/softwareDirectory/AutoVerScheme/beexamined_deviceitem.ui b/softwareDirectory/AutoVerScheme/beexamined_deviceitem.ui index 0e06ed9..30ff535 100644 --- a/softwareDirectory/AutoVerScheme/beexamined_deviceitem.ui +++ b/softwareDirectory/AutoVerScheme/beexamined_deviceitem.ui @@ -32,7 +32,7 @@ - 0 + 1 @@ -793,7 +793,7 @@ XXX - 2 + 3 false @@ -811,16 +811,39 @@ - + - 核查项目及核查点: + 检定项目及检定点: - + + + + + + + + Qt::Horizontal + + + + 1506 + 20 + + + + + + + + + + + diff --git a/softwareDirectory/AutoVerScheme/create_task.cpp b/softwareDirectory/AutoVerScheme/create_task.cpp index 52a0ba7..c9bdffa 100644 --- a/softwareDirectory/AutoVerScheme/create_task.cpp +++ b/softwareDirectory/AutoVerScheme/create_task.cpp @@ -231,7 +231,11 @@ // 编辑按钮 点击事件 进入详情页面 // ==================================================================================== //DeviceInfoInit(id); + + DisplayButton(); + //查询出所有委托方 + //SetPartPageComBox(); SelectPageData(id); TaskId=id; ui->TitleLable->setText("编辑任务单"); @@ -315,6 +319,7 @@ { if(ListId.count()!=0) { + SelectDataItem.clear(); _IdList=ListId; ui->tableWidgetItem->setRowCount(0); // 调用数据库管理器的函数获取数据 @@ -329,14 +334,14 @@ { rowCount = ui->tableWidgetItem->rowCount(); ui->tableWidgetItem->insertRow(rowCount); - ui->tableWidgetItem->setItem(row, 0, new QTableWidgetItem(QString::number(row+1))); - ui->tableWidgetItem->setItem(row, 1, new QTableWidgetItem(result[0].equipment_name)); - ui->tableWidgetItem->setItem(row, 2, new QTableWidgetItem(result[0].model)); - ui->tableWidgetItem->setItem(row, 3, new QTableWidgetItem(result[0].help_instruction)); - ui->tableWidgetItem->setItem(row, 4, new QTableWidgetItem(result[0].manufacture_no)); - ui->tableWidgetItem->setItem(row, 5, new QTableWidgetItem(result[0].manufacturer)); - ui->tableWidgetItem->setItem(row, 6, new QTableWidgetItem("点击编辑")); + ui->tableWidgetItem->setItem(row, 1, new QTableWidgetItem(QString::number(row+1))); + ui->tableWidgetItem->setItem(row, 2, new QTableWidgetItem(result[0].equipment_name)); + ui->tableWidgetItem->setItem(row, 3, new QTableWidgetItem(result[0].model)); + ui->tableWidgetItem->setItem(row, 4, new QTableWidgetItem(result[0].help_instruction)); + ui->tableWidgetItem->setItem(row, 5, new QTableWidgetItem(result[0].manufacture_no)); + ui->tableWidgetItem->setItem(row, 6, new QTableWidgetItem(result[0].manufacturer)); ui->tableWidgetItem->setItem(row, 7, new QTableWidgetItem("点击编辑")); + ui->tableWidgetItem->setItem(row, 8, new QTableWidgetItem("点击编辑")); row++; } @@ -353,36 +358,78 @@ // 保存任务单按钮 先新增任务单 后新增任务单设备 // ==================================================================================== bool IsSUCC=false; - //获取选中的委托人ID - QString CustomerID=""; - if(_model->rowCount()>0){ - QModelIndex currentIndex = _model->index(ui->customer_name->currentIndex(),0); - CustomerID=currentIndex.data().toString(); } + //获取检定人ID QString person_id=dbManager.ConvertStaffInfo("用户ID目前固定").id; + //根据用户查出部门ID + QString DeptId=dbManager.ConvertStaffInfo("函数内默认添加").dept_id; + if(State=="Update") { if(TaskId=="")return; - InsertTask insertTask; - insertTask.id=TaskId; + InsertTask insertTask=dbManager.SelectTaskSingle(TaskId); insertTask.order_no=ui->LineEditNumber->text(); - insertTask.customer_name=ui->customer_name->currentText(); insertTask.require_over_time=ui->require_over_time->text(); insertTask.deliverer=ui->deliverer->text(); insertTask.deliverer_tel=ui->deliverer_tel->text(); insertTask.undertaker_name=ui->undertaker_name->text(); insertTask.undertake_time=ui->undertake_time->text(); - - if(ui->is_urgent->currentText()=="是") - { - insertTask.is_urgent=true; - }else{insertTask.is_urgent=false;} insertTask.receive_illustrate=ui->receive_illustrate->text(); - insertTask.customer_id=CustomerID; - IsSUCC=dbManager.UpdateTask(insertTask); - //设备更新 编辑设备待写 + IsSUCC=dbManager.UpdateTask(insertTask); + //设备更新 编辑设备待写 + //1、先删除之前的设备 + dbManager.DeleteTaskSameDevice(TaskId); + dbManager.DeleteTaskInfoRecordDevice(TaskId); + qint64 id = dbManager.generateId(); + //2、将新的设置重新增加到这两张表 + int count=0; + if(SelectDataItem.count()!=0 && _IdList.count()!=0){ + //InsertOrderSampleRelation + foreach(TestedCatDevice DeviceInfo,SelectDataItem) + { + //样品表 + OrderSampleRelation orderSampleRelation; + id = dbManager.generateId(); + orderSampleRelation.id=QString::number(id); + orderSampleRelation.order_id=TaskId; + orderSampleRelation.sample_id=_IdList[count]; + orderSampleRelation.sample_name=DeviceInfo.equipment_name; + orderSampleRelation.sample_model=DeviceInfo.model; + orderSampleRelation.measure_complete_time=QDateTime::currentDateTime(); + IsSUCC=dbManager.InsertOrderSampleRelation(orderSampleRelation); + + //每条设备对应一个信息表数据 + //增加biz_business_lab_executive_info 总信息表 + biz_business_lab_executive_info entity; + entity.id=QString::number(dbManager.generateId()); + entity.order_id=TaskId; + entity.sample_id=_IdList[count]; + entity.create_user_id="函数内默认添加"; + entity.measure_dept_id=DeptId; // + entity.measure_person_id=person_id; + IsSUCC=dbManager.InsertTaskInfoRecord(entity); + + if(!IsSUCC){ShowMessageBox("提示",QString("设备名称为: 1% 添加失败").arg(DeviceInfo.equipment_name));} + count++; + } + }else{ + + biz_business_lab_executive_info entity; + entity.id=QString::number(dbManager.generateId()); + entity.order_id=TaskId; + entity.sample_id=""; + entity.create_user_id="函数内默认添加"; + entity.measure_dept_id=DeptId; // + entity.measure_person_id=person_id; + IsSUCC=dbManager.InsertTaskInfoRecord(entity); + } }else{ + //获取选中的委托人ID + QString CustomerID=""; + if(_model->rowCount()>0){ + QModelIndex currentIndex = _model->index(ui->customer_name->currentIndex(),0); + CustomerID=currentIndex.data().toString(); } //新增任务单 qint64 id = dbManager.generateId(); InsertTask insertTask; @@ -403,15 +450,12 @@ insertTask.receive_illustrate=ui->receive_illustrate->text(); insertTask.customer_id=CustomerID; IsSUCC=dbManager.InsertTaskBasic(insertTask); + //新增任务单设备 + QString NewTaskId=dbManager.getCreateTaskListNew()[0].id; if(IsSUCC) { - //根据用户查出部门ID - QString DeptId=dbManager.ConvertStaffInfo("函数内默认添加").dept_id; - - //新增任务单设备 - QString NewTaskId=dbManager.getCreateTaskListNew()[0].id; int count=0; if(SelectDataItem.count()!=0 && _IdList.count()!=0){ //InsertOrderSampleRelation diff --git a/softwareDirectory/AutoVerScheme/create_task.ui b/softwareDirectory/AutoVerScheme/create_task.ui index 4f6f542..46e2f82 100644 --- a/softwareDirectory/AutoVerScheme/create_task.ui +++ b/softwareDirectory/AutoVerScheme/create_task.ui @@ -38,7 +38,7 @@ - 0 + 1 diff --git a/softwareDirectory/AutoVerScheme/datasyncview.cpp b/softwareDirectory/AutoVerScheme/datasyncview.cpp index 74cd41d..fbf4508 100644 --- a/softwareDirectory/AutoVerScheme/datasyncview.cpp +++ b/softwareDirectory/AutoVerScheme/datasyncview.cpp @@ -1,5 +1,10 @@ #include "datasyncview.h" #include "ui_datasyncview.h" +#include "synctask.h" +#include "databaseconnection.h" +#include "mainsysdatabaseconnection.h" + + DataSyncView::DataSyncView(QWidget *parent) : QWidget(parent), @@ -38,7 +43,18 @@ QStringList headers; headers << "序号" << "同步时间" << "是否同步成功" << "备注" ; ui->tableWidget->setHorizontalHeaderLabels(headers); +} +void DataSyncView::on_DownloadDataButton_clicked() +{ + //从主系统下载 - - +} +void DataSyncView::syncTable() +{ + //连接两个数据库 + bool IsOpen=false; + DatabaseConnection *Conn=DatabaseConnection::getInstance(); + IsOpen=Conn->open(); + //MainSysDatabaseConnection *MainConn=MainSysDatabaseConnection::getInstance(); + //IsOpen=MainConn->open(); } diff --git a/softwareDirectory/AutoVerScheme/datasyncview.h b/softwareDirectory/AutoVerScheme/datasyncview.h index 9a73de9..174480e 100644 --- a/softwareDirectory/AutoVerScheme/datasyncview.h +++ b/softwareDirectory/AutoVerScheme/datasyncview.h @@ -17,6 +17,9 @@ private slots: void initForm(); //初始化界面数据 + void on_DownloadDataButton_clicked(); + //异步更新 + void syncTable(); private: Ui::DataSyncView *ui; }; diff --git a/softwareDirectory/AutoVerScheme/datasyncview.ui b/softwareDirectory/AutoVerScheme/datasyncview.ui index 1000b22..53c379c 100644 --- a/softwareDirectory/AutoVerScheme/datasyncview.ui +++ b/softwareDirectory/AutoVerScheme/datasyncview.ui @@ -131,7 +131,7 @@ - + background-color:#334582; font: bold 18px Arial, sans-serif; diff --git a/softwareDirectory/AutoVerScheme/mainsysdatabaseconnection.cpp b/softwareDirectory/AutoVerScheme/mainsysdatabaseconnection.cpp new file mode 100644 index 0000000..b9d4328 --- /dev/null +++ b/softwareDirectory/AutoVerScheme/mainsysdatabaseconnection.cpp @@ -0,0 +1,54 @@ +#include "mainsysdatabaseconnection.h" + + + + +MainSysDatabaseConnection* MainSysDatabaseConnection::Connect = nullptr; +QMutex MainSysDatabaseConnection::mutex; + +MainSysDatabaseConnection::MainSysDatabaseConnection() +{ + + // 连接数据库 + db = QSqlDatabase::addDatabase("QODBC"); + db.setHostName("111.198.10.15"); + db.setDatabaseName("casic_metering_xichang"); + db.setPort(21906); + db.setUserName("zdjdcs"); + db.setPassword("11111111"); + /* db.setHostName("localhost"); + db.setDatabaseName("zdjd"); + db.setPort(3306); + db.setUserName("root"); + db.setPassword("123456");*/ + + +} +MainSysDatabaseConnection::~MainSysDatabaseConnection() { + // 在析构函数中关闭数据库连接 + close(); +} +bool MainSysDatabaseConnection::open() { + return db.open(); +} +bool MainSysDatabaseConnection::isopen() { + return db.isOpen(); +} + +void MainSysDatabaseConnection::close() { + db.close(); +} + +QSqlDatabase& MainSysDatabaseConnection::getDatabase() { + return db; +} +MainSysDatabaseConnection* MainSysDatabaseConnection::getInstance() +{ + if (!Connect) { + QMutexLocker locker(&mutex); + if (!Connect) { + Connect = new MainSysDatabaseConnection(); + } + } + return Connect; +} diff --git a/softwareDirectory/AutoVerScheme/mainsysdatabaseconnection.h b/softwareDirectory/AutoVerScheme/mainsysdatabaseconnection.h new file mode 100644 index 0000000..88ab1e7 --- /dev/null +++ b/softwareDirectory/AutoVerScheme/mainsysdatabaseconnection.h @@ -0,0 +1,39 @@ +#ifndef DATABASECONNECTION_H +#define DATABASECONNECTION_H +#include +#include +#include + +class MainSysDatabaseConnection +{ + + +public: + //获取数据库实例 + static MainSysDatabaseConnection* getInstance(); + + MainSysDatabaseConnection(); + ~MainSysDatabaseConnection(); + bool open(); + bool isopen(); + void close(); + QSqlDatabase& getDatabase(); +private: + //单列模式 保证MainSysDatabaseConnection的唯一性 + static MainSysDatabaseConnection* Connect; + //QMutex 来确保在多线程环境下单例的正确创建。 + static QMutex mutex; + + //这是拷贝构造函数的声明,后面跟着 = delete; 表示这个构造函数被删除了。 + //这意味着你不能通过拷贝另一个 DatabaseConnection 对象来创建新的 DatabaseConnection 对象。 + //如果尝试这样做,编译器会报错。 + MainSysDatabaseConnection(const MainSysDatabaseConnection&) = delete; + //这是拷贝赋值运算符的声明,同样后面跟着 = delete; 表示这个运算符被删除了。 + //这意味着你不能将一个 DatabaseConnection 对象赋值给另一个 DatabaseConnection 对象。 + //如果尝试这样做,编译器同样会报错。 + MainSysDatabaseConnection& operator=(const MainSysDatabaseConnection&) = delete; + //数据库db类 + QSqlDatabase db; +}; + +#endif // DATABASECONNECTION_H diff --git a/softwareDirectory/AutoVerScheme/rulefileitem.cpp b/softwareDirectory/AutoVerScheme/rulefileitem.cpp index dfd8ab6..3b5e4b3 100644 --- a/softwareDirectory/AutoVerScheme/rulefileitem.cpp +++ b/softwareDirectory/AutoVerScheme/rulefileitem.cpp @@ -18,6 +18,8 @@ void RuleFileItem::initForm() { + + //tableWidget设置 //设置控件的边框显示 ui->tableWidget->setStyleSheet("QHeaderView::section {" diff --git a/softwareDirectory/AutoVerScheme/AutoVerScheme.pro b/softwareDirectory/AutoVerScheme/AutoVerScheme.pro index 145840b..bf70fab 100644 --- a/softwareDirectory/AutoVerScheme/AutoVerScheme.pro +++ b/softwareDirectory/AutoVerScheme/AutoVerScheme.pro @@ -48,12 +48,14 @@ inspectdataitem.cpp \ loginwindow.cpp \ main.cpp \ + mainsysdatabaseconnection.cpp \ mainwindow.cpp \ my_task.cpp \ newcheckmethod.cpp \ newverifymethod.cpp \ rulefileitem.cpp \ standard_deviceitem.cpp \ + synctask.cpp \ testdataitem.cpp \ testview.cpp \ verifydevice.cpp \ @@ -95,12 +97,14 @@ infomanageview.h \ inspectdataitem.h \ loginwindow.h \ + mainsysdatabaseconnection.h \ mainwindow.h \ my_task.h \ newcheckmethod.h \ newverifymethod.h \ rulefileitem.h \ standard_deviceitem.h \ + synctask.h \ testdataitem.h \ testview.h \ verifydevice.h \ diff --git a/softwareDirectory/AutoVerScheme/basecommonapi.cpp b/softwareDirectory/AutoVerScheme/basecommonapi.cpp index b8846b2..572246e 100644 --- a/softwareDirectory/AutoVerScheme/basecommonapi.cpp +++ b/softwareDirectory/AutoVerScheme/basecommonapi.cpp @@ -511,6 +511,37 @@ return isSuccess; } +//单独查询任务单表 +//更新 任务单 +InsertTask BaseCommonApi::SelectTaskSingle(QString order_id) +{ + InsertTask result; + QSqlQuery query; + query.prepare("SELECT * From biz_business_order_info WHERE id=:order_id"); + // 将参数绑定到占位符 + query.bindValue(":order_id", order_id); + if (query.exec()) { + while (query.next()) { + result.id = query.value("id").toString(); + result.customer_name = query.value("customer_name").toString(); + result.require_over_time = query.value("require_over_time").toString(); + result.deliverer = query.value("deliverer").toString(); + result.deliverer_tel = query.value("deliverer_tel").toString(); + result.undertaker_name = query.value("undertaker_name").toString(); + result.undertake_time = query.value("undertake_time").toString(); + bool is_urgent=false; + if(query.value("is_urgent").toString()=="是"){is_urgent=true;}else{is_urgent=false;}; + result.is_urgent = is_urgent; + result.receive_illustrate = query.value("receive_illustrate").toString(); + result.customer_id = query.value("customer_id").toString(); + + } + } else { + qDebug() << "Query execution failed: " << query.lastError().text(); + } + + return result; +} //删除任务单 bool BaseCommonApi::DeleteTask(QString id) { @@ -533,6 +564,38 @@ return allSuccessful; } +//删除任务单信息记录表同一任务ID的设备 +bool BaseCommonApi::DeleteTaskInfoRecordDevice(QString order_id) +{ + QSqlQuery query; + + //删除任务单样品表数据 + query.prepare("DELETE FROM biz_business_lab_executive_info WHERE order_id = :id"); + query.bindValue(":id", order_id); + + if (!query.exec()) { + qDebug() << "删除失败 " << query.lastError().text(); + return false; + } + + return true; +} +//删除任务详情表同一任务ID的设备 +bool BaseCommonApi::DeleteTaskSameDevice(QString order_id) +{ + QSqlQuery query; + + //删除任务单样品表数据 + query.prepare("DELETE FROM biz_business_order_sample_relation WHERE order_id = :id"); + query.bindValue(":id", order_id); + + if (!query.exec()) { + qDebug() << "删除失败 " << query.lastError().text(); + return false; + } + + return true; +} //删除任务单内设备 bool BaseCommonApi::DeleteTaskDevice(QString id) { @@ -821,8 +884,8 @@ */ //根据被检设备ID获取当前设备的 检定项目及检定点 -/* -QMap> BaseCommonApi::Search_CalibrationTable(QString DeiverId,QMap *HeadList) + +QMap> BaseCommonApi::Search_CalibrationTableClass(QString DeiverId,QMap *HeadList) { QMap> DataList; @@ -834,11 +897,11 @@ case 1: //CliTable[0].id //1717086652508487681 - DataList=BaseCommonApi::getVerMultiCal(CliTable[0].id,HeadList); + DataList=BaseCommonApi::getVerMultiCalClass(CliTable[0].id,HeadList); } return DataList; -}*/ +} //根据被检设备ID获取当前设备的 检定项目及检定点 QList BaseCommonApi::Search_CalibrationTable(QString DeiverId,QStringList *HeadList) { @@ -951,8 +1014,7 @@ return resultData; } //被检设备管理-检定项目及检定点-多功能校准源 -/* -QMap> BaseCommonApi::getVerMultiCal(QString itemId,QMap *headList) +QMap> BaseCommonApi::getVerMultiCalClass(QString itemId,QMap *headList) { QMap> DataMapList; QList resultData; @@ -998,7 +1060,7 @@ DataMapList= GetDataReturnItemList(resultData,DataMapList,headList); return DataMapList; } -*/ + QMap> BaseCommonApi::GetDataReturnItemList(QList ResultData,QMap> DataMapList,QMap *HeadMapList) { @@ -1052,7 +1114,7 @@ Data.append(row[9]); //分辨力 DCVList.append(Data); } - else if(ResultData[2].first()=="ACV") + else if(row[2]=="ACV") { QString VerificationItem=NULL; if(isFirst[1]) @@ -1086,7 +1148,7 @@ } Data.append(row[9]); //分辨力 ACVList.append(Data); - } else if(ResultData[2].first()=="DCI") + } else if(row[2]=="DCI") { QString VerificationItem=NULL; if(isFirst[2]) @@ -1122,7 +1184,7 @@ Data.append(row[9]); //分辨力 DCIList.append(Data); - } else if(ResultData[2].first()=="ACI") + } else if(row[2]=="ACI") { QString VerificationItem=NULL; if(isFirst[3]) @@ -1157,7 +1219,7 @@ } Data.append(row[9]); //分辨力 ACIList.append(Data); - } else if(ResultData[2].first()=="R") + } else if(row[2]=="R") { QString VerificationItem=NULL; if(isFirst[4]) diff --git a/softwareDirectory/AutoVerScheme/basecommonapi.h b/softwareDirectory/AutoVerScheme/basecommonapi.h index da7ce3c..098944a 100644 --- a/softwareDirectory/AutoVerScheme/basecommonapi.h +++ b/softwareDirectory/AutoVerScheme/basecommonapi.h @@ -920,7 +920,7 @@ //判断检定装置表并查询 参数设备id static QList Search_CalibrationTable(QString DeiverId,QStringList *HeadList); - //static QMap> Search_CalibrationTable(QString DeiverId,QMap *HeadList); + static QMap> Search_CalibrationTableClass(QString DeiverId,QMap *HeadList); //判断核查装置表并查询 参数设备id static QList Search_VerifyTable(QString DeiverId,QStringList *HeadList ); @@ -983,7 +983,7 @@ static JudgeCalibrationTable getJudgeVerifyTable(QString id); //被检设备管理-检定项目及检定点-多功能校准源 static QList getVerMultiCal(QString itemId,QStringList *headList); - //static QMap> getVerMultiCal(QString itemId,QMap *headList); + static QMap> getVerMultiCalClass(QString itemId,QMap *headList); static QMap> GetDataReturnItemList(QList ResultData, QMap> DataMapList, QMap *HeadMapList); @@ -1100,6 +1100,10 @@ static QList getMeasureModifyRecord(QString data_id); //查询最新结果保存记录 static SaveDeviceMeasureInfo getNewResultData(); + + static bool DeleteTaskSameDevice(QString order_id); + static bool DeleteTaskInfoRecordDevice(QString order_id); + static InsertTask SelectTaskSingle(QString order_id); }; diff --git a/softwareDirectory/AutoVerScheme/beexamined_deviceitem.cpp b/softwareDirectory/AutoVerScheme/beexamined_deviceitem.cpp index fef3880..00d746b 100644 --- a/softwareDirectory/AutoVerScheme/beexamined_deviceitem.cpp +++ b/softwareDirectory/AutoVerScheme/beexamined_deviceitem.cpp @@ -46,18 +46,7 @@ << "生产厂家"<<"所在单位" <<"使用部门"<<"计量标识"<<"检定周期"<<"证书有效期"<<"操作"; ui->tableWidget->setHorizontalHeaderLabels(headers); - //详情页面tableWidgetItem设置 - ui->tableWidgetItem->setStyleSheet("QHeaderView::section {" - "border: 1px solid rgba(197, 196, 196, 1);" - "border-left:none;" - "border-top:none;" - "background-color:white;" - "}"); - // ui->tableWidget->setRowCount(10); // 设置10行 - //ui->tableWidgetItem->setColumnCount(14); // 设置11列 - ui->tableWidgetItem->setColumnWidth(0, 80); // 设置第一列的宽度为100像素 - ui->tableWidgetItem->verticalHeader()->setParent(nullptr); //隐藏行头 } void BeExamined_DeviceItem::ShowMessageBox(QString title,QString value) { @@ -195,53 +184,116 @@ // 初始化检定项目及核查点 // ==================================================================================== - //获取核查点tablewight的数据 - QStringList headlist; - - QList Data=dbManager.Search_CalibrationTable(id,&headlist); - //QList Data; - //tableWidgetItem - ui->tableWidgetItem->setRowCount(0); - ui->tableWidgetItem->setColumnCount(headlist.count()); - ui->tableWidgetItem->setHorizontalHeaderLabels(headlist); - //循环数据 - int rowCount=0; - int row=0; - - for (const QStringList& item : Data) - { - //获取行号 并进行添加行 - rowCount = ui->tableWidgetItem->rowCount(); - ui->tableWidgetItem->insertRow(rowCount); - //添加 序号 - ui->tableWidgetItem->setItem(row, 0, new QTableWidgetItem(QString::number(row+1))); - //循环读取值 headlist,count是列的数量 - for(int i=1;itableWidgetItem->setItem(row, i, new QTableWidgetItem(item[i])); - } - - row++; - + //重写核查点显示 + //每个检定项目列头 + QMap headListItem; //例 + //每个检定项目数据 + QMap> dataListItem; //例 + dataListItem=dbManager.Search_CalibrationTableClass(id,&headListItem); + QHBoxLayout *layout = ui->HeadListLayout; + QStackedWidget *stackedWidget = ui->stackedWidgetData; + //数据清空 + // 清空QStackedWidget中的所有页 + while (stackedWidget->count() > 0) { + QWidget *widget = stackedWidget->widget(0); // 获取第一个子部件 + stackedWidget->removeWidget(widget); // 从堆叠部件中移除 + delete widget; // 删除部件,防止内存泄漏 } + // 清空QHBoxLayout中的所有QPushButton + while (QLayoutItem *item = layout->takeAt(0)) { + QWidget *widget = item->widget(); + if (widget && qobject_cast(widget)) { + // 移除并删除QPushButton + delete widget; + } + } + int index = 0; + for (const auto &item : headListItem) { + QTableWidget *tableWidget = new QTableWidget(this); + tableWidget->setColumnCount(item.count()); + tableWidget->setHorizontalHeaderLabels(item); + //设置tableWidget样式表 + tableWidget->verticalHeader()->setParent(nullptr); //隐藏行头 + tableWidget->setStyleSheet("QHeaderView::section {" + "border: 1px solid rgba(197, 196, 196, 1);" + "border-left:none;" + "border-top:none;" + "background-color:white;" + "}"); + + // ======================================================================================== + // 数据循环显示 + // ==================================================================================== + int rowCount=0; + const auto &dataRes = dataListItem.value(headListItem.keys()[index]); + //tableWidget->setRowCount(data.count()); + + for (int i = 0; i < dataRes.count(); ++i) { + //获取行号 并进行添加行 + rowCount = tableWidget->rowCount(); + tableWidget->insertRow(rowCount); + tableWidget->setItem(i, 0, new QTableWidgetItem(QString::number(i+1))); + for(int j=1;jsetItem(i, j, new QTableWidgetItem(dataRes[i][j])); + } + + } + + stackedWidget->insertWidget(index,tableWidget); + // ======================================================================================== + // 按钮设置显示 + // ==================================================================================== + QPushButton *button = new QPushButton(headListItem.keys()[index], 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 {" + "background-color: blue;" // 选中时变为蓝色背景 + "}"); + + layout->addWidget(button); + connect(button, &QPushButton::clicked, stackedWidget, [stackedWidget, index]() { + stackedWidget->setCurrentIndex(index); + }); + + ++index; + } + //默认启动第一个页面 + stackedWidget->setCurrentIndex(0); + } void BeExamined_DeviceItem::SetHomePaheCombox(TestedDevice entity) { if(comboBoxContainsItem(ui->name,entity.equipment_name)){ - ui->name->addItem(entity.model); + ui->name->addItem(entity.equipment_name); } if(comboBoxContainsItem(ui->mode,entity.model)){ - ui->mode->addItem(entity.equipment_name); + ui->mode->addItem(entity.model); } if(comboBoxContainsItem(ui->manufacturer_2,entity.manufacturer)){ ui->manufacturer_2->addItem(entity.manufacturer); } if(comboBoxContainsItem(ui->Buildinguser,entity.customer_name)){ - ui->Buildinguser->addItem(entity.manufacturer); + ui->Buildinguser->addItem(entity.customer_name); } if(comboBoxContainsItem(ui->dept_2,entity.FULL_NAME)){ - ui->dept_2->addItem(entity.manufacturer); + ui->dept_2->addItem(entity.FULL_NAME); } } diff --git a/softwareDirectory/AutoVerScheme/beexamined_deviceitem.ui b/softwareDirectory/AutoVerScheme/beexamined_deviceitem.ui index 0e06ed9..30ff535 100644 --- a/softwareDirectory/AutoVerScheme/beexamined_deviceitem.ui +++ b/softwareDirectory/AutoVerScheme/beexamined_deviceitem.ui @@ -32,7 +32,7 @@ - 0 + 1 @@ -793,7 +793,7 @@ XXX - 2 + 3 false @@ -811,16 +811,39 @@ - + - 核查项目及核查点: + 检定项目及检定点: - + + + + + + + + Qt::Horizontal + + + + 1506 + 20 + + + + + + + + + + + diff --git a/softwareDirectory/AutoVerScheme/create_task.cpp b/softwareDirectory/AutoVerScheme/create_task.cpp index 52a0ba7..c9bdffa 100644 --- a/softwareDirectory/AutoVerScheme/create_task.cpp +++ b/softwareDirectory/AutoVerScheme/create_task.cpp @@ -231,7 +231,11 @@ // 编辑按钮 点击事件 进入详情页面 // ==================================================================================== //DeviceInfoInit(id); + + DisplayButton(); + //查询出所有委托方 + //SetPartPageComBox(); SelectPageData(id); TaskId=id; ui->TitleLable->setText("编辑任务单"); @@ -315,6 +319,7 @@ { if(ListId.count()!=0) { + SelectDataItem.clear(); _IdList=ListId; ui->tableWidgetItem->setRowCount(0); // 调用数据库管理器的函数获取数据 @@ -329,14 +334,14 @@ { rowCount = ui->tableWidgetItem->rowCount(); ui->tableWidgetItem->insertRow(rowCount); - ui->tableWidgetItem->setItem(row, 0, new QTableWidgetItem(QString::number(row+1))); - ui->tableWidgetItem->setItem(row, 1, new QTableWidgetItem(result[0].equipment_name)); - ui->tableWidgetItem->setItem(row, 2, new QTableWidgetItem(result[0].model)); - ui->tableWidgetItem->setItem(row, 3, new QTableWidgetItem(result[0].help_instruction)); - ui->tableWidgetItem->setItem(row, 4, new QTableWidgetItem(result[0].manufacture_no)); - ui->tableWidgetItem->setItem(row, 5, new QTableWidgetItem(result[0].manufacturer)); - ui->tableWidgetItem->setItem(row, 6, new QTableWidgetItem("点击编辑")); + ui->tableWidgetItem->setItem(row, 1, new QTableWidgetItem(QString::number(row+1))); + ui->tableWidgetItem->setItem(row, 2, new QTableWidgetItem(result[0].equipment_name)); + ui->tableWidgetItem->setItem(row, 3, new QTableWidgetItem(result[0].model)); + ui->tableWidgetItem->setItem(row, 4, new QTableWidgetItem(result[0].help_instruction)); + ui->tableWidgetItem->setItem(row, 5, new QTableWidgetItem(result[0].manufacture_no)); + ui->tableWidgetItem->setItem(row, 6, new QTableWidgetItem(result[0].manufacturer)); ui->tableWidgetItem->setItem(row, 7, new QTableWidgetItem("点击编辑")); + ui->tableWidgetItem->setItem(row, 8, new QTableWidgetItem("点击编辑")); row++; } @@ -353,36 +358,78 @@ // 保存任务单按钮 先新增任务单 后新增任务单设备 // ==================================================================================== bool IsSUCC=false; - //获取选中的委托人ID - QString CustomerID=""; - if(_model->rowCount()>0){ - QModelIndex currentIndex = _model->index(ui->customer_name->currentIndex(),0); - CustomerID=currentIndex.data().toString(); } + //获取检定人ID QString person_id=dbManager.ConvertStaffInfo("用户ID目前固定").id; + //根据用户查出部门ID + QString DeptId=dbManager.ConvertStaffInfo("函数内默认添加").dept_id; + if(State=="Update") { if(TaskId=="")return; - InsertTask insertTask; - insertTask.id=TaskId; + InsertTask insertTask=dbManager.SelectTaskSingle(TaskId); insertTask.order_no=ui->LineEditNumber->text(); - insertTask.customer_name=ui->customer_name->currentText(); insertTask.require_over_time=ui->require_over_time->text(); insertTask.deliverer=ui->deliverer->text(); insertTask.deliverer_tel=ui->deliverer_tel->text(); insertTask.undertaker_name=ui->undertaker_name->text(); insertTask.undertake_time=ui->undertake_time->text(); - - if(ui->is_urgent->currentText()=="是") - { - insertTask.is_urgent=true; - }else{insertTask.is_urgent=false;} insertTask.receive_illustrate=ui->receive_illustrate->text(); - insertTask.customer_id=CustomerID; - IsSUCC=dbManager.UpdateTask(insertTask); - //设备更新 编辑设备待写 + IsSUCC=dbManager.UpdateTask(insertTask); + //设备更新 编辑设备待写 + //1、先删除之前的设备 + dbManager.DeleteTaskSameDevice(TaskId); + dbManager.DeleteTaskInfoRecordDevice(TaskId); + qint64 id = dbManager.generateId(); + //2、将新的设置重新增加到这两张表 + int count=0; + if(SelectDataItem.count()!=0 && _IdList.count()!=0){ + //InsertOrderSampleRelation + foreach(TestedCatDevice DeviceInfo,SelectDataItem) + { + //样品表 + OrderSampleRelation orderSampleRelation; + id = dbManager.generateId(); + orderSampleRelation.id=QString::number(id); + orderSampleRelation.order_id=TaskId; + orderSampleRelation.sample_id=_IdList[count]; + orderSampleRelation.sample_name=DeviceInfo.equipment_name; + orderSampleRelation.sample_model=DeviceInfo.model; + orderSampleRelation.measure_complete_time=QDateTime::currentDateTime(); + IsSUCC=dbManager.InsertOrderSampleRelation(orderSampleRelation); + + //每条设备对应一个信息表数据 + //增加biz_business_lab_executive_info 总信息表 + biz_business_lab_executive_info entity; + entity.id=QString::number(dbManager.generateId()); + entity.order_id=TaskId; + entity.sample_id=_IdList[count]; + entity.create_user_id="函数内默认添加"; + entity.measure_dept_id=DeptId; // + entity.measure_person_id=person_id; + IsSUCC=dbManager.InsertTaskInfoRecord(entity); + + if(!IsSUCC){ShowMessageBox("提示",QString("设备名称为: 1% 添加失败").arg(DeviceInfo.equipment_name));} + count++; + } + }else{ + + biz_business_lab_executive_info entity; + entity.id=QString::number(dbManager.generateId()); + entity.order_id=TaskId; + entity.sample_id=""; + entity.create_user_id="函数内默认添加"; + entity.measure_dept_id=DeptId; // + entity.measure_person_id=person_id; + IsSUCC=dbManager.InsertTaskInfoRecord(entity); + } }else{ + //获取选中的委托人ID + QString CustomerID=""; + if(_model->rowCount()>0){ + QModelIndex currentIndex = _model->index(ui->customer_name->currentIndex(),0); + CustomerID=currentIndex.data().toString(); } //新增任务单 qint64 id = dbManager.generateId(); InsertTask insertTask; @@ -403,15 +450,12 @@ insertTask.receive_illustrate=ui->receive_illustrate->text(); insertTask.customer_id=CustomerID; IsSUCC=dbManager.InsertTaskBasic(insertTask); + //新增任务单设备 + QString NewTaskId=dbManager.getCreateTaskListNew()[0].id; if(IsSUCC) { - //根据用户查出部门ID - QString DeptId=dbManager.ConvertStaffInfo("函数内默认添加").dept_id; - - //新增任务单设备 - QString NewTaskId=dbManager.getCreateTaskListNew()[0].id; int count=0; if(SelectDataItem.count()!=0 && _IdList.count()!=0){ //InsertOrderSampleRelation diff --git a/softwareDirectory/AutoVerScheme/create_task.ui b/softwareDirectory/AutoVerScheme/create_task.ui index 4f6f542..46e2f82 100644 --- a/softwareDirectory/AutoVerScheme/create_task.ui +++ b/softwareDirectory/AutoVerScheme/create_task.ui @@ -38,7 +38,7 @@ - 0 + 1 diff --git a/softwareDirectory/AutoVerScheme/datasyncview.cpp b/softwareDirectory/AutoVerScheme/datasyncview.cpp index 74cd41d..fbf4508 100644 --- a/softwareDirectory/AutoVerScheme/datasyncview.cpp +++ b/softwareDirectory/AutoVerScheme/datasyncview.cpp @@ -1,5 +1,10 @@ #include "datasyncview.h" #include "ui_datasyncview.h" +#include "synctask.h" +#include "databaseconnection.h" +#include "mainsysdatabaseconnection.h" + + DataSyncView::DataSyncView(QWidget *parent) : QWidget(parent), @@ -38,7 +43,18 @@ QStringList headers; headers << "序号" << "同步时间" << "是否同步成功" << "备注" ; ui->tableWidget->setHorizontalHeaderLabels(headers); +} +void DataSyncView::on_DownloadDataButton_clicked() +{ + //从主系统下载 - - +} +void DataSyncView::syncTable() +{ + //连接两个数据库 + bool IsOpen=false; + DatabaseConnection *Conn=DatabaseConnection::getInstance(); + IsOpen=Conn->open(); + //MainSysDatabaseConnection *MainConn=MainSysDatabaseConnection::getInstance(); + //IsOpen=MainConn->open(); } diff --git a/softwareDirectory/AutoVerScheme/datasyncview.h b/softwareDirectory/AutoVerScheme/datasyncview.h index 9a73de9..174480e 100644 --- a/softwareDirectory/AutoVerScheme/datasyncview.h +++ b/softwareDirectory/AutoVerScheme/datasyncview.h @@ -17,6 +17,9 @@ private slots: void initForm(); //初始化界面数据 + void on_DownloadDataButton_clicked(); + //异步更新 + void syncTable(); private: Ui::DataSyncView *ui; }; diff --git a/softwareDirectory/AutoVerScheme/datasyncview.ui b/softwareDirectory/AutoVerScheme/datasyncview.ui index 1000b22..53c379c 100644 --- a/softwareDirectory/AutoVerScheme/datasyncview.ui +++ b/softwareDirectory/AutoVerScheme/datasyncview.ui @@ -131,7 +131,7 @@ - + background-color:#334582; font: bold 18px Arial, sans-serif; diff --git a/softwareDirectory/AutoVerScheme/mainsysdatabaseconnection.cpp b/softwareDirectory/AutoVerScheme/mainsysdatabaseconnection.cpp new file mode 100644 index 0000000..b9d4328 --- /dev/null +++ b/softwareDirectory/AutoVerScheme/mainsysdatabaseconnection.cpp @@ -0,0 +1,54 @@ +#include "mainsysdatabaseconnection.h" + + + + +MainSysDatabaseConnection* MainSysDatabaseConnection::Connect = nullptr; +QMutex MainSysDatabaseConnection::mutex; + +MainSysDatabaseConnection::MainSysDatabaseConnection() +{ + + // 连接数据库 + db = QSqlDatabase::addDatabase("QODBC"); + db.setHostName("111.198.10.15"); + db.setDatabaseName("casic_metering_xichang"); + db.setPort(21906); + db.setUserName("zdjdcs"); + db.setPassword("11111111"); + /* db.setHostName("localhost"); + db.setDatabaseName("zdjd"); + db.setPort(3306); + db.setUserName("root"); + db.setPassword("123456");*/ + + +} +MainSysDatabaseConnection::~MainSysDatabaseConnection() { + // 在析构函数中关闭数据库连接 + close(); +} +bool MainSysDatabaseConnection::open() { + return db.open(); +} +bool MainSysDatabaseConnection::isopen() { + return db.isOpen(); +} + +void MainSysDatabaseConnection::close() { + db.close(); +} + +QSqlDatabase& MainSysDatabaseConnection::getDatabase() { + return db; +} +MainSysDatabaseConnection* MainSysDatabaseConnection::getInstance() +{ + if (!Connect) { + QMutexLocker locker(&mutex); + if (!Connect) { + Connect = new MainSysDatabaseConnection(); + } + } + return Connect; +} diff --git a/softwareDirectory/AutoVerScheme/mainsysdatabaseconnection.h b/softwareDirectory/AutoVerScheme/mainsysdatabaseconnection.h new file mode 100644 index 0000000..88ab1e7 --- /dev/null +++ b/softwareDirectory/AutoVerScheme/mainsysdatabaseconnection.h @@ -0,0 +1,39 @@ +#ifndef DATABASECONNECTION_H +#define DATABASECONNECTION_H +#include +#include +#include + +class MainSysDatabaseConnection +{ + + +public: + //获取数据库实例 + static MainSysDatabaseConnection* getInstance(); + + MainSysDatabaseConnection(); + ~MainSysDatabaseConnection(); + bool open(); + bool isopen(); + void close(); + QSqlDatabase& getDatabase(); +private: + //单列模式 保证MainSysDatabaseConnection的唯一性 + static MainSysDatabaseConnection* Connect; + //QMutex 来确保在多线程环境下单例的正确创建。 + static QMutex mutex; + + //这是拷贝构造函数的声明,后面跟着 = delete; 表示这个构造函数被删除了。 + //这意味着你不能通过拷贝另一个 DatabaseConnection 对象来创建新的 DatabaseConnection 对象。 + //如果尝试这样做,编译器会报错。 + MainSysDatabaseConnection(const MainSysDatabaseConnection&) = delete; + //这是拷贝赋值运算符的声明,同样后面跟着 = delete; 表示这个运算符被删除了。 + //这意味着你不能将一个 DatabaseConnection 对象赋值给另一个 DatabaseConnection 对象。 + //如果尝试这样做,编译器同样会报错。 + MainSysDatabaseConnection& operator=(const MainSysDatabaseConnection&) = delete; + //数据库db类 + QSqlDatabase db; +}; + +#endif // DATABASECONNECTION_H diff --git a/softwareDirectory/AutoVerScheme/rulefileitem.cpp b/softwareDirectory/AutoVerScheme/rulefileitem.cpp index dfd8ab6..3b5e4b3 100644 --- a/softwareDirectory/AutoVerScheme/rulefileitem.cpp +++ b/softwareDirectory/AutoVerScheme/rulefileitem.cpp @@ -18,6 +18,8 @@ void RuleFileItem::initForm() { + + //tableWidget设置 //设置控件的边框显示 ui->tableWidget->setStyleSheet("QHeaderView::section {" diff --git a/softwareDirectory/AutoVerScheme/synctask.cpp b/softwareDirectory/AutoVerScheme/synctask.cpp new file mode 100644 index 0000000..80ed96f --- /dev/null +++ b/softwareDirectory/AutoVerScheme/synctask.cpp @@ -0,0 +1,55 @@ +#include "synctask.h" +#include "QMap" + +SyncTask::SyncTask(const QSqlDatabase &srcDb, + const QSqlDatabase &dstDb, const QString &tableName) +{ + sourceDatabase=srcDb; + destinationDatabase=dstDb; + SyncTask::tableName=tableName; +} +void SyncTask::run() +{ + this->syncTable(); +} +QMap> SyncTask::syncTable() +{ + QMap> Info; + int errorindex=0; + QList errorinfo; + + // 清空目标数据库中的表数据 + QSqlQuery clearQuery(destinationDatabase); + clearQuery.prepare("DELETE FROM " + tableName); + if (!clearQuery.exec()) { + qDebug() << "Error clearing table:" << clearQuery.lastError().text(); + errorindex=1; + errorinfo.append("删除本地表:"+tableName+"时出错"); + } + // 从源数据库复制数据到目标数据库 + QSqlQuery copyQuery(sourceDatabase); + copyQuery.prepare("SELECT * FROM " + tableName); + if (!copyQuery.exec()) { + qDebug() << "Error selecting from source table:" << copyQuery.lastError().text(); + errorindex=1; + errorinfo.append("查询主系统表:"+tableName+"时出错"); + } + while (copyQuery.next()) { + // 构建插入语句并执行 + QStringList values; + for (int i = 0; i < copyQuery.record().count(); ++i) { + values << copyQuery.value(i).toString(); // 简化处理,可能需要更复杂的逻辑 + } + QSqlQuery insertQuery(destinationDatabase); + insertQuery.prepare("INSERT INTO " + tableName + " VALUES (" + values.join(",") + ")"); + if (!insertQuery.exec()) { + qDebug() << "Error inserting into destination table:" << insertQuery.lastError().text(); + errorindex=1; + errorinfo.append("添加本地系统表:"+tableName+"时出错"); + break; // 或者可以记录错误并继续 + } + } + Info.insert(errorindex,errorinfo); + return Info; + +} diff --git a/softwareDirectory/AutoVerScheme/AutoVerScheme.pro b/softwareDirectory/AutoVerScheme/AutoVerScheme.pro index 145840b..bf70fab 100644 --- a/softwareDirectory/AutoVerScheme/AutoVerScheme.pro +++ b/softwareDirectory/AutoVerScheme/AutoVerScheme.pro @@ -48,12 +48,14 @@ inspectdataitem.cpp \ loginwindow.cpp \ main.cpp \ + mainsysdatabaseconnection.cpp \ mainwindow.cpp \ my_task.cpp \ newcheckmethod.cpp \ newverifymethod.cpp \ rulefileitem.cpp \ standard_deviceitem.cpp \ + synctask.cpp \ testdataitem.cpp \ testview.cpp \ verifydevice.cpp \ @@ -95,12 +97,14 @@ infomanageview.h \ inspectdataitem.h \ loginwindow.h \ + mainsysdatabaseconnection.h \ mainwindow.h \ my_task.h \ newcheckmethod.h \ newverifymethod.h \ rulefileitem.h \ standard_deviceitem.h \ + synctask.h \ testdataitem.h \ testview.h \ verifydevice.h \ diff --git a/softwareDirectory/AutoVerScheme/basecommonapi.cpp b/softwareDirectory/AutoVerScheme/basecommonapi.cpp index b8846b2..572246e 100644 --- a/softwareDirectory/AutoVerScheme/basecommonapi.cpp +++ b/softwareDirectory/AutoVerScheme/basecommonapi.cpp @@ -511,6 +511,37 @@ return isSuccess; } +//单独查询任务单表 +//更新 任务单 +InsertTask BaseCommonApi::SelectTaskSingle(QString order_id) +{ + InsertTask result; + QSqlQuery query; + query.prepare("SELECT * From biz_business_order_info WHERE id=:order_id"); + // 将参数绑定到占位符 + query.bindValue(":order_id", order_id); + if (query.exec()) { + while (query.next()) { + result.id = query.value("id").toString(); + result.customer_name = query.value("customer_name").toString(); + result.require_over_time = query.value("require_over_time").toString(); + result.deliverer = query.value("deliverer").toString(); + result.deliverer_tel = query.value("deliverer_tel").toString(); + result.undertaker_name = query.value("undertaker_name").toString(); + result.undertake_time = query.value("undertake_time").toString(); + bool is_urgent=false; + if(query.value("is_urgent").toString()=="是"){is_urgent=true;}else{is_urgent=false;}; + result.is_urgent = is_urgent; + result.receive_illustrate = query.value("receive_illustrate").toString(); + result.customer_id = query.value("customer_id").toString(); + + } + } else { + qDebug() << "Query execution failed: " << query.lastError().text(); + } + + return result; +} //删除任务单 bool BaseCommonApi::DeleteTask(QString id) { @@ -533,6 +564,38 @@ return allSuccessful; } +//删除任务单信息记录表同一任务ID的设备 +bool BaseCommonApi::DeleteTaskInfoRecordDevice(QString order_id) +{ + QSqlQuery query; + + //删除任务单样品表数据 + query.prepare("DELETE FROM biz_business_lab_executive_info WHERE order_id = :id"); + query.bindValue(":id", order_id); + + if (!query.exec()) { + qDebug() << "删除失败 " << query.lastError().text(); + return false; + } + + return true; +} +//删除任务详情表同一任务ID的设备 +bool BaseCommonApi::DeleteTaskSameDevice(QString order_id) +{ + QSqlQuery query; + + //删除任务单样品表数据 + query.prepare("DELETE FROM biz_business_order_sample_relation WHERE order_id = :id"); + query.bindValue(":id", order_id); + + if (!query.exec()) { + qDebug() << "删除失败 " << query.lastError().text(); + return false; + } + + return true; +} //删除任务单内设备 bool BaseCommonApi::DeleteTaskDevice(QString id) { @@ -821,8 +884,8 @@ */ //根据被检设备ID获取当前设备的 检定项目及检定点 -/* -QMap> BaseCommonApi::Search_CalibrationTable(QString DeiverId,QMap *HeadList) + +QMap> BaseCommonApi::Search_CalibrationTableClass(QString DeiverId,QMap *HeadList) { QMap> DataList; @@ -834,11 +897,11 @@ case 1: //CliTable[0].id //1717086652508487681 - DataList=BaseCommonApi::getVerMultiCal(CliTable[0].id,HeadList); + DataList=BaseCommonApi::getVerMultiCalClass(CliTable[0].id,HeadList); } return DataList; -}*/ +} //根据被检设备ID获取当前设备的 检定项目及检定点 QList BaseCommonApi::Search_CalibrationTable(QString DeiverId,QStringList *HeadList) { @@ -951,8 +1014,7 @@ return resultData; } //被检设备管理-检定项目及检定点-多功能校准源 -/* -QMap> BaseCommonApi::getVerMultiCal(QString itemId,QMap *headList) +QMap> BaseCommonApi::getVerMultiCalClass(QString itemId,QMap *headList) { QMap> DataMapList; QList resultData; @@ -998,7 +1060,7 @@ DataMapList= GetDataReturnItemList(resultData,DataMapList,headList); return DataMapList; } -*/ + QMap> BaseCommonApi::GetDataReturnItemList(QList ResultData,QMap> DataMapList,QMap *HeadMapList) { @@ -1052,7 +1114,7 @@ Data.append(row[9]); //分辨力 DCVList.append(Data); } - else if(ResultData[2].first()=="ACV") + else if(row[2]=="ACV") { QString VerificationItem=NULL; if(isFirst[1]) @@ -1086,7 +1148,7 @@ } Data.append(row[9]); //分辨力 ACVList.append(Data); - } else if(ResultData[2].first()=="DCI") + } else if(row[2]=="DCI") { QString VerificationItem=NULL; if(isFirst[2]) @@ -1122,7 +1184,7 @@ Data.append(row[9]); //分辨力 DCIList.append(Data); - } else if(ResultData[2].first()=="ACI") + } else if(row[2]=="ACI") { QString VerificationItem=NULL; if(isFirst[3]) @@ -1157,7 +1219,7 @@ } Data.append(row[9]); //分辨力 ACIList.append(Data); - } else if(ResultData[2].first()=="R") + } else if(row[2]=="R") { QString VerificationItem=NULL; if(isFirst[4]) diff --git a/softwareDirectory/AutoVerScheme/basecommonapi.h b/softwareDirectory/AutoVerScheme/basecommonapi.h index da7ce3c..098944a 100644 --- a/softwareDirectory/AutoVerScheme/basecommonapi.h +++ b/softwareDirectory/AutoVerScheme/basecommonapi.h @@ -920,7 +920,7 @@ //判断检定装置表并查询 参数设备id static QList Search_CalibrationTable(QString DeiverId,QStringList *HeadList); - //static QMap> Search_CalibrationTable(QString DeiverId,QMap *HeadList); + static QMap> Search_CalibrationTableClass(QString DeiverId,QMap *HeadList); //判断核查装置表并查询 参数设备id static QList Search_VerifyTable(QString DeiverId,QStringList *HeadList ); @@ -983,7 +983,7 @@ static JudgeCalibrationTable getJudgeVerifyTable(QString id); //被检设备管理-检定项目及检定点-多功能校准源 static QList getVerMultiCal(QString itemId,QStringList *headList); - //static QMap> getVerMultiCal(QString itemId,QMap *headList); + static QMap> getVerMultiCalClass(QString itemId,QMap *headList); static QMap> GetDataReturnItemList(QList ResultData, QMap> DataMapList, QMap *HeadMapList); @@ -1100,6 +1100,10 @@ static QList getMeasureModifyRecord(QString data_id); //查询最新结果保存记录 static SaveDeviceMeasureInfo getNewResultData(); + + static bool DeleteTaskSameDevice(QString order_id); + static bool DeleteTaskInfoRecordDevice(QString order_id); + static InsertTask SelectTaskSingle(QString order_id); }; diff --git a/softwareDirectory/AutoVerScheme/beexamined_deviceitem.cpp b/softwareDirectory/AutoVerScheme/beexamined_deviceitem.cpp index fef3880..00d746b 100644 --- a/softwareDirectory/AutoVerScheme/beexamined_deviceitem.cpp +++ b/softwareDirectory/AutoVerScheme/beexamined_deviceitem.cpp @@ -46,18 +46,7 @@ << "生产厂家"<<"所在单位" <<"使用部门"<<"计量标识"<<"检定周期"<<"证书有效期"<<"操作"; ui->tableWidget->setHorizontalHeaderLabels(headers); - //详情页面tableWidgetItem设置 - ui->tableWidgetItem->setStyleSheet("QHeaderView::section {" - "border: 1px solid rgba(197, 196, 196, 1);" - "border-left:none;" - "border-top:none;" - "background-color:white;" - "}"); - // ui->tableWidget->setRowCount(10); // 设置10行 - //ui->tableWidgetItem->setColumnCount(14); // 设置11列 - ui->tableWidgetItem->setColumnWidth(0, 80); // 设置第一列的宽度为100像素 - ui->tableWidgetItem->verticalHeader()->setParent(nullptr); //隐藏行头 } void BeExamined_DeviceItem::ShowMessageBox(QString title,QString value) { @@ -195,53 +184,116 @@ // 初始化检定项目及核查点 // ==================================================================================== - //获取核查点tablewight的数据 - QStringList headlist; - - QList Data=dbManager.Search_CalibrationTable(id,&headlist); - //QList Data; - //tableWidgetItem - ui->tableWidgetItem->setRowCount(0); - ui->tableWidgetItem->setColumnCount(headlist.count()); - ui->tableWidgetItem->setHorizontalHeaderLabels(headlist); - //循环数据 - int rowCount=0; - int row=0; - - for (const QStringList& item : Data) - { - //获取行号 并进行添加行 - rowCount = ui->tableWidgetItem->rowCount(); - ui->tableWidgetItem->insertRow(rowCount); - //添加 序号 - ui->tableWidgetItem->setItem(row, 0, new QTableWidgetItem(QString::number(row+1))); - //循环读取值 headlist,count是列的数量 - for(int i=1;itableWidgetItem->setItem(row, i, new QTableWidgetItem(item[i])); - } - - row++; - + //重写核查点显示 + //每个检定项目列头 + QMap headListItem; //例 + //每个检定项目数据 + QMap> dataListItem; //例 + dataListItem=dbManager.Search_CalibrationTableClass(id,&headListItem); + QHBoxLayout *layout = ui->HeadListLayout; + QStackedWidget *stackedWidget = ui->stackedWidgetData; + //数据清空 + // 清空QStackedWidget中的所有页 + while (stackedWidget->count() > 0) { + QWidget *widget = stackedWidget->widget(0); // 获取第一个子部件 + stackedWidget->removeWidget(widget); // 从堆叠部件中移除 + delete widget; // 删除部件,防止内存泄漏 } + // 清空QHBoxLayout中的所有QPushButton + while (QLayoutItem *item = layout->takeAt(0)) { + QWidget *widget = item->widget(); + if (widget && qobject_cast(widget)) { + // 移除并删除QPushButton + delete widget; + } + } + int index = 0; + for (const auto &item : headListItem) { + QTableWidget *tableWidget = new QTableWidget(this); + tableWidget->setColumnCount(item.count()); + tableWidget->setHorizontalHeaderLabels(item); + //设置tableWidget样式表 + tableWidget->verticalHeader()->setParent(nullptr); //隐藏行头 + tableWidget->setStyleSheet("QHeaderView::section {" + "border: 1px solid rgba(197, 196, 196, 1);" + "border-left:none;" + "border-top:none;" + "background-color:white;" + "}"); + + // ======================================================================================== + // 数据循环显示 + // ==================================================================================== + int rowCount=0; + const auto &dataRes = dataListItem.value(headListItem.keys()[index]); + //tableWidget->setRowCount(data.count()); + + for (int i = 0; i < dataRes.count(); ++i) { + //获取行号 并进行添加行 + rowCount = tableWidget->rowCount(); + tableWidget->insertRow(rowCount); + tableWidget->setItem(i, 0, new QTableWidgetItem(QString::number(i+1))); + for(int j=1;jsetItem(i, j, new QTableWidgetItem(dataRes[i][j])); + } + + } + + stackedWidget->insertWidget(index,tableWidget); + // ======================================================================================== + // 按钮设置显示 + // ==================================================================================== + QPushButton *button = new QPushButton(headListItem.keys()[index], 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 {" + "background-color: blue;" // 选中时变为蓝色背景 + "}"); + + layout->addWidget(button); + connect(button, &QPushButton::clicked, stackedWidget, [stackedWidget, index]() { + stackedWidget->setCurrentIndex(index); + }); + + ++index; + } + //默认启动第一个页面 + stackedWidget->setCurrentIndex(0); + } void BeExamined_DeviceItem::SetHomePaheCombox(TestedDevice entity) { if(comboBoxContainsItem(ui->name,entity.equipment_name)){ - ui->name->addItem(entity.model); + ui->name->addItem(entity.equipment_name); } if(comboBoxContainsItem(ui->mode,entity.model)){ - ui->mode->addItem(entity.equipment_name); + ui->mode->addItem(entity.model); } if(comboBoxContainsItem(ui->manufacturer_2,entity.manufacturer)){ ui->manufacturer_2->addItem(entity.manufacturer); } if(comboBoxContainsItem(ui->Buildinguser,entity.customer_name)){ - ui->Buildinguser->addItem(entity.manufacturer); + ui->Buildinguser->addItem(entity.customer_name); } if(comboBoxContainsItem(ui->dept_2,entity.FULL_NAME)){ - ui->dept_2->addItem(entity.manufacturer); + ui->dept_2->addItem(entity.FULL_NAME); } } diff --git a/softwareDirectory/AutoVerScheme/beexamined_deviceitem.ui b/softwareDirectory/AutoVerScheme/beexamined_deviceitem.ui index 0e06ed9..30ff535 100644 --- a/softwareDirectory/AutoVerScheme/beexamined_deviceitem.ui +++ b/softwareDirectory/AutoVerScheme/beexamined_deviceitem.ui @@ -32,7 +32,7 @@ - 0 + 1 @@ -793,7 +793,7 @@ XXX - 2 + 3 false @@ -811,16 +811,39 @@ - + - 核查项目及核查点: + 检定项目及检定点: - + + + + + + + + Qt::Horizontal + + + + 1506 + 20 + + + + + + + + + + + diff --git a/softwareDirectory/AutoVerScheme/create_task.cpp b/softwareDirectory/AutoVerScheme/create_task.cpp index 52a0ba7..c9bdffa 100644 --- a/softwareDirectory/AutoVerScheme/create_task.cpp +++ b/softwareDirectory/AutoVerScheme/create_task.cpp @@ -231,7 +231,11 @@ // 编辑按钮 点击事件 进入详情页面 // ==================================================================================== //DeviceInfoInit(id); + + DisplayButton(); + //查询出所有委托方 + //SetPartPageComBox(); SelectPageData(id); TaskId=id; ui->TitleLable->setText("编辑任务单"); @@ -315,6 +319,7 @@ { if(ListId.count()!=0) { + SelectDataItem.clear(); _IdList=ListId; ui->tableWidgetItem->setRowCount(0); // 调用数据库管理器的函数获取数据 @@ -329,14 +334,14 @@ { rowCount = ui->tableWidgetItem->rowCount(); ui->tableWidgetItem->insertRow(rowCount); - ui->tableWidgetItem->setItem(row, 0, new QTableWidgetItem(QString::number(row+1))); - ui->tableWidgetItem->setItem(row, 1, new QTableWidgetItem(result[0].equipment_name)); - ui->tableWidgetItem->setItem(row, 2, new QTableWidgetItem(result[0].model)); - ui->tableWidgetItem->setItem(row, 3, new QTableWidgetItem(result[0].help_instruction)); - ui->tableWidgetItem->setItem(row, 4, new QTableWidgetItem(result[0].manufacture_no)); - ui->tableWidgetItem->setItem(row, 5, new QTableWidgetItem(result[0].manufacturer)); - ui->tableWidgetItem->setItem(row, 6, new QTableWidgetItem("点击编辑")); + ui->tableWidgetItem->setItem(row, 1, new QTableWidgetItem(QString::number(row+1))); + ui->tableWidgetItem->setItem(row, 2, new QTableWidgetItem(result[0].equipment_name)); + ui->tableWidgetItem->setItem(row, 3, new QTableWidgetItem(result[0].model)); + ui->tableWidgetItem->setItem(row, 4, new QTableWidgetItem(result[0].help_instruction)); + ui->tableWidgetItem->setItem(row, 5, new QTableWidgetItem(result[0].manufacture_no)); + ui->tableWidgetItem->setItem(row, 6, new QTableWidgetItem(result[0].manufacturer)); ui->tableWidgetItem->setItem(row, 7, new QTableWidgetItem("点击编辑")); + ui->tableWidgetItem->setItem(row, 8, new QTableWidgetItem("点击编辑")); row++; } @@ -353,36 +358,78 @@ // 保存任务单按钮 先新增任务单 后新增任务单设备 // ==================================================================================== bool IsSUCC=false; - //获取选中的委托人ID - QString CustomerID=""; - if(_model->rowCount()>0){ - QModelIndex currentIndex = _model->index(ui->customer_name->currentIndex(),0); - CustomerID=currentIndex.data().toString(); } + //获取检定人ID QString person_id=dbManager.ConvertStaffInfo("用户ID目前固定").id; + //根据用户查出部门ID + QString DeptId=dbManager.ConvertStaffInfo("函数内默认添加").dept_id; + if(State=="Update") { if(TaskId=="")return; - InsertTask insertTask; - insertTask.id=TaskId; + InsertTask insertTask=dbManager.SelectTaskSingle(TaskId); insertTask.order_no=ui->LineEditNumber->text(); - insertTask.customer_name=ui->customer_name->currentText(); insertTask.require_over_time=ui->require_over_time->text(); insertTask.deliverer=ui->deliverer->text(); insertTask.deliverer_tel=ui->deliverer_tel->text(); insertTask.undertaker_name=ui->undertaker_name->text(); insertTask.undertake_time=ui->undertake_time->text(); - - if(ui->is_urgent->currentText()=="是") - { - insertTask.is_urgent=true; - }else{insertTask.is_urgent=false;} insertTask.receive_illustrate=ui->receive_illustrate->text(); - insertTask.customer_id=CustomerID; - IsSUCC=dbManager.UpdateTask(insertTask); - //设备更新 编辑设备待写 + IsSUCC=dbManager.UpdateTask(insertTask); + //设备更新 编辑设备待写 + //1、先删除之前的设备 + dbManager.DeleteTaskSameDevice(TaskId); + dbManager.DeleteTaskInfoRecordDevice(TaskId); + qint64 id = dbManager.generateId(); + //2、将新的设置重新增加到这两张表 + int count=0; + if(SelectDataItem.count()!=0 && _IdList.count()!=0){ + //InsertOrderSampleRelation + foreach(TestedCatDevice DeviceInfo,SelectDataItem) + { + //样品表 + OrderSampleRelation orderSampleRelation; + id = dbManager.generateId(); + orderSampleRelation.id=QString::number(id); + orderSampleRelation.order_id=TaskId; + orderSampleRelation.sample_id=_IdList[count]; + orderSampleRelation.sample_name=DeviceInfo.equipment_name; + orderSampleRelation.sample_model=DeviceInfo.model; + orderSampleRelation.measure_complete_time=QDateTime::currentDateTime(); + IsSUCC=dbManager.InsertOrderSampleRelation(orderSampleRelation); + + //每条设备对应一个信息表数据 + //增加biz_business_lab_executive_info 总信息表 + biz_business_lab_executive_info entity; + entity.id=QString::number(dbManager.generateId()); + entity.order_id=TaskId; + entity.sample_id=_IdList[count]; + entity.create_user_id="函数内默认添加"; + entity.measure_dept_id=DeptId; // + entity.measure_person_id=person_id; + IsSUCC=dbManager.InsertTaskInfoRecord(entity); + + if(!IsSUCC){ShowMessageBox("提示",QString("设备名称为: 1% 添加失败").arg(DeviceInfo.equipment_name));} + count++; + } + }else{ + + biz_business_lab_executive_info entity; + entity.id=QString::number(dbManager.generateId()); + entity.order_id=TaskId; + entity.sample_id=""; + entity.create_user_id="函数内默认添加"; + entity.measure_dept_id=DeptId; // + entity.measure_person_id=person_id; + IsSUCC=dbManager.InsertTaskInfoRecord(entity); + } }else{ + //获取选中的委托人ID + QString CustomerID=""; + if(_model->rowCount()>0){ + QModelIndex currentIndex = _model->index(ui->customer_name->currentIndex(),0); + CustomerID=currentIndex.data().toString(); } //新增任务单 qint64 id = dbManager.generateId(); InsertTask insertTask; @@ -403,15 +450,12 @@ insertTask.receive_illustrate=ui->receive_illustrate->text(); insertTask.customer_id=CustomerID; IsSUCC=dbManager.InsertTaskBasic(insertTask); + //新增任务单设备 + QString NewTaskId=dbManager.getCreateTaskListNew()[0].id; if(IsSUCC) { - //根据用户查出部门ID - QString DeptId=dbManager.ConvertStaffInfo("函数内默认添加").dept_id; - - //新增任务单设备 - QString NewTaskId=dbManager.getCreateTaskListNew()[0].id; int count=0; if(SelectDataItem.count()!=0 && _IdList.count()!=0){ //InsertOrderSampleRelation diff --git a/softwareDirectory/AutoVerScheme/create_task.ui b/softwareDirectory/AutoVerScheme/create_task.ui index 4f6f542..46e2f82 100644 --- a/softwareDirectory/AutoVerScheme/create_task.ui +++ b/softwareDirectory/AutoVerScheme/create_task.ui @@ -38,7 +38,7 @@ - 0 + 1 diff --git a/softwareDirectory/AutoVerScheme/datasyncview.cpp b/softwareDirectory/AutoVerScheme/datasyncview.cpp index 74cd41d..fbf4508 100644 --- a/softwareDirectory/AutoVerScheme/datasyncview.cpp +++ b/softwareDirectory/AutoVerScheme/datasyncview.cpp @@ -1,5 +1,10 @@ #include "datasyncview.h" #include "ui_datasyncview.h" +#include "synctask.h" +#include "databaseconnection.h" +#include "mainsysdatabaseconnection.h" + + DataSyncView::DataSyncView(QWidget *parent) : QWidget(parent), @@ -38,7 +43,18 @@ QStringList headers; headers << "序号" << "同步时间" << "是否同步成功" << "备注" ; ui->tableWidget->setHorizontalHeaderLabels(headers); +} +void DataSyncView::on_DownloadDataButton_clicked() +{ + //从主系统下载 - - +} +void DataSyncView::syncTable() +{ + //连接两个数据库 + bool IsOpen=false; + DatabaseConnection *Conn=DatabaseConnection::getInstance(); + IsOpen=Conn->open(); + //MainSysDatabaseConnection *MainConn=MainSysDatabaseConnection::getInstance(); + //IsOpen=MainConn->open(); } diff --git a/softwareDirectory/AutoVerScheme/datasyncview.h b/softwareDirectory/AutoVerScheme/datasyncview.h index 9a73de9..174480e 100644 --- a/softwareDirectory/AutoVerScheme/datasyncview.h +++ b/softwareDirectory/AutoVerScheme/datasyncview.h @@ -17,6 +17,9 @@ private slots: void initForm(); //初始化界面数据 + void on_DownloadDataButton_clicked(); + //异步更新 + void syncTable(); private: Ui::DataSyncView *ui; }; diff --git a/softwareDirectory/AutoVerScheme/datasyncview.ui b/softwareDirectory/AutoVerScheme/datasyncview.ui index 1000b22..53c379c 100644 --- a/softwareDirectory/AutoVerScheme/datasyncview.ui +++ b/softwareDirectory/AutoVerScheme/datasyncview.ui @@ -131,7 +131,7 @@ - + background-color:#334582; font: bold 18px Arial, sans-serif; diff --git a/softwareDirectory/AutoVerScheme/mainsysdatabaseconnection.cpp b/softwareDirectory/AutoVerScheme/mainsysdatabaseconnection.cpp new file mode 100644 index 0000000..b9d4328 --- /dev/null +++ b/softwareDirectory/AutoVerScheme/mainsysdatabaseconnection.cpp @@ -0,0 +1,54 @@ +#include "mainsysdatabaseconnection.h" + + + + +MainSysDatabaseConnection* MainSysDatabaseConnection::Connect = nullptr; +QMutex MainSysDatabaseConnection::mutex; + +MainSysDatabaseConnection::MainSysDatabaseConnection() +{ + + // 连接数据库 + db = QSqlDatabase::addDatabase("QODBC"); + db.setHostName("111.198.10.15"); + db.setDatabaseName("casic_metering_xichang"); + db.setPort(21906); + db.setUserName("zdjdcs"); + db.setPassword("11111111"); + /* db.setHostName("localhost"); + db.setDatabaseName("zdjd"); + db.setPort(3306); + db.setUserName("root"); + db.setPassword("123456");*/ + + +} +MainSysDatabaseConnection::~MainSysDatabaseConnection() { + // 在析构函数中关闭数据库连接 + close(); +} +bool MainSysDatabaseConnection::open() { + return db.open(); +} +bool MainSysDatabaseConnection::isopen() { + return db.isOpen(); +} + +void MainSysDatabaseConnection::close() { + db.close(); +} + +QSqlDatabase& MainSysDatabaseConnection::getDatabase() { + return db; +} +MainSysDatabaseConnection* MainSysDatabaseConnection::getInstance() +{ + if (!Connect) { + QMutexLocker locker(&mutex); + if (!Connect) { + Connect = new MainSysDatabaseConnection(); + } + } + return Connect; +} diff --git a/softwareDirectory/AutoVerScheme/mainsysdatabaseconnection.h b/softwareDirectory/AutoVerScheme/mainsysdatabaseconnection.h new file mode 100644 index 0000000..88ab1e7 --- /dev/null +++ b/softwareDirectory/AutoVerScheme/mainsysdatabaseconnection.h @@ -0,0 +1,39 @@ +#ifndef DATABASECONNECTION_H +#define DATABASECONNECTION_H +#include +#include +#include + +class MainSysDatabaseConnection +{ + + +public: + //获取数据库实例 + static MainSysDatabaseConnection* getInstance(); + + MainSysDatabaseConnection(); + ~MainSysDatabaseConnection(); + bool open(); + bool isopen(); + void close(); + QSqlDatabase& getDatabase(); +private: + //单列模式 保证MainSysDatabaseConnection的唯一性 + static MainSysDatabaseConnection* Connect; + //QMutex 来确保在多线程环境下单例的正确创建。 + static QMutex mutex; + + //这是拷贝构造函数的声明,后面跟着 = delete; 表示这个构造函数被删除了。 + //这意味着你不能通过拷贝另一个 DatabaseConnection 对象来创建新的 DatabaseConnection 对象。 + //如果尝试这样做,编译器会报错。 + MainSysDatabaseConnection(const MainSysDatabaseConnection&) = delete; + //这是拷贝赋值运算符的声明,同样后面跟着 = delete; 表示这个运算符被删除了。 + //这意味着你不能将一个 DatabaseConnection 对象赋值给另一个 DatabaseConnection 对象。 + //如果尝试这样做,编译器同样会报错。 + MainSysDatabaseConnection& operator=(const MainSysDatabaseConnection&) = delete; + //数据库db类 + QSqlDatabase db; +}; + +#endif // DATABASECONNECTION_H diff --git a/softwareDirectory/AutoVerScheme/rulefileitem.cpp b/softwareDirectory/AutoVerScheme/rulefileitem.cpp index dfd8ab6..3b5e4b3 100644 --- a/softwareDirectory/AutoVerScheme/rulefileitem.cpp +++ b/softwareDirectory/AutoVerScheme/rulefileitem.cpp @@ -18,6 +18,8 @@ void RuleFileItem::initForm() { + + //tableWidget设置 //设置控件的边框显示 ui->tableWidget->setStyleSheet("QHeaderView::section {" diff --git a/softwareDirectory/AutoVerScheme/synctask.cpp b/softwareDirectory/AutoVerScheme/synctask.cpp new file mode 100644 index 0000000..80ed96f --- /dev/null +++ b/softwareDirectory/AutoVerScheme/synctask.cpp @@ -0,0 +1,55 @@ +#include "synctask.h" +#include "QMap" + +SyncTask::SyncTask(const QSqlDatabase &srcDb, + const QSqlDatabase &dstDb, const QString &tableName) +{ + sourceDatabase=srcDb; + destinationDatabase=dstDb; + SyncTask::tableName=tableName; +} +void SyncTask::run() +{ + this->syncTable(); +} +QMap> SyncTask::syncTable() +{ + QMap> Info; + int errorindex=0; + QList errorinfo; + + // 清空目标数据库中的表数据 + QSqlQuery clearQuery(destinationDatabase); + clearQuery.prepare("DELETE FROM " + tableName); + if (!clearQuery.exec()) { + qDebug() << "Error clearing table:" << clearQuery.lastError().text(); + errorindex=1; + errorinfo.append("删除本地表:"+tableName+"时出错"); + } + // 从源数据库复制数据到目标数据库 + QSqlQuery copyQuery(sourceDatabase); + copyQuery.prepare("SELECT * FROM " + tableName); + if (!copyQuery.exec()) { + qDebug() << "Error selecting from source table:" << copyQuery.lastError().text(); + errorindex=1; + errorinfo.append("查询主系统表:"+tableName+"时出错"); + } + while (copyQuery.next()) { + // 构建插入语句并执行 + QStringList values; + for (int i = 0; i < copyQuery.record().count(); ++i) { + values << copyQuery.value(i).toString(); // 简化处理,可能需要更复杂的逻辑 + } + QSqlQuery insertQuery(destinationDatabase); + insertQuery.prepare("INSERT INTO " + tableName + " VALUES (" + values.join(",") + ")"); + if (!insertQuery.exec()) { + qDebug() << "Error inserting into destination table:" << insertQuery.lastError().text(); + errorindex=1; + errorinfo.append("添加本地系统表:"+tableName+"时出错"); + break; // 或者可以记录错误并继续 + } + } + Info.insert(errorindex,errorinfo); + return Info; + +} diff --git a/softwareDirectory/AutoVerScheme/synctask.h b/softwareDirectory/AutoVerScheme/synctask.h new file mode 100644 index 0000000..4a857bd --- /dev/null +++ b/softwareDirectory/AutoVerScheme/synctask.h @@ -0,0 +1,22 @@ +#ifndef SYNCTASK_H +#define SYNCTASK_H + +#include +#include +#include +#include +#include +#include + +class SyncTask : public QRunnable { +public: + SyncTask(const QSqlDatabase &srcDb, const QSqlDatabase &dstDb, const QString &tableName); + + QSqlDatabase sourceDatabase; + QSqlDatabase destinationDatabase; + QString tableName; + void run() override; +private: + QMap> syncTable(); +}; +#endif // STANDARD_DEVICEITEM_H