From bcd58e963114311d521ace0ad689d040f45a6a67 Mon Sep 17 00:00:00 2001 From: krivoshein Date: Tue, 12 Aug 2025 11:13:31 +0300 Subject: [PATCH 1/6] =?UTF-8?q?=D0=A0=D0=B5=D1=84=D0=B0=D0=BA=D1=82=20user?= =?UTF-8?q?s=201?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- DataBaseLMS/CMakeLists.txt | 5 + DataBaseLMS/databaselms.cpp | 1635 +------------------- DataBaseLMS/databaselms.h | 63 +- DataBaseLMS/databaselms_groups.cpp | 95 ++ DataBaseLMS/databaselms_instructors.cpp | 231 +++ DataBaseLMS/databaselms_tasks.cpp | 830 ++++++++++ DataBaseLMS/databaselms_trainees.cpp | 565 +++++++ DataBaseLMS/interfacedatabaselms.cpp | 8 +- DataBaseLMS/interfacedatabaselms.h | 32 +- DataBaseLMS/resources.qrc | 5 + DataBaseLMS/resources/blankXML/ErrorDB.xml | 3 + 11 files changed, 1844 insertions(+), 1628 deletions(-) create mode 100644 DataBaseLMS/databaselms_groups.cpp create mode 100644 DataBaseLMS/databaselms_instructors.cpp create mode 100644 DataBaseLMS/databaselms_tasks.cpp create mode 100644 DataBaseLMS/databaselms_trainees.cpp create mode 100644 DataBaseLMS/resources.qrc create mode 100644 DataBaseLMS/resources/blankXML/ErrorDB.xml diff --git a/DataBaseLMS/CMakeLists.txt b/DataBaseLMS/CMakeLists.txt index 1a7dd55..c68feac 100644 --- a/DataBaseLMS/CMakeLists.txt +++ b/DataBaseLMS/CMakeLists.txt @@ -5,6 +5,10 @@ common_info_for_project(DataBaseLMS) add_library(DataBaseLMS SHARED DataBaseLMS_global.h databaselms.cpp + databaselms_tasks.cpp + databaselms_groups.cpp + databaselms_instructors.cpp + databaselms_trainees.cpp databaselms.h interfacedatabaselms.cpp interfacedatabaselms.h @@ -28,6 +32,7 @@ add_library(DataBaseLMS SHARED timingoftrainee.cpp timingoftrainee.h contactModel.h + resources.qrc ) target_link_libraries(DataBaseLMS PRIVATE Qt5::Widgets) diff --git a/DataBaseLMS/databaselms.cpp b/DataBaseLMS/databaselms.cpp index 23892cf..028a34f 100644 --- a/DataBaseLMS/databaselms.cpp +++ b/DataBaseLMS/databaselms.cpp @@ -4,10 +4,12 @@ #include #include #include +#include -DataBaseLMS::DataBaseLMS(): +DataBaseLMS::DataBaseLMS(QWidget *ownerWidget): db(nullptr), - transactionBegined(false) + transactionBegined(false), + ownerWidget(ownerWidget) { } @@ -43,10 +45,7 @@ bool DataBaseLMS::createConnection() else { bool flHas = db->driver()->hasFeature(QSqlDriver::Transactions); - - //bool resBool = QSqlDatabase::database(connectionName).transaction(); - //resBool = QSqlDatabase::database(connectionName).commit(); - + qDebug() << "db->driver()->hasFeature(QSqlDriver::Transactions): " << flHas; mtxAccess.unlock(); return true; } @@ -111,7 +110,8 @@ DataBaseSettings DataBaseLMS::getDataBaseSettings() if(xmlReader.name() == "DataBaseSettings") { - foreach(const QXmlStreamAttribute &attr, xmlReader.attributes()){ + foreach(const QXmlStreamAttribute &attr, xmlReader.attributes()) + { QString name = attr.name().toString(); QString value = attr.value().toString(); @@ -154,11 +154,13 @@ bool DataBaseLMS::transactionBegin() { /* if(transactionBegined) - QSqlDatabase::database().rollback(); - - transactionBegined = true; - - return QSqlDatabase::database().transaction(); + {//Отмена предыдущей незаконченной + if(QSqlDatabase::database().rollback()) + transactionBegined = false; + else + return false; + } + return (transactionBegined = QSqlDatabase::database().transaction()); */ return true; } @@ -168,1579 +170,13 @@ bool DataBaseLMS::transactionEnd() /* if(transactionBegined) { - transactionBegined = false; - - return QSqlDatabase::database().commit(); + return !(transactionBegined = !QSqlDatabase::database().commit()); } return false; */ return true; } -QList DataBaseLMS::selectAllInstructors() -{ - QList listInstructors; - - QString queryStr = QString("SELECT instructor_id, name, login, password, is_admin, archived, logged_in " - "FROM public.instructors " - "ORDER BY instructor_id ASC"); - - QSqlQuery query = QSqlQuery(*db); - - if(queryExec(queryStr, &query)) - { - while (query.next()) - {//Инструктор - Instructor instructor; - instructor.setID(query.value(0).toInt()); - instructor.setName(query.value(1).toString()); - instructor.setLogin(query.value(2).toString()); - instructor.setPassword(query.value(3).toString()); - instructor.setIsAdmin(query.value(4).toBool()); - instructor.setArchived(query.value(5).toBool()); - instructor.setLoggedIn(query.value(6).toBool()); - - listInstructors.append(instructor); - } - } - - return listInstructors; -} - -QList DataBaseLMS::selectAllTrainees() -{ - QList listTrainees; - - QString queryStr = QString("SELECT trainees.trainee_id, trainees.name, trainees.login, trainees.password, trainees.archived, trainees.logged_in, " - "groups.group_id, groups.name, " - "computers.computer_id, computers.name, computers.ip_address, " - "classrooms.classroom_id, classrooms.name " - "FROM public.trainees JOIN public.groups ON groups.group_id = trainees.group_trainee " - "LEFT OUTER JOIN public.computers ON computers.computer_id = trainees.computer_trainee " - "LEFT OUTER JOIN public.classrooms ON classrooms.classroom_id = computers.classroom_computer " - "ORDER BY groups.name, trainees.name ASC"); - - QSqlQuery query = QSqlQuery(*db); - - if(queryExec(queryStr, &query)) - { - while (query.next()) - {//Обучаемый - Trainee trainee; - - trainee.setID(query.value(0).toInt()); - trainee.setName(query.value(1).toString()); - trainee.setLogin(query.value(2).toString()); - trainee.setPassword(query.value(3).toString()); - trainee.setArchived(query.value(4).toBool()); - trainee.setLoggedIn(query.value(5).toBool()); - - Group group = Group(query.value(6).toInt(), query.value(7).toString()); - trainee.setGroup(group); - - Classroom classroom = Classroom(query.value(11).toInt(), query.value(12).toString()); - Computer computer = Computer(query.value(8).toInt(), query.value(9).toString(), query.value(10).toString(), classroom); - trainee.setComputer(computer); - - listTrainees.append(trainee); - } - } - - return listTrainees; -} - -QList DataBaseLMS::selectAllGroups() -{ - QList listGroups; - - QString queryStr = QString("SELECT group_id, name " - "FROM public.groups " - "ORDER BY group_id ASC"); - - QSqlQuery query = QSqlQuery(*db); - - if(queryExec(queryStr, &query)) - { - while (query.next()) - {//Группа - Group group; - group.setID(query.value(0).toInt()); - group.setName(query.value(1).toString()); - - listGroups.append(group); - } - } - - return listGroups; -} - -Instructor DataBaseLMS::selectInstructor(int id_instructor) -{ - Instructor instructor; - - QString queryStr = QString("SELECT instructor_id, name, login, password, is_admin, archived, logged_in " - "FROM public.instructors " - "WHERE instructors.instructor_id = %1 ").arg( - id_instructor); - - QSqlQuery query = QSqlQuery(*db); - - if(queryExec(queryStr, &query)) - { - if (query.first()) - {//Инструктор - instructor.setID(query.value(0).toInt()); - instructor.setName(query.value(1).toString()); - instructor.setLogin(query.value(2).toString()); - instructor.setPassword(query.value(3).toString()); - instructor.setIsAdmin(query.value(4).toBool()); - instructor.setArchived(query.value(5).toBool()); - instructor.setLoggedIn(query.value(6).toBool()); - } - } - - return instructor; -} - -int DataBaseLMS::selectInstructorID(QString login, QString password) -{ - QString queryStr; - - if(password != QStringLiteral("")) - { - queryStr = QString("SELECT instructors.instructor_id " - "FROM public.instructors " - "WHERE login = '%1' AND password = '%2' ").arg( - login, - password ); - } - else - { - queryStr = QString("SELECT instructors.instructor_id " - "FROM public.instructors " - "WHERE login = '%1' ").arg( - login ); - } - - return queryExecInt(queryStr); -} - -QString DataBaseLMS::selectInstructorNameByLogin(QString login) -{ - QString queryStr = QString("SELECT instructors.name " - "FROM public.instructors " - "WHERE instructors.login = '%1' ").arg( - login ); - - return queryExecString(queryStr); -} - -bool DataBaseLMS::selectInstructorIsAdmin(int id_instructor) -{ - QString queryStr = QString("SELECT instructors.is_admin " - "FROM public.instructors " - "WHERE instructor_id = %1 ").arg( - id_instructor ); - - return queryExecBool(queryStr); -} - -bool DataBaseLMS::selectInstructorLoggedIn(int id_instructor) -{ - QString queryStr = QString("SELECT instructors.logged_in " - "FROM public.instructors " - "WHERE instructor_id = %1 ").arg( - id_instructor ); - - return queryExecBool(queryStr); -} - -bool DataBaseLMS::selectInstructorArchived(int id_instructor) -{ - QString queryStr = QString("SELECT instructors.archived " - "FROM public.instructors " - "WHERE instructor_id = %1 ").arg( - id_instructor ); - - return queryExecBool(queryStr); -} - -int DataBaseLMS::updateInstructorLoggedIn(int id_instructor, bool loggedIn) -{ - QString queryStr = QString("UPDATE public.instructors " - "SET logged_in = %1 " - "WHERE instructor_id = %2 " - "RETURNING instructors.instructor_id").arg( - loggedIn ? "true" : "false", - QString::number(id_instructor) ); - - return queryExecInt(queryStr); -} - -bool DataBaseLMS::updateAllInstructorsLoggedIn(bool loggedIn) -{ - QString queryStr = QString("UPDATE public.instructors " - "SET logged_in = %1 ").arg( - loggedIn ? "true" : "false"); - - QSqlQuery query = QSqlQuery(*db); - - return queryExec(queryStr, &query); -} - -int DataBaseLMS::updateInstructorArchived(int id_instructor, bool archived) -{ - QString queryStr = QString("UPDATE public.instructors " - "SET archived = %1 " - "WHERE instructor_id = %2 " - "RETURNING instructors.instructor_id").arg( - archived ? "true" : "false", - QString::number(id_instructor) ); - - return queryExecInt(queryStr); -} - -int DataBaseLMS::insertInstructor() -{ - QString queryStr = QString("INSERT INTO public.instructors " - "DEFAULT VALUES " - "RETURNING instructor_id"); - - return queryExecInt(queryStr); -} - -int DataBaseLMS::insertInstructor(Instructor instructor) -{ - QString queryStr = QString("INSERT INTO public.instructors (name, login, password, is_admin, archived, logged_in) " - "VALUES ('%1', '%2', '%3', %4, %5, %6) " - "RETURNING instructor_id").arg( - instructor.getName(), - instructor.getLogin(), - instructor.getPassword(), - instructor.getIsAdmin() ? "true" : "false", - instructor.getArchived() ? "true" : "false", - instructor.getLoggedIn() ? "true" : "false"); - - return queryExecInt(queryStr); -} - -int DataBaseLMS::deleteInstructor(int id_instructor) -{ - QString queryStr = QString("DELETE FROM public.instructors " - "WHERE instructor_id = %1 " - "RETURNING instructors.instructor_id").arg( - QString::number(id_instructor)); - - return queryExecInt(queryStr); -} - -int DataBaseLMS::updateInstructor(Instructor instructor) -{ - QString queryStr = QString("UPDATE public.instructors " - "SET name = '%1', login = '%2', password = '%3', is_admin = %4, archived = %5, logged_in = %6 " - "WHERE instructor_id = %7 " - "RETURNING instructors.instructor_id").arg( - instructor.getName(), - instructor.getLogin(), - instructor.getPassword(), - instructor.getIsAdmin() ? "true" : "false", - instructor.getArchived() ? "true" : "false", - instructor.getLoggedIn() ? "true" : "false", - QString::number(instructor.getID()) ); - - return queryExecInt(queryStr); -} - -Group DataBaseLMS::selectGroup(int id_group) -{ - Group group; - - QString queryStr = QString("SELECT group_id, name " - "FROM public.groups " - "WHERE groups.group_id = %1 ").arg( - id_group); - - QSqlQuery query = QSqlQuery(*db); - - if(queryExec(queryStr, &query)) - { - if (query.first()) - {//Инструктор - group.setID(query.value(0).toInt()); - group.setName(query.value(1).toString()); - } - } - - return group; -} - -int DataBaseLMS::insertGroup() -{ - QString queryStr = QString("INSERT INTO public.groups " - "DEFAULT VALUES " - "RETURNING group_id"); - - return queryExecInt(queryStr); -} - -int DataBaseLMS::insertGroup(Group group) -{ - QString queryStr = QString("INSERT INTO public.groups (name) " - "VALUES ('%1') " - "RETURNING groups.group_id").arg( - group.getName()); - - return queryExecInt(queryStr); -} - -int DataBaseLMS::deleteGroup(int id_group) -{ - QString queryStr = QString("DELETE FROM public.groups " - "WHERE group_id = %1 " - "RETURNING groups.group_id").arg( - QString::number(id_group)); - - return queryExecInt(queryStr); -} - -int DataBaseLMS::updateGroup(Group group) -{ - QString queryStr = QString("UPDATE public.groups SET name = '%1' " - "WHERE group_id = %2 " - "RETURNING groups.group_id").arg( - group.getName(), - QString::number(group.getID()) ); - - return queryExecInt(queryStr); -} - -int DataBaseLMS::insertTaskAMM(TaskAmmFim task, int id_trainee) -{ - task.ammProcedure.title = task.ammProcedure.title.replace("'", "''"); //Задваиваем одинарные кавычки - - QString queryStr = QString("INSERT INTO public.tasks_amm (title, dm_code, trainee_task) " - "VALUES ('%1', '%2', %3) " - "RETURNING tasks_amm.task_id").arg( - task.ammProcedure.title, - task.ammProcedure.dmCode, - QString::number(id_trainee)); - - return queryExecInt(queryStr); -} - -int DataBaseLMS::updateTaskAMM(TaskAmmFim task) -{ - task.ammProcedure.title = task.ammProcedure.title.replace("'", "''"); //Задваиваем одинарные кавычки - - QString queryStr = QString("UPDATE public.tasks_amm SET title = '%1', dm_code = '%2', status = '%3' " - "WHERE task_id = %4 " - "RETURNING tasks_amm.task_id").arg( - task.ammProcedure.title, - task.ammProcedure.dmCode, - task.status, - QString::number(task.getID()) ); - - return queryExecInt(queryStr); -} - -int DataBaseLMS::updateStatusTaskAMM(int task_id, QString status) -{ - QString queryStr; - bool resBool = false; - int id_trainee = 0; - - resBool = db->transaction(); - - queryStr = QString("SELECT trainees.trainee_id " - "FROM public.trainees JOIN public.tasks_amm ON trainees.trainee_id = tasks_amm.trainee_task " - "WHERE tasks_amm.task_id = %1 " - "ORDER BY trainees.trainee_id ASC").arg( - QString::number(task_id)); - - QSqlQuery query = QSqlQuery(*db); - - if(queryExec(queryStr, &query)) - { - if (query.first()) - {//Обучаемый - id_trainee = query.value(0).toInt(); - } - } - if(!id_trainee) - { - resBool = db->rollback(); - return 0; - } - - - queryStr = QString("UPDATE public.tasks_amm SET status = '%1' " - "WHERE task_id = %2 " - "RETURNING tasks_amm.task_id").arg( - status, - QString::number(task_id) ); - - - if(!queryExecInt(queryStr)) - { - resBool = db->rollback(); - return 0; - } - - resBool = db->commit(); - return id_trainee; -} - -int DataBaseLMS::deleteTaskAMM(int id_task) -{ - QString queryStr; - bool resBool = false; - int id_trainee = 0; - - resBool = db->transaction(); - - queryStr = QString("SELECT trainees.trainee_id " - "FROM public.trainees JOIN public.tasks_amm ON trainees.trainee_id = tasks_amm.trainee_task " - "WHERE tasks_amm.task_id = %1 " - "ORDER BY trainees.trainee_id ASC").arg( - QString::number(id_task)); - - QSqlQuery query = QSqlQuery(*db); - - if(queryExec(queryStr, &query)) - { - if (query.first()) - {//Обучаемый - id_trainee = query.value(0).toInt(); - } - } - if(!id_trainee) - { - resBool = db->rollback(); - return 0; - } - - queryStr = QString("DELETE FROM public.tasks_amm " - "WHERE task_id = %1 " - "RETURNING tasks_amm.task_id").arg( - QString::number(id_task)); - - if(!queryExecInt(queryStr)) - { - resBool = db->rollback(); - return 0; - } - - resBool = db->commit(); - return id_trainee; -} - -QList DataBaseLMS::selectTasksAMMofTrainee(int id_trainee) -{ - QList listTasks; - - 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 " - "ORDER BY tasks_amm.task_id ASC").arg( - id_trainee); - - QSqlQuery query = QSqlQuery(*db); - - if(queryExec(queryStr, &query)) - { - while (query.next()) - {//Задача - TaskAmmFim task; - - task.setID(query.value(0).toInt()); - task.ammProcedure.title = query.value(1).toString(); - task.ammProcedure.dmCode = query.value(2).toString(); - task.status = query.value(3).toString(); - - listTasks.append(task); - } - } - - return listTasks; -} - -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 " - "FROM public.tasks_amm " - "WHERE tasks_amm.task_id = %1 " - "ORDER BY tasks_amm.task_id ASC").arg( - id_task); - - QSqlQuery query = QSqlQuery(*db); - - if(queryExec(queryStr, &query)) - { - if (query.first()) - {//Задача - task.setID(query.value(0).toInt()); - task.ammProcedure.title = query.value(1).toString(); - task.ammProcedure.dmCode = query.value(2).toString(); - task.status = query.value(3).toString(); - } - } - - return task; -} - -int DataBaseLMS::insertTaskFIM(TaskAmmFim task, int id_trainee) -{ - QString queryStr; - bool resBool = false; - - resBool = db->transaction(); - - task.title = task.title.replace("'", "''"); //Задваиваем одинарные кавычки - - 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)); - - int task_id = queryExecInt(queryStr); - if(!task_id) - { - resBool = db->rollback(); - return 0; - } - - for(Malfunction malfanction : task.malfunctionList) - { - malfanction.description = malfanction.description.replace("'", "''"); //Задваиваем одинарные кавычки - - 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)); - - 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(); - return task_id; -} - -int DataBaseLMS::updateTaskFIM(TaskAmmFim task) -{ - task.title = task.title.replace("'", "''"); //Задваиваем одинарные кавычки - - QString queryStr = QString("UPDATE public.tasks_fim SET title = '%1', status = '%2' " - "WHERE task_id = %3 " - "RETURNING tasks_fim.task_id").arg( - task.title, - task.status, - QString::number(task.getID()) ); - - return queryExecInt(queryStr); -} - -int DataBaseLMS::updateStatusTaskFIM(int task_id, QString status) -{ - QString queryStr; - bool resBool = false; - int id_trainee = 0; - - resBool = db->transaction(); - - queryStr = QString("SELECT trainees.trainee_id " - "FROM public.trainees JOIN public.tasks_fim ON trainees.trainee_id = tasks_fim.trainee_task " - "WHERE tasks_fim.task_id = %1 " - "ORDER BY trainees.trainee_id ASC").arg( - QString::number(task_id)); - - QSqlQuery query = QSqlQuery(*db); - - if(queryExec(queryStr, &query)) - { - if (query.first()) - {//Обучаемый - id_trainee = query.value(0).toInt(); - } - } - if(!id_trainee) - { - resBool = db->rollback(); - return 0; - } - - queryStr = QString("UPDATE public.tasks_fim SET status = '%1' " - "WHERE task_id = %2 " - "RETURNING tasks_fim.task_id").arg( - status, - QString::number(task_id) ); - - QSqlQuery query1 = QSqlQuery(*db); - if(!queryExec(queryStr, &query1)) - { - resBool = db->rollback(); - return 0; - } - - resBool = db->commit(); - return id_trainee; -} - -int DataBaseLMS::deleteTaskFIM(int id_task) -{ - QString queryStr; - bool resBool = false; - int id_trainee = 0; - - resBool = db->transaction(); - - queryStr = QString("SELECT trainees.trainee_id " - "FROM public.trainees JOIN public.tasks_fim ON trainees.trainee_id = tasks_fim.trainee_task " - "WHERE tasks_fim.task_id = %1 " - "ORDER BY trainees.trainee_id ASC").arg( - QString::number(id_task)); - - QSqlQuery query = QSqlQuery(*db); - - if(queryExec(queryStr, &query)) - { - if (query.first()) - {//Обучаемый - id_trainee = query.value(0).toInt(); - } - } - if(!id_trainee) - { - resBool = db->rollback(); - return 0; - } - - //Выгребаем все malfunction для этой задачи - queryStr = QString("SELECT malfunctions.malfunction_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.malfunction_id ASC").arg( - id_task); - QSqlQuery queryMalf = QSqlQuery(*db); - - if(queryExec(queryStr, &queryMalf)) - { - while (queryMalf.next()) - {//Неисправность - int malfunction_id = 0; - - malfunction_id = queryMalf.value(0).toString().toInt(); - - if(malfunction_id) - { - queryStr = QString("DELETE FROM public.malf_sign " - "WHERE malf_malf_sign = %1 ").arg( - malfunction_id); - - QSqlQuery querySign = QSqlQuery(*db); - if(!queryExec(queryStr, &querySign)) - { - resBool = db->rollback(); - return 0; - } - } - }; - } - else - { - resBool = db->rollback(); - return 0; - } - - - queryStr = QString("DELETE FROM public.malfunctions " - "WHERE task_fim_malf = %1 ").arg( - QString::number(id_task)); - - QSqlQuery query1 = QSqlQuery(*db); - if(!queryExec(queryStr, &query1)) - { - resBool = db->rollback(); - return 0; - } - - queryStr = QString("DELETE FROM public.tasks_fim " - "WHERE task_id = %1 " - "RETURNING tasks_fim.task_id").arg( - QString::number(id_task)); - - if(!queryExecInt(queryStr)) - { - resBool = db->rollback(); - return 0; - } - - resBool = db->commit(); - return id_trainee; -} - -QList DataBaseLMS::selectTasksFIMofTrainee(int id_trainee) -{ - QList listTasks; - QString queryStr; - bool resBool = false; - - resBool = db->transaction(); - - queryStr = QString("SELECT tasks_fim.task_id, tasks_fim.title, tasks_fim.status, " - "trainees.trainee_id " - "FROM public.tasks_fim JOIN public.trainees ON trainees.trainee_id = tasks_fim.trainee_task " - "WHERE tasks_fim.trainee_task = %1 " - "ORDER BY tasks_fim.task_id ASC").arg( - id_trainee); - - QSqlQuery query = QSqlQuery(*db); - - if(queryExec(queryStr, &query)) - { - while (query.next()) - {//Задача - TaskAmmFim task; - - 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 QList(); - } - - - //Выгребаем отчет для этой задачи - 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 QList(); - } - - 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 QList(); - } - } - - listTasks.append(task); - }; - } - else - { - resBool = db->rollback(); - return QList(); - } - - resBool = db->commit(); - return listTasks; -} - -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; -} - -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; - - QString queryStr = QString("SELECT trainees.trainee_id, trainees.name, trainees.login, trainees.password, trainees.archived, trainees.logged_in, " - "groups.group_id, groups.name, " - "computers.computer_id, computers.name, computers.ip_address, " - "classrooms.classroom_id, classrooms.name " - "FROM public.trainees JOIN public.groups ON groups.group_id = trainees.group_trainee " - "LEFT OUTER JOIN public.computers ON computers.computer_id = trainees.computer_trainee " - "LEFT OUTER JOIN public.classrooms ON classrooms.classroom_id = computers.classroom_computer " - "WHERE trainees.trainee_id = %1 " - "ORDER BY groups.name, trainees.name ASC").arg( - id_trainee); - - QSqlQuery query = QSqlQuery(*db); - - if(queryExec(queryStr, &query)) - { - if (query.first()) - {//Инструктор - trainee.setID(query.value(0).toInt()); - trainee.setName(query.value(1).toString()); - trainee.setLogin(query.value(2).toString()); - trainee.setPassword(query.value(3).toString()); - trainee.setArchived(query.value(4).toBool()); - trainee.setLoggedIn(query.value(5).toBool()); - - Group group = Group(query.value(6).toInt(), query.value(7).toString()); - trainee.setGroup(group); - - Classroom classroom = Classroom(query.value(11).toInt(), query.value(12).toString()); - Computer computer = Computer(query.value(8).toInt(), query.value(9).toString(), query.value(10).toString(), classroom); - trainee.setComputer(computer); - } - } - - return trainee; -} - -QList DataBaseLMS::selectAllTraineesInGroup(int id_group) -{ - QList listTrainees; - - QString queryStr = QString("SELECT trainees.trainee_id, trainees.name, trainees.login, trainees.password, trainees.archived, trainees.logged_in, " - "groups.group_id, groups.name, " - "computers.computer_id, computers.name, computers.ip_address, " - "classrooms.classroom_id, classrooms.name " - "FROM public.trainees JOIN public.groups ON groups.group_id = trainees.group_trainee " - "LEFT OUTER JOIN public.computers ON computers.computer_id = trainees.computer_trainee " - "LEFT OUTER JOIN public.classrooms ON classrooms.classroom_id = computers.classroom_computer " - "WHERE trainees.group_trainee = %1 " - "ORDER BY groups.name, trainees.name ASC").arg( - id_group); - - QSqlQuery query = QSqlQuery(*db); - - if(queryExec(queryStr, &query)) - { - while (query.next()) - {//Обучаемый - Trainee trainee; - - trainee.setID(query.value(0).toInt()); - trainee.setName(query.value(1).toString()); - trainee.setLogin(query.value(2).toString()); - trainee.setPassword(query.value(3).toString()); - trainee.setArchived(query.value(4).toBool()); - trainee.setLoggedIn(query.value(5).toBool()); - - Group group = Group(query.value(6).toInt(), query.value(7).toString()); - trainee.setGroup(group); - - Classroom classroom = Classroom(query.value(11).toInt(), query.value(12).toString()); - Computer computer = Computer(query.value(8).toInt(), query.value(9).toString(), query.value(10).toString(), classroom); - trainee.setComputer(computer); - - listTrainees.append(trainee); - } - } - - return listTrainees; -} - -int DataBaseLMS::selectTraineeID(QString login, QString password) -{ - QString queryStr; - - if(password != QStringLiteral("")) - { - queryStr = QString("SELECT trainees.trainee_id " - "FROM public.trainees " - "WHERE login = '%1' AND password = '%2' ").arg( - login, - password ); - } - else - { - queryStr = QString("SELECT trainees.trainee_id " - "FROM public.trainees " - "WHERE login = '%1' ").arg( - login ); - } - - return queryExecInt(queryStr); -} - -QString DataBaseLMS::selectTraineeNameByLogin(QString login) -{ - QString queryStr = QString("SELECT trainees.name " - "FROM public.trainees " - "WHERE trainees.login = '%1' ").arg( - login ); - - return queryExecString(queryStr); -} - -QString DataBaseLMS::selectTraineeNameOnComputer(QString computer_name) -{ - QString queryStr = QString("SELECT trainees.name " - "FROM public.trainees JOIN public.computers ON computers.computer_id = trainees.computer_trainee " - "WHERE computers.name = '%1' ").arg( - computer_name); - - return queryExecString(queryStr); -} - -Trainee DataBaseLMS::selectTraineeOnComputer(QString computer_name) -{ - Trainee trainee; - - QString queryStr = QString("SELECT trainees.trainee_id, trainees.name, trainees.login, trainees.password, trainees.archived, trainees.logged_in, " - "groups.group_id, groups.name, " - "computers.computer_id, computers.name, computers.ip_address, " - "classrooms.classroom_id, classrooms.name " - "FROM public.trainees JOIN public.groups ON groups.group_id = trainees.group_trainee " - "LEFT OUTER JOIN public.computers ON computers.computer_id = trainees.computer_trainee " - "LEFT OUTER JOIN public.classrooms ON classrooms.classroom_id = computers.classroom_computer " - "WHERE computers.name = '%1' ").arg( - computer_name); - - QSqlQuery query = QSqlQuery(*db); - - if(queryExec(queryStr, &query)) - { - if (query.first()) - {//Инструктор - trainee.setID(query.value(0).toInt()); - trainee.setName(query.value(1).toString()); - trainee.setLogin(query.value(2).toString()); - trainee.setPassword(query.value(3).toString()); - trainee.setArchived(query.value(4).toBool()); - trainee.setLoggedIn(query.value(5).toBool()); - - Group group = Group(query.value(6).toInt(), query.value(7).toString()); - trainee.setGroup(group); - - Classroom classroom = Classroom(query.value(11).toInt(), query.value(12).toString()); - Computer computer = Computer(query.value(8).toInt(), query.value(9).toString(), query.value(10).toString(), classroom); - trainee.setComputer(computer); - } - } - - return trainee; -} - -bool DataBaseLMS::selectTraineeArchived(int id_trainee) -{ - QString queryStr = QString("SELECT trainees.archived " - "FROM public.trainees " - "WHERE trainee_id = %1 ").arg( - id_trainee ); - - return queryExecBool(queryStr); -} - -bool DataBaseLMS::selectTraineeLoggedIn(int id_trainee) -{ - QString queryStr = QString("SELECT trainees.logged_in " - "FROM public.trainees " - "WHERE trainee_id = %1 ").arg( - id_trainee ); - - return queryExecBool(queryStr); -} - -int DataBaseLMS::updateTraineeLoggedIn(int id_trainee, bool loggedIn) -{ - QString queryStr = QString("UPDATE public.trainees " - "SET logged_in = %1 " - "WHERE trainee_id = %2 " - "RETURNING trainees.trainee_id").arg( - loggedIn ? "true" : "false", - QString::number(id_trainee) ); - - return queryExecInt(queryStr); -} - -bool DataBaseLMS::updateAllTraineesLoggedIn(bool loggedIn) -{ - QString queryStr = QString("UPDATE public.trainees " - "SET logged_in = %1 ").arg( - loggedIn ? "true" : "false"); - - QSqlQuery query = QSqlQuery(*db); - - return queryExec(queryStr, &query); -} - -int DataBaseLMS::updateTraineeArchived(int id_trainee, bool archived) -{ - QString queryStr = QString("UPDATE public.trainees " - "SET archived = %1 " - "WHERE trainee_id = %2 " - "RETURNING trainees.trainee_id").arg( - archived ? "true" : "false", - QString::number(id_trainee) ); - - return queryExecInt(queryStr); -} - -int DataBaseLMS::insertTrainee(int id_group) -{ - QString queryStr = QString("INSERT INTO public.trainees (name, login, password, archived, logged_in, group_trainee) " - "VALUES (DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT, %1) " - "RETURNING trainees.trainee_id").arg( - QString::number(id_group)); - - return queryExecInt(queryStr); -} - -int DataBaseLMS::insertTrainee(Trainee trainee) -{ - QString queryStr = QString("INSERT INTO public.trainees (name, login, password, archived, logged_in, group_trainee) " - "VALUES ('%1', '%2', '%3', %4, %5, %6) " - "RETURNING trainees.trainee_id").arg( - trainee.getName(), - trainee.getLogin(), - trainee.getPassword(), - trainee.getArchived() ? "true" : "false", - trainee.getLoggedIn() ? "true" : "false", - QString::number(trainee.getGroup().getID())); - - return queryExecInt(queryStr); -} - -int DataBaseLMS::deleteTrainee(int id_trainee) -{ - QString queryStr; - int res = 0; - bool resBool = false; - - resBool = db->transaction(); - - QSqlQuery query = QSqlQuery(*db); - - - //Удаление задач AMM - queryStr = QString("DELETE FROM public.tasks_amm " - "WHERE trainee_task = %1 ").arg( - QString::number(id_trainee)); - - if(!queryExec(queryStr, &query)) - { - resBool = db->rollback(); - return 0; - } - - - //Удаление задач FIM - - /*Выборка задач FIM для этого обучаемого*/ - queryStr = QString("SELECT tasks_fim.task_id " - "FROM public.tasks_fim " - "WHERE tasks_fim.trainee_task = %1 " - "ORDER BY tasks_fim.task_id ASC").arg( - id_trainee); - - if(queryExec(queryStr, &query)) - { - while (query.next()) - {//Задача - /*Удаляем все malfunction для этой задачи*/ - queryStr = QString("DELETE FROM public.malfunctions " - "WHERE malfunctions.task_fim_malf = %1 ").arg( - query.value(0).toInt()); - QSqlQuery queryDel = QSqlQuery(*db); - if(!queryExec(queryStr, &queryDel)) - { - resBool = db->rollback(); - return 0; - } - }; - } - else - { - resBool = db->rollback(); - return 0; - } - - /*Удаление непосредственно задач FIM*/ - queryStr = QString("DELETE FROM public.tasks_fim " - "WHERE trainee_task = %1 ").arg( - QString::number(id_trainee)); - - if(!queryExec(queryStr, &query)) - { - resBool = db->rollback(); - return 0; - } - - - //Удаление обучаемого - queryStr = QString("DELETE FROM public.trainees " - "WHERE trainee_id = %1 " - "RETURNING trainees.trainee_id").arg( - QString::number(id_trainee)); - - res = queryExecInt(queryStr); - if(res) - { - resBool = db->commit(); - return res; - } - else - { - resBool = db->rollback(); - return 0; - } -} - -int DataBaseLMS::updateTrainee(Trainee trainee) -{ - QString computer_id = (trainee.getComputer().getID() == 0 ? QStringLiteral("null") : QString::number(trainee.getComputer().getID())); - - QString queryStr = QString("UPDATE public.trainees " - "SET name = '%1', login = '%2', password = '%3', archived = %4, logged_in = %5, " - "group_trainee = %6, " - "computer_trainee = %7 " - "WHERE trainee_id = %8 " - "RETURNING trainees.trainee_id").arg( - trainee.getName(), - trainee.getLogin(), - trainee.getPassword(), - trainee.getArchived() ? "true" : "false", - trainee.getLoggedIn() ? "true" : "false", - QString::number(trainee.getGroup().getID()), - computer_id, - QString::number(trainee.getID()) ); - - return queryExecInt(queryStr); -} - -int DataBaseLMS::insertTimingTrainee(int id_trainee) -{ - QString queryStr = QString("INSERT INTO public.timings (entry_time, exit_time, operating_time, timing_trainee) " - "VALUES (DEFAULT, DEFAULT, DEFAULT, %1) " - "RETURNING timings.timing_id").arg( - QString::number(id_trainee)); - - return queryExecInt(queryStr); -} - -int DataBaseLMS::updateTimingTrainee(int id_trainee, TimingOfTrainee timing) -{ - QString queryStr = QString("UPDATE public.timings " - "SET entry_time = '%1', exit_time = '%2', operating_time = '%3', timing_trainee = %4 " - "WHERE timing_id = %5 " - "RETURNING timings.timing_id").arg( - timing.getEntryTimeS(), - timing.getExitTimeS(), - timing.getOperatingTimeS(), - QString::number(id_trainee), - QString::number(timing.getID()) ); - - return queryExecInt(queryStr); -} - -TimingOfTrainee DataBaseLMS::selectTimingTrainee(int id_trainee) -{ - TimingOfTrainee timing(id_trainee); - - QString queryStr = QString("SELECT timings.timing_id, timings.entry_time, timings.exit_time, timings.operating_time, timings.timing_trainee " - "FROM public.timings " - "WHERE timing_trainee = '%1'").arg(id_trainee); - - QSqlQuery querySel = QSqlQuery(*db); - - if(queryExec(queryStr, &querySel)) - { - if (querySel.first()) - {//Тайминг - timing.setID(querySel.value(0).toInt()); - timing.setEntryTime(querySel.value(1).toDateTime()); - timing.setExitTime(querySel.value(2).toDateTime()); - timing.setOperatingTime(querySel.value(3).toTime()); - timing.setTraineeID(querySel.value(4).toInt()); - } - } - - return timing; -} - int DataBaseLMS::queryExecInt(QString queryStr) { QSqlQuery query = QSqlQuery(*db); @@ -1792,7 +228,46 @@ bool DataBaseLMS::queryExec(QString queryStr, QSqlQuery *query) void DataBaseLMS::messageWarningErrorQuery(QString queryStr, QSqlQuery* query) { - QMessageBox::warning(nullptr, dbSettings.dbName, + //Запись в файл ошибок БД + QDomDocument commonDOM; + + QFile blankFile(":/resources/blankXML/ErrorDB.xml"); + + if (! blankFile.open(QFile::ReadOnly | QFile::Text)) + qDebug() << QString("messageWarningErrorQuery: Couldn't read the file: ") + ":/resources/blankXML/ErrorDB.xml"; + else + { + commonDOM.setContent(blankFile.readAll()); + blankFile.close(); + + QDomNode errorDBNode = commonDOM.namedItem("ErrorDB"); + + QDomNode errorQueryNode = commonDOM.createElement("ErrorQuery"); + errorDBNode.appendChild(errorQueryNode); + errorQueryNode.toElement().setAttribute("text", query->lastError().text()); + + QDomNode stringOfQueryNode = commonDOM.createElement("StringOfQuery"); + errorDBNode.appendChild(stringOfQueryNode); + stringOfQueryNode.toElement().setAttribute("text", queryStr); + + QDomNode executedQueryNode = commonDOM.createElement("ExecutedQuery"); + errorDBNode.appendChild(executedQueryNode); + executedQueryNode.toElement().setAttribute("text", query->executedQuery()); + + QFile xmlOutFile("ErrorDB.xml"); + if (!xmlOutFile.open(QFile::WriteOnly | QFile::Text)) + qDebug() << QString("messageWarningErrorQuery: Failed to write a file: ") + "ErrorDB.xml"; + else + { + QTextStream outFile(&xmlOutFile); + commonDOM.save(outFile, 4); + xmlOutFile.close(); + } + } + + + //Сообщение об ошибке + QMessageBox::warning(ownerWidget, dbSettings.dbName, "Error query:\n" + query->lastError().text() + "\n" + "String of query:\n" + queryStr + "\n" + "Executed query:\n" + query->executedQuery()); diff --git a/DataBaseLMS/databaselms.h b/DataBaseLMS/databaselms.h index 0f0568f..19856a2 100644 --- a/DataBaseLMS/databaselms.h +++ b/DataBaseLMS/databaselms.h @@ -3,6 +3,7 @@ #include #include +#include #include "instructor.h" #include "trainee.h" @@ -25,9 +26,13 @@ public: class DataBaseLMS { public: - DataBaseLMS(); + DataBaseLMS(QWidget *ownerWidget); ~DataBaseLMS(); +public: + const QString TypeUserDBInstructor = "instructor"; + const QString TypeUserDBTrainee = "trainee"; + protected: //Подключение bool createConnection(); @@ -38,12 +43,8 @@ protected: bool transactionBegin(); bool transactionEnd(); - //Списки - QList selectAllInstructors(); - QList selectAllTrainees(); - QList selectAllGroups(); - //Инструктор + QList selectAllInstructors(); Instructor selectInstructor(int id_instructor); int selectInstructorID(QString login, QString password = QStringLiteral("")); QString selectInstructorNameByLogin(QString login); @@ -53,19 +54,42 @@ protected: int updateInstructorLoggedIn(int id_instructor, bool loggedIn); bool updateAllInstructorsLoggedIn(bool loggedIn); int updateInstructorArchived(int id_instructor, bool archived); - int insertInstructor(); int insertInstructor(Instructor instructor); int deleteInstructor(int id_instructor); int updateInstructor(Instructor instructor); //Группа + QList selectAllGroups(); Group selectGroup(int id_group); int insertGroup(); int insertGroup(Group group); int deleteGroup(int id_group); int updateGroup(Group group); + //Обучаемый + QList selectAllTrainees(); + Trainee selectTrainee(int id_trainee); + QList selectAllTraineesInGroup(int id_group); + int selectTraineeID(QString login, QString password = QStringLiteral("")); + QString selectTraineeNameByLogin(QString login); + QString selectTraineeNameOnComputer(QString computer_name); + Trainee selectTraineeOnComputer(QString computer_name); + bool selectTraineeArchived(int id_trainee); + bool selectTraineeLoggedIn(int id_trainee); + int updateTraineeLoggedIn(int id_trainee, bool loggedIn); + bool updateAllTraineesLoggedIn(bool loggedIn); + int updateTraineeArchived(int id_trainee, bool archived); + int insertTrainee(int id_group); + int insertTrainee(Trainee trainee); + int deleteTrainee(int id_trainee); + int updateTrainee(Trainee trainee); + + //Тайминг + int insertTimingTrainee(int id_trainee); + int updateTimingTrainee(int id_trainee, TimingOfTrainee timing); + TimingOfTrainee selectTimingTrainee(int id_trainee); + //Задача AMM int insertTaskAMM(TaskAmmFim task, int id_trainee); int updateTaskAMM(TaskAmmFim task); @@ -80,33 +104,9 @@ protected: int deleteTaskFIM(int id_task); QList selectTasksFIMofTrainee(int id_trainee); TaskAmmFim selectTaskFIMbyID(int id_task); - int deleteReportFIM(int task_id); int insertReportFIM(TaskAmmFim task); - //Обучаемый - Trainee selectTrainee(int id_trainee); - QList selectAllTraineesInGroup(int id_group); - int selectTraineeID(QString login, QString password = QStringLiteral("")); - QString selectTraineeNameByLogin(QString login); - QString selectTraineeNameOnComputer(QString computer_name); - Trainee selectTraineeOnComputer(QString computer_name); - bool selectTraineeArchived(int id_trainee); - bool selectTraineeLoggedIn(int id_trainee); - int updateTraineeLoggedIn(int id_trainee, bool loggedIn); - bool updateAllTraineesLoggedIn(bool loggedIn); - int updateTraineeArchived(int id_trainee, bool archived); - - int insertTrainee(int id_group); - int insertTrainee(Trainee trainee); - int deleteTrainee(int id_trainee); - int updateTrainee(Trainee trainee); - - //Тайминг - int insertTimingTrainee(int id_trainee); - int updateTimingTrainee(int id_trainee, TimingOfTrainee timing); - TimingOfTrainee selectTimingTrainee(int id_trainee); - private: DataBaseSettings getDataBaseSettings(); int queryExecInt(QString queryStr); @@ -122,6 +122,7 @@ protected: private: bool transactionBegined; QMutex mtxAccess; + QWidget* ownerWidget; }; #endif // DATABASELMS_H diff --git a/DataBaseLMS/databaselms_groups.cpp b/DataBaseLMS/databaselms_groups.cpp new file mode 100644 index 0000000..6d7f1e0 --- /dev/null +++ b/DataBaseLMS/databaselms_groups.cpp @@ -0,0 +1,95 @@ +#include "databaselms.h" + +#include +#include +#include +#include + + +QList DataBaseLMS::selectAllGroups() +{ + QList listGroups; + + QString queryStr = QString("SELECT group_id, name " + "FROM public.groups " + "ORDER BY group_id ASC"); + + QSqlQuery query = QSqlQuery(*db); + + if(queryExec(queryStr, &query)) + { + while (query.next()) + {//Группа + Group group; + group.setID(query.value(0).toInt()); + group.setName(query.value(1).toString()); + + listGroups.append(group); + } + } + + return listGroups; +} + +Group DataBaseLMS::selectGroup(int id_group) +{ + Group group; + + QString queryStr = QString("SELECT group_id, name " + "FROM public.groups " + "WHERE groups.group_id = %1 ").arg( + id_group); + + QSqlQuery query = QSqlQuery(*db); + + if(queryExec(queryStr, &query)) + { + if (query.first()) + {//Инструктор + group.setID(query.value(0).toInt()); + group.setName(query.value(1).toString()); + } + } + + return group; +} + +int DataBaseLMS::insertGroup() +{ + QString queryStr = QString("INSERT INTO public.groups " + "DEFAULT VALUES " + "RETURNING group_id"); + + return queryExecInt(queryStr); +} + +int DataBaseLMS::insertGroup(Group group) +{ + QString queryStr = QString("INSERT INTO public.groups (name) " + "VALUES ('%1') " + "RETURNING groups.group_id").arg( + group.getName()); + + return queryExecInt(queryStr); +} + +int DataBaseLMS::deleteGroup(int id_group) +{ + QString queryStr = QString("DELETE FROM public.groups " + "WHERE group_id = %1 " + "RETURNING groups.group_id").arg( + QString::number(id_group)); + + return queryExecInt(queryStr); +} + +int DataBaseLMS::updateGroup(Group group) +{ + QString queryStr = QString("UPDATE public.groups SET name = '%1' " + "WHERE group_id = %2 " + "RETURNING groups.group_id").arg( + group.getName(), + QString::number(group.getID()) ); + + return queryExecInt(queryStr); +} diff --git a/DataBaseLMS/databaselms_instructors.cpp b/DataBaseLMS/databaselms_instructors.cpp new file mode 100644 index 0000000..51649e3 --- /dev/null +++ b/DataBaseLMS/databaselms_instructors.cpp @@ -0,0 +1,231 @@ +#include "databaselms.h" + +#include +#include +#include +#include + + +QList DataBaseLMS::selectAllInstructors() +{ + QList listInstructors; + + QString queryStr = QString("SELECT user_id, name, login, password, is_admin, archived, logged_in " + "FROM public.users " + "WHERE users.type = '%1' " + "ORDER BY user_id ASC").arg( + TypeUserDBInstructor); + + QSqlQuery query = QSqlQuery(*db); + + if(queryExec(queryStr, &query)) + { + while (query.next()) + {//Инструктор + Instructor instructor; + instructor.setID(query.value(0).toInt()); + instructor.setName(query.value(1).toString()); + instructor.setLogin(query.value(2).toString()); + instructor.setPassword(query.value(3).toString()); + instructor.setIsAdmin(query.value(4).toBool()); + instructor.setArchived(query.value(5).toBool()); + instructor.setLoggedIn(query.value(6).toBool()); + + listInstructors.append(instructor); + } + } + + return listInstructors; +} + +Instructor DataBaseLMS::selectInstructor(int id_instructor) +{ + Instructor instructor; + + QString queryStr = QString("SELECT user_id, name, login, password, is_admin, archived, logged_in " + "FROM public.users " + "WHERE users.user_id = %1 AND users.type = '%2' ").arg( + QString::number(id_instructor), + TypeUserDBInstructor); + + QSqlQuery query = QSqlQuery(*db); + + if(queryExec(queryStr, &query)) + { + if (query.first()) + {//Инструктор + instructor.setID(query.value(0).toInt()); + instructor.setName(query.value(1).toString()); + instructor.setLogin(query.value(2).toString()); + instructor.setPassword(query.value(3).toString()); + instructor.setIsAdmin(query.value(4).toBool()); + instructor.setArchived(query.value(5).toBool()); + instructor.setLoggedIn(query.value(6).toBool()); + } + } + + return instructor; +} + +int DataBaseLMS::selectInstructorID(QString login, QString password) +{ + QString queryStr; + + if(password != QStringLiteral("")) + { + queryStr = QString("SELECT users.user_id " + "FROM public.users " + "WHERE login = '%1' AND password = '%2' AND users.type = '%3' ").arg( + login, + password, + TypeUserDBInstructor); + } + else + { + queryStr = QString("SELECT users.user_id " + "FROM public.users " + "WHERE login = '%1' AND users.type = '%2' ").arg( + login, + TypeUserDBInstructor); + } + + return queryExecInt(queryStr); +} + +QString DataBaseLMS::selectInstructorNameByLogin(QString login) +{ + QString queryStr = QString("SELECT users.name " + "FROM public.users " + "WHERE users.login = '%1' AND users.type = '%2' ").arg( + login, + TypeUserDBInstructor ); + + return queryExecString(queryStr); +} + +bool DataBaseLMS::selectInstructorIsAdmin(int id_instructor) +{ + QString queryStr = QString("SELECT users.is_admin " + "FROM public.users " + "WHERE user_id = %1 AND users.type = '%2' ").arg( + QString::number(id_instructor), + TypeUserDBInstructor ); + + return queryExecBool(queryStr); +} + +bool DataBaseLMS::selectInstructorLoggedIn(int id_instructor) +{ + QString queryStr = QString("SELECT users.logged_in " + "FROM public.users " + "WHERE user_id = %1 AND users.type = '%2' ").arg( + QString::number(id_instructor), + TypeUserDBInstructor ); + + return queryExecBool(queryStr); +} + +bool DataBaseLMS::selectInstructorArchived(int id_instructor) +{ + QString queryStr = QString("SELECT users.archived " + "FROM public.users " + "WHERE user_id = %1 AND users.type = '%2' ").arg( + QString::number(id_instructor), + TypeUserDBInstructor ); + + return queryExecBool(queryStr); +} + +int DataBaseLMS::updateInstructorLoggedIn(int id_instructor, bool loggedIn) +{ + QString queryStr = QString("UPDATE public.users " + "SET logged_in = %1 " + "WHERE user_id = %2 AND users.type = '%3' " + "RETURNING users.user_id").arg( + loggedIn ? "true" : "false", + QString::number(id_instructor), + TypeUserDBInstructor); + + return queryExecInt(queryStr); +} + +bool DataBaseLMS::updateAllInstructorsLoggedIn(bool loggedIn) +{ + QString queryStr = QString("UPDATE public.users " + "SET logged_in = %1 " + "WHERE users.type = '%2' ").arg( + loggedIn ? "true" : "false", + TypeUserDBInstructor); + + QSqlQuery query = QSqlQuery(*db); + + return queryExec(queryStr, &query); +} + +int DataBaseLMS::updateInstructorArchived(int id_instructor, bool archived) +{ + QString queryStr = QString("UPDATE public.users " + "SET archived = %1 " + "WHERE user_id = %2 AND users.type = '%3' " + "RETURNING users.user_id").arg( + archived ? "true" : "false", + QString::number(id_instructor), + TypeUserDBInstructor); + + return queryExecInt(queryStr); +} + +int DataBaseLMS::insertInstructor() +{ + QString queryStr = QString("INSERT INTO public.users (type, name, login, password, is_admin, archived, logged_in)" + "VALUES ('%1', DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT)" + "RETURNING user_id").arg( + TypeUserDBInstructor); + + return queryExecInt(queryStr); +} + +int DataBaseLMS::insertInstructor(Instructor instructor) +{ + QString queryStr = QString("INSERT INTO public.users (type, name, login, password, is_admin, archived, logged_in) " + "VALUES ('%1', '%2', '%3', '%4', %5, %6, %7) " + "RETURNING user_id").arg( + TypeUserDBInstructor, + instructor.getName(), + instructor.getLogin(), + instructor.getPassword(), + instructor.getIsAdmin() ? "true" : "false", + instructor.getArchived() ? "true" : "false", + instructor.getLoggedIn() ? "true" : "false"); + + return queryExecInt(queryStr); +} + +int DataBaseLMS::deleteInstructor(int id_instructor) +{ + QString queryStr = QString("DELETE FROM public.users " + "WHERE user_id = %1 AND users.type = '%2' " + "RETURNING users.user_id").arg( + QString::number(id_instructor), + TypeUserDBInstructor); + + return queryExecInt(queryStr); +} + +int DataBaseLMS::updateInstructor(Instructor instructor) +{ + QString queryStr = QString("UPDATE public.users " + "SET name = '%1', login = '%2', password = '%3', is_admin = %4, archived = %5, logged_in = %6 " + "WHERE user_id = %7 AND users.type = '%8' " + "RETURNING users.user_id").arg( + instructor.getName(), + instructor.getLogin(), + instructor.getPassword(), + instructor.getIsAdmin() ? "true" : "false", + instructor.getArchived() ? "true" : "false", + instructor.getLoggedIn() ? "true" : "false", + QString::number(instructor.getID()), + TypeUserDBInstructor); + + return queryExecInt(queryStr); +} diff --git a/DataBaseLMS/databaselms_tasks.cpp b/DataBaseLMS/databaselms_tasks.cpp new file mode 100644 index 0000000..d47cf8a --- /dev/null +++ b/DataBaseLMS/databaselms_tasks.cpp @@ -0,0 +1,830 @@ +#include "databaselms.h" + +#include +#include +#include +#include + +int DataBaseLMS::insertTaskAMM(TaskAmmFim task, int id_trainee) +{ + task.ammProcedure.title = task.ammProcedure.title.replace("'", "''"); //Задваиваем одинарные кавычки + + QString queryStr = QString("INSERT INTO public.tasks_amm (title, dm_code, fk_trainee_id) " + "VALUES ('%1', '%2', %3) " + "RETURNING tasks_amm.task_id").arg( + task.ammProcedure.title, + task.ammProcedure.dmCode, + QString::number(id_trainee)); + + return queryExecInt(queryStr); +} + +int DataBaseLMS::updateTaskAMM(TaskAmmFim task) +{ + task.ammProcedure.title = task.ammProcedure.title.replace("'", "''"); //Задваиваем одинарные кавычки + + QString queryStr = QString("UPDATE public.tasks_amm SET title = '%1', dm_code = '%2', status = '%3' " + "WHERE task_id = %4 " + "RETURNING tasks_amm.task_id").arg( + task.ammProcedure.title, + task.ammProcedure.dmCode, + task.status, + QString::number(task.getID()) ); + + return queryExecInt(queryStr); +} + +int DataBaseLMS::updateStatusTaskAMM(int task_id, QString status) +{ + QString queryStr; + bool resBool = false; + int id_trainee = 0; + + resBool = db->transaction(); + + queryStr = QString("SELECT users.user_id " + "FROM public.users JOIN public.tasks_amm ON users.user_id = tasks_amm.fk_trainee_id " + "WHERE tasks_amm.task_id = %1 " + "ORDER BY users.user_id ASC").arg( + QString::number(task_id)); + + QSqlQuery query = QSqlQuery(*db); + + if(queryExec(queryStr, &query)) + { + if (query.first()) + {//Обучаемый + id_trainee = query.value(0).toInt(); + } + } + if(!id_trainee) + { + resBool = db->rollback(); + return 0; + } + + + queryStr = QString("UPDATE public.tasks_amm SET status = '%1' " + "WHERE task_id = %2 " + "RETURNING tasks_amm.task_id").arg( + status, + QString::number(task_id) ); + + + if(!queryExecInt(queryStr)) + { + resBool = db->rollback(); + return 0; + } + + resBool = db->commit(); + return id_trainee; +} + +int DataBaseLMS::deleteTaskAMM(int id_task) +{ + QString queryStr; + bool resBool = false; + int id_trainee = 0; + + resBool = db->transaction(); + + queryStr = QString("SELECT users.user_id " + "FROM public.users JOIN public.tasks_amm ON users.user_id = tasks_amm.fk_trainee_id " + "WHERE tasks_amm.task_id = %1 " + "ORDER BY users.user_id ASC").arg( + QString::number(id_task)); + + QSqlQuery query = QSqlQuery(*db); + + if(queryExec(queryStr, &query)) + { + if (query.first()) + {//Обучаемый + id_trainee = query.value(0).toInt(); + } + } + if(!id_trainee) + { + resBool = db->rollback(); + return 0; + } + + queryStr = QString("DELETE FROM public.tasks_amm " + "WHERE task_id = %1 " + "RETURNING tasks_amm.task_id").arg( + QString::number(id_task)); + + if(!queryExecInt(queryStr)) + { + resBool = db->rollback(); + return 0; + } + + resBool = db->commit(); + return id_trainee; +} + +QList DataBaseLMS::selectTasksAMMofTrainee(int id_trainee) +{ + QList listTasks; + + QString queryStr = QString("SELECT tasks_amm.task_id, tasks_amm.title, tasks_amm.dm_code, tasks_amm.status, " + "users.user_id " + "FROM public.tasks_amm JOIN public.users ON users.user_id = tasks_amm.fk_trainee_id " + "WHERE tasks_amm.fk_trainee_id = %1 " + "ORDER BY tasks_amm.task_id ASC").arg( + id_trainee); + + QSqlQuery query = QSqlQuery(*db); + + if(queryExec(queryStr, &query)) + { + while (query.next()) + {//Задача + TaskAmmFim task; + + task.setID(query.value(0).toInt()); + task.ammProcedure.title = query.value(1).toString(); + task.ammProcedure.dmCode = query.value(2).toString(); + task.status = query.value(3).toString(); + + listTasks.append(task); + } + } + + return listTasks; +} + +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 " + "FROM public.tasks_amm " + "WHERE tasks_amm.task_id = %1 " + "ORDER BY tasks_amm.task_id ASC").arg( + id_task); + + QSqlQuery query = QSqlQuery(*db); + + if(queryExec(queryStr, &query)) + { + if (query.first()) + {//Задача + task.setID(query.value(0).toInt()); + task.ammProcedure.title = query.value(1).toString(); + task.ammProcedure.dmCode = query.value(2).toString(); + task.status = query.value(3).toString(); + } + } + + return task; +} + +int DataBaseLMS::insertTaskFIM(TaskAmmFim task, int id_trainee) +{ + QString queryStr; + bool resBool = false; + + resBool = db->transaction(); + + task.title = task.title.replace("'", "''"); //Задваиваем одинарные кавычки + + queryStr = QString("INSERT INTO public.tasks_fim (title, fk_trainee_id) " + "VALUES ('%1', %2) " + "RETURNING tasks_fim.task_id").arg( + task.title, + QString::number(id_trainee)); + + int task_id = queryExecInt(queryStr); + if(!task_id) + { + resBool = db->rollback(); + return 0; + } + + for(Malfunction malfanction : task.malfunctionList) + { + malfanction.description = malfanction.description.replace("'", "''"); //Задваиваем одинарные кавычки + + queryStr = QString("INSERT INTO public.malfunctions (num, dm_code, description, fk_task_fim_id) " + "VALUES ('%1', '%2', '%3', %4) " + "RETURNING malfunctions.malfunction_id").arg( + malfanction.num, + malfanction.dmCode, + malfanction.description, + QString::number(task_id)); + + 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, fk_malfunction_id) " + "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(); + return task_id; +} + +int DataBaseLMS::updateTaskFIM(TaskAmmFim task) +{ + task.title = task.title.replace("'", "''"); //Задваиваем одинарные кавычки + + QString queryStr = QString("UPDATE public.tasks_fim SET title = '%1', status = '%2' " + "WHERE task_id = %3 " + "RETURNING tasks_fim.task_id").arg( + task.title, + task.status, + QString::number(task.getID()) ); + + return queryExecInt(queryStr); +} + +int DataBaseLMS::updateStatusTaskFIM(int task_id, QString status) +{ + QString queryStr; + bool resBool = false; + int id_trainee = 0; + + resBool = db->transaction(); + + queryStr = QString("SELECT users.user_id " + "FROM public.users JOIN public.tasks_fim ON users.user_id = tasks_fim.fk_trainee_id " + "WHERE tasks_fim.task_id = %1 " + "ORDER BY users.user_id ASC").arg( + QString::number(task_id)); + + QSqlQuery query = QSqlQuery(*db); + + if(queryExec(queryStr, &query)) + { + if (query.first()) + {//Обучаемый + id_trainee = query.value(0).toInt(); + } + } + if(!id_trainee) + { + resBool = db->rollback(); + return 0; + } + + queryStr = QString("UPDATE public.tasks_fim SET status = '%1' " + "WHERE task_id = %2 " + "RETURNING tasks_fim.task_id").arg( + status, + QString::number(task_id) ); + + QSqlQuery query1 = QSqlQuery(*db); + if(!queryExec(queryStr, &query1)) + { + resBool = db->rollback(); + return 0; + } + + resBool = db->commit(); + return id_trainee; +} + +int DataBaseLMS::deleteTaskFIM(int id_task) +{ + QString queryStr; + bool resBool = false; + int id_trainee = 0; + + resBool = db->transaction(); + + queryStr = QString("SELECT users.user_id " + "FROM public.users JOIN public.tasks_fim ON users.user_id = tasks_fim.fk_trainee_id " + "WHERE tasks_fim.task_id = %1 " + "ORDER BY users.user_id ASC").arg( + QString::number(id_task)); + + QSqlQuery query = QSqlQuery(*db); + + if(queryExec(queryStr, &query)) + { + if (query.first()) + {//Обучаемый + id_trainee = query.value(0).toInt(); + } + } + if(!id_trainee) + { + resBool = db->rollback(); + return 0; + } + + //Выгребаем все malfunction для этой задачи + queryStr = QString("SELECT malfunctions.malfunction_id " + "FROM public.malfunctions JOIN public.tasks_fim ON tasks_fim.task_id = malfunctions.fk_task_fim_id " + "WHERE malfunctions.fk_task_fim_id = %1 " + "ORDER BY malfunctions.malfunction_id ASC").arg( + id_task); + QSqlQuery queryMalf = QSqlQuery(*db); + + if(queryExec(queryStr, &queryMalf)) + { + while (queryMalf.next()) + {//Неисправность + int malfunction_id = 0; + + malfunction_id = queryMalf.value(0).toString().toInt(); + + if(malfunction_id) + { + queryStr = QString("DELETE FROM public.malf_sign " + "WHERE fk_malfunction_id = %1 ").arg( + malfunction_id); + + QSqlQuery querySign = QSqlQuery(*db); + if(!queryExec(queryStr, &querySign)) + { + resBool = db->rollback(); + return 0; + } + } + }; + } + else + { + resBool = db->rollback(); + return 0; + } + + + queryStr = QString("DELETE FROM public.malfunctions " + "WHERE fk_task_fim_id = %1 ").arg( + QString::number(id_task)); + + QSqlQuery query1 = QSqlQuery(*db); + if(!queryExec(queryStr, &query1)) + { + resBool = db->rollback(); + return 0; + } + + queryStr = QString("DELETE FROM public.tasks_fim " + "WHERE task_id = %1 " + "RETURNING tasks_fim.task_id").arg( + QString::number(id_task)); + + if(!queryExecInt(queryStr)) + { + resBool = db->rollback(); + return 0; + } + + resBool = db->commit(); + return id_trainee; +} + +QList DataBaseLMS::selectTasksFIMofTrainee(int id_trainee) +{ + QList listTasks; + QString queryStr; + bool resBool = false; + + resBool = db->transaction(); + + queryStr = QString("SELECT tasks_fim.task_id, tasks_fim.title, tasks_fim.status, " + "users.user_id " + "FROM public.tasks_fim JOIN public.users ON users.user_id = tasks_fim.fk_trainee_id " + "WHERE tasks_fim.fk_trainee_id = %1 " + "ORDER BY tasks_fim.task_id ASC").arg( + id_trainee); + + QSqlQuery query = QSqlQuery(*db); + + if(queryExec(queryStr, &query)) + { + while (query.next()) + {//Задача + TaskAmmFim task; + + 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.fk_task_fim_id " + "WHERE malfunctions.fk_task_fim_id = %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 fk_malfunction_id = %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 QList(); + } + + + //Выгребаем отчет для этой задачи + int report_id = 0; + queryStr = QString("SELECT reports.report_id " + "FROM public.reports " + "WHERE fk_task_fim_id = %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 QList(); + } + + 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.fk_report_id, report_items.number " + "FROM public.report_items " + "WHERE fk_report_id = %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 QList(); + } + } + + listTasks.append(task); + }; + } + else + { + resBool = db->rollback(); + return QList(); + } + + resBool = db->commit(); + return listTasks; +} + +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.fk_task_fim_id " + "WHERE malfunctions.fk_task_fim_id = %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 fk_malfunction_id = %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 fk_task_fim_id = %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.fk_report_id, report_items.number " + "FROM public.report_items " + "WHERE fk_report_id = %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; +} + +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 fk_task_fim_id = %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 fk_report_id = %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 (fk_task_fim_id) " + "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, fk_report_id, 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; +} diff --git a/DataBaseLMS/databaselms_trainees.cpp b/DataBaseLMS/databaselms_trainees.cpp new file mode 100644 index 0000000..d351765 --- /dev/null +++ b/DataBaseLMS/databaselms_trainees.cpp @@ -0,0 +1,565 @@ +#include "databaselms.h" + +#include +#include +#include +#include + + +QList DataBaseLMS::selectAllTrainees() +{ + QList listTrainees; + + QString queryStr = QString("SELECT users.user_id, users.name, users.login, users.password, users.archived, users.logged_in, " + "groups.group_id, groups.name, " + "computers.computer_id, computers.name, computers.ip_address, " + "classrooms.classroom_id, classrooms.name " + "FROM public.users JOIN public.groups ON groups.group_id = users.fk_group_id " + "LEFT OUTER JOIN public.computers ON computers.computer_id = users.fk_computer_id " + "LEFT OUTER JOIN public.classrooms ON classrooms.classroom_id = computers.fk_classroom_id " + "WHERE users.type = '%1' " + "ORDER BY groups.name, users.name ASC").arg( + TypeUserDBTrainee); + + QSqlQuery query = QSqlQuery(*db); + + if(queryExec(queryStr, &query)) + { + while (query.next()) + {//Обучаемый + Trainee trainee; + + trainee.setID(query.value(0).toInt()); + trainee.setName(query.value(1).toString()); + trainee.setLogin(query.value(2).toString()); + trainee.setPassword(query.value(3).toString()); + trainee.setArchived(query.value(4).toBool()); + trainee.setLoggedIn(query.value(5).toBool()); + + Group group = Group(query.value(6).toInt(), query.value(7).toString()); + trainee.setGroup(group); + + Classroom classroom = Classroom(query.value(11).toInt(), query.value(12).toString()); + Computer computer = Computer(query.value(8).toInt(), query.value(9).toString(), query.value(10).toString(), classroom); + trainee.setComputer(computer); + + listTrainees.append(trainee); + } + } + + return listTrainees; +} + +Trainee DataBaseLMS::selectTrainee(int id_trainee) +{ + Trainee trainee; + + QString queryStr = QString("SELECT users.user_id, users.name, users.login, users.password, users.archived, users.logged_in, " + "groups.group_id, groups.name, " + "computers.computer_id, computers.name, computers.ip_address, " + "classrooms.classroom_id, classrooms.name " + "FROM public.users JOIN public.groups ON groups.group_id = users.fk_group_id " + "LEFT OUTER JOIN public.computers ON computers.computer_id = users.fk_computer_id " + "LEFT OUTER JOIN public.classrooms ON classrooms.classroom_id = computers.fk_classroom_id " + "WHERE users.user_id = %1 AND users.type = '%2' " + "ORDER BY groups.name, trainees.name ASC").arg( + QString::number(id_trainee), + TypeUserDBTrainee); + + QSqlQuery query = QSqlQuery(*db); + + if(queryExec(queryStr, &query)) + { + if (query.first()) + {//Обучаемый + trainee.setID(query.value(0).toInt()); + trainee.setName(query.value(1).toString()); + trainee.setLogin(query.value(2).toString()); + trainee.setPassword(query.value(3).toString()); + trainee.setArchived(query.value(4).toBool()); + trainee.setLoggedIn(query.value(5).toBool()); + + Group group = Group(query.value(6).toInt(), query.value(7).toString()); + trainee.setGroup(group); + + Classroom classroom = Classroom(query.value(11).toInt(), query.value(12).toString()); + Computer computer = Computer(query.value(8).toInt(), query.value(9).toString(), query.value(10).toString(), classroom); + trainee.setComputer(computer); + } + } + + return trainee; +} + +QList DataBaseLMS::selectAllTraineesInGroup(int id_group) +{ + QList listTrainees; + + QString queryStr = QString("SELECT users.user_id, users.name, users.login, users.password, users.archived, users.logged_in, " + "groups.group_id, groups.name, " + "computers.computer_id, computers.name, computers.ip_address, " + "classrooms.classroom_id, classrooms.name " + "FROM public.users JOIN public.groups ON groups.group_id = users.fk_group_id " + "LEFT OUTER JOIN public.computers ON computers.computer_id = users.fk_computer_id " + "LEFT OUTER JOIN public.classrooms ON classrooms.classroom_id = computers.fk_classroom_id " + "WHERE users.fk_group_id = %1 AND users.type = '%2' " + "ORDER BY groups.name, users.name ASC").arg( + QString::number(id_group), + TypeUserDBTrainee); + + QSqlQuery query = QSqlQuery(*db); + + if(queryExec(queryStr, &query)) + { + while (query.next()) + {//Обучаемый + Trainee trainee; + + trainee.setID(query.value(0).toInt()); + trainee.setName(query.value(1).toString()); + trainee.setLogin(query.value(2).toString()); + trainee.setPassword(query.value(3).toString()); + trainee.setArchived(query.value(4).toBool()); + trainee.setLoggedIn(query.value(5).toBool()); + + Group group = Group(query.value(6).toInt(), query.value(7).toString()); + trainee.setGroup(group); + + Classroom classroom = Classroom(query.value(11).toInt(), query.value(12).toString()); + Computer computer = Computer(query.value(8).toInt(), query.value(9).toString(), query.value(10).toString(), classroom); + trainee.setComputer(computer); + + listTrainees.append(trainee); + } + } + + return listTrainees; +} + +int DataBaseLMS::selectTraineeID(QString login, QString password) +{ + QString queryStr; + + if(password != QStringLiteral("")) + { + queryStr = QString("SELECT users.user_id " + "FROM public.users " + "WHERE login = '%1' AND password = '%2' AND users.type = '%3' ").arg( + login, + password, + TypeUserDBTrainee); + } + else + { + queryStr = QString("SELECT users.user_id " + "FROM public.users " + "WHERE login = '%1' AND users.type = '%2' ").arg( + login, + TypeUserDBTrainee); + } + + return queryExecInt(queryStr); +} + +QString DataBaseLMS::selectTraineeNameByLogin(QString login) +{ + QString queryStr = QString("SELECT users.name " + "FROM public.users " + "WHERE users.login = '%1' AND users.type = '%2' ").arg( + login, + TypeUserDBTrainee); + + return queryExecString(queryStr); +} + +QString DataBaseLMS::selectTraineeNameOnComputer(QString computer_name) +{ + QString queryStr = QString("SELECT users.name " + "FROM public.users JOIN public.computers ON computers.computer_id = users.fk_computer_id " + "WHERE computers.name = '%1' AND users.type = '%2' ").arg( + computer_name, + TypeUserDBTrainee); + + return queryExecString(queryStr); +} + +Trainee DataBaseLMS::selectTraineeOnComputer(QString computer_name) +{ + Trainee trainee; + + QString queryStr = QString("SELECT users.trainee_id, users.name, users.login, users.password, users.archived, users.logged_in, " + "groups.group_id, groups.name, " + "computers.computer_id, computers.name, computers.ip_address, " + "classrooms.classroom_id, classrooms.name " + "FROM public.users JOIN public.groups ON groups.group_id = users.fk_group_id " + "LEFT OUTER JOIN public.computers ON computers.computer_id = users.fk_computer_id " + "LEFT OUTER JOIN public.classrooms ON classrooms.classroom_id = computers.fk_classroom_id " + "WHERE computers.name = '%1' AND users.type = '%2' ").arg( + computer_name, + TypeUserDBTrainee); + + QSqlQuery query = QSqlQuery(*db); + + if(queryExec(queryStr, &query)) + { + if (query.first()) + {//Обучаемый + trainee.setID(query.value(0).toInt()); + trainee.setName(query.value(1).toString()); + trainee.setLogin(query.value(2).toString()); + trainee.setPassword(query.value(3).toString()); + trainee.setArchived(query.value(4).toBool()); + trainee.setLoggedIn(query.value(5).toBool()); + + Group group = Group(query.value(6).toInt(), query.value(7).toString()); + trainee.setGroup(group); + + Classroom classroom = Classroom(query.value(11).toInt(), query.value(12).toString()); + Computer computer = Computer(query.value(8).toInt(), query.value(9).toString(), query.value(10).toString(), classroom); + trainee.setComputer(computer); + } + } + + return trainee; +} + +bool DataBaseLMS::selectTraineeArchived(int id_trainee) +{ + QString queryStr = QString("SELECT users.archived " + "FROM public.users " + "WHERE user_id = %1 AND users.type = '%2' ").arg( + QString::number(id_trainee), + TypeUserDBTrainee); + + return queryExecBool(queryStr); +} + +bool DataBaseLMS::selectTraineeLoggedIn(int id_trainee) +{ + QString queryStr = QString("SELECT users.logged_in " + "FROM public.users " + "WHERE user_id = %1 AND users.type = '%2' ").arg( + QString::number(id_trainee), + TypeUserDBTrainee ); + + return queryExecBool(queryStr); +} + +int DataBaseLMS::updateTraineeLoggedIn(int id_trainee, bool loggedIn) +{ + QString queryStr = QString("UPDATE public.users " + "SET logged_in = %1 " + "WHERE user_id = %2 AND users.type = '%3' " + "RETURNING users.user_id").arg( + loggedIn ? "true" : "false", + QString::number(id_trainee), + TypeUserDBTrainee); + + return queryExecInt(queryStr); +} + +bool DataBaseLMS::updateAllTraineesLoggedIn(bool loggedIn) +{ + QString queryStr = QString("UPDATE public.users " + "SET logged_in = %1 " + "WHERE users.type = '%2' ").arg( + loggedIn ? "true" : "false", + TypeUserDBTrainee); + + QSqlQuery query = QSqlQuery(*db); + + return queryExec(queryStr, &query); +} + +int DataBaseLMS::updateTraineeArchived(int id_trainee, bool archived) +{ + QString queryStr = QString("UPDATE public.users " + "SET archived = %1 " + "WHERE user_id = %2 AND users.type = '%3' " + "RETURNING users.user_id").arg( + archived ? "true" : "false", + QString::number(id_trainee), + TypeUserDBTrainee); + + return queryExecInt(queryStr); +} + +int DataBaseLMS::insertTrainee(int id_group) +{ + QString queryStr = QString("INSERT INTO public.users (type, name, login, password, archived, logged_in, fk_group_id) " + "VALUES ('%1', DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT, %2) " + "RETURNING users.user_id").arg( + TypeUserDBTrainee, + QString::number(id_group)); + + return queryExecInt(queryStr); +} + +int DataBaseLMS::insertTrainee(Trainee trainee) +{ + QString queryStr = QString("INSERT INTO public.users (type, name, login, password, archived, logged_in, fk_group_id) " + "VALUES ('%1', '%2', '%3', '%4', %5, %6, %7) " + "RETURNING users.user_id").arg( + TypeUserDBTrainee, + trainee.getName(), + trainee.getLogin(), + trainee.getPassword(), + trainee.getArchived() ? "true" : "false", + trainee.getLoggedIn() ? "true" : "false", + QString::number(trainee.getGroup().getID())); + + return queryExecInt(queryStr); +} + +int DataBaseLMS::deleteTrainee(int id_trainee) +{ + QString queryStr; + int res = 0; + bool resBool = false; + + resBool = db->transaction(); + + + //Удаление задач AMM + queryStr = QString("DELETE FROM public.tasks_amm " + "WHERE fk_trainee_id = %1 ").arg( + QString::number(id_trainee)); + + QSqlQuery queryTasksAMMDEL = QSqlQuery(*db); + if(!queryExec(queryStr, &queryTasksAMMDEL)) + { + resBool = db->rollback(); + return 0; + } + + + //Удаление задач FIM + + /*Выборка задач FIM для этого обучаемого*/ + queryStr = QString("SELECT tasks_fim.task_id " + "FROM public.tasks_fim " + "WHERE tasks_fim.fk_trainee_id = %1 " + "ORDER BY tasks_fim.task_id ASC").arg( + id_trainee); + + QSqlQuery queryTasksFIMSEL = QSqlQuery(*db); + if(queryExec(queryStr, &queryTasksFIMSEL)) + { + while (queryTasksFIMSEL.next()) + {//Задача + int task_id = queryTasksFIMSEL.value(0).toInt(); + + /*Выборка неисправностей для этой задачи*/ + queryStr = QString("SELECT malfunctions.malfunction_id " + "FROM public.malfunctions " + "WHERE malfunctions.fk_task_fim_id = %1 " + "ORDER BY malfunctions.malfunction_id ASC").arg( + task_id); + + QSqlQuery queryMulfSEL = QSqlQuery(*db); + if(queryExec(queryStr, &queryMulfSEL)) + { + while (queryMulfSEL.next()) + {//Неисправность + int mulf_id = queryMulfSEL.value(0).toInt(); + + /*Удаление сигналов для этой неисправности*/ + queryStr = QString("DELETE FROM public.mals_signs " + "WHERE mals_signs.fk_mulfunction_id = %1 ").arg( + mulf_id); + QSqlQuery querySign = QSqlQuery(*db); + if(!queryExec(queryStr, &querySign)) + { + resBool = db->rollback(); + return 0; + } + }; + + } + else + { + resBool = db->rollback(); + return 0; + } + + /*Удаление неисправностей*/ + queryStr = QString("DELETE FROM public.malfunctions " + "WHERE malfunctions.fk_task_fim_id = %1 ").arg( + task_id); + QSqlQuery queryMulfDEL = QSqlQuery(*db); + if(!queryExec(queryStr, &queryMulfDEL)) + { + resBool = db->rollback(); + return 0; + } + + /*Удаление отчетов для задачи*/ + /*Выборка отчетов для этой задачи*/ + queryStr = QString("SELECT reports.report_id " + "FROM public.reports " + "WHERE reports.fk_task_fim_id = %1 " + "ORDER BY reports.report_id ASC").arg( + task_id); + QSqlQuery queryReportsSEL = QSqlQuery(*db); + if(queryExec(queryStr, &queryReportsSEL)) + { + while (queryReportsSEL.next()) + {//отчет + int report_id = queryReportsSEL.value(0).toInt(); + + /*Удаление items для этого отчета*/ + queryStr = QString("DELETE FROM public.report_items " + "WHERE report_items.fk_report_id = %1 ").arg( + report_id); + QSqlQuery queryReportDEL = QSqlQuery(*db); + if(!queryExec(queryStr, &queryReportDEL)) + { + resBool = db->rollback(); + return 0; + } + }; + + } + else + { + resBool = db->rollback(); + return 0; + } + + /*Удаление отчетов*/ + queryStr = QString("DELETE FROM public.reports " + "WHERE reports.fk_task_fim_id = %1 ").arg( + task_id); + QSqlQuery queryReportsDEL = QSqlQuery(*db); + if(!queryExec(queryStr, &queryReportsDEL)) + { + resBool = db->rollback(); + return 0; + } + // //////////////////////////// + }; + } + else + { + resBool = db->rollback(); + return 0; + } + + /*Удаление непосредственно задач FIM*/ + queryStr = QString("DELETE FROM public.tasks_fim " + "WHERE fk_trainee_id = %1 ").arg( + QString::number(id_trainee)); + + QSqlQuery queryTasksFIMDEL = QSqlQuery(*db); + if(!queryExec(queryStr, &queryTasksFIMDEL)) + { + resBool = db->rollback(); + return 0; + } + + /*Удаление таймингов для обучаемого*/ + queryStr = QString("DELETE FROM public.timings " + "WHERE fk_trainee_id = %1 ").arg( + QString::number(id_trainee)); + + QSqlQuery queryTimingsDEL = QSqlQuery(*db); + if(!queryExec(queryStr, &queryTimingsDEL)) + { + resBool = db->rollback(); + return 0; + } + // //////////////////////////// + + + //Удаление обучаемого + queryStr = QString("DELETE FROM public.users " + "WHERE user_id = %1 AND users.type = '%2' " + "RETURNING users.user_id").arg( + QString::number(id_trainee), + TypeUserDBTrainee); + + res = queryExecInt(queryStr); + if(res) + { + resBool = db->commit(); + return res; + } + else + { + resBool = db->rollback(); + return 0; + } +} + +int DataBaseLMS::updateTrainee(Trainee trainee) +{ + QString computer_id = (trainee.getComputer().getID() == 0 ? QStringLiteral("null") : QString::number(trainee.getComputer().getID())); + + QString queryStr = QString("UPDATE public.users " + "SET name = '%1', login = '%2', password = '%3', archived = %4, logged_in = %5, " + "fk_group_id = %6, " + "fk_computer_id = %7 " + "WHERE user_id = %8 AND users.type = '%9' " + "RETURNING users.user_id").arg( + trainee.getName(), + trainee.getLogin(), + trainee.getPassword(), + trainee.getArchived() ? "true" : "false", + trainee.getLoggedIn() ? "true" : "false", + QString::number(trainee.getGroup().getID()), + computer_id, + QString::number(trainee.getID()), + TypeUserDBTrainee); + + return queryExecInt(queryStr); +} + +int DataBaseLMS::insertTimingTrainee(int id_trainee) +{ + QString queryStr = QString("INSERT INTO public.timings (entry_time, exit_time, operating_time, fk_trainee_id) " + "VALUES (DEFAULT, DEFAULT, DEFAULT, %1) " + "RETURNING timings.timing_id").arg( + QString::number(id_trainee)); + + return queryExecInt(queryStr); +} + +int DataBaseLMS::updateTimingTrainee(int id_trainee, TimingOfTrainee timing) +{ + QString queryStr = QString("UPDATE public.timings " + "SET entry_time = '%1', exit_time = '%2', operating_time = '%3', fk_trainee_id = %4 " + "WHERE timing_id = %5 " + "RETURNING timings.timing_id").arg( + timing.getEntryTimeS(), + timing.getExitTimeS(), + timing.getOperatingTimeS(), + QString::number(id_trainee), + QString::number(timing.getID()) ); + + return queryExecInt(queryStr); +} + +TimingOfTrainee DataBaseLMS::selectTimingTrainee(int id_trainee) +{ + TimingOfTrainee timing(id_trainee); + + QString queryStr = QString("SELECT timings.timing_id, timings.entry_time, timings.exit_time, timings.operating_time, timings.fk_trainee_id " + "FROM public.timings " + "WHERE fk_trainee_id = '%1'").arg(id_trainee); + + QSqlQuery querySel = QSqlQuery(*db); + + if(queryExec(queryStr, &querySel)) + { + if (querySel.first()) + {//Тайминг + timing.setID(querySel.value(0).toInt()); + timing.setEntryTime(querySel.value(1).toDateTime()); + timing.setExitTime(querySel.value(2).toDateTime()); + timing.setOperatingTime(querySel.value(3).toTime()); + timing.setTraineeID(querySel.value(4).toInt()); + } + } + + return timing; +} diff --git a/DataBaseLMS/interfacedatabaselms.cpp b/DataBaseLMS/interfacedatabaselms.cpp index c439a8a..f8bcb8c 100644 --- a/DataBaseLMS/interfacedatabaselms.cpp +++ b/DataBaseLMS/interfacedatabaselms.cpp @@ -5,9 +5,11 @@ #include #include "interfacedatabaselms.h" -InterfaceDataBaseLMS::InterfaceDataBaseLMS(QWidget* parent): - QWidget(parent), - DataBaseLMS() +InterfaceDataBaseLMS::InterfaceDataBaseLMS(QWidget *ownerWidget, QObject *parent): + //QWidget(parent), + QObject(parent), + DataBaseLMS(ownerWidget), + ownerWidget(ownerWidget) { } diff --git a/DataBaseLMS/interfacedatabaselms.h b/DataBaseLMS/interfacedatabaselms.h index e7484d3..9f0bf0e 100644 --- a/DataBaseLMS/interfacedatabaselms.h +++ b/DataBaseLMS/interfacedatabaselms.h @@ -8,12 +8,12 @@ #include "DataBaseLMS_global.h" #include "databaselms.h" -class DATABASELMS_EXPORT InterfaceDataBaseLMS : public /*QObject*/QWidget, DataBaseLMS +class DATABASELMS_EXPORT InterfaceDataBaseLMS : public QObject, DataBaseLMS { Q_OBJECT public: - InterfaceDataBaseLMS(QWidget* parent = nullptr); + InterfaceDataBaseLMS(QWidget *ownerWidget, QObject *parent = nullptr); public Q_SLOTS: void slot_LanguageChanged(QString language); @@ -24,6 +24,7 @@ public: bool DisConnectionFromDB(); bool DBisConnected(); + //Инструкторы bool AuthorizationInstructor(QString login, QString password); @@ -55,9 +56,6 @@ public: int entryTraineeOnSimulator(int id_trainee); int exitTraineeFromSimulator(int id_trainee); - - //void setTasks(QString login, QStringList tasks); - QString getNameTraineeOnComputer(QString computer_name); Trainee getTraineeOnComputer(QString computer_name); @@ -67,10 +65,19 @@ public: QList getListTraineesInGroup(int id); QList getListGroups(); QList getListTrainees(); - Trainee getTrainee(int id); - Group getGroup(int group_id); + int newTrainee(int id_group); + int delTrainee(int id); + int editTrainee(Trainee trainee); + + bool isArchivedTrainee(int id); + bool isLoggedInTrainee(int id); + + + //Группы + + Group getGroup(int group_id); int newGroup(); int delGroup(int id); int editGroup(Group group); @@ -79,6 +86,9 @@ public: int delTaskAMM(int id); int editTaskAMM(TaskAmmFim task); + + //Задачи + QList getListTasksAMMofTrainee(int id_trainee); QList getListTasksFIMofTrainee(int id_trainee); @@ -92,15 +102,9 @@ public: int changeStatusTaskFIM(int id_task, QString status); int changeStatusTaskAMM(int id_task, QString status); - int newTrainee(int id_group); - int delTrainee(int id); - int editTrainee(Trainee trainee); - - bool isArchivedTrainee(int id); - bool isLoggedInTrainee(int id); - private: QTranslator qtLanguageTranslator; + QWidget* ownerWidget; }; #endif // INTERFACEDATABASELMS_H diff --git a/DataBaseLMS/resources.qrc b/DataBaseLMS/resources.qrc new file mode 100644 index 0000000..88e906c --- /dev/null +++ b/DataBaseLMS/resources.qrc @@ -0,0 +1,5 @@ + + + resources/blankXML/ErrorDB.xml + + diff --git a/DataBaseLMS/resources/blankXML/ErrorDB.xml b/DataBaseLMS/resources/blankXML/ErrorDB.xml new file mode 100644 index 0000000..62afe20 --- /dev/null +++ b/DataBaseLMS/resources/blankXML/ErrorDB.xml @@ -0,0 +1,3 @@ + + + From 7466e33599d70b1ffcd6efd77f634c7fba57a8a1 Mon Sep 17 00:00:00 2001 From: krivoshein Date: Tue, 12 Aug 2025 17:52:32 +0300 Subject: [PATCH 2/6] =?UTF-8?q?=D0=A0=D0=B5=D1=84=D0=B0=D0=BA=D1=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- DataBaseLMS/CMakeLists.txt | 1 + DataBaseLMS/databaselms.cpp | 5 +- DataBaseLMS/databaselms.h | 27 +++---- DataBaseLMS/databaselms_instructors.cpp | 97 ----------------------- DataBaseLMS/databaselms_trainees.cpp | 97 ----------------------- DataBaseLMS/databaselms_users.cpp | 101 ++++++++++++++++++++++++ DataBaseLMS/interfacedatabaselms.cpp | 67 ++++++++-------- 7 files changed, 150 insertions(+), 245 deletions(-) create mode 100644 DataBaseLMS/databaselms_users.cpp diff --git a/DataBaseLMS/CMakeLists.txt b/DataBaseLMS/CMakeLists.txt index c68feac..6ed1ff7 100644 --- a/DataBaseLMS/CMakeLists.txt +++ b/DataBaseLMS/CMakeLists.txt @@ -7,6 +7,7 @@ add_library(DataBaseLMS SHARED databaselms.cpp databaselms_tasks.cpp databaselms_groups.cpp + databaselms_users.cpp databaselms_instructors.cpp databaselms_trainees.cpp databaselms.h diff --git a/DataBaseLMS/databaselms.cpp b/DataBaseLMS/databaselms.cpp index 028a34f..c9979fb 100644 --- a/DataBaseLMS/databaselms.cpp +++ b/DataBaseLMS/databaselms.cpp @@ -6,6 +6,9 @@ #include #include +const QString DataBaseLMS::TypeUserDBInstructor = "instructor"; +const QString DataBaseLMS::TypeUserDBTrainee = "trainee"; + DataBaseLMS::DataBaseLMS(QWidget *ownerWidget): db(nullptr), transactionBegined(false), @@ -98,7 +101,7 @@ DataBaseSettings DataBaseLMS::getDataBaseSettings() QFile file("config/settings.xml"); if(!file.open(QIODevice::ReadOnly)) { - QMessageBox::critical(nullptr, "Attention!", "The file could not be opened: config/settings.xml"); + QMessageBox::critical(ownerWidget, "Attention!", "The file could not be opened: config/settings.xml"); return settings; } QXmlStreamReader xmlReader(&file); diff --git a/DataBaseLMS/databaselms.h b/DataBaseLMS/databaselms.h index 19856a2..b001a8a 100644 --- a/DataBaseLMS/databaselms.h +++ b/DataBaseLMS/databaselms.h @@ -30,8 +30,8 @@ public: ~DataBaseLMS(); public: - const QString TypeUserDBInstructor = "instructor"; - const QString TypeUserDBTrainee = "trainee"; + static const QString TypeUserDBInstructor; + static const QString TypeUserDBTrainee; protected: //Подключение @@ -43,17 +43,19 @@ protected: bool transactionBegin(); bool transactionEnd(); + //Юзер + int selectUserID(QString type, QString login, QString password = QStringLiteral("")); + QString selectUserNameByLogin(QString type, QString login); + bool selectUserLoggedIn(QString type, int id_user); + bool selectUserArchived(QString type, int id_user); + int updateUserLoggedIn(QString type, int id_user, bool loggedIn); + bool updateAllUsersLoggedIn(QString type, bool loggedIn); + int updateUserArchived(QString type, int id_user, bool archived); + //Инструктор QList selectAllInstructors(); Instructor selectInstructor(int id_instructor); - int selectInstructorID(QString login, QString password = QStringLiteral("")); - QString selectInstructorNameByLogin(QString login); bool selectInstructorIsAdmin(int id_instructor); - bool selectInstructorLoggedIn(int id_instructor); - bool selectInstructorArchived(int id_instructor); - int updateInstructorLoggedIn(int id_instructor, bool loggedIn); - bool updateAllInstructorsLoggedIn(bool loggedIn); - int updateInstructorArchived(int id_instructor, bool archived); int insertInstructor(); int insertInstructor(Instructor instructor); int deleteInstructor(int id_instructor); @@ -71,15 +73,8 @@ protected: QList selectAllTrainees(); Trainee selectTrainee(int id_trainee); QList selectAllTraineesInGroup(int id_group); - int selectTraineeID(QString login, QString password = QStringLiteral("")); - QString selectTraineeNameByLogin(QString login); QString selectTraineeNameOnComputer(QString computer_name); Trainee selectTraineeOnComputer(QString computer_name); - bool selectTraineeArchived(int id_trainee); - bool selectTraineeLoggedIn(int id_trainee); - int updateTraineeLoggedIn(int id_trainee, bool loggedIn); - bool updateAllTraineesLoggedIn(bool loggedIn); - int updateTraineeArchived(int id_trainee, bool archived); int insertTrainee(int id_group); int insertTrainee(Trainee trainee); int deleteTrainee(int id_trainee); diff --git a/DataBaseLMS/databaselms_instructors.cpp b/DataBaseLMS/databaselms_instructors.cpp index 51649e3..d05c7d6 100644 --- a/DataBaseLMS/databaselms_instructors.cpp +++ b/DataBaseLMS/databaselms_instructors.cpp @@ -67,42 +67,6 @@ Instructor DataBaseLMS::selectInstructor(int id_instructor) return instructor; } -int DataBaseLMS::selectInstructorID(QString login, QString password) -{ - QString queryStr; - - if(password != QStringLiteral("")) - { - queryStr = QString("SELECT users.user_id " - "FROM public.users " - "WHERE login = '%1' AND password = '%2' AND users.type = '%3' ").arg( - login, - password, - TypeUserDBInstructor); - } - else - { - queryStr = QString("SELECT users.user_id " - "FROM public.users " - "WHERE login = '%1' AND users.type = '%2' ").arg( - login, - TypeUserDBInstructor); - } - - return queryExecInt(queryStr); -} - -QString DataBaseLMS::selectInstructorNameByLogin(QString login) -{ - QString queryStr = QString("SELECT users.name " - "FROM public.users " - "WHERE users.login = '%1' AND users.type = '%2' ").arg( - login, - TypeUserDBInstructor ); - - return queryExecString(queryStr); -} - bool DataBaseLMS::selectInstructorIsAdmin(int id_instructor) { QString queryStr = QString("SELECT users.is_admin " @@ -114,67 +78,6 @@ bool DataBaseLMS::selectInstructorIsAdmin(int id_instructor) return queryExecBool(queryStr); } -bool DataBaseLMS::selectInstructorLoggedIn(int id_instructor) -{ - QString queryStr = QString("SELECT users.logged_in " - "FROM public.users " - "WHERE user_id = %1 AND users.type = '%2' ").arg( - QString::number(id_instructor), - TypeUserDBInstructor ); - - return queryExecBool(queryStr); -} - -bool DataBaseLMS::selectInstructorArchived(int id_instructor) -{ - QString queryStr = QString("SELECT users.archived " - "FROM public.users " - "WHERE user_id = %1 AND users.type = '%2' ").arg( - QString::number(id_instructor), - TypeUserDBInstructor ); - - return queryExecBool(queryStr); -} - -int DataBaseLMS::updateInstructorLoggedIn(int id_instructor, bool loggedIn) -{ - QString queryStr = QString("UPDATE public.users " - "SET logged_in = %1 " - "WHERE user_id = %2 AND users.type = '%3' " - "RETURNING users.user_id").arg( - loggedIn ? "true" : "false", - QString::number(id_instructor), - TypeUserDBInstructor); - - return queryExecInt(queryStr); -} - -bool DataBaseLMS::updateAllInstructorsLoggedIn(bool loggedIn) -{ - QString queryStr = QString("UPDATE public.users " - "SET logged_in = %1 " - "WHERE users.type = '%2' ").arg( - loggedIn ? "true" : "false", - TypeUserDBInstructor); - - QSqlQuery query = QSqlQuery(*db); - - return queryExec(queryStr, &query); -} - -int DataBaseLMS::updateInstructorArchived(int id_instructor, bool archived) -{ - QString queryStr = QString("UPDATE public.users " - "SET archived = %1 " - "WHERE user_id = %2 AND users.type = '%3' " - "RETURNING users.user_id").arg( - archived ? "true" : "false", - QString::number(id_instructor), - TypeUserDBInstructor); - - return queryExecInt(queryStr); -} - int DataBaseLMS::insertInstructor() { QString queryStr = QString("INSERT INTO public.users (type, name, login, password, is_admin, archived, logged_in)" diff --git a/DataBaseLMS/databaselms_trainees.cpp b/DataBaseLMS/databaselms_trainees.cpp index d351765..fd1ba6f 100644 --- a/DataBaseLMS/databaselms_trainees.cpp +++ b/DataBaseLMS/databaselms_trainees.cpp @@ -136,42 +136,6 @@ QList DataBaseLMS::selectAllTraineesInGroup(int id_group) return listTrainees; } -int DataBaseLMS::selectTraineeID(QString login, QString password) -{ - QString queryStr; - - if(password != QStringLiteral("")) - { - queryStr = QString("SELECT users.user_id " - "FROM public.users " - "WHERE login = '%1' AND password = '%2' AND users.type = '%3' ").arg( - login, - password, - TypeUserDBTrainee); - } - else - { - queryStr = QString("SELECT users.user_id " - "FROM public.users " - "WHERE login = '%1' AND users.type = '%2' ").arg( - login, - TypeUserDBTrainee); - } - - return queryExecInt(queryStr); -} - -QString DataBaseLMS::selectTraineeNameByLogin(QString login) -{ - QString queryStr = QString("SELECT users.name " - "FROM public.users " - "WHERE users.login = '%1' AND users.type = '%2' ").arg( - login, - TypeUserDBTrainee); - - return queryExecString(queryStr); -} - QString DataBaseLMS::selectTraineeNameOnComputer(QString computer_name) { QString queryStr = QString("SELECT users.name " @@ -223,67 +187,6 @@ Trainee DataBaseLMS::selectTraineeOnComputer(QString computer_name) return trainee; } -bool DataBaseLMS::selectTraineeArchived(int id_trainee) -{ - QString queryStr = QString("SELECT users.archived " - "FROM public.users " - "WHERE user_id = %1 AND users.type = '%2' ").arg( - QString::number(id_trainee), - TypeUserDBTrainee); - - return queryExecBool(queryStr); -} - -bool DataBaseLMS::selectTraineeLoggedIn(int id_trainee) -{ - QString queryStr = QString("SELECT users.logged_in " - "FROM public.users " - "WHERE user_id = %1 AND users.type = '%2' ").arg( - QString::number(id_trainee), - TypeUserDBTrainee ); - - return queryExecBool(queryStr); -} - -int DataBaseLMS::updateTraineeLoggedIn(int id_trainee, bool loggedIn) -{ - QString queryStr = QString("UPDATE public.users " - "SET logged_in = %1 " - "WHERE user_id = %2 AND users.type = '%3' " - "RETURNING users.user_id").arg( - loggedIn ? "true" : "false", - QString::number(id_trainee), - TypeUserDBTrainee); - - return queryExecInt(queryStr); -} - -bool DataBaseLMS::updateAllTraineesLoggedIn(bool loggedIn) -{ - QString queryStr = QString("UPDATE public.users " - "SET logged_in = %1 " - "WHERE users.type = '%2' ").arg( - loggedIn ? "true" : "false", - TypeUserDBTrainee); - - QSqlQuery query = QSqlQuery(*db); - - return queryExec(queryStr, &query); -} - -int DataBaseLMS::updateTraineeArchived(int id_trainee, bool archived) -{ - QString queryStr = QString("UPDATE public.users " - "SET archived = %1 " - "WHERE user_id = %2 AND users.type = '%3' " - "RETURNING users.user_id").arg( - archived ? "true" : "false", - QString::number(id_trainee), - TypeUserDBTrainee); - - return queryExecInt(queryStr); -} - int DataBaseLMS::insertTrainee(int id_group) { QString queryStr = QString("INSERT INTO public.users (type, name, login, password, archived, logged_in, fk_group_id) " diff --git a/DataBaseLMS/databaselms_users.cpp b/DataBaseLMS/databaselms_users.cpp new file mode 100644 index 0000000..aa1641c --- /dev/null +++ b/DataBaseLMS/databaselms_users.cpp @@ -0,0 +1,101 @@ +#include "databaselms.h" + +#include +#include +#include +#include + +int DataBaseLMS::selectUserID(QString type, QString login, QString password) +{ + QString queryStr; + + if(password != QStringLiteral("")) + { + queryStr = QString("SELECT users.user_id " + "FROM public.users " + "WHERE login = '%1' AND password = '%2' AND users.type = '%3' ").arg( + login, + password, + type); + } + else + { + queryStr = QString("SELECT users.user_id " + "FROM public.users " + "WHERE login = '%1' AND users.type = '%2' ").arg( + login, + type); + } + + return queryExecInt(queryStr); +} + +QString DataBaseLMS::selectUserNameByLogin(QString type, QString login) +{ + QString queryStr = QString("SELECT users.name " + "FROM public.users " + "WHERE users.login = '%1' AND users.type = '%2' ").arg( + login, + type ); + + return queryExecString(queryStr); +} + +bool DataBaseLMS::selectUserLoggedIn(QString type, int id_user) +{ + QString queryStr = QString("SELECT users.logged_in " + "FROM public.users " + "WHERE user_id = %1 AND users.type = '%2' ").arg( + QString::number(id_user), + type ); + + return queryExecBool(queryStr); +} + +bool DataBaseLMS::selectUserArchived(QString type, int id_user) +{ + QString queryStr = QString("SELECT users.archived " + "FROM public.users " + "WHERE user_id = %1 AND users.type = '%2' ").arg( + QString::number(id_user), + type ); + + return queryExecBool(queryStr); +} + +int DataBaseLMS::updateUserLoggedIn(QString type, int id_user, bool loggedIn) +{ + QString queryStr = QString("UPDATE public.users " + "SET logged_in = %1 " + "WHERE user_id = %2 AND users.type = '%3' " + "RETURNING users.user_id").arg( + loggedIn ? "true" : "false", + QString::number(id_user), + type); + + return queryExecInt(queryStr); +} + +bool DataBaseLMS::updateAllUsersLoggedIn(QString type, bool loggedIn) +{ + QString queryStr = QString("UPDATE public.users " + "SET logged_in = %1 " + "WHERE users.type = '%2' ").arg( + loggedIn ? "true" : "false", + type); + + return queryExecBool(queryStr); +} + +int DataBaseLMS::updateUserArchived(QString type, int id_user, bool archived) +{ + QString queryStr = QString("UPDATE public.users " + "SET archived = %1 " + "WHERE user_id = %2 AND users.type = '%3' " + "RETURNING users.user_id").arg( + archived ? "true" : "false", + QString::number(id_user), + type); + + return queryExecInt(queryStr); +} diff --git a/DataBaseLMS/interfacedatabaselms.cpp b/DataBaseLMS/interfacedatabaselms.cpp index f8bcb8c..f9ace74 100644 --- a/DataBaseLMS/interfacedatabaselms.cpp +++ b/DataBaseLMS/interfacedatabaselms.cpp @@ -6,7 +6,6 @@ #include "interfacedatabaselms.h" InterfaceDataBaseLMS::InterfaceDataBaseLMS(QWidget *ownerWidget, QObject *parent): - //QWidget(parent), QObject(parent), DataBaseLMS(ownerWidget), ownerWidget(ownerWidget) @@ -24,12 +23,12 @@ bool InterfaceDataBaseLMS::ConnectionToDB() { if(!createConnection()) { - QMessageBox::critical(nullptr, dbSettings.dbName, tr("Connection error: ") + db->lastError().text()); + QMessageBox::critical(ownerWidget, dbSettings.dbName, tr("Connection error: ") + db->lastError().text()); return false; } else { - //QMessageBox::information(nullptr, dbName, tr("Connection is successful!")); + //QMessageBox::information(ownerWidget, dbName, tr("Connection is successful!")); return true; } } @@ -37,7 +36,7 @@ bool InterfaceDataBaseLMS::ConnectionToDB() bool InterfaceDataBaseLMS::DisConnectionFromDB() { deleteConnection(); - //QMessageBox::information(nullptr, dbName, tr("Disconnection is successful!")); + //QMessageBox::information(ownerWidget, dbName, tr("Disconnection is successful!")); return true; } @@ -54,14 +53,14 @@ bool InterfaceDataBaseLMS::AuthorizationInstructor(QString login, QString passwo if(! transactionBegin()) return false; - if(int id = selectInstructorID(login, password)) + if(int id = selectUserID(DataBaseLMS::TypeUserDBInstructor, login, password)) { if(isArchivedInstructor(id) || isLoggedInInstructor(id)) { transactionEnd(); return false; } - if(updateInstructorLoggedIn(id, true)) + if(updateUserLoggedIn(DataBaseLMS::TypeUserDBInstructor, id, true)) return transactionEnd(); } @@ -74,9 +73,9 @@ bool InterfaceDataBaseLMS::deAuthorizationInstructor(QString login) if(! transactionBegin()) return false; - if(int id = selectInstructorID(login)) + if(int id = selectUserID(DataBaseLMS::TypeUserDBInstructor, login)) { - if(updateInstructorLoggedIn(id, false)) + if(updateUserLoggedIn(DataBaseLMS::TypeUserDBInstructor, id, false)) return transactionEnd(); } @@ -86,17 +85,17 @@ bool InterfaceDataBaseLMS::deAuthorizationInstructor(QString login) bool InterfaceDataBaseLMS::deAuthorizationAllInstructors() { - return updateAllInstructorsLoggedIn(false); + return updateAllUsersLoggedIn(DataBaseLMS::TypeUserDBInstructor,false); } QString InterfaceDataBaseLMS::getNameInstructorByLogin(QString login) { - return selectInstructorNameByLogin(login); + return selectUserNameByLogin(DataBaseLMS::TypeUserDBInstructor, login); } int InterfaceDataBaseLMS::getIdInstructorByLogin(QString login) { - return selectInstructorID(login); + return selectUserID(DataBaseLMS::TypeUserDBInstructor, login); } QList InterfaceDataBaseLMS::getListInstructors() @@ -127,35 +126,35 @@ int InterfaceDataBaseLMS::editInstructor(Instructor instructor) { if(instructor.getName() == QStringLiteral("")) {//Имя не корректно! - QMessageBox::critical(nullptr, tr("Editing error!"), + QMessageBox::critical(ownerWidget, tr("Editing error!"), tr("Unacceptable instructor name has been entered.\nThe changes will not be accepted.")); return 0; } if(instructor.getLogin() == QStringLiteral("")) {//Логин не корректен! - QMessageBox::critical(nullptr, tr("Editing error!"), + QMessageBox::critical(ownerWidget, tr("Editing error!"), tr("Unacceptable instructor login has been entered.\nThe changes will not be accepted.")); return 0; } if(instructor.getPassword() == QStringLiteral("")) {//Пароль не корректный! - QMessageBox::critical(nullptr, tr("Editing error!"), + QMessageBox::critical(ownerWidget, tr("Editing error!"), tr("Unacceptable instructor password has been entered.\nThe changes will not be accepted.")); return 0; } if(instructor.getName() == exist_instructor.getName() && instructor.getID() != exist_instructor.getID()) {//Имя уже существует - QMessageBox::critical(nullptr, tr("Editing error!"), + QMessageBox::critical(ownerWidget, tr("Editing error!"), tr("An existing instructor name has been entered.")); return 0; } if(instructor.getLogin() == exist_instructor.getLogin() && instructor.getID() != exist_instructor.getID()) {//Логин уже существует! - QMessageBox::critical(nullptr, tr("Editing error!"), + QMessageBox::critical(ownerWidget, tr("Editing error!"), tr("An existing instructor login has been entered.\nThe changes will not be accepted.")); return 0; } @@ -171,12 +170,12 @@ bool InterfaceDataBaseLMS::isAdminInstructor(int id) bool InterfaceDataBaseLMS::isArchivedInstructor(int id) { - return selectInstructorArchived(id); + return selectUserArchived(DataBaseLMS::TypeUserDBInstructor, id); } bool InterfaceDataBaseLMS::isLoggedInInstructor(int id) { - return selectInstructorLoggedIn(id); + return selectUserLoggedIn(DataBaseLMS::TypeUserDBInstructor, id); } @@ -187,14 +186,14 @@ bool InterfaceDataBaseLMS::AuthorizationTrainee(QString login, QString password, if(! transactionBegin()) return false; - if(int id = selectTraineeID(login, password)) + if(int id = selectUserID(DataBaseLMS::TypeUserDBTrainee, login, password)) { if(isArchivedTrainee(id) || isLoggedInTrainee(id)) { transactionEnd(); return false; } - if(updateTraineeLoggedIn(id, true)) + if(updateUserLoggedIn(DataBaseLMS::TypeUserDBTrainee, id, true)) return transactionEnd(); } @@ -207,9 +206,9 @@ bool InterfaceDataBaseLMS::deAuthorizationTrainee(QString login) if(! transactionBegin()) return false; - if(int id = selectTraineeID(login)) + if(int id = selectUserID(DataBaseLMS::TypeUserDBTrainee, login)) { - if(updateTraineeLoggedIn(id, false)) + if(updateUserLoggedIn(DataBaseLMS::TypeUserDBTrainee, id, false)) return transactionEnd(); } @@ -219,7 +218,7 @@ bool InterfaceDataBaseLMS::deAuthorizationTrainee(QString login) bool InterfaceDataBaseLMS::deAuthorizationAllTrainees() { - return updateAllTraineesLoggedIn(false); + return updateAllUsersLoggedIn(DataBaseLMS::TypeUserDBTrainee, false); } int InterfaceDataBaseLMS::entryTraineeOnSimulator(int id_trainee) @@ -274,12 +273,12 @@ Trainee InterfaceDataBaseLMS::getTraineeOnComputer(QString computer_name) QString InterfaceDataBaseLMS::getNameTraineeByLogin(QString login) { - return selectTraineeNameByLogin(login); + return selectUserNameByLogin(DataBaseLMS::TypeUserDBTrainee, login); } int InterfaceDataBaseLMS::getIdTraineeByLogin(QString login) { - return selectTraineeID(login); + return selectUserID(DataBaseLMS::TypeUserDBTrainee, login); } QList InterfaceDataBaseLMS::getListTraineesInGroup(int id) @@ -325,14 +324,14 @@ int InterfaceDataBaseLMS::editGroup(Group group) { if(group.getName() == QStringLiteral("")) {//Имя не корректно! - QMessageBox::critical(nullptr, tr("Editing error!"), + QMessageBox::critical(ownerWidget, tr("Editing error!"), tr("Unacceptable group name has been entered.\nThe changes will not be accepted.")); return 0; } if(group.getName() == exist_group.getName() && group.getID() != exist_group.getID()) {//Имя уже существует - QMessageBox::critical(nullptr, tr("Editing error!"), + QMessageBox::critical(ownerWidget, tr("Editing error!"), tr("An existing group name has been entered.\nThe changes will not be accepted.")); return 0; } @@ -433,35 +432,35 @@ int InterfaceDataBaseLMS::editTrainee(Trainee trainee) { if(trainee.getName() == QStringLiteral("")) {//Имя не корректно! - QMessageBox::critical(nullptr, tr("Editing error!"), + QMessageBox::critical(ownerWidget, tr("Editing error!"), tr("Unacceptable trainee name has been entered.\nThe changes will not be accepted.")); return 0; } if(trainee.getLogin() == QStringLiteral("")) {//Логин не корректен! - QMessageBox::critical(nullptr, tr("Editing error!"), + QMessageBox::critical(ownerWidget, tr("Editing error!"), tr("Unacceptable trainee login has been entered.\nThe changes will not be accepted.")); return 0; } if(trainee.getPassword() == QStringLiteral("")) {//Пароль не корректный! - QMessageBox::critical(nullptr, tr("Editing error!"), + QMessageBox::critical(ownerWidget, tr("Editing error!"), tr("Unacceptable trainee password has been entered.\nThe changes will not be accepted.")); return 0; } if(trainee.getName() == exist_trainee.getName() && trainee.getID() != exist_trainee.getID()) {//Имя уже существует - QMessageBox::critical(nullptr, tr("Editing error!"), + QMessageBox::critical(ownerWidget, tr("Editing error!"), tr("An existing trainee name has been entered.")); return 0; } if(trainee.getLogin() == exist_trainee.getLogin() && trainee.getID() != exist_trainee.getID()) {//Логин уже существует! - QMessageBox::critical(nullptr, tr("Editing error!"), + QMessageBox::critical(ownerWidget, tr("Editing error!"), tr("An existing trainee login has been entered.\nThe changes will not be accepted.")); return 0; } @@ -472,10 +471,10 @@ int InterfaceDataBaseLMS::editTrainee(Trainee trainee) bool InterfaceDataBaseLMS::isArchivedTrainee(int id) { - return selectTraineeArchived(id); + return selectUserArchived(DataBaseLMS::TypeUserDBTrainee, id); } bool InterfaceDataBaseLMS::isLoggedInTrainee(int id) { - return selectTraineeLoggedIn(id); + return selectUserLoggedIn(DataBaseLMS::TypeUserDBTrainee, id); } From 93fe4a94b29515cbc31c7d4afc4e4ae33fb647a4 Mon Sep 17 00:00:00 2001 From: krivoshein Date: Wed, 13 Aug 2025 10:50:55 +0300 Subject: [PATCH 3/6] QMutexLocker --- DataBaseLMS/databaselms.cpp | 43 ------------ DataBaseLMS/databaselms.h | 7 +- DataBaseLMS/interfacedatabaselms.cpp | 98 +++++++++++++++++++--------- DataBaseLMS/interfacedatabaselms.h | 1 + 4 files changed, 69 insertions(+), 80 deletions(-) diff --git a/DataBaseLMS/databaselms.cpp b/DataBaseLMS/databaselms.cpp index c9979fb..b1a0771 100644 --- a/DataBaseLMS/databaselms.cpp +++ b/DataBaseLMS/databaselms.cpp @@ -24,8 +24,6 @@ DataBaseLMS::~DataBaseLMS() bool DataBaseLMS::createConnection() { - mtxAccess.lock(); - dbSettings = getDataBaseSettings(); dbSettings.connectionName = "Connection_" + dbSettings.dbName; @@ -41,7 +39,6 @@ bool DataBaseLMS::createConnection() if(!res) { - mtxAccess.unlock(); deleteConnection(); return false; } @@ -49,15 +46,12 @@ bool DataBaseLMS::createConnection() { bool flHas = db->driver()->hasFeature(QSqlDriver::Transactions); qDebug() << "db->driver()->hasFeature(QSqlDriver::Transactions): " << flHas; - mtxAccess.unlock(); return true; } } void DataBaseLMS::deleteConnection() { - mtxAccess.lock(); - if(transactionBegined) QSqlDatabase::database().rollback(); @@ -69,29 +63,21 @@ void DataBaseLMS::deleteConnection() delete db; db = nullptr; } - - mtxAccess.unlock(); } bool DataBaseLMS::isConnected() { - mtxAccess.lock(); - if(db == nullptr) { - mtxAccess.unlock(); return false; } else { if(db->isOpen()) { - mtxAccess.unlock(); return true; } } - - mtxAccess.unlock(); return false; } @@ -153,33 +139,6 @@ DataBaseSettings DataBaseLMS::getDataBaseSettings() return settings; } -bool DataBaseLMS::transactionBegin() -{ - /* - if(transactionBegined) - {//Отмена предыдущей незаконченной - if(QSqlDatabase::database().rollback()) - transactionBegined = false; - else - return false; - } - return (transactionBegined = QSqlDatabase::database().transaction()); - */ - return true; -} - -bool DataBaseLMS::transactionEnd() -{ - /* - if(transactionBegined) - { - return !(transactionBegined = !QSqlDatabase::database().commit()); - } - return false; - */ - return true; -} - int DataBaseLMS::queryExecInt(QString queryStr) { QSqlQuery query = QSqlQuery(*db); @@ -222,10 +181,8 @@ bool DataBaseLMS::queryExecBool(QString queryStr) bool DataBaseLMS::queryExec(QString queryStr, QSqlQuery *query) { bool res = false; - mtxAccess.lock(); if(! (res = query->exec(queryStr)) ) messageWarningErrorQuery(queryStr, query); - mtxAccess.unlock(); return res; } diff --git a/DataBaseLMS/databaselms.h b/DataBaseLMS/databaselms.h index b001a8a..c15fdd3 100644 --- a/DataBaseLMS/databaselms.h +++ b/DataBaseLMS/databaselms.h @@ -39,10 +39,6 @@ protected: void deleteConnection(); bool isConnected(); - //Транзакции - bool transactionBegin(); - bool transactionEnd(); - //Юзер int selectUserID(QString type, QString login, QString password = QStringLiteral("")); QString selectUserNameByLogin(QString type, QString login); @@ -115,8 +111,7 @@ protected: DataBaseSettings dbSettings; private: - bool transactionBegined; - QMutex mtxAccess; + bool transactionBegined; QWidget* ownerWidget; }; diff --git a/DataBaseLMS/interfacedatabaselms.cpp b/DataBaseLMS/interfacedatabaselms.cpp index f9ace74..8812829 100644 --- a/DataBaseLMS/interfacedatabaselms.cpp +++ b/DataBaseLMS/interfacedatabaselms.cpp @@ -21,6 +21,7 @@ void InterfaceDataBaseLMS::slot_LanguageChanged(QString language) bool InterfaceDataBaseLMS::ConnectionToDB() { + QMutexLocker mtxLocker(&mtxAccess); if(!createConnection()) { QMessageBox::critical(ownerWidget, dbSettings.dbName, tr("Connection error: ") + db->lastError().text()); @@ -34,7 +35,8 @@ bool InterfaceDataBaseLMS::ConnectionToDB() } bool InterfaceDataBaseLMS::DisConnectionFromDB() -{ +{ + QMutexLocker mtxLocker(&mtxAccess); deleteConnection(); //QMessageBox::information(ownerWidget, dbName, tr("Disconnection is successful!")); return true; @@ -42,6 +44,7 @@ bool InterfaceDataBaseLMS::DisConnectionFromDB() bool InterfaceDataBaseLMS::DBisConnected() { + QMutexLocker mtxLocker(&mtxAccess); return isConnected(); } @@ -50,76 +53,77 @@ bool InterfaceDataBaseLMS::DBisConnected() bool InterfaceDataBaseLMS::AuthorizationInstructor(QString login, QString password) { - if(! transactionBegin()) - return false; + QMutexLocker mtxLocker(&mtxAccess); if(int id = selectUserID(DataBaseLMS::TypeUserDBInstructor, login, password)) { - if(isArchivedInstructor(id) || isLoggedInInstructor(id)) - { - transactionEnd(); + if(selectUserArchived(DataBaseLMS::TypeUserDBInstructor, id) || selectUserLoggedIn(DataBaseLMS::TypeUserDBInstructor, id)) return false; - } - if(updateUserLoggedIn(DataBaseLMS::TypeUserDBInstructor, id, true)) - return transactionEnd(); - } - transactionEnd(); + if(updateUserLoggedIn(DataBaseLMS::TypeUserDBInstructor, id, true)) + return true; + } return false; } bool InterfaceDataBaseLMS::deAuthorizationInstructor(QString login) { - if(! transactionBegin()) - return false; + QMutexLocker mtxLocker(&mtxAccess); if(int id = selectUserID(DataBaseLMS::TypeUserDBInstructor, login)) { if(updateUserLoggedIn(DataBaseLMS::TypeUserDBInstructor, id, false)) - return transactionEnd(); + return true; } - - transactionEnd(); return false; } bool InterfaceDataBaseLMS::deAuthorizationAllInstructors() { + QMutexLocker mtxLocker(&mtxAccess); return updateAllUsersLoggedIn(DataBaseLMS::TypeUserDBInstructor,false); } QString InterfaceDataBaseLMS::getNameInstructorByLogin(QString login) { + QMutexLocker mtxLocker(&mtxAccess); return selectUserNameByLogin(DataBaseLMS::TypeUserDBInstructor, login); } int InterfaceDataBaseLMS::getIdInstructorByLogin(QString login) { + QMutexLocker mtxLocker(&mtxAccess); return selectUserID(DataBaseLMS::TypeUserDBInstructor, login); } QList InterfaceDataBaseLMS::getListInstructors() { + QMutexLocker mtxLocker(&mtxAccess); return selectAllInstructors(); } Instructor InterfaceDataBaseLMS::getInstructor(int id) { + QMutexLocker mtxLocker(&mtxAccess); return selectInstructor(id); } int InterfaceDataBaseLMS::newInstructor() { + QMutexLocker mtxLocker(&mtxAccess); return insertInstructor(); } int InterfaceDataBaseLMS::delInstructor(int id) { + QMutexLocker mtxLocker(&mtxAccess); return deleteInstructor(id); } int InterfaceDataBaseLMS::editInstructor(Instructor instructor) { + QMutexLocker mtxLocker(&mtxAccess); + //Проверка корректности логина, имени, пароля QList listInstructors = selectAllInstructors(); for(Instructor exist_instructor : listInstructors) @@ -165,16 +169,19 @@ int InterfaceDataBaseLMS::editInstructor(Instructor instructor) bool InterfaceDataBaseLMS::isAdminInstructor(int id) { + QMutexLocker mtxLocker(&mtxAccess); return selectInstructorIsAdmin(id); } bool InterfaceDataBaseLMS::isArchivedInstructor(int id) { + QMutexLocker mtxLocker(&mtxAccess); return selectUserArchived(DataBaseLMS::TypeUserDBInstructor, id); } bool InterfaceDataBaseLMS::isLoggedInInstructor(int id) { + QMutexLocker mtxLocker(&mtxAccess); return selectUserLoggedIn(DataBaseLMS::TypeUserDBInstructor, id); } @@ -183,46 +190,41 @@ bool InterfaceDataBaseLMS::isLoggedInInstructor(int id) bool InterfaceDataBaseLMS::AuthorizationTrainee(QString login, QString password, QString classroom_name, QString computer_name) { - if(! transactionBegin()) - return false; + QMutexLocker mtxLocker(&mtxAccess); if(int id = selectUserID(DataBaseLMS::TypeUserDBTrainee, login, password)) { - if(isArchivedTrainee(id) || isLoggedInTrainee(id)) - { - transactionEnd(); + if(selectUserArchived(DataBaseLMS::TypeUserDBTrainee, id) || selectUserLoggedIn(DataBaseLMS::TypeUserDBTrainee, id)) return false; - } - if(updateUserLoggedIn(DataBaseLMS::TypeUserDBTrainee, id, true)) - return transactionEnd(); - } - transactionEnd(); + if(updateUserLoggedIn(DataBaseLMS::TypeUserDBTrainee, id, true)) + return true; + } return false; } bool InterfaceDataBaseLMS::deAuthorizationTrainee(QString login) { - if(! transactionBegin()) - return false; + QMutexLocker mtxLocker(&mtxAccess); if(int id = selectUserID(DataBaseLMS::TypeUserDBTrainee, login)) { if(updateUserLoggedIn(DataBaseLMS::TypeUserDBTrainee, id, false)) - return transactionEnd(); + return true; } - - transactionEnd(); return false; } bool InterfaceDataBaseLMS::deAuthorizationAllTrainees() { + QMutexLocker mtxLocker(&mtxAccess); return updateAllUsersLoggedIn(DataBaseLMS::TypeUserDBTrainee, false); } int InterfaceDataBaseLMS::entryTraineeOnSimulator(int id_trainee) { + QMutexLocker mtxLocker(&mtxAccess); + TimingOfTrainee timing(id_trainee); timing = selectTimingTrainee(id_trainee); @@ -243,6 +245,8 @@ int InterfaceDataBaseLMS::entryTraineeOnSimulator(int id_trainee) int InterfaceDataBaseLMS::exitTraineeFromSimulator(int id_trainee) { + QMutexLocker mtxLocker(&mtxAccess); + TimingOfTrainee timing(id_trainee); timing = selectTimingTrainee(id_trainee); @@ -263,61 +267,74 @@ int InterfaceDataBaseLMS::exitTraineeFromSimulator(int id_trainee) QString InterfaceDataBaseLMS::getNameTraineeOnComputer(QString computer_name) { + QMutexLocker mtxLocker(&mtxAccess); return selectTraineeNameOnComputer(computer_name); } Trainee InterfaceDataBaseLMS::getTraineeOnComputer(QString computer_name) { + QMutexLocker mtxLocker(&mtxAccess); return selectTraineeOnComputer(computer_name); } QString InterfaceDataBaseLMS::getNameTraineeByLogin(QString login) { + QMutexLocker mtxLocker(&mtxAccess); return selectUserNameByLogin(DataBaseLMS::TypeUserDBTrainee, login); } int InterfaceDataBaseLMS::getIdTraineeByLogin(QString login) { + QMutexLocker mtxLocker(&mtxAccess); return selectUserID(DataBaseLMS::TypeUserDBTrainee, login); } QList InterfaceDataBaseLMS::getListTraineesInGroup(int id) { + QMutexLocker mtxLocker(&mtxAccess); return selectAllTraineesInGroup(id); } QList InterfaceDataBaseLMS::getListGroups() { + QMutexLocker mtxLocker(&mtxAccess); return selectAllGroups(); } QList InterfaceDataBaseLMS::getListTrainees() { + QMutexLocker mtxLocker(&mtxAccess); return selectAllTrainees(); } Trainee InterfaceDataBaseLMS::getTrainee(int id) { + QMutexLocker mtxLocker(&mtxAccess); return selectTrainee(id); } Group InterfaceDataBaseLMS::getGroup(int id) { + QMutexLocker mtxLocker(&mtxAccess); return selectGroup(id); } int InterfaceDataBaseLMS::newGroup() { + QMutexLocker mtxLocker(&mtxAccess); return insertGroup(); } int InterfaceDataBaseLMS::delGroup(int id) { + QMutexLocker mtxLocker(&mtxAccess); return deleteGroup(id); } int InterfaceDataBaseLMS::editGroup(Group group) { + QMutexLocker mtxLocker(&mtxAccess); + //Проверка корректности имени QList listGroups = selectAllGroups(); for(Group exist_group : listGroups) @@ -342,57 +359,68 @@ int InterfaceDataBaseLMS::editGroup(Group group) int InterfaceDataBaseLMS::newTaskAMM(TaskAmmFim task, int id_trainee) { + QMutexLocker mtxLocker(&mtxAccess); return insertTaskAMM(task, id_trainee); } int InterfaceDataBaseLMS::delTaskAMM(int id) { + QMutexLocker mtxLocker(&mtxAccess); return deleteTaskAMM(id); } int InterfaceDataBaseLMS::editTaskAMM(TaskAmmFim task) { + QMutexLocker mtxLocker(&mtxAccess); return updateTaskAMM(task); } QList InterfaceDataBaseLMS::getListTasksAMMofTrainee(int id_trainee) { + QMutexLocker mtxLocker(&mtxAccess); return selectTasksAMMofTrainee(id_trainee); } QList InterfaceDataBaseLMS::getListTasksFIMofTrainee(int id_trainee) { + QMutexLocker mtxLocker(&mtxAccess); return selectTasksFIMofTrainee(id_trainee); } TaskAmmFim InterfaceDataBaseLMS::getTaskAMMbyID(int id_task) { + QMutexLocker mtxLocker(&mtxAccess); return selectTaskAMMbyID(id_task); } TaskAmmFim InterfaceDataBaseLMS::getTaskFIMbyID(int id_task) { + QMutexLocker mtxLocker(&mtxAccess); return selectTaskFIMbyID(id_task); } int InterfaceDataBaseLMS::newTaskFIM(TaskAmmFim task, int id_trainee) { + QMutexLocker mtxLocker(&mtxAccess); return insertTaskFIM(task, id_trainee); } int InterfaceDataBaseLMS::delTaskFIM(int id) { + QMutexLocker mtxLocker(&mtxAccess); deleteReportFIM(id); return deleteTaskFIM(id); } int InterfaceDataBaseLMS::editTaskFIM(TaskAmmFim task) { + QMutexLocker mtxLocker(&mtxAccess); return updateTaskFIM(task); } int InterfaceDataBaseLMS::replaceReportFIM(TaskAmmFim task) { + QMutexLocker mtxLocker(&mtxAccess); deleteReportFIM(task.getID()); if(int report_id = insertReportFIM(task)) @@ -406,26 +434,32 @@ int InterfaceDataBaseLMS::replaceReportFIM(TaskAmmFim task) int InterfaceDataBaseLMS::changeStatusTaskFIM(int id_task, QString status) { + QMutexLocker mtxLocker(&mtxAccess); return updateStatusTaskFIM(id_task, status); } int InterfaceDataBaseLMS::changeStatusTaskAMM(int id_task, QString status) { + QMutexLocker mtxLocker(&mtxAccess); return updateStatusTaskAMM(id_task, status); } int InterfaceDataBaseLMS::newTrainee(int id_group) { + QMutexLocker mtxLocker(&mtxAccess); return insertTrainee(id_group); } int InterfaceDataBaseLMS::delTrainee(int id) { + QMutexLocker mtxLocker(&mtxAccess); return deleteTrainee(id); } int InterfaceDataBaseLMS::editTrainee(Trainee trainee) { + QMutexLocker mtxLocker(&mtxAccess); + //Проверка корректности логина, имени, пароля QList listTrainees = selectAllTrainees(); for(Trainee exist_trainee : listTrainees) @@ -471,10 +505,12 @@ int InterfaceDataBaseLMS::editTrainee(Trainee trainee) bool InterfaceDataBaseLMS::isArchivedTrainee(int id) { + QMutexLocker mtxLocker(&mtxAccess); return selectUserArchived(DataBaseLMS::TypeUserDBTrainee, id); } bool InterfaceDataBaseLMS::isLoggedInTrainee(int id) { + QMutexLocker mtxLocker(&mtxAccess); return selectUserLoggedIn(DataBaseLMS::TypeUserDBTrainee, id); } diff --git a/DataBaseLMS/interfacedatabaselms.h b/DataBaseLMS/interfacedatabaselms.h index 9f0bf0e..765b521 100644 --- a/DataBaseLMS/interfacedatabaselms.h +++ b/DataBaseLMS/interfacedatabaselms.h @@ -105,6 +105,7 @@ public: private: QTranslator qtLanguageTranslator; QWidget* ownerWidget; + QMutex mtxAccess; }; #endif // INTERFACEDATABASELMS_H From 842118cbea7cd99e3bebf2c1e27c71317af24443 Mon Sep 17 00:00:00 2001 From: krivoshein Date: Wed, 13 Aug 2025 12:44:48 +0300 Subject: [PATCH 4/6] =?UTF-8?q?=D0=B4=D0=BE=20=D1=83=D0=B1=D0=B8=D1=80?= =?UTF-8?q?=D0=B0=D0=BD=D0=B8=D1=8F=20mtxAccess=20=D0=B8=D0=B7=20ProviderD?= =?UTF-8?q?BLMS?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- DataBaseLMS/databaselms.h | 5 +- DataBaseLMS/databaselms_tasks.cpp | 197 +++++++++++++++------------ DataBaseLMS/interfacedatabaselms.cpp | 133 +++++++----------- DataBaseLMS/interfacedatabaselms.h | 14 +- ServerLMS/providerdblms.cpp | 10 +- 5 files changed, 174 insertions(+), 185 deletions(-) diff --git a/DataBaseLMS/databaselms.h b/DataBaseLMS/databaselms.h index c15fdd3..a1dbc0b 100644 --- a/DataBaseLMS/databaselms.h +++ b/DataBaseLMS/databaselms.h @@ -95,8 +95,9 @@ protected: int deleteTaskFIM(int id_task); QList selectTasksFIMofTrainee(int id_trainee); TaskAmmFim selectTaskFIMbyID(int id_task); - int deleteReportFIM(int task_id); - int insertReportFIM(TaskAmmFim task); + //int deleteReportFIMforTask(int task_id); + //int insertReportFIMforTask(TaskAmmFim task); + int updateReportFIMforTask(TaskAmmFim task); private: DataBaseSettings getDataBaseSettings(); diff --git a/DataBaseLMS/databaselms_tasks.cpp b/DataBaseLMS/databaselms_tasks.cpp index d47cf8a..c2d31fa 100644 --- a/DataBaseLMS/databaselms_tasks.cpp +++ b/DataBaseLMS/databaselms_tasks.cpp @@ -182,6 +182,7 @@ TaskAmmFim DataBaseLMS::selectTaskAMMbyID(int id_task) return task; } + int DataBaseLMS::insertTaskFIM(TaskAmmFim task, int id_trainee) { QString queryStr; @@ -228,9 +229,9 @@ int DataBaseLMS::insertTaskFIM(TaskAmmFim task, int id_trainee) { sign.description = sign.description.replace("'", "''"); //Задваиваем одинарные кавычки - queryStr = QString("INSERT INTO public.malf_sign (type, description, fk_malfunction_id) " + queryStr = QString("INSERT INTO public.malf_signs (type, description, fk_malfunction_id) " "VALUES ('%1', '%2', %3) " - "RETURNING malf_sign.sign_id").arg( + "RETURNING malf_signs.sign_id").arg( QString::number(sign.type), sign.description, QString::number(malfunction_id)); @@ -321,13 +322,13 @@ int DataBaseLMS::deleteTaskFIM(int id_task) "ORDER BY users.user_id ASC").arg( QString::number(id_task)); - QSqlQuery query = QSqlQuery(*db); + QSqlQuery queryUserSEL = QSqlQuery(*db); - if(queryExec(queryStr, &query)) + if(queryExec(queryStr, &queryUserSEL)) { - if (query.first()) + if (queryUserSEL.first()) {//Обучаемый - id_trainee = query.value(0).toInt(); + id_trainee = queryUserSEL.value(0).toInt(); } } if(!id_trainee) @@ -342,24 +343,24 @@ int DataBaseLMS::deleteTaskFIM(int id_task) "WHERE malfunctions.fk_task_fim_id = %1 " "ORDER BY malfunctions.malfunction_id ASC").arg( id_task); - QSqlQuery queryMalf = QSqlQuery(*db); + QSqlQuery queryMalfSEL = QSqlQuery(*db); - if(queryExec(queryStr, &queryMalf)) + if(queryExec(queryStr, &queryMalfSEL)) { - while (queryMalf.next()) + while (queryMalfSEL.next()) {//Неисправность int malfunction_id = 0; - malfunction_id = queryMalf.value(0).toString().toInt(); + malfunction_id = queryMalfSEL.value(0).toString().toInt(); if(malfunction_id) { - queryStr = QString("DELETE FROM public.malf_sign " + queryStr = QString("DELETE FROM public.malf_signs " "WHERE fk_malfunction_id = %1 ").arg( malfunction_id); - QSqlQuery querySign = QSqlQuery(*db); - if(!queryExec(queryStr, &querySign)) + QSqlQuery querySignDEL = QSqlQuery(*db); + if(!queryExec(queryStr, &querySignDEL)) { resBool = db->rollback(); return 0; @@ -378,13 +379,62 @@ int DataBaseLMS::deleteTaskFIM(int id_task) "WHERE fk_task_fim_id = %1 ").arg( QString::number(id_task)); - QSqlQuery query1 = QSqlQuery(*db); - if(!queryExec(queryStr, &query1)) + QSqlQuery queryMulfDEL = QSqlQuery(*db); + if(!queryExec(queryStr, &queryMulfDEL)) { resBool = db->rollback(); return 0; } + + + queryStr = QString("SELECT reports.report_id " + "FROM public.reports " + "WHERE fk_task_fim_id = %1 " + "ORDER BY reports.report_id ASC").arg( + QString::number(id_task)); + + int report_id = 0; + + QSqlQuery queryReportsSEL = QSqlQuery(*db); + if(queryExec(queryStr, &queryReportsSEL)) + { + if (queryReportsSEL.first()) + {//Отчет + report_id = queryReportsSEL.value(0).toInt(); + } + } + if(!report_id) + { + resBool = db->rollback(); + return 0; + } + + + queryStr = QString("DELETE FROM public.report_items " + "WHERE fk_report_id = %1 ").arg( + QString::number(report_id)); + + QSqlQuery queryItemsDEL = QSqlQuery(*db); + if(!queryExec(queryStr, &queryItemsDEL)) + { + resBool = db->rollback(); + return 0; + } + + queryStr = QString("DELETE FROM public.reports " + "WHERE report_id = %1 ").arg( + QString::number(report_id)); + + QSqlQuery queryReportsDEL = QSqlQuery(*db); + if(!queryExec(queryStr, &queryReportsDEL)) + { + resBool = db->rollback(); + return 0; + } + + + queryStr = QString("DELETE FROM public.tasks_fim " "WHERE task_id = %1 " "RETURNING tasks_fim.task_id").arg( @@ -450,10 +500,10 @@ QList DataBaseLMS::selectTasksFIMofTrainee(int id_trainee) malfanction.description = queryMalf.value(3).toString(); //Выгребаем сигналы для этой неисправности - queryStr = QString("SELECT malf_sign.sign_id, malf_sign.type, malf_sign.description " - "FROM public.malf_sign " + queryStr = QString("SELECT malf_signs.sign_id, malf_signs.type, malf_signs.description " + "FROM public.malf_signs " "WHERE fk_malfunction_id = %1 " - "ORDER BY malf_sign.sign_id ASC").arg( + "ORDER BY malf_signs.sign_id ASC").arg( QString::number(malfunction_id)); QSqlQuery querySign = QSqlQuery(*db); @@ -601,10 +651,10 @@ TaskAmmFim DataBaseLMS::selectTaskFIMbyID(int id_task) malfanction.description = queryMalf.value(3).toString(); //Выгребаем сигналы для этой неисправности - queryStr = QString("SELECT malf_sign.sign_id, malf_sign.type, malf_sign.description " - "FROM public.malf_sign " + queryStr = QString("SELECT malf_signs.sign_id, malf_signs.type, malf_signs.description " + "FROM public.malf_signs " "WHERE fk_malfunction_id = %1 " - "ORDER BY malf_sign.sign_id ASC").arg( + "ORDER BY malf_signs.sign_id ASC").arg( QString::number(malfunction_id)); QSqlQuery querySign = QSqlQuery(*db); @@ -701,11 +751,12 @@ TaskAmmFim DataBaseLMS::selectTaskFIMbyID(int id_task) return task; } -int DataBaseLMS::deleteReportFIM(int task_id) +int DataBaseLMS::updateReportFIMforTask(TaskAmmFim task) { QString queryStr; bool resBool = false; int report_id = 0; + int task_id = task.getID(); resBool = db->transaction(); @@ -715,79 +766,47 @@ int DataBaseLMS::deleteReportFIM(int task_id) "ORDER BY reports.report_id ASC").arg( QString::number(task_id)); - QSqlQuery query = QSqlQuery(*db); + QSqlQuery queryReportsSEL = QSqlQuery(*db); - if(queryExec(queryStr, &query)) + if(queryExec(queryStr, &queryReportsSEL)) { - if (query.first()) + if (queryReportsSEL.first()) {//Отчет - report_id = query.value(0).toInt(); + report_id = queryReportsSEL.value(0).toInt(); } } + else + { + resBool = db->rollback(); + return 0; + } + if(!report_id) { - resBool = db->rollback(); - return 0; + queryStr = QString("INSERT INTO public.reports (fk_task_fim_id) " + "VALUES (%1) " + "RETURNING reports.report_id").arg( + task.getID()); + + report_id = queryExecInt(queryStr); + if(!report_id) + { + resBool = db->rollback(); + return 0; + } } - - - queryStr = QString("DELETE FROM public.report_items " - "WHERE fk_report_id = %1 ").arg( - QString::number(report_id)); - - QSqlQuery query1 = QSqlQuery(*db); - if(!queryExec(queryStr, &query1)) + else { - resBool = db->rollback(); - return 0; - } + queryStr = QString("DELETE FROM public.report_items " + "WHERE fk_report_id = %1 ").arg( + QString::number(report_id)); - 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 (fk_task_fim_id) " - "VALUES (%1) " - "RETURNING reports.report_id").arg( - task.getID()); - - int report_id = queryExecInt(queryStr); - if(!report_id) - { - resBool = db->rollback(); - return 0; + QSqlQuery queryItemsDEL = QSqlQuery(*db); + if(!queryExec(queryStr, &queryItemsDEL)) + { + resBool = db->rollback(); + return 0; + } } int number = 0; @@ -811,19 +830,17 @@ int DataBaseLMS::insertReportFIM(TaskAmmFim task) } } - /* queryStr = QString("UPDATE public.tasks_fim SET status = '%1' " "WHERE task_id = %2 ").arg( "checkup", - QString::number(task.getID()) ); + QString::number(task_id) ); - QSqlQuery query1 = QSqlQuery(*db); - if(!queryExec(queryStr, &query1)) + QSqlQuery queryTaskUPD = QSqlQuery(*db); + if(!queryExec(queryStr, &queryTaskUPD)) { resBool = db->rollback(); return 0; } - */ resBool = db->commit(); return report_id; diff --git a/DataBaseLMS/interfacedatabaselms.cpp b/DataBaseLMS/interfacedatabaselms.cpp index 8812829..8358187 100644 --- a/DataBaseLMS/interfacedatabaselms.cpp +++ b/DataBaseLMS/interfacedatabaselms.cpp @@ -19,7 +19,7 @@ void InterfaceDataBaseLMS::slot_LanguageChanged(QString language) QCoreApplication::installTranslator(&qtLanguageTranslator); } -bool InterfaceDataBaseLMS::ConnectionToDB() +bool InterfaceDataBaseLMS::connectionToDB() { QMutexLocker mtxLocker(&mtxAccess); if(!createConnection()) @@ -34,7 +34,7 @@ bool InterfaceDataBaseLMS::ConnectionToDB() } } -bool InterfaceDataBaseLMS::DisConnectionFromDB() +bool InterfaceDataBaseLMS::disConnectionFromDB() { QMutexLocker mtxLocker(&mtxAccess); deleteConnection(); @@ -51,7 +51,7 @@ bool InterfaceDataBaseLMS::DBisConnected() //Инструкторы -bool InterfaceDataBaseLMS::AuthorizationInstructor(QString login, QString password) +bool InterfaceDataBaseLMS::authorizationInstructor(QString login, QString password) { QMutexLocker mtxLocker(&mtxAccess); @@ -81,7 +81,7 @@ bool InterfaceDataBaseLMS::deAuthorizationInstructor(QString login) bool InterfaceDataBaseLMS::deAuthorizationAllInstructors() { QMutexLocker mtxLocker(&mtxAccess); - return updateAllUsersLoggedIn(DataBaseLMS::TypeUserDBInstructor,false); + return updateAllUsersLoggedIn(DataBaseLMS::TypeUserDBInstructor, false); } QString InterfaceDataBaseLMS::getNameInstructorByLogin(QString login) @@ -125,43 +125,33 @@ int InterfaceDataBaseLMS::editInstructor(Instructor instructor) QMutexLocker mtxLocker(&mtxAccess); //Проверка корректности логина, имени, пароля - QList listInstructors = selectAllInstructors(); - for(Instructor exist_instructor : listInstructors) - { - if(instructor.getName() == QStringLiteral("")) - {//Имя не корректно! - QMessageBox::critical(ownerWidget, tr("Editing error!"), - tr("Unacceptable instructor name has been entered.\nThe changes will not be accepted.")); - return 0; - } - if(instructor.getLogin() == QStringLiteral("")) - {//Логин не корректен! - QMessageBox::critical(ownerWidget, tr("Editing error!"), - tr("Unacceptable instructor login has been entered.\nThe changes will not be accepted.")); - return 0; - } + if(instructor.getName() == QStringLiteral("")) + {//Имя не корректно! + QMessageBox::critical(ownerWidget, tr("Editing error!"), + tr("Unacceptable instructor name has been entered.\nThe changes will not be accepted.")); + return 0; + } - if(instructor.getPassword() == QStringLiteral("")) - {//Пароль не корректный! - QMessageBox::critical(ownerWidget, tr("Editing error!"), - tr("Unacceptable instructor password has been entered.\nThe changes will not be accepted.")); - return 0; - } + if(instructor.getLogin() == QStringLiteral("")) + {//Логин не корректен! + QMessageBox::critical(ownerWidget, tr("Editing error!"), + tr("Unacceptable instructor login has been entered.\nThe changes will not be accepted.")); + return 0; + } - if(instructor.getName() == exist_instructor.getName() && instructor.getID() != exist_instructor.getID()) - {//Имя уже существует - QMessageBox::critical(ownerWidget, tr("Editing error!"), - tr("An existing instructor name has been entered.")); - return 0; - } + if(instructor.getPassword() == QStringLiteral("")) + {//Пароль не корректный! + QMessageBox::critical(ownerWidget, tr("Editing error!"), + tr("Unacceptable instructor password has been entered.\nThe changes will not be accepted.")); + return 0; + } - if(instructor.getLogin() == exist_instructor.getLogin() && instructor.getID() != exist_instructor.getID()) - {//Логин уже существует! - QMessageBox::critical(ownerWidget, tr("Editing error!"), - tr("An existing instructor login has been entered.\nThe changes will not be accepted.")); - return 0; - } + if(selectUserID(DataBaseLMS::TypeUserDBInstructor, instructor.getLogin()) || selectUserID(DataBaseLMS::TypeUserDBTrainee, instructor.getLogin())) + {//Логин уже существует! + QMessageBox::critical(ownerWidget, tr("Editing error!"), + tr("An existing instructor or trainee login has been entered.\nThe changes will not be accepted.")); + return 0; } return updateInstructor(instructor); @@ -188,7 +178,7 @@ bool InterfaceDataBaseLMS::isLoggedInInstructor(int id) //Инструкторы -bool InterfaceDataBaseLMS::AuthorizationTrainee(QString login, QString password, QString classroom_name, QString computer_name) +bool InterfaceDataBaseLMS::authorizationTrainee(QString login, QString password, QString classroom_name, QString computer_name) { QMutexLocker mtxLocker(&mtxAccess); @@ -408,7 +398,6 @@ int InterfaceDataBaseLMS::newTaskFIM(TaskAmmFim task, int id_trainee) int InterfaceDataBaseLMS::delTaskFIM(int id) { QMutexLocker mtxLocker(&mtxAccess); - deleteReportFIM(id); return deleteTaskFIM(id); } @@ -421,15 +410,7 @@ int InterfaceDataBaseLMS::editTaskFIM(TaskAmmFim task) int InterfaceDataBaseLMS::replaceReportFIM(TaskAmmFim task) { QMutexLocker mtxLocker(&mtxAccess); - deleteReportFIM(task.getID()); - - if(int report_id = insertReportFIM(task)) - { - updateStatusTaskFIM(task.getID(), "checkup"); - return report_id; - } - - return 0; + return updateReportFIMforTask(task); } int InterfaceDataBaseLMS::changeStatusTaskFIM(int id_task, QString status) @@ -461,43 +442,33 @@ int InterfaceDataBaseLMS::editTrainee(Trainee trainee) QMutexLocker mtxLocker(&mtxAccess); //Проверка корректности логина, имени, пароля - QList listTrainees = selectAllTrainees(); - for(Trainee exist_trainee : listTrainees) - { - if(trainee.getName() == QStringLiteral("")) - {//Имя не корректно! - QMessageBox::critical(ownerWidget, tr("Editing error!"), - tr("Unacceptable trainee name has been entered.\nThe changes will not be accepted.")); - return 0; - } - if(trainee.getLogin() == QStringLiteral("")) - {//Логин не корректен! - QMessageBox::critical(ownerWidget, tr("Editing error!"), - tr("Unacceptable trainee login has been entered.\nThe changes will not be accepted.")); - return 0; - } + if(trainee.getName() == QStringLiteral("")) + {//Имя не корректно! + QMessageBox::critical(ownerWidget, tr("Editing error!"), + tr("Unacceptable trainee name has been entered.\nThe changes will not be accepted.")); + return 0; + } - if(trainee.getPassword() == QStringLiteral("")) - {//Пароль не корректный! - QMessageBox::critical(ownerWidget, tr("Editing error!"), - tr("Unacceptable trainee password has been entered.\nThe changes will not be accepted.")); - return 0; - } + if(trainee.getLogin() == QStringLiteral("")) + {//Логин не корректен! + QMessageBox::critical(ownerWidget, tr("Editing error!"), + tr("Unacceptable trainee login has been entered.\nThe changes will not be accepted.")); + return 0; + } - if(trainee.getName() == exist_trainee.getName() && trainee.getID() != exist_trainee.getID()) - {//Имя уже существует - QMessageBox::critical(ownerWidget, tr("Editing error!"), - tr("An existing trainee name has been entered.")); - return 0; - } + if(trainee.getPassword() == QStringLiteral("")) + {//Пароль не корректный! + QMessageBox::critical(ownerWidget, tr("Editing error!"), + tr("Unacceptable trainee password has been entered.\nThe changes will not be accepted.")); + return 0; + } - if(trainee.getLogin() == exist_trainee.getLogin() && trainee.getID() != exist_trainee.getID()) - {//Логин уже существует! - QMessageBox::critical(ownerWidget, tr("Editing error!"), - tr("An existing trainee login has been entered.\nThe changes will not be accepted.")); - return 0; - } + if(selectUserID(DataBaseLMS::TypeUserDBInstructor, trainee.getLogin()) || selectUserID(DataBaseLMS::TypeUserDBTrainee, trainee.getLogin())) + {//Логин уже существует! + QMessageBox::critical(ownerWidget, tr("Editing error!"), + tr("An existing instructor or trainee login has been entered.\nThe changes will not be accepted.")); + return 0; } return updateTrainee(trainee); diff --git a/DataBaseLMS/interfacedatabaselms.h b/DataBaseLMS/interfacedatabaselms.h index 765b521..03eff5d 100644 --- a/DataBaseLMS/interfacedatabaselms.h +++ b/DataBaseLMS/interfacedatabaselms.h @@ -20,14 +20,14 @@ public Q_SLOTS: public: //Соединение - bool ConnectionToDB(); - bool DisConnectionFromDB(); + bool connectionToDB(); + bool disConnectionFromDB(); bool DBisConnected(); //Инструкторы - bool AuthorizationInstructor(QString login, QString password); + bool authorizationInstructor(QString login, QString password); bool deAuthorizationInstructor(QString login); bool deAuthorizationAllInstructors(); @@ -48,7 +48,7 @@ public: //Обучаемые - bool AuthorizationTrainee(QString login, QString password, QString classroom_name, QString computer_name); + bool authorizationTrainee(QString login, QString password, QString classroom_name, QString computer_name); bool deAuthorizationTrainee(QString login); bool deAuthorizationAllTrainees(); @@ -82,13 +82,13 @@ public: int delGroup(int id); int editGroup(Group group); + + //Задачи + int newTaskAMM(TaskAmmFim task, int id_trainee); int delTaskAMM(int id); int editTaskAMM(TaskAmmFim task); - - //Задачи - QList getListTasksAMMofTrainee(int id_trainee); QList getListTasksFIMofTrainee(int id_trainee); diff --git a/ServerLMS/providerdblms.cpp b/ServerLMS/providerdblms.cpp index 2576e5e..31c3bd2 100644 --- a/ServerLMS/providerdblms.cpp +++ b/ServerLMS/providerdblms.cpp @@ -6,7 +6,7 @@ ProviderDBLMS::ProviderDBLMS(QWidget *parentWidget, QObject *parent) : QObject(parent), dbLMS(nullptr) { - dbLMS = new InterfaceDataBaseLMS(parentWidget); + dbLMS = new InterfaceDataBaseLMS(/*parentWidget*/nullptr); //ConnectionToDB(); } @@ -20,7 +20,7 @@ void ProviderDBLMS::ConnectionToDB() mtxAccess.lock(); if(! dbLMS->DBisConnected()) { - if(dbLMS->ConnectionToDB()) + if(dbLMS->connectionToDB()) { Q_EMIT signal_BlockAutorization(false); //Q_EMIT signal_NeedUpdateUI(true, true); @@ -36,7 +36,7 @@ void ProviderDBLMS::DisConnectionFromDB() { Q_EMIT signal_BlockAutorization(true); - dbLMS->DisConnectionFromDB(); + dbLMS->disConnectionFromDB(); //Q_EMIT signal_NeedUpdateUI(true, true); } @@ -72,7 +72,7 @@ bool ProviderDBLMS::authorizationTrainee(QString login, QString password, QStrin Q_EMIT signal_BlockAutorization(true); - bool res = dbLMS->AuthorizationTrainee(login, password, classroom_name, computer_name); + bool res = dbLMS->authorizationTrainee(login, password, classroom_name, computer_name); Q_EMIT signal_BlockAutorization(false); @@ -134,7 +134,7 @@ bool ProviderDBLMS::authorizationInstructor(QString login, QString password) Q_EMIT signal_BlockAutorization(true); - bool res = dbLMS->AuthorizationInstructor(login, password); + bool res = dbLMS->authorizationInstructor(login, password); Q_EMIT signal_BlockAutorization(false); From ef12d4f7a9451c468b8c61c2bea02e24e088be1d Mon Sep 17 00:00:00 2001 From: krivoshein Date: Wed, 13 Aug 2025 16:15:28 +0300 Subject: [PATCH 5/6] =?UTF-8?q?=D0=9F=D0=BE=D1=87=D0=B8=D0=BD=D0=B8=D0=BB?= =?UTF-8?q?=20=D0=BA=D0=BB=D0=B8=D0=BD=D1=87=20=D1=81=20=D0=BC=D1=8C=D1=8E?= =?UTF-8?q?=D1=82=D0=B5=D0=BA=D1=81=D0=BE=D0=BC=20=D0=9F=D1=80=D0=BE=D0=B2?= =?UTF-8?q?=D0=B0=D0=B9=D0=B4=D0=B5=D1=80=D0=B0=20=D0=94=D0=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- DataBaseLMS/databaselms_trainees.cpp | 2 +- DataBaseLMS/interfacedatabaselms.cpp | 102 ++++++++++++------------- DataBaseLMS/interfacedatabaselms.h | 2 +- ServerLMS/Systems/processingsystem.cpp | 10 ++- ServerLMS/providerdblms.cpp | 4 +- ServerLMS/serverlmswidget.cpp | 17 +++-- ServerLMS/serverlmswidget.h | 2 +- 7 files changed, 74 insertions(+), 65 deletions(-) diff --git a/DataBaseLMS/databaselms_trainees.cpp b/DataBaseLMS/databaselms_trainees.cpp index fd1ba6f..5a20583 100644 --- a/DataBaseLMS/databaselms_trainees.cpp +++ b/DataBaseLMS/databaselms_trainees.cpp @@ -62,7 +62,7 @@ Trainee DataBaseLMS::selectTrainee(int id_trainee) "LEFT OUTER JOIN public.computers ON computers.computer_id = users.fk_computer_id " "LEFT OUTER JOIN public.classrooms ON classrooms.classroom_id = computers.fk_classroom_id " "WHERE users.user_id = %1 AND users.type = '%2' " - "ORDER BY groups.name, trainees.name ASC").arg( + "ORDER BY groups.name, users.name ASC").arg( QString::number(id_trainee), TypeUserDBTrainee); diff --git a/DataBaseLMS/interfacedatabaselms.cpp b/DataBaseLMS/interfacedatabaselms.cpp index 8358187..32ee3c2 100644 --- a/DataBaseLMS/interfacedatabaselms.cpp +++ b/DataBaseLMS/interfacedatabaselms.cpp @@ -21,7 +21,7 @@ void InterfaceDataBaseLMS::slot_LanguageChanged(QString language) bool InterfaceDataBaseLMS::connectionToDB() { - QMutexLocker mtxLocker(&mtxAccess); + //QMutexLocker mtxLocker(&mtxAccess); if(!createConnection()) { QMessageBox::critical(ownerWidget, dbSettings.dbName, tr("Connection error: ") + db->lastError().text()); @@ -36,7 +36,7 @@ bool InterfaceDataBaseLMS::connectionToDB() bool InterfaceDataBaseLMS::disConnectionFromDB() { - QMutexLocker mtxLocker(&mtxAccess); + //QMutexLocker mtxLocker(&mtxAccess); deleteConnection(); //QMessageBox::information(ownerWidget, dbName, tr("Disconnection is successful!")); return true; @@ -44,7 +44,7 @@ bool InterfaceDataBaseLMS::disConnectionFromDB() bool InterfaceDataBaseLMS::DBisConnected() { - QMutexLocker mtxLocker(&mtxAccess); + //QMutexLocker mtxLocker(&mtxAccess); return isConnected(); } @@ -53,7 +53,7 @@ bool InterfaceDataBaseLMS::DBisConnected() bool InterfaceDataBaseLMS::authorizationInstructor(QString login, QString password) { - QMutexLocker mtxLocker(&mtxAccess); + //QMutexLocker mtxLocker(&mtxAccess); if(int id = selectUserID(DataBaseLMS::TypeUserDBInstructor, login, password)) { @@ -68,7 +68,7 @@ bool InterfaceDataBaseLMS::authorizationInstructor(QString login, QString passwo bool InterfaceDataBaseLMS::deAuthorizationInstructor(QString login) { - QMutexLocker mtxLocker(&mtxAccess); + //QMutexLocker mtxLocker(&mtxAccess); if(int id = selectUserID(DataBaseLMS::TypeUserDBInstructor, login)) { @@ -80,49 +80,49 @@ bool InterfaceDataBaseLMS::deAuthorizationInstructor(QString login) bool InterfaceDataBaseLMS::deAuthorizationAllInstructors() { - QMutexLocker mtxLocker(&mtxAccess); + //QMutexLocker mtxLocker(&mtxAccess); return updateAllUsersLoggedIn(DataBaseLMS::TypeUserDBInstructor, false); } QString InterfaceDataBaseLMS::getNameInstructorByLogin(QString login) { - QMutexLocker mtxLocker(&mtxAccess); + //QMutexLocker mtxLocker(&mtxAccess); return selectUserNameByLogin(DataBaseLMS::TypeUserDBInstructor, login); } int InterfaceDataBaseLMS::getIdInstructorByLogin(QString login) { - QMutexLocker mtxLocker(&mtxAccess); + //QMutexLocker mtxLocker(&mtxAccess); return selectUserID(DataBaseLMS::TypeUserDBInstructor, login); } QList InterfaceDataBaseLMS::getListInstructors() { - QMutexLocker mtxLocker(&mtxAccess); + //QMutexLocker mtxLocker(&mtxAccess); return selectAllInstructors(); } Instructor InterfaceDataBaseLMS::getInstructor(int id) { - QMutexLocker mtxLocker(&mtxAccess); + //QMutexLocker mtxLocker(&mtxAccess); return selectInstructor(id); } int InterfaceDataBaseLMS::newInstructor() { - QMutexLocker mtxLocker(&mtxAccess); + //QMutexLocker mtxLocker(&mtxAccess); return insertInstructor(); } int InterfaceDataBaseLMS::delInstructor(int id) { - QMutexLocker mtxLocker(&mtxAccess); + //QMutexLocker mtxLocker(&mtxAccess); return deleteInstructor(id); } int InterfaceDataBaseLMS::editInstructor(Instructor instructor) { - QMutexLocker mtxLocker(&mtxAccess); + //QMutexLocker mtxLocker(&mtxAccess); //Проверка корректности логина, имени, пароля @@ -159,19 +159,19 @@ int InterfaceDataBaseLMS::editInstructor(Instructor instructor) bool InterfaceDataBaseLMS::isAdminInstructor(int id) { - QMutexLocker mtxLocker(&mtxAccess); + //QMutexLocker mtxLocker(&mtxAccess); return selectInstructorIsAdmin(id); } bool InterfaceDataBaseLMS::isArchivedInstructor(int id) { - QMutexLocker mtxLocker(&mtxAccess); + //QMutexLocker mtxLocker(&mtxAccess); return selectUserArchived(DataBaseLMS::TypeUserDBInstructor, id); } bool InterfaceDataBaseLMS::isLoggedInInstructor(int id) { - QMutexLocker mtxLocker(&mtxAccess); + //QMutexLocker mtxLocker(&mtxAccess); return selectUserLoggedIn(DataBaseLMS::TypeUserDBInstructor, id); } @@ -180,7 +180,7 @@ bool InterfaceDataBaseLMS::isLoggedInInstructor(int id) bool InterfaceDataBaseLMS::authorizationTrainee(QString login, QString password, QString classroom_name, QString computer_name) { - QMutexLocker mtxLocker(&mtxAccess); + //QMutexLocker mtxLocker(&mtxAccess); if(int id = selectUserID(DataBaseLMS::TypeUserDBTrainee, login, password)) { @@ -195,7 +195,7 @@ bool InterfaceDataBaseLMS::authorizationTrainee(QString login, QString password, bool InterfaceDataBaseLMS::deAuthorizationTrainee(QString login) { - QMutexLocker mtxLocker(&mtxAccess); + //QMutexLocker mtxLocker(&mtxAccess); if(int id = selectUserID(DataBaseLMS::TypeUserDBTrainee, login)) { @@ -207,13 +207,13 @@ bool InterfaceDataBaseLMS::deAuthorizationTrainee(QString login) bool InterfaceDataBaseLMS::deAuthorizationAllTrainees() { - QMutexLocker mtxLocker(&mtxAccess); + //QMutexLocker mtxLocker(&mtxAccess); return updateAllUsersLoggedIn(DataBaseLMS::TypeUserDBTrainee, false); } int InterfaceDataBaseLMS::entryTraineeOnSimulator(int id_trainee) { - QMutexLocker mtxLocker(&mtxAccess); + //QMutexLocker mtxLocker(&mtxAccess); TimingOfTrainee timing(id_trainee); @@ -235,7 +235,7 @@ int InterfaceDataBaseLMS::entryTraineeOnSimulator(int id_trainee) int InterfaceDataBaseLMS::exitTraineeFromSimulator(int id_trainee) { - QMutexLocker mtxLocker(&mtxAccess); + //QMutexLocker mtxLocker(&mtxAccess); TimingOfTrainee timing(id_trainee); @@ -257,73 +257,73 @@ int InterfaceDataBaseLMS::exitTraineeFromSimulator(int id_trainee) QString InterfaceDataBaseLMS::getNameTraineeOnComputer(QString computer_name) { - QMutexLocker mtxLocker(&mtxAccess); + //QMutexLocker mtxLocker(&mtxAccess); return selectTraineeNameOnComputer(computer_name); } Trainee InterfaceDataBaseLMS::getTraineeOnComputer(QString computer_name) { - QMutexLocker mtxLocker(&mtxAccess); + //QMutexLocker mtxLocker(&mtxAccess); return selectTraineeOnComputer(computer_name); } QString InterfaceDataBaseLMS::getNameTraineeByLogin(QString login) { - QMutexLocker mtxLocker(&mtxAccess); + //QMutexLocker mtxLocker(&mtxAccess); return selectUserNameByLogin(DataBaseLMS::TypeUserDBTrainee, login); } int InterfaceDataBaseLMS::getIdTraineeByLogin(QString login) { - QMutexLocker mtxLocker(&mtxAccess); + //QMutexLocker mtxLocker(&mtxAccess); return selectUserID(DataBaseLMS::TypeUserDBTrainee, login); } QList InterfaceDataBaseLMS::getListTraineesInGroup(int id) { - QMutexLocker mtxLocker(&mtxAccess); + //QMutexLocker mtxLocker(&mtxAccess); return selectAllTraineesInGroup(id); } QList InterfaceDataBaseLMS::getListGroups() { - QMutexLocker mtxLocker(&mtxAccess); + //QMutexLocker mtxLocker(&mtxAccess); return selectAllGroups(); } QList InterfaceDataBaseLMS::getListTrainees() { - QMutexLocker mtxLocker(&mtxAccess); + //QMutexLocker mtxLocker(&mtxAccess); return selectAllTrainees(); } Trainee InterfaceDataBaseLMS::getTrainee(int id) { - QMutexLocker mtxLocker(&mtxAccess); + //QMutexLocker mtxLocker(&mtxAccess); return selectTrainee(id); } Group InterfaceDataBaseLMS::getGroup(int id) { - QMutexLocker mtxLocker(&mtxAccess); + //QMutexLocker mtxLocker(&mtxAccess); return selectGroup(id); } int InterfaceDataBaseLMS::newGroup() { - QMutexLocker mtxLocker(&mtxAccess); + //QMutexLocker mtxLocker(&mtxAccess); return insertGroup(); } int InterfaceDataBaseLMS::delGroup(int id) { - QMutexLocker mtxLocker(&mtxAccess); + //QMutexLocker mtxLocker(&mtxAccess); return deleteGroup(id); } int InterfaceDataBaseLMS::editGroup(Group group) { - QMutexLocker mtxLocker(&mtxAccess); + //QMutexLocker mtxLocker(&mtxAccess); //Проверка корректности имени QList listGroups = selectAllGroups(); @@ -349,97 +349,97 @@ int InterfaceDataBaseLMS::editGroup(Group group) int InterfaceDataBaseLMS::newTaskAMM(TaskAmmFim task, int id_trainee) { - QMutexLocker mtxLocker(&mtxAccess); + //QMutexLocker mtxLocker(&mtxAccess); return insertTaskAMM(task, id_trainee); } int InterfaceDataBaseLMS::delTaskAMM(int id) { - QMutexLocker mtxLocker(&mtxAccess); + //QMutexLocker mtxLocker(&mtxAccess); return deleteTaskAMM(id); } int InterfaceDataBaseLMS::editTaskAMM(TaskAmmFim task) { - QMutexLocker mtxLocker(&mtxAccess); + //QMutexLocker mtxLocker(&mtxAccess); return updateTaskAMM(task); } QList InterfaceDataBaseLMS::getListTasksAMMofTrainee(int id_trainee) { - QMutexLocker mtxLocker(&mtxAccess); + //QMutexLocker mtxLocker(&mtxAccess); return selectTasksAMMofTrainee(id_trainee); } QList InterfaceDataBaseLMS::getListTasksFIMofTrainee(int id_trainee) { - QMutexLocker mtxLocker(&mtxAccess); + //QMutexLocker mtxLocker(&mtxAccess); return selectTasksFIMofTrainee(id_trainee); } TaskAmmFim InterfaceDataBaseLMS::getTaskAMMbyID(int id_task) { - QMutexLocker mtxLocker(&mtxAccess); + //QMutexLocker mtxLocker(&mtxAccess); return selectTaskAMMbyID(id_task); } TaskAmmFim InterfaceDataBaseLMS::getTaskFIMbyID(int id_task) { - QMutexLocker mtxLocker(&mtxAccess); + //QMutexLocker mtxLocker(&mtxAccess); return selectTaskFIMbyID(id_task); } int InterfaceDataBaseLMS::newTaskFIM(TaskAmmFim task, int id_trainee) { - QMutexLocker mtxLocker(&mtxAccess); + //QMutexLocker mtxLocker(&mtxAccess); return insertTaskFIM(task, id_trainee); } int InterfaceDataBaseLMS::delTaskFIM(int id) { - QMutexLocker mtxLocker(&mtxAccess); + //QMutexLocker mtxLocker(&mtxAccess); return deleteTaskFIM(id); } int InterfaceDataBaseLMS::editTaskFIM(TaskAmmFim task) { - QMutexLocker mtxLocker(&mtxAccess); + //QMutexLocker mtxLocker(&mtxAccess); return updateTaskFIM(task); } int InterfaceDataBaseLMS::replaceReportFIM(TaskAmmFim task) { - QMutexLocker mtxLocker(&mtxAccess); + //QMutexLocker mtxLocker(&mtxAccess); return updateReportFIMforTask(task); } int InterfaceDataBaseLMS::changeStatusTaskFIM(int id_task, QString status) { - QMutexLocker mtxLocker(&mtxAccess); + //QMutexLocker mtxLocker(&mtxAccess); return updateStatusTaskFIM(id_task, status); } int InterfaceDataBaseLMS::changeStatusTaskAMM(int id_task, QString status) { - QMutexLocker mtxLocker(&mtxAccess); + //QMutexLocker mtxLocker(&mtxAccess); return updateStatusTaskAMM(id_task, status); } int InterfaceDataBaseLMS::newTrainee(int id_group) { - QMutexLocker mtxLocker(&mtxAccess); + //QMutexLocker mtxLocker(&mtxAccess); return insertTrainee(id_group); } int InterfaceDataBaseLMS::delTrainee(int id) { - QMutexLocker mtxLocker(&mtxAccess); + //QMutexLocker mtxLocker(&mtxAccess); return deleteTrainee(id); } int InterfaceDataBaseLMS::editTrainee(Trainee trainee) { - QMutexLocker mtxLocker(&mtxAccess); + //QMutexLocker mtxLocker(&mtxAccess); //Проверка корректности логина, имени, пароля @@ -476,12 +476,12 @@ int InterfaceDataBaseLMS::editTrainee(Trainee trainee) bool InterfaceDataBaseLMS::isArchivedTrainee(int id) { - QMutexLocker mtxLocker(&mtxAccess); + //QMutexLocker mtxLocker(&mtxAccess); return selectUserArchived(DataBaseLMS::TypeUserDBTrainee, id); } bool InterfaceDataBaseLMS::isLoggedInTrainee(int id) { - QMutexLocker mtxLocker(&mtxAccess); + //QMutexLocker mtxLocker(&mtxAccess); return selectUserLoggedIn(DataBaseLMS::TypeUserDBTrainee, id); } diff --git a/DataBaseLMS/interfacedatabaselms.h b/DataBaseLMS/interfacedatabaselms.h index 03eff5d..6668637 100644 --- a/DataBaseLMS/interfacedatabaselms.h +++ b/DataBaseLMS/interfacedatabaselms.h @@ -105,7 +105,7 @@ public: private: QTranslator qtLanguageTranslator; QWidget* ownerWidget; - QMutex mtxAccess; + //QMutex mtxAccess; }; #endif // INTERFACEDATABASELMS_H diff --git a/ServerLMS/Systems/processingsystem.cpp b/ServerLMS/Systems/processingsystem.cpp index 928428e..38083bd 100644 --- a/ServerLMS/Systems/processingsystem.cpp +++ b/ServerLMS/Systems/processingsystem.cpp @@ -1,4 +1,5 @@ #include "processingsystem.h" +#include "providerdblms.h" #include @@ -7,7 +8,10 @@ ProcessingSystem::ProcessingSystem(ProviderDBLMS* providerDBLMS, UpdateControlle updateController(nullptr), providerDBLMS(nullptr) { - this->providerDBLMS = providerDBLMS; + //this->providerDBLMS = providerDBLMS; + + + this->updateController = updateController; } @@ -16,6 +20,10 @@ void ProcessingSystem::initialize(MultiThreadServer *server, DataParser *dataPar UpdateController *updateController, ChatSystem *chatSystem) { + this->providerDBLMS = new ProviderDBLMS(/*parent*/nullptr); + this->providerDBLMS->ConnectionToDB(); + this->providerDBLMS->deAuthorizationAll(); + this->commonClientServer = commonClientHandler; this->dataParser = dataParser; this->server = server; diff --git a/ServerLMS/providerdblms.cpp b/ServerLMS/providerdblms.cpp index 31c3bd2..d851db4 100644 --- a/ServerLMS/providerdblms.cpp +++ b/ServerLMS/providerdblms.cpp @@ -17,7 +17,7 @@ ProviderDBLMS::~ProviderDBLMS() void ProviderDBLMS::ConnectionToDB() { - mtxAccess.lock(); + mtxAccess.lock(); if(! dbLMS->DBisConnected()) { if(dbLMS->connectionToDB()) @@ -31,7 +31,7 @@ void ProviderDBLMS::ConnectionToDB() void ProviderDBLMS::DisConnectionFromDB() { - mtxAccess.lock(); + mtxAccess.lock(); if(dbLMS->DBisConnected()) { Q_EMIT signal_BlockAutorization(true); diff --git a/ServerLMS/serverlmswidget.cpp b/ServerLMS/serverlmswidget.cpp index b5a9979..66b0236 100644 --- a/ServerLMS/serverlmswidget.cpp +++ b/ServerLMS/serverlmswidget.cpp @@ -16,8 +16,8 @@ ServerLMSWidget::ServerLMSWidget(QWidget *parent) : loggerThread(nullptr), dataParser(nullptr), processingSystem(nullptr), - updateController(nullptr), - providerDBLMS(nullptr) + updateController(nullptr)//, + //providerDBLMS(nullptr) { ui->setupUi(this); mutex = new QMutex; @@ -37,13 +37,13 @@ ServerLMSWidget::ServerLMSWidget(QWidget *parent) : updateThread = new QThread; loggerThread = new QThread; - providerDBLMS = new ProviderDBLMS(this); - providerDBLMS->ConnectionToDB(); - providerDBLMS->deAuthorizationAll(); + //providerDBLMS = new ProviderDBLMS(this); + //providerDBLMS->ConnectionToDB(); + //providerDBLMS->deAuthorizationAll(); chatSystem = new ChatSystem(); - connect(providerDBLMS, &ProviderDBLMS::signal_BlockAutorization, this, &ServerLMSWidget::slot_BlockAutorization); + //connect(providerDBLMS, &ProviderDBLMS::signal_BlockAutorization, this, &ServerLMSWidget::slot_BlockAutorization); assetsManager = new AssetsManager; assetsManager->moveToThread(updateThread); @@ -51,8 +51,9 @@ ServerLMSWidget::ServerLMSWidget(QWidget *parent) : updateController = new UpdateController; updateController->moveToThread(updateThread); - processingSystem = new ProcessingSystem(providerDBLMS, updateController); - processingSystem->moveToThread(updateThread); + processingSystem = new ProcessingSystem(/*providerDBLMS*/nullptr, updateController); + //processingSystem->moveToThread(updateThread); + //providerDBLMS->moveToThread(updateThread); dataParser = new DataParser(assetsManager,processingSystem); diff --git a/ServerLMS/serverlmswidget.h b/ServerLMS/serverlmswidget.h index 77b8357..789ced0 100644 --- a/ServerLMS/serverlmswidget.h +++ b/ServerLMS/serverlmswidget.h @@ -103,7 +103,7 @@ private: CommonClientHandler *commonClientHandler; ChatSystem *chatSystem; - ProviderDBLMS* providerDBLMS; + //ProviderDBLMS* providerDBLMS; bool first = true; // для тестов Unity From 037390a9c7cf1a04f9eee8e90c5dc9a192af732f Mon Sep 17 00:00:00 2001 From: krivoshein Date: Mon, 18 Aug 2025 17:19:29 +0300 Subject: [PATCH 6/6] =?UTF-8?q?=D0=9A=D0=BE=D0=BD=D1=82=D1=80=D0=BE=D0=BB?= =?UTF-8?q?=D1=8C=20=D1=86=D0=B5=D0=BB=D0=BE=D1=81=D1=82=D0=BD=D0=BE=D1=81?= =?UTF-8?q?=D1=82=D0=B8=20=D0=BB=D0=BE=D0=B3=D0=B8=D0=BD=D0=BE=D0=B2=20?= =?UTF-8?q?=D1=8E=D0=B7=D0=B5=D1=80=D0=BE=D0=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- DataBaseLMS/databaselms_tasks.cpp | 2 +- DataBaseLMS/databaselms_trainees.cpp | 4 +- DataBaseLMS/interfacedatabaselms.cpp | 82 ------------ .../connectorToServer/connectortoserver.cpp | 10 ++ .../connectorToServer/connectortoserver.h | 1 + .../instructors/editorinstructors.cpp | 26 ++-- .../trainees/editortrainees.cpp | 32 +++-- ServerLMS/Systems/processingsystem.cpp | 9 +- ServerLMS/providerdblms.cpp | 122 +++++++++++++++--- ServerLMS/serverlmswidget.cpp | 15 +-- ServerLMS/serverlmswidget.h | 2 +- 11 files changed, 150 insertions(+), 155 deletions(-) diff --git a/DataBaseLMS/databaselms_tasks.cpp b/DataBaseLMS/databaselms_tasks.cpp index c2d31fa..adc1d1a 100644 --- a/DataBaseLMS/databaselms_tasks.cpp +++ b/DataBaseLMS/databaselms_tasks.cpp @@ -404,7 +404,7 @@ int DataBaseLMS::deleteTaskFIM(int id_task) report_id = queryReportsSEL.value(0).toInt(); } } - if(!report_id) + else { resBool = db->rollback(); return 0; diff --git a/DataBaseLMS/databaselms_trainees.cpp b/DataBaseLMS/databaselms_trainees.cpp index 5a20583..e447ab0 100644 --- a/DataBaseLMS/databaselms_trainees.cpp +++ b/DataBaseLMS/databaselms_trainees.cpp @@ -267,8 +267,8 @@ int DataBaseLMS::deleteTrainee(int id_trainee) int mulf_id = queryMulfSEL.value(0).toInt(); /*Удаление сигналов для этой неисправности*/ - queryStr = QString("DELETE FROM public.mals_signs " - "WHERE mals_signs.fk_mulfunction_id = %1 ").arg( + queryStr = QString("DELETE FROM public.malf_signs " + "WHERE malf_signs.fk_malfunction_id = %1 ").arg( mulf_id); QSqlQuery querySign = QSqlQuery(*db); if(!queryExec(queryStr, &querySign)) diff --git a/DataBaseLMS/interfacedatabaselms.cpp b/DataBaseLMS/interfacedatabaselms.cpp index 32ee3c2..4be22c3 100644 --- a/DataBaseLMS/interfacedatabaselms.cpp +++ b/DataBaseLMS/interfacedatabaselms.cpp @@ -123,37 +123,6 @@ int InterfaceDataBaseLMS::delInstructor(int id) int InterfaceDataBaseLMS::editInstructor(Instructor instructor) { //QMutexLocker mtxLocker(&mtxAccess); - - //Проверка корректности логина, имени, пароля - - if(instructor.getName() == QStringLiteral("")) - {//Имя не корректно! - QMessageBox::critical(ownerWidget, tr("Editing error!"), - tr("Unacceptable instructor name has been entered.\nThe changes will not be accepted.")); - return 0; - } - - if(instructor.getLogin() == QStringLiteral("")) - {//Логин не корректен! - QMessageBox::critical(ownerWidget, tr("Editing error!"), - tr("Unacceptable instructor login has been entered.\nThe changes will not be accepted.")); - return 0; - } - - if(instructor.getPassword() == QStringLiteral("")) - {//Пароль не корректный! - QMessageBox::critical(ownerWidget, tr("Editing error!"), - tr("Unacceptable instructor password has been entered.\nThe changes will not be accepted.")); - return 0; - } - - if(selectUserID(DataBaseLMS::TypeUserDBInstructor, instructor.getLogin()) || selectUserID(DataBaseLMS::TypeUserDBTrainee, instructor.getLogin())) - {//Логин уже существует! - QMessageBox::critical(ownerWidget, tr("Editing error!"), - tr("An existing instructor or trainee login has been entered.\nThe changes will not be accepted.")); - return 0; - } - return updateInstructor(instructor); } @@ -324,26 +293,6 @@ int InterfaceDataBaseLMS::delGroup(int id) int InterfaceDataBaseLMS::editGroup(Group group) { //QMutexLocker mtxLocker(&mtxAccess); - - //Проверка корректности имени - QList listGroups = selectAllGroups(); - for(Group exist_group : listGroups) - { - if(group.getName() == QStringLiteral("")) - {//Имя не корректно! - QMessageBox::critical(ownerWidget, tr("Editing error!"), - tr("Unacceptable group name has been entered.\nThe changes will not be accepted.")); - return 0; - } - - if(group.getName() == exist_group.getName() && group.getID() != exist_group.getID()) - {//Имя уже существует - QMessageBox::critical(ownerWidget, tr("Editing error!"), - tr("An existing group name has been entered.\nThe changes will not be accepted.")); - return 0; - } - } - return updateGroup(group); } @@ -440,37 +389,6 @@ int InterfaceDataBaseLMS::delTrainee(int id) int InterfaceDataBaseLMS::editTrainee(Trainee trainee) { //QMutexLocker mtxLocker(&mtxAccess); - - //Проверка корректности логина, имени, пароля - - if(trainee.getName() == QStringLiteral("")) - {//Имя не корректно! - QMessageBox::critical(ownerWidget, tr("Editing error!"), - tr("Unacceptable trainee name has been entered.\nThe changes will not be accepted.")); - return 0; - } - - if(trainee.getLogin() == QStringLiteral("")) - {//Логин не корректен! - QMessageBox::critical(ownerWidget, tr("Editing error!"), - tr("Unacceptable trainee login has been entered.\nThe changes will not be accepted.")); - return 0; - } - - if(trainee.getPassword() == QStringLiteral("")) - {//Пароль не корректный! - QMessageBox::critical(ownerWidget, tr("Editing error!"), - tr("Unacceptable trainee password has been entered.\nThe changes will not be accepted.")); - return 0; - } - - if(selectUserID(DataBaseLMS::TypeUserDBInstructor, trainee.getLogin()) || selectUserID(DataBaseLMS::TypeUserDBTrainee, trainee.getLogin())) - {//Логин уже существует! - QMessageBox::critical(ownerWidget, tr("Editing error!"), - tr("An existing instructor or trainee login has been entered.\nThe changes will not be accepted.")); - return 0; - } - return updateTrainee(trainee); } diff --git a/InstructorsAndTrainees/connectorToServer/connectortoserver.cpp b/InstructorsAndTrainees/connectorToServer/connectortoserver.cpp index 71c46db..0236a8d 100644 --- a/InstructorsAndTrainees/connectorToServer/connectortoserver.cpp +++ b/InstructorsAndTrainees/connectorToServer/connectortoserver.cpp @@ -295,6 +295,16 @@ int ConnectorToServer::getIdTraineeByLogin(QString login) return 0; } +int ConnectorToServer::getIdInstructorByLogin(QString login) +{ + for(Instructor instructor : listInstructors) + { + if(instructor.getLogin() == login) + return instructor.getID(); + } + return 0; +} + void ConnectorToServer::showVersionSelect() { QByteArray answer = dataParser->xmlAnswer_notify(cmd_CheckVersionList); diff --git a/InstructorsAndTrainees/connectorToServer/connectortoserver.h b/InstructorsAndTrainees/connectorToServer/connectortoserver.h index d490fb5..4ffa61a 100644 --- a/InstructorsAndTrainees/connectorToServer/connectortoserver.h +++ b/InstructorsAndTrainees/connectorToServer/connectortoserver.h @@ -60,6 +60,7 @@ public: Group getGroup(int id); int getIdTraineeByLogin(QString login); + int getIdInstructorByLogin(QString login); void showVersionSelect(); void setLoginName(QString name); diff --git a/InstructorsAndTrainees/instructors/editorinstructors.cpp b/InstructorsAndTrainees/instructors/editorinstructors.cpp index 5aceb87..dd8fb02 100644 --- a/InstructorsAndTrainees/instructors/editorinstructors.cpp +++ b/InstructorsAndTrainees/instructors/editorinstructors.cpp @@ -270,7 +270,7 @@ bool EditorInstructors::verifyInstructor(Instructor instructor) { //Проверка корректности логина, имени, пароля - if(instructor.getName() == QStringLiteral("")) + if(instructor.getName() == QStringLiteral("")) {//Имя не корректно! QMessageBox::critical(this, tr("Editing error!"), tr("Unacceptable instructor name has been entered.\nThe changes will not be accepted.")); @@ -292,23 +292,13 @@ bool EditorInstructors::verifyInstructor(Instructor instructor) } - QList listInstructors = connectorToServer->getListInstructors(); - - for(Instructor exist_instructor : listInstructors) - { - if(instructor.getName() == exist_instructor.getName() && instructor.getID() != exist_instructor.getID()) - {//Имя уже существует - QMessageBox::critical(this, tr("Editing error!"), - tr("An existing instructor name has been entered.")); - return false; - } - - if(instructor.getLogin() == exist_instructor.getLogin() && instructor.getID() != exist_instructor.getID()) - {//Логин уже существует! - QMessageBox::critical(this, tr("Editing error!"), - tr("An existing instructor login has been entered.\nThe changes will not be accepted.")); - return false; - } + int user_I = connectorToServer->getIdInstructorByLogin(instructor.getLogin()); + int user_T = connectorToServer->getIdTraineeByLogin(instructor.getLogin()); + if((user_I && (user_I != instructor.getID())) || (user_T && (user_T != instructor.getID()))) + {//Логин уже существует! + QMessageBox::critical(this, tr("Editing error!"), + tr("An existing instructor or trainee login has been entered.\nThe changes will not be accepted.")); + return 0; } return true; diff --git a/InstructorsAndTrainees/trainees/editortrainees.cpp b/InstructorsAndTrainees/trainees/editortrainees.cpp index 0f59340..ccbf4f4 100644 --- a/InstructorsAndTrainees/trainees/editortrainees.cpp +++ b/InstructorsAndTrainees/trainees/editortrainees.cpp @@ -24,6 +24,13 @@ EditorTrainees::EditorTrainees(ConnectorToServer* connectorToServer, bool adminM ui->btnArchive->click(); waitAnimationWidget->setParent(this); + + ui->btnNewGroup->setEnabled(true); + ui->btnDeleteGroup->setEnabled(false); + ui->btnNewTrainee->setEnabled(false); + ui->btnDeleteTrainee->setEnabled(false); + ui->btnToOrFromArchiveTrainee->setEnabled(false); + ui->btnEdit->setEnabled(false); } EditorTrainees::~EditorTrainees() @@ -448,7 +455,7 @@ bool EditorTrainees::verifyTrainee(Trainee trainee) { //Проверка корректности логина, имени, пароля - if(trainee.getName() == QStringLiteral("")) + if(trainee.getName() == QStringLiteral("")) {//Имя не корректно! QMessageBox::critical(this, tr("Editing error!"), tr("Unacceptable trainee name has been entered.\nThe changes will not be accepted.")); @@ -469,23 +476,14 @@ bool EditorTrainees::verifyTrainee(Trainee trainee) return false; } - QList listTrainees = connectorToServer->getListTrainees(); - for(Trainee exist_trainee : listTrainees) - { - if(trainee.getName() == exist_trainee.getName() && trainee.getID() != exist_trainee.getID()) - {//Имя уже существует - QMessageBox::critical(this, tr("Editing error!"), - tr("An existing trainee name has been entered.")); - return false; - } - - if(trainee.getLogin() == exist_trainee.getLogin() && trainee.getID() != exist_trainee.getID()) - {//Логин уже существует! - QMessageBox::critical(this, tr("Editing error!"), - tr("An existing trainee login has been entered.\nThe changes will not be accepted.")); - return false; - } + int user_I = connectorToServer->getIdInstructorByLogin(trainee.getLogin()); + int user_T = connectorToServer->getIdTraineeByLogin(trainee.getLogin()); + if((user_I && (user_I != trainee.getID())) || (user_T && (user_T != trainee.getID()))) + {//Логин уже существует! + QMessageBox::critical(this, tr("Editing error!"), + tr("An existing instructor or trainee login has been entered.\nThe changes will not be accepted.")); + return 0; } return true; diff --git a/ServerLMS/Systems/processingsystem.cpp b/ServerLMS/Systems/processingsystem.cpp index 38083bd..5858d02 100644 --- a/ServerLMS/Systems/processingsystem.cpp +++ b/ServerLMS/Systems/processingsystem.cpp @@ -8,10 +8,7 @@ ProcessingSystem::ProcessingSystem(ProviderDBLMS* providerDBLMS, UpdateControlle updateController(nullptr), providerDBLMS(nullptr) { - //this->providerDBLMS = providerDBLMS; - - - + this->providerDBLMS = providerDBLMS; this->updateController = updateController; } @@ -20,10 +17,6 @@ void ProcessingSystem::initialize(MultiThreadServer *server, DataParser *dataPar UpdateController *updateController, ChatSystem *chatSystem) { - this->providerDBLMS = new ProviderDBLMS(/*parent*/nullptr); - this->providerDBLMS->ConnectionToDB(); - this->providerDBLMS->deAuthorizationAll(); - this->commonClientServer = commonClientHandler; this->dataParser = dataParser; this->server = server; diff --git a/ServerLMS/providerdblms.cpp b/ServerLMS/providerdblms.cpp index d851db4..f4e82eb 100644 --- a/ServerLMS/providerdblms.cpp +++ b/ServerLMS/providerdblms.cpp @@ -224,18 +224,32 @@ bool ProviderDBLMS::deAuthorizationAll() bool ProviderDBLMS::entryTraineeOnSimulator(int id_trainee) { + mtxAccess.lock(); if(dbLMS->entryTraineeOnSimulator(id_trainee)) + { + mtxAccess.unlock(); return true; + } else + { + mtxAccess.unlock(); return false; + } } bool ProviderDBLMS::exitTraineeFromSimulator(int id_trainee) { + mtxAccess.lock(); if(dbLMS->exitTraineeFromSimulator(id_trainee)) + { + mtxAccess.unlock(); return true; + } else + { + mtxAccess.unlock(); return false; + } } int ProviderDBLMS::getIdTraineeByLogin(QString login) @@ -348,92 +362,164 @@ QList ProviderDBLMS::GetListAllGroups() int ProviderDBLMS::newInstructor() { - return dbLMS->newInstructor(); + int res = 0; + mtxAccess.lock(); + res = dbLMS->newInstructor(); + mtxAccess.unlock(); + return res; } int ProviderDBLMS::delInstructor(int id) { - return dbLMS->delInstructor(id); + int res = 0; + mtxAccess.lock(); + res = dbLMS->delInstructor(id); + mtxAccess.unlock(); + return res; } int ProviderDBLMS::editInstructor(Instructor instructor) { - return dbLMS->editInstructor(instructor); + int res = 0; + mtxAccess.lock(); + res = dbLMS->editInstructor(instructor); + mtxAccess.unlock(); + return res; } int ProviderDBLMS::newTrainee(int id_group) { - return dbLMS->newTrainee(id_group); + int res = 0; + mtxAccess.lock(); + res = dbLMS->newTrainee(id_group); + mtxAccess.unlock(); + return res; } int ProviderDBLMS::delTrainee(int id) { - return dbLMS->delTrainee(id); + int res = 0; + mtxAccess.lock(); + res = dbLMS->delTrainee(id); + mtxAccess.unlock(); + return res; } int ProviderDBLMS::editTrainee(Trainee trainee) { - return dbLMS->editTrainee(trainee); + int res = 0; + mtxAccess.lock(); + res = dbLMS->editTrainee(trainee); + mtxAccess.unlock(); + return res; } int ProviderDBLMS::newGroup() { - return dbLMS->newGroup(); + int res = 0; + mtxAccess.lock(); + res = dbLMS->newGroup(); + mtxAccess.unlock(); + return res; } int ProviderDBLMS::delGroup(int id) { - return dbLMS->delGroup(id); + int res = 0; + mtxAccess.lock(); + res = dbLMS->delGroup(id); + mtxAccess.unlock(); + return res; } int ProviderDBLMS::editGroup(Group group) { - return dbLMS->editGroup(group); + int res = 0; + mtxAccess.lock(); + res = dbLMS->editGroup(group); + mtxAccess.unlock(); + return res; } int ProviderDBLMS::newTaskAMM(TaskAmmFim task, int id_trainee) { - return dbLMS->newTaskAMM(task, id_trainee); + int res = 0; + mtxAccess.lock(); + res = dbLMS->newTaskAMM(task, id_trainee); + mtxAccess.unlock(); + return res; } int ProviderDBLMS::delTaskAMM(int id) { - return dbLMS->delTaskAMM(id); + int res = 0; + mtxAccess.lock(); + res = dbLMS->delTaskAMM(id); + mtxAccess.unlock(); + return res; } int ProviderDBLMS::editTaskAMM(TaskAmmFim task) { - return dbLMS->editTaskAMM(task); + int res = 0; + mtxAccess.lock(); + res = dbLMS->editTaskAMM(task); + mtxAccess.unlock(); + return res; } int ProviderDBLMS::newTaskFIM(TaskAmmFim task, int id_trainee) { - return dbLMS->newTaskFIM(task, id_trainee); + int res = 0; + mtxAccess.lock(); + res = dbLMS->newTaskFIM(task, id_trainee); + mtxAccess.unlock(); + return res; } int ProviderDBLMS::delTaskFIM(int id) { - return dbLMS->delTaskFIM(id); + int res = 0; + mtxAccess.lock(); + res = dbLMS->delTaskFIM(id); + mtxAccess.unlock(); + return res; } int ProviderDBLMS::editTaskFIM(TaskAmmFim task) { - return dbLMS->editTaskFIM(task); + int res = 0; + mtxAccess.lock(); + res = dbLMS->editTaskFIM(task); + mtxAccess.unlock(); + return res; } int ProviderDBLMS::replaceReportFIM(TaskAmmFim task) { - return dbLMS->replaceReportFIM(task); + int res = 0; + mtxAccess.lock(); + res = dbLMS->replaceReportFIM(task); + mtxAccess.unlock(); + return res; } int ProviderDBLMS::changeStatusTaskFIM(int id_task, QString status) { - return dbLMS->changeStatusTaskFIM(id_task, status); + int res = 0; + mtxAccess.lock(); + res = dbLMS->changeStatusTaskFIM(id_task, status); + mtxAccess.unlock(); + return res; } int ProviderDBLMS::changeStatusTaskAMM(int id_task, QString status) { - return dbLMS->changeStatusTaskAMM(id_task, status); + int res = 0; + mtxAccess.lock(); + res = dbLMS->changeStatusTaskAMM(id_task, status); + mtxAccess.unlock(); + return res; } QList ProviderDBLMS::GetListTasksAMMofTrainee(int id_trainee) diff --git a/ServerLMS/serverlmswidget.cpp b/ServerLMS/serverlmswidget.cpp index 66b0236..f34194b 100644 --- a/ServerLMS/serverlmswidget.cpp +++ b/ServerLMS/serverlmswidget.cpp @@ -16,8 +16,8 @@ ServerLMSWidget::ServerLMSWidget(QWidget *parent) : loggerThread(nullptr), dataParser(nullptr), processingSystem(nullptr), - updateController(nullptr)//, - //providerDBLMS(nullptr) + updateController(nullptr), + providerDBLMS(nullptr) { ui->setupUi(this); mutex = new QMutex; @@ -37,13 +37,13 @@ ServerLMSWidget::ServerLMSWidget(QWidget *parent) : updateThread = new QThread; loggerThread = new QThread; - //providerDBLMS = new ProviderDBLMS(this); - //providerDBLMS->ConnectionToDB(); - //providerDBLMS->deAuthorizationAll(); + providerDBLMS = new ProviderDBLMS(this); + providerDBLMS->ConnectionToDB(); + providerDBLMS->deAuthorizationAll(); chatSystem = new ChatSystem(); - //connect(providerDBLMS, &ProviderDBLMS::signal_BlockAutorization, this, &ServerLMSWidget::slot_BlockAutorization); + connect(providerDBLMS, &ProviderDBLMS::signal_BlockAutorization, this, &ServerLMSWidget::slot_BlockAutorization); assetsManager = new AssetsManager; assetsManager->moveToThread(updateThread); @@ -51,9 +51,8 @@ ServerLMSWidget::ServerLMSWidget(QWidget *parent) : updateController = new UpdateController; updateController->moveToThread(updateThread); - processingSystem = new ProcessingSystem(/*providerDBLMS*/nullptr, updateController); + processingSystem = new ProcessingSystem(providerDBLMS, updateController); //processingSystem->moveToThread(updateThread); - //providerDBLMS->moveToThread(updateThread); dataParser = new DataParser(assetsManager,processingSystem); diff --git a/ServerLMS/serverlmswidget.h b/ServerLMS/serverlmswidget.h index 789ced0..77b8357 100644 --- a/ServerLMS/serverlmswidget.h +++ b/ServerLMS/serverlmswidget.h @@ -103,7 +103,7 @@ private: CommonClientHandler *commonClientHandler; ChatSystem *chatSystem; - //ProviderDBLMS* providerDBLMS; + ProviderDBLMS* providerDBLMS; bool first = true; // для тестов Unity