DPS/DataPlatform/DataAccessModule.cpp

283 lines
6.9 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 "DataAccessModule.h"
#include "DataModelData.h"
#include "DataManager.h"
#include "ProjectData.h"
#include "DataClass.h"
#include "common.h"
DataAccessModule::DataAccessModule(DataManager* manager)
: ShareEventModule(), pDataManager(manager)
{
}
DataAccessModule::~DataAccessModule()
{
}
bool DataAccessModule::onMessage(const std::string& eventName, json& parameter)
{
LOG(INFO) << CommonHelper::utf8ToStdString("DataAccessModule receive message.......");
LOG(INFO) << eventName;
LOG(INFO) << CommonHelper::jsonToString(parameter);
TRY{
if (!pDataManager->_dbConnected)
{
parameter["error"] = "数据库连接失败";
LOG(INFO) << CommonHelper::utf8ToStdString("DataAccessModule::onMessage...DB connect failed");
return true;
}
if (eventName == "get-datamodel")
{
//获取当前数据模型信息
getCurrentDataModel(parameter);
return true;
}
else if (eventName == "get-datamodule")
{
return getCurrentDataPack(parameter);
}
else if (eventName == "get-project-datamodel")
{
return getAllDataModel(parameter);
}
if (eventName == "get-dataclass")
{
getCurrentDataClass(parameter);
return true;
}
else if (eventName == "get-datamodel-child")
{
//获取数据模型下属所有数据
getAllDataTree(parameter);
return true;
}
else if (eventName == "get-last-project")
{
// getAllProject(parameter);
getlastProject(parameter);
return true;
}
else if (eventName == "get-all-project")
{
//获取所有项目
getAllProject(parameter);
return true;
}
}
CATCH(parameter);
return false;
}
bool DataAccessModule::getCurrentDataPack(json& parameter)
{
auto data = parameter["data"];
int id = data["id"];
DPData* pData = pDataManager->findObjectById(DataManager::DataType::dataPack, id);
if (pData)
{
json data;
pData->toJson(data, true);
parameter["response"] = data;
}
else
{
//未找到该数据模型
parameter["error"] = "未找到该数据模型";
}
LOG(INFO) << CommonHelper::utf8ToStdString("getCurrentDataClass Sendto web.......");
LOG(INFO) << CommonHelper::jsonToString(parameter);
return true;
}
bool DataAccessModule::getCurrentDataClass(json& parameter)
{
auto data = parameter["data"];
int dataClassId = data["id"];
DPData* pData = pDataManager->findObjectById(DataManager::DataType::dataClass, dataClassId);
if (pData)
{
DataClass* pClass = dynamic_cast<DataClass*>(pData);
//数据模型信息返回
json data;
pClass->toJson(data, true);
parameter["response"] = data;
}
else
{
//未找到该数据模型
parameter["error"] = "未找到该数据类";
}
LOG(INFO) << CommonHelper::utf8ToStdString("getCurrentDataClass Sendto web.......");
LOG(INFO) << CommonHelper::jsonToString(parameter);
return true;
}
bool DataAccessModule::getCurrentDataModel(json& parameter)
{
auto data = parameter["data"];
int dataModelId = data["id"];
DPData* pData = pDataManager->findObjectById(DataManager::DataType::dataModel, dataModelId);
if (pData)
{
DataModelData* pDataModel = dynamic_cast<DataModelData*>(pData);
//数据模型信息返回
json data;
pDataModel->toJson(data);
parameter["response"] = data;
}
else
{
//未找到该数据模型
parameter["error"] = "未找到该数据模型";
}
LOG(INFO) << CommonHelper::utf8ToStdString("getCurrentDataModel Sendto web.......");
LOG(INFO) << CommonHelper::jsonToString(parameter);
return true;
}
bool DataAccessModule::getAllDataTree(json& parameter)
{
//获取所有数据
auto data = parameter["data"];
int dataModelId = data["id"];
DPData* pData = pDataManager->findObjectById(DataManager::DataType::dataModel, dataModelId);
DataModelData* pDataModel = dynamic_cast<DataModelData*>(pData);
//如果为空可能是没有获取过数据模型
if (!pDataModel->_initChildren)
{
pDataModel->getAllChildren(pDataManager, false);
pDataModel->_initChildren = true;
}
else
{
//若是已锁定的版本,重读一下,可能被修改
if (pDataModel->_isVerLocked == true)
{
pDataModel->getAllChildren(pDataManager, true);
}
}
parameter["response"] = json::array();
//json
QMap<unsigned int, DPData*>::iterator it = pDataModel->_childrenMap.begin();
while (it != pDataModel->_childrenMap.end())
{
json pack;
(*it)->toJson(pack, true);
parameter["response"].push_back(pack);
it++;
}
LOG(INFO) << CommonHelper::utf8ToStdString("getAllDataTree Sendto web.......");
// LOG(INFO) << CommonHelper::jsonToString(parameter); //以后再删除
return true;
}
//获取所有项目信息
bool DataAccessModule::getAllProject(json& parameter)
{
parameter["response"] = json::array();
//从数据库取
pDataManager->getAllChildren(pDataManager);
QMap<unsigned int, DPData*>::iterator it = pDataManager->_childrenMap.begin();
while (it != pDataManager->_childrenMap.end())
{
ProjectData* pData = dynamic_cast<ProjectData*>(*it);
//将对象信息转json
json j;
pData->toJson(j);
parameter["response"].push_back(j);
it++;
}
LOG(INFO) << CommonHelper::utf8ToStdString("getAllProject Sendto web.......");
LOG(INFO) << CommonHelper::jsonToString(parameter);
return true;
}
bool DataAccessModule::getlastProject(json& parameter)
{
pDataManager->getAllChildren(pDataManager);
parameter["response"] = json::array();
for (int i = 0; i < pDataManager->lastProject.size(); i++)
{
ProjectData* pData = dynamic_cast<ProjectData*>(pDataManager->lastProject.at(i));
json j;
pData->toJson(j);
parameter["response"].push_back(j);
}
LOG(INFO) << CommonHelper::utf8ToStdString("getlastProject Sendto web.......");
LOG(INFO) << CommonHelper::jsonToString(parameter);
return true;
}
/*获取所有数据模型*/
bool DataAccessModule::getAllDataModel(json& parameter)
{
//获得当前项目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)
{
//找到该项目
if (!pProject->_initChildren)
{
pProject->getAllChildren(pDataManager);
pProject->_initChildren = true;
}
if (pProject->_childrenMap.isEmpty())
{
parameter["error"] = "该项目没有数据模型";
LOG(INFO) << CommonHelper::utf8ToStdString("getAllDataModel Sendto web.......");
LOG(INFO) << CommonHelper::jsonToString(parameter);
return true;
}
//读取的数据给parameter返回给界面
QMap<unsigned int, DPData*>::iterator it = pProject->_childrenMap.begin();
while (it != pProject->_childrenMap.end())
{
DataModelData* pData = dynamic_cast<DataModelData*>(*it);
//将对象信息转json
if (pData) {
json j;
pData->toJson(j);
parameter["response"].push_back(j);
}
it++;
}
}
else
{
parameter["error"] = "找不到该项目";
}
LOG(INFO) << CommonHelper::utf8ToStdString("getAllDataModel Sendto web.......");
// LOG(INFO) << CommonHelper::jsonToString(parameter);
return true;
}