283 lines
6.9 KiB
C++
283 lines
6.9 KiB
C++
#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;
|
||
}
|