From 4ed2c95cd9ba6940dc92b4e64456eb27f5d1aa0c Mon Sep 17 00:00:00 2001 From: krivoshein Date: Wed, 23 Jul 2025 16:24:38 +0300 Subject: [PATCH] =?UTF-8?q?=D0=A7=D0=B0=D1=81=D1=82=D0=B8=D1=87=D0=BD?= =?UTF-8?q?=D0=B0=D1=8F=20=D0=BF=D0=B5=D1=80=D0=B5=D0=B4=D0=B0=D1=87=D0=B0?= =?UTF-8?q?=20=D0=B7=D0=B0=D0=B4=D0=B0=D1=87=20=D0=B2=20=D0=AE=D0=BD=D0=B8?= =?UTF-8?q?=D1=82=D0=B8=20=D0=B4=D0=BE=D0=B4=D0=B5=D0=BB=D0=B0=D0=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- DataBaseLMS/databaselms.cpp | 154 +++++++++++++++++++++++-- DataBaseLMS/interfacedatabaselms.cpp | 10 ++ DataBaseLMS/interfacedatabaselms.h | 3 + ServerLMS/Systems/processingsystem.cpp | 38 +++++- ServerLMS/Systems/processingsystem.h | 3 + ServerLMS/providerdblms.cpp | 36 ++++++ ServerLMS/providerdblms.h | 3 + 7 files changed, 237 insertions(+), 10 deletions(-) diff --git a/DataBaseLMS/databaselms.cpp b/DataBaseLMS/databaselms.cpp index 8352676..64aa5f3 100644 --- a/DataBaseLMS/databaselms.cpp +++ b/DataBaseLMS/databaselms.cpp @@ -668,13 +668,12 @@ QList DataBaseLMS::selectTasksAMMofTrainee(int id_trainee) TaskAmmFim DataBaseLMS::selectTaskAMMbyID(int id_task) { TaskAmmFim task; -/* - QString queryStr = QString("SELECT tasks_amm.task_id, tasks_amm.title, tasks_amm.dm_code, tasks_amm.status, " - "trainees.trainee_id " - "FROM public.tasks_amm JOIN public.trainees ON trainees.trainee_id = tasks_amm.trainee_task " - "WHERE tasks_amm.trainee_task = %1 " + + QString queryStr = QString("SELECT tasks_amm.task_id, tasks_amm.title, tasks_amm.dm_code, tasks_amm.status " + "FROM public.tasks_amm " + "WHERE tasks_amm.task_id = %1 " "ORDER BY tasks_amm.task_id ASC").arg( - id_trainee); + id_task); QSqlQuery query = QSqlQuery(*db); @@ -688,7 +687,6 @@ TaskAmmFim DataBaseLMS::selectTaskAMMbyID(int id_task) task.status = query.value(3).toString(); } } - */ return task; } @@ -1067,6 +1065,148 @@ TaskAmmFim DataBaseLMS::selectTaskFIMbyID(int id_task) { TaskAmmFim task; + QString queryStr; + bool resBool = false; + + resBool = db->transaction(); + + queryStr = QString("SELECT tasks_fim.task_id, tasks_fim.title, tasks_fim.status " + "FROM public.tasks_fim " + "WHERE tasks_fim.task_id = %1 " + "ORDER BY tasks_fim.task_id ASC").arg( + id_task); + + QSqlQuery query = QSqlQuery(*db); + + if(queryExec(queryStr, &query)) + { + if(query.first()) + {//Задача + + task.setID(query.value(0).toInt()); + task.title = query.value(1).toString(); + task.status = query.value(2).toString(); + + //Выгребаем все malfunction для этой задачи + queryStr = QString("SELECT malfunctions.malfunction_id, malfunctions.num, malfunctions.dm_code, malfunctions.description, " + "tasks_fim.task_id " + "FROM public.malfunctions JOIN public.tasks_fim ON tasks_fim.task_id = malfunctions.task_fim_malf " + "WHERE malfunctions.task_fim_malf = %1 " + "ORDER BY malfunctions.num ASC").arg( + task.getID()); + + QSqlQuery queryMalf = QSqlQuery(*db); + + if(queryExec(queryStr, &queryMalf)) + { + 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); + }; + } + else + { + resBool = db->rollback(); + return task; + } + + + //Выгребаем отчет для этой задачи + 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 task; + } + + 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 task; + } + } + }; + } + else + { + resBool = db->rollback(); + return task; + } + + resBool = db->commit(); return task; } diff --git a/DataBaseLMS/interfacedatabaselms.cpp b/DataBaseLMS/interfacedatabaselms.cpp index 81c450f..a7cca1a 100644 --- a/DataBaseLMS/interfacedatabaselms.cpp +++ b/DataBaseLMS/interfacedatabaselms.cpp @@ -317,6 +317,16 @@ QList InterfaceDataBaseLMS::getListTasksFIMofTrainee(int id_trainee) return selectTasksFIMofTrainee(id_trainee); } +TaskAmmFim InterfaceDataBaseLMS::getTaskAMMbyID(int id_task) +{ + return selectTaskAMMbyID(id_task); +} + +TaskAmmFim InterfaceDataBaseLMS::getTaskFIMbyID(int id_task) +{ + return selectTaskFIMbyID(id_task); +} + int InterfaceDataBaseLMS::newTaskFIM(TaskAmmFim task, int id_trainee) { return insertTaskFIM(task, id_trainee); diff --git a/DataBaseLMS/interfacedatabaselms.h b/DataBaseLMS/interfacedatabaselms.h index 105fb90..a472f82 100644 --- a/DataBaseLMS/interfacedatabaselms.h +++ b/DataBaseLMS/interfacedatabaselms.h @@ -76,6 +76,9 @@ public: QList getListTasksAMMofTrainee(int id_trainee); QList getListTasksFIMofTrainee(int id_trainee); + TaskAmmFim getTaskAMMbyID(int id_task); + TaskAmmFim getTaskFIMbyID(int id_task); + int newTaskFIM(TaskAmmFim task, int id_trainee); int delTaskFIM(int id); int editTaskFIM(TaskAmmFim task); diff --git a/ServerLMS/Systems/processingsystem.cpp b/ServerLMS/Systems/processingsystem.cpp index 96d5119..fa64274 100644 --- a/ServerLMS/Systems/processingsystem.cpp +++ b/ServerLMS/Systems/processingsystem.cpp @@ -317,8 +317,13 @@ void ProcessingSystem::processingClientQueryToDB(ClientHandler *client, ClientQu case TypeQueryToDB::TYPE_QUERY_DEL_TASK_AMM_TO_TRAINEE: { - if(int id_trainee = providerDBLMS->delTaskAMM(id)) + int id_task = id; + TaskAmmFim task = providerDBLMS->getTaskAMMbyID(id_task); + + if(int id_trainee = providerDBLMS->delTaskAMM(id_task)) { + task.status = "deleted"; + //Отправка списка задач AMM всем клиентам GUI //sendListTasksAMMofTraineetoClient(client, id_trainee); emit sigStatusTasksAMMofTraineeChanged(id_trainee); @@ -326,15 +331,21 @@ void ProcessingSystem::processingClientQueryToDB(ClientHandler *client, ClientQu //Отправка списка задач AMM клиенту Юнити if(ClientHandler* clientUnity = getUnityClientById(id_trainee)) {//Есть такой - sendListTasksAMMofTraineetoClient(clientUnity, id_trainee); + //sendListTasksAMMofTraineetoClient(clientUnity, id_trainee); + sendTaskAMMToClient(clientUnity, id_trainee, task); } } break; } case TypeQueryToDB::TYPE_QUERY_DEL_TASK_FIM_TO_TRAINEE: { + int id_task = id; + TaskAmmFim task = providerDBLMS->getTaskFIMbyID(id_task); + if(int id_trainee = providerDBLMS->delTaskFIM(id)) { + task.status = "deleted"; + //Отправка списка задач FIM клиенту GUI //sendListTasksFIMofTraineetoClient(client, id_trainee); emit sigStatusTasksFIMofTraineeChanged(id_trainee); @@ -342,7 +353,8 @@ void ProcessingSystem::processingClientQueryToDB(ClientHandler *client, ClientQu //Отправка списка задач FIM клиенту Юнити if(ClientHandler* clientUnity = getUnityClientById(id_trainee)) {//Есть такой - sendListTasksFIMofTraineetoClient(clientUnity, id_trainee); + //sendListTasksFIMofTraineetoClient(clientUnity, id_trainee); + sendTaskFIMToClient(clientUnity, id_trainee, task); } } break; @@ -563,6 +575,26 @@ void ProcessingSystem::sendListTasksFIMofTraineeByIDtoClient(ClientHandler *clie client->sendFileBlockByteArray(arrayAnswer, PacketType::TYPE_XMLANSWER_QUERY_TASKS_FIM_OF_TRAINEE); } +void ProcessingSystem::sendTaskAMMToClient(ClientHandler *client, int id_trainee, TaskAmmFim task) +{ + QList listTasks; + listTasks.append(task); + + QByteArray arrayAnswer = dataParser->DbAnswer()->listTasksAMMofTrainee(true, &listTasks, id_trainee, false); + //client->sendXmlAnswer(arrayAnswer, PacketType::TYPE_XMLANSWER_QUERY_TASKS_AMM_OF_TRAINEE); + client->sendFileBlockByteArray(arrayAnswer, PacketType::TYPE_XMLANSWER_QUERY_TASKS_AMM_OF_TRAINEE); +} + +void ProcessingSystem::sendTaskFIMToClient(ClientHandler *client, int id_trainee, TaskAmmFim task) +{ + QList listTasks; + listTasks.append(task); + + QByteArray arrayAnswer = dataParser->DbAnswer()->listTasksFIMofTrainee(true, &listTasks, id_trainee, false); + //client->sendXmlAnswer(arrayAnswer, PacketType::TYPE_XMLANSWER_QUERY_TASKS_FIM_OF_TRAINEE); + client->sendFileBlockByteArray(arrayAnswer, PacketType::TYPE_XMLANSWER_QUERY_TASKS_FIM_OF_TRAINEE); +} + void ProcessingSystem::sendTaskListToUnity(ClientHandler *client) { //Отправка списков задач клиенту Юнити diff --git a/ServerLMS/Systems/processingsystem.h b/ServerLMS/Systems/processingsystem.h index c69ae03..dbb7dee 100644 --- a/ServerLMS/Systems/processingsystem.h +++ b/ServerLMS/Systems/processingsystem.h @@ -46,6 +46,9 @@ public: void sendListTasksAMMofTraineeByIDtoClient(ClientHandler* client, int id_trainee, QList listID); void sendListTasksFIMofTraineeByIDtoClient(ClientHandler* client, int id_trainee, QList listID); + void sendTaskAMMToClient(ClientHandler* client, int id_trainee, TaskAmmFim task); + void sendTaskFIMToClient(ClientHandler* client, int id_trainee, TaskAmmFim task); + ClientHandler* getUnityClientById(int id); void processingClientDeAutorization(QString login); signals: diff --git a/ServerLMS/providerdblms.cpp b/ServerLMS/providerdblms.cpp index 8c46229..787d317 100644 --- a/ServerLMS/providerdblms.cpp +++ b/ServerLMS/providerdblms.cpp @@ -437,3 +437,39 @@ QList ProviderDBLMS::GetListTasksFIMofTrainee(int id_trainee) mtxAccess.unlock(); return listTasks; } + +TaskAmmFim ProviderDBLMS::getTaskAMMbyID(int id_task) +{ + TaskAmmFim task; + + mtxAccess.lock(); + + if(! dbLMS->DBisConnected()) + { + mtxAccess.unlock(); + return task; + } + + task = dbLMS->getTaskAMMbyID(id_task); + + mtxAccess.unlock(); + return task; +} + +TaskAmmFim ProviderDBLMS::getTaskFIMbyID(int id_task) +{ + TaskAmmFim task; + + mtxAccess.lock(); + + if(! dbLMS->DBisConnected()) + { + mtxAccess.unlock(); + return task; + } + + task = dbLMS->getTaskFIMbyID(id_task); + + mtxAccess.unlock(); + return task; +} diff --git a/ServerLMS/providerdblms.h b/ServerLMS/providerdblms.h index 9ed4485..671e5df 100644 --- a/ServerLMS/providerdblms.h +++ b/ServerLMS/providerdblms.h @@ -62,6 +62,9 @@ public: QList GetListTasksAMMofTrainee(int id_trainee); QList GetListTasksFIMofTrainee(int id_trainee); + TaskAmmFim getTaskAMMbyID(int id_task); + TaskAmmFim getTaskFIMbyID(int id_task); + Q_SIGNALS: //сигнал о блокировке авторизации void signal_BlockAutorization(bool block);