DPS/DataPlatform/DataModelData.cpp

643 lines
17 KiB
C++
Raw Normal View History

2025-06-23 10:41:33 +08:00
#pragma execution_character_set("utf-8")
#include <QFileDialog>
#include "DataModelData.h"
#include "global.h"
#include "M_EntityModelDAO.h"
#include "M_FolderDAO.h"
#include "DataPack.h"
#include "DataManager.h"
#include "ProjectData.h"
#include "DataClass.h"
#include "DataAttribute.h"
#include <QDateTime>
//<2F><><EFBFBD><EFBFBD>ģ<EFBFBD><C4A3>
DataModelData::DataModelData()
{
_baseType = g_TYPE_DATAMODEL;
}
DataModelData::~DataModelData()
{
}
void static backupDAOData(DBPlatformSpace::M_EntityModelDAO& src, DBPlatformSpace::M_EntityModelDAO& dst)
{
}
void static restoreData(DBPlatformSpace::M_EntityModelDAO& src, DataModelData& dst)
{
//<2F><>Ҫ<EFBFBD>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5>updateTimeֵ
}
void DataModelData::saveToDao()
{
using namespace DBPlatformSpace;
M_EntityModelDAO* pDao = dynamic_cast<M_EntityModelDAO*>(_pDBDAO);
if (pDao == nullptr)
{
pDao = new M_EntityModelDAO();
_pDBDAO = pDao;
}
pDao->_name = CommonHelper::qstringToStdString(getName()); //<2F><><EFBFBD><EFBFBD>ģ<EFBFBD>ͱ<EFBFBD>ʶ
pDao->_type = _type;
pDao->_createTime = CommonHelper::qstringToStdString(_createTime);
pDao->_updateTime = CommonHelper::qstringToStdString(_updateTime);
pDao->_description = CommonHelper::qstringToStdString(_description);
pDao->_isVersionLocked = _isVerLocked; //?
pDao->_displayName = CommonHelper::qstringToStdString(_displayName);
}
bool DataModelData::saveSelf()
{
using namespace DBPlatformSpace;
ResultMsg rm;
/*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŀ<EFBFBD><C4BF><EFBFBD><EFBFBD>д<EFBFBD><D0B4><EFBFBD><EFBFBD><EFBFBD>ݿ<EFBFBD>*/
M_EntityModelDAO* pDao = dynamic_cast<M_EntityModelDAO*>(_pDBDAO);
/*<2A><><EFBFBD><EFBFBD>DAO<41><4F><EFBFBD><EFBFBD>*/
M_EntityModelDAO oldDaoData;
if (pDao == nullptr)
{
pDao = new M_EntityModelDAO();
_pDBDAO = pDao;
}
else
{
backupDAOData(*pDao, oldDaoData);
}
saveToDao();
rm = pDao->save();
if (rm.rCode == 0)
{
LOG(INFO) << CommonHelper::utf8ToStdString("M_EntityModelDAO.save success");
return true;
}
else
{
LOG(INFO) << CommonHelper::utf8ToStdString("M_EntityModelDAO.save failed");
LOG(INFO) << rm.rMsg;
restoreData(oldDaoData, *this);
return false;
}
}
bool DataModelData::addChild(DPData* pNewData)
{
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģ<EFBFBD><C4A3>
using namespace DBPlatformSpace;
ResultMsg rm;
M_EntityModelDAO* pModelDAO = dynamic_cast<M_EntityModelDAO*>(_pDBDAO);
pNewData->saveToDao();
DataPack* pPack = qobject_cast<DataPack*>(pNewData);
M_FolderDAO* pFolderDAO = dynamic_cast<M_FolderDAO*>(pNewData->_pDBDAO);
rm = pModelDAO->addM_FolderDAO(pFolderDAO);
if (rm.rCode == 0)
{
LOG(INFO) << CommonHelper::utf8ToStdString("M_EntityModelDAO.addM_FolderDAO success");
//<2F>½<EFBFBD><C2BD>ɹ<EFBFBD>
pPack->_id = pFolderDAO->_ID;
pPack->_wCreateVersion = pFolderDAO->_addVersion; //<2F><><EFBFBD><EFBFBD><EFBFBD>
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģ<EFBFBD>ͳɹ<CDB3><C9B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӵ<EFBFBD>childMap
_childrenMap.insert(pNewData->_id, pNewData);
return true;
}
else
{
LOG(INFO) << CommonHelper::utf8ToStdString("M_EntityModelDAO.addM_FolderDAO failed");
LOG(ERROR) << rm.rMsg;
return false;
}
}
bool DataModelData::deleteChild(unsigned int id)
{
_childrenMap.remove(id);
return true;
}
/*<2A><><EFBFBD><EFBFBD><EFBFBD>ݿ<EFBFBD><DDBF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݵ<EFBFBD><DDB5><EFBFBD>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD>*/
void DataModelData::loadData(DBPlatformSpace::DAO* pDao)
{
_pDBDAO = pDao;
//<2F><>DAO<41><4F><EFBFBD>ݴ<EFBFBD><DDB4><EFBFBD>DataModelData<74><61><EFBFBD><EFBFBD>
DBPlatformSpace::M_EntityModelDAO* pDAOData = dynamic_cast<DBPlatformSpace::M_EntityModelDAO*>(_pDBDAO);
setID(pDAOData->_ID);
setName(CommonHelper::stringToQstring(pDAOData->_name)); //<2F><><EFBFBD><EFBFBD>ģ<EFBFBD>ͱ<EFBFBD>ʶ
_type = pDAOData->_type;
_createTime = CommonHelper::stringToQstring(pDAOData->_createTime);
_updateTime = CommonHelper::stringToQstring(pDAOData->_updateTime);
_description = CommonHelper::stringToQstring(pDAOData->_description);
_displayName = CommonHelper::stringToQstring(pDAOData->_displayName);
_version = pDAOData->_version;
_isDeleted = pDAOData->_isDeleted;
_isReleased = pDAOData->_isReleased;
_isVerLocked = pDAOData->_isVersionLocked;
}
/*<2A><><EFBFBD><EFBFBD><E6B4A6>*/
//<2F><>ǰ<EFBFBD>汾ɾ<E6B1BE><C9BE><EFBFBD><EFBFBD>ʣ<EFBFBD><CAA3><EFBFBD><EFBFBD><EFBFBD>߰汾<DFB0><E6B1BE>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬
void DataModelData::downgradeVersion()
{
ProjectData* pProject = qobject_cast<ProjectData*>(_parent);
QList<DPData*> modelList;
pProject->findDatamodelByName(_name, modelList);
if (modelList.size() == 0)
{
return;
}
DataModelData* pDest = qobject_cast<DataModelData*>(modelList.at(0));
for (int i = 1; i < modelList.size(); i++)
{
DataModelData* pCur = qobject_cast<DataModelData*>(modelList.at(i));
if (pCur->_version > pDest->_version)
{
pDest = pCur;
}
}
pDest->_isVerLocked = 0;
pDest->saveSelf();
}
/*<2A><><EFBFBD><EFBFBD><EFBFBD>ݿ<EFBFBD><DDBF><EFBFBD>ɾ<EFBFBD><C9BE><EFBFBD><EFBFBD>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD>*/
bool DataModelData::deleteSelf()
{
if (_pDBDAO)
{
DBPlatformSpace::ResultMsg rm = _pDBDAO->delself();
if (rm.rCode == 0)
{
LOG(INFO) << CommonHelper::utf8ToStdString("M_EntityModelDAO.delself success");
if (_parent)
{
//<2F><><EFBFBD>ݿ<EFBFBD>ɾ<EFBFBD><C9BE><EFBFBD>ɹ<EFBFBD><C9B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD><DAB4><EFBFBD>Ŀ<EFBFBD><C4BF>ɾ<EFBFBD><C9BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģ<EFBFBD><C4A3>
_parent->deleteChild(_id);
removeChildinDPMap();
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
downgradeVersion();
return true;
}
else
{
//_parent = Null
LOG(ERROR) << CommonHelper::utf8ToStdString("DataModelData.parent Ϊnull ");
return false;
}
}
else
{
LOG(INFO) << CommonHelper::utf8ToStdString("M_EntityModelDAO.delself failed");
LOG(ERROR) << rm.rMsg;
//<2F><><EFBFBD><EFBFBD><EFBFBD>ݿ<EFBFBD>ɾ<EFBFBD><C9BE>ʧ<EFBFBD><CAA7>
return false;
}
}
else
{
//_pDBDAOΪ<4F><CEAA>
return false;
}
}
/*<2A><><EFBFBD><EFBFBD>*/
bool DataModelData::upgradeVersion(DataModelData*& pNew)
{
using namespace DBPlatformSpace;
ResultMsg rm;
if (_pDBDAO)
{
M_EntityModelDAO* pNewModelDAO = dynamic_cast<M_EntityModelDAO*>(pNew->_pDBDAO);
if (!pNewModelDAO)
{
pNewModelDAO = new M_EntityModelDAO();
}
M_EntityModelDAO* pModelDAO = dynamic_cast<M_EntityModelDAO*>(_pDBDAO);
// int newVersionModelId = 0;
rm = pModelDAO->upgradeNewVersion(pNewModelDAO);
if (rm.rCode == 0)
{
LOG(INFO) << CommonHelper::utf8ToStdString("M_EntityModelDAO.upgradeNewVersion success");
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģ<EFBFBD>͸<EFBFBD>ֵ
pNew->loadData(pNewModelDAO);
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ԭģ<D4AD><C4A3><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD>
this->_isVerLocked = pModelDAO->_isVersionLocked;
return true;
}
else
{
LOG(INFO) << CommonHelper::utf8ToStdString("M_EntityModelDAO.upgradeNewVersion failed");
LOG(ERROR) << rm.rMsg;
return false;
}
}
return false;
}
/*ʵ<><CAB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
bool DataModelData::createInstance(QString& msg)
{
using namespace DBPlatformSpace;
ResultMsg rm;
//ѡ<><D1A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʵ<EFBFBD><CAB5><EFBFBD>ļ<EFBFBD>ȫ·<C8AB><C2B7>
QString file = QFileDialog::getSaveFileName(nullptr, tr("<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʵ<EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD>"), "", "", nullptr, QFileDialog::DontConfirmOverwrite);
if (file.isEmpty())
{
msg = "δѡ<EFBFBD><EFBFBD>ʵ<EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD>·<EFBFBD><EFBFBD>";
return false;
}
QFileInfo selectFile(file);
if (selectFile.isFile() )
{
//<2F>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD>
msg = "<EFBFBD>ļ<EFBFBD><EFBFBD>Ѵ<EFBFBD><EFBFBD>ڣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>";
return false;
}
//<2F>ֱ<EFBFBD><D6B1><EFBFBD>ȡ·<C8A1><C2B7><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD>
int pos = file.lastIndexOf("/");
QString path = file.left(pos);
QString name = file.right(file.size() - pos - 1);
//<2F><><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD>
QFileInfoList filelist;
QDir dir(path);
for each (QFileInfo info in dir.entryInfoList(QDir::Files))
{
filelist.append(info);
}
if (_pDBDAO)
{
M_EntityModelDAO* pModel = dynamic_cast<M_EntityModelDAO*>(_pDBDAO);
rm = pModel->createInstance(CommonHelper::qstringToStdString(path), CommonHelper::qstringToStdString(name));
if (rm.rCode == 0)
{
LOG(INFO) << CommonHelper::utf8ToStdString("M_EntityModelDAO.createInstance success");
return true;
}
else
{
LOG(INFO) << CommonHelper::utf8ToStdString("M_EntityModelDAO.createInstance failed");
LOG(ERROR) << rm.rMsg;
msg = "<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʵ<EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD>ʧ<EFBFBD><EFBFBD>";
return false;
}
}
msg = "<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>־";
LOG(ERROR) << "createInstance: _pDBDAO is null";
return false;
}
/*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģ<EFBFBD><C4A3>*/
bool DataModelData::copyData(DataModelData*& pNew, json& parameter)
{
auto data = parameter["data"];
using namespace DBPlatformSpace;
ResultMsg rm;
M_EntityModelDAO* pModelDAO = dynamic_cast<M_EntityModelDAO*>(_pDBDAO);
if (pModelDAO)
{
M_EntityModelDAO* pNewModelDAO = dynamic_cast<M_EntityModelDAO*>(pNew->_pDBDAO);
if (!pNewModelDAO)
{
pNewModelDAO = new M_EntityModelDAO();
}
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģ<EFBFBD><C4A3>ȷ<EFBFBD><C8B7><EFBFBD><EFBFBD><EFBFBD>Ʊ<EFBFBD>ʶ
QString newDisplayName = _displayName + "_[" + QString::number(_version) + "]" + "<EFBFBD><EFBFBD><EFBFBD><EFBFBD>";
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֤,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
int nameId = 0;
QString newName = newDisplayName;
while (isDuplicatName(newName, "displayName"))
{
nameId += 1;
newName = newDisplayName + QString::number(nameId);
}
pNewModelDAO->_displayName = CommonHelper::qstringToStdString(newName);
//<2F><><EFBFBD>Ʊ<EFBFBD>ʶ<EFBFBD><CAB6><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>
QString nameFlag;
if (!data["label"].is_null())
{
nameFlag = CommonHelper::utf8ToQString(data["label"]);
}
if (nameFlag.isEmpty())
{
//<2F><><EFBFBD><EFBFBD>Ϊ<EFBFBD>գ<EFBFBD><D5A3>Զ<EFBFBD><D4B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
nameFlag = _name;
int nameId = 0;
newName = nameFlag;
while (isDuplicatName(newName, "name"))
{
nameId += 1;
newName = nameFlag + QString::number(nameId);
}
pNewModelDAO->_name = CommonHelper::qstringToStdString(newName);
}
rm = pModelDAO->copyTo(pNewModelDAO);
if (rm.rCode == 0)
{
LOG(INFO) << CommonHelper::utf8ToStdString("M_EntityModelDAO.copyTo success");
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģ<EFBFBD>͸<EFBFBD>ֵ
pNew->loadData(pNewModelDAO);
_parent->_childrenMap.insert(pNew->_id, pNew);
return true;
}
else
{
LOG(INFO) << CommonHelper::utf8ToStdString("M_EntityModelDAO.copyTo failed");
LOG(ERROR) << rm.rMsg;
return false;
}
}
else
{
//Ϊ<>գ<EFBFBD>
return false;
}
}
void DataModelData::toJson(json& jsonObj, bool /*recursive*/)
{
jsonObj["id"] = _id;
jsonObj["name"] = CommonHelper::qstringToUtf8(_displayName);
jsonObj["type"] = _type;
jsonObj["identification"] = CommonHelper::qstringToUtf8(_name);
jsonObj["description"] = CommonHelper::qstringToUtf8(_description);
jsonObj["version"] = _version;
jsonObj["locked"] = _isVerLocked;
jsonObj["deleted"] = _isDeleted;
jsonObj["published"] = _isReleased;
jsonObj["createTime"] = CommonHelper::qstringToUtf8(getCreateTime());
jsonObj["updateTime"] = CommonHelper::qstringToUtf8(getUpdateTime());
jsonObj["classType"] = g_TYPE_DATAMODEL;
}
void DataModelData::removeChildinDPMap()
{
DataManager& mgr = GetDataRoot();
QMap<unsigned int, DPData*>::iterator it = _childrenMap.begin();
while (it != _childrenMap.end())
{
mgr.deleteInDataMap(DataManager::DataType::dataPack, (*it)->_id);
qobject_cast<DataPack*>(*it)->removeChildinDPMap();
it++;
}
}
//<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD><EFBFBD><EFBFBD>ģ<EFBFBD><C4A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
void DataModelData::getAllChildren(DPData* pManager, bool reload)
{
using namespace DBPlatformSpace;
ResultMsg rm;
DataManager* pMng = qobject_cast<DataManager*>(pManager);
//<2F><><EFBFBD>¼<EFBFBD><C2BC><EFBFBD>
if (reload)
{
removeChildinDPMap();
qDeleteAll(_childrenMap);
_childrenMap.clear();
_initChildren = false;
}
if (_initChildren)
{
return;
}
M_EntityModelDAO* pMoldeDAO = dynamic_cast<M_EntityModelDAO*>(_pDBDAO);
//<2F><>ȡ<EFBFBD><C8A1><EFBFBD>и<EFBFBD><D0B8><EFBFBD><EFBFBD><EFBFBD>ģ<EFBFBD><C4A3>
list<M_FolderDAO*> listDataPack;
rm = pMoldeDAO->getRootM_FolderDAOList(listDataPack);
if (rm.rCode != 0)
{
LOG(INFO) << CommonHelper::utf8ToStdString("M_EntityModelDAO.getRootM_FolderDAOList failed");
LOG(ERROR) << rm.rMsg;
return;
}
LOG(INFO) << CommonHelper::utf8ToStdString("M_EntityModelDAO.getRootM_FolderDAOList success");
_initChildren = true;
for (list<M_FolderDAO*>::iterator it = listDataPack.begin(); it != listDataPack.end(); ++it)
{
DataPack* pNew = new DataPack();
pNew->loadData(*it);
pNew->_parent = this;
pNew->_bIsChildPack = false;
_childrenMap.insert(pNew->_id, pNew);
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>map
pMng->insertDataMap(DataManager::DataType::dataPack, pNew->_id, pNew);
//ȡ<>²<EFBFBD><C2B2><EFBFBD>ģ<EFBFBD><C4A3>
pNew->getAllChildren(pMng);
}
}
void DataModelData::getNewProperty(json& parameter, QVariantMap& values)
{
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͨ<EFBFBD><CDA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//name des type
auto data = parameter["data"];
auto type = data["type"];
if (!data["name"].is_null())
{
values.insert("displayName", CommonHelper::utf8ToQString(data["name"]));
}
if (!data["type"].is_null())
{
values.insert("type", (int)data["type"]);
}
if (!data["description"].is_null())
{
values.insert("description", CommonHelper::utf8ToQString(data["description"]));
}
if (!data["identification"].is_null())
{ //<2F><><EFBFBD>Ʊ<EFBFBD>ʶ
values.insert("name", CommonHelper::utf8ToQString(data["identification"]));
}
}
void DataModelData::setNewData(json& parameter)
{
//<2F><>ǰʱ<C7B0><CAB1>
QString curTime = QDateTime::currentDateTime().toString("yyyy-MM-dd hh:mm");
QVariantMap valueMap;
getNewProperty(parameter, valueMap);
valueMap.insert("createTime", curTime);
valueMap.insert("updateTime", curTime);
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
setProperties(valueMap);
}
void DataModelData::setEditData(json& parameter)
{
//<2F><>ǰʱ<C7B0><CAB1>
QString curTime = QDateTime::currentDateTime().toString("yyyy-MM-dd hh:mm");
QVariantMap valueMap;
getNewProperty(parameter, valueMap);
valueMap.insert("updateTime", curTime);
setProperties(valueMap);
}
// bool DataModelData::isDuplicateDisplayName(QString name)
// {
// //<2F><><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģ<EFBFBD>ͣ<EFBFBD><CDA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͬ<EFBFBD><CDAC><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE><EFBFBD>ƣ<EFBFBD><C6A3>򷵻<EFBFBD>true.<2E><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>򷵻<EFBFBD>false
// //<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// DataManager* pManager = qobject_cast<DataManager*>(_parent->_parent);
// QMap<unsigned int, DPData*>::iterator it;
// QMap<unsigned int, DPData*> modelMap;
// pManager->getDataMap(DataManager::DataType::dataModel,modelMap);
// it = modelMap.begin();
// while (it != modelMap.end())
// {
// DataModelData* pModelData = qobject_cast<DataModelData*>(*it);
// if (pModelData->_displayName == name)
// {
// return true;
// }
// it++;
// }
// return false;
// }
//<2F><>ͬһ<CDAC><D2BB>Ŀ<EFBFBD><C4BF> <20><><EFBFBD><EFBFBD>/<2F><>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD> <20>Ƿ<EFBFBD><C7B7>ظ<EFBFBD>
bool DataModelData::isDuplicatName(QString name, QString propertyName)
{
// ProjectData* pManager = qobject_cast<ProjectData*>(_parent);
QMap<unsigned int, DPData*>::iterator it;
it = _parent->_childrenMap.begin();
while (it != _parent->_childrenMap.end())
{
QString n = (*it)->property(CommonHelper::qstringToString(propertyName)).toString();
if (n == name)
{
return true;
}
it++;
}
return false;
}
void DataModelData::takeRelationTableName()
{
DataManager& mgr = GetDataRoot();
//mn<6D><6E>ϵ<EFBFBD><CFB5>ͨ<EFBFBD><CDA8><EFBFBD><EFBFBD>ϵ<EFBFBD><CFB5>
QMap<unsigned int, DPData*> classMap;
mgr.getDataMap(DataManager::DataType::dataClass, classMap);
QList<unsigned int> keylist = classMap.keys();
for (int i = 0; i < keylist.size(); i++)
{
DataClass* pData = qobject_cast<DataClass*>(classMap.value(keylist.at(i)));
if (pData->_type == g_RELATED_CLASS)
{
if (pData->getDataModelOwner()->_id == _id)
{
QString mnRelName = pData->_name.right(pData->_name.size() - 3);
//"_"<22><>λ<EFBFBD><CEBB>
int pos = mnRelName.indexOf("_");
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
QString mainClassName = mnRelName.left(pos);
DPData* pMain = nullptr;
while (!pMain)
{
pMain = mgr.findobjectByNameInDatamodel(g_RELATED_CLASS, "name", mainClassName, _id);
if (pMain)
{
break;
}
pos = mnRelName.indexOf("_", pos + 1); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>
if (pos == -1)
{
return;
}
mainClassName = mnRelName.left(pos);
}
QString subName = mnRelName.right(mnRelName.size() - pos - 1);
DataClass* pSubClass = qobject_cast<DataClass*>(mgr.findobjectByNameInDatamodel(g_RELATED_CLASS, "name", subName, _id));
if (pSubClass)
{
qobject_cast<DataClass*>(pMain)->_fkTableName.append(pSubClass->_strDisplayName);
qobject_cast<DataClass*>(pMain)->_relTableName.append(pData->_strDisplayName);
qobject_cast<DataClass*>(pMain)->_fkTypeName.append("m:n");
pSubClass->_fkTableName.append(qobject_cast<DataClass*>(pMain)->_strDisplayName);
pSubClass->_relTableName.append(pData->_strDisplayName);
pSubClass->_fkTypeName.append("m:n");
}
}
}
}
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϵ
QMap<unsigned int, DPData*> attributeMap;
mgr.getDataMap(DataManager::DataType::dataAttribute, attributeMap);
keylist = attributeMap.keys();
for (int i = 0; i < keylist.size(); i++)
{
QString rel;
DataAttribute* pData = qobject_cast<DataAttribute*>(attributeMap.value(keylist.at(i)));
if (pData->_FKType != 0)
{
if (pData->_FKType == RELATION_11)
{
rel = "1:1";
}
else if (pData->_FKType == RELATION_1N)
{
rel = "1:n/n:1";
}
//<2F><><EFBFBD>ҹ<EFBFBD>ϵ<EFBFBD><CFB5>
DataClass* pRelClass = qobject_cast<DataClass*>(mgr.findObjectById(DataManager::DataType::dataClass, pData->_wFkTableID));
if (pRelClass)
{
qobject_cast<DataClass*>(pData->_parent)->_fkTypeName.append(rel);
qobject_cast<DataClass*>(pData->_parent)->_fkTableName.append(pRelClass->_strDisplayName);
qobject_cast<DataClass*>(pData->_parent)->_relTableName.append(" ");
pRelClass->_fkTypeName.append(rel);
pRelClass->_fkTableName.append(qobject_cast<DataClass*>(pData->_parent)->_strDisplayName);
pRelClass->_relTableName.append(" ");
}
}
}
}
void DataModelData::setFileData(FileGenerate* generator, QStringList qs)
{
//<2F><><EFBFBD><EFBFBD>
generator->CoverRightItem.append(new CCS_Report::CCSModelDataSet("", "v" + QString::number(_version)));
/*QList<QObject*> ModelItem;*/
generator->ModelItem.append(new CCS_Report::CCSModelDataSet(_parent->_name, _displayName));
takeRelationTableName();
QMap<unsigned int, DPData*>::iterator it = _childrenMap.begin();
int id = 0;
QStringList flaglist;
flaglist << QString::number(id);
while (it != _childrenMap.end())
{
flaglist.replace(0, QString::number(id));
(*it)->setFileData(generator, flaglist);
id++;
it++;
}
}