#include "SysManager.h" #include "DictItem.h" #include "M_DictItemDAO.h" #include "DictData.h" #include #include #include "errno.h" #include namespace fs = std::filesystem; SysManager& GetSysManager() { static SysManager sysMgr; return sysMgr; } SysManager::SysManager() { //配置文件路径 QString dir = QCoreApplication::applicationDirPath(); _profilePath = dir + "/profile.json"; //数据库文件路径 QString curPath = QCoreApplication::applicationDirPath(); //QString curPath = QDir::currentPath(); _sysDBPath = curPath + "/DBPConfig.dbp"; } SysManager::~SysManager() { qDeleteAll(mapConnection); } void SysManager::setProfileData(json& data) { data["sysDBPath"] = CommonHelper::qstringToUtf8(_sysDBPath); } void SysManager::getSettingData(json& data) { if (!data["sysDBPath"].is_null()) { _sysDBPath = CommonHelper::utf8ToQString(data["sysDBPath"]); } if (!data["author"].is_null()) { _defaultAuthor = CommonHelper::utf8ToQString(data["author"]); } if (!data["codeGeneratePath"].is_null()) { _codeGeneratePath = CommonHelper::utf8ToQString(data["codeGeneratePath"]); } if (!data["connection"].is_null()) { for (auto x : data["connection"]) { Connection* pNewCon = new Connection(); int id = x["id"]; pNewCon->setID(id); IDTool.use_id(id); pNewCon->setName(CommonHelper::utf8ToQString( x["conName"])); pNewCon->setPath(CommonHelper::utf8ToQString(x["path"])); pNewCon->setStatus(false); pNewCon->setTime(CommonHelper::utf8ToQString(x["time"])); addConnection(id, pNewCon); } } if (!data["xmlFilePath"].is_null()) { _xmlfilePath = CommonHelper::utf8ToQString(data["xmlFilePath"]); } } void SysManager::getConnectionJson(json& jsonobj) { jsonobj = json::array(); for (QMap::iterator it = mapConnection.begin(); it != mapConnection.end(); ++it) { json c; (it.value())->toJson(c); jsonobj.push_back(c); } } void SysManager::save(json& profile) { // auto data = profile["data"]; // auto data = profile["data"]; std::fstream fp; fs::path path = CommonHelper::qstringToStdString(_profilePath); fp.open(path, std::fstream::out | std::fstream::trunc); if (fp.is_open()) { fp << profile.dump(6) << std::endl; fp.close(); } else { char err_msg[256]; // 确保足够大(通常 256 字节足够) LOG(INFO) << CommonHelper::utf8ToStdString("can't open file ") << CommonHelper::qstringToStdString(_profilePath) << ".error:" << strerror_s(err_msg, sizeof(err_msg), errno) << std::endl; } } DPData* SysManager::findDictData(int id) { QMap::iterator it = _dictItemMap.begin(); QMap::iterator it_dict; while (it != _dictItemMap.end()) { it_dict = (*it)->getDictDataMap().begin(); while (it_dict != (*it)->getDictDataMap().end()) { if (id == (*it_dict)->_id) { return (*it_dict); } it_dict++; } it++; } return nullptr; } DPData* SysManager::findDictItem(int id) { if (_dictItemMap.contains(id)) { return _dictItemMap.value(id); } return nullptr; } bool SysManager::getAllDictItem() { using namespace DBPlatformSpace; ResultMsg rm; list dictItenList; rm = M_DictItemDAO::FindAll(dictItenList); if (rm.rCode == 0) { LOG(INFO) << CommonHelper::utf8ToStdString("M_DictItemDAO::FindAll success"); for (list::iterator it = dictItenList.begin(); it != dictItenList.end(); it++) { DictItem* pDictItem; if (_dictItemMap.contains((*it)->_ID)) { //从数据库覆盖 pDictItem = _dictItemMap.value((*it)->_ID); pDictItem->loadData(*it); } else { pDictItem = new DictItem(); pDictItem->loadData(*it); _dictItemMap.insert(pDictItem->_id, pDictItem); } } return true; } else { LOG(INFO) << CommonHelper::utf8ToStdString("M_DictItemDAO::FindAll failed"); LOG(INFO) << rm.rMsg; return false; } } bool SysManager::getAllDictChildren() { using namespace DBPlatformSpace; ResultMsg rm; QMap::iterator it = _dictItemMap.begin(); while (it != _dictItemMap.end()) { //获取当前字典项的字典数据 // DictItem* pDictItem = *it; (*it)->getAllChildren(); it++; } return true; } void SysManager::getDictJson(json& jsonobj) { QMap::iterator it = getDictItemMap().begin(); while (it != getDictItemMap().end()) { json j; (*it)->toJson(j, true); jsonobj["response"].push_back(j); it++; } } void SysManager::clearAllDictData() { qDeleteAll(getDictItemMap()); getDictItemMap().clear(); } //连接相关操作 bool SysManager::addConnection(int id, Connection* con) { if (con && id > 0) { mapConnection.insert(id, con); return true; } //连接信息为空 return false; } Connection* SysManager::findConnection(int id) { QMap::iterator it; if (mapConnection.contains(id)) { it = mapConnection.find(id); return it.value(); } return nullptr; } bool SysManager::delConnection(int id) { if (mapConnection.contains(id)) { mapConnection.remove(id); return true; } return false; }