Построение списков подпроцедур в Сервере работает

This commit is contained in:
2025-11-13 14:34:39 +03:00
parent 4bfd4dad82
commit a6bee48b77
7 changed files with 89 additions and 41 deletions

View File

@@ -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);
}

View File

@@ -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

View File

@@ -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();
}
}

View File

@@ -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);

View File

@@ -78,8 +78,6 @@ signals:
void sigUpdateController(CommonClientHandler* commonClientHandler,DataParser *dataParser,AssetsManager *assetManager);
QTcpSocket* sigGetSocket();
void signal_DocsUpdaterUpdate();
void signal_DocsChanged();
public slots: