Рефакт TaskAMMFIMTreePreparation

This commit is contained in:
2025-07-25 12:29:48 +03:00
parent 943b9413fa
commit 3e5c451bb3
10 changed files with 192 additions and 108 deletions

View File

@@ -40,6 +40,7 @@ AMMtasksWidget::AMMtasksWidget(ConnectorToServer* connectorToServer, TypeListTre
connect(this, &AMMtasksWidget::signal_prepareAMMListItems, taskTreePreparation, &TaskAMMFIMTreePreparation::slot_prepareAMMListItems);
connect(this, &AMMtasksWidget::signal_prepareAMMListItemsForTrainee, taskTreePreparation, &TaskAMMFIMTreePreparation::slot_prepareAMMListItemsForTrainee);
connect(taskTreePreparation, &TaskAMMFIMTreePreparation::signal_listAMMItemsReady, this, &AMMtasksWidget::slot_AMMlistItemsReady);
connect(this, &AMMtasksWidget::signal_stopParserPreparation, taskTreePreparation, &TaskAMMFIMTreePreparation::slot_stopParserPreparation);
waitAnimationWidget = new WaitAnimationWidget;
QMovie *movie = new QMovie(":/resources/icons/762.gif");
@@ -80,7 +81,7 @@ AMMtasksWidget::AMMtasksWidget(ConnectorToServer* connectorToServer, TypeListTre
AMMtasksWidget::~AMMtasksWidget()
{
waitAnimationWidget->hideWithStop();
taskTreePreparation->stopParser();
emit signal_stopParserPreparation();
threadPreparation->quit();
threadPreparation->wait();
@@ -163,34 +164,10 @@ void AMMtasksWidget::on_treeWidget_currentItemChanged(QTreeWidgetItem *current,
int id = current->text(ColumnsTreeAMM::clmnAMM_ID).toInt();
Module* module = taskTreePreparation->getModuleAMMbyID(id);
if(module)
{
QString type = "Code";
QString code = "";
if(module->getType() == ModuleType::TYPE_PM)
{
PM* PMmodul = static_cast<PM*>(module);
type = "PM";
code = PMmodul->pmCode();
ui->btnAssignTask->setEnabled(false);
}
else
{
DM* DMmodul = static_cast<DM*>(module);
type = "DM";
code = DMmodul->dmCode();
ui->btnAssignTask->setEnabled(true);
}
}
else
{
if(taskTreePreparation->getTypeModuleAMMbyID(id) == ModuleType::TYPE_PM)
ui->btnAssignTask->setEnabled(false);
}
else
ui->btnAssignTask->setEnabled(true);
}
void AMMtasksWidget::slot_NeedUpdateUI()
@@ -292,27 +269,14 @@ void AMMtasksWidget::assignTaskAMMtoTrainee()
int id = current->text(ColumnsTreeAMM::clmnAMM_ID).toInt();
Module* module = taskTreePreparation->getModuleAMMbyID(id);
TaskAmmFim taskNew = taskTreePreparation->getTaskAMMbyID(id);
if(module)
if(taskNew.getID())
{
if(module->getType() == ModuleType::TYPE_DM)
{
QString dmCode = "";
QString techName = "";
DM* DMmodul = static_cast<DM*>(module);
dmCode = DMmodul->dmCode();
techName = DMmodul->getLangStructRus().techName;
int trainee_id = connectorToServer->getIdTraineeByLogin(loginTraineeSelected);
int trainee_id = connectorToServer->getIdTraineeByLogin(loginTraineeSelected);
TaskAmmFim taskNew;
taskNew.ammProcedure.title = techName;
taskNew.ammProcedure.dmCode = dmCode;
emit signal_AssignedTask();
connectorToServer->sendQueryToDB(TypeQueryToDB::TYPE_QUERY_ASSIGN_TASK_AMM_TO_TRAINEE, trainee_id, &taskNew);
}
emit signal_AssignedTask();
connectorToServer->sendQueryToDB(TypeQueryToDB::TYPE_QUERY_ASSIGN_TASK_AMM_TO_TRAINEE, trainee_id, &taskNew);
}
}
@@ -346,10 +310,14 @@ void AMMtasksWidget::on_btnCheck_clicked()
int id = treeItemCurrent->text(ColumnsTreeAMM::clmnAMM_ID).toInt();
TaskAmmFim task = taskTreePreparation->getTaskAMMbyID(id);
if(!task.getID())
return;
DialogCheckTask dlg(connectorToServer, "amm", this);
//dlg.setTask(task);
dlg.setIDTask(id);
dlg.setTask(&task);
QDialog* dialog = new QDialog(this);
QHBoxLayout *layout = new QHBoxLayout(dialog);

View File

@@ -57,6 +57,8 @@ Q_SIGNALS:
void signal_AssignedTask();
void signal_stopParserPreparation();
public Q_SLOTS:
void slot_AMMlistItemsReady(QList<QTreeWidgetItem*> listItems);

View File

@@ -31,12 +31,16 @@ DialogCheckTask::DialogCheckTask(ConnectorToServer* connectorToServer, QString t
ui->btnRight->setText(tr("Completed"));
ui->btnWrong->setText(tr("New"));
ui->btnWrong->setIcon(QIcon(QStringLiteral(":/resources/icons/circleGray.png")));
ui->btnRight->setEnabled(false);
ui->btnWrong->setEnabled(false);
}
}
DialogCheckTask::~DialogCheckTask()
{
delete fimTasksWidget;
if(fimTasksWidget)
delete fimTasksWidget;
delete ui;
}
@@ -45,11 +49,21 @@ void DialogCheckTask::setTask(TaskAmmFim* task)
this->task = *task;
id_task = task->getID();
//Задача
fimTasksWidget->setOneTaskFim(&this->task);
if(type == "fim")
{
//Задача
fimTasksWidget->setOneTaskFim(&this->task);
//Репорт
outReport(this->task.report);
//Репорт
outReport(this->task.report);
}
else if(type == "amm")
{
if(this->task.status == "new")
ui->btnRight->setEnabled(true);
else
ui->btnWrong->setEnabled(true);
}
}
TaskAmmFim DialogCheckTask::getTask()
@@ -57,6 +71,12 @@ TaskAmmFim DialogCheckTask::getTask()
return this->task;
}
void DialogCheckTask::setModule(Module *module)
{
this->module = *module;
id_task = this->module.getID();
}
void DialogCheckTask::outReport(FIMReport report)
{
QString str;

View File

@@ -22,6 +22,7 @@ public:
TaskAmmFim getTask();
bool getFlChanged(){return flChanged;}
void setIDTask(int id){id_task = id;}
void setModule(Module* module);
private slots:
void on_btnWrong_clicked();
@@ -32,6 +33,7 @@ private:
private:
TaskAmmFim task;
Module module;
private:
Ui::DialogCheckTask *ui;

View File

@@ -41,6 +41,7 @@ FIMtasksWidget::FIMtasksWidget(ConnectorToServer* connectorToServer, TypeListTre
connect(this, &FIMtasksWidget::signal_prepareFIMListItems, taskTreePreparation, &TaskAMMFIMTreePreparation::slot_prepareFIMListItems);
connect(this, &FIMtasksWidget::signal_prepareFIMListItemsForTrainee, taskTreePreparation, &TaskAMMFIMTreePreparation::slot_prepareFIMListItemsForTrainee);
connect(taskTreePreparation, &TaskAMMFIMTreePreparation::signal_listFIMItemsReady, this, &FIMtasksWidget::slot_FIMlistItemsReady);
connect(this, &FIMtasksWidget::signal_stopParserPreparation, taskTreePreparation, &TaskAMMFIMTreePreparation::slot_stopParserPreparation);
waitAnimationWidget = new WaitAnimationWidget;
QMovie *movie = new QMovie(":/resources/icons/762.gif");
@@ -83,7 +84,7 @@ FIMtasksWidget::FIMtasksWidget(ConnectorToServer* connectorToServer, TypeListTre
FIMtasksWidget::~FIMtasksWidget()
{
waitAnimationWidget->hideWithStop();
taskTreePreparation->stopParser();
emit signal_stopParserPreparation();
threadPreparation->quit();
threadPreparation->wait();
@@ -166,9 +167,9 @@ void FIMtasksWidget::on_treeWidget_currentItemChanged(QTreeWidgetItem *current,
{//Выбрана задача
int id = current->text(ColumnsTreeFIM::clmnFIM_ID).toInt();
TaskAmmFim* task = taskTreePreparation->getTaskFIMbyID(id);
TaskAmmFim task = taskTreePreparation->getTaskFIMbyID(id);
if(task == nullptr)
if(!task.getID())
{
ui->btnAssignTask->setEnabled(false);
@@ -176,13 +177,13 @@ void FIMtasksWidget::on_treeWidget_currentItemChanged(QTreeWidgetItem *current,
ui->btnCheck->setEnabled(false);
}
code = task->title;
code = task.title;
ui->btnAssignTask->setEnabled(true);
ui->btnDelete->setEnabled(true);
if(task->status != "new")
if(task.status != "new")
ui->btnCheck->setEnabled(true);
else
ui->btnCheck->setEnabled(false);
@@ -298,14 +299,14 @@ void FIMtasksWidget::assignTaskFIMtoTrainee()
int id = current->text(ColumnsTreeFIM::clmnFIM_ID).toInt();
TaskAmmFim* task = taskTreePreparation->getTaskFIMbyID(id);
TaskAmmFim task = taskTreePreparation->getTaskFIMbyID(id);
if(task)
if(task.getID())
{
int trainee_id = connectorToServer->getIdTraineeByLogin(loginTraineeSelected);
TaskAmmFim taskNew;
taskNew.title = task->title;
taskNew.title = task.title;
//Назначенные неисправности
for (int i = 0; i < current->childCount(); i++)
@@ -314,7 +315,7 @@ void FIMtasksWidget::assignTaskFIMtoTrainee()
if(itemMalfunction->checkState(0) == Qt::Checked)
{
Malfunction malfunction = task->malfunctionList.at(i);
Malfunction malfunction = task.malfunctionList.at(i);
taskNew.malfunctionList.append(malfunction);
}
}
@@ -359,11 +360,14 @@ void FIMtasksWidget::on_btnCheck_clicked()
int id = treeItemCurrent->text(ColumnsTreeFIM::clmnFIM_ID).toInt();
TaskAmmFim* task = taskTreePreparation->getTaskFIMbyID(id);
TaskAmmFim task = taskTreePreparation->getTaskFIMbyID(id);
if(!task.getID())
return;
DialogCheckTask dlg(connectorToServer, "fim", this);
dlg.setTask(task);
dlg.setTask(&task);
QDialog* dialog = new QDialog(this);
QHBoxLayout *layout = new QHBoxLayout(dialog);

View File

@@ -59,6 +59,8 @@ Q_SIGNALS:
void signal_AssignedTask();
void signal_stopParserPreparation();
public Q_SLOTS:
void slot_FIMlistItemsReady(QList<QTreeWidgetItem*> listItems);

View File

@@ -13,37 +13,68 @@ TaskAMMFIMTreePreparation::TaskAMMFIMTreePreparation(TypeListTreeAMMFIM type, QO
TaskAMMFIMTreePreparation::~TaskAMMFIMTreePreparation()
{
mtxAccess.lock();
deleteAllModulsAMM();
deleteAllTaskFIM();
mtxAccess.unlock();
}
void TaskAMMFIMTreePreparation::stopParser()
void TaskAMMFIMTreePreparation::slot_stopParserPreparation()
{
flagStop = true;
}
TaskAmmFim* TaskAMMFIMTreePreparation::getTaskFIMbyID(int id)
TaskAmmFim TaskAMMFIMTreePreparation::getTaskFIMbyID(int id)
{
for(int i = 0; i < listTaskFIM.count(); i++)
mtxAccess.lock();
for(int i = 0; i < listTasksFIM.count(); i++)
{/*Задачи*/
TaskAmmFim* task = listTaskFIM.at(i);
if(task->id == id)
TaskAmmFim task = listTasksFIM.at(i);
if(task.id == id)
{
mtxAccess.unlock();
return task;
}
}
return nullptr;
mtxAccess.unlock();
return TaskAmmFim();
}
Module* TaskAMMFIMTreePreparation::getModuleAMMbyID(int id)
TaskAmmFim TaskAMMFIMTreePreparation::getTaskAMMbyID(int id)
{
mtxAccess.lock();
for(int i = 0; i < listTasksAMM.count(); i++)
{/*Задачи*/
TaskAmmFim task = listTasksAMM.at(i);
if(task.id == id)
{
mtxAccess.unlock();
return task;
}
}
mtxAccess.unlock();
return TaskAmmFim();
}
ModuleType TaskAMMFIMTreePreparation::getTypeModuleAMMbyID(int id)
{
ModuleType type = ModuleType::TYPE_PM;
Module* ptrModule = nullptr;
mtxAccess.lock();
for(Module* module: listAllModulesAMM)
{
ptrModule = module->getModuleByID(id);
if(ptrModule)
return ptrModule;
{
type = ptrModule->getType();
{
mtxAccess.unlock();
return type;
}
}
}
return nullptr;
mtxAccess.unlock();
return type;
}
QTreeWidgetItem *TaskAMMFIMTreePreparation::addModuleToTreeWidgetAMM(Module *module, bool flOnlyActive, QTreeWidgetItem *parentItem)
@@ -97,7 +128,10 @@ QTreeWidgetItem *TaskAMMFIMTreePreparation::addModuleToTreeWidgetAMM(Module *mod
void TaskAMMFIMTreePreparation::loadAMMtasksFromXML(QByteArray array)
{
mtxAccess.lock();
deleteAllModulsAMM();
listTasksAMM.clear();
QDomDocument docTasksDOM;
@@ -105,14 +139,21 @@ void TaskAMMFIMTreePreparation::loadAMMtasksFromXML(QByteArray array)
QDomElement manifestElement = docTasksDOM.firstChildElement("manifest");
if(manifestElement.isNull())
{
mtxAccess.unlock();
return;
}
domElementParserAMM(manifestElement, nullptr);
mtxAccess.unlock();
}
void TaskAMMFIMTreePreparation::loadFIMtasksFromXML(QByteArray array)
{
deleteAllTaskFIM();
mtxAccess.lock();
listTasksFIM.clear();
QDomDocument docTasksDOM;
@@ -120,17 +161,26 @@ void TaskAMMFIMTreePreparation::loadFIMtasksFromXML(QByteArray array)
QDomElement RRJTasksElement = docTasksDOM.firstChildElement("RRJTasks");
if(RRJTasksElement.isNull())
{
mtxAccess.unlock();
return;
}
QDomElement taskElement = RRJTasksElement.firstChildElement();
if(taskElement.isNull())
{
mtxAccess.unlock();
return;
}
do
{/*task*/
if(flagStop)
{
mtxAccess.unlock();
return;
}
QString name = taskElement.nodeName();
QDomNamedNodeMap nodeMap = taskElement.attributes();
@@ -187,21 +237,15 @@ void TaskAMMFIMTreePreparation::loadFIMtasksFromXML(QByteArray array)
}
}while(! (malfunctionElement = malfunctionElement.nextSiblingElement()).isNull());
}
listTaskFIM.append(task);
listTasksFIM.append(*task);
delete task;
}
}while (! (taskElement = taskElement.nextSiblingElement()).isNull());
mtxAccess.unlock();
return;
}
void TaskAMMFIMTreePreparation::deleteAllTaskFIM()
{
for(TaskAmmFim* task: listTaskFIM)
delete task;
listTaskFIM.clear();
}
void TaskAMMFIMTreePreparation::deleteAllModulsAMM()
{
for(Module* module: listAllModulesAMM)
@@ -326,6 +370,19 @@ void TaskAMMFIMTreePreparation::domElementParserAMM(QDomElement element, Module*
if(moduleParent == nullptr)
listAllModulesAMM.append(module);
if(module)
if(module->getType() == ModuleType::TYPE_DM)
{
TaskAmmFim* task = nullptr;
task = new TaskAmmFim();
task->setID(module->getID());
task->ammProcedure.title = static_cast<DM*>(module)->getLangStructRus().techName;
task->ammProcedure.dmCode = static_cast<DM*>(module)->dmCode();
listTasksAMM.append(*task);
delete task;
}
}while (! (childElement = childElement.nextSiblingElement()).isNull());
}
@@ -346,13 +403,17 @@ void TaskAMMFIMTreePreparation::slot_prepareAMMListItems(QByteArray array, bool
Q_EMIT signal_listAMMItemsReady(listItems);
}
void TaskAMMFIMTreePreparation::slot_prepareAMMListItemsForTrainee(QList<TaskAmmFim> listTask)
void TaskAMMFIMTreePreparation::slot_prepareAMMListItemsForTrainee(QList<TaskAmmFim> listTasks)
{
qDebug() << "TaskAMMFIMTreePreparation::slot_prepareAMMListItemsForTrainee thread ID " << QThread::currentThreadId();
listItems.clear();
for(TaskAmmFim task : listTask)
mtxAccess.lock();
this->listTasksAMM = listTasks;
for(TaskAmmFim task : listTasks)
{
QTreeWidgetItem* item = nullptr;
@@ -394,6 +455,8 @@ void TaskAMMFIMTreePreparation::slot_prepareAMMListItemsForTrainee(QList<TaskAmm
listItems.append(item);
}
mtxAccess.unlock();
Q_EMIT signal_listAMMItemsReady(listItems);
}
@@ -405,9 +468,11 @@ void TaskAMMFIMTreePreparation::slot_prepareFIMListItems(QByteArray array)
listItems.clear();
for(TaskAmmFim* taskPtr : listTaskFIM)
mtxAccess.lock();
for(TaskAmmFim taskPtr : listTasksFIM)
{/*Задачи*/
TaskAmmFim task = *taskPtr;
TaskAmmFim task = taskPtr;
QTreeWidgetItem* itemTask = new QTreeWidgetItem();
@@ -478,22 +543,27 @@ void TaskAMMFIMTreePreparation::slot_prepareFIMListItems(QByteArray array)
listItems.append(itemTask);
}
mtxAccess.unlock();
Q_EMIT signal_listFIMItemsReady(listItems);
}
void TaskAMMFIMTreePreparation::slot_prepareFIMListItemsForTrainee(QList<TaskAmmFim> listTask)
void TaskAMMFIMTreePreparation::slot_prepareFIMListItemsForTrainee(QList<TaskAmmFim> listTasks)
{
qDebug() << "TaskAMMFIMTreePreparation::slot_prepareFIMListItemsForTrainee thread ID " << QThread::currentThreadId();
listItems.clear();
for(TaskAmmFim task : listTask)
mtxAccess.lock();
this->listTasksFIM = listTasks;
for(TaskAmmFim task : listTasks)
{/*Задачи*/
//TaskAmmFim* task = listTaskAmmFim.at(i);
TaskAmmFim* taskNew = nullptr;
taskNew = new TaskAmmFim();
*taskNew = task;
listTaskFIM.append(taskNew);
//TaskAmmFim* taskNew = nullptr;
//taskNew = new TaskAmmFim();
//*taskNew = task;
//listTaskFIM.append(taskNew);
QTreeWidgetItem* itemTask = new QTreeWidgetItem();
@@ -565,5 +635,7 @@ void TaskAMMFIMTreePreparation::slot_prepareFIMListItemsForTrainee(QList<TaskAmm
listItems.append(itemTask);
}
mtxAccess.unlock();
Q_EMIT signal_listFIMItemsReady(listItems);
}

View File

@@ -4,6 +4,7 @@
#include <QObject>
#include <QTreeWidgetItem>
#include <QDomElement>
#include <QMutex>
#include "module.h"
#include "tasksAmmFim.h"
@@ -38,40 +39,45 @@ public:
~TaskAMMFIMTreePreparation();
public:
void stopParser();
TaskAmmFim getTaskFIMbyID(int id);
TaskAmmFim getTaskAMMbyID(int id);
TaskAmmFim* getTaskFIMbyID(int id);
Module* getModuleAMMbyID(int id);
ModuleType getTypeModuleAMMbyID(int id);
private:
QTreeWidgetItem* addModuleToTreeWidgetAMM(Module* module, bool flOnlyActive = false, QTreeWidgetItem* parentItem = nullptr);
void loadAMMtasksFromXML(QByteArray array);
void domElementParserAMM(QDomElement element, Module* moduleParent);
void deleteAllModulsAMM();
void loadFIMtasksFromXML(QByteArray array);
void deleteAllTaskFIM();
public Q_SLOTS:
void slot_prepareAMMListItems(QByteArray array, bool flOnlyActive);
void slot_prepareAMMListItemsForTrainee(QList<TaskAmmFim> listTask);
void slot_prepareAMMListItemsForTrainee(QList<TaskAmmFim> listTasks);
void slot_prepareFIMListItems(QByteArray array);
void slot_prepareFIMListItemsForTrainee(QList<TaskAmmFim> listTask);
void slot_prepareFIMListItemsForTrainee(QList<TaskAmmFim> listTasks);
void slot_stopParserPreparation();
Q_SIGNALS:
void signal_listAMMItemsReady(QList<QTreeWidgetItem*> listItemsAMM);
void signal_listFIMItemsReady(QList<QTreeWidgetItem*> listItemsFIM);
private:
QList<QTreeWidgetItem*> listItems;
QList<Module*> listAllModulesAMM;
QList<TaskAmmFim*> listTaskFIM;
QList<TaskAmmFim> listTasksFIM;
QList<TaskAmmFim> listTasksAMM;
bool flagStop;
TypeListTreeAMMFIM type;
QMutex mtxAccess;
};
#endif // TASKTREEPREPARATION_H