From e3467578649fcb860555f14f80a47c0e48bad79b Mon Sep 17 00:00:00 2001 From: krivoshein Date: Thu, 30 Jan 2025 16:50:21 +0300 Subject: [PATCH] =?UTF-8?q?taskFIM=20=D0=B7=D0=B0=D0=BF=D0=B8=D1=81=D1=8B?= =?UTF-8?q?=D0=B2=D0=B0=D0=B5=D1=82=D1=81=D1=8F=20=D0=B2=20=D0=B1=D0=B0?= =?UTF-8?q?=D0=B7=D1=83=20=D1=81=20Malfunction?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- DataBaseLMS/databaselms.cpp | 34 +++++++++++++- .../connectorToServer/Core/dataparser.cpp | 5 +++ ServerLMS/Systems/Parsers/processparser.cpp | 44 +++++++++++++++++-- ServerLMS/Systems/Parsers/processparser.h | 4 +- 4 files changed, 80 insertions(+), 7 deletions(-) diff --git a/DataBaseLMS/databaselms.cpp b/DataBaseLMS/databaselms.cpp index dacf733..f5b15b4 100644 --- a/DataBaseLMS/databaselms.cpp +++ b/DataBaseLMS/databaselms.cpp @@ -521,13 +521,43 @@ QList DataBaseLMS::selectTasksAMMofTrainee(int id_trainee) int DataBaseLMS::insertTaskFIM(TaskAmmFim task, int id_trainee) { - QString queryStr = QString("INSERT INTO public.tasks_fim (title, trainee_task) " + QString queryStr; + bool resBool = false; + + resBool = db->transaction(); + + queryStr = QString("INSERT INTO public.tasks_fim (title, trainee_task) " "VALUES ('%1', %2) " "RETURNING tasks_fim.task_id").arg( task.title, QString::number(id_trainee)); - return queryExecInt(queryStr); + int task_id = queryExecInt(queryStr); + if(!task_id) + { + resBool = db->rollback(); + return 0; + } + + for(Malfunction malfanction : task.malfunctionList) + { + queryStr = QString("INSERT INTO public.malfunctions (num, dm_code, description, task_fim_malf) " + "VALUES ('%1', '%2', '%3', %4) " + "RETURNING malfunctions.malfunction_id").arg( + malfanction.num, + malfanction.dmCode, + malfanction.description, + QString::number(task_id)); + + if(!queryExecInt(queryStr)) + { + resBool = db->rollback(); + return 0; + } + } + + resBool = db->commit(); + return task_id; } int DataBaseLMS::updateTaskFIM(TaskAmmFim task) diff --git a/InstructorsAndTrainees/connectorToServer/Core/dataparser.cpp b/InstructorsAndTrainees/connectorToServer/Core/dataparser.cpp index 21e66f5..b0163d6 100644 --- a/InstructorsAndTrainees/connectorToServer/Core/dataparser.cpp +++ b/InstructorsAndTrainees/connectorToServer/Core/dataparser.cpp @@ -201,6 +201,11 @@ QByteArray DataParser::createQueryToDBMessage(ClientQueryToDB *queryToDB, int id xmlWriter.writeEndElement(); xmlWriter.writeEndDocument(); + QFile file("QueryToDB.xml"); + file.open(QIODevice::WriteOnly); + file.write(array); + file.close(); + return array; } diff --git a/ServerLMS/Systems/Parsers/processparser.cpp b/ServerLMS/Systems/Parsers/processparser.cpp index aa91cc2..d6706e5 100644 --- a/ServerLMS/Systems/Parsers/processparser.cpp +++ b/ServerLMS/Systems/Parsers/processparser.cpp @@ -42,7 +42,7 @@ void ProcessParser::read(ClientHandler *client, QByteArray array) else if(xmlReader.name() == "QueryToDB") {//Запрос к базе данных от клиента - queryToDb(xmlReader,client); + queryToDb(xmlReader,client, array); } else if(xmlReader.name() == "QueryTasksXML") {//Запрос файла XML с задачами @@ -92,6 +92,36 @@ void ProcessParser::clientDataInfo(QXmlStreamReader &xmlReader,ClientHandler *cl processingSystem->setCurrentDataInfo(dataInfo); } + +TaskAmmFim ProcessParser::xmlParserQueryToDB_ASSIGN_TASK_FIM_TO_TRAINEE(QByteArray array) +{ + TaskAmmFim task; + + QDomDocument commonDOM; + commonDOM.setContent(array); + + QDomNode mainNode = commonDOM.namedItem("QueryToDB"); + + task.title = mainNode.toElement().attribute("title"); + + for(int i = 0; i < mainNode.childNodes().count(); i++) + { + QDomNode malfunctionNode = mainNode.childNodes().at(i); + if(malfunctionNode.nodeName() == "malfunction") + {//Неисправность + Malfunction malfunction; + + malfunction.num = malfunctionNode.toElement().attribute("num"); + malfunction.dmCode = malfunctionNode.toElement().attribute("dmCode"); + malfunction.description = malfunctionNode.toElement().attribute("description"); + + task.malfunctionList.append(malfunction); + } + } + + return task; +} + void ProcessParser::clientAuth(QXmlStreamReader &xmlReader,ClientHandler *client) { ClientAutorization clientAutorization; @@ -156,7 +186,7 @@ void ProcessParser::toClientMessage(QXmlStreamReader &xmlReader,ClientHandler *c processingSystem->processingToClientMessage(client, toClientMessage); } -void ProcessParser::queryToDb(QXmlStreamReader &xmlReader,ClientHandler *client) +void ProcessParser::queryToDb(QXmlStreamReader &xmlReader,ClientHandler *client, QByteArray array) { ClientQueryToDB queryToDB; int id = 0; @@ -174,7 +204,13 @@ void ProcessParser::queryToDb(QXmlStreamReader &xmlReader,ClientHandler *client) //addTextToLogger(name + ": " + value); if(name == "TypeQuery") + { queryToDB.typeQuery = (TypeQueryToDB)value.toInt(); + if(queryToDB.typeQuery == TypeQueryToDB::TYPE_QUERY_ASSIGN_TASK_FIM_TO_TRAINEE) + { + task = xmlParserQueryToDB_ASSIGN_TASK_FIM_TO_TRAINEE(array); + } + } else if(name == "id") id = value.toInt(); else @@ -238,8 +274,8 @@ void ProcessParser::queryToDb(QXmlStreamReader &xmlReader,ClientHandler *client) task.ammProcedure.dmCode = value; break; case TypeQueryToDB::TYPE_QUERY_ASSIGN_TASK_FIM_TO_TRAINEE: - if(name == "title") - task.title = value; + //if(name == "title") + //task.title = value; break; }; } diff --git a/ServerLMS/Systems/Parsers/processparser.h b/ServerLMS/Systems/Parsers/processparser.h index cf6f8f8..2dca25a 100644 --- a/ServerLMS/Systems/Parsers/processparser.h +++ b/ServerLMS/Systems/Parsers/processparser.h @@ -22,11 +22,13 @@ private: void clientAuth(QXmlStreamReader &xmlReader,ClientHandler *client); void clientDeAuth(QXmlStreamReader &xmlReader,ClientHandler *client); void toClientMessage(QXmlStreamReader &xmlReader,ClientHandler *client); - void queryToDb(QXmlStreamReader &xmlReader,ClientHandler *client); + void queryToDb(QXmlStreamReader &xmlReader,ClientHandler *client, QByteArray array = QByteArray()); void queryTasksXML(QXmlStreamReader &xmlReader,ClientHandler *client); void clientMessage(QXmlStreamReader &xmlReader,ClientHandler *client); void clientNotify(QXmlStreamReader &xmlReader,ClientHandler *client); void clientDataInfo(QXmlStreamReader &xmlReader, ClientHandler *client); + + TaskAmmFim xmlParserQueryToDB_ASSIGN_TASK_FIM_TO_TRAINEE(QByteArray array); }; #endif // PROCESSPARSER_H