DPS/DataPlatform/DataPackEventModule.cpp

1047 lines
27 KiB
C++
Raw Normal View History

2025-06-23 10:41:33 +08:00
#pragma execution_character_set("utf-8")
#include <QFileDialog>
#include <QCoreApplication>
#include <QProcess>
#include "DataPackEventModule.h"
#include "DataManager.h"
#include "DataModelData.h"
#include "DataPack.h"
#include "DataClass.h"
#include "DataAttribute.h"
#include "global.h"
#include "DataAccessModule.h"
#include "TransformExcel.h"
#include "global.h"
#include "SceneInfo.h"
#include "common.h"
#include "QWaiting.h"
#include "Session.h"
#include "mainwindow.h"
DataPackEventModule::DataPackEventModule(QObject* /*parent*/, DataManager* manager)
:BaseEventModule(manager, "DataModelGraphView")
{
addShareEventModule(new DataAccessModule(pDataManager));
}
DataPackEventModule::~DataPackEventModule()
{
}
bool DataPackEventModule::onMessage(const std::string& eventName, json& parameter)
{
LOG(INFO) << CommonHelper::utf8ToStdString("DataPackEventModule receive message.......");
LOG(INFO) << eventName;
LOG(INFO) << CommonHelper::jsonToString(parameter);
TRY{
if (eventName == "add-datamodule-child")
{
2025-06-23 18:01:09 +08:00
//批量移入移出数据模块、数据类
2025-06-23 10:41:33 +08:00
return moveDataPackOrClass(parameter);
}
else if (eventName == "create-relationship")
{
2025-06-23 18:01:09 +08:00
//建立数据关系
2025-06-23 10:41:33 +08:00
return buildDataRelationship(parameter);
}
else if (eventName == "delete-relationship")
{
2025-06-23 18:01:09 +08:00
//删除数据关系
2025-06-23 10:41:33 +08:00
return deleteDataRelationship(parameter);
}
else if (eventName == "add-datamodule")
{
2025-06-23 18:01:09 +08:00
//新建数据类模块
2025-06-23 10:41:33 +08:00
return addDataPack(parameter);
}
else if (eventName == "delete-datamodule")
{
2025-06-23 18:01:09 +08:00
//删除数据类模块
2025-06-23 10:41:33 +08:00
return deleteDataPack(parameter);
}
else if (eventName == "save-datamodule")
{
2025-06-23 18:01:09 +08:00
//编辑数据类模块
2025-06-23 10:41:33 +08:00
return updateDataPack(parameter);
}
if (eventName == "add-dataclass")
{
2025-06-23 18:01:09 +08:00
//新建数据类
2025-06-23 10:41:33 +08:00
return addDataClass(parameter);
}
else if (eventName == "delete-dataclass")
{
2025-06-23 18:01:09 +08:00
//删除数据类
2025-06-23 10:41:33 +08:00
return deleteDataClass(parameter);
}
else if (eventName == "save-dataclass")
{
2025-06-23 18:01:09 +08:00
//修改数据类
2025-06-23 10:41:33 +08:00
return updateDataClass(parameter);
}
else if (eventName == "add-dataclass-attribute")
{
2025-06-23 18:01:09 +08:00
//新建数据属性-复制属性
2025-06-23 10:41:33 +08:00
return addDataClassAttribute(parameter);
}
else if (eventName == "delete-classattribute")
{
2025-06-23 18:01:09 +08:00
//删除数据属性
2025-06-23 10:41:33 +08:00
return deleteDataClassAttribute(parameter);
}
else if (eventName == "save-dataclass-attribute")
{
2025-06-23 18:01:09 +08:00
//修改数据属性
2025-06-23 10:41:33 +08:00
return updateDataClassAttribute(parameter);
2025-06-23 18:01:09 +08:00
} //以下为数据字典相关消息事件
2025-06-23 10:41:33 +08:00
else if (eventName == "get-datadictionary-data")
{
2025-06-23 18:01:09 +08:00
//数据字典显示,返回实例数据
2025-06-23 10:41:33 +08:00
return getDictionaryData(parameter);
}
else if (eventName == "import-datadictionary")
{
2025-06-23 18:01:09 +08:00
//导入数据字典类
2025-06-23 10:41:33 +08:00
return importDictionary(parameter);
}
else if (eventName == "export-template")
{
2025-06-23 18:01:09 +08:00
//生成导入表模板
2025-06-23 10:41:33 +08:00
return exportTemplate(parameter);
}
else if (eventName == "export-datadictionary")
{
2025-06-23 18:01:09 +08:00
//导出数据字典类
2025-06-23 10:41:33 +08:00
return exportDictionary(parameter);
}
else if (eventName == "import-datamodel")
{
2025-06-23 18:01:09 +08:00
//数据模型导入
2025-06-23 10:41:33 +08:00
return importDataModel(parameter);
}
else if (eventName == "export-datamodel")
{
2025-06-23 18:01:09 +08:00
//数据模型导出
2025-06-23 10:41:33 +08:00
return exportDataModel(parameter);
}
else if (eventName == "add-scenenode")
{
2025-06-23 18:01:09 +08:00
//增加场景
2025-06-23 10:41:33 +08:00
return addSceneNode(parameter);
}
else if (eventName == "get-datamodel-scene")
{
2025-06-23 18:01:09 +08:00
//获取场景数据
2025-06-23 10:41:33 +08:00
return getSceneNode(parameter);
}
else if (eventName == "delete-scenenode")
{
2025-06-23 18:01:09 +08:00
//删除场景
2025-06-23 10:41:33 +08:00
return deleteScene(parameter);
}
else if (eventName == "move-scense-node")
{
return updateScene(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 DataPackEventModule::moveDataPackOrClass(json& parameter)
{
auto data = parameter["data"];
2025-06-23 18:01:09 +08:00
int dataId = data["id"];//数据模块或数据类id
// int newPackId = data["parentid"];//新的数据模块id
2025-06-23 10:41:33 +08:00
int classType = data["classType"];
if (classType == g_TYPE_DATAPACK)
{
2025-06-23 18:01:09 +08:00
//数据模块
2025-06-23 10:41:33 +08:00
DPData* pData = pDataManager->findObjectById(DataManager::DataType::dataPack, dataId);
DataPack* pPack = qobject_cast<DataPack*>(pData);
if (pPack && pPack->moveData(parameter, pDataManager))
{
2025-06-23 18:01:09 +08:00
// id 数据模块或数据类ID
// classType 模块类型1为模块2为数据类
// parentid 新的数据模块ID
// oldparentid 原有的数据模块ID
2025-06-23 10:41:33 +08:00
2025-06-23 18:01:09 +08:00
//移出移入成功
2025-06-23 10:41:33 +08:00
data["id"] = dataId;
data["classType"] = g_TYPE_DATAPACK;
data["parentid"] = data["parentid"];
data["oldparentid"] = pData->_parent->_id;
parameter["response"] = data;
}
else
{
2025-06-23 18:01:09 +08:00
//移出移入失败
parameter["error"] = "移入移出操作失败";
2025-06-23 10:41:33 +08:00
}
}
else if (classType == g_TYPE_DATACLASS)
{
2025-06-23 18:01:09 +08:00
//数据类
2025-06-23 10:41:33 +08:00
DPData* pData = pDataManager->findObjectById(DataManager::DataType::dataClass, dataId);
DataClass* pClass = qobject_cast<DataClass*>(pData);
if (pData && pClass->moveData(parameter, pDataManager))
{
2025-06-23 18:01:09 +08:00
//成功
2025-06-23 10:41:33 +08:00
data["id"] = dataId;
data["classType"] = g_TYPE_DATACLASS;
data["parentid"] = data["parentid"];
data["oldparentid"] = pData->_parent->_id;
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("moveDataPackOrClass 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 DataPackEventModule::addDataPack(json& parameter)
{
auto data = parameter["data"];
2025-06-23 18:01:09 +08:00
int parentId = data["parentid"]; //上层id
2025-06-23 10:41:33 +08:00
int classType = data["classType"];
DataPack* pNewPack = new DataPack();
pNewPack->setNewData(parameter);
2025-06-23 18:01:09 +08:00
//名称合法性判断
2025-06-23 10:41:33 +08:00
QString msg;
if ( pNewPack->checkNameillegal(msg))
{
delete pNewPack;
pNewPack = nullptr;
parameter["error"] = CommonHelper::qstringToUtf8(msg);
}
else
{
DPData* pParent = nullptr;
if (classType == g_TYPE_DATAMODEL)
{
2025-06-23 18:01:09 +08:00
//在数据模型下直接建
2025-06-23 10:41:33 +08:00
pParent = pDataManager->findObjectById(DataManager::DataType::dataModel, parentId);
}
else if (classType == g_TYPE_DATAPACK)
{
2025-06-23 18:01:09 +08:00
//在数据模块下建子模块
2025-06-23 10:41:33 +08:00
pParent = pDataManager->findObjectById(DataManager::DataType::dataPack, parentId);
2025-06-23 18:01:09 +08:00
//设置子模块信息
2025-06-23 10:41:33 +08:00
pNewPack->_bIsChildPack = true;
}
if (pParent)
{
2025-06-23 18:01:09 +08:00
pNewPack->_parent = pParent; //设置上层对象
2025-06-23 10:41:33 +08:00
if (pParent->addChild(pNewPack))
{
2025-06-23 18:01:09 +08:00
//添加到map
2025-06-23 10:41:33 +08:00
pDataManager->insertDataMap(DataManager::DataType::dataPack, pNewPack->_id, pNewPack);
json j;
pNewPack->toJson(j);
parameter["response"] = j;
}
else
{
delete pNewPack;
pNewPack = nullptr;
2025-06-23 18:01:09 +08:00
parameter["error"] = "新建模块失败";
2025-06-23 10:41:33 +08:00
}
}
else {
delete pNewPack;
pNewPack = nullptr;
2025-06-23 18:01:09 +08:00
parameter["error"] = "查找模块父类失败";
2025-06-23 10:41:33 +08:00
}
}
LOG(INFO) << CommonHelper::utf8ToStdString("addDataPack Sendto web.......");
LOG(INFO) << CommonHelper::jsonToString(parameter);
return true;
}
bool DataPackEventModule::deleteDataPack(json& parameter)
{
2025-06-23 18:01:09 +08:00
//获得id
2025-06-23 10:41:33 +08:00
auto data = parameter["data"];
auto dataPackId = data["id"];
QString result;
DataPack* pData = qobject_cast<DataPack*>(pDataManager->findObjectById(DataManager::DataType::dataPack, dataPackId));
if (pData && pData->deleteSelf(result))
{
2025-06-23 18:01:09 +08:00
//更新总map
2025-06-23 10:41:33 +08:00
pDataManager->deleteInDataMap(DataManager::DataType::dataPack, dataPackId);
delete pData;
pData = nullptr;
2025-06-23 18:01:09 +08:00
//删除成功,返回
2025-06-23 10:41:33 +08:00
// parameter["response"] = json::array();
//
// if (!result.isEmpty())
// {
// QStringList typeIdlist = result.split("#");
// for (int i = 0; i < typeIdlist.size(); i++)
// {
// QString typeId = typeIdlist.at(i);
// int pos = typeId.indexOf(",");
// int type = typeId.left(pos).toInt();
// int id = typeId.right(typeId.size() - 1 - pos).toInt();
// json j;
// j["id"] = id;
// j["classType"] = type;
// parameter["response"].push_back(j);
// }
// }
parameter["response"]["status"] = true;
}
else
{
2025-06-23 18:01:09 +08:00
//如保提示删除模块失败?
2025-06-23 10:41:33 +08:00
parameter["response"]["status"] = false;
}
LOG(INFO) << CommonHelper::utf8ToStdString("deleteDataPack Sendto web.......");
LOG(INFO) << CommonHelper::jsonToString(parameter);
return true;
}
bool DataPackEventModule::updateDataPack(json& parameter)
{
2025-06-23 18:01:09 +08:00
//修改name type desciption 是否生成数据表
2025-06-23 10:41:33 +08:00
auto data = parameter["data"];
auto dataPackId = data["id"];
2025-06-23 18:01:09 +08:00
//查找当前数据类模块
2025-06-23 10:41:33 +08:00
DPData* pDataPack = pDataManager->findObjectById(DataManager::DataType::dataPack, dataPackId);
if (pDataPack) {
pDataPack->setNewData(parameter);
if (pDataPack->saveSelf())
{
2025-06-23 18:01:09 +08:00
//更新数据成功返回给web端
2025-06-23 10:41:33 +08:00
json j;
pDataPack->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("deleteDataPack 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 DataPackEventModule::getDataClass(json& parameter)
{
auto data = parameter["data"];
int id = data["id"];
DPData* pData = pDataManager->findObjectById(DataManager::DataType::dataClass, id);
if (pData)
{
json j;
pData->toJson(j);
parameter["response"] = j;
}
else
{
2025-06-23 18:01:09 +08:00
parameter["error"] = "该数据类不存在";
2025-06-23 10:41:33 +08:00
}
LOG(INFO) << CommonHelper::utf8ToStdString("getDataClass Sendto web.......");
LOG(INFO) << CommonHelper::jsonToString(parameter);
return true;
}
bool DataPackEventModule::addDataClass(json& parameter)
{
const int COMMON_CLASS = 1;
DataClass* pNewDataClass = new DataClass();
auto data = parameter["data"];
2025-06-23 18:01:09 +08:00
auto parentId = data["parentid"]; //上层id
2025-06-23 10:41:33 +08:00
pNewDataClass->setNewData(parameter);
pNewDataClass->reName();
QString errMsg;
2025-06-23 18:01:09 +08:00
//判断名称标识合法性
2025-06-23 10:41:33 +08:00
if (!pNewDataClass->checkNameSize(3, 128, errMsg) || !pNewDataClass->checkLetter(errMsg,2))
{
delete pNewDataClass;
pNewDataClass = nullptr;
parameter["error"] = CommonHelper::qstringToUtf8(errMsg);
}
else
{
2025-06-23 18:01:09 +08:00
pNewDataClass->_type = COMMON_CLASS;//普通数据类
//查找当前父模块
2025-06-23 10:41:33 +08:00
DPData* pData = pDataManager->findObjectById(DataManager::DataType::dataPack, parentId);
2025-06-23 18:01:09 +08:00
pNewDataClass->_parent = pData; //设置上层对象
2025-06-23 10:41:33 +08:00
if (pData && pData->addChild(pNewDataClass))
{
2025-06-23 18:01:09 +08:00
//添加到总map
2025-06-23 10:41:33 +08:00
pDataManager->insertDataMap(DataManager::DataType::dataClass, pNewDataClass->_id, pNewDataClass);
json j;
pNewDataClass->toJson(j);
parameter["response"] = j;
}
else
{
delete pNewDataClass;
pNewDataClass = nullptr;
2025-06-23 18:01:09 +08:00
parameter["error"] = "新建数据类失败";
2025-06-23 10:41:33 +08:00
}
}
LOG(INFO) << CommonHelper::utf8ToStdString("addDataClass Sendto web.......");
LOG(INFO) << CommonHelper::jsonToString(parameter);
return true;
}
bool DataPackEventModule::deleteDataClass(json& parameter)
{
2025-06-23 18:01:09 +08:00
//获得id
2025-06-23 10:41:33 +08:00
auto data = parameter["data"];
int dataClassID = data["id"];
QString result;
DataClass* pClass = qobject_cast<DataClass*>(pDataManager->findObjectById(DataManager::DataType::dataClass, dataClassID));
if (!pClass)
{
2025-06-23 18:01:09 +08:00
parameter["error"] = "数据类不存在";
2025-06-23 10:41:33 +08:00
LOG(INFO) << CommonHelper::utf8ToStdString("deleteDataClass Sendto web.......");
LOG(INFO) << CommonHelper::jsonToString(parameter);
return true;
}
if (pClass->deleteFromModel(result))
{
delete pClass;
pClass = nullptr;
parameter["response"] = json::array();
if (!result.isEmpty())
{
QStringList typeIdlist = result.split("#");
for (int i = 0; i < typeIdlist.size(); i++)
{
QString typeId = typeIdlist.at(i);
int pos = typeId.indexOf(",");
int type = typeId.left(pos).toInt();
int id = typeId.right(typeId.size() - 1 - pos).toInt();
json j;
j["id"] = id;
j["classType"] = type;
parameter["response"].push_back(j);
}
}
}
else
{
parameter["response"]["status"] = false;
}
LOG(INFO) << CommonHelper::utf8ToStdString("deleteDataClass Sendto web.......");
LOG(INFO) << CommonHelper::jsonToString(parameter);
return true;
}
bool DataPackEventModule::updateDataClass(json& parameter)
{
auto data = parameter["data"];
auto dataClassId = data["id"];
2025-06-23 18:01:09 +08:00
//查找当前数据类
2025-06-23 10:41:33 +08:00
DPData* pDataClass = pDataManager->findObjectById(DataManager::DataType::dataClass, dataClassId);
if (pDataClass) {
pDataClass->setNewData(parameter);
if (pDataClass->saveSelf())
{
2025-06-23 18:01:09 +08:00
//更新数据成功返回给web端
2025-06-23 10:41:33 +08:00
parameter["response"] = data;
}
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("updateDataClass 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 DataPackEventModule::buildDataRelationship(json& parameter)
{
bool status = false;
auto data = parameter["data"];
2025-06-23 18:01:09 +08:00
int type = data["type"];//关系类型
int mainClassId = data["id1"]; //主数据类
int subClassId = data["id2"]; // 关联数据类
2025-06-23 10:41:33 +08:00
DataClass* pNewRelationClass;
QString nameFlag1 = CommonHelper::utf8ToQString(data["crname1"]);
QString nameFlag2 = CommonHelper::utf8ToQString(data["crname2"]);
DPData* pClass1 = pDataManager->findObjectById(DataManager::DataType::dataClass, mainClassId);
DPData* pClass2 = pDataManager->findObjectById(DataManager::DataType::dataClass, subClassId);
status = DataClass::buildRelationship(pClass1, pClass2, nameFlag1, nameFlag2, type, pNewRelationClass);
if (type == RELATION_MN)
{
json j;
pNewRelationClass->toJson(j, true);
parameter["response"] = j;
}
else
{
if (status == true)
{
parameter["response"]["status"] = status;
}
else
{
2025-06-23 18:01:09 +08:00
parameter["error"] = "建立数据关系失败";
2025-06-23 10:41:33 +08:00
}
}
LOG(INFO) << CommonHelper::utf8ToStdString("buildDataRelationship Sendto web.......");
LOG(INFO) << CommonHelper::jsonToString(parameter);
return true;
}
bool DataPackEventModule::deleteDataRelationship(json& parameter)
{
auto data = parameter["data"];
int classId1 = data["id1"];
int classId2 = data["id2"];
QString result;
DPData* pClass1 = pDataManager->findObjectById(DataManager::DataType::dataClass, classId1);
DPData* pClass2 = pDataManager->findObjectById(DataManager::DataType::dataClass, classId2);
bool status = DataClass::deleteRelationship(pClass1, pClass2, result);
parameter["response"] = json::array();
if (!result.isEmpty())
{
QStringList typeIdlist = result.split("#");
for (int i = 0; i < typeIdlist.size(); i++)
{
QString typeId = typeIdlist.at(i);
int pos = typeId.indexOf(",");
int type = typeId.left(pos).toInt();
int id = typeId.right(typeId.size() - 1 - pos).toInt();
json j;
j["id"] = id;
j["classType"] = type;
parameter["response"].push_back(j);
}
}
LOG(INFO) << CommonHelper::utf8ToStdString("deleteDataRelationship 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 DataPackEventModule::addDataClassAttribute(json& parameter)
{
auto data = parameter["data"];
2025-06-23 18:01:09 +08:00
int parentId = data["parentid"]; //上层id
//先判断输入属性名称标识是否合理
2025-06-23 10:41:33 +08:00
QString name = CommonHelper::utf8ToQString(data["name"]);
QString errMsg;
DataAttribute* pNewDataAttribute = new DataAttribute();
pNewDataAttribute->setNewData(parameter);
pNewDataAttribute->reName();
if ( !pNewDataAttribute->checkNameSize(2,128,errMsg) || !pNewDataAttribute->checkLetter(errMsg,1) || pNewDataAttribute->illegalName(errMsg))
{
2025-06-23 18:01:09 +08:00
//名称标识不合法
2025-06-23 10:41:33 +08:00
parameter["error"] = CommonHelper::qstringToUtf8(errMsg);
delete pNewDataAttribute;
pNewDataAttribute = nullptr;
}
else
{
2025-06-23 18:01:09 +08:00
//查找当前父模块
2025-06-23 10:41:33 +08:00
DPData* pData = pDataManager->findObjectById(DataManager::DataType::dataClass, parentId);
2025-06-23 18:01:09 +08:00
pNewDataAttribute->_parent = pData; //设置上层对象
2025-06-23 10:41:33 +08:00
if (pData && pData->addChild(pNewDataAttribute))
{
2025-06-23 18:01:09 +08:00
//添加到总map
2025-06-23 10:41:33 +08:00
pDataManager->insertDataMap(DataManager::DataType::dataAttribute, pNewDataAttribute->_id, pNewDataAttribute);
json j;
pNewDataAttribute->toJson(j);
parameter["response"] = j;
}
else
{
delete pNewDataAttribute;
pNewDataAttribute = nullptr;
2025-06-23 18:01:09 +08:00
parameter["error"] = "新建数据类属性失败";
2025-06-23 10:41:33 +08:00
}
}
LOG(INFO) << CommonHelper::utf8ToStdString("addDataClassAttribute Sendto web.......");
LOG(INFO) << CommonHelper::jsonToString(parameter);
return true;
}
bool DataPackEventModule::deleteDataClassAttribute(json& parameter)
{
2025-06-23 18:01:09 +08:00
//获得id
2025-06-23 10:41:33 +08:00
auto data = parameter["data"];
auto dataAttributeID = data["id"];
DPData* pDataClassAttribute = pDataManager->findObjectById(DataManager::DataType::dataAttribute, dataAttributeID);
if (pDataClassAttribute && pDataClassAttribute->deleteSelf())
{
2025-06-23 18:01:09 +08:00
//删除成功
2025-06-23 10:41:33 +08:00
delete pDataClassAttribute;
pDataClassAttribute = nullptr;
2025-06-23 18:01:09 +08:00
//删除成功
2025-06-23 10:41:33 +08:00
parameter["response"]["status"] = true;
}
else
{
2025-06-23 18:01:09 +08:00
//失败
2025-06-23 10:41:33 +08:00
parameter["response"]["status"] = false;
}
LOG(INFO) << CommonHelper::utf8ToStdString("deleteDataClassAttribute Sendto web.......");
LOG(INFO) << CommonHelper::jsonToString(parameter);
return true;
}
bool DataPackEventModule::updateDataClassAttribute(json& parameter)
{
auto data = parameter["data"];
auto dataAttributeId = data["id"];
2025-06-23 18:01:09 +08:00
//查找当前数据类属性
2025-06-23 10:41:33 +08:00
DPData* pDataAttribute = pDataManager->findObjectById(DataManager::DataType::dataAttribute, dataAttributeId);
if (pDataAttribute) {
pDataAttribute->setNewData(parameter);
if (pDataAttribute->saveSelf())
{
2025-06-23 18:01:09 +08:00
//更新数据成功返回给web端
2025-06-23 10:41:33 +08:00
parameter["response"] = data;
}
else
{
2025-06-23 18:01:09 +08:00
//失败
2025-06-23 10:41:33 +08:00
parameter["response"]["status"] = false;
}
}
else {
2025-06-23 18:01:09 +08:00
parameter["error"] = "查询数据类失败";
2025-06-23 10:41:33 +08:00
}
LOG(INFO) << CommonHelper::utf8ToStdString("updateDataClassAttribute Sendto web.......");
LOG(INFO) << CommonHelper::jsonToString(parameter);
return true;
}
bool DataPackEventModule::importDictionary(json& parameter)
{
auto data = parameter["data"];
int id = data["id"];
2025-06-23 18:01:09 +08:00
//查找数据类
2025-06-23 10:41:33 +08:00
DataClass* pDataClass = qobject_cast<DataClass*>(pDataManager->findObjectById(DataManager::DataType::dataClass, id));
QString ret;
if (pDataClass)
{
if (pDataClass->importDict(ret))
{
parameter["response"]["status"] = true;
}
else
{
parameter["error"] = CommonHelper::qstringToUtf8(ret);
}
}
else
{
2025-06-23 18:01:09 +08:00
parameter["error"] = "查询数据类失败";
2025-06-23 10:41:33 +08:00
}
LOG(INFO) << CommonHelper::utf8ToStdString("importDictionary Sendto web.......");
LOG(INFO) << CommonHelper::jsonToString(parameter);
return true;
}
bool DataPackEventModule::exportTemplate(json& parameter)
{
auto data = parameter["data"];
int id = data["id"];
2025-06-23 18:01:09 +08:00
//查找数据类
2025-06-23 10:41:33 +08:00
DataClass* pDataClass = qobject_cast<DataClass*>(pDataManager->findObjectById(DataManager::DataType::dataClass, id));
try
{
if (!pDataClass)
2025-06-23 18:01:09 +08:00
throw exception("查询数据类失败");
2025-06-23 10:41:33 +08:00
int ret = pDataClass->exportTemplate();
if (ret == 0)
{
parameter["response"]["status"] = true;
}
else if (ret == 1)
{
parameter["response"]["status"] = false;
}
}
catch (exception& e)
{
parameter["error"] = e.what();
LOG(ERROR) << e.what();
}
LOG(INFO) << CommonHelper::utf8ToStdString("exportTemplate Sendto web.......");
LOG(INFO) << CommonHelper::jsonToString(parameter);
return true;
}
bool DataPackEventModule::exportDictionary(json& parameter)
{
auto data = parameter["data"];
int id = data["id"];
2025-06-23 18:01:09 +08:00
//查找数据类
2025-06-23 10:41:33 +08:00
DataClass* pDataClass = qobject_cast<DataClass*>(pDataManager->findObjectById(DataManager::DataType::dataClass, id));
try
{
if (!pDataClass)
2025-06-23 18:01:09 +08:00
throw exception("查询数据类失败");
2025-06-23 10:41:33 +08:00
parameter["response"]["status"] = pDataClass->exportDict();
}
catch (exception& e)
{
LOG(ERROR) << e.what();
}
LOG(INFO) << CommonHelper::utf8ToStdString("exportDictionary Sendto web.......");
LOG(INFO) << CommonHelper::jsonToString(parameter);
return true;
}
bool DataPackEventModule::getDictionaryData(json& parameter)
{
auto data = parameter["data"];
int id = data["id"];
2025-06-23 18:01:09 +08:00
//查找数据类
2025-06-23 10:41:33 +08:00
DataClass* pDataClass = qobject_cast<DataClass*>(pDataManager->findObjectById(DataManager::DataType::dataClass, id));
if (pDataClass) {
json j;
pDataClass->dictToJson(j);
parameter["response"] = j;
}
else {
2025-06-23 18:01:09 +08:00
parameter["error"] = "查询数据类失败";
2025-06-23 10:41:33 +08:00
}
2025-06-23 18:01:09 +08:00
//获取数据字典类的信息
2025-06-23 10:41:33 +08:00
LOG(INFO) << CommonHelper::utf8ToStdString("getDictionaryData 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 DataPackEventModule::importDataModel(json& parameter)
{
auto data = parameter["data"];
int dataModelId = data["id"];
TransformExcel transform(pDataManager, dataModelId);
// DataModelData* pModel = qobject_cast<DataModelData*>(pDataManager->findObjectById(DataManager::DataType::dataModel, dataModelId));
2025-06-23 18:01:09 +08:00
// int curProjectId = pModel->_parent->_id; //当前项目id
2025-06-23 10:41:33 +08:00
QString curPath = QCoreApplication::applicationDirPath();
2025-06-23 18:01:09 +08:00
QString selectDir = QFileDialog::getOpenFileName(nullptr, "选择导入文件", "", "*.xlsx");
2025-06-23 10:41:33 +08:00
QString errMsg;
if (!selectDir.isEmpty())
{
try
{
transform.openFile(selectDir);
2025-06-23 18:01:09 +08:00
QWaiting waiting(Session::getSession()->parent(), "模型导入中...");
2025-06-23 10:41:33 +08:00
if (waiting.working(std::bind(&TransformExcel::importData, &transform, std::ref(errMsg))))
{
parameter["response"]["status"] = true;
}
else
{
2025-06-23 18:01:09 +08:00
if (errMsg == "数据回滚失败,重启程序")
2025-06-23 10:41:33 +08:00
{
// CommonHelper::message(errMsg,2);
qApp->quit();
QProcess::startDetached(qApp->applicationFilePath());
}
2025-06-23 18:01:09 +08:00
else if( errMsg == "模型导入失败") {
//重新获取一次数据模型数据
2025-06-23 10:41:33 +08:00
DataModelData* pModel = qobject_cast<DataModelData*>(pDataManager->findObjectById(DataManager::DataType::dataModel, dataModelId));
if (pModel) {
pModel->getAllChildren(pDataManager, true);
pModel->_initChildren = true;
}
}
parameter["error"] = CommonHelper::qstringToUtf8(errMsg);
}
}
catch (exception& e)
{
LOG(ERROR) << e.what();
LOG(ERROR) << CommonHelper::utf8ToStdString("DataPackEventModule::importDataModel catch exception");
}
}
LOG(INFO) << CommonHelper::utf8ToStdString("importDataModel 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 DataPackEventModule::exportDataModel(json& parameter)
{
TransformExcel transform(pDataManager, 0);
2025-06-23 18:01:09 +08:00
QString file = QFileDialog::getSaveFileName(nullptr, tr("保存导出文件"), "", tr("*.xlsx"));
2025-06-23 10:41:33 +08:00
if (!file.isEmpty())
{
QFileInfo exportFile(file);
if (exportFile.isFile())
{
if (!transform.openFile(file))
{
2025-06-23 18:01:09 +08:00
//如打开文件失败,直接返回
parameter["error"] = "打开文件失败";
2025-06-23 10:41:33 +08:00
LOG(INFO) << CommonHelper::utf8ToStdString("exportDataModel Sendto web.......");
LOG(INFO) << CommonHelper::jsonToString(parameter);
return true;
}
}
2025-06-23 18:01:09 +08:00
QWaiting waiting(Session::getSession()->parent(), "模型导出中...");
2025-06-23 10:41:33 +08:00
if (waiting.working(std::bind(&TransformExcel::exportData, &transform, std::ref(parameter))))
{
parameter["response"]["status"] = true;
}
else
{
2025-06-23 18:01:09 +08:00
parameter["error"] = "导出数据模型失败";
2025-06-23 10:41:33 +08:00
}
transform.closeFile(file);
}
LOG(INFO) << CommonHelper::utf8ToStdString("exportDataModel 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 DataPackEventModule::addSceneNode(json& parameter)
{
auto data = parameter["data"];
2025-06-23 18:01:09 +08:00
int parentType = data["parentClassType"]; //父类型
int parentId = data["parentid"]; //父id
2025-06-23 10:41:33 +08:00
SceneInfo* pNewScene = new SceneInfo;
pNewScene->setNewData(parameter);
DPData* pdata = nullptr;
2025-06-23 18:01:09 +08:00
//查找要在哪个数据模块(类)下添加
2025-06-23 10:41:33 +08:00
if (parentType == g_TYPE_DATACLASS)
{
pdata = pDataManager->findObjectById(DataManager::DataType::dataClass, parentId);
}
else if (parentType == g_TYPE_DATAPACK)
{
pdata = pDataManager->findObjectById(DataManager::DataType::dataPack, parentId);
}
if (!pdata)
{
delete pNewScene;
pNewScene = nullptr;
2025-06-23 18:01:09 +08:00
parameter["error"] = "父数据模块(数据类)查找失败";
2025-06-23 10:41:33 +08:00
LOG(INFO) << CommonHelper::utf8ToStdString("addSceneNode Sendto web.......");
LOG(INFO) << CommonHelper::jsonToString(parameter);
return true;
}
if (pdata->addScene(pNewScene))
{
pNewScene->_parent = pdata;
pDataManager->insertDataMap(DataManager::DataType::scene, pNewScene->_id, pNewScene);
2025-06-23 18:01:09 +08:00
//添加场景成功
2025-06-23 10:41:33 +08:00
json j;
pNewScene->toJson(j);
parameter["response"] = j;
}
else
{
2025-06-23 18:01:09 +08:00
//添加场景失败
2025-06-23 10:41:33 +08:00
delete pNewScene;
pNewScene = nullptr;
parameter["response"] = { {"status",false} };
}
LOG(INFO) << CommonHelper::utf8ToStdString("addSceneNode 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 DataPackEventModule::deleteScene(json& parameter)
{
auto data = parameter["data"];
int id = data["id"];
SceneInfo* pScene = qobject_cast<SceneInfo*>(pDataManager->findObjectById(DataManager::DataType::scene, id));
if (pScene)
{
if (pScene->deleteSelf())
{
2025-06-23 18:01:09 +08:00
//所属于模块或类的场景map中删除
2025-06-23 10:41:33 +08:00
DPData* pParent = pScene->_parent;
pParent->deleteScene(id);
pDataManager->deleteInDataMap(DataManager::DataType::scene, id);
delete pScene;
pScene = nullptr;
parameter["response"] = { {"status",true} };
}
else
{
2025-06-23 18:01:09 +08:00
//删除失败
2025-06-23 10:41:33 +08:00
parameter["response"] = { {"status",false} };
}
}
else
{
LOG(INFO) << CommonHelper::utf8ToStdString("serch sceneInfo in scenemap failed");
}
LOG(INFO) << CommonHelper::utf8ToStdString("deleteScene Sendto web.......");
LOG(INFO) << CommonHelper::jsonToString(parameter);
return true;
}
bool DataPackEventModule::getSceneNode(json& parameter)
{
auto data = parameter["data"];
2025-06-23 18:01:09 +08:00
int modelid = data["modelid"];//数据模块或数据类id
2025-06-23 10:41:33 +08:00
int classType = data["modelClassType"];
QMap<int, SceneInfo*>::iterator it;
parameter["response"] = json::array();
if (classType == g_TYPE_DATACLASS)
{
DataClass* pClass = qobject_cast<DataClass*>(pDataManager->findObjectById(DataManager::DataType::dataClass, modelid));
if (pClass)
{
if (!pClass->_initScene)
{
if (pClass->getScene(pDataManager))
{
// pClass->_initScene = true;
}
else
{
2025-06-23 18:01:09 +08:00
parameter["error"] = "获取场景失败";
2025-06-23 10:41:33 +08:00
}
}
for (it = pClass->_sceneMap.begin(); it != pClass->_sceneMap.end(); ++it)
{
json j;
(*it)->toJson(j);
parameter["response"].push_back(j);
}
}
}
else if (classType = g_TYPE_DATAPACK)
{
DataPack* pPack = qobject_cast<DataPack*>(pDataManager->findObjectById(DataManager::DataType::dataPack, modelid));
if (pPack)
{
if (!pPack->_initScene)
{
if (pPack->getScene(pDataManager))
{
// pPack->_initScene = true;
}
}
else
{
2025-06-23 18:01:09 +08:00
parameter["error"] = "获取场景失败";
2025-06-23 10:41:33 +08:00
}
for (it = pPack->_sceneMap.begin(); it != pPack->_sceneMap.end(); ++it)
{
json j;
(*it)->toJson(j);
parameter["response"].push_back(j);
}
}
}
else
{
2025-06-23 18:01:09 +08:00
//类型错误
parameter["error"] = "参数类型错误";
2025-06-23 10:41:33 +08:00
}
LOG(INFO) << CommonHelper::utf8ToStdString("getSceneNode Sendto web.......");
LOG(INFO) << CommonHelper::jsonToString(parameter);
return true;
}
bool DataPackEventModule::updateScene(json& parameter)
{
auto data = parameter["data"];
int id = data["id"];
DPData* pData = pDataManager->findObjectById(DataManager::DataType::scene, id);
SceneInfo* pScene = qobject_cast<SceneInfo*>(pData);
if (pScene)
{
pScene->setNewData(parameter);
if (pScene->saveSelf())
{
parameter["response"] = { {"status",true} };
}
else
{
parameter["response"] = { {"status",false} };
}
}
LOG(INFO) << CommonHelper::utf8ToStdString("updateScene Sendto web.......");
LOG(INFO) << CommonHelper::jsonToString(parameter);
return true;
}