DPS/DataPlatform/DataModelEventModule.cpp

448 lines
11 KiB
C++
Raw Normal View History

2025-06-23 10:41:33 +08:00
#pragma execution_character_set("utf-8")
#include <QDateTime>
#include <QCoreApplication>
#include <QFileDialog>
#include "DataModelEventModule.h"
#include "DataModelData.h"
#include "DataManager.h"
#include "ProjectData.h"
#include "DataAccessModule.h"
DataModelEventModule::DataModelEventModule(QObject* /*parent*/, DataManager* manager)
:BaseEventModule(manager, "DataModelListView")
{
addShareEventModule(new DataAccessModule(manager));
}
DataModelEventModule::~DataModelEventModule()
{
}
bool DataModelEventModule::onMessage(const std::string& eventName, json& parameter)
{
LOG(INFO) << CommonHelper::utf8ToStdString("DataModelEventModule receive message.......");
LOG(INFO) << eventName;
LOG(INFO) << CommonHelper::jsonToString(parameter);
TRY{
if (eventName == "get-project") {
//<2F><>ȡ<EFBFBD><C8A1>Ŀ<EFBFBD><C4BF>Ϣ
return getProject(parameter);
}
//else if (eventName == "get-project-datamodel")
//{
// return getAllDataModel(parameter);
//}
else if (eventName == "get-datamodel-by-identification")
{
return getDataModelByIdentification(parameter);
}
else if (eventName == "add-datamodel")
{
//<2F>½<EFBFBD><C2BD><EFBFBD><EFBFBD><EFBFBD>ģ<EFBFBD><C4A3>
return addDataModel(parameter);
}
else if (eventName == "has-datamodel-child")
{
return hasDatamodelChild(parameter);
}
else if (eventName == "save-datamodel")
{
//<2F>޸<EFBFBD><DEB8><EFBFBD><EFBFBD><EFBFBD>ģ<EFBFBD><C4A3>
return upateDataModel(parameter);
}
else if (eventName == "delete-datamodel")
{
//ɾ<><C9BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģ<EFBFBD><C4A3>
return deleteDataModel(parameter);
}
else if (eventName == "copy-datamodel")
{
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģ<EFBFBD><C4A3>
return copyDataModel(parameter);
}
else if (eventName == "add-datamodel-version")
{
//<2F><><EFBFBD><EFBFBD>ģ<EFBFBD><C4A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
return upgradeVersion(parameter);
}
else if (eventName == "create-instance")
{
//<2F><><EFBFBD><EFBFBD>ʵ<EFBFBD><CAB5><EFBFBD>ļ<EFBFBD>
return generateInstanceFile(parameter);
}
}
CATCH(parameter);
return EventModule::onMessage(eventName, parameter);
}
//////////////////////////////////////////////////////////////////////////
//<2F><><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA>Ϣ<EFBFBD><CFA2>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD>
bool DataModelEventModule::getProject(json& parameter)
{
//<2F><><EFBFBD>õ<EFBFBD>ǰ<EFBFBD><C7B0>Ŀid
auto data = parameter["data"];
int projectId = data["id"];
DPData* pData = pDataManager->findObjectById(DataManager::DataType::project, projectId);
ProjectData* pProject = dynamic_cast<ProjectData*>(pData);
if (pProject)
{
pProject->setCurrentProject();
json project;
pProject->toJson(project);
parameter["response"] = project;
}
else
{
parameter["error"] = "<EFBFBD>Ҳ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŀ";
}
LOG(INFO) << CommonHelper::utf8ToStdString("getProject Sendto web.......");
LOG(INFO) << CommonHelper::jsonToString(parameter);
return true;
}
///*<2A><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģ<EFBFBD><C4A3>*/
//bool DataModelEventModule::getAllDataModel(json& parameter)
//{
// //<2F><><EFBFBD>õ<EFBFBD>ǰ<EFBFBD><C7B0>Ŀid
// auto data = parameter["data"];
// int projectId = data["id"];
//
// DPData* pData = pDataManager->findObjectById(DataManager::DataType::project, projectId);
// ProjectData* pProject = dynamic_cast<ProjectData*>(pData);
//
// if (pProject)
// {
// //<2F>ҵ<EFBFBD><D2B5><EFBFBD><EFBFBD><EFBFBD>Ŀ
// if (!pProject->_initChildren)
// {
// pProject->getAllChildren(pDataManager);
// pProject->_initChildren = true;
// }
//
// if (pProject->_childrenMap.isEmpty())
// {
// parameter["error"] = "<22><><EFBFBD><EFBFBD>Ŀû<C4BF><C3BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģ<EFBFBD><C4A3>";
// LOG(INFO) << CommonHelper::utf8ToStdString("getAllDataModel Sendto web.......");
// LOG(INFO) << CommonHelper::jsonToString(parameter);
// return true;
// }
// //<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD>ݸ<EFBFBD>parameter<65><72><EFBFBD><EFBFBD><EFBFBD>ظ<EFBFBD><D8B8><EFBFBD><EFBFBD><EFBFBD>
// QMap<unsigned int, DPData*>::iterator it = pProject->_childrenMap.begin();
// while (it != pProject->_childrenMap.end())
// {
// DataModelData* pData = dynamic_cast<DataModelData*>(*it);
// //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣתjson
// if (pData) {
// json j;
// pData->toJson(j);
// parameter["response"].push_back(j);
// }
// it++;
// }
// }
// else
// {
// parameter["error"] = "<22>Ҳ<EFBFBD><D2B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŀ";
// }
//
// LOG(INFO) << CommonHelper::utf8ToStdString("getAllDataModel Sendto web.......");
// LOG(INFO) << CommonHelper::jsonToString(parameter);
//
// return true;
//}
/*<2A>½<EFBFBD><C2BD><EFBFBD><EFBFBD><EFBFBD>ģ<EFBFBD><C4A3>*/
bool DataModelEventModule::addDataModel(json& parameter)
{
//<2F><><EFBFBD>õ<EFBFBD>ǰ<EFBFBD><C7B0>Ŀid
auto data = parameter["data"];
auto projectId = data["parentid"];
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŀ,<2C>ϲ<EFBFBD><CFB2><EFBFBD><EFBFBD><EFBFBD>
DPData* pCurrentProject = pDataManager->findObjectById(DataManager::DataType::project, projectId);
if (!pCurrentProject) {
LOG(INFO) << CommonHelper::utf8ToStdString("addDataModel Sendto web.......");
parameter["error"] = "<EFBFBD>Ҳ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģ<EFBFBD>͵ĸ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŀ";
return true;
}
//<2F>½<EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>name type description
DataModelData* pNewData = new DataModelData();
//<2F><><EFBFBD><EFBFBD>name type des updateTime createTime
pNewData->setNewData(parameter);
//<2F><><EFBFBD><EFBFBD><EFBFBD>ϲ<EFBFBD><CFB2><EFBFBD><EFBFBD><EFBFBD>
pNewData->_parent = pCurrentProject;
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģ<EFBFBD><C4A3>
if (pCurrentProject->addChild(pNewData))
{
//<2F><><EFBFBD>ӵ<EFBFBD><D3B5><EFBFBD>map
pDataManager->insertDataMap(DataManager::DataType::dataModel, pNewData->_id, pNewData);
//<2F><><EFBFBD>½<EFBFBD><C2BD><EFBFBD><EFBFBD><EFBFBD>ģ<EFBFBD>ͳɹ<CDB3><C9B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD>½<EFBFBD><C2BD><EFBFBD><EFBFBD><EFBFBD>ģ<EFBFBD><C4A3><EFBFBD><EFBFBD>Ϣ<EFBFBD><CFA2><EFBFBD>ظ<EFBFBD>web<65><62>
pNewData->toJson(data);
parameter["response"] = data;
}
else
{
//ʧ<><CAA7>
delete pNewData;
pNewData = nullptr;
parameter["error"] = "<EFBFBD>½<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģ<EFBFBD><EFBFBD>ʧ<EFBFBD><EFBFBD>";
}
LOG(INFO) << CommonHelper::utf8ToStdString("addDataModel Sendto web.......");
LOG(INFO) << CommonHelper::jsonToString(parameter);
return true;
}
/*<2A>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD>²<EFBFBD><C2B2><EFBFBD><EFBFBD><EFBFBD>*/
bool DataModelEventModule::hasDatamodelChild(json& parameter)
{
auto data = parameter["data"];
auto dataModelId = data["id"];
DPData* pData = pDataManager->findObjectById(DataManager::DataType::dataModel, dataModelId);
if (!pData) {
LOG(INFO) << CommonHelper::utf8ToStdString("hasDatamodelChild Sendto web.......");
parameter["error"] = "<EFBFBD>Ҳ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģ<EFBFBD><EFBFBD>";
return true;
}
if (pData->_childrenMap.size() > 0)
{
parameter["response"]["status"] = true;
}
else
{
parameter["response"]["status"] = false;
}
LOG(INFO) << CommonHelper::utf8ToStdString("hasDatamodelChild Sendto web.......");
LOG(INFO) << CommonHelper::jsonToString(parameter);
return true;
}
/*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģ<EFBFBD><C4A3>*/
bool DataModelEventModule::upateDataModel(json& parameter)
{
QVariantMap valueMap;
//<2F>޸<EFBFBD>name type desciption
auto data = parameter["data"];
auto dataModelId = data["id"];
//<2F><><EFBFBD>ҵ<EFBFBD>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD>ģ<EFBFBD><C4A3>
DataModelData* pDataModel = (DataModelData*)pDataManager->findObjectById(DataManager::DataType::dataModel, dataModelId);
if (!pDataModel) {
LOG(INFO) << CommonHelper::utf8ToStdString("upateDataModel Sendto web.......");
parameter["error"] = "<EFBFBD>Ҳ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģ<EFBFBD><EFBFBD>";
return true;
}
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>޸<EFBFBD>
if (pDataModel->_isVerLocked)
{
parameter["error"] = "<EFBFBD>ð汾<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>޷<EFBFBD><EFBFBD>޸<EFBFBD>";
}
else
{
pDataModel->setEditData(parameter);
if (pDataModel->saveSelf())
{
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݳɹ<DDB3><C9B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ظ<EFBFBD>web<65>ˣ<EFBFBD><CBA3><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
data["updateTime"] = CommonHelper::qstringToUtf8(pDataModel->getUpdateTime());
parameter["response"] = data;
}
else
{
parameter["error"] = "<EFBFBD>޸<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģ<EFBFBD><EFBFBD>ʧ<EFBFBD><EFBFBD>";
}
}
LOG(INFO) << CommonHelper::utf8ToStdString("upateDataModel Sendto web.......");
LOG(INFO) << CommonHelper::jsonToString(parameter);
return true;
}
/*ɾ<><C9BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģ<EFBFBD><C4A3>*/
bool DataModelEventModule::deleteDataModel(json& parameter)
{
//<2F><><EFBFBD><EFBFBD>id
auto data = parameter["data"];
auto dataModelId = data["id"];
DPData* pData = pDataManager->findObjectById(DataManager::DataType::dataModel, dataModelId);
if (!pData) {
LOG(INFO) << CommonHelper::utf8ToStdString("deleteDataModel Sendto web.......");
parameter["error"] = "<EFBFBD>Ҳ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģ<EFBFBD><EFBFBD>";
return true;
}
if (pData->deleteSelf())
{
//<2F><><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD><EFBFBD>
pDataManager->deleteInDataMap(DataManager::DataType::dataModel, dataModelId);
delete pData;
pData = nullptr;
//ɾ<><C9BE><EFBFBD>ɹ<EFBFBD>
parameter["response"]["deleted"] = true;
}
else
{
parameter["response"]["deleted"] = false;
}
LOG(INFO) << CommonHelper::utf8ToStdString("deleteDataModel Sendto web.......");
LOG(INFO) << CommonHelper::jsonToString(parameter);
return true;
}
/*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģ<EFBFBD><C4A3>*/
bool DataModelEventModule::copyDataModel(json& parameter)
{
auto data = parameter["data"];
int srcDataModelId = data["id"];
//<2F><><EFBFBD><EFBFBD>ѡ<EFBFBD><D1A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģ<EFBFBD><C4A3>
DataModelData* pData = (DataModelData*)pDataManager->findObjectById(DataManager::DataType::dataModel, srcDataModelId);
if (pData)
{
DataModelData* pNewModel = new DataModelData();
if (pData->copyData(pNewModel, parameter))
{
pNewModel->_parent = pData->_parent;
pDataManager->insertDataMap(DataManager::DataType::dataModel, pNewModel->_id, pNewModel);
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģ<EFBFBD>ͷ<EFBFBD><CDB7>ظ<EFBFBD>web<65><62>
json j;
pNewModel->toJson(j);
parameter["response"] = j;
}
else
{
//ʧ<><CAA7>
delete pNewModel;
pNewModel = nullptr;
parameter["error"] = "<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģ<EFBFBD><EFBFBD>ʧ<EFBFBD><EFBFBD>";
}
}
LOG(INFO) << CommonHelper::utf8ToStdString("copyDataModel Sendto web.......");
LOG(INFO) << CommonHelper::jsonToString(parameter);
return true;
}
/*<2A><><EFBFBD><EFBFBD>ʵ<EFBFBD><CAB5><EFBFBD>ļ<EFBFBD>*/
bool DataModelEventModule::generateInstanceFile(json& parameter)
{
auto data = parameter["data"];
int srcDataModelId = data["id"];
//<2F><><EFBFBD><EFBFBD>ѡ<EFBFBD><D1A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģ<EFBFBD><C4A3>
DataModelData* pData = (DataModelData*)pDataManager->findObjectById(DataManager::DataType::dataModel, srcDataModelId);
QString msg;
try
{
if (pData)
{
if (!pData->createInstance(msg))
{
if (msg != "δѡ<EFBFBD><EFBFBD>ʵ<EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD>·<EFBFBD><EFBFBD>")
{
parameter["error"] = CommonHelper::qstringToUtf8(msg);
parameter["response"]["status"] = false;
}
}
else
{
parameter["response"]["status"] = true;
}
}
else
{
//δ<>ҵ<EFBFBD><D2B5><EFBFBD>ģ<EFBFBD><C4A3>
parameter["error"] = "δ<EFBFBD>ҵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģ<EFBFBD><EFBFBD>";
parameter["response"]["status"] = false;
}
}
catch (exception& e)
{
parameter["error"] = "<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʵ<EFBFBD><EFBFBD>ʧ<EFBFBD><EFBFBD>";
LOG(ERROR) << e.what();
return true;
}
LOG(INFO) << CommonHelper::utf8ToStdString("generateInstanceFile Sendto web.......");
LOG(INFO) << CommonHelper::jsonToString(parameter);
return true;
}
/*<2A><><EFBFBD><EFBFBD>ģ<EFBFBD><C4A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
bool DataModelEventModule::upgradeVersion(json& parameter)
{
auto data = parameter["data"];
int srcDataModelId = data["id"];
//<2F><><EFBFBD><EFBFBD>ѡ<EFBFBD><D1A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģ<EFBFBD><C4A3>
DataModelData* pData = qobject_cast<DataModelData*>(pDataManager->findObjectById(DataManager::DataType::dataModel, srcDataModelId));
if (pData)
{
DataModelData* pNewModel = new DataModelData();
if (pData->upgradeVersion(pNewModel))
{
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŀ
pNewModel->_parent = pData->_parent;
pData->_parent->_childrenMap.insert(pNewModel->_id, pNewModel);
pDataManager->insertDataMap(DataManager::DataType::dataModel, pNewModel->_id, pNewModel);
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģ<EFBFBD>ͷ<EFBFBD><CDB7>ظ<EFBFBD>web<65><62>
json j;
pNewModel->toJson(j);
parameter["response"] = j;
}
else
{
//<2F><><EFBFBD><EFBFBD>ʧ<EFBFBD><CAA7>
parameter["error"] = "<EFBFBD><EFBFBD>ģ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʧ<EFBFBD><EFBFBD>";
}
}
else
{
//δ<>ҵ<EFBFBD><D2B5><EFBFBD>ģ<EFBFBD><C4A3>
parameter["error"] = "δ<EFBFBD>ҵ<EFBFBD><EFBFBD><EFBFBD>ģ<EFBFBD><EFBFBD>";
}
LOG(INFO) << CommonHelper::utf8ToStdString("upgradeVersion Sendto web.......");
LOG(INFO) << CommonHelper::jsonToString(parameter);
return true;
}
bool DataModelEventModule::getDataModelByIdentification(json& parameter)
{
//<2F><>ȡ<EFBFBD><C8A1><EFBFBD>Ʊ<EFBFBD>ʶ<EFBFBD><CAB6>ͬ<EFBFBD><CDAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģ<EFBFBD><C4A3>
auto data = parameter["data"];
int projectId = data["id"];
ProjectData* pProject = qobject_cast<ProjectData*>(pDataManager->findObjectById(DataManager::DataType::project, projectId));
if (!pProject) {
LOG(INFO) << CommonHelper::utf8ToStdString("getDataModelByIdentification Sendto web.......");
parameter["error"] = "δ<EFBFBD>ҵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŀ";
return true;
}
QString name = CommonHelper::utf8ToQString(data["identification"]);
QList<DPData*> modelList;
pProject->findDatamodelByName(name, modelList);
parameter["response"] = json::array();
for (int i = 0; i < modelList.size(); i++)
{
json j;
qobject_cast<DataModelData*>(modelList.at(i))->toJson(j);
parameter["response"].push_back(j);
}
LOG(INFO) << CommonHelper::utf8ToStdString("getDataModelByIdentification Sendto web.......");
LOG(INFO) << CommonHelper::jsonToString(parameter);
return true;
}