From 0f7d9e6531a70d05a0db09198ded7112e5f8e341 Mon Sep 17 00:00:00 2001 From: krivoshein Date: Thu, 15 May 2025 17:37:39 +0300 Subject: [PATCH] =?UTF-8?q?=D0=A0=D0=B5=D0=BF=D0=BE=D1=80=D1=82=D1=8B=20?= =?UTF-8?q?=D0=BE=20=D0=B2=D1=8B=D0=BF-=D0=B8=20=D0=B7=D0=B0=D0=B4=D0=B0?= =?UTF-8?q?=D1=87.=20=D0=B2=20=D0=BF=D0=B5=D1=80=D0=B2=D0=BE=D0=BC=20?= =?UTF-8?q?=D0=BF=D1=80=D0=B8=D0=B1=D0=BB=D0=B8=D0=B6=D0=B5=D0=BD=D0=B8?= =?UTF-8?q?=D0=B8.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- DataBaseLMS/databaselms.cpp | 150 ++++++++++++++++++++ DataBaseLMS/databaselms.h | 5 + DataBaseLMS/interfacedatabaselms.cpp | 24 ++++ DataBaseLMS/interfacedatabaselms.h | 4 + DataBaseLMS/tasksAmmFim.h | 2 +- DataBaseLMS/typeQueryToDB.h | 5 +- ServerLMS/Systems/Parsers/processparser.cpp | 32 ++++- ServerLMS/Systems/processingsystem.cpp | 20 +-- ServerLMS/providerdblms.cpp | 15 ++ ServerLMS/providerdblms.h | 3 + 10 files changed, 247 insertions(+), 13 deletions(-) diff --git a/DataBaseLMS/databaselms.cpp b/DataBaseLMS/databaselms.cpp index 0fa245d..4f7c57e 100644 --- a/DataBaseLMS/databaselms.cpp +++ b/DataBaseLMS/databaselms.cpp @@ -543,6 +543,17 @@ int DataBaseLMS::updateTaskAMM(TaskAmmFim task) return queryExecInt(queryStr); } +int DataBaseLMS::updateStatusTaskAMM(int task_id, QString status) +{ + QString queryStr = QString("UPDATE public.tasks_amm SET status = '%1' " + "WHERE task_id = %2 " + "RETURNING tasks_amm.task_id").arg( + status, + QString::number(task_id) ); + + return queryExecInt(queryStr); +} + int DataBaseLMS::deleteTaskAMM(int id_task) { QString queryStr; @@ -677,6 +688,17 @@ int DataBaseLMS::updateTaskFIM(TaskAmmFim task) return queryExecInt(queryStr); } +int DataBaseLMS::updateStatusTaskFIM(int task_id, QString status) +{ + QString queryStr = QString("UPDATE public.tasks_fim SET status = '%1' " + "WHERE task_id = %2 " + "RETURNING tasks_fim.task_id").arg( + status, + QString::number(task_id) ); + + return queryExecInt(queryStr); +} + int DataBaseLMS::deleteTaskFIM(int id_task) { QString queryStr; @@ -801,6 +823,134 @@ QList DataBaseLMS::selectTasksFIMofTrainee(int id_trainee) return listTasks; } +int DataBaseLMS::deleteReportFIM(int task_id) +{ + QString queryStr; + bool resBool = false; + int report_id = 0; + + resBool = db->transaction(); + + queryStr = QString("SELECT reports.report_id " + "FROM public.reports " + "WHERE report_task = %1 " + "ORDER BY reports.report_id ASC").arg( + QString::number(task_id)); + + QSqlQuery query = QSqlQuery(*db); + + if(queryExec(queryStr, &query)) + { + if (query.first()) + {//Отчет + report_id = query.value(0).toInt(); + } + } + if(!report_id) + { + resBool = db->rollback(); + return 0; + } + + + queryStr = QString("DELETE FROM public.report_items " + "WHERE item_report = %1 ").arg( + QString::number(report_id)); + + QSqlQuery query1 = QSqlQuery(*db); + if(!queryExec(queryStr, &query1)) + { + resBool = db->rollback(); + return 0; + } + + queryStr = QString("DELETE FROM public.reports " + "WHERE report_id = %1 ").arg( + QString::number(report_id)); + + if(!queryExec(queryStr, &query1)) + { + resBool = db->rollback(); + return 0; + } + + + queryStr = QString("UPDATE public.tasks_fim SET status = '%1' " + "WHERE task_id = %2 ").arg( + "new", + QString::number(task_id) ); + + if(!queryExec(queryStr, &query1)) + { + resBool = db->rollback(); + return 0; + } + + + resBool = db->commit(); + return report_id; +} + +int DataBaseLMS::insertReportFIM(TaskAmmFim task) +{ + QString queryStr; + bool resBool = false; + + resBool = db->transaction(); + + //task.title = task.title.replace("'", "''"); //Задваиваем одинарные кавычки + + queryStr = QString("INSERT INTO public.reports (report_task) " + "VALUES (%1) " + "RETURNING reports.report_id").arg( + task.getID()); + + int report_id = queryExecInt(queryStr); + if(!report_id) + { + resBool = db->rollback(); + return 0; + } + + int number = 0; + for(FIMReportItem reportItem : task.report.itemList) + { + queryStr = QString("INSERT INTO public.report_items (text, doc, dm_code, title, result, item_report, number) " + "VALUES ('%1', '%2', '%3', '%4', '%5', %6, %7) " + "RETURNING report_items.item_id").arg( + reportItem.text, + reportItem.procedure.doc, + reportItem.procedure.dmCode, + reportItem.procedure.title, + reportItem.procedure.result, + QString::number(report_id), + QString::number(++number)); + + if(!queryExecInt(queryStr)) + { + resBool = db->rollback(); + return 0; + } + } + + /* + queryStr = QString("UPDATE public.tasks_fim SET status = '%1' " + "WHERE task_id = %2 ").arg( + "checkup", + QString::number(task.getID()) ); + + QSqlQuery query1 = QSqlQuery(*db); + if(!queryExec(queryStr, &query1)) + { + resBool = db->rollback(); + return 0; + } + */ + + resBool = db->commit(); + return report_id; +} + Trainee DataBaseLMS::selectTrainee(int id_trainee) { Trainee trainee; diff --git a/DataBaseLMS/databaselms.h b/DataBaseLMS/databaselms.h index d0b258d..108d92a 100644 --- a/DataBaseLMS/databaselms.h +++ b/DataBaseLMS/databaselms.h @@ -68,14 +68,19 @@ protected: //Задача AMM int insertTaskAMM(TaskAmmFim task, int id_trainee); int updateTaskAMM(TaskAmmFim task); + int updateStatusTaskAMM(int task_id, QString status); int deleteTaskAMM(int id_task); QList selectTasksAMMofTrainee(int id_trainee); //Задача FIM int insertTaskFIM(TaskAmmFim task, int id_trainee); int updateTaskFIM(TaskAmmFim task); + int updateStatusTaskFIM(int task_id, QString status); int deleteTaskFIM(int id_task); QList selectTasksFIMofTrainee(int id_trainee); + int deleteReportFIM(int task_id); + int insertReportFIM(TaskAmmFim task); + //Обучаемый Trainee selectTrainee(int id_trainee); QList selectAllTraineesInGroup(int id_group); diff --git a/DataBaseLMS/interfacedatabaselms.cpp b/DataBaseLMS/interfacedatabaselms.cpp index 9fc4abe..31aee2b 100644 --- a/DataBaseLMS/interfacedatabaselms.cpp +++ b/DataBaseLMS/interfacedatabaselms.cpp @@ -307,6 +307,11 @@ int InterfaceDataBaseLMS::editTaskAMM(TaskAmmFim task) return updateTaskAMM(task); } +int InterfaceDataBaseLMS::editStatusTaskAMM(int task_id, QString status) +{ + return updateStatusTaskAMM(task_id, status); +} + QList InterfaceDataBaseLMS::getListTasksAMMofTrainee(int id_trainee) { return selectTasksAMMofTrainee(id_trainee); @@ -324,6 +329,7 @@ int InterfaceDataBaseLMS::newTaskFIM(TaskAmmFim task, int id_trainee) int InterfaceDataBaseLMS::delTaskFIM(int id) { + deleteReportFIM(id); return deleteTaskFIM(id); } @@ -332,6 +338,24 @@ int InterfaceDataBaseLMS::editTaskFIM(TaskAmmFim task) return updateTaskFIM(task); } +int InterfaceDataBaseLMS::editStatusTaskFIM(int task_id, QString status) +{ + return updateStatusTaskFIM(task_id, status); +} + +int InterfaceDataBaseLMS::replaceReportFIM(TaskAmmFim task) +{ + deleteReportFIM(task.getID()); + + if(int report_id = insertReportFIM(task)) + { + updateStatusTaskFIM(task.getID(), "checkup"); + return report_id; + } + + return 0; +} + int InterfaceDataBaseLMS::newTrainee(int id_group) { return insertTrainee(id_group); diff --git a/DataBaseLMS/interfacedatabaselms.h b/DataBaseLMS/interfacedatabaselms.h index 6fce95c..6747127 100644 --- a/DataBaseLMS/interfacedatabaselms.h +++ b/DataBaseLMS/interfacedatabaselms.h @@ -72,12 +72,16 @@ public: int newTaskAMM(TaskAmmFim task, int id_trainee); int delTaskAMM(int id); int editTaskAMM(TaskAmmFim task); + int editStatusTaskAMM(int task_id, QString status); + QList getListTasksAMMofTrainee(int id_trainee); QList getListTasksFIMofTrainee(int id_trainee); int newTaskFIM(TaskAmmFim task, int id_trainee); int delTaskFIM(int id); int editTaskFIM(TaskAmmFim task); + int editStatusTaskFIM(int task_id, QString status); + int replaceReportFIM(TaskAmmFim task); int newTrainee(int id_group); int delTrainee(int id); diff --git a/DataBaseLMS/tasksAmmFim.h b/DataBaseLMS/tasksAmmFim.h index aadeeb8..2e5f2d2 100644 --- a/DataBaseLMS/tasksAmmFim.h +++ b/DataBaseLMS/tasksAmmFim.h @@ -51,7 +51,7 @@ public: FIMReportItem(){}; ~FIMReportItem(){}; public: - QString title; // текст, вводимый обучаемым + QString text; // текст, вводимый обучаемым ProcedureID procedure; // ссылка на процедуру, при необходимости }; diff --git a/DataBaseLMS/typeQueryToDB.h b/DataBaseLMS/typeQueryToDB.h index 16c8dac..176071c 100644 --- a/DataBaseLMS/typeQueryToDB.h +++ b/DataBaseLMS/typeQueryToDB.h @@ -21,8 +21,9 @@ enum TypeQueryToDB{ TYPE_QUERY_DEL_TASK_AMM_TO_TRAINEE, TYPE_QUERY_DEL_TASK_FIM_TO_TRAINEE, - TYPE_QUERY_EDIT_TASK_AMM_TO_TRAINEE, - TYPE_QUERY_EDIT_TASK_FIM_TO_TRAINEE + + TYPE_QUERY_SET_REPORT_TASK_AMM_TO_TRAINEE, + TYPE_QUERY_SET_REPORT_TASK_FIM_TO_TRAINEE }; #endif // TYPEQUERYTODB_H diff --git a/ServerLMS/Systems/Parsers/processparser.cpp b/ServerLMS/Systems/Parsers/processparser.cpp index 50fc127..fc789df 100644 --- a/ServerLMS/Systems/Parsers/processparser.cpp +++ b/ServerLMS/Systems/Parsers/processparser.cpp @@ -134,7 +134,7 @@ void ProcessParser::clientUnityTaskAMMreport(QXmlStreamReader &xmlReader, Client void* data = nullptr; data = &task; ClientQueryToDB queryToDB; - queryToDB.typeQuery = TypeQueryToDB::TYPE_QUERY_EDIT_TASK_AMM_TO_TRAINEE; + queryToDB.typeQuery = TypeQueryToDB::TYPE_QUERY_SET_REPORT_TASK_AMM_TO_TRAINEE; processingSystem->processingClientQueryToDB(client, queryToDB, trainee_id, data); } } @@ -176,13 +176,41 @@ void ProcessParser::clientUnityTaskFIMreport(QXmlStreamReader &xmlReader, Client } } + //TODO -------------- (!Заглушка!) Отчет о выполнении + FIMReport report; + FIMReportItem reportItem; + QString text; // текст, вводимый обучаемым + ProcedureID procedure; // ссылка на процедуру, при необходимости + + text = "1. Выполнил такую процедуру"; + procedure.doc = "fim"; + procedure.title = "Процедура №1"; + procedure.dmCode = "RRJ-N-27-92-00-51D01-420A-A"; + procedure.result = "viewed"; + reportItem.text = text; + reportItem.procedure = procedure; + report.itemList.append(reportItem); + + text = "2. Выполнил такую процедуру"; + procedure.doc = "fim"; + procedure.title = "Процедура №2"; + procedure.dmCode = "RRJ-N-28-22-00-01A01-420A-A"; + procedure.result = "viewed"; + reportItem.text = text; + reportItem.procedure = procedure; + report.itemList.append(reportItem); + + task.report = report; + //----------------- + + listTasks.append(task); //Изменение задачи void* data = nullptr; data = &task; ClientQueryToDB queryToDB; - queryToDB.typeQuery = TypeQueryToDB::TYPE_QUERY_EDIT_TASK_FIM_TO_TRAINEE; + queryToDB.typeQuery = TypeQueryToDB::TYPE_QUERY_SET_REPORT_TASK_FIM_TO_TRAINEE; processingSystem->processingClientQueryToDB(client, queryToDB, trainee_id, data); } } diff --git a/ServerLMS/Systems/processingsystem.cpp b/ServerLMS/Systems/processingsystem.cpp index 6d87adf..b58234a 100644 --- a/ServerLMS/Systems/processingsystem.cpp +++ b/ServerLMS/Systems/processingsystem.cpp @@ -333,20 +333,24 @@ void ProcessingSystem::processingClientQueryToDB(ClientHandler *client, ClientQu break; } - case TypeQueryToDB::TYPE_QUERY_EDIT_TASK_AMM_TO_TRAINEE: + case TypeQueryToDB::TYPE_QUERY_SET_REPORT_TASK_AMM_TO_TRAINEE: { - if(int id_trainee = providerDBLMS->editTaskAMM(*(TaskAmmFim*)data)) - { + TaskAmmFim* task = (TaskAmmFim*)data; + if(task->status == "completed") + if( int id_task = providerDBLMS->editStatusTaskAMM(task->getID(), "checkup") ) + { - } + } break; } - case TypeQueryToDB::TYPE_QUERY_EDIT_TASK_FIM_TO_TRAINEE: + case TypeQueryToDB::TYPE_QUERY_SET_REPORT_TASK_FIM_TO_TRAINEE: { - if(int id_trainee = providerDBLMS->editTaskFIM(*(TaskAmmFim*)data)) - { + TaskAmmFim* task = (TaskAmmFim*)data; + if(task->status == "completed") + if(int id_report = providerDBLMS->replaceReportFIM(*task)) + { - } + } break; } } diff --git a/ServerLMS/providerdblms.cpp b/ServerLMS/providerdblms.cpp index 3372bd6..64666f3 100644 --- a/ServerLMS/providerdblms.cpp +++ b/ServerLMS/providerdblms.cpp @@ -372,6 +372,11 @@ int ProviderDBLMS::editTaskAMM(TaskAmmFim task) return dbLMS->editTaskAMM(task); } +int ProviderDBLMS::editStatusTaskAMM(int task_id, QString status) +{ + return dbLMS->editStatusTaskAMM(task_id, status); +} + int ProviderDBLMS::newTaskFIM(TaskAmmFim task, int id_trainee) { return dbLMS->newTaskFIM(task, id_trainee); @@ -387,6 +392,16 @@ int ProviderDBLMS::editTaskFIM(TaskAmmFim task) return dbLMS->editTaskFIM(task); } +int ProviderDBLMS::editStatusTaskFIM(int task_id, QString status) +{ + return dbLMS->editStatusTaskFIM(task_id, status); +} + +int ProviderDBLMS::replaceReportFIM(TaskAmmFim task) +{ + return dbLMS->replaceReportFIM(task); +} + QList ProviderDBLMS::GetListTasksAMMofTrainee(int id_trainee) { QList listTasks; diff --git a/ServerLMS/providerdblms.h b/ServerLMS/providerdblms.h index 38f0b37..2052616 100644 --- a/ServerLMS/providerdblms.h +++ b/ServerLMS/providerdblms.h @@ -51,10 +51,13 @@ public: int newTaskAMM(TaskAmmFim task, int id_trainee); int delTaskAMM(int id); int editTaskAMM(TaskAmmFim task); + int editStatusTaskAMM(int task_id, QString status); int newTaskFIM(TaskAmmFim task, int id_trainee); int delTaskFIM(int id); int editTaskFIM(TaskAmmFim task); + int editStatusTaskFIM(int task_id, QString status); + int replaceReportFIM(TaskAmmFim task); QList GetListTasksAMMofTrainee(int id_trainee); QList GetListTasksFIMofTrainee(int id_trainee);