DPS/DataPlatform/DataManager.cpp

209 lines
4.5 KiB
C++
Raw Permalink Normal View History

2025-06-23 10:41:33 +08:00
#pragma execution_character_set("utf-8")
#include "DataManager.h"
#include "M_ProjectDAO.h"
#include "ProjectData.h"
#include "global.h"
#include "DictItem.h"
#include "DictData.h"
DataManager& GetDataRoot()
{
static DataManager dataMgr;
return dataMgr;
}
DataManager::DataManager()
{
// pTheDBPlatform = new DBPlatformSpace::DBPlatformNew();
platformData.insert(DataType::project, mapProject);
platformData.insert(DataType::dataModel, mapDataModel);
platformData.insert(DataType::dataPack, mapDataPack);
platformData.insert(DataType::dataClass, mapDataClass);
platformData.insert(DataType::dataAttribute, mapDataAttribute);
}
DataManager::~DataManager()
{
if (pTheDBPlatform)
{
delete pTheDBPlatform;
pTheDBPlatform = nullptr;
}
2025-06-23 18:01:09 +08:00
// //清空最近打开项目
2025-06-23 10:41:33 +08:00
// while (!lastProject.isEmpty())
// {
// DPData* pdata = lastProject.back();
// delete pdata;
// pdata = nullptr;
// }
}
2025-06-23 18:01:09 +08:00
//添加一个下层数据对象
2025-06-23 10:41:33 +08:00
bool DataManager::addChild(DPData* pNewData)
{
2025-06-23 18:01:09 +08:00
//数据存入数据库
2025-06-23 10:41:33 +08:00
if (pNewData->saveSelf())
{
pNewData->_id = pNewData->_pDBDAO->_ID;
2025-06-23 18:01:09 +08:00
//保存成功
//添加数据到内存数据模型
2025-06-23 10:41:33 +08:00
_childrenMap.insert(pNewData->_id, pNewData);
2025-06-23 18:01:09 +08:00
//加入数据map
2025-06-23 10:41:33 +08:00
insertDataMap(DataType::project, pNewData->_id, pNewData);
return true;
}
else {
2025-06-23 18:01:09 +08:00
//保存失败
2025-06-23 10:41:33 +08:00
return false;
}
}
2025-06-23 18:01:09 +08:00
/*删除一个项目*/
2025-06-23 10:41:33 +08:00
bool DataManager::deleteChild(unsigned int id)
{
if (_childrenMap.remove(id))
{
return true;
}
return false;
}
2025-06-23 18:01:09 +08:00
/*获取所有下层数据对象*/
2025-06-23 10:41:33 +08:00
void DataManager::getAllChildren(DPData*, bool)
{
2025-06-23 18:01:09 +08:00
const int MINCOUNT = 2; //最多显示两个项目
2025-06-23 10:41:33 +08:00
using namespace DBPlatformSpace;
2025-06-23 18:01:09 +08:00
//获取所有的项目
2025-06-23 10:41:33 +08:00
std::list<M_ProjectDAO*> projectList;
ResultMsg rm = M_ProjectDAO::FindAll(projectList);
if (rm.rCode != 0)
{
LOG(INFO) << CommonHelper::utf8ToStdString("M_ProjectDAO::FindAll failed");
LOG(INFO) << rm.rMsg;
return;
}
LOG(INFO) << CommonHelper::utf8ToStdString("M_ProjectDAO::FindAll success");
2025-06-23 18:01:09 +08:00
//最近打开项目最多两个,如果只有一个显示一个
2025-06-23 10:41:33 +08:00
int listSize = static_cast<int>(projectList.size());
int lastCount = listSize> MINCOUNT ? MINCOUNT : listSize;
int addLastlist = 0;
lastProject.clear();
for (list<M_ProjectDAO*>::iterator it = projectList.begin(); it != projectList.end(); ++it)
{
ProjectData* pNew;
bool addto = false;
if (_childrenMap.contains((*it)->_ID))
{
pNew = qobject_cast<ProjectData*>(_childrenMap.value((*it)->_ID));
}
else
{
pNew = new ProjectData();
addto = true;
}
pNew->loadData(*it);
pNew->_parent = this;
if (addto)
{
_childrenMap.insert(pNew->_id, pNew);
insertDataMap(DataType::project, pNew->_id, pNew);
}
if (addLastlist < lastCount)
{
lastProject.append(pNew);
addLastlist++;
}
}
}
void DataManager::insertDataMap(DataType type, unsigned int id, DPData* pData)
{
platformData[type].insert(id, pData);
}
void DataManager::deleteInDataMap(DataType type, unsigned int id)
{
platformData[type].remove(id);
}
DPData* DataManager::findObjectById(DataType type, int id)
{
QMap<unsigned int, DPData*> map = platformData.value(type);
if (map.contains(id))
{
return platformData.value(type).value(id);
}
else
{
return nullptr;
}
}
2025-06-23 18:01:09 +08:00
//转换类型
2025-06-23 10:41:33 +08:00
DataManager::DataType DataManager::transformType(int type)
{
if (type == g_TYPE_DATAPACK)
{
return DataManager::DataType::dataPack;
}
else if (type == g_TYPE_DATACLASS)
{
return DataManager::DataType::dataClass;
}
else if (type == g_TYPE_DATAATTRUBUTE)
{
return DataManager::DataType::dataAttribute;
}
else if (type == g_TYPE_SCENEINFO)
{
return DataManager::DataType::scene;
}
return DataManager::DataType::project;
2025-06-23 10:41:33 +08:00
}
2025-06-23 18:01:09 +08:00
//指定数据模型下查找数据type的指定属性名称或名称标识值的数据
//返回同名数据
2025-06-23 10:41:33 +08:00
DPData* DataManager::findobjectByNameInDatamodel(int type, QString propertyName, QString name, int dataModelId)
{
2025-06-23 18:01:09 +08:00
//目标类型数据map
2025-06-23 10:41:33 +08:00
QMap<unsigned int, DPData*> dstDataMap = platformData.value(transformType(type));
QMap<unsigned int, DPData*>::iterator it = dstDataMap.begin();
while (it != dstDataMap.end())
{
QString vName = (*it)->property(CommonHelper::qstringToString(propertyName)).toString();
if (vName == name)
{
DPData* pData = *it;
2025-06-23 18:01:09 +08:00
//看是否是同一数据模型
2025-06-23 10:41:33 +08:00
if (pData->getDataModelOwner()->_id == dataModelId )
{
return (*it);
}
}
it++;
}
return nullptr;
}
void DataManager::getDataMap(DataType type, QMap<unsigned int, DPData*>& map)
{
map = platformData.value(type);
}
void DataManager::clearAllProject()
{
qDeleteAll(_childrenMap);
_childrenMap.clear();
}