DPS/DataPlatform/DataPack.cpp

724 lines
20 KiB
C++
Raw Normal View History

2025-06-23 10:41:33 +08:00
#pragma execution_character_set("utf-8")
#include "DataPack.h"
#include <QDateTime>
#include "M_EntityModelDAO.h"
#include "M_EntityTableDAO.h"
#include "M_FolderDAO.h"
#include "DataManager.h"
#include "DataClass.h"
#include "global.h"
#include "DataModelData.h"
#include "SceneInfo.h"
#include "M_SceneInfoDAO.h"
#include < regex >
2025-06-23 18:01:09 +08:00
//数据模块
2025-06-23 10:41:33 +08:00
DataPack::DataPack()
{
_baseType = g_TYPE_DATAPACK;
}
DataPack::~DataPack()
{
}
void static backupDAOData(DBPlatformSpace::M_FolderDAO& src, DBPlatformSpace::M_FolderDAO& dst)
{
}
void static restoreData(DBPlatformSpace::M_FolderDAO& src, DataPack& dst)
{
2025-06-23 18:01:09 +08:00
//主要恢复界面属性值和updateTime值
2025-06-23 10:41:33 +08:00
}
2025-06-23 18:01:09 +08:00
/*移去所有children*/
2025-06-23 10:41:33 +08:00
void DataPack::removeChildinDPMap()
{
DataManager& mgr = GetDataRoot();
QMap<unsigned int, DPData*>::iterator it = _childrenMap.begin();
while (it != _childrenMap.end())
{
if ((*it)->_baseType == g_TYPE_DATAPACK)
{
mgr.deleteInDataMap(DataManager::DataType::dataPack, (*it)->_id);
qobject_cast<DataPack*>(*it)->removeChildinDPMap();
it++;
}
else if ((*it)->_baseType == g_TYPE_DATACLASS)
{
mgr.deleteInDataMap(DataManager::DataType::dataClass, (*it)->_id);
qobject_cast<DataClass*>(*it)->removeChildinDPMap();
it++;
}
}
}
void DataPack::saveToDao()
{
using namespace DBPlatformSpace;
M_FolderDAO* pDao = dynamic_cast<M_FolderDAO*>(_pDBDAO);
if (pDao == nullptr)
{
pDao = new M_FolderDAO();
_pDBDAO = pDao;
}
// pDao->_ID = getID();
2025-06-23 18:01:09 +08:00
pDao->_name = CommonHelper::qstringToStdString(getName()); //数据模型标识
2025-06-23 10:41:33 +08:00
pDao->_displayName = CommonHelper::qstringToStdString(_strDisplayName);
pDao->_folderType = _folderType;
pDao->_description = CommonHelper::qstringToStdString(_strDescription);
pDao->_isGenerateDAO = _bIsGenerateTable;
}
2025-06-23 18:01:09 +08:00
/*保存本身数据*/
2025-06-23 10:41:33 +08:00
bool DataPack::saveSelf()
{
using namespace DBPlatformSpace;
ResultMsg rm;
2025-06-23 18:01:09 +08:00
/*将这条项目数据写入数据库*/
2025-06-23 10:41:33 +08:00
M_FolderDAO* pDao = dynamic_cast<M_FolderDAO*>(_pDBDAO);
2025-06-23 18:01:09 +08:00
/*备份DAO数据*/
2025-06-23 10:41:33 +08:00
M_FolderDAO oldDaoData;
if (pDao == nullptr)
{
pDao = new M_FolderDAO();
_pDBDAO = pDao;
}
else
{
backupDAOData(*pDao, oldDaoData);
}
saveToDao();
rm = pDao->save();
if (rm.rCode == 0)
{
LOG(INFO) << CommonHelper::utf8ToStdString("M_EntityTableDAO.save success");
return true;
}
else
{
LOG(INFO) << CommonHelper::utf8ToStdString("M_EntityTableDAO.save failed");
LOG(ERROR) << rm.rMsg;
restoreData(oldDaoData, *this);
return false;
}
}
2025-06-23 18:01:09 +08:00
/*增加下层数据*/
2025-06-23 10:41:33 +08:00
bool DataPack::addChild(DPData* pNewData)
{
2025-06-23 18:01:09 +08:00
//判断是增加数据类还是子模块
2025-06-23 10:41:33 +08:00
using namespace DBPlatformSpace;
ResultMsg rm;
if (pNewData->_baseType == g_TYPE_DATAPACK)
{
M_FolderDAO* pPackDAO = dynamic_cast<M_FolderDAO*>(_pDBDAO);
pNewData->saveToDao();
M_FolderDAO* pNewDAO = dynamic_cast<M_FolderDAO*>(pNewData->_pDBDAO);
rm = pPackDAO->addM_SubFolderDAO(pNewDAO);
if (rm.rCode == 0)
{
LOG(INFO) << CommonHelper::utf8ToStdString("M_EntityTableDAO.addM_SubFolderDAO success");
pNewData->_id = pNewDAO->_ID;
pNewData->_parent = this;
_childrenMap.insert(pNewData->_id, pNewData);
return true;
}
else
{
LOG(INFO) << CommonHelper::utf8ToStdString("M_EntityTableDAO.addM_SubFolderDAO failed");
LOG(ERROR) << rm.rMsg;
return false;
}
}
else /*if (pNewData->_baseType == g_TYPE_DATACLASS)*/
{
// qobject_cast<DataClass*>(pNewData)->reName();
pNewData->saveToDao();
M_FolderDAO* pPackDAO = dynamic_cast<M_FolderDAO*>(_pDBDAO);
M_EntityTableDAO* pNewClassDAO = dynamic_cast<M_EntityTableDAO*>(pNewData->_pDBDAO);
QString msg = "DataPack::addClass:newClass:" + QString::number(pNewClassDAO->_ID) + "--" + CommonHelper::stringToQstring(pNewClassDAO->_name);
LOG(INFO) << CommonHelper::qstringToString(msg);
rm = pPackDAO->addM_EntityTableDAO(pNewClassDAO);
if (rm.rCode == 0)
{
LOG(INFO) << CommonHelper::utf8ToStdString("M_FolderDAO.addM_EntityTableDAO success");
DataClass* pNewTable = qobject_cast<DataClass*>(pNewData);
pNewTable->_id = pNewClassDAO->_ID;
2025-06-23 18:01:09 +08:00
//version相关从数据库来 innerName从数据库来
2025-06-23 10:41:33 +08:00
pNewTable->_wCreateVersion = pNewClassDAO->_addVersion;
pNewTable->_wDeleteVersion = pNewClassDAO->_delVersion;
pNewTable->_strInternalName = CommonHelper::stringToQstring(pNewClassDAO->_innerName);
pNewTable->_parent = this;
2025-06-23 18:01:09 +08:00
//dao中的是否删除 要不要保存?
2025-06-23 10:41:33 +08:00
_childrenMap.insert(pNewData->_id, pNewData);
QString msg = "DataPack::addend:" + QString::number(pNewClassDAO->_ID) + "--" + CommonHelper::stringToQstring(pNewClassDAO->_name);
LOG(INFO) << CommonHelper::qstringToString(msg);
return true;
}
else
{
LOG(INFO) << CommonHelper::utf8ToStdString("M_FolderDAO.addM_EntityTableDAO failed");
LOG(ERROR) << rm.rMsg;
return false;
}
}
}
2025-06-23 18:01:09 +08:00
/*删除一条child数据*/
2025-06-23 10:41:33 +08:00
bool DataPack::deleteChild(unsigned int id)
{
if (_childrenMap.remove(id))
{
return true;
}
else
{
return false;
}
}
2025-06-23 18:01:09 +08:00
/*删除本对象*/
2025-06-23 10:41:33 +08:00
bool DataPack::deleteSelf()
{
if (_pDBDAO)
{
DBPlatformSpace::ResultMsg rm = _pDBDAO->delself();
if (rm.rCode == 0)
{
LOG(INFO) << CommonHelper::utf8ToStdString("M_FolderDAO.delself success");
if (_parent)
{
_parent->deleteChild(_id);
removeChildinDPMap();
return true;
}
else
{
2025-06-23 18:01:09 +08:00
//_parent为空
2025-06-23 10:41:33 +08:00
return false;
}
}
else
{
LOG(INFO) << CommonHelper::utf8ToStdString("M_FolderDAO.delself failed");
LOG(ERROR) << rm.rMsg;
2025-06-23 18:01:09 +08:00
//数据库删除失败
2025-06-23 10:41:33 +08:00
return false;
}
}
else
{
2025-06-23 18:01:09 +08:00
//_pDBDAO为空
2025-06-23 10:41:33 +08:00
return false;
}
}
bool DataPack::deleteSelf(QString& result)
{
if (_pDBDAO)
{
using namespace DBPlatformSpace;
ResultMsg rm;
std::string resultStr;
M_FolderDAO* pFolder = dynamic_cast<M_FolderDAO*>(_pDBDAO);
rm = pFolder->delself(resultStr);
if (rm.rCode == 0)
{
LOG(INFO) << CommonHelper::utf8ToStdString("M_FolderDAO.delself success ");
result = CommonHelper::stringToQstring(resultStr);
DataClass::resolveDeleteResult(result);
2025-06-23 18:01:09 +08:00
//删除child
2025-06-23 10:41:33 +08:00
_parent->deleteChild(_id);
removeChildinDPMap();
return true;
}
else
{
LOG(INFO) << CommonHelper::utf8ToStdString("M_FolderDAO.delself failed ");
LOG(ERROR) << rm.rMsg;
2025-06-23 18:01:09 +08:00
//数据库删除失败
2025-06-23 10:41:33 +08:00
return false;
}
}
else
{
return false;
}
}
2025-06-23 18:01:09 +08:00
/*从数据库加载一条数据到当前对象*/
2025-06-23 10:41:33 +08:00
void DataPack::loadData(DBPlatformSpace::DAO* pDao)
{
_pDBDAO = pDao;
2025-06-23 18:01:09 +08:00
//将DAO数据存入DataModelData对象
2025-06-23 10:41:33 +08:00
DBPlatformSpace::M_FolderDAO* pDAOData = dynamic_cast<DBPlatformSpace::M_FolderDAO*>(_pDBDAO);
setID(pDAOData->_ID);
2025-06-23 18:01:09 +08:00
setName(CommonHelper::stringToQstring(pDAOData->_name)); //数据模型标识
2025-06-23 10:41:33 +08:00
_folderType = pDAOData->_folderType;
_strDescription = CommonHelper::stringToQstring(pDAOData->_description);
_strDisplayName = CommonHelper::stringToQstring(pDAOData->_displayName);
_bIsGenerateTable = pDAOData->_isGenerateDAO;
_wCreateVersion = pDAOData->_addVersion;
}
2025-06-23 18:01:09 +08:00
/*获取所有下层数据*/
2025-06-23 10:41:33 +08:00
void DataPack::getAllChildren(DPData* pManager)
{
if (!_initSubPack || !_initDataClass)
{
2025-06-23 18:01:09 +08:00
//获取子模块
2025-06-23 10:41:33 +08:00
getSubPack(pManager);
2025-06-23 18:01:09 +08:00
//获取下层数据类
2025-06-23 10:41:33 +08:00
getDataClassAndAttribute(pManager);
}
// else
// {
// this->toJson(jsonObj, true);
// }
}
void DataPack::toJson(json& jsonObj, bool recursive)
{
jsonObj["id"] = _id;
jsonObj["label"] = CommonHelper::qstringToUtf8(_strDisplayName);
jsonObj["type"] = _folderType;
jsonObj["name"] = CommonHelper::qstringToUtf8(_name);
jsonObj["description"] = CommonHelper::qstringToUtf8(_strDescription);
jsonObj["classType"] = g_TYPE_DATAPACK;
jsonObj["canCreateTable"] = CommonHelper::intTobool(_bIsGenerateTable);
jsonObj["version"] = _wCreateVersion;
if (recursive) {
json subPacks;
QMap<unsigned int, DPData*>::iterator it = _childrenMap.begin();
while (it != _childrenMap.end())
{
2025-06-23 18:01:09 +08:00
//将对象信息转json
2025-06-23 10:41:33 +08:00
json child;
(*it)->toJson(child, recursive);
subPacks.push_back(child);
it++;
}
jsonObj["children"] = subPacks;
}
}
2025-06-23 18:01:09 +08:00
//获取子模块
2025-06-23 10:41:33 +08:00
void DataPack::getSubPack(DPData* pManager)
{
using namespace DBPlatformSpace;
ResultMsg rm;
DataManager* pMng = qobject_cast<DataManager*>(pManager);
if (!_initSubPack)
{
list<M_FolderDAO*> folderDAOList;
M_FolderDAO* pCurFolderDAO = dynamic_cast<M_FolderDAO*>(_pDBDAO);
rm = pCurFolderDAO->getSubFolderDAOList(folderDAOList);
if (rm.rCode == 0)
{
LOG(INFO) << CommonHelper::utf8ToStdString("M_FolderDAO.getSubFolderDAOList success");
for (list<M_FolderDAO*>::iterator it = folderDAOList.begin(); it != folderDAOList.end(); ++it)
{
2025-06-23 18:01:09 +08:00
//加载当前模块
2025-06-23 10:41:33 +08:00
DataPack* pNew = new DataPack();
pNew->loadData(*it);
int id = (*it)->_ID;
2025-06-23 18:01:09 +08:00
// 加入到map
2025-06-23 10:41:33 +08:00
pNew->_parent = this;
pNew->_bIsChildPack = true;
_childrenMap.insert(id, pNew);
pMng->insertDataMap(DataManager::DataType::dataPack, id, pNew);
2025-06-23 18:01:09 +08:00
//获取子模块
2025-06-23 10:41:33 +08:00
pNew->getAllChildren(pMng);
}
_initSubPack = true;
}
else
{
2025-06-23 18:01:09 +08:00
//组件接口执行失败
2025-06-23 10:41:33 +08:00
LOG(INFO) << CommonHelper::utf8ToStdString("M_FolderDAO.getSubFolderDAOList failed");
LOG(ERROR) << rm.rMsg;
}
}
}
2025-06-23 18:01:09 +08:00
//获取数据类
2025-06-23 10:41:33 +08:00
void DataPack::getDataClassAndAttribute(DPData* pManager)
{
using namespace DBPlatformSpace;
ResultMsg rm;
DataManager* pMng = qobject_cast<DataManager*>(pManager);
if (!_initDataClass)
{
list<M_EntityTableDAO*> tableDAOList;
M_FolderDAO* pFolderDao = dynamic_cast<M_FolderDAO*>(_pDBDAO);
rm = pFolderDao->getM_EntityTableDAOList(tableDAOList);
if (rm.rCode != 0)
{
LOG(INFO) << CommonHelper::utf8ToStdString("M_FolderDAO.getM_EntityTableDAOList failed");
LOG(ERROR) << rm.rMsg;
return;
}
LOG(INFO) << CommonHelper::utf8ToStdString("M_FolderDAO.getM_EntityTableDAOList success");
for (list<M_EntityTableDAO*>::iterator it = tableDAOList.begin(); it != tableDAOList.end(); ++it)
{
2025-06-23 18:01:09 +08:00
//加载当前数据类并加到当前数据模块的下层
2025-06-23 10:41:33 +08:00
DataClass* pNew = new DataClass();
pNew->loadData(*it);
int id = (*it)->_ID;
pNew->_parent = this;
_childrenMap.insert(id, pNew);
pMng->insertDataMap(DataManager::DataType::dataClass, id, pNew);
2025-06-23 18:01:09 +08:00
//获取当前数据类的下层数据属性
2025-06-23 10:41:33 +08:00
pNew->getAllChildren(pManager);
//findby
if (!pNew->getFindByInterface())
{
2025-06-23 18:01:09 +08:00
LOG(INFO) << CommonHelper::utf8ToStdString("获取查询接口失败");
2025-06-23 10:41:33 +08:00
}
//delby
if (!pNew->getDelByInterface())
{
2025-06-23 18:01:09 +08:00
LOG(INFO) << CommonHelper::utf8ToStdString("获取删除接口失败");
2025-06-23 10:41:33 +08:00
}
}
_initDataClass = true;
}
else
{
QMap<unsigned int, DPData*>::iterator it = _childrenMap.begin();
while (it != _childrenMap.end())
{
DataClass* pData = qobject_cast<DataClass*>(*it);
2025-06-23 18:01:09 +08:00
//将对象信息转json
2025-06-23 10:41:33 +08:00
json j;
j["id"] = pData->_id;
j["label"] = CommonHelper::qstringToUtf8(pData->_strDisplayName);
j["name"] = CommonHelper::qstringToUtf8(pData->_name);
j["type"] = pData->_type;
j["description"] = CommonHelper::qstringToUtf8(pData->_strDescription);
j["classType"] = g_TYPE_DATACLASS;
j["createVersion"] = pData->_wCreateVersion;
j["delVersion"] = pData->_wDeleteVersion;
j["innerName"] = CommonHelper::qstringToUtf8(pData->_strInternalName);
j["countType"] = pData->_wCountType;
it++;
}
}
}
2025-06-23 18:01:09 +08:00
/*获取新的属性*/
2025-06-23 10:41:33 +08:00
void DataPack::getNewProperty(json& parameter, QVariantMap& valueMap)
{
2025-06-23 18:01:09 +08:00
//显示名称、(名称标识)、模块类型、描述,是否生成表
2025-06-23 10:41:33 +08:00
//name,type,nameFlag,isGenerateTable
auto data = parameter["data"];
2025-06-23 18:01:09 +08:00
//显示名称
2025-06-23 10:41:33 +08:00
valueMap.insert("displayName", CommonHelper::utf8ToQString(data["label"]));
2025-06-23 18:01:09 +08:00
//模块类型
2025-06-23 10:41:33 +08:00
valueMap.insert("folderType", (int)data["type"]);
2025-06-23 18:01:09 +08:00
//名称标识
2025-06-23 10:41:33 +08:00
if (!data["name"].is_null())
{
valueMap.insert("name", CommonHelper::utf8ToQString(data["name"]));
}
2025-06-23 18:01:09 +08:00
//描述
2025-06-23 10:41:33 +08:00
valueMap.insert("description", CommonHelper::utf8ToQString(data["description"]));
2025-06-23 18:01:09 +08:00
//是否生成表
2025-06-23 10:41:33 +08:00
valueMap.insert("generateTable", (bool)data["canCreateTable"]);
}
void DataPack::setNewData(json& parameter)
{
QVariantMap newValues;
getNewProperty(parameter, newValues);
setProperties(newValues);
}
2025-06-23 18:01:09 +08:00
/*把当前数据模块移到目的数据模块*/
2025-06-23 10:41:33 +08:00
bool DataPack::moveData(json& parameter, DPData* pManager)
{
using namespace DBPlatformSpace;
ResultMsg rm;
DataManager* pMng = qobject_cast<DataManager*>(pManager);
auto data = parameter["data"];
2025-06-23 18:01:09 +08:00
//目标模块id
2025-06-23 10:41:33 +08:00
int dstPackId = data["parentid"];
2025-06-23 18:01:09 +08:00
//当前模块
2025-06-23 10:41:33 +08:00
M_FolderDAO* pCurPackDAO = dynamic_cast<M_FolderDAO*>(_pDBDAO);
2025-06-23 18:01:09 +08:00
//目的模块
2025-06-23 10:41:33 +08:00
DataPack* pdstPack = qobject_cast<DataPack*>(pMng->findObjectById(DataManager::DataType::dataPack, dstPackId));
M_FolderDAO* pDstPackDAO = dynamic_cast<M_FolderDAO*>(pdstPack->_pDBDAO);
2025-06-23 18:01:09 +08:00
//当前数据模块从上层移出(上层结点改变)
//当前模块是子模块还是模型下挂
2025-06-23 10:41:33 +08:00
if (pCurPackDAO->_t_M_FolderID > 0)
{
2025-06-23 18:01:09 +08:00
//该模块为子模块,查找上层模块结点,移出
2025-06-23 10:41:33 +08:00
M_FolderDAO* pfatherFolderDAO = dynamic_cast<M_FolderDAO*>(_parent->_pDBDAO);
if (pfatherFolderDAO)
{
2025-06-23 18:01:09 +08:00
//移除该子模块
2025-06-23 10:41:33 +08:00
rm = pfatherFolderDAO->removeSubFolderDAO(pCurPackDAO);
if (rm.rCode != 0)
{
2025-06-23 18:01:09 +08:00
//移除子模块失败
2025-06-23 10:41:33 +08:00
LOG(INFO) << CommonHelper::utf8ToStdString(" M_FolderDAO::removeSubFolderDAO failed");
LOG(ERROR) << rm.rMsg;
return false;
}
else
{
LOG(INFO) << CommonHelper::utf8ToStdString(" M_FolderDAO::removeSubFolderDAO success");
}
}
else
{
2025-06-23 18:01:09 +08:00
//找不到上层数据模块
QString msg = "找不到模块" + QString::number(pCurPackDAO->_ID) + "--" + CommonHelper::stringToQstring(pCurPackDAO->_name) + "的上层模块";
2025-06-23 10:41:33 +08:00
LOG(INFO) << CommonHelper::qstringToString(msg);
return false;
}
}
else
{
2025-06-23 18:01:09 +08:00
//根模块不需要作移出相关操作
2025-06-23 10:41:33 +08:00
}
2025-06-23 18:01:09 +08:00
//移入目标模块
2025-06-23 10:41:33 +08:00
rm = pDstPackDAO->addM_SubFolderDAO(pCurPackDAO);
if (rm.rCode == 0)
{
LOG(INFO) << CommonHelper::utf8ToStdString("M_FolderDAO::addM_SubFolderDAO success");
2025-06-23 18:01:09 +08:00
QString msg = "模块" + QString::number(pCurPackDAO->_ID) + "--" + CommonHelper::stringToQstring(pCurPackDAO->_name) + "移入目标模块" + CommonHelper::stringToQstring(pDstPackDAO->_name) + "成功";
2025-06-23 10:41:33 +08:00
LOG(INFO) << CommonHelper::qstringToString(msg);
2025-06-23 18:01:09 +08:00
//移入成功
_parent->_childrenMap.remove(_id); //内存中移出
//新的模块内存中加入
2025-06-23 10:41:33 +08:00
_parent = pdstPack;
pdstPack->_childrenMap.insert(_id, this);
return true;
}
else
{
LOG(INFO) << CommonHelper::utf8ToStdString("M_FolderDAO::addM_SubFolderDAO failed");
2025-06-23 18:01:09 +08:00
QString msg = "模块" + QString::number(pCurPackDAO->_ID) + "--" + CommonHelper::stringToQstring(pCurPackDAO->_name) + "移入目标模块" + CommonHelper::stringToQstring(pCurPackDAO->_name) + "失败";
2025-06-23 10:41:33 +08:00
LOG(INFO) << CommonHelper::qstringToString(msg);
LOG(ERROR) << rm.rMsg;
return false;
}
}
bool DataPack::addScene(DPData* pNew)
{
using namespace DBPlatformSpace;
ResultMsg rm;
SceneInfo* pScene = qobject_cast<SceneInfo*>(pNew);
2025-06-23 18:01:09 +08:00
//组件添加数据库
2025-06-23 10:41:33 +08:00
M_FolderDAO* pPackDao = dynamic_cast<M_FolderDAO*>(_pDBDAO);
pScene->saveToDao();
M_SceneInfoDAO* pSceneDao = dynamic_cast<M_SceneInfoDAO*>(pScene->_pDBDAO);
rm = pPackDao->addSceneInfo(pSceneDao);
if (rm.rCode == 0)
{
pScene->_id = pSceneDao->_ID;
pScene->_parent = this;
_sceneMap.insert(pScene->_id, pScene);
LOG(INFO) << CommonHelper::utf8ToStdString("M_FolderDAO.addSceneInfo success");
return true;
}
else
{
LOG(INFO) << CommonHelper::utf8ToStdString("M_FolderDAO.addSceneInfo failed");
LOG(INFO) << rm.rMsg;
return false;
}
}
bool DataPack::deleteScene(int id)
{
_sceneMap.remove(id);
return true;
}
//bool DataPack::moveScene(json& parameter)
//{
// return true;
//}
bool DataPack::getScene(DPData* pMg)
{
DataManager* pManager = qobject_cast<DataManager*>(pMg);
2025-06-23 18:01:09 +08:00
//获取
2025-06-23 10:41:33 +08:00
using namespace DBPlatformSpace;
ResultMsg rm;
list<M_SceneInfoDAO*> sceneList;
M_FolderDAO* pPackDao = dynamic_cast<M_FolderDAO*>(_pDBDAO);
rm = pPackDao->getSceneInfoList(sceneList);
if (rm.rCode == 0)
{
for (list<M_SceneInfoDAO*>::iterator it = sceneList.begin(); it != sceneList.end(); ++it)
{
SceneInfo* pScene;
if (_sceneMap.contains((*it)->_ID))
{
2025-06-23 18:01:09 +08:00
//确保统一,可从数据库覆盖
2025-06-23 10:41:33 +08:00
pScene = _sceneMap.value((*it)->_ID);
pScene->loadData(*it);
}
else
{
pScene = new SceneInfo();
pScene->loadData(*it);
pScene->_parent = this;
_sceneMap.insert(pScene->_id, pScene);
pManager->insertDataMap(DataManager::DataType::scene, pScene->_id, pScene);
}
}
LOG(INFO) << CommonHelper::utf8ToStdString("M_FolderDAO.getSceneInfoList success");
return true;
}
else
{
LOG(INFO) << CommonHelper::utf8ToStdString("M_FolderDAO.getSceneInfoList failed");
LOG(INFO) << rm.rMsg;
return false;
}
}
bool DataPack::generateCode(/*DPData* pManager,*/ QStringList& qfileList)
{
2025-06-23 18:01:09 +08:00
//代码生成路径?生成文件列表?
2025-06-23 10:41:33 +08:00
using namespace DBPlatformSpace;
ResultMsg rm;
SysManager& sysMgr = GetSysManager();
QString codeFileFolderPath = sysMgr._codeGeneratePath;
codeFileFolderPath += "/C++/";
list<string> fileList;
// DataModelData* pModel = qobject_cast<DataModelData*>(getDataModelOwner());
// M_EntityModelDAO* pModelDao = dynamic_cast<M_EntityModelDAO*>(pModel->_pDBDAO);
M_FolderDAO* pFolderDao = dynamic_cast<M_FolderDAO*>(_pDBDAO);
rm = pFolderDao->CreateCode(/*pModelDao, */string(codeFileFolderPath.toLocal8Bit()), fileList);
if (rm.rCode == 0)
{
for (auto i : fileList)
{
qfileList.append(CommonHelper::stringToQstring(i));
}
LOG(INFO) << CommonHelper::utf8ToStdString("M_EntityTableDAO.CreateCode success");
return true;
}
LOG(INFO) << CommonHelper::utf8ToStdString("DataPack:M_EntityTableDAO.CreateCode failed");
LOG(INFO) << rm.rMsg;
return false;
}
void DataPack::setFileData(FileGenerate* generator, QStringList flag)
{
2025-06-23 18:01:09 +08:00
int pos = flag.size(); //替换的标识位置
2025-06-23 10:41:33 +08:00
if (flag.size() == 1)
{
2025-06-23 18:01:09 +08:00
//根模块
2025-06-23 10:41:33 +08:00
generator->PackItem.append(new CCS_Report::CCSModelDataSet(flag[0]));
generator->RootPack.append(new CCS_Report::CCSModelDataSet(flag[0], _strDisplayName));
generator->PackTable.append(new CCS_Report::CCSModelDataSet(flag[0], _strDisplayName, _name, CommonHelper::convertFolderTypeToString(_folderType), CommonHelper::convertPropertyValue(_bIsGenerateTable), ""));
}
if (flag.size() == 2)
{
2025-06-23 18:01:09 +08:00
//第二层(第一层子模块)
2025-06-23 10:41:33 +08:00
generator->ChildPackItem.append(new CCS_Report::CCSModelDataSet(flag[0], flag[1]));
generator->ChildPack1.append(new CCS_Report::CCSModelDataSet(flag[0], flag[1], _strDisplayName));
generator->ChildPackTable.append(new CCS_Report::CCSModelDataSet(flag[0], flag[1], _strDisplayName, _name, CommonHelper::convertFolderTypeToString(_folderType), CommonHelper::convertPropertyValue(_bIsGenerateTable), _parent->_name));
}
else if (flag.size() == 3)
{
2025-06-23 18:01:09 +08:00
//第三层
2025-06-23 10:41:33 +08:00
generator->Ch_childPackItem.append(new CCS_Report::CCSModelDataSet(flag[0], flag[1], flag[2]));
generator->ChildPack2.append(new CCS_Report::CCSModelDataSet(flag[0], flag[1], flag[2], _strDisplayName));
generator->Ch_childPackTable.append(new CCS_Report::CCSModelDataSet(flag[0], flag[1], flag[2], _strDisplayName, _name, CommonHelper::convertFolderTypeToString(_folderType), CommonHelper::convertPropertyValue(_bIsGenerateTable), _parent->_name));
}
if (_childrenMap.size() > 0)
{
QMap<unsigned int, DPData*>::iterator it = _childrenMap.begin();
int id = 0;
flag << QString::number(id);
while (it != _childrenMap.end())
{
flag.replace(pos, QString::number(id));
(*it)->setFileData(generator, flag);
it++;
id++;
}
}
}
2025-06-23 18:01:09 +08:00
//判断名称标识size>=2且其它满足名称标识命名规则
//true 为不合法 false 为合法
2025-06-23 10:41:33 +08:00
bool DataPack::checkNameillegal( QString& errMsg)
{
if (_name.size() < 3 || _name.size() > 128)
{
2025-06-23 18:01:09 +08:00
errMsg = _name + " 名称标识长度有误";
2025-06-23 10:41:33 +08:00
return true;
}
else
{
if (!_name.at(0).isLetter())
{
2025-06-23 18:01:09 +08:00
errMsg = _name + " 模块名称标识首位只能是字母";
2025-06-23 10:41:33 +08:00
return true;
}
if (!_name.at(2).isLetter())
{
2025-06-23 18:01:09 +08:00
errMsg = _name +" 模块名称标识第3位只能是字母";
2025-06-23 10:41:33 +08:00
return true;
}
bool foundmatch = false;
try {
2025-06-23 18:01:09 +08:00
std::regex re(R"(^[\w\(\)\[\]\\]+$)");
2025-06-23 10:41:33 +08:00
foundmatch = std::regex_search(_name.toStdString(), re);
}
catch (std::regex_error& e) {
// Syntax error in the regular expression
}
if (foundmatch)
{
return false;
}
else
{
2025-06-23 18:01:09 +08:00
errMsg = "模块名称标识 " + _name + " 含无效字符";
2025-06-23 10:41:33 +08:00
return true;
}
}
}