#include #include "dataManager.h" #include "dataBase.h" DataManager& DataManager::instance() { //采用静态局部变量的方式,静态局部变量的初始化是在第一次访问时,以后的调用不会多次初始化,并且生命周期和程序一致 static DataManager instance; return instance; } DataManager::DataManager(QObject *parent) : QObject(parent) { _stateInitialised = false; _dataInitialised = false; } DataManager::~DataManager() { } void DataManager::initialModelState(bool refresh) { QMap model = DataBase::GetInstance()->getAllProjectModel(); if(refresh) { for(auto &info:_modelStateInfo) { info.release(); } _modelStateInfo.clear(); } QMap::Iterator iter; for(iter = model.begin();iter != model.end(); ++iter) //遍历模型 { modelStateInfo modelInfo; modelInfo.modelType = iter.value(); //模型类型 modelInfo.modelName = iter.key(); QMap mapState = DataBase::GetInstance()->getModelInfo(iter.key()); QMap mapPublic = DataBase::GetInstance()->getPublicInfo(); //公共属性组 QMap::Iterator it; for(it = mapPublic.begin();it != mapPublic.end();++it) //遍历公共属性组 { groupStateInfo groupInfo; groupInfo.groupName = it.key(); groupInfo.tableName = it->tableName; groupInfo.isPublic = true; QJsonArray nodesJsonArray = it->propertyState["checkState"].toArray(); for (QJsonValueRef nodeJson : nodesJsonArray) //每个属性的状态信息 { propertyStateInfo propertyInfo; QJsonObject node = nodeJson.toObject(); QString propertyName = node["name"].toString(); int nState = node["checked"].toInt(); QString dataType = node["type"].toString(); QVariant defaultValue = node["defaultValue"].toVariant(); int lengthPrecision = node["lengthPrecision"].toInt(); if(nState) { propertyInfo.name = propertyName; propertyInfo.type = dataType; propertyInfo.defaultValue = defaultValue; propertyInfo.lengthPrecision = lengthPrecision; groupInfo.info.insert(propertyName,propertyInfo); } } modelInfo.groupInfo.insert(it.key(),groupInfo); } for(it = mapState.begin();it != mapState.end();++it) //遍历模型属性组 { groupStateInfo groupInfo; groupInfo.groupName = it.key(); groupInfo.tableName = it->tableName; QJsonArray nodesJsonArray = it->propertyState["checkState"].toArray(); for (QJsonValueRef nodeJson : nodesJsonArray) //每个属性的状态信息 { propertyStateInfo propertyInfo; QJsonObject node = nodeJson.toObject(); QString propertyName = node["name"].toString(); int nState = node["checked"].toInt(); QString dataType = node["type"].toString(); QVariant defaultValue = node["defaultValue"].toVariant(); int lengthPrecision = node["lengthPrecision"].toInt(); if(nState) { //todo:别名赋值 propertyInfo.name = propertyName; propertyInfo.type = dataType; propertyInfo.defaultValue = defaultValue; propertyInfo.lengthPrecision = lengthPrecision; groupInfo.info.insert(propertyName,propertyInfo); } } modelInfo.groupInfo.insert(it.key(),groupInfo); } _modelStateInfo.insert(iter.key(),modelInfo); } _stateInitialised = true; } void DataManager::initialModelData(bool refresh) { QMap model = DataBase::GetInstance()->getAllProjectModel(); if(refresh) { _modleDataInfo.clear(); } QMap::Iterator iter; for(iter = model.begin();iter != model.end(); ++iter) //遍历模型 { modelDataInfo modelInfo; modelInfo.modelType = iter.value(); //模型类型 modelInfo.modelName = iter.key(); QMap mapState = DataBase::GetInstance()->getModelInfo(iter.key()); QMap mapPublic = DataBase::GetInstance()->getPublicInfo(); //公共属性组 QMap::Iterator it; for(it = mapPublic.begin();it != mapPublic.end();++it) //遍历公共属性组 { groupStateValue groupValue; groupValue.groupName = it.key(); groupValue.tableName = it->tableName; QJsonArray nodesJsonArray = it->propertyState["checkState"].toArray(); QMap mapPro; for (QJsonValueRef nodeJson : nodesJsonArray) //每个属性的状态信息 { propertyStateInfo propertyInfo; QJsonObject node = nodeJson.toObject(); QString propertyName = node["name"].toString(); int nState = node["checked"].toInt(); QString dataType = node["type"].toString(); QVariant defaultValue = node["defaultValue"].toVariant(); propertyInfo.name = propertyName; propertyInfo.type = dataType; if(nState) { mapPro.insert(propertyName,propertyInfo); } } if(!mapPro.contains("global_uuid")) //不包含uuid则手动添加 { propertyStateInfo uuidInfo; uuidInfo.name = "global_uuid"; //全局id未添加到属性状态中,手动添加 mapPro.insert("global_uuid",uuidInfo); } groupValue.mapInfo = DataBase::GetInstance()->selectGroupProperty(it->tableName,mapPro); //返回表中属性值 modelInfo.groupInfo.insert(it.key(),groupValue); } for(it = mapState.begin();it != mapState.end();++it) //遍历模型属性组 { groupStateValue groupValue; groupValue.groupName = it.key(); groupValue.tableName = it->tableName; QJsonArray nodesJsonArray = it->propertyState["checkState"].toArray(); QMap mapPro; for (QJsonValueRef nodeJson : nodesJsonArray) //每个属性的状态信息 { propertyStateInfo propertyInfo; QJsonObject node = nodeJson.toObject(); QString propertyName = node["name"].toString(); int nState = node["checked"].toInt(); QString dataType = node["type"].toString(); QVariant defaultValue = node["defaultValue"].toVariant(); propertyInfo.name = propertyName; propertyInfo.type = dataType; if(nState) { mapPro.insert(propertyName,propertyInfo); } } propertyStateInfo uuidInfo; uuidInfo.name = "global_uuid"; //全局id未添加到属性状态中,手动添加 mapPro.insert("global_uuid",uuidInfo); groupValue.mapInfo = DataBase::GetInstance()->selectGroupProperty(it->tableName,mapPro); //返回表中属性值 modelInfo.groupInfo.insert(it.key(),groupValue); } _modleDataInfo.insert(iter.key(),modelInfo); } _dataInitialised = true; } void DataManager::updateModelData(const QString& sModel,QUuid uuid,const QString& sGroup,QMap mapPro) { if(_modleDataInfo[sModel].groupInfo[sGroup].mapInfo.contains(uuid)) _modleDataInfo[sModel].groupInfo[sGroup].mapInfo[uuid] = mapPro; //暂用设定值直接替换旧属性,待测试 else{ //新增 _modleDataInfo[sModel].groupInfo[sGroup].mapInfo.insert(uuid,mapPro); } } ModleStateMap& DataManager::modelState() { if(!_stateInitialised) initialModelState(); else initialModelState(true); return _modelStateInfo; } ModelDataMap& DataManager::modelData() { if(!_dataInitialised) initialModelData(); else initialModelData(true); return _modleDataInfo; }