2025-06-23 10:41:33 +08:00
|
|
|
|
#pragma execution_character_set("utf-8")
|
|
|
|
|
|
|
|
|
|
#include "ProjectData.h"
|
|
|
|
|
#include "DataModelData.h"
|
|
|
|
|
#include "DataManager.h"
|
|
|
|
|
#include "M_ProjectDAO.h"
|
|
|
|
|
#include "M_EntityModelDAO.h"
|
|
|
|
|
#include "CommonDataPublic.h"
|
|
|
|
|
#include <QTime>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
void static backupDAOData(DBPlatformSpace::M_ProjectDAO& src, DBPlatformSpace::M_ProjectDAO& dst)
|
|
|
|
|
{
|
2025-06-23 18:01:09 +08:00
|
|
|
|
//主要备份界面可修改的值
|
2025-06-23 10:41:33 +08:00
|
|
|
|
dst._name = src._name;
|
|
|
|
|
dst._type = src._type;
|
|
|
|
|
dst._author = src._author;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void static restoreProjectData(DBPlatformSpace::M_ProjectDAO& src, ProjectData& dst)
|
|
|
|
|
{
|
2025-06-23 18:01:09 +08:00
|
|
|
|
//主要恢复界面属性值
|
2025-06-23 10:41:33 +08:00
|
|
|
|
dst._name = CommonHelper::stringToQstring(src._name);
|
|
|
|
|
dst._type = src._type;
|
|
|
|
|
dst._author = CommonHelper::stringToQstring(src._author);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ProjectData::ProjectData()
|
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
ProjectData::~ProjectData()
|
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
QString ProjectData::getAuthor() const
|
|
|
|
|
{
|
|
|
|
|
return _author;
|
|
|
|
|
}
|
|
|
|
|
void ProjectData::setAuthor(QString author)
|
|
|
|
|
{
|
|
|
|
|
this->_author = author;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
QString ProjectData::getCreateTime() const
|
|
|
|
|
{
|
|
|
|
|
return _createTime;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void ProjectData::setCreateTime(QString createTime)
|
|
|
|
|
{
|
|
|
|
|
this->_createTime = createTime;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
QString ProjectData::getUpdateTime() const
|
|
|
|
|
{
|
|
|
|
|
return _updateTime;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void ProjectData::setUpdateTime(QString updateTime)
|
|
|
|
|
{
|
|
|
|
|
this->_updateTime = updateTime;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
bool ProjectData::getFocus() const
|
|
|
|
|
{
|
|
|
|
|
return _focus;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void ProjectData::setFocus(bool focus)
|
|
|
|
|
{
|
|
|
|
|
this->_focus = focus;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void ProjectData::removeChildinDPMap()
|
|
|
|
|
{
|
|
|
|
|
DataManager& mgr = GetDataRoot();
|
|
|
|
|
QMap<unsigned int, DPData*>::iterator it = _childrenMap.begin();
|
|
|
|
|
while (it != _childrenMap.end())
|
|
|
|
|
{
|
|
|
|
|
mgr.deleteInDataMap(DataManager::DataType::dataModel, (*it)->_id);
|
|
|
|
|
qobject_cast<DataModelData*>(*it)->removeChildinDPMap();
|
|
|
|
|
it++;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
bool ProjectData::saveSelf()
|
|
|
|
|
{
|
|
|
|
|
using namespace DBPlatformSpace;
|
|
|
|
|
M_ProjectDAO oldDaoData;
|
|
|
|
|
ResultMsg rm;
|
2025-06-23 18:01:09 +08:00
|
|
|
|
/*将这条项目数据写入数据库*/
|
2025-06-23 10:41:33 +08:00
|
|
|
|
M_ProjectDAO* pDao = dynamic_cast<M_ProjectDAO*>(_pDBDAO);
|
|
|
|
|
|
|
|
|
|
if (pDao == nullptr)
|
|
|
|
|
{
|
|
|
|
|
pDao = new M_ProjectDAO();
|
|
|
|
|
_pDBDAO = pDao;
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
2025-06-23 18:01:09 +08:00
|
|
|
|
/*备份DAO数据*/
|
2025-06-23 10:41:33 +08:00
|
|
|
|
backupDAOData(*pDao, oldDaoData);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
pDao->_name = CommonHelper::qstringToStdString(this->_name);
|
|
|
|
|
pDao->_type = this->_type;
|
|
|
|
|
pDao->_focus = this->_focus;
|
|
|
|
|
pDao->_author = CommonHelper::qstringToStdString(this->_author);
|
|
|
|
|
pDao->_createTime = CommonHelper::qstringToStdString(this->_createTime);
|
|
|
|
|
pDao->_updateTime = CommonHelper::qstringToStdString(this->_updateTime);
|
|
|
|
|
|
|
|
|
|
rm = pDao->save();
|
|
|
|
|
|
|
|
|
|
if (rm.rCode == 0)
|
|
|
|
|
{
|
|
|
|
|
LOG(INFO) << CommonHelper::utf8ToStdString(" M_ProjectDAO::save success");
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
LOG(INFO) << CommonHelper::utf8ToStdString(" M_ProjectDAO::save failed");
|
|
|
|
|
LOG(ERROR) << rm.rMsg;
|
2025-06-23 18:01:09 +08:00
|
|
|
|
//恢复数据
|
2025-06-23 10:41:33 +08:00
|
|
|
|
restoreProjectData(oldDaoData, *this);
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void ProjectData::loadData(DBPlatformSpace::DAO* pDao)
|
|
|
|
|
{
|
|
|
|
|
_pDBDAO = pDao;
|
2025-06-23 18:01:09 +08:00
|
|
|
|
//将DAO数据存入projectData对象
|
2025-06-23 10:41:33 +08:00
|
|
|
|
DBPlatformSpace::M_ProjectDAO* pDAOData = dynamic_cast<DBPlatformSpace::M_ProjectDAO*>(_pDBDAO);
|
|
|
|
|
_id = pDAOData->_ID;
|
|
|
|
|
_name = CommonHelper::stringToQstring(pDAOData->_name);
|
|
|
|
|
_type = pDAOData->_type;
|
|
|
|
|
_focus = pDAOData->_focus;
|
|
|
|
|
_author = CommonHelper::stringToQstring(pDAOData->_author);
|
|
|
|
|
_createTime = CommonHelper::stringToQstring(pDAOData->_createTime);
|
|
|
|
|
_updateTime = CommonHelper::stringToQstring(pDAOData->_updateTime);
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
bool ProjectData::deleteSelf()
|
|
|
|
|
{
|
|
|
|
|
if (_pDBDAO)
|
|
|
|
|
{
|
2025-06-23 18:01:09 +08:00
|
|
|
|
//将这条数据从数据库删除
|
2025-06-23 10:41:33 +08:00
|
|
|
|
DBPlatformSpace::ResultMsg rm = _pDBDAO->delself();
|
|
|
|
|
if (rm.rCode == 0)
|
|
|
|
|
{
|
2025-06-23 18:01:09 +08:00
|
|
|
|
//数据库删除成功,从内存项目中删除该数据模型
|
2025-06-23 10:41:33 +08:00
|
|
|
|
_parent->deleteChild(_id);
|
|
|
|
|
removeChildinDPMap();
|
|
|
|
|
|
|
|
|
|
LOG(INFO) << CommonHelper::utf8ToStdString(" M_ProjectDAO::delself success");
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
LOG(INFO) << CommonHelper::utf8ToStdString(" M_ProjectDAO::delself failed");
|
|
|
|
|
LOG(ERROR) << rm.rMsg;
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void ProjectData::toJson(json& jsonObj, bool /*recursive*/)
|
|
|
|
|
{
|
|
|
|
|
jsonObj["id"] = _id;
|
|
|
|
|
jsonObj["author"] = CommonHelper::qstringToUtf8(getAuthor());
|
|
|
|
|
jsonObj["name"] = CommonHelper::qstringToUtf8(_name);
|
|
|
|
|
jsonObj["type"] = getType();
|
|
|
|
|
jsonObj["createTime"] = CommonHelper::qstringToUtf8(getCreateTime());
|
|
|
|
|
jsonObj["updateTime"] = CommonHelper::qstringToUtf8(getUpdateTime());
|
|
|
|
|
jsonObj["focus"] = getFocus();
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
2025-06-23 18:01:09 +08:00
|
|
|
|
/*获取当前项目的所有数据模型*/
|
2025-06-23 10:41:33 +08:00
|
|
|
|
void ProjectData::getAllChildren(DPData* pManager)
|
|
|
|
|
{
|
|
|
|
|
using namespace DBPlatformSpace;
|
|
|
|
|
ResultMsg rm;
|
|
|
|
|
DataManager* pDManager = qobject_cast<DataManager*>(pManager);
|
|
|
|
|
|
|
|
|
|
M_ProjectDAO* pProject = dynamic_cast<M_ProjectDAO*>(_pDBDAO);
|
|
|
|
|
list<M_EntityModelDAO*> listDataModel;
|
|
|
|
|
rm = pProject->getEntityModelList(listDataModel);
|
|
|
|
|
if (rm.rCode != 0)
|
|
|
|
|
{
|
|
|
|
|
LOG(INFO) << CommonHelper::utf8ToStdString(" M_ProjectDAO::getEntityModelList failed");
|
|
|
|
|
LOG(ERROR) << rm.rMsg;
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
if (listDataModel.size() != _childrenMap.size())
|
|
|
|
|
{
|
|
|
|
|
qDeleteAll(_childrenMap);
|
|
|
|
|
_childrenMap.clear();
|
|
|
|
|
}
|
|
|
|
|
LOG(INFO) << CommonHelper::utf8ToStdString(" M_ProjectDAO::getEntityModelList success");
|
|
|
|
|
for (list<M_EntityModelDAO*>::iterator it = listDataModel.begin(); it != listDataModel.end(); ++it)
|
|
|
|
|
{
|
|
|
|
|
int id = (*it)->_ID;
|
|
|
|
|
DataModelData* pNew = nullptr;
|
|
|
|
|
if (_childrenMap.contains(id))
|
|
|
|
|
{
|
|
|
|
|
_childrenMap.value(id)->loadData(*it);
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
pNew = new DataModelData();
|
|
|
|
|
pNew->loadData(*it);
|
|
|
|
|
pNew->_parent = this;
|
|
|
|
|
_childrenMap.insert(id, pNew);
|
2025-06-23 18:01:09 +08:00
|
|
|
|
//加入model map
|
2025-06-23 10:41:33 +08:00
|
|
|
|
pDManager->insertDataMap(DataManager::DataType::dataModel, pNew->_id, pNew);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2025-06-23 18:01:09 +08:00
|
|
|
|
/*新加数据模型到本项目*/
|
2025-06-23 10:41:33 +08:00
|
|
|
|
bool ProjectData::addChild(DPData* pNewData)
|
|
|
|
|
{
|
|
|
|
|
using namespace DBPlatformSpace;
|
|
|
|
|
ResultMsg rm;
|
|
|
|
|
DataModelData* pNewModelData = qobject_cast<DataModelData*>(pNewData);
|
|
|
|
|
pNewModelData->saveToDao();
|
|
|
|
|
M_EntityModelDAO* pNewModelDAO = dynamic_cast<M_EntityModelDAO*>(pNewData->_pDBDAO);
|
|
|
|
|
M_ProjectDAO* pProjectDAO = dynamic_cast<M_ProjectDAO*>(_pDBDAO);
|
|
|
|
|
rm = pProjectDAO->addEntityModel(pNewModelDAO);
|
|
|
|
|
if (rm.rCode == 0)
|
|
|
|
|
{
|
|
|
|
|
LOG(INFO) << CommonHelper::utf8ToStdString(" M_ProjectDAO::addEntityModel success");
|
|
|
|
|
pNewModelData->_id = pNewModelDAO->_ID;
|
|
|
|
|
pNewModelData->_version = pNewModelDAO->_version;
|
2025-06-23 18:01:09 +08:00
|
|
|
|
//保存数据模型成功,添加到childMap
|
2025-06-23 10:41:33 +08:00
|
|
|
|
_childrenMap.insert(pNewData->_id, pNewData);
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
LOG(INFO) << CommonHelper::utf8ToStdString(" M_ProjectDAO::addEntityModel failed");
|
|
|
|
|
LOG(ERROR) << rm.rMsg;
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
bool ProjectData::deleteChild(unsigned int dataModelId)
|
|
|
|
|
{
|
|
|
|
|
_childrenMap.remove(dataModelId);
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void ProjectData::getNewProperty(json& parameter, QVariantMap& valueMap)
|
|
|
|
|
{
|
|
|
|
|
auto data = parameter["data"];
|
|
|
|
|
if (!data["name"].is_null())
|
|
|
|
|
{
|
|
|
|
|
valueMap.insert("name", CommonHelper::utf8ToQString(data["name"]));
|
|
|
|
|
}
|
|
|
|
|
if (!data["author"].is_null())
|
|
|
|
|
{
|
|
|
|
|
valueMap.insert("author", CommonHelper::utf8ToQString(data["author"]));
|
|
|
|
|
}
|
|
|
|
|
if (!data["type"].is_null())
|
|
|
|
|
{
|
|
|
|
|
valueMap.insert("type", (int)data["type"]);
|
|
|
|
|
}
|
|
|
|
|
if (!data["focus"].is_null())
|
|
|
|
|
{
|
|
|
|
|
valueMap.insert("focus", (bool)data["focus"]);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void ProjectData::setNewData(json& parameter)
|
|
|
|
|
{
|
2025-06-23 18:01:09 +08:00
|
|
|
|
//当前时间
|
2025-06-23 10:41:33 +08:00
|
|
|
|
QString curTime = QDateTime::currentDateTime().toString("yyyy-MM-dd hh:mm");
|
|
|
|
|
|
|
|
|
|
QVariantMap newValue;
|
|
|
|
|
getNewProperty(parameter, newValue);
|
|
|
|
|
newValue.insert("createTime", curTime);
|
|
|
|
|
newValue.insert("updateTime", curTime);
|
2025-06-23 18:01:09 +08:00
|
|
|
|
//保存属性
|
2025-06-23 10:41:33 +08:00
|
|
|
|
setProperties(newValue);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void ProjectData::setEditData(json& parameter)
|
|
|
|
|
{
|
2025-06-23 18:01:09 +08:00
|
|
|
|
//编辑项目和修改关注状态时调用
|
|
|
|
|
//需修改 更新时间
|
2025-06-23 10:41:33 +08:00
|
|
|
|
// QString curTime = QDateTime::currentDateTime().toString("yyyy-MM-dd hh:mm");
|
|
|
|
|
QVariantMap newValue;
|
|
|
|
|
getNewProperty(parameter, newValue);
|
|
|
|
|
// newValue.insert("updateTime", curTime);
|
|
|
|
|
setProperties(newValue);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
bool ProjectData::getImportProjectList(QList<ProjectData*>& proList, QString importFilePath)
|
|
|
|
|
{
|
|
|
|
|
using namespace DBPlatformSpace;
|
|
|
|
|
ResultMsg rm;
|
|
|
|
|
list<M_ProjectDAO*> plist;
|
|
|
|
|
rm = M_ProjectDAO::getImportProjectList(plist, CommonHelper::qstringToStdString(importFilePath));
|
|
|
|
|
if (rm.rCode == 0)
|
|
|
|
|
{
|
2025-06-23 18:01:09 +08:00
|
|
|
|
//list<M_ProjectDAO*>转换成 QList<ProjectData*>
|
2025-06-23 10:41:33 +08:00
|
|
|
|
for (list<M_ProjectDAO*>::iterator it = plist.begin(); it != plist.end(); ++it)
|
|
|
|
|
{
|
|
|
|
|
ProjectData* pProjecct = new ProjectData();
|
|
|
|
|
pProjecct->loadData(*it);
|
|
|
|
|
proList.append(pProjecct);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
LOG(INFO) << CommonHelper::utf8ToStdString(" M_ProjectDAO::getImportProjectList success");
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
LOG(INFO) << CommonHelper::utf8ToStdString(" M_ProjectDAO::getImportProjectList failed");
|
|
|
|
|
LOG(ERROR) << rm.rMsg;
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
bool ProjectData::importData(json& parameter, QList<int>& projectIdlist)
|
|
|
|
|
{
|
|
|
|
|
using namespace DBPlatformSpace;
|
|
|
|
|
ResultMsg rm;
|
|
|
|
|
auto data = parameter["data"];
|
|
|
|
|
list<int> importIds;
|
|
|
|
|
for (auto j : data)
|
|
|
|
|
{
|
|
|
|
|
importIds.push_back(j.get<int>());
|
|
|
|
|
projectIdlist.append(j.get<int>());
|
|
|
|
|
}
|
|
|
|
|
SysManager& sysMgr = GetSysManager();
|
2025-06-23 18:01:09 +08:00
|
|
|
|
rm = M_ProjectDAO::importProject(CommonHelper::qstringToStdString(sysMgr._importFilePath), importIds);//导入选中的项目"
|
2025-06-23 10:41:33 +08:00
|
|
|
|
if (rm.rCode == 0)
|
|
|
|
|
{
|
|
|
|
|
LOG(INFO) << CommonHelper::utf8ToStdString(" M_ProjectDAO::importProject success");
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
LOG(INFO) << CommonHelper::utf8ToStdString(" M_ProjectDAO::importProject failed");
|
|
|
|
|
LOG(ERROR) << rm.rMsg;
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
bool ProjectData::exportData(json& parameter, QString exportPath)
|
|
|
|
|
{
|
|
|
|
|
DBPlatformSpace::ResultMsg rm;
|
|
|
|
|
auto data = parameter["data"];
|
|
|
|
|
list<int> projectIds;
|
|
|
|
|
for (auto j : data)
|
|
|
|
|
{
|
|
|
|
|
projectIds.push_back(j.get<int>());
|
|
|
|
|
}
|
|
|
|
|
rm = DBPlatformSpace::M_ProjectDAO::exportProject(projectIds, CommonHelper::qstringToStdString(exportPath));
|
|
|
|
|
if (rm.rCode == 0)
|
|
|
|
|
{
|
|
|
|
|
LOG(INFO) << CommonHelper::utf8ToStdString(" M_ProjectDAO::exportProject success");
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
LOG(INFO) << CommonHelper::utf8ToStdString(" M_ProjectDAO::exportProject failed");
|
|
|
|
|
LOG(ERROR) << rm.rMsg;
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void ProjectData::findDatamodelByName(QString name, QList<DPData*>& modellist)
|
|
|
|
|
{
|
|
|
|
|
if (_childrenMap.size() == 0)
|
|
|
|
|
{
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
QMap<unsigned int, DPData*>::iterator it = _childrenMap.begin();
|
|
|
|
|
while (it != _childrenMap.end())
|
|
|
|
|
{
|
|
|
|
|
if (name.compare((*it)->_name) == 0)
|
|
|
|
|
{
|
|
|
|
|
modellist.append((*it));
|
|
|
|
|
}
|
|
|
|
|
it++;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void ProjectData::setCurrentProject()
|
|
|
|
|
{
|
|
|
|
|
using namespace DBPlatformSpace;
|
|
|
|
|
M_ProjectDAO::setCurrProjectID(_id);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
bool ProjectData::hasRepetitiveName(QString name, DataManager* pMgr)
|
|
|
|
|
{
|
|
|
|
|
QMap<unsigned int, DPData*>::iterator it;
|
|
|
|
|
it = pMgr->_childrenMap.begin();
|
|
|
|
|
while (it != pMgr->_childrenMap.end())
|
|
|
|
|
{
|
|
|
|
|
ProjectData* pData = qobject_cast<ProjectData*>(*it);
|
|
|
|
|
QString n = pData->property("name").toString();
|
|
|
|
|
if (n == name)
|
|
|
|
|
{
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
it++;
|
|
|
|
|
}
|
|
|
|
|
return false;
|
|
|
|
|
}
|