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); } }