From 5a3ba9a75c302ab0fb4bbdb53456374f2a8afb39 Mon Sep 17 00:00:00 2001 From: krivoshein Date: Tue, 27 May 2025 09:49:45 +0300 Subject: [PATCH] =?UTF-8?q?=D0=9F=D0=B5=D1=80=D0=B5=D0=B4=20=D0=B4=D0=BE?= =?UTF-8?q?=D1=80=D0=B0=D0=B1=D0=BE=D1=82=D0=BA=D0=BE=D0=B9=20=D1=83=D0=B4?= =?UTF-8?q?=D0=B0=D0=BB=D0=B5=D0=BD=D0=B8=D1=8F=20=D0=B7=D0=B0=D0=B4=D0=B0?= =?UTF-8?q?=D1=87?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- DataBaseLMS/databaselms.cpp | 44 ++++++++++++++++++- .../connectorToServer/Core/dataparser.cpp | 11 ++++- .../Core/recognizesystem.cpp | 13 ++++++ ServerLMS/Systems/Parsers/dbanswerparser.cpp | 8 ++++ ServerLMS/Systems/Parsers/processparser.cpp | 15 +++++++ 5 files changed, 89 insertions(+), 2 deletions(-) diff --git a/DataBaseLMS/databaselms.cpp b/DataBaseLMS/databaselms.cpp index 1a13da2..9eb4060 100644 --- a/DataBaseLMS/databaselms.cpp +++ b/DataBaseLMS/databaselms.cpp @@ -663,11 +663,31 @@ int DataBaseLMS::insertTaskFIM(TaskAmmFim task, int id_trainee) malfanction.description, QString::number(task_id)); - if(!queryExecInt(queryStr)) + int malfunction_id = queryExecInt(queryStr); + if(!malfunction_id) { resBool = db->rollback(); return 0; } + + //Sign + for(MalfunctionSign sign : malfanction.malfunctionSigns) + { + sign.description = sign.description.replace("'", "''"); //Задваиваем одинарные кавычки + + queryStr = QString("INSERT INTO public.malf_sign (type, description, malf_malf_sign) " + "VALUES ('%1', '%2', %3) " + "RETURNING malf_sign.sign_id").arg( + QString::number(sign.type), + sign.description, + QString::number(malfunction_id)); + + if(!queryExecInt(queryStr)) + { + resBool = db->rollback(); + return 0; + } + } } resBool = db->commit(); @@ -831,11 +851,33 @@ QList DataBaseLMS::selectTasksFIMofTrainee(int id_trainee) while (queryMalf.next()) {//Неисправность Malfunction malfanction; + int malfunction_id = 0; + malfunction_id = queryMalf.value(0).toString().toInt(); malfanction.num = queryMalf.value(1).toString(); malfanction.dmCode = queryMalf.value(2).toString(); malfanction.description = queryMalf.value(3).toString(); + //Выгребаем сигналы для этой неисправности + queryStr = QString("SELECT malf_sign.sign_id, malf_sign.type, malf_sign.description " + "FROM public.malf_sign " + "WHERE malf_malf_sign = %1 " + "ORDER BY malf_sign.sign_id ASC").arg( + QString::number(malfunction_id)); + + QSqlQuery querySign = QSqlQuery(*db); + if(queryExec(queryStr, &querySign)) + { + while (querySign.next()) + {//Сигналы + MalfunctionSign sign; + sign.type = querySign.value(1).toString().toInt(); + sign.description = querySign.value(2).toString(); + + malfanction.malfunctionSigns.append(sign); + }; + } + task.addMalfunction(malfanction); }; } diff --git a/InstructorsAndTrainees/connectorToServer/Core/dataparser.cpp b/InstructorsAndTrainees/connectorToServer/Core/dataparser.cpp index 6c75b5f..bd34307 100644 --- a/InstructorsAndTrainees/connectorToServer/Core/dataparser.cpp +++ b/InstructorsAndTrainees/connectorToServer/Core/dataparser.cpp @@ -190,7 +190,16 @@ QByteArray DataParser::createQueryToDBMessage(ClientQueryToDB *queryToDB, int id xmlWriter.writeStartElement("malfunction"); xmlWriter.writeAttribute("dmCode", malfunction.dmCode); xmlWriter.writeAttribute("num", malfunction.num); - xmlWriter.writeAttribute("description", malfunction.description); + xmlWriter.writeAttribute("description", malfunction.description); + + for(MalfunctionSign sign : malfunction.malfunctionSigns) + { + xmlWriter.writeStartElement("malfunctionSign"); + xmlWriter.writeAttribute("type", QString::number(sign.type)); + xmlWriter.writeAttribute("description", sign.description); + xmlWriter.writeEndElement(); + } + xmlWriter.writeEndElement(); } } diff --git a/InstructorsAndTrainees/connectorToServer/Core/recognizesystem.cpp b/InstructorsAndTrainees/connectorToServer/Core/recognizesystem.cpp index f181ac6..ecf5d94 100644 --- a/InstructorsAndTrainees/connectorToServer/Core/recognizesystem.cpp +++ b/InstructorsAndTrainees/connectorToServer/Core/recognizesystem.cpp @@ -702,6 +702,19 @@ void RecognizeSystem::xmlParserQueryToDB(PacketType packetType, QByteArray array malfunction.dmCode = malfOrReportNode.toElement().attribute("dmCode"); malfunction.description = malfOrReportNode.toElement().attribute("description"); + for(int s = 0; s < malfOrReportNode.childNodes().count(); s++) + { + QDomNode signNode = malfOrReportNode.childNodes().at(s); + if(signNode.nodeName() == "malfunctionSign") + { + MalfunctionSign sign; + sign.type = signNode.toElement().attribute("type").toInt(); + sign.description = signNode.toElement().attribute("description"); + + malfunction.malfunctionSigns.append(sign); + } + } + task.malfunctionList.append(malfunction); } else diff --git a/ServerLMS/Systems/Parsers/dbanswerparser.cpp b/ServerLMS/Systems/Parsers/dbanswerparser.cpp index 85b2eec..c5bf6a3 100644 --- a/ServerLMS/Systems/Parsers/dbanswerparser.cpp +++ b/ServerLMS/Systems/Parsers/dbanswerparser.cpp @@ -152,6 +152,14 @@ QByteArray DBAnswerParser::listTasksFIMofTrainee(bool result, QList malfunctionNode.toElement().setAttribute("dmCode", malfunction.dmCode); malfunctionNode.toElement().setAttribute("num", malfunction.num); malfunctionNode.toElement().setAttribute("description", malfunction.description); + + for(MalfunctionSign sign : malfunction.malfunctionSigns) + {//Сигналы + QDomNode signNode = commonDOM.createElement("malfunctionSign"); + malfunctionNode.appendChild(signNode); + signNode.toElement().setAttribute("type", sign.type); + signNode.toElement().setAttribute("description", sign.description); + } } diff --git a/ServerLMS/Systems/Parsers/processparser.cpp b/ServerLMS/Systems/Parsers/processparser.cpp index 531a88b..fd76e0d 100644 --- a/ServerLMS/Systems/Parsers/processparser.cpp +++ b/ServerLMS/Systems/Parsers/processparser.cpp @@ -240,6 +240,21 @@ TaskAmmFim ProcessParser::xmlParserQueryToDB_ASSIGN_TASK_FIM_TO_TRAINEE(QByteArr malfunction.dmCode = malfunctionNode.toElement().attribute("dmCode"); malfunction.description = malfunctionNode.toElement().attribute("description"); + //Сигналы + for(int j = 0; j < malfunctionNode.childNodes().count(); j++) + { + QDomNode signNode = malfunctionNode.childNodes().at(j); + if(signNode.nodeName() == "malfunctionSign") + { + MalfunctionSign sign; + + sign.type = signNode.toElement().attribute("type").toInt(); + sign.description = signNode.toElement().attribute("description"); + + malfunction.malfunctionSigns.append(sign); + } + } + task.malfunctionList.append(malfunction); } }