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