DPS/DataPlatform/DataPackEventModule.cpp

1047 lines
26 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#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")
{
//批量移入移出数据模块、数据类
return moveDataPackOrClass(parameter);
}
else if (eventName == "create-relationship")
{
//建立数据关系
return buildDataRelationship(parameter);
}
else if (eventName == "delete-relationship")
{
//删除数据关系
return deleteDataRelationship(parameter);
}
else if (eventName == "add-datamodule")
{
//新建数据类模块
return addDataPack(parameter);
}
else if (eventName == "delete-datamodule")
{
//删除数据类模块
return deleteDataPack(parameter);
}
else if (eventName == "save-datamodule")
{
//编辑数据类模块
return updateDataPack(parameter);
}
if (eventName == "add-dataclass")
{
//新建数据类
return addDataClass(parameter);
}
else if (eventName == "delete-dataclass")
{
//删除数据类
return deleteDataClass(parameter);
}
else if (eventName == "save-dataclass")
{
//修改数据类
return updateDataClass(parameter);
}
else if (eventName == "add-dataclass-attribute")
{
//新建数据属性-复制属性
return addDataClassAttribute(parameter);
}
else if (eventName == "delete-classattribute")
{
//删除数据属性
return deleteDataClassAttribute(parameter);
}
else if (eventName == "save-dataclass-attribute")
{
//修改数据属性
return updateDataClassAttribute(parameter);
} //以下为数据字典相关消息事件
else if (eventName == "get-datadictionary-data")
{
//数据字典显示,返回实例数据
return getDictionaryData(parameter);
}
else if (eventName == "import-datadictionary")
{
//导入数据字典类
return importDictionary(parameter);
}
else if (eventName == "export-template")
{
//生成导入表模板
return exportTemplate(parameter);
}
else if (eventName == "export-datadictionary")
{
//导出数据字典类
return exportDictionary(parameter);
}
else if (eventName == "import-datamodel")
{
//数据模型导入
return importDataModel(parameter);
}
else if (eventName == "export-datamodel")
{
//数据模型导出
return exportDataModel(parameter);
}
else if (eventName == "add-scenenode")
{
//增加场景
return addSceneNode(parameter);
}
else if (eventName == "get-datamodel-scene")
{
//获取场景数据
return getSceneNode(parameter);
}
else if (eventName == "delete-scenenode")
{
//删除场景
return deleteScene(parameter);
}
else if (eventName == "move-scense-node")
{
return updateScene(parameter);
}
}
CATCH(parameter);
return EventModule::onMessage(eventName, parameter);
}
//以下:消息事件具体执行函数
bool DataPackEventModule::moveDataPackOrClass(json& parameter)
{
auto data = parameter["data"];
int dataId = data["id"];//数据模块或数据类id
// int newPackId = data["parentid"];//新的数据模块id
int classType = data["classType"];
if (classType == g_TYPE_DATAPACK)
{
//数据模块
DPData* pData = pDataManager->findObjectById(DataManager::DataType::dataPack, dataId);
DataPack* pPack = qobject_cast<DataPack*>(pData);
if (pPack && pPack->moveData(parameter, pDataManager))
{
// id 数据模块或数据类ID
// classType 模块类型1为模块2为数据类
// parentid 新的数据模块ID
// oldparentid 原有的数据模块ID
//移出移入成功
data["id"] = dataId;
data["classType"] = g_TYPE_DATAPACK;
data["parentid"] = data["parentid"];
data["oldparentid"] = pData->_parent->_id;
parameter["response"] = data;
}
else
{
//移出移入失败
parameter["error"] = "移入移出操作失败";
}
}
else if (classType == g_TYPE_DATACLASS)
{
//数据类
DPData* pData = pDataManager->findObjectById(DataManager::DataType::dataClass, dataId);
DataClass* pClass = qobject_cast<DataClass*>(pData);
if (pData && pClass->moveData(parameter, pDataManager))
{
//成功
data["id"] = dataId;
data["classType"] = g_TYPE_DATACLASS;
data["parentid"] = data["parentid"];
data["oldparentid"] = pData->_parent->_id;
parameter["response"] = data;
}
else
{
//失败
//移出移入失败
parameter["error"] = "移入移出操作失败";
}
}
LOG(INFO) << CommonHelper::utf8ToStdString("moveDataPackOrClass Sendto web.......");
LOG(INFO) << CommonHelper::jsonToString(parameter);
return true;
}
//增加数据模块
bool DataPackEventModule::addDataPack(json& parameter)
{
auto data = parameter["data"];
int parentId = data["parentid"]; //上层id
int classType = data["classType"];
DataPack* pNewPack = new DataPack();
pNewPack->setNewData(parameter);
//名称合法性判断
QString msg;
if ( pNewPack->checkNameillegal(msg))
{
delete pNewPack;
pNewPack = nullptr;
parameter["error"] = CommonHelper::qstringToUtf8(msg);
}
else
{
DPData* pParent = nullptr;
if (classType == g_TYPE_DATAMODEL)
{
//在数据模型下直接建
pParent = pDataManager->findObjectById(DataManager::DataType::dataModel, parentId);
}
else if (classType == g_TYPE_DATAPACK)
{
//在数据模块下建子模块
pParent = pDataManager->findObjectById(DataManager::DataType::dataPack, parentId);
//设置子模块信息
pNewPack->_bIsChildPack = true;
}
if (pParent)
{
pNewPack->_parent = pParent; //设置上层对象
if (pParent->addChild(pNewPack))
{
//添加到map
pDataManager->insertDataMap(DataManager::DataType::dataPack, pNewPack->_id, pNewPack);
json j;
pNewPack->toJson(j);
parameter["response"] = j;
}
else
{
delete pNewPack;
pNewPack = nullptr;
parameter["error"] = "新建模块失败";
}
}
else {
delete pNewPack;
pNewPack = nullptr;
parameter["error"] = "查找模块父类失败";
}
}
LOG(INFO) << CommonHelper::utf8ToStdString("addDataPack Sendto web.......");
LOG(INFO) << CommonHelper::jsonToString(parameter);
return true;
}
bool DataPackEventModule::deleteDataPack(json& parameter)
{
//获得id
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))
{
//更新总map
pDataManager->deleteInDataMap(DataManager::DataType::dataPack, dataPackId);
delete pData;
pData = 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);
// }
// }
parameter["response"]["status"] = true;
}
else
{
//如保提示删除模块失败?
parameter["response"]["status"] = false;
}
LOG(INFO) << CommonHelper::utf8ToStdString("deleteDataPack Sendto web.......");
LOG(INFO) << CommonHelper::jsonToString(parameter);
return true;
}
bool DataPackEventModule::updateDataPack(json& parameter)
{
//修改name type desciption 是否生成数据表
auto data = parameter["data"];
auto dataPackId = data["id"];
//查找当前数据类模块
DPData* pDataPack = pDataManager->findObjectById(DataManager::DataType::dataPack, dataPackId);
if (pDataPack) {
pDataPack->setNewData(parameter);
if (pDataPack->saveSelf())
{
//更新数据成功返回给web端
json j;
pDataPack->toJson(j);
parameter["response"] = j;
}
else
{
parameter["error"] = "修改模块失败";
}
}
else {
parameter["error"] = "查找模块失败";
}
LOG(INFO) << CommonHelper::utf8ToStdString("deleteDataPack Sendto web.......");
LOG(INFO) << CommonHelper::jsonToString(parameter);
return true;
}
//数据类
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
{
parameter["error"] = "该数据类不存在";
}
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"];
auto parentId = data["parentid"]; //上层id
pNewDataClass->setNewData(parameter);
pNewDataClass->reName();
QString errMsg;
//判断名称标识合法性
if (!pNewDataClass->checkNameSize(3, 128, errMsg) || !pNewDataClass->checkLetter(errMsg,2))
{
delete pNewDataClass;
pNewDataClass = nullptr;
parameter["error"] = CommonHelper::qstringToUtf8(errMsg);
}
else
{
pNewDataClass->_type = COMMON_CLASS;//普通数据类
//查找当前父模块
DPData* pData = pDataManager->findObjectById(DataManager::DataType::dataPack, parentId);
pNewDataClass->_parent = pData; //设置上层对象
if (pData && pData->addChild(pNewDataClass))
{
//添加到总map
pDataManager->insertDataMap(DataManager::DataType::dataClass, pNewDataClass->_id, pNewDataClass);
json j;
pNewDataClass->toJson(j);
parameter["response"] = j;
}
else
{
delete pNewDataClass;
pNewDataClass = nullptr;
parameter["error"] = "新建数据类失败";
}
}
LOG(INFO) << CommonHelper::utf8ToStdString("addDataClass Sendto web.......");
LOG(INFO) << CommonHelper::jsonToString(parameter);
return true;
}
bool DataPackEventModule::deleteDataClass(json& parameter)
{
//获得id
auto data = parameter["data"];
int dataClassID = data["id"];
QString result;
DataClass* pClass = qobject_cast<DataClass*>(pDataManager->findObjectById(DataManager::DataType::dataClass, dataClassID));
if (!pClass)
{
parameter["error"] = "数据类不存在";
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"];
//查找当前数据类
DPData* pDataClass = pDataManager->findObjectById(DataManager::DataType::dataClass, dataClassId);
if (pDataClass) {
pDataClass->setNewData(parameter);
if (pDataClass->saveSelf())
{
//更新数据成功返回给web端
parameter["response"] = data;
}
else
{
//失败
parameter["error"] = "修改数据类失败";
}
}
else {
parameter["error"] = "查询数据类失败";
}
LOG(INFO) << CommonHelper::utf8ToStdString("updateDataClass Sendto web.......");
LOG(INFO) << CommonHelper::jsonToString(parameter);
return true;
}
//建立数据关关联
bool DataPackEventModule::buildDataRelationship(json& parameter)
{
bool status = false;
auto data = parameter["data"];
int type = data["type"];//关系类型
int mainClassId = data["id1"]; //主数据类
int subClassId = data["id2"]; // 关联数据类
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
{
parameter["error"] = "建立数据关系失败";
}
}
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;
}
//属性
bool DataPackEventModule::addDataClassAttribute(json& parameter)
{
auto data = parameter["data"];
int parentId = data["parentid"]; //上层id
//先判断输入属性名称标识是否合理
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))
{
//名称标识不合法
parameter["error"] = CommonHelper::qstringToUtf8(errMsg);
delete pNewDataAttribute;
pNewDataAttribute = nullptr;
}
else
{
//查找当前父模块
DPData* pData = pDataManager->findObjectById(DataManager::DataType::dataClass, parentId);
pNewDataAttribute->_parent = pData; //设置上层对象
if (pData && pData->addChild(pNewDataAttribute))
{
//添加到总map
pDataManager->insertDataMap(DataManager::DataType::dataAttribute, pNewDataAttribute->_id, pNewDataAttribute);
json j;
pNewDataAttribute->toJson(j);
parameter["response"] = j;
}
else
{
delete pNewDataAttribute;
pNewDataAttribute = nullptr;
parameter["error"] = "新建数据类属性失败";
}
}
LOG(INFO) << CommonHelper::utf8ToStdString("addDataClassAttribute Sendto web.......");
LOG(INFO) << CommonHelper::jsonToString(parameter);
return true;
}
bool DataPackEventModule::deleteDataClassAttribute(json& parameter)
{
//获得id
auto data = parameter["data"];
auto dataAttributeID = data["id"];
DPData* pDataClassAttribute = pDataManager->findObjectById(DataManager::DataType::dataAttribute, dataAttributeID);
if (pDataClassAttribute && pDataClassAttribute->deleteSelf())
{
//删除成功
delete pDataClassAttribute;
pDataClassAttribute = nullptr;
//删除成功
parameter["response"]["status"] = true;
}
else
{
//失败
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"];
//查找当前数据类属性
DPData* pDataAttribute = pDataManager->findObjectById(DataManager::DataType::dataAttribute, dataAttributeId);
if (pDataAttribute) {
pDataAttribute->setNewData(parameter);
if (pDataAttribute->saveSelf())
{
//更新数据成功返回给web端
parameter["response"] = data;
}
else
{
//失败
parameter["response"]["status"] = false;
}
}
else {
parameter["error"] = "查询数据类失败";
}
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"];
//查找数据类
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
{
parameter["error"] = "查询数据类失败";
}
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"];
//查找数据类
DataClass* pDataClass = qobject_cast<DataClass*>(pDataManager->findObjectById(DataManager::DataType::dataClass, id));
try
{
if (!pDataClass)
throw exception("查询数据类失败");
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"];
//查找数据类
DataClass* pDataClass = qobject_cast<DataClass*>(pDataManager->findObjectById(DataManager::DataType::dataClass, id));
try
{
if (!pDataClass)
throw exception("查询数据类失败");
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"];
//查找数据类
DataClass* pDataClass = qobject_cast<DataClass*>(pDataManager->findObjectById(DataManager::DataType::dataClass, id));
if (pDataClass) {
json j;
pDataClass->dictToJson(j);
parameter["response"] = j;
}
else {
parameter["error"] = "查询数据类失败";
}
//获取数据字典类的信息
LOG(INFO) << CommonHelper::utf8ToStdString("getDictionaryData Sendto web.......");
LOG(INFO) << CommonHelper::jsonToString(parameter);
return true;
}
/*导入数据模型*/
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));
// int curProjectId = pModel->_parent->_id; //当前项目id
QString curPath = QCoreApplication::applicationDirPath();
QString selectDir = QFileDialog::getOpenFileName(nullptr, "选择导入文件", "", "*.xlsx");
QString errMsg;
if (!selectDir.isEmpty())
{
try
{
transform.openFile(selectDir);
QWaiting waiting(Session::getSession()->parent(), "模型导入中...");
if (waiting.working(std::bind(&TransformExcel::importData, &transform, std::ref(errMsg))))
{
parameter["response"]["status"] = true;
}
else
{
if (errMsg == "数据回滚失败,重启程序")
{
// CommonHelper::message(errMsg,2);
qApp->quit();
QProcess::startDetached(qApp->applicationFilePath());
}
else if( errMsg == "模型导入失败") {
//重新获取一次数据模型数据
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;
}
/*导出数据模型*/
bool DataPackEventModule::exportDataModel(json& parameter)
{
TransformExcel transform(pDataManager, 0);
QString file = QFileDialog::getSaveFileName(nullptr, tr("保存导出文件"), "", tr("*.xlsx"));
if (!file.isEmpty())
{
QFileInfo exportFile(file);
if (exportFile.isFile())
{
if (!transform.openFile(file))
{
//如打开文件失败,直接返回
parameter["error"] = "打开文件失败";
LOG(INFO) << CommonHelper::utf8ToStdString("exportDataModel Sendto web.......");
LOG(INFO) << CommonHelper::jsonToString(parameter);
return true;
}
}
QWaiting waiting(Session::getSession()->parent(), "模型导出中...");
if (waiting.working(std::bind(&TransformExcel::exportData, &transform, std::ref(parameter))))
{
parameter["response"]["status"] = true;
}
else
{
parameter["error"] = "导出数据模型失败";
}
transform.closeFile(file);
}
LOG(INFO) << CommonHelper::utf8ToStdString("exportDataModel Sendto web.......");
LOG(INFO) << CommonHelper::jsonToString(parameter);
return true;
}
/*增加场景*/
bool DataPackEventModule::addSceneNode(json& parameter)
{
auto data = parameter["data"];
int parentType = data["parentClassType"]; //父类型
int parentId = data["parentid"]; //父id
SceneInfo* pNewScene = new SceneInfo;
pNewScene->setNewData(parameter);
DPData* pdata = nullptr;
//查找要在哪个数据模块(类)下添加
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;
parameter["error"] = "父数据模块(数据类)查找失败";
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);
//添加场景成功
json j;
pNewScene->toJson(j);
parameter["response"] = j;
}
else
{
//添加场景失败
delete pNewScene;
pNewScene = nullptr;
parameter["response"] = { {"status",false} };
}
LOG(INFO) << CommonHelper::utf8ToStdString("addSceneNode Sendto web.......");
LOG(INFO) << CommonHelper::jsonToString(parameter);
return true;
}
/*删除场景*/
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())
{
//所属于模块或类的场景map中删除
DPData* pParent = pScene->_parent;
pParent->deleteScene(id);
pDataManager->deleteInDataMap(DataManager::DataType::scene, id);
delete pScene;
pScene = nullptr;
parameter["response"] = { {"status",true} };
}
else
{
//删除失败
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"];
int modelid = data["modelid"];//数据模块或数据类id
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
{
parameter["error"] = "获取场景失败";
}
}
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
{
parameter["error"] = "获取场景失败";
}
for (it = pPack->_sceneMap.begin(); it != pPack->_sceneMap.end(); ++it)
{
json j;
(*it)->toJson(j);
parameter["response"].push_back(j);
}
}
}
else
{
//类型错误
parameter["error"] = "参数类型错误";
}
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;
}