bugFix Блочная передача больших данных

This commit is contained in:
2026-02-03 17:22:52 +03:00
parent 4a24f6fc29
commit 60534ebef4
17 changed files with 431 additions and 8 deletions

View File

@@ -294,6 +294,8 @@ void RecognizeSystem::recognize(QTcpSocket *socket)
case TYPE_XMLANSWER_QUERY_DB__LIST_CLASSROOMS:
case TYPE_XMLANSWER_QUERY_TASKS_AMM_FOR_TRAINEE:
case TYPE_XMLANSWER_QUERY_TASKS_FIM_FOR_TRAINEE:
case TYPE_XMLANSWER_QUERY_TASKS_AMM_OF_ALL_TRAINEES:
case TYPE_XMLANSWER_QUERY_TASKS_FIM_OF_ALL_TRAINEES:
case TYPE_XMLANSWER_QUERY_LIST_SUB_PROC_AMM:
{
//ПОЛУЧЕНИЕ РАЗМЕРА ФАЙЛА
@@ -347,12 +349,15 @@ void RecognizeSystem::recognize(QTcpSocket *socket)
emit sigSendDebugLog(Tools::getTime() + "CLIENT: toFile :" + array.size());
sizeReceiveData += array.size();
//sizeReceiveData += array.size();
sizeReceiveData = array.size();
countSend++;
tmpBlock.clear();
if(sizeReceiveData == fileSize){
//if(sizeReceiveData == fileSize)
if(sizeReceiveData >= fileSize)
{
emit sigSendDebugLog(Tools::getTime() + "FINAL Count send: " + QString::number(countSend));
emit sigSendDebugLog(Tools::getTime() + "FINAL Size received: " + QString::number(sizeReceiveData));
emit sigSendDebugLog(Tools::getTime() + "FINAL File size" + QString::number(fileSize));
@@ -952,6 +957,164 @@ void RecognizeSystem::xmlParserQueryToDB(PacketType packetType, QByteArray array
emit sigAnswerQueryToDB_ListTasksFIMforTrainee(listTasks, trainee_id);
}
break;
case TYPE_XMLANSWER_QUERY_TASKS_AMM_OF_ALL_TRAINEES:
{
QMap<int, QList<TaskAmmFim> > mapOfLists;
QDomNode listsAllNode = commonDOM.namedItem("ListsTasksAMMofAllTrainees");
for(int i = 0; i < listsAllNode.childNodes().count(); i++)
{
QDomNode listOneNode = listsAllNode.childNodes().at(i);
if(listOneNode.nodeName() == "ListTasksAMM")
{
QList<TaskAmmFim> listTasks;
int trainee_id = 0;
trainee_id = listOneNode.toElement().attribute("trainee_id").toInt();
for(int i = 0; i < listOneNode.childNodes().count(); i++)
{
QDomNode taskNode = listOneNode.childNodes().at(i);
if(taskNode.nodeName() == "taskAMM")
{//Задача
TaskAmmFim task;
task.setID(taskNode.toElement().attribute("task_id").toInt());
task.ammProcedure.title = taskNode.toElement().attribute("title");
task.ammProcedure.dmCode = taskNode.toElement().attribute("dmCode");
task.status = taskNode.toElement().attribute("status");
for(int j = 0; j < taskNode.childNodes().count(); j++)
{
QDomNode subProcNode = taskNode.childNodes().at(j);
if(subProcNode.nodeName() == "SubProc")
{//Подпроцедура
SubProc subProc;
subProc.setDmCode(subProcNode.toElement().attribute("dmCode"));
subProc.setTitle(subProcNode.toElement().attribute("title"));
subProc.setModeListStr(subProcNode.toElement().attribute("canplay"));
task.listSubProc.append(subProc);
}
}
listTasks.append(task);
}
}
mapOfLists.insert(trainee_id, listTasks);
}
}
emit sigAnswerQueryToDB_ListsTasksAMMofAllTrainees(mapOfLists);
}
break;
case TYPE_XMLANSWER_QUERY_TASKS_FIM_OF_ALL_TRAINEES:
{
QMap<int, QList<TaskAmmFim> > mapOfLists;
QDomNode listsAllNode = commonDOM.namedItem("ListsTasksFIMofAllTrainees");
for(int i = 0; i < listsAllNode.childNodes().count(); i++)
{
QDomNode listOneNode = listsAllNode.childNodes().at(i);
if(listOneNode.nodeName() == "ListTasksFIM")
{
QList<TaskAmmFim> listTasks;
int trainee_id = 0;
trainee_id = listOneNode.toElement().attribute("trainee_id").toInt();
for(int i = 0; i < listOneNode.childNodes().count(); i++)
{//Задачи
QDomNode taskNode = listOneNode.childNodes().at(i);
if(taskNode.nodeName() == "taskFIM")
{
TaskAmmFim task;
task.setID(taskNode.toElement().attribute("task_id").toInt());
task.title = taskNode.toElement().attribute("title");
task.status = taskNode.toElement().attribute("status");
for(int j = 0; j < taskNode.childNodes().count(); j++)
{
QDomNode malfOrReportNode = taskNode.childNodes().at(j);
if(malfOrReportNode.nodeName() == "malfunction")
{//Неисправность
Malfunction malfunction;
malfunction.num = malfOrReportNode.toElement().attribute("num");
malfunction.dmCode = malfOrReportNode.toElement().attribute("dmCode");
malfunction.description = malfOrReportNode.toElement().attribute("description");
malfunction.goName = malfOrReportNode.toElement().attribute("goName");
malfunction.objName = malfOrReportNode.toElement().attribute("objName");
for(int s = 0; s < malfOrReportNode.childNodes().count(); s++)
{
QDomNode signNode = malfOrReportNode.childNodes().at(s);
if(signNode.nodeName() == "malfunctionSign")
{
MalfunctionSign sign;
sign.type = signNode.toElement().attribute("type").toInt();
sign.description = signNode.toElement().attribute("description");
malfunction.malfunctionSigns.append(sign);
}
}
task.malfunctionList.append(malfunction);
}
else
if(malfOrReportNode.nodeName() == "report")
{//Отчет
FIMReport report;
report.id = malfOrReportNode.toElement().attribute("report_id").toInt();
report.mmel = malfOrReportNode.toElement().attribute("mmel") == "true" ? true : false;
for(int k = 0; k < malfOrReportNode.childNodes().count(); k++)
{
QDomNode reportItemNode = malfOrReportNode.childNodes().at(k);
if(reportItemNode.nodeName() == "reportItem")
{
FIMReportItem reportItem;
reportItem.id = reportItemNode.toElement().attribute("item_id").toInt();
reportItem.text = reportItemNode.toElement().attribute("text");
if(reportItemNode.childNodes().count())
{
QDomNode procedureIDNode = reportItemNode.childNodes().at(0);
reportItem.procedure.doc = procedureIDNode.toElement().attribute("doc");
reportItem.procedure.title = procedureIDNode.toElement().attribute("title");
reportItem.procedure.dmCode = procedureIDNode.toElement().attribute("dmCode");
reportItem.procedure.result = procedureIDNode.toElement().attribute("result");
}
report.itemList.append(reportItem);
}
else if(reportItemNode.nodeName() == "reportWHItem")
{
FIMReportWarehouseItem reportWhItem;
reportWhItem.id = reportItemNode.toElement().attribute("wh_item_id").toInt();
reportWhItem.status = reportItemNode.toElement().attribute("status").toInt();
reportWhItem.goName = reportItemNode.toElement().attribute("goName");
reportWhItem.objName = reportItemNode.toElement().attribute("objName");
reportWhItem.code = reportItemNode.toElement().attribute("code");
report.warehouseItemList.append(reportWhItem);
}
}
task.report = report;
}
}
listTasks.append(task);
}
}
mapOfLists.insert(trainee_id, listTasks);
}
}
emit sigAnswerQueryToDB_ListsTasksFIMofAllTrainees(mapOfLists);
}
break;
};
}

View File

@@ -14,6 +14,7 @@
#include "Datas.h"
#include "tasksAmmFim.h"
#include "module.h"
#include "metatypes.h"
class RecognizeSystem : public QObject
@@ -53,6 +54,10 @@ signals:
void sigAnswerQueryToDB_ListClassrooms(QList<Classroom> listClassrooms);
void sigAnswerQueryToDB_ListTasksAMMforTrainee(QList<TaskAmmFim>listTasks, int trainee_id);
void sigAnswerQueryToDB_ListTasksFIMforTrainee(QList<TaskAmmFim>listTasks, int trainee_id);
void sigAnswerQueryToDB_ListsTasksAMMofAllTrainees(MapListsTasksAllTraineeType mapOfLists);
void sigAnswerQueryToDB_ListsTasksFIMofAllTrainees(MapListsTasksAllTraineeType mapOfLists);
void sigAnswerQueryTasksXML_FIM(QByteArray array);
void sigAnswerQueryTasksXML_AMM(QByteArray array);
void sigShowServerDataList(QList<StreamingVersionData*> *versions);

View File

@@ -53,6 +53,9 @@ enum PacketType{
TYPE_XMLANSWER_QUERY_TASKS_AMM_FOR_TRAINEE = 106,
TYPE_XMLANSWER_QUERY_TASKS_FIM_FOR_TRAINEE = 107,
TYPE_XMLANSWER_QUERY_TASKS_AMM_OF_ALL_TRAINEES = 108,
TYPE_XMLANSWER_QUERY_TASKS_FIM_OF_ALL_TRAINEES = 109,
//xml-ответы на запросы AdditionalFiles
TYPE_XMLANSWER_QUERY_TASKS_XML_FIM = 130,
TYPE_XMLANSWER_QUERY_TASKS_XML_AMM = 131,

View File

@@ -167,6 +167,9 @@ void ConnectorToServer::bindConnection()
connect(recognizeSystem,&RecognizeSystem::sigAnswerQueryToDB_ListTasksAMMforTrainee,this,&ConnectorToServer::slot_AnswerQueryToDB_ListTasksAMMforTrainee);
connect(recognizeSystem,&RecognizeSystem::sigAnswerQueryToDB_ListTasksFIMforTrainee,this,&ConnectorToServer::slot_AnswerQueryToDB_ListTasksFIMforTrainee);
connect(recognizeSystem,&RecognizeSystem::sigAnswerQueryToDB_ListsTasksAMMofAllTrainees,this,&ConnectorToServer::slot_AnswerQueryToDB_ListsTasksAMMofAllTrainees);
connect(recognizeSystem,&RecognizeSystem::sigAnswerQueryToDB_ListsTasksFIMofAllTrainees,this,&ConnectorToServer::slot_AnswerQueryToDB_ListsTasksFIMofAllTrainees);
connect(recognizeSystem,&RecognizeSystem::sigAnswerQueryTasksXML_FIM,this,&ConnectorToServer::slot_AnswerQueryTasksXML_FIM);
connect(recognizeSystem,&RecognizeSystem::sigAnswerQueryTasksXML_AMM,this,&ConnectorToServer::slot_AnswerQueryTasksXML_AMM);

View File

@@ -15,6 +15,7 @@
#include "classroom.h"
#include "Datas.h"
#include "streamingversiondata.h"
#include "metatypes.h"
class ConnectorToServer : public QObject
{
@@ -97,6 +98,10 @@ public slots:
void slot_AnswerQueryToDB_ListClassrooms(QList<Classroom> listClassrooms);
void slot_AnswerQueryToDB_ListTasksAMMforTrainee(QList<TaskAmmFim> listTasks, int trainee_id);
void slot_AnswerQueryToDB_ListTasksFIMforTrainee(QList<TaskAmmFim> listTasks, int trainee_id);
void slot_AnswerQueryToDB_ListsTasksAMMofAllTrainees(MapListsTasksAllTraineeType mapOfLists);
void slot_AnswerQueryToDB_ListsTasksFIMofAllTrainees(MapListsTasksAllTraineeType mapOfLists);
void slot_AnswerQueryTasksXML_FIM(QByteArray array);
void slot_AnswerQueryTasksXML_AMM(QByteArray array);
void slot_AnswerQuerySubProc(QList<SubProc> listSubProc, QString parentTask_dmCode);

View File

@@ -95,6 +95,46 @@ void ConnectorToServer::slot_AnswerQueryToDB_ListTasksFIMforTrainee(QList<TaskAm
emit signal_UpdateDB(false, true);
}
void ConnectorToServer::slot_AnswerQueryToDB_ListsTasksAMMofAllTrainees(MapListsTasksAllTraineeType mapOfLists)
{
mtxAccess.lock();
for(int key : mapOfLists.keys())
{
//Удаляем старые задачи этого обучаемого
mapTasksAMM.remove(key);
//Добавляем новые
mapTasksAMM.insert(key, mapOfLists.value(key));
emit signal_UpdateTasksAMMforTrainee(key);
}
mtxAccess.unlock();
emit signal_UpdateDB(false, true);
}
void ConnectorToServer::slot_AnswerQueryToDB_ListsTasksFIMofAllTrainees(MapListsTasksAllTraineeType mapOfLists)
{
mtxAccess.lock();
for(int key : mapOfLists.keys())
{
//Удаляем старые задачи этого обучаемого
mapTasksFIM.remove(key);
//Добавляем новые
mapTasksFIM.insert(key, mapOfLists.value(key));
emit signal_UpdateTasksFIMforTrainee(key);
}
mtxAccess.unlock();
emit signal_UpdateDB(false, true);
}
void ConnectorToServer::slot_AnswerQueryTasksXML_FIM(QByteArray array)
{
mtxAccess.lock();