Построение списка ПП в ГУИ в процессе

This commit is contained in:
2025-11-17 13:16:14 +03:00
parent 0c7d84ec84
commit 200f919afe
13 changed files with 108 additions and 16 deletions

View File

@@ -5,6 +5,7 @@
#include <QMessageBox> #include <QMessageBox>
#include "instructor.h" #include "instructor.h"
#include "tasksAmmFim.h" #include "tasksAmmFim.h"
#include "module.h"
#include "timingoftrainee.h" #include "timingoftrainee.h"
#include "specialmessagebox.h" #include "specialmessagebox.h"
@@ -282,7 +283,8 @@ void RecognizeSystem::recognize(QTcpSocket *socket)
//} //}
//xml-ответы на запросы к БД //А)xml-ответы на запросы к БД
//B)перечни Подпроцедур
switch(packetType) switch(packetType)
{ {
case TYPE_XMLANSWER_QUERY_DB__LIST_INSTRUCTORS: case TYPE_XMLANSWER_QUERY_DB__LIST_INSTRUCTORS:
@@ -368,11 +370,12 @@ void RecognizeSystem::recognize(QTcpSocket *socket)
countSend = 0; countSend = 0;
if(packetType != TYPE_XMLANSWER_QUERY_LIST_SUB_PROC_AMM) if(packetType != TYPE_XMLANSWER_QUERY_LIST_SUB_PROC_AMM)
{//xml-ответы на запросы к БД
xmlParserQueryToDB(packetType, array); xmlParserQueryToDB(packetType, array);
}
else else
{ {//перечни Подпроцедур
int i = 0; xmlParserQuerySubProc(packetType, array);
i++;
} }
packetType = PacketType::TYPE_NONE; packetType = PacketType::TYPE_NONE;
@@ -885,6 +888,39 @@ void RecognizeSystem::xmlParserQueryToDB(PacketType packetType, QByteArray array
}; };
} }
void RecognizeSystem::xmlParserQuerySubProc(PacketType packetType, QByteArray array)
{
QDomDocument commonDOM;
commonDOM.setContent(array);
switch(packetType)
{
case TYPE_XMLANSWER_QUERY_LIST_SUB_PROC_AMM:
{
QList<SubProc> listSubProc;
QString parentTask_dmCode = "";
QDomNode listNode = commonDOM.namedItem("ListSubProc");
parentTask_dmCode = listNode.toElement().attribute("dmCode");
for(int i = 0; i < listNode.childNodes().count(); i++)
{
QDomNode taskNode = listNode.childNodes().at(i);
if(taskNode.nodeName() == "SubProc")
{//Подпроцедура
SubProc subProc;
subProc.title = taskNode.toElement().attribute("title");
subProc.dmCode = taskNode.toElement().attribute("dmCode");
listSubProc.append(subProc);
}
}
emit sigAnswerQuerySubProc(listSubProc, parentTask_dmCode);
}
break;
};
}
void RecognizeSystem::xmlParserQueryTasksXML(PacketType packetType, QByteArray array) void RecognizeSystem::xmlParserQueryTasksXML(PacketType packetType, QByteArray array)
{ {
if(packetType == TYPE_XMLANSWER_QUERY_TASKS_XML_FIM) if(packetType == TYPE_XMLANSWER_QUERY_TASKS_XML_FIM)

View File

@@ -13,6 +13,7 @@
#include "group.h" #include "group.h"
#include "Datas.h" #include "Datas.h"
#include "tasksAmmFim.h" #include "tasksAmmFim.h"
#include "module.h"
class RecognizeSystem : public QObject class RecognizeSystem : public QObject
@@ -57,6 +58,7 @@ signals:
void sigNotify(QString text); void sigNotify(QString text);
void sigAnimationActivated(bool flag); void sigAnimationActivated(bool flag);
void sigHashReady(); void sigHashReady();
void sigAnswerQuerySubProc(QList<SubProc> listSubProc, QString parentTask_dmCode);
void signal_AnswerDocsChanged(); void signal_AnswerDocsChanged();
@@ -75,6 +77,7 @@ private:
void xmlParser(QByteArray array); void xmlParser(QByteArray array);
void xmlParserQueryToDB(PacketType packetType, QByteArray array); void xmlParserQueryToDB(PacketType packetType, QByteArray array);
void xmlParserQuerySubProc(PacketType packetType, QByteArray array);
void xmlParserQueryTasksXML(PacketType packetType, QByteArray array); void xmlParserQueryTasksXML(PacketType packetType, QByteArray array);
void checkAccessType(QString type); void checkAccessType(QString type);

View File

@@ -117,6 +117,8 @@ void ConnectorToServer::bindConnection()
connect(recognizeSystem,&RecognizeSystem::sigAnswerQueryTasksXML_FIM,this,&ConnectorToServer::slot_AnswerQueryTasksXML_FIM); connect(recognizeSystem,&RecognizeSystem::sigAnswerQueryTasksXML_FIM,this,&ConnectorToServer::slot_AnswerQueryTasksXML_FIM);
connect(recognizeSystem,&RecognizeSystem::sigAnswerQueryTasksXML_AMM,this,&ConnectorToServer::slot_AnswerQueryTasksXML_AMM); connect(recognizeSystem,&RecognizeSystem::sigAnswerQueryTasksXML_AMM,this,&ConnectorToServer::slot_AnswerQueryTasksXML_AMM);
connect(recognizeSystem,&RecognizeSystem::sigAnswerQuerySubProc,this,&ConnectorToServer::slot_AnswerQuerySubProc);
connect(client,&TCPClient::signal_ConnectedToServer,this,&ConnectorToServer::signal_ConnectedToServer,Qt::AutoConnection); connect(client,&TCPClient::signal_ConnectedToServer,this,&ConnectorToServer::signal_ConnectedToServer,Qt::AutoConnection);
connect(recognizeSystem,&RecognizeSystem::sigNotify,notifyController,&NotifyController::showWarning,Qt::AutoConnection); connect(recognizeSystem,&RecognizeSystem::sigNotify,notifyController,&NotifyController::showWarning,Qt::AutoConnection);

View File

@@ -64,6 +64,7 @@ public:
QList<Classroom> getListClassrooms(); QList<Classroom> getListClassrooms();
QList<TaskAmmFim> getListTasksAMMforTrainee(int trainee_id); QList<TaskAmmFim> getListTasksAMMforTrainee(int trainee_id);
QList<TaskAmmFim> getListTasksFIMforTrainee(int trainee_id); QList<TaskAmmFim> getListTasksFIMforTrainee(int trainee_id);
QList<SubProc> getListSubProcForDMCode(QString dmCode);
int getCountTasksAMMforTrainee(int trainee_id); int getCountTasksAMMforTrainee(int trainee_id);
int getCountTasksFIMforTrainee(int trainee_id); int getCountTasksFIMforTrainee(int trainee_id);
@@ -96,6 +97,7 @@ public slots:
void slot_AnswerQueryToDB_ListTasksFIMforTrainee(QList<TaskAmmFim> listTasks, int trainee_id); void slot_AnswerQueryToDB_ListTasksFIMforTrainee(QList<TaskAmmFim> listTasks, int trainee_id);
void slot_AnswerQueryTasksXML_FIM(QByteArray array); void slot_AnswerQueryTasksXML_FIM(QByteArray array);
void slot_AnswerQueryTasksXML_AMM(QByteArray array); void slot_AnswerQueryTasksXML_AMM(QByteArray array);
void slot_AnswerQuerySubProc(QList<SubProc> listSubProc, QString parentTask_dmCode);
void slot_AnswerDocsChanged(); void slot_AnswerDocsChanged();
@@ -123,6 +125,8 @@ signals:
void signal_UpdateTasksFIMforTrainee(int trainee_id); void signal_UpdateTasksFIMforTrainee(int trainee_id);
void signal_UpdateTasksAMMforTrainee(int trainee_id); void signal_UpdateTasksAMMforTrainee(int trainee_id);
void signal_UpdateSubProcForDMCode(QString dmCode);
void signal_ConnectedToServer(bool state); void signal_ConnectedToServer(bool state);
void signal_reInitMessangerByUsers(QList<User> listUsers); void signal_reInitMessangerByUsers(QList<User> listUsers);
@@ -160,6 +164,8 @@ private:
QByteArray listTaskFimArray; QByteArray listTaskFimArray;
QByteArray listTaskAmmArray; QByteArray listTaskAmmArray;
QMap<QString, QList<SubProc>> mapSubProc;
ServerSettings serverSettings; ServerSettings serverSettings;
ServerAuthorization serverAuth; ServerAuthorization serverAuth;

View File

@@ -118,6 +118,21 @@ void ConnectorToServer::slot_AnswerQueryTasksXML_AMM(QByteArray array)
} }
} }
void ConnectorToServer::slot_AnswerQuerySubProc(QList<SubProc> listSubProc, QString parentTask_dmCode)
{
mtxAccess.lock();
//Удаляем старые Подпроцедуры этого dmCode
mapSubProc.remove(parentTask_dmCode);
//Добавляем новые
mapSubProc.insert(parentTask_dmCode, listSubProc);
mtxAccess.unlock();
emit signal_UpdateSubProcForDMCode(parentTask_dmCode);
}
void ConnectorToServer::slot_AnswerDocsChanged() void ConnectorToServer::slot_AnswerDocsChanged()
{ {
emit signal_AnswerDocsChanged(); emit signal_AnswerDocsChanged();

View File

@@ -62,6 +62,16 @@ QList<TaskAmmFim> ConnectorToServer::getListTasksFIMforTrainee(int trainee_id)
return QList<TaskAmmFim>(); return QList<TaskAmmFim>();
} }
QList<SubProc> ConnectorToServer::getListSubProcForDMCode(QString dmCode)
{
QMutexLocker locker(&mtxAccess);
if(mapSubProc.contains(dmCode))
return mapSubProc.value(dmCode);
else
return QList<SubProc>();
}
int ConnectorToServer::getCountTasksAMMforTrainee(int trainee_id) int ConnectorToServer::getCountTasksAMMforTrainee(int trainee_id)
{ {
QMutexLocker locker(&mtxAccess); QMutexLocker locker(&mtxAccess);

View File

@@ -13,6 +13,8 @@ ListSubProc::ListSubProc(ConnectorToServer* connectorToServer, QWidget *parent)
QMovie *movie = new QMovie(":/resources/icons/762.gif"); QMovie *movie = new QMovie(":/resources/icons/762.gif");
waitAnimationWidget->setParent(this); waitAnimationWidget->setParent(this);
waitAnimationWidget->initialize(movie,this); waitAnimationWidget->initialize(movie,this);
connect(this->connectorToServer, &ConnectorToServer::signal_UpdateSubProcForDMCode, this, &ListSubProc::slot_UpdateSubProcForDMCode);
} }
ListSubProc::~ListSubProc() ListSubProc::~ListSubProc()
@@ -45,3 +47,18 @@ void ListSubProc::setTask(TaskAmmFim *task)
if(! connectorToServer->sendQueryListSubProc(this->task.ammProcedure.dmCode)) if(! connectorToServer->sendQueryListSubProc(this->task.ammProcedure.dmCode))
waitAnimationWidget->hideWithStop(); waitAnimationWidget->hideWithStop();
} }
void ListSubProc::slot_UpdateSubProcForDMCode(QString dmCode)
{
if(this->task.ammProcedure.dmCode == dmCode)
{
QList<SubProc> list = connectorToServer->getListSubProcForDMCode(dmCode);
for(SubProc subProc : list)
{
ui->listWidget->addItem(subProc.dmCode);
}
waitAnimationWidget->hideWithStop();
}
}

View File

@@ -22,6 +22,9 @@ public:
void setTask(TaskAmmFim* task); void setTask(TaskAmmFim* task);
public slots:
void slot_UpdateSubProcForDMCode(QString dmCode);
private: private:
Ui::ListSubProc *ui; Ui::ListSubProc *ui;

View File

@@ -18,6 +18,14 @@ struct ModeList
bool autoM = false; bool autoM = false;
}; };
struct SubProc
{
QString dmCode;
QString title;
ModeList modeList;
};
class INSTRUCTORSANDTRAINEES_EXPORT Module class INSTRUCTORSANDTRAINEES_EXPORT Module
{ {
public: public:

View File

@@ -6,13 +6,14 @@ DocsAnswerParser::DocsAnswerParser(QObject *parent) : QObject(parent)
} }
QByteArray DocsAnswerParser::listSubProc(QList<SubProc> list) QByteArray DocsAnswerParser::listSubProc(QList<SubProc> list, QString dmCode)
{ {
QDomDocument commonDOM; QDomDocument commonDOM;
if(! Tools::loadXMLtoDOM(":/resources/blankXML/ListSubProc.xml", &commonDOM)) if(! Tools::loadXMLtoDOM(":/resources/blankXML/ListSubProc.xml", &commonDOM))
return QByteArray(); return QByteArray();
QDomNode listNode = commonDOM.namedItem("ListSubProc"); QDomNode listNode = commonDOM.namedItem("ListSubProc");
listNode.toElement().setAttribute("dmCode", dmCode);
for(SubProc subProc : list) for(SubProc subProc : list)
{ {

View File

@@ -14,7 +14,7 @@ public:
explicit DocsAnswerParser(QObject *parent = nullptr); explicit DocsAnswerParser(QObject *parent = nullptr);
public: public:
QByteArray listSubProc(QList<SubProc> list); QByteArray listSubProc(QList<SubProc> list, QString dmCode);
signals: signals:

View File

@@ -5,15 +5,6 @@
#include "updatecontroller.h" #include "updatecontroller.h"
#include "module.h" #include "module.h"
struct SubProc
{
QString dmCode;
QString title;
ModeList modeList;
};
class DocsUpdater : public QObject class DocsUpdater : public QObject
{ {
Q_OBJECT Q_OBJECT

View File

@@ -527,7 +527,7 @@ void ProcessingSystem::processingClientQueryListSubProc(ClientHandler *client, Q
{ {
QList<SubProc> list = docsUpdater->getListSubProcForDMcode(dmCode); QList<SubProc> list = docsUpdater->getListSubProcForDMcode(dmCode);
QByteArray arrayAnswer = dataParser->getDocsAnswerParser()->listSubProc(list); QByteArray arrayAnswer = dataParser->getDocsAnswerParser()->listSubProc(list, dmCode);
//client->sendXmlAnswer(arrayAnswer, PacketType::TYPE_XMLANSWER_QUERY_LIST_SUB_PROC_AMM); //client->sendXmlAnswer(arrayAnswer, PacketType::TYPE_XMLANSWER_QUERY_LIST_SUB_PROC_AMM);
client->sendFileBlockByteArray(arrayAnswer, PacketType::TYPE_XMLANSWER_QUERY_LIST_SUB_PROC_AMM); client->sendFileBlockByteArray(arrayAnswer, PacketType::TYPE_XMLANSWER_QUERY_LIST_SUB_PROC_AMM);