DPS/DataPlatform/DataModelEventModule.cpp

448 lines
12 KiB
C++
Raw Permalink 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") {
2025-06-23 18:01:09 +08:00
//获取项目信息
2025-06-23 10:41:33 +08:00
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")
{
2025-06-23 18:01:09 +08:00
//新建数据模型
2025-06-23 10:41:33 +08:00
return addDataModel(parameter);
}
else if (eventName == "has-datamodel-child")
{
return hasDatamodelChild(parameter);
}
else if (eventName == "save-datamodel")
{
2025-06-23 18:01:09 +08:00
//修改数据模型
2025-06-23 10:41:33 +08:00
return upateDataModel(parameter);
}
else if (eventName == "delete-datamodel")
{
2025-06-23 18:01:09 +08:00
//删除数据模型
2025-06-23 10:41:33 +08:00
return deleteDataModel(parameter);
}
else if (eventName == "copy-datamodel")
{
2025-06-23 18:01:09 +08:00
//复制数据模型
2025-06-23 10:41:33 +08:00
return copyDataModel(parameter);
}
else if (eventName == "add-datamodel-version")
{
2025-06-23 18:01:09 +08:00
//数据模型升版
2025-06-23 10:41:33 +08:00
return upgradeVersion(parameter);
}
else if (eventName == "create-instance")
{
2025-06-23 18:01:09 +08:00
//生成实例文件
2025-06-23 10:41:33 +08:00
return generateInstanceFile(parameter);
}
}
CATCH(parameter);
return EventModule::onMessage(eventName, parameter);
}
//////////////////////////////////////////////////////////////////////////
2025-06-23 18:01:09 +08:00
//以下为消息响应函数
2025-06-23 10:41:33 +08:00
bool DataModelEventModule::getProject(json& parameter)
{
2025-06-23 18:01:09 +08:00
//获得当前项目id
2025-06-23 10:41:33 +08:00
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
{
2025-06-23 18:01:09 +08:00
parameter["error"] = "找不到该项目";
2025-06-23 10:41:33 +08:00
}
LOG(INFO) << CommonHelper::utf8ToStdString("getProject Sendto web.......");
LOG(INFO) << CommonHelper::jsonToString(parameter);
return true;
}
2025-06-23 18:01:09 +08:00
///*获取所有数据模型*/
2025-06-23 10:41:33 +08:00
//bool DataModelEventModule::getAllDataModel(json& parameter)
//{
2025-06-23 18:01:09 +08:00
// //获得当前项目id
2025-06-23 10:41:33 +08:00
// auto data = parameter["data"];
// int projectId = data["id"];
//
// DPData* pData = pDataManager->findObjectById(DataManager::DataType::project, projectId);
// ProjectData* pProject = dynamic_cast<ProjectData*>(pData);
//
// if (pProject)
// {
2025-06-23 18:01:09 +08:00
// //找到该项目
2025-06-23 10:41:33 +08:00
// if (!pProject->_initChildren)
// {
// pProject->getAllChildren(pDataManager);
// pProject->_initChildren = true;
// }
//
// if (pProject->_childrenMap.isEmpty())
// {
2025-06-23 18:01:09 +08:00
// parameter["error"] = "该项目没有数据模型";
2025-06-23 10:41:33 +08:00
// LOG(INFO) << CommonHelper::utf8ToStdString("getAllDataModel Sendto web.......");
// LOG(INFO) << CommonHelper::jsonToString(parameter);
// return true;
// }
2025-06-23 18:01:09 +08:00
// //读取的数据给parameter返回给界面
2025-06-23 10:41:33 +08:00
// QMap<unsigned int, DPData*>::iterator it = pProject->_childrenMap.begin();
// while (it != pProject->_childrenMap.end())
// {
// DataModelData* pData = dynamic_cast<DataModelData*>(*it);
2025-06-23 18:01:09 +08:00
// //将对象信息转json
2025-06-23 10:41:33 +08:00
// if (pData) {
// json j;
// pData->toJson(j);
// parameter["response"].push_back(j);
// }
// it++;
// }
// }
// else
// {
2025-06-23 18:01:09 +08:00
// parameter["error"] = "找不到该项目";
2025-06-23 10:41:33 +08:00
// }
//
// LOG(INFO) << CommonHelper::utf8ToStdString("getAllDataModel Sendto web.......");
// LOG(INFO) << CommonHelper::jsonToString(parameter);
//
// return true;
//}
2025-06-23 18:01:09 +08:00
/*新建数据模型*/
2025-06-23 10:41:33 +08:00
bool DataModelEventModule::addDataModel(json& parameter)
{
2025-06-23 18:01:09 +08:00
//获得当前项目id
2025-06-23 10:41:33 +08:00
auto data = parameter["data"];
auto projectId = data["parentid"];
2025-06-23 18:01:09 +08:00
//查找项目,上层对象
2025-06-23 10:41:33 +08:00
DPData* pCurrentProject = pDataManager->findObjectById(DataManager::DataType::project, projectId);
if (!pCurrentProject) {
LOG(INFO) << CommonHelper::utf8ToStdString("addDataModel Sendto web.......");
2025-06-23 18:01:09 +08:00
parameter["error"] = "找不到数据模型的父类项目";
2025-06-23 10:41:33 +08:00
return true;
}
2025-06-23 18:01:09 +08:00
//新建时输入name type description
2025-06-23 10:41:33 +08:00
DataModelData* pNewData = new DataModelData();
2025-06-23 18:01:09 +08:00
//设置name type des updateTime createTime
2025-06-23 10:41:33 +08:00
pNewData->setNewData(parameter);
2025-06-23 18:01:09 +08:00
//设置上层数据
2025-06-23 10:41:33 +08:00
pNewData->_parent = pCurrentProject;
2025-06-23 18:01:09 +08:00
//添加数据模型
2025-06-23 10:41:33 +08:00
if (pCurrentProject->addChild(pNewData))
{
2025-06-23 18:01:09 +08:00
//添加到总map
2025-06-23 10:41:33 +08:00
pDataManager->insertDataMap(DataManager::DataType::dataModel, pNewData->_id, pNewData);
2025-06-23 18:01:09 +08:00
//若新建数据模型成功将新建数据模型信息返回给web端
2025-06-23 10:41:33 +08:00
pNewData->toJson(data);
parameter["response"] = data;
}
else
{
2025-06-23 18:01:09 +08:00
//失败
2025-06-23 10:41:33 +08:00
delete pNewData;
pNewData = nullptr;
2025-06-23 18:01:09 +08:00
parameter["error"] = "新建数据模型失败";
2025-06-23 10:41:33 +08:00
}
LOG(INFO) << CommonHelper::utf8ToStdString("addDataModel Sendto web.......");
LOG(INFO) << CommonHelper::jsonToString(parameter);
return true;
}
2025-06-23 18:01:09 +08:00
/*是否有下层数据*/
2025-06-23 10:41:33 +08:00
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.......");
2025-06-23 18:01:09 +08:00
parameter["error"] = "找不到该数据模型";
2025-06-23 10:41:33 +08:00
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;
}
2025-06-23 18:01:09 +08:00
/*更新数据模型*/
2025-06-23 10:41:33 +08:00
bool DataModelEventModule::upateDataModel(json& parameter)
{
QVariantMap valueMap;
2025-06-23 18:01:09 +08:00
//修改name type desciption
2025-06-23 10:41:33 +08:00
auto data = parameter["data"];
auto dataModelId = data["id"];
2025-06-23 18:01:09 +08:00
//查找当前数据模型
2025-06-23 10:41:33 +08:00
DataModelData* pDataModel = (DataModelData*)pDataManager->findObjectById(DataManager::DataType::dataModel, dataModelId);
if (!pDataModel) {
LOG(INFO) << CommonHelper::utf8ToStdString("upateDataModel Sendto web.......");
2025-06-23 18:01:09 +08:00
parameter["error"] = "找不到该数据模型";
2025-06-23 10:41:33 +08:00
return true;
}
2025-06-23 18:01:09 +08:00
//如果锁定,则不能修改
2025-06-23 10:41:33 +08:00
if (pDataModel->_isVerLocked)
{
2025-06-23 18:01:09 +08:00
parameter["error"] = "该版本已锁定,无法修改";
2025-06-23 10:41:33 +08:00
}
else
{
pDataModel->setEditData(parameter);
if (pDataModel->saveSelf())
{
2025-06-23 18:01:09 +08:00
//更新数据成功返回给web端更新时间
2025-06-23 10:41:33 +08:00
data["updateTime"] = CommonHelper::qstringToUtf8(pDataModel->getUpdateTime());
parameter["response"] = data;
}
else
{
2025-06-23 18:01:09 +08:00
parameter["error"] = "修改数据模型失败";
2025-06-23 10:41:33 +08:00
}
}
LOG(INFO) << CommonHelper::utf8ToStdString("upateDataModel Sendto web.......");
LOG(INFO) << CommonHelper::jsonToString(parameter);
return true;
}
2025-06-23 18:01:09 +08:00
/*删除数据模型*/
2025-06-23 10:41:33 +08:00
bool DataModelEventModule::deleteDataModel(json& parameter)
{
2025-06-23 18:01:09 +08:00
//获得id
2025-06-23 10:41:33 +08:00
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.......");
2025-06-23 18:01:09 +08:00
parameter["error"] = "找不到该数据模型";
2025-06-23 10:41:33 +08:00
return true;
}
if (pData->deleteSelf())
{
2025-06-23 18:01:09 +08:00
//更新内存数据
2025-06-23 10:41:33 +08:00
pDataManager->deleteInDataMap(DataManager::DataType::dataModel, dataModelId);
delete pData;
pData = nullptr;
2025-06-23 18:01:09 +08:00
//删除成功
2025-06-23 10:41:33 +08:00
parameter["response"]["deleted"] = true;
}
else
{
parameter["response"]["deleted"] = false;
}
LOG(INFO) << CommonHelper::utf8ToStdString("deleteDataModel Sendto web.......");
LOG(INFO) << CommonHelper::jsonToString(parameter);
return true;
}
2025-06-23 18:01:09 +08:00
/*复制数据模型*/
2025-06-23 10:41:33 +08:00
bool DataModelEventModule::copyDataModel(json& parameter)
{
auto data = parameter["data"];
int srcDataModelId = data["id"];
2025-06-23 18:01:09 +08:00
//查找选定的数据模型
2025-06-23 10:41:33 +08:00
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);
2025-06-23 18:01:09 +08:00
//将新数据模型返回给web端
2025-06-23 10:41:33 +08:00
json j;
pNewModel->toJson(j);
parameter["response"] = j;
}
else
{
2025-06-23 18:01:09 +08:00
//失败
2025-06-23 10:41:33 +08:00
delete pNewModel;
pNewModel = nullptr;
2025-06-23 18:01:09 +08:00
parameter["error"] = "复制数据模型失败";
2025-06-23 10:41:33 +08:00
}
}
LOG(INFO) << CommonHelper::utf8ToStdString("copyDataModel Sendto web.......");
LOG(INFO) << CommonHelper::jsonToString(parameter);
return true;
}
2025-06-23 18:01:09 +08:00
/*生成实例文件*/
2025-06-23 10:41:33 +08:00
bool DataModelEventModule::generateInstanceFile(json& parameter)
{
auto data = parameter["data"];
int srcDataModelId = data["id"];
2025-06-23 18:01:09 +08:00
//查找选定的数据模型
2025-06-23 10:41:33 +08:00
DataModelData* pData = (DataModelData*)pDataManager->findObjectById(DataManager::DataType::dataModel, srcDataModelId);
QString msg;
try
{
if (pData)
{
if (!pData->createInstance(msg))
{
2025-06-23 18:01:09 +08:00
if (msg != "未选择实例文件路径")
2025-06-23 10:41:33 +08:00
{
parameter["error"] = CommonHelper::qstringToUtf8(msg);
parameter["response"]["status"] = false;
}
}
else
{
parameter["response"]["status"] = true;
}
}
else
{
2025-06-23 18:01:09 +08:00
//未找到该模型
parameter["error"] = "未找到该数据模型";
2025-06-23 10:41:33 +08:00
parameter["response"]["status"] = false;
}
}
catch (exception& e)
{
2025-06-23 18:01:09 +08:00
parameter["error"] = "创建实例失败";
2025-06-23 10:41:33 +08:00
LOG(ERROR) << e.what();
return true;
}
LOG(INFO) << CommonHelper::utf8ToStdString("generateInstanceFile Sendto web.......");
LOG(INFO) << CommonHelper::jsonToString(parameter);
return true;
}
2025-06-23 18:01:09 +08:00
/*数据模型升版*/
2025-06-23 10:41:33 +08:00
bool DataModelEventModule::upgradeVersion(json& parameter)
{
auto data = parameter["data"];
int srcDataModelId = data["id"];
2025-06-23 18:01:09 +08:00
//查找选定的数据模型
2025-06-23 10:41:33 +08:00
DataModelData* pData = qobject_cast<DataModelData*>(pDataManager->findObjectById(DataManager::DataType::dataModel, srcDataModelId));
if (pData)
{
DataModelData* pNewModel = new DataModelData();
if (pData->upgradeVersion(pNewModel))
{
2025-06-23 18:01:09 +08:00
//加入所属项目
2025-06-23 10:41:33 +08:00
pNewModel->_parent = pData->_parent;
pData->_parent->_childrenMap.insert(pNewModel->_id, pNewModel);
pDataManager->insertDataMap(DataManager::DataType::dataModel, pNewModel->_id, pNewModel);
2025-06-23 18:01:09 +08:00
//将新数据模型返回给web端
2025-06-23 10:41:33 +08:00
json j;
pNewModel->toJson(j);
parameter["response"] = j;
}
else
{
2025-06-23 18:01:09 +08:00
//升版失败
parameter["error"] = "该模型升版失败";
2025-06-23 10:41:33 +08:00
}
}
else
{
2025-06-23 18:01:09 +08:00
//未找到该模型
parameter["error"] = "未找到该模型";
2025-06-23 10:41:33 +08:00
}
LOG(INFO) << CommonHelper::utf8ToStdString("upgradeVersion Sendto web.......");
LOG(INFO) << CommonHelper::jsonToString(parameter);
return true;
}
bool DataModelEventModule::getDataModelByIdentification(json& parameter)
{
2025-06-23 18:01:09 +08:00
//获取名称标识相同的数据模型
2025-06-23 10:41:33 +08:00
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.......");
2025-06-23 18:01:09 +08:00
parameter["error"] = "未找到该项目";
2025-06-23 10:41:33 +08:00
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;
}