643 lines
17 KiB
C++
643 lines
17 KiB
C++
|
#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++;
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
}
|
|||
|
|