From ab05d1fa61706ccff203e5e08b49ad5451a00e27 Mon Sep 17 00:00:00 2001 From: krivoshein Date: Thu, 22 May 2025 12:30:29 +0300 Subject: [PATCH] =?UTF-8?q?=D0=A0=D0=B5=D0=B0=D0=BB=D0=B8=D0=B7=D0=BE?= =?UTF-8?q?=D0=B2=D0=B0=D0=BD=D0=B0=20=D0=BF=D0=B5=D1=80=D0=B5=D0=B4=D0=B0?= =?UTF-8?q?=D1=87=D0=B0=20=D1=80=D0=B5=D0=BF=D0=BE=D1=80=D1=82=D0=BE=D0=B2?= =?UTF-8?q?=20=D0=B2=D0=BC=D0=B5=D1=81=D1=82=D0=B5=20=D1=81=20=D0=B7=D0=B0?= =?UTF-8?q?=D0=B4=D0=B0=D1=87=D0=B0=D0=BC=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- DataBaseLMS/databaselms.cpp | 61 +++++++++++++++++++ DataBaseLMS/tasksAmmFim.h | 2 + .../Core/recognizesystem.cpp | 38 +++++++++--- ServerLMS/Systems/Parsers/dbanswerparser.cpp | 19 ++++++ 4 files changed, 113 insertions(+), 7 deletions(-) diff --git a/DataBaseLMS/databaselms.cpp b/DataBaseLMS/databaselms.cpp index 4f7c57e..c8dba2a 100644 --- a/DataBaseLMS/databaselms.cpp +++ b/DataBaseLMS/databaselms.cpp @@ -810,6 +810,67 @@ QList DataBaseLMS::selectTasksFIMofTrainee(int id_trainee) return QList(); } + + //Выгребаем отчет для этой задачи + int report_id = 0; + queryStr = QString("SELECT reports.report_id " + "FROM public.reports " + "WHERE report_task = %1 " + "ORDER BY reports.report_id ASC").arg( + QString::number(task.getID())); + + QSqlQuery queryReport = QSqlQuery(*db); + + if(queryExec(queryStr, &queryReport)) + { + if (queryReport.first()) + {//Отчет + report_id = queryReport.value(0).toInt(); + task.report.id = report_id; + } + } + else + { + resBool = db->rollback(); + return QList(); + } + + if(report_id) + {//Отчет есть + //Выгребаем все item отчета + + queryStr = QString("SELECT report_items.item_id, report_items.text, report_items.doc, report_items.dm_code, report_items.title, report_items.result, report_items.item_report, report_items.number " + "FROM public.report_items " + "WHERE item_report = %1 " + "ORDER BY report_items.number ASC").arg( + QString::number(report_id)); + + QSqlQuery queryItems = QSqlQuery(*db); + + if(queryExec(queryStr, &queryItems)) + { + while (queryItems.next()) + {//report_item + FIMReportItem reportItem; + reportItem.id = queryItems.value(0).toInt(); + reportItem.text = queryItems.value(1).toString(); + reportItem.procedure.doc = queryItems.value(2).toString(); + reportItem.procedure.dmCode = queryItems.value(3).toString(); + reportItem.procedure.title = queryItems.value(4).toString(); + reportItem.procedure.result = queryItems.value(5).toString(); + //item_report + //number + + task.report.itemList.append(reportItem); + } + } + else + { + resBool = db->rollback(); + return QList(); + } + } + listTasks.append(task); }; } diff --git a/DataBaseLMS/tasksAmmFim.h b/DataBaseLMS/tasksAmmFim.h index 2e5f2d2..e87c75d 100644 --- a/DataBaseLMS/tasksAmmFim.h +++ b/DataBaseLMS/tasksAmmFim.h @@ -51,6 +51,7 @@ public: FIMReportItem(){}; ~FIMReportItem(){}; public: + int id = 0; // для идентификации в БД QString text; // текст, вводимый обучаемым ProcedureID procedure; // ссылка на процедуру, при необходимости }; @@ -61,6 +62,7 @@ public: FIMReport(){}; ~FIMReport(){}; public: + int id = 0; // для идентификации в БД QList itemList; }; diff --git a/InstructorsAndTrainees/connectorToServer/Core/recognizesystem.cpp b/InstructorsAndTrainees/connectorToServer/Core/recognizesystem.cpp index 4da5c17..f181ac6 100644 --- a/InstructorsAndTrainees/connectorToServer/Core/recognizesystem.cpp +++ b/InstructorsAndTrainees/connectorToServer/Core/recognizesystem.cpp @@ -693,17 +693,41 @@ void RecognizeSystem::xmlParserQueryToDB(PacketType packetType, QByteArray array task.status = taskNode.toElement().attribute("status"); for(int j = 0; j < taskNode.childNodes().count(); j++) - {//Неисправности - QDomNode malfunctionNode = taskNode.childNodes().at(j); - if(malfunctionNode.nodeName() == "malfunction") - { + { + QDomNode malfOrReportNode = taskNode.childNodes().at(j); + if(malfOrReportNode.nodeName() == "malfunction") + {//Неисправность Malfunction malfunction; - malfunction.num = malfunctionNode.toElement().attribute("num"); - malfunction.dmCode = malfunctionNode.toElement().attribute("dmCode"); - malfunction.description = malfunctionNode.toElement().attribute("description"); + malfunction.num = malfOrReportNode.toElement().attribute("num"); + malfunction.dmCode = malfOrReportNode.toElement().attribute("dmCode"); + malfunction.description = malfOrReportNode.toElement().attribute("description"); task.malfunctionList.append(malfunction); } + else + if(malfOrReportNode.nodeName() == "report") + {//Отчет + FIMReport report; + report.id = malfOrReportNode.toElement().attribute("report_id").toInt(); + + for(int k = 0; k < malfOrReportNode.childNodes().count(); k++) + { + QDomNode reportItemNode = malfOrReportNode.childNodes().at(k); + if(reportItemNode.nodeName() == "reportItem") + { + FIMReportItem reportItem; + reportItem.id = reportItemNode.toElement().attribute("item_id").toInt(); + reportItem.text = reportItemNode.toElement().attribute("text"); + reportItem.procedure.title = reportItemNode.toElement().attribute("title"); + reportItem.procedure.dmCode = reportItemNode.toElement().attribute("dmCode"); + reportItem.procedure.result = reportItemNode.toElement().attribute("result"); + + report.itemList.append(reportItem); + } + } + + task.report = report; + } } listTasks.append(task); diff --git a/ServerLMS/Systems/Parsers/dbanswerparser.cpp b/ServerLMS/Systems/Parsers/dbanswerparser.cpp index 9a340d1..85b2eec 100644 --- a/ServerLMS/Systems/Parsers/dbanswerparser.cpp +++ b/ServerLMS/Systems/Parsers/dbanswerparser.cpp @@ -153,6 +153,25 @@ QByteArray DBAnswerParser::listTasksFIMofTrainee(bool result, QList malfunctionNode.toElement().setAttribute("num", malfunction.num); malfunctionNode.toElement().setAttribute("description", malfunction.description); } + + + {//FIMReport + FIMReport report = task.report; + QDomNode reportNode = commonDOM.createElement("report"); + taskNode.appendChild(reportNode); + reportNode.toElement().setAttribute("report_id", report.id); + + for(FIMReportItem reportItem : task.report.itemList) + {//report_item + QDomNode reportItemNode = commonDOM.createElement("reportItem"); + reportNode.appendChild(reportItemNode); + reportItemNode.toElement().setAttribute("item_id", reportItem.id); + reportItemNode.toElement().setAttribute("text", reportItem.text); + reportItemNode.toElement().setAttribute("title", reportItem.procedure.title); + reportItemNode.toElement().setAttribute("dmCode", reportItem.procedure.dmCode); + reportItemNode.toElement().setAttribute("result", reportItem.procedure.result); + } + } } dataParser->saveDOMtoXML("ListTasksFIM.xml", &commonDOM);