mirror of
https://gitea.msk.dinamika-avia.ru/Constanta-Design/RRJServer.git
synced 2026-03-28 19:55:48 +03:00
bugFix Блочная передача больших данных
This commit is contained in:
@@ -37,6 +37,9 @@ enum PacketType
|
||||
TYPE_XMLANSWER_QUERY_TASKS_AMM_OF_TRAINEE = 106,
|
||||
TYPE_XMLANSWER_QUERY_TASKS_FIM_OF_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,
|
||||
|
||||
@@ -19,5 +19,7 @@
|
||||
<file>resources/icons/save.png</file>
|
||||
<file>resources/icons/stoped.png</file>
|
||||
<file>resources/blankXML/ListCFI.xml</file>
|
||||
<file>resources/blankXML/ListsTasksAMMofAllTrainees.xml</file>
|
||||
<file>resources/blankXML/ListsTasksFIMofAllTrainees.xml</file>
|
||||
</qresource>
|
||||
</RCC>
|
||||
|
||||
@@ -261,3 +261,136 @@ QByteArray DBAnswerParser::listTasksFIMofTrainee(bool result, QList<TaskAmmFim>
|
||||
|
||||
return commonDOM.toByteArray();
|
||||
}
|
||||
|
||||
QByteArray DBAnswerParser::listsTasksAMMofAllTrainees(QMap<int, QList<TaskAmmFim> > *mapOfLists)
|
||||
{
|
||||
QDomDocument commonDOM;
|
||||
if(! Tools::loadFileXMLtoDOM(":/resources/blankXML/ListsTasksAMMofAllTrainees.xml", &commonDOM))
|
||||
return QByteArray();
|
||||
|
||||
QDomNode listsAllNode = commonDOM.namedItem("ListsTasksAMMofAllTrainees");
|
||||
|
||||
for(int key : mapOfLists->keys())
|
||||
{
|
||||
QList<TaskAmmFim> listOne = mapOfLists->value(key);
|
||||
|
||||
QDomNode listOneNode = commonDOM.createElement("ListTasksAMM");
|
||||
listsAllNode.appendChild(listOneNode);
|
||||
|
||||
listOneNode.toElement().setAttribute("trainee_id", QString::number(key));
|
||||
|
||||
for(TaskAmmFim task : listOne)
|
||||
{
|
||||
//Задача
|
||||
QDomNode taskNode = commonDOM.createElement("taskAMM");
|
||||
listOneNode.appendChild(taskNode);
|
||||
taskNode.toElement().setAttribute("task_id", QString::number(task.getID()));
|
||||
taskNode.toElement().setAttribute("title", task.ammProcedure.title);
|
||||
taskNode.toElement().setAttribute("dmCode", task.ammProcedure.dmCode);
|
||||
taskNode.toElement().setAttribute("status", task.status);
|
||||
|
||||
for(SubProc subProc : task.listSubProc)
|
||||
{//Подпроцедура
|
||||
QDomNode subProcNode = commonDOM.createElement("SubProc");
|
||||
taskNode.appendChild(subProcNode);
|
||||
|
||||
subProcNode.toElement().setAttribute("dmCode", subProc.getDmCode());
|
||||
subProcNode.toElement().setAttribute("title", subProc.getTitle());
|
||||
subProcNode.toElement().setAttribute("canplay", subProc.getModeListStr());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Tools::saveDOMtoFileXML("ListsTasksAMMofAllTrainees.xml", &commonDOM);
|
||||
|
||||
return commonDOM.toByteArray();
|
||||
}
|
||||
|
||||
QByteArray DBAnswerParser::listsTasksFIMofAllTrainees(QMap<int, QList<TaskAmmFim> > *mapOfLists)
|
||||
{
|
||||
QDomDocument commonDOM;
|
||||
if(! Tools::loadFileXMLtoDOM(":/resources/blankXML/ListsTasksFIMofAllTrainees.xml", &commonDOM))
|
||||
return QByteArray();
|
||||
|
||||
QDomNode listsAllNode = commonDOM.namedItem("ListsTasksFIMofAllTrainees");
|
||||
|
||||
for(int key : mapOfLists->keys())
|
||||
{
|
||||
QList<TaskAmmFim> listOne = mapOfLists->value(key);
|
||||
|
||||
QDomNode listOneNode = commonDOM.createElement("ListTasksFIM");
|
||||
listsAllNode.appendChild(listOneNode);
|
||||
|
||||
listOneNode.toElement().setAttribute("trainee_id", QString::number(key));
|
||||
|
||||
for(TaskAmmFim task : listOne)
|
||||
{
|
||||
//Задача
|
||||
QDomNode taskNode = commonDOM.createElement("taskFIM");
|
||||
listOneNode.appendChild(taskNode);
|
||||
taskNode.toElement().setAttribute("task_id", QString::number(task.getID()));
|
||||
taskNode.toElement().setAttribute("title", task.title);
|
||||
taskNode.toElement().setAttribute("status", task.status);
|
||||
|
||||
for(Malfunction malfunction : task.malfunctionList)
|
||||
{//Неисправность
|
||||
QDomNode malfunctionNode = commonDOM.createElement("malfunction");
|
||||
taskNode.appendChild(malfunctionNode);
|
||||
malfunctionNode.toElement().setAttribute("dmCode", malfunction.dmCode);
|
||||
malfunctionNode.toElement().setAttribute("num", malfunction.num);
|
||||
malfunctionNode.toElement().setAttribute("description", malfunction.description);
|
||||
malfunctionNode.toElement().setAttribute("goName", malfunction.goName);
|
||||
malfunctionNode.toElement().setAttribute("objName", malfunction.objName);
|
||||
|
||||
for(MalfunctionSign sign : malfunction.malfunctionSigns)
|
||||
{//Сигналы
|
||||
QDomNode signNode = commonDOM.createElement("malfunctionSign");
|
||||
malfunctionNode.appendChild(signNode);
|
||||
signNode.toElement().setAttribute("type", sign.type);
|
||||
signNode.toElement().setAttribute("description", sign.description);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
{//FIMReport
|
||||
FIMReport report = task.report;
|
||||
QDomNode reportNode = commonDOM.createElement("report");
|
||||
taskNode.appendChild(reportNode);
|
||||
reportNode.toElement().setAttribute("report_id", report.id);
|
||||
reportNode.toElement().setAttribute("mmel", report.mmel ? "true" : "false");
|
||||
|
||||
for(FIMReportItem reportItem : task.report.itemList)
|
||||
{//FIMReportItem
|
||||
QDomNode reportItemNode = commonDOM.createElement("reportItem");
|
||||
reportNode.appendChild(reportItemNode);
|
||||
reportItemNode.toElement().setAttribute("item_id", reportItem.id);
|
||||
reportItemNode.toElement().setAttribute("text", reportItem.text);
|
||||
|
||||
//ProcedureID
|
||||
QDomNode procedureIDNode = commonDOM.createElement("procedureID");
|
||||
reportItemNode.appendChild(procedureIDNode);
|
||||
|
||||
procedureIDNode.toElement().setAttribute("doc", reportItem.procedure.doc);
|
||||
procedureIDNode.toElement().setAttribute("title", reportItem.procedure.title);
|
||||
procedureIDNode.toElement().setAttribute("dmCode", reportItem.procedure.dmCode);
|
||||
procedureIDNode.toElement().setAttribute("result", reportItem.procedure.result);
|
||||
}
|
||||
|
||||
for(FIMReportWarehouseItem reportWhItem : task.report.warehouseItemList)
|
||||
{//FIMReportWarehouseItem
|
||||
QDomNode reportWhItemNode = commonDOM.createElement("reportWHItem");
|
||||
reportNode.appendChild(reportWhItemNode);
|
||||
reportWhItemNode.toElement().setAttribute("wh_item_id", reportWhItem.id);
|
||||
reportWhItemNode.toElement().setAttribute("status", reportWhItem.status);
|
||||
reportWhItemNode.toElement().setAttribute("goName", reportWhItem.goName);
|
||||
reportWhItemNode.toElement().setAttribute("objName", reportWhItem.objName);
|
||||
reportWhItemNode.toElement().setAttribute("code", reportWhItem.code);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Tools::saveDOMtoFileXML("ListsTasksFIMofAllTrainees.xml", &commonDOM);
|
||||
|
||||
return commonDOM.toByteArray();
|
||||
}
|
||||
|
||||
@@ -23,6 +23,9 @@ public:
|
||||
|
||||
QByteArray listTasksAMMofTrainee(bool result, QList<TaskAmmFim> *listTasks, int trainee_id, bool full_list);
|
||||
QByteArray listTasksFIMofTrainee(bool result, QList<TaskAmmFim> *listTasks, int trainee_id, bool full_list);
|
||||
|
||||
QByteArray listsTasksAMMofAllTrainees(QMap<int, QList<TaskAmmFim> > *mapOfLists);
|
||||
QByteArray listsTasksFIMofAllTrainees(QMap<int, QList<TaskAmmFim> > *mapOfLists);
|
||||
signals:
|
||||
|
||||
private:
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
#include "providerdblms.h"
|
||||
|
||||
#include <clienthandler.h>
|
||||
#include <QMap>
|
||||
|
||||
ProcessingSystem::ProcessingSystem(ProviderDBLMS* providerDBLMS, UpdateController* updateController, DocsUpdater* docsUpdater, CfiController* cfiController, QObject *parent):
|
||||
QObject(parent),
|
||||
@@ -322,14 +323,21 @@ void ProcessingSystem::processingClientQueryToDB(ClientHandler *client, ClientQu
|
||||
//client->sendXmlAnswer(arrayAnswer, PacketType::TYPE_XMLANSWER_QUERY_DB__LIST_TRAINEES);
|
||||
client->sendFileBlockByteArray(arrayAnswer, PacketType::TYPE_XMLANSWER_QUERY_DB__LIST_TRAINEES);
|
||||
|
||||
/**/
|
||||
if(listTrainees.count())
|
||||
{
|
||||
//Отправка списка задач FIM всех обучаемых клиенту GUI
|
||||
sendListsTasksFIMofAllTraineestoClient(client, listTrainees);
|
||||
//Отправка списка задач AMM всех обучаемых клиенту GUI
|
||||
sendListsTasksAMMofAllTraineestoClient(client, listTrainees);
|
||||
}
|
||||
/*
|
||||
for(Trainee trainee : listTrainees)
|
||||
{
|
||||
//Отправка списка задач AMM этого обучаемого клиенту GUI
|
||||
sendListTasksAMMofTraineetoClient(client, trainee.getID());
|
||||
//Отправка списка задач FIM этого обучаемого клиенту GUI
|
||||
sendListTasksFIMofTraineetoClient(client, trainee.getID());
|
||||
}
|
||||
}*/
|
||||
|
||||
break;
|
||||
}
|
||||
@@ -756,6 +764,36 @@ void ProcessingSystem::sendListTasksFIMofTraineetoClient(ClientHandler *client,
|
||||
client->sendFileBlockByteArray(arrayAnswer, PacketType::TYPE_XMLANSWER_QUERY_TASKS_FIM_OF_TRAINEE);
|
||||
}
|
||||
|
||||
void ProcessingSystem::sendListsTasksAMMofAllTraineestoClient(ClientHandler *client, QList<Trainee> listTrainees)
|
||||
{
|
||||
QMap<int, QList<TaskAmmFim>> mapOfLists;
|
||||
for(Trainee trainee : listTrainees)
|
||||
{
|
||||
int id_trainee = trainee.getID();
|
||||
QList<TaskAmmFim> listTasksOneTrainee = providerDBLMS->GetListTasksAMMofTrainee(id_trainee);
|
||||
if(listTasksOneTrainee.count())
|
||||
mapOfLists.insert(id_trainee, listTasksOneTrainee);
|
||||
}
|
||||
|
||||
QByteArray arrayAnswer = dataParser->DbAnswer()->listsTasksAMMofAllTrainees(&mapOfLists);
|
||||
client->sendFileBlockByteArray(arrayAnswer, PacketType::TYPE_XMLANSWER_QUERY_TASKS_AMM_OF_ALL_TRAINEES);
|
||||
}
|
||||
|
||||
void ProcessingSystem::sendListsTasksFIMofAllTraineestoClient(ClientHandler *client, QList<Trainee> listTrainees)
|
||||
{
|
||||
QMap<int, QList<TaskAmmFim>> mapOfLists;
|
||||
for(Trainee trainee : listTrainees)
|
||||
{
|
||||
int id_trainee = trainee.getID();
|
||||
QList<TaskAmmFim> listTasksOneTrainee = providerDBLMS->GetListTasksFIMofTrainee(id_trainee);
|
||||
if(listTasksOneTrainee.count())
|
||||
mapOfLists.insert(id_trainee, listTasksOneTrainee);
|
||||
}
|
||||
|
||||
QByteArray arrayAnswer = dataParser->DbAnswer()->listsTasksFIMofAllTrainees(&mapOfLists);
|
||||
client->sendFileBlockByteArray(arrayAnswer, PacketType::TYPE_XMLANSWER_QUERY_TASKS_FIM_OF_ALL_TRAINEES);
|
||||
}
|
||||
|
||||
void ProcessingSystem::sendListTasksAMMofTraineeByIDtoClient(ClientHandler *client, int id_trainee, QList<int> listID)
|
||||
{
|
||||
QList<TaskAmmFim> listTasksNeed;
|
||||
|
||||
@@ -50,6 +50,10 @@ public:
|
||||
void sendListTasksAMMofTraineetoClient(ClientHandler* client, int id_trainee);
|
||||
void sendListTasksFIMofTraineetoClient(ClientHandler* client, int id_trainee);
|
||||
|
||||
void sendListsTasksAMMofAllTraineestoClient(ClientHandler *client, QList<Trainee> listTrainees);
|
||||
void sendListsTasksFIMofAllTraineestoClient(ClientHandler* client, QList<Trainee> listTrainees);
|
||||
|
||||
|
||||
void sendListTasksAMMofTraineeByIDtoClient(ClientHandler* client, int id_trainee, QList<int> listID);
|
||||
void sendListTasksFIMofTraineeByIDtoClient(ClientHandler* client, int id_trainee, QList<int> listID);
|
||||
|
||||
|
||||
@@ -85,7 +85,7 @@ void SendSystem::sendFileBlockByteArray(QByteArray array, PacketType packetType)
|
||||
QDataStream stream(socket);
|
||||
stream.setVersion(QDataStream::Qt_DefaultCompiledVersion);
|
||||
|
||||
quint64 size = array.size();
|
||||
qint64 size = array.size();
|
||||
qint64 bytesSended = 0;
|
||||
|
||||
if (size == 0)
|
||||
@@ -97,19 +97,20 @@ void SendSystem::sendFileBlockByteArray(QByteArray array, PacketType packetType)
|
||||
stream << packetType; //Отправляем тип блока
|
||||
stream << size;
|
||||
|
||||
while (size > 0)
|
||||
//while (size > 0)
|
||||
while (bytesSended < size)
|
||||
{
|
||||
QByteArray chunk = array.mid(bytesSended,sendFileBlockSize);
|
||||
stream << chunk;
|
||||
|
||||
bytesSended += chunk.length();
|
||||
size -= bytesSended;
|
||||
//size -= bytesSended;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
sendPacketType(packetType);
|
||||
quint64 size = array.size();
|
||||
qint64 size = array.size();
|
||||
qint64 bytesSended = 0;
|
||||
|
||||
if (size == 0)
|
||||
|
||||
@@ -0,0 +1,3 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<ListsTasksAMMofAllTrainees>
|
||||
</ListsTasksAMMofAllTrainees>
|
||||
@@ -0,0 +1,3 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<ListsTasksFIMofAllTrainees>
|
||||
</ListsTasksFIMofAllTrainees>
|
||||
Reference in New Issue
Block a user