Частичная отправка задач в Юнити

This commit is contained in:
2025-07-23 12:06:30 +03:00
parent fb80ef3de5
commit 93d68d8a07
5 changed files with 101 additions and 23 deletions

View File

@@ -14,7 +14,6 @@ kanban-plugin: board
## feature
- [ ] /RRJ-95NEW-100/tasksAMM.xml заменить получение на docs
- [ ] отправка таски поштучно, при обновления статуса (проверка и тд)
- [ ] регистрация времени включения и выключения тренажера (по приходу уходу пакета is unity) с регистрацие БД
- [ ] Подсчет учебного времени - дельта между включением и выключением
@@ -32,6 +31,7 @@ kanban-plugin: board
(от 18 фимов) или при кривом назначении задачи(назначить 2-3 подряд гуи перестает обновлятся)
- [ ] Убрать ошибки QObject::moveToThread: Cannot move objects with a parent
- [ ] /RRJ-95NEW-100/tasksAMM.xml заменить получение на docs
## backlog

View File

@@ -102,7 +102,7 @@ QByteArray DBAnswerParser::listClassrooms(bool result, QList<Classroom> *listCla
return QByteArray();
}
QByteArray DBAnswerParser::listTasksAMMofTrainee(bool result, QList<TaskAmmFim> *listTasks, int trainee_id)
QByteArray DBAnswerParser::listTasksAMMofTrainee(bool result, QList<TaskAmmFim> *listTasks, int trainee_id, bool full_list)
{
QDomDocument commonDOM;
if(! dataParser->loadBlankXML(":/resources/blankXML/ListTasksAMM.xml", &commonDOM))
@@ -110,6 +110,10 @@ QByteArray DBAnswerParser::listTasksAMMofTrainee(bool result, QList<TaskAmmFim>
QDomNode listNode = commonDOM.namedItem("ListTasksAMM");
listNode.toElement().setAttribute("trainee_id", QString::number(trainee_id));
if(full_list)
listNode.toElement().setAttribute("full_list", "true");
else
listNode.toElement().setAttribute("full_list", "false");
for(TaskAmmFim task : *listTasks)
{
@@ -127,7 +131,7 @@ QByteArray DBAnswerParser::listTasksAMMofTrainee(bool result, QList<TaskAmmFim>
return commonDOM.toByteArray();
}
QByteArray DBAnswerParser::listTasksFIMofTrainee(bool result, QList<TaskAmmFim> *listTasks, int trainee_id)
QByteArray DBAnswerParser::listTasksFIMofTrainee(bool result, QList<TaskAmmFim> *listTasks, int trainee_id, bool full_list)
{
QDomDocument commonDOM;
if(! dataParser->loadBlankXML(":/resources/blankXML/ListTasksFIM.xml", &commonDOM))
@@ -135,6 +139,10 @@ QByteArray DBAnswerParser::listTasksFIMofTrainee(bool result, QList<TaskAmmFim>
QDomNode listNode = commonDOM.namedItem("ListTasksFIM");
listNode.toElement().setAttribute("trainee_id", QString::number(trainee_id));
if(full_list)
listNode.toElement().setAttribute("full_list", "true");
else
listNode.toElement().setAttribute("full_list", "false");
for(TaskAmmFim task : *listTasks)
{

View File

@@ -19,8 +19,8 @@ public:
QByteArray listComputers(bool result, QList<Computer> *listComputers);
QByteArray listClassrooms(bool result, QList<Classroom> *listClassrooms);
QByteArray listTasksAMMofTrainee(bool result, QList<TaskAmmFim> *listTasks, int trainee_id);
QByteArray listTasksFIMofTrainee(bool result, QList<TaskAmmFim> *listTasks, int trainee_id);
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);
signals:
private:

View File

@@ -246,32 +246,40 @@ void ProcessingSystem::processingClientQueryToDB(ClientHandler *client, ClientQu
case TypeQueryToDB::TYPE_QUERY_ASSIGN_TASK_AMM_TO_TRAINEE:
{
if(int id_new = providerDBLMS->newTaskAMM(*(TaskAmmFim*)data, id))
int id_trainee = id;
if(int id_new = providerDBLMS->newTaskAMM(*(TaskAmmFim*)data, id_trainee))
{
//Отправка списка задач AMM всем клиентам GUI
//sendListTasksAMMofTraineetoClient(client, id);
emit sigStatusTasksAMMofTraineeChanged(id);
//sendListTasksAMMofTraineetoClient(client, id_trainee);
emit sigStatusTasksAMMofTraineeChanged(id_trainee);
//Отправка списка задач AMM клиенту Юнити
if(ClientHandler* clientUnity = getUnityClientById(id))
if(ClientHandler* clientUnity = getUnityClientById(id_trainee))
{//Есть такой
sendListTasksAMMofTraineetoClient(clientUnity, id);
//sendListTasksAMMofTraineetoClient(clientUnity, id_trainee);
QList<int> listID;
listID.append(id_new);
sendListTasksAMMofTraineeByIDtoClient(clientUnity, id_trainee, listID);
}
}
break;
}
case TypeQueryToDB::TYPE_QUERY_ASSIGN_TASK_FIM_TO_TRAINEE:
{
if(int id_new = providerDBLMS->newTaskFIM(*(TaskAmmFim*)data, id))
int id_trainee = id;
if(int id_new = providerDBLMS->newTaskFIM(*(TaskAmmFim*)data, id_trainee))
{
//Отправка списка задач FIM всем клиентам GUI
//sendListTasksFIMofTraineetoClient(client, id);
emit sigStatusTasksFIMofTraineeChanged(id);
//sendListTasksFIMofTraineetoClient(client, id_trainee);
emit sigStatusTasksFIMofTraineeChanged(id_trainee);
//Отправка списка задач FIM клиенту Юнити
if(ClientHandler* clientUnity = getUnityClientById(id))
if(ClientHandler* clientUnity = getUnityClientById(id_trainee))
{//Есть такой
sendListTasksFIMofTraineetoClient(clientUnity, id);
//sendListTasksFIMofTraineetoClient(clientUnity, id_trainee);
QList<int> listID;
listID.append(id_new);
sendListTasksFIMofTraineeByIDtoClient(clientUnity, id_trainee, listID);
}
}
break;
@@ -279,14 +287,16 @@ void ProcessingSystem::processingClientQueryToDB(ClientHandler *client, ClientQu
case TypeQueryToDB::TYPE_QUERY_GET_TASKS_AMM_FOR_TRAINEE:
{
int id_trainee = id;
//Отправка списка задач AMM клиенту GUI
sendListTasksAMMofTraineetoClient(client, id);
sendListTasksAMMofTraineetoClient(client, id_trainee);
break;
}
case TypeQueryToDB::TYPE_QUERY_GET_TASKS_FIM_FOR_TRAINEE:
{
int id_trainee = id;
//Отправка списка задач FIM клиенту GUI
sendListTasksFIMofTraineetoClient(client, id);
sendListTasksFIMofTraineetoClient(client, id_trainee);
break;
}
@@ -356,7 +366,10 @@ void ProcessingSystem::processingClientQueryToDB(ClientHandler *client, ClientQu
//Отправка списка задач AMM клиенту Юнити
if(ClientHandler* clientUnity = getUnityClientById(id_trainee))
{//Есть такой
sendListTasksAMMofTraineetoClient(clientUnity, id_trainee);
//sendListTasksAMMofTraineetoClient(clientUnity, id_trainee);
QList<int> listID;
listID.append(id);
sendListTasksAMMofTraineeByIDtoClient(clientUnity, id_trainee, listID);
}
}
break;
@@ -374,7 +387,10 @@ void ProcessingSystem::processingClientQueryToDB(ClientHandler *client, ClientQu
//Отправка списка задач FIM клиенту Юнити
if(ClientHandler* clientUnity = getUnityClientById(id_trainee))
{//Есть такой
sendListTasksFIMofTraineetoClient(clientUnity, id_trainee);
//sendListTasksFIMofTraineetoClient(clientUnity, id_trainee);
QList<int> listID;
listID.append(id);
sendListTasksFIMofTraineeByIDtoClient(clientUnity, id_trainee, listID);
}
}
break;
@@ -469,7 +485,7 @@ void ProcessingSystem::setCurrentDataInfo(DataInfo *dataInfo)
void ProcessingSystem::sendListTasksAMMofTraineetoClient(ClientHandler *client, int id_trainee)
{
QList<TaskAmmFim> listTasks = providerDBLMS->GetListTasksAMMofTrainee(id_trainee);
QByteArray arrayAnswer = dataParser->DbAnswer()->listTasksAMMofTrainee(true, &listTasks, id_trainee);
QByteArray arrayAnswer = dataParser->DbAnswer()->listTasksAMMofTrainee(true, &listTasks, id_trainee, true);
//client->sendXmlAnswer(arrayAnswer, PacketType::TYPE_XMLANSWER_QUERY_TASKS_AMM_OF_TRAINEE);
client->sendFileBlockByteArray(arrayAnswer, PacketType::TYPE_XMLANSWER_QUERY_TASKS_AMM_OF_TRAINEE);
}
@@ -477,7 +493,57 @@ void ProcessingSystem::sendListTasksAMMofTraineetoClient(ClientHandler *client,
void ProcessingSystem::sendListTasksFIMofTraineetoClient(ClientHandler *client, int id_trainee)
{
QList<TaskAmmFim> listTasks = providerDBLMS->GetListTasksFIMofTrainee(id_trainee);
QByteArray arrayAnswer = dataParser->DbAnswer()->listTasksFIMofTrainee(true, &listTasks, id_trainee);
QByteArray arrayAnswer = dataParser->DbAnswer()->listTasksFIMofTrainee(true, &listTasks, id_trainee, true);
//client->sendXmlAnswer(arrayAnswer, PacketType::TYPE_XMLANSWER_QUERY_TASKS_FIM_OF_TRAINEE);
client->sendFileBlockByteArray(arrayAnswer, PacketType::TYPE_XMLANSWER_QUERY_TASKS_FIM_OF_TRAINEE);
}
void ProcessingSystem::sendListTasksAMMofTraineeByIDtoClient(ClientHandler *client, int id_trainee, QList<int> listID)
{
QList<TaskAmmFim> listTasks = providerDBLMS->GetListTasksAMMofTrainee(id_trainee);
for(int i = 0; i < listTasks.count(); i++)
{
TaskAmmFim task = listTasks.at(i);
bool flNeed = false;
for(int id : listID)
{
if(id == task.getID())
{
flNeed = true;
break;
}
}
if(!flNeed)
listTasks.removeAt(i);
}
QByteArray arrayAnswer = dataParser->DbAnswer()->listTasksAMMofTrainee(true, &listTasks, id_trainee, false);
//client->sendXmlAnswer(arrayAnswer, PacketType::TYPE_XMLANSWER_QUERY_TASKS_AMM_OF_TRAINEE);
client->sendFileBlockByteArray(arrayAnswer, PacketType::TYPE_XMLANSWER_QUERY_TASKS_AMM_OF_TRAINEE);
}
void ProcessingSystem::sendListTasksFIMofTraineeByIDtoClient(ClientHandler *client, int id_trainee, QList<int> listID)
{
QList<TaskAmmFim> listTasks = providerDBLMS->GetListTasksFIMofTrainee(id_trainee);
for(int i = 0; i < listTasks.count(); i++)
{
TaskAmmFim task = listTasks.at(i);
bool flNeed = false;
for(int id : listID)
{
if(id == task.getID())
{
flNeed = true;
break;
}
}
if(!flNeed)
listTasks.removeAt(i);
}
QByteArray arrayAnswer = dataParser->DbAnswer()->listTasksFIMofTrainee(true, &listTasks, id_trainee, false);
//client->sendXmlAnswer(arrayAnswer, PacketType::TYPE_XMLANSWER_QUERY_TASKS_FIM_OF_TRAINEE);
client->sendFileBlockByteArray(arrayAnswer, PacketType::TYPE_XMLANSWER_QUERY_TASKS_FIM_OF_TRAINEE);
}
@@ -492,12 +558,12 @@ void ProcessingSystem::sendTaskListToUnity(ClientHandler *client)
//AMM
QList<TaskAmmFim> listTasksAMM = providerDBLMS->GetListTasksAMMofTrainee(id_trainee);
QByteArray arrayAnswerTasksAMM = dataParser->DbAnswer()->listTasksAMMofTrainee(true, &listTasksAMM, id_trainee);
QByteArray arrayAnswerTasksAMM = dataParser->DbAnswer()->listTasksAMMofTrainee(true, &listTasksAMM, id_trainee, true);
client->sendFileBlockByteArray(arrayAnswerTasksAMM, PacketType::TYPE_XMLANSWER_QUERY_TASKS_AMM_OF_TRAINEE);
//FIM
QList<TaskAmmFim> listTasksFIM = providerDBLMS->GetListTasksFIMofTrainee(id_trainee);
QByteArray arrayAnswerFIM = dataParser->DbAnswer()->listTasksFIMofTrainee(true, &listTasksFIM, id_trainee);
QByteArray arrayAnswerFIM = dataParser->DbAnswer()->listTasksFIMofTrainee(true, &listTasksFIM, id_trainee, true);
client->sendFileBlockByteArray(arrayAnswerFIM, PacketType::TYPE_XMLANSWER_QUERY_TASKS_FIM_OF_TRAINEE);
}
}

View File

@@ -42,6 +42,10 @@ public:
void sendListTasksAMMofTraineetoClient(ClientHandler* client, int id_trainee);
void sendListTasksFIMofTraineetoClient(ClientHandler* client, int id_trainee);
void sendListTasksAMMofTraineeByIDtoClient(ClientHandler* client, int id_trainee, QList<int> listID);
void sendListTasksFIMofTraineeByIDtoClient(ClientHandler* client, int id_trainee, QList<int> listID);
ClientHandler* getUnityClientById(int id);
signals:
void sigUpdateListClients();