DiagramDesigner/diagramUtils/source/dataManager.cpp

260 lines
10 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#include <QJsonArray>
#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<QString,int> model = DataBase::GetInstance()->getAllProjectModel();
if(refresh)
{
for(auto &info:_modelStateInfo)
{
info.release();
}
_modelStateInfo.clear();
}
QMap<QString,int>::Iterator iter;
for(iter = model.begin();iter != model.end(); ++iter) //遍历模型
{
modelStateInfo modelInfo;
modelInfo.modelType = iter.value(); //模型类型
modelInfo.modelName = iter.key();
QMap<QString,propertyGroupState> mapState = DataBase::GetInstance()->getModelInfo(iter.key());
QMap<QString,propertyGroupState> mapPublic = DataBase::GetInstance()->getPublicInfo(); //公共属性组
QMap<QString,propertyGroupState>::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();
int nIsVisible = node["isVisible"].toInt();
if(nState)
{
propertyInfo.name = propertyName;
propertyInfo.type = dataType;
propertyInfo.defaultValue = defaultValue;
propertyInfo.lengthPrecision = lengthPrecision;
propertyInfo.isVisibe = nIsVisible;
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();
int nIsVisible = node["isVisible"].toInt();
if(nState)
{
//todo:别名赋值
propertyInfo.name = propertyName;
propertyInfo.type = dataType;
propertyInfo.defaultValue = defaultValue;
propertyInfo.lengthPrecision = lengthPrecision;
propertyInfo.isVisibe = nIsVisible;
groupInfo.info.insert(propertyName,propertyInfo);
}
}
modelInfo.groupInfo.insert(it.key(),groupInfo);
}
_modelStateInfo.insert(iter.key(),modelInfo);
}
_stateInitialised = true;
}
void DataManager::initialModelData(bool refresh)
{
QMap<QString,int> model = DataBase::GetInstance()->getAllProjectModel();
if(!refresh){
QMap<QString,int>::Iterator iter;
for(iter = model.begin();iter != model.end(); ++iter) //遍历模型
{
modelDataInfo modelInfo;
modelInfo.modelType = iter.value(); //模型类型
modelInfo.modelName = iter.key();
QMap<QString,propertyGroupState> mapState = DataBase::GetInstance()->getModelInfo(iter.key());
QMap<QString,propertyGroupState> mapPublic = DataBase::GetInstance()->getPublicInfo(); //公共属性组
QMap<QString,propertyGroupState>::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<QString,propertyStateInfo> 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();
int nIsVisible = node["isVisible"].toInt();
propertyInfo.name = propertyName;
propertyInfo.type = dataType;
propertyInfo.isVisibe = nIsVisible;
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()->selectGroupPropertyByState(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<QString,propertyStateInfo> 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();
int nIsVisible = node["isVisible"].toInt();
propertyInfo.name = propertyName;
propertyInfo.type = dataType;
propertyInfo.isVisibe = nIsVisible;
if(nState)
{
mapPro.insert(propertyName,propertyInfo);
}
}
propertyStateInfo uuidInfo;
uuidInfo.name = "global_uuid"; //全局id未添加到属性状态中手动添加
mapPro.insert("global_uuid",uuidInfo);
groupValue.mapInfo = DataBase::GetInstance()->selectGroupPropertyByState(it->tableName,mapPro); //返回表中属性值
modelInfo.groupInfo.insert(it.key(),groupValue);
}
_modleDataInfo.insert(iter.key(),modelInfo);
}
_dataInitialised = true;
}
else
{
for(auto itMod = _modleDataInfo.begin();itMod != _modleDataInfo.end();itMod++) //模型
{
for(auto itGroup = itMod->groupInfo.begin();itGroup != itMod->groupInfo.end();itGroup++) //属性组
{
for(auto itComponent = itGroup->mapInfo.begin();itComponent != itGroup->mapInfo.end();itComponent++) //设备
{
//获取component对应id的属性
PropertyValueInfo info = DataBase::GetInstance()->selectGroupPropertyByValue(itGroup->tableName,itComponent.key(),itComponent.value());
for(auto itPro = itComponent->begin(); itPro != itComponent->end();itPro++) //属性
{
if(info.contains(itPro.key())){
if(!itPro->lock)
itPro->defaultValue = info.value(itPro.key()).defaultValue;
}
}
}
}
}
}
}
void DataManager::updateModelData(const QString& sModel,QUuid uuid,const QString& sGroup,QMap<QString,propertyStateInfo> 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;
}