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;
|
|
|
|
|
}
|
2025-06-23 21:06:10 +08:00
|
|
|
|
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();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|