mirror of
https://gitea.msk.dinamika-avia.ru/Constanta-Design/RRJServer.git
synced 2026-03-27 19:45:43 +03:00
Построение списков подпроцедур в Сервере работает
This commit is contained in:
@@ -56,7 +56,7 @@ void Module::setModeList(ModeList modeList)
|
|||||||
{
|
{
|
||||||
this->modeList = modeList;
|
this->modeList = modeList;
|
||||||
|
|
||||||
if(modeList.demo || modeList.train || modeList.exam || modeList.autoM)
|
if(modeList.demo || modeList.train || modeList.exam /*|| modeList.autoM*/)
|
||||||
setIsActiveTrue();
|
setIsActiveTrue();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -31,10 +31,10 @@ public:
|
|||||||
|
|
||||||
bool getIsActive();
|
bool getIsActive();
|
||||||
|
|
||||||
void setModeList(ModeList modeList);;
|
void setModeList(ModeList modeList);
|
||||||
ModeList getModeList(){return modeList;};
|
ModeList getModeList(){return modeList;}
|
||||||
|
|
||||||
protected:
|
private:
|
||||||
void setIsActiveTrue();
|
void setIsActiveTrue();
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
|||||||
@@ -16,17 +16,28 @@ DocsUpdater::~DocsUpdater()
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void DocsUpdater::lockAccessToDocs()
|
//PUBLIC
|
||||||
|
void DocsUpdater::lockAccessToDocsXML()
|
||||||
{
|
{
|
||||||
mtxAccess.lock();
|
mtxAccess.lock();
|
||||||
}
|
}
|
||||||
|
|
||||||
void DocsUpdater::unLockAccessToDocs()
|
void DocsUpdater::unLockAccessToDocsXML()
|
||||||
{
|
{
|
||||||
mtxAccess.unlock();
|
mtxAccess.unlock();
|
||||||
}
|
}
|
||||||
|
|
||||||
bool DocsUpdater::slot_update()
|
QList<SubProc> DocsUpdater::getListSubProcForDMcode(QString dmCode)
|
||||||
|
{
|
||||||
|
QMutexLocker locker(&mtxAccess);
|
||||||
|
|
||||||
|
if(!listSubProcMap.contains(dmCode))
|
||||||
|
return QList<SubProc>();
|
||||||
|
|
||||||
|
return listSubProcMap.value(dmCode);
|
||||||
|
}
|
||||||
|
|
||||||
|
bool DocsUpdater::updateDocsXML()
|
||||||
{
|
{
|
||||||
QMutexLocker locker(&mtxAccess);
|
QMutexLocker locker(&mtxAccess);
|
||||||
|
|
||||||
@@ -43,17 +54,41 @@ bool DocsUpdater::slot_update()
|
|||||||
|
|
||||||
deleteAllModulsAMM();
|
deleteAllModulsAMM();
|
||||||
listTasksAMM.clear();
|
listTasksAMM.clear();
|
||||||
subProcMap.clear();
|
|
||||||
|
listSubProcMap.clear();
|
||||||
|
DMmodulesMap.clear();
|
||||||
|
|
||||||
domElementParserAMM(manifestElement, nullptr);
|
domElementParserAMM(manifestElement, nullptr);
|
||||||
|
|
||||||
if(! Tools::saveDOMtoXML(pathDocsFile, &docTasksDOM))
|
if(! Tools::saveDOMtoXML(pathDocsFile, &docTasksDOM))
|
||||||
return false;
|
{
|
||||||
|
deleteAllModulsAMM();
|
||||||
|
listTasksAMM.clear();
|
||||||
|
|
||||||
|
listSubProcMap.clear();
|
||||||
|
DMmodulesMap.clear();
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
for(QList<SubProc> listSP : listSubProcMap)
|
||||||
|
{
|
||||||
|
for(SubProc sp : listSP)
|
||||||
|
{
|
||||||
|
QString dmCode = sp.dmCode;
|
||||||
|
DM* module = getDMmoduleByDMcode(dmCode);
|
||||||
|
if(module)
|
||||||
|
{
|
||||||
|
sp.modeList = module->getModeList();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
//emit signal_DocsChanged();
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//PRIVATE
|
||||||
void DocsUpdater::domElementParserAMM(QDomElement element, Module* moduleParent)
|
void DocsUpdater::domElementParserAMM(QDomElement element, Module* moduleParent)
|
||||||
{
|
{
|
||||||
QString name;
|
QString name;
|
||||||
@@ -69,7 +104,7 @@ void DocsUpdater::domElementParserAMM(QDomElement element, Module* moduleParent)
|
|||||||
|
|
||||||
do
|
do
|
||||||
{
|
{
|
||||||
name = childElement.nodeName();
|
name = childElement.nodeName();
|
||||||
|
|
||||||
QDomNamedNodeMap nodeMap = childElement.attributes();
|
QDomNamedNodeMap nodeMap = childElement.attributes();
|
||||||
|
|
||||||
@@ -119,6 +154,8 @@ void DocsUpdater::domElementParserAMM(QDomElement element, Module* moduleParent)
|
|||||||
PM* PMmodulParent = static_cast<PM*>(moduleParent);
|
PM* PMmodulParent = static_cast<PM*>(moduleParent);
|
||||||
PMmodulParent->addChildModule(module);
|
PMmodulParent->addChildModule(module);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
DMmodulesMap.insert(DMmodul->dmCode(), DMmodul);
|
||||||
}
|
}
|
||||||
else if(name == "rus" || name == "eng")
|
else if(name == "rus" || name == "eng")
|
||||||
{
|
{
|
||||||
@@ -145,20 +182,6 @@ void DocsUpdater::domElementParserAMM(QDomElement element, Module* moduleParent)
|
|||||||
nodeMap.namedItem("bookmark").nodeValue(),
|
nodeMap.namedItem("bookmark").nodeValue(),
|
||||||
nodeMap.namedItem("xml").nodeValue());
|
nodeMap.namedItem("xml").nodeValue());
|
||||||
|
|
||||||
//Активность
|
|
||||||
//QString canplay = nodeMap.namedItem("canplay").nodeValue();
|
|
||||||
|
|
||||||
|
|
||||||
//Обновление Активности и построение списка подпроцедур 1го уровня
|
|
||||||
/*
|
|
||||||
QString dmCode = DMmodulParent->dmCode();
|
|
||||||
|
|
||||||
QString canplay = defineCanplayByScenXML(dmCode);
|
|
||||||
|
|
||||||
DMmodulParent->setModeList(parseCanplay(canplay));
|
|
||||||
nodeMap.namedItem("canplay").setNodeValue(canplay);
|
|
||||||
*/
|
|
||||||
|
|
||||||
QString dmCode = DMmodulParent->dmCode();
|
QString dmCode = DMmodulParent->dmCode();
|
||||||
QString canplay = "";
|
QString canplay = "";
|
||||||
QList<SubProc> listSubProc;
|
QList<SubProc> listSubProc;
|
||||||
@@ -167,7 +190,7 @@ void DocsUpdater::domElementParserAMM(QDomElement element, Module* moduleParent)
|
|||||||
DMmodulParent->setModeList(parseCanplay(canplay));
|
DMmodulParent->setModeList(parseCanplay(canplay));
|
||||||
nodeMap.namedItem("canplay").setNodeValue(canplay);
|
nodeMap.namedItem("canplay").setNodeValue(canplay);
|
||||||
|
|
||||||
subProcMap.insert(dmCode, listSubProc);
|
listSubProcMap.insert(dmCode, listSubProc);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@@ -262,6 +285,7 @@ bool DocsUpdater::processingScenXML(const QString dmCode, QString &canplay, QLis
|
|||||||
{
|
{
|
||||||
listSubProc.clear();
|
listSubProc.clear();
|
||||||
|
|
||||||
|
ModeList modeList;
|
||||||
canplay = "";
|
canplay = "";
|
||||||
QString signDemo = "-";
|
QString signDemo = "-";
|
||||||
QString signTrain = "-";
|
QString signTrain = "-";
|
||||||
@@ -286,7 +310,10 @@ bool DocsUpdater::processingScenXML(const QString dmCode, QString &canplay, QLis
|
|||||||
{
|
{
|
||||||
//canplay
|
//canplay
|
||||||
if(demoElement.toElement().attribute("canplay") == "True")
|
if(demoElement.toElement().attribute("canplay") == "True")
|
||||||
|
{
|
||||||
signDemo = "+";
|
signDemo = "+";
|
||||||
|
modeList.demo = true;
|
||||||
|
}
|
||||||
|
|
||||||
//subProc
|
//subProc
|
||||||
selectSubProc(demoElement, listSubProc);
|
selectSubProc(demoElement, listSubProc);
|
||||||
@@ -297,7 +324,10 @@ bool DocsUpdater::processingScenXML(const QString dmCode, QString &canplay, QLis
|
|||||||
{
|
{
|
||||||
//canplay
|
//canplay
|
||||||
if(trainElement.toElement().attribute("canplay") == "True")
|
if(trainElement.toElement().attribute("canplay") == "True")
|
||||||
|
{
|
||||||
signTrain = "+";
|
signTrain = "+";
|
||||||
|
modeList.train = true;
|
||||||
|
}
|
||||||
|
|
||||||
//subProc
|
//subProc
|
||||||
selectSubProc(trainElement, listSubProc);
|
selectSubProc(trainElement, listSubProc);
|
||||||
@@ -308,7 +338,10 @@ bool DocsUpdater::processingScenXML(const QString dmCode, QString &canplay, QLis
|
|||||||
{
|
{
|
||||||
//canplay
|
//canplay
|
||||||
if(examElement.toElement().attribute("canplay") == "True")
|
if(examElement.toElement().attribute("canplay") == "True")
|
||||||
|
{
|
||||||
signExam = "+";
|
signExam = "+";
|
||||||
|
modeList.exam = true;
|
||||||
|
}
|
||||||
|
|
||||||
//subProc
|
//subProc
|
||||||
selectSubProc(examElement, listSubProc);
|
selectSubProc(examElement, listSubProc);
|
||||||
@@ -319,7 +352,10 @@ bool DocsUpdater::processingScenXML(const QString dmCode, QString &canplay, QLis
|
|||||||
{
|
{
|
||||||
//canplay
|
//canplay
|
||||||
if(autoElement.toElement().attribute("canplay") == "True")
|
if(autoElement.toElement().attribute("canplay") == "True")
|
||||||
|
{
|
||||||
signAuto = "+";
|
signAuto = "+";
|
||||||
|
modeList.autoM = true;
|
||||||
|
}
|
||||||
|
|
||||||
//subProc
|
//subProc
|
||||||
//Из этого режима не берем!
|
//Из этого режима не берем!
|
||||||
@@ -350,3 +386,11 @@ void DocsUpdater::selectSubProc(QDomElement &modeElement, QList<SubProc> &listSu
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
DM *DocsUpdater::getDMmoduleByDMcode(QString dmCode)
|
||||||
|
{
|
||||||
|
if(!DMmodulesMap.contains(dmCode))
|
||||||
|
return nullptr;
|
||||||
|
|
||||||
|
return DMmodulesMap.value(dmCode);
|
||||||
|
}
|
||||||
|
|||||||
@@ -9,6 +9,8 @@ struct SubProc
|
|||||||
{
|
{
|
||||||
QString dmCode;
|
QString dmCode;
|
||||||
QString title;
|
QString title;
|
||||||
|
|
||||||
|
ModeList modeList;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
@@ -20,30 +22,33 @@ public:
|
|||||||
DocsUpdater(UpdateController* updateController, QObject *parent = nullptr);
|
DocsUpdater(UpdateController* updateController, QObject *parent = nullptr);
|
||||||
~DocsUpdater();
|
~DocsUpdater();
|
||||||
public:
|
public:
|
||||||
void lockAccessToDocs();
|
void lockAccessToDocsXML();
|
||||||
void unLockAccessToDocs();
|
void unLockAccessToDocsXML();
|
||||||
|
|
||||||
public slots:
|
QList<SubProc> getListSubProcForDMcode(QString dmCode);
|
||||||
bool slot_update();
|
|
||||||
|
bool updateDocsXML();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void domElementParserAMM(QDomElement element, Module* moduleParent);
|
void domElementParserAMM(QDomElement element, Module* moduleParent);
|
||||||
void deleteAllModulsAMM();
|
void deleteAllModulsAMM();
|
||||||
ModeList parseCanplay(QString canplay);
|
ModeList parseCanplay(QString canplay);
|
||||||
|
|
||||||
bool processingScenXML(const QString dmCode, QString& canplay, QList<SubProc>& listSubProc);
|
bool processingScenXML(const QString dmCode, QString& canplay, QList<SubProc>& listSubProc);
|
||||||
|
|
||||||
void selectSubProc(QDomElement& modeElement, QList<SubProc>& listSubProc);
|
void selectSubProc(QDomElement& modeElement, QList<SubProc>& listSubProc);
|
||||||
|
DM* getDMmoduleByDMcode(QString dmCode);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
UpdateController* updateController;
|
UpdateController* updateController;
|
||||||
|
|
||||||
QMutex mtxAccess;
|
QMutex mtxAccess;
|
||||||
|
|
||||||
bool flagStop;
|
bool flagStop;
|
||||||
QList<Module*> listAllModulesAMM; //?
|
QList<Module*> listAllModulesAMM; //?
|
||||||
QList<TaskAmmFim> listTasksAMM; //?
|
QList<TaskAmmFim> listTasksAMM; //?
|
||||||
|
|
||||||
QMap<QString, QList<SubProc>> subProcMap;
|
QMap<QString, DM*> DMmodulesMap; //общий (линейный) словарь всех DM-модулей
|
||||||
|
|
||||||
|
QMap<QString, QList<SubProc>> listSubProcMap; //словарь подпроцедур для всех DM-модулей
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // DOCSUPDATER_H
|
#endif // DOCSUPDATER_H
|
||||||
|
|||||||
@@ -516,10 +516,10 @@ void ProcessingSystem::processingClientQueryTasksXML(ClientHandler *client, Clie
|
|||||||
{
|
{
|
||||||
nameFile = tasksAMMfileName;
|
nameFile = tasksAMMfileName;
|
||||||
pathFile = updateController->getPathAdditionalFile(nameFile);
|
pathFile = updateController->getPathAdditionalFile(nameFile);
|
||||||
docsUpdater->lockAccessToDocs();
|
docsUpdater->lockAccessToDocsXML();
|
||||||
client->sendFileBlock(pathFile);
|
client->sendFileBlock(pathFile);
|
||||||
client->sendPacketType(PacketType::TYPE_XMLANSWER_QUERY_TASKS_XML_AMM);
|
client->sendPacketType(PacketType::TYPE_XMLANSWER_QUERY_TASKS_XML_AMM);
|
||||||
docsUpdater->unLockAccessToDocs();
|
docsUpdater->unLockAccessToDocsXML();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -118,8 +118,10 @@ void ServerLMSWidget::slot_ErrorPostgreSQL(QString text)
|
|||||||
void ServerLMSWidget::slot_UpdateDocs()
|
void ServerLMSWidget::slot_UpdateDocs()
|
||||||
{
|
{
|
||||||
QApplication::setOverrideCursor(Qt::WaitCursor);
|
QApplication::setOverrideCursor(Qt::WaitCursor);
|
||||||
emit signal_DocsUpdaterUpdate();
|
|
||||||
emit signal_DocsChanged();
|
if(docsUpdater->updateDocsXML())
|
||||||
|
emit signal_DocsChanged();
|
||||||
|
|
||||||
QApplication::restoreOverrideCursor();
|
QApplication::restoreOverrideCursor();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -302,7 +304,6 @@ void ServerLMSWidget::startInitialization()
|
|||||||
updateController->moveToThread(updateThread);
|
updateController->moveToThread(updateThread);
|
||||||
|
|
||||||
docsUpdater = new DocsUpdater(updateController, this);
|
docsUpdater = new DocsUpdater(updateController, this);
|
||||||
connect(this, &ServerLMSWidget::signal_DocsUpdaterUpdate, docsUpdater, &DocsUpdater::slot_update,Qt::DirectConnection);
|
|
||||||
|
|
||||||
processingSystem = new ProcessingSystem(providerDBLMS, updateController, docsUpdater);
|
processingSystem = new ProcessingSystem(providerDBLMS, updateController, docsUpdater);
|
||||||
|
|
||||||
|
|||||||
@@ -78,8 +78,6 @@ signals:
|
|||||||
void sigUpdateController(CommonClientHandler* commonClientHandler,DataParser *dataParser,AssetsManager *assetManager);
|
void sigUpdateController(CommonClientHandler* commonClientHandler,DataParser *dataParser,AssetsManager *assetManager);
|
||||||
QTcpSocket* sigGetSocket();
|
QTcpSocket* sigGetSocket();
|
||||||
|
|
||||||
void signal_DocsUpdaterUpdate();
|
|
||||||
|
|
||||||
void signal_DocsChanged();
|
void signal_DocsChanged();
|
||||||
|
|
||||||
public slots:
|
public slots:
|
||||||
|
|||||||
Reference in New Issue
Block a user