SqlOperation.cpp 26 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801
  1. // *****************************************************************************
  2. // 版权所有(C)2023~2099 上海骄成超声波技术有限公司
  3. // 保留所有权利
  4. // *****************************************************************************
  5. // 作者 : 杨坚
  6. // 版本 : 1.0
  7. // 功能说明:
  8. // 数据库操作类
  9. // *****************************************************************************
  10. #include "SqlOperation.h"
  11. #include <QDir>
  12. #include <QCoreApplication>
  13. #include <QSqlDatabase>
  14. #include <QSqlError>
  15. #include <QString>
  16. #include <QTextCodec>
  17. #include <iostream>
  18. #include <string>
  19. #include "../common/JLogAllOutput.h"
  20. #include "../common/JMessageTip.h"
  21. #include "CManageDB.h"
  22. #include "CMessageBox.h"
  23. SqlOperation::SqlOperation()
  24. {
  25. m_pCViewInterface = ns_module::CViewInterface::GetInstance();
  26. if (m_pCViewInterface == nullptr)
  27. {
  28. ErrorInfo(tr("SqlOperation:Initialization failed, please check", "数据库初始化失败,请检查"));
  29. return;
  30. }
  31. RegeditFun();
  32. }
  33. SqlOperation* SqlOperation::GetInstance()
  34. {
  35. static SqlOperation instance;
  36. return &instance;
  37. }
  38. void SqlOperation::RegeditFun()
  39. {
  40. DataNoticeCallbackFun fun = std::bind(&SqlOperation::DataChange, this, std::placeholders::_1, std::placeholders::_2);
  41. //模组
  42. m_pCViewInterface->RecvDataChangNotice(MODULECONFIG_DATABASE_NAME, BONDHEAD_CONFIG_TABLE_NAME, fun);
  43. m_pCViewInterface->RecvDataChangNotice(MODULECONFIG_DATABASE_NAME, WAFERHEAD_CONFIG_TABLE_NAME, fun);
  44. m_pCViewInterface->RecvDataChangNotice(MODULECONFIG_DATABASE_NAME, WAFFLEHEAD_CONFIG_TABLE_NAME, fun);
  45. m_pCViewInterface->RecvDataChangNotice(MODULECONFIG_DATABASE_NAME, EJECTOR_CONFIG_TABLE_NAME, fun);
  46. m_pCViewInterface->RecvDataChangNotice(MODULECONFIG_DATABASE_NAME, WAFERTABLE_CONFIG_TABLE_NAME, fun);
  47. m_pCViewInterface->RecvDataChangNotice(MODULECONFIG_DATABASE_NAME, WAFER_CALIB_TABLE_CONFIG_TABLE_NAME, fun);
  48. m_pCViewInterface->RecvDataChangNotice(MODULECONFIG_DATABASE_NAME, WAFFLE_CALIB_TABLE_CONFIG_TABLE_NAME, fun);
  49. m_pCViewInterface->RecvDataChangNotice(MODULECONFIG_DATABASE_NAME, BOND_TABLE_CONFIG_TABLE_NAME, fun);
  50. m_pCViewInterface->RecvDataChangNotice(MODULECONFIG_DATABASE_NAME, NOZZLE_TABLE_CONFIG_TABLE_NAME, fun);
  51. m_pCViewInterface->RecvDataChangNotice(MODULECONFIG_DATABASE_NAME, ULTRAHEAD_TABLE_NAME, fun);
  52. //标定
  53. m_pCViewInterface->RecvDataChangNotice(CALIBCONFIG_DATABASE_NAME, CALIB_CTD_TABLE_NAME, fun);
  54. m_pCViewInterface->RecvDataChangNotice(CALIBCONFIG_DATABASE_NAME, CALIB_XY_TABLE_NAME, fun);
  55. m_pCViewInterface->RecvDataChangNotice(CALIBCONFIG_DATABASE_NAME, CALIB_R_TABLE_NAME, fun);
  56. m_pCViewInterface->RecvDataChangNotice(CALIBCONFIG_DATABASE_NAME, FORCE_CONTROL_TABLE_NAME, fun);
  57. //****************************************************新增************************************************
  58. //设置弹出框回调
  59. ns_module::SendButtonRunDone funRunDone = std::bind(&SqlOperation::RunButDone, this, std::placeholders::_1);
  60. m_pCViewInterface->SetButtonRunDoneFunc(funRunDone);
  61. //设置按钮执行完回调
  62. usStartMessWnd mes = std::bind(&SqlOperation::StartMessageWnd, this, std::placeholders::_1);
  63. m_pCViewInterface->SetPopMessageBoxFunc(mes);
  64. }
  65. int SqlOperation::LoadSql()
  66. {
  67. // 获取构建目录路径
  68. QString buildDirPath = QCoreApplication::applicationDirPath();
  69. QDir buildDirectory(buildDirPath);
  70. QString strError;
  71. QString destDbPath = buildDirectory.filePath("configurations.db");
  72. // 检查文件是否存在
  73. QFile databaseFile(destDbPath);
  74. if (!databaseFile.exists())
  75. {
  76. strError = tr("The database file does not exist:", "数据库文件不存在:") + destDbPath;
  77. ErrorInfo(strError);
  78. }
  79. else
  80. {
  81. // 创建数据库连接
  82. QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
  83. db.setDatabaseName(destDbPath);
  84. if (!db.open())
  85. {
  86. strError = tr("Database open failure:", "数据库打开失败:") + db.lastError().text();
  87. ErrorInfo(strError);
  88. }
  89. else
  90. {
  91. int rtn = loadMenu();
  92. if (rtn != 0)
  93. return rtn;
  94. rtn = loadAllDirectories();
  95. if (rtn != 0)
  96. return rtn;
  97. rtn = loadAllControlData();
  98. if (rtn != 0)
  99. return rtn;
  100. rtn = LoadAppConfig();
  101. if (rtn != 0)
  102. return rtn;
  103. return 0;
  104. }
  105. }
  106. return -1;
  107. }
  108. int SqlOperation::loadMenu()
  109. {
  110. QSqlDatabase db = QSqlDatabase::database();
  111. if (!db.isOpen())
  112. {
  113. qWarning() << "数据库未打开";
  114. return 0;
  115. }
  116. QSqlQuery query(db);
  117. QString sql = QString("SELECT Id, Name FROM %1").arg(MENU_TABLE_NAME);
  118. if (!query.exec(sql))
  119. {
  120. qWarning() << "查询 Mune 失败:" << query.lastQuery() << " " << query.lastError().text();
  121. return 0;
  122. }
  123. int id = 0;
  124. QString name = "";
  125. while (query.next())
  126. {
  127. id = query.value("Id").toInt();
  128. name = query.value("Name").toString();
  129. m_mapMenu[id] = name;
  130. }
  131. return 0;
  132. }
  133. int SqlOperation::loadAllDirectories()
  134. {
  135. QList<QJsonObject> dirs;
  136. int rtn = loadDirectories(Dir_Calibration_TABLE_NAME, dirs);
  137. if (rtn != 0)
  138. {
  139. return -1;
  140. }
  141. m_mapAllDirectories[Dir_Calibration_TABLE_NAME] = dirs;
  142. dirs.clear();
  143. rtn = loadDirectories(Dir_Diagnosis_TABLE_NAME, dirs);
  144. if (rtn != 0)
  145. {
  146. return -1;
  147. }
  148. m_mapAllDirectories[Dir_Diagnosis_TABLE_NAME] = dirs;
  149. dirs.clear();
  150. rtn = loadDirectories(Dir_Message_TABLE_NAME, dirs);
  151. if (rtn != 0)
  152. {
  153. return -1;
  154. }
  155. m_mapAllDirectories[Dir_Message_TABLE_NAME] = dirs;
  156. dirs.clear();
  157. rtn = loadDirectories(Dir_ModuleConfig_TABLE_NAME, dirs);
  158. if (rtn != 0)
  159. {
  160. return -1;
  161. }
  162. m_mapAllDirectories[Dir_ModuleConfig_TABLE_NAME] = dirs;
  163. dirs.clear();
  164. rtn = loadDirectories(Dir_ProductAssist_TABLE_NAME, dirs);
  165. if (rtn != 0)
  166. {
  167. return -1;
  168. }
  169. m_mapAllDirectories[Dir_ProductAssist_TABLE_NAME] = dirs;
  170. dirs.clear();
  171. rtn = loadDirectories(Dir_Programme_TABLE_NAME, dirs);
  172. if (rtn != 0)
  173. {
  174. return -1;
  175. }
  176. m_mapAllDirectories[Dir_Programme_TABLE_NAME] = dirs;
  177. dirs.clear();
  178. rtn = loadDirectories(Dir_SystemInfo_TABLE_NAME, dirs);
  179. if (rtn != 0)
  180. {
  181. return -1;
  182. }
  183. m_mapAllDirectories[Dir_SystemInfo_TABLE_NAME] = dirs;
  184. //for (auto it = m_mapMenu.begin(); it != m_mapMenu.end(); ++it)
  185. //{
  186. // if (it.value() == "Home")
  187. // {
  188. // continue;
  189. // }
  190. // QList<QJsonObject> dir;
  191. // QString tableName = "Dir_" + it.value();
  192. // int rtn = loadDirectories(tableName, dir);
  193. // if (rtn != 0)
  194. // {
  195. // return -1;
  196. // }
  197. // m_mapAllDirectories[it.value()] = dir;
  198. //}
  199. return 0;
  200. }
  201. int SqlOperation::loadDirectories(QString tableName, QList<QJsonObject>& directories)
  202. {
  203. QSqlDatabase db = QSqlDatabase::database();
  204. if (!db.isOpen())
  205. {
  206. qWarning() << "数据库未打开";
  207. return 0 ;
  208. }
  209. QSqlQuery query(db);
  210. QString sql = QString("SELECT Id, Name_Chs, ParentId, IsThirdLevel, Separator, UserGrade, TableName, Circle, ModuleType FROM %1").arg(tableName);
  211. //query.prepare(R"( SELECT Id, Name_Chs, ParentId, IsThirdLevel, Separator, UserGrade, Circle FROM :tableName )");
  212. //query.bindValue(":tableName", tableName);
  213. if (!query.exec(sql))
  214. {
  215. qWarning() << "查询 Directories 失败:" << query.lastQuery() << " " << query.lastError().text();
  216. return -1;
  217. }
  218. // 以 QJsonObject 保存所有目录
  219. //QList<QJsonObject> directories;
  220. while (query.next())
  221. {
  222. QJsonObject obj;
  223. int id = query.value("Id").toInt();
  224. obj["Id"] = id;
  225. obj["Name"] = query.value("Name_Chs").toString();
  226. obj["ParentId"] = query.value("ParentId").isNull() ? -1 : query.value("ParentId").toInt();
  227. obj["IsThirdLevel"] = query.value("IsThirdLevel").toBool();
  228. obj["Separator"] = query.value("Separator").toInt();
  229. obj["UserGrade"] = query.value("UserGrade").toString();
  230. obj["Circle"] = query.value("Circle").toInt();
  231. obj["TableName"] = query.value("TableName").toString();
  232. obj["Icon"] = query.value("Icon").toString();
  233. obj["Enabled"] = query.value("Enabled").toBool();
  234. obj["ModuleType"] = query.value("ModuleType").toString();
  235. qDebug() << "loadDirectories:" << obj["Name"].toString() << " ParentId:" << obj["ParentId"].toInt() << "UserGrade:" << obj["UserGrade"] << " Separator:" << obj["Separator"].toInt();
  236. qDebug() << " Circle:" << obj["Circle"].toInt();
  237. // 权限判断:只有当记录的 UserGrade 中包含当前用户权限时才加入
  238. //bool ok;
  239. //if (hasPrivilege(obj["UserGrade"].toString().toInt(&ok, 16), userPrivilege))
  240. directories.append(obj);
  241. // else
  242. // qDebug() << "目录跳过(权限不足):" << obj["Name"].toString();
  243. }
  244. return 0;
  245. }
  246. int SqlOperation::loadAllControlData()
  247. {
  248. QTextCodec* codec = QTextCodec::codecForName("GBK");
  249. if (!codec) {
  250. std::cerr << "不支持的编码" << std::endl;
  251. return -1;
  252. }
  253. m_allControlData.clear();
  254. QList<QString> moduleTableNameList;
  255. //moduleTableNameList.append(BONDHEAD_CONFIG_TABLE_NAME);
  256. for (size_t i = 0; i < g_vetModuleConfigTableName.size(); i++)
  257. {
  258. moduleTableNameList.append(QString::fromStdString(g_vetModuleConfigTableName[i]));
  259. }
  260. for (size_t i = 0; i < g_vetCalibrationConfigTableName.size(); i++)
  261. {
  262. moduleTableNameList.append(QString::fromStdString(g_vetCalibrationConfigTableName[i]));
  263. }
  264. for (QString& dbName : moduleTableNameList)
  265. {
  266. ST_TABLE_CONTROL_DATA controlDatas_module;
  267. vector<int> iGroupId;
  268. vector<CONFIG_BASE_STRUCT> vecConfig;
  269. if (m_pCViewInterface)
  270. {
  271. m_pCViewInterface->LoadConfigDB(dbName.toStdString(), iGroupId, vecConfig);
  272. controlDatas_module.tableName = dbName;
  273. // 遍历 std::vector 并将元素添加到 QList 中
  274. for (CONFIG_BASE_STRUCT& element : vecConfig) {
  275. QString str;
  276. if (element.strDescribe.size() > 0)
  277. {
  278. str = codec->toUnicode(element.strDescribe.data(), element.strDescribe.size());
  279. element.strDescribe = str.toStdString();
  280. }
  281. /*if (element.strDescribe_Eng.size() > 0)
  282. {
  283. str = codec->toUnicode(element.strDescribe_Eng.data(), element.strDescribe_Eng.size());
  284. element.strDescribe_Eng = str.toStdString();
  285. }*/
  286. if (element.strUnit.size() > 0)
  287. {
  288. str = codec->toUnicode(element.strUnit.data(), element.strUnit.size());
  289. element.strUnit = str.toStdString();
  290. }
  291. // 给轴类型加入进去
  292. if (element.strAxisType.size() > 0)
  293. {
  294. str = codec->toUnicode(element.strAxisType.data(), element.strAxisType.size());
  295. element.strAxisType = str.toStdString();
  296. }
  297. controlDatas_module.controlDataList.append(element);
  298. }
  299. m_allControlData.append(controlDatas_module);
  300. }
  301. /*int rtn1 = loadGivenTableControlData_D_Config(dbName, controlDatas_module);
  302. if (rtn1 == 0)
  303. m_allControlData.append(controlDatas_module);*/
  304. }
  305. //ST_TABLE_CONTROL_DATA controlData;
  306. //int rtn = LoadControlDataFromModule(CALIB_XY_TABLE_NAME, controlData);
  307. //if (rtn == 0) { m_allControlData.append(controlData); }
  308. //rtn = LoadControlDataFromModule(CALIB_CTD_TABLE_NAME, controlData);
  309. //if (rtn == 0) { m_allControlData.append(controlData); }
  310. //rtn = LoadControlDataFromModule(CALIB_R_TABLE_NAME, controlData);
  311. //if (rtn == 0) { m_allControlData.append(controlData); }
  312. //rtn = LoadControlDataFromModule(FORCE_CONTROL_TABLE_NAME, controlData);
  313. //if (rtn == 0) { m_allControlData.append(controlData); }
  314. int rtn = 0;
  315. for (auto it = m_mapAllDirectories.begin(); it != m_mapAllDirectories.end(); ++it)
  316. {
  317. for (int i = 0; i < it.value().size(); i++)
  318. {
  319. QJsonObject controlData = it.value()[i];
  320. if (controlData["IsThirdLevel"].toBool())
  321. {
  322. QStringList tableNames = controlData["TableName"].toString().split(";");
  323. for (const QString& tableAndGroup : tableNames)
  324. {
  325. QString name = tableAndGroup.split(",")[0];
  326. if (isModuleTable(name) || name.isEmpty())
  327. {
  328. continue;
  329. }
  330. ST_TABLE_CONTROL_DATA controlDatas;
  331. rtn = loadGivenTableControlData(name, controlDatas);
  332. if (rtn != 0)
  333. {
  334. qDebug() << "read table fail : " << name;
  335. continue;
  336. }
  337. m_allControlData.append(controlDatas);
  338. }
  339. }
  340. }
  341. }
  342. //另外加载HomeProduct的控件数据
  343. ST_TABLE_CONTROL_DATA controlDatas;
  344. rtn = loadGivenTableControlData(HOME_TABLE_NAME, controlDatas);
  345. if (rtn != 0) return rtn;
  346. m_allControlData.append(controlDatas);
  347. return 0;
  348. }
  349. int SqlOperation::loadGivenTableControlData(QString tableName, ST_TABLE_CONTROL_DATA& controlDatas)
  350. {
  351. QSqlDatabase db = QSqlDatabase::database();
  352. if (!db.isOpen())
  353. {
  354. qWarning() << "数据库未打开";
  355. return -1;
  356. }
  357. if (tableName.isEmpty())
  358. {
  359. qDebug() << "Encountered an empty string, stopping traversal.";
  360. return -1;
  361. } else
  362. {
  363. QString sql = QString("SELECT GroupId, Name, Describe, Describe_Eng, Type, Value, Defult, UpperLimit,LowerLimit,Unit, UserGrade, ChangeFlag, Icon, Enable, CallFun FROM %1 ").arg(tableName);
  364. QSqlQuery queryBond(db);
  365. queryBond.prepare(sql);
  366. if (queryBond.exec())
  367. {
  368. CONFIG_BASE_STRUCT value;
  369. QList<CONFIG_BASE_STRUCT> valueList;
  370. while (queryBond.next())
  371. {
  372. bool ok;
  373. value.iUserGrade = queryBond.value("UserGrade").toString().toInt(&ok, 16);
  374. value.strName = queryBond.value("Name").toString().toStdString();
  375. value.strDescribe = queryBond.value("Describe").toString().toStdString();
  376. //value.strDescribe_Eng = queryBond.value("Describe_Eng").toString().toStdString();
  377. value.strType = queryBond.value("Type").toString().toStdString();
  378. value.strValue = queryBond.value("Value").toString().toStdString();
  379. value.strDefult = queryBond.value("Defult").toString().toStdString();
  380. value.strUpperLimit = queryBond.value("UpperLimit").toString().toStdString();
  381. value.strLowerLimit = queryBond.value("LowerLimit").toString().toStdString();
  382. value.strUnit = queryBond.value("Unit").toString().toStdString();
  383. value.iGroupId = queryBond.value("GroupId").toInt();
  384. value.iChangeFlag = queryBond.value("ChangeFlag").toInt();
  385. value.sIcon = queryBond.value("Icon").toString().toStdString();
  386. value.bEnable = queryBond.value("Enable").toBool();
  387. value.strCallFun = queryBond.value("CallFun").toString().toStdString();
  388. valueList.append(value);
  389. }
  390. controlDatas.tableName = tableName;
  391. controlDatas.controlDataList = valueList;
  392. }
  393. else
  394. {
  395. qWarning() << "查询 BondHead 失败:" << queryBond.lastError().text();
  396. return -1;
  397. }
  398. }
  399. return 0;
  400. }
  401. int SqlOperation::updateDb(QString tableName, QString name, const QString currentValue)
  402. {
  403. QSqlDatabase db = QSqlDatabase::database();
  404. if (!db.isOpen())
  405. {
  406. qWarning() << "数据库未打开";
  407. }
  408. QString sql = QString("UPDATE %1 SET currentValue = :newValue WHERE Name = :name").arg(tableName);
  409. QSqlQuery query;
  410. query.prepare(sql);
  411. query.bindValue(":newValue", currentValue);
  412. query.bindValue(":name", name);
  413. // 执行更新操作
  414. if (!query.exec())
  415. {
  416. qWarning() << "Failed to update currentValue:" << query.lastError().text();
  417. } else
  418. {
  419. qDebug() << "currentValue updated successfully.";
  420. }
  421. return 0;
  422. }
  423. int SqlOperation::LoadAppConfig()
  424. {
  425. int nErr = -1;
  426. QSqlDatabase db = QSqlDatabase::database();
  427. if (!db.isOpen())
  428. {
  429. JLogAllOutput::cmd_Warning("数据库未打开");
  430. }
  431. else
  432. {
  433. QSqlQuery query(db);
  434. QString sql = QString("SELECT ID, SwitchWnd,GroupId_R,Index_R,GroupId_L,Index_L FROM %1").arg("AppConfig");
  435. if (!query.exec(sql))
  436. {
  437. QString strErr = "查询 Mune 失败:";
  438. strErr += query.lastQuery();
  439. strErr += " ";
  440. strErr += query.lastError().text();
  441. JLogAllOutput::cmd_Warning(strErr.toStdString());
  442. nErr = 1;
  443. }
  444. else
  445. {
  446. while (query.next())
  447. {
  448. m_appConifg.nID = query.value("Id").toInt();
  449. m_appConifg.nID = query.value("SwitchWnd").toInt();
  450. m_appConifg.nGroupId_R = query.value("GroupId_R").toInt();
  451. m_appConifg.nIndex_R = query.value("Index_R").toInt();
  452. m_appConifg.nGroupId_L = query.value("GroupId_L").toInt();
  453. m_appConifg.nIndex_L = query.value("Index_L").toInt();
  454. }
  455. nErr = 0;
  456. }
  457. }
  458. return nErr;
  459. }
  460. int SqlOperation::GetDirectories(QString tableName, const int& userPrivilege, QList<QJsonObject>& directories)
  461. {
  462. auto it = m_mapAllDirectories.find(tableName);
  463. if (it == m_mapAllDirectories.end())
  464. {
  465. qDebug() << "获取目录表名出错!";
  466. return false;
  467. }
  468. for (QJsonObject& dir : m_mapAllDirectories[tableName])
  469. {
  470. bool ok;
  471. if (dir["UserGrade"].toString().toInt(&ok, 16) == userPrivilege)
  472. {
  473. directories.append(dir);
  474. }
  475. }
  476. return true;
  477. }
  478. int SqlOperation::GetThirdDirControlData(QString multiTableName, const int& userPrivilege, QList<ST_TABLE_CONTROL_DATA>& data, bool& allChangeFlag)
  479. {
  480. allChangeFlag = true;
  481. QStringList tableNames = multiTableName.split(";");
  482. for (const QString& name : tableNames)
  483. {
  484. QStringList nameAndGroups = name.split(",");
  485. vector<int> vecGroup;
  486. for (int i = 1; i < nameAndGroups.size(); i++)
  487. {
  488. vecGroup.push_back(nameAndGroups[i].toInt());
  489. }
  490. ST_TABLE_CONTROL_DATA needControls;
  491. for (ST_TABLE_CONTROL_DATA& tableData : m_allControlData)
  492. {
  493. //寻找表格对应的所有控件
  494. if (tableData.tableName == nameAndGroups[0])
  495. {
  496. needControls.tableName = name;
  497. //寻找用户等级对应的控件
  498. for (CONFIG_BASE_STRUCT& value : tableData.controlDataList)
  499. {
  500. if (vecGroup.size() == 0)
  501. {
  502. needControls.controlDataList.append(value);
  503. if (value.iChangeFlag == false)
  504. {
  505. allChangeFlag = false;
  506. }
  507. }
  508. else
  509. {
  510. for (int& groupId : vecGroup)
  511. {
  512. //if (value.iUserGrade == userPrivilege)
  513. if (value.iGroupId == groupId)
  514. {
  515. needControls.controlDataList.append(value);
  516. if (value.iChangeFlag == false)
  517. {
  518. allChangeFlag = false;
  519. }
  520. }
  521. }
  522. }
  523. }
  524. }
  525. }
  526. data.append(needControls);
  527. }
  528. return 0;
  529. }
  530. int SqlOperation::GetThirdDirControlDataToUpdataUi(QString multiTableName, const int& userPrivilege, QList<ST_TABLE_CONTROL_DATA>& data, bool& allChangeFalg)
  531. {
  532. vector<int> vecCalibGroupId;
  533. vector<CONFIG_BASE_STRUCT> vecCalibConfig;
  534. if (m_pCViewInterface == nullptr)
  535. {
  536. ErrorInfo(tr("SqlOperation:Initialization failed, please check", "初始化失败,请检查"));
  537. return -1;
  538. }
  539. int rtn = m_pCViewInterface->LoadConfigDB(multiTableName.toStdString(), vecCalibGroupId, vecCalibConfig);
  540. if (rtn != OK)
  541. {
  542. JLogAllOutput::cmd_debug("读取底层表格数据出错");
  543. return -1;
  544. }
  545. ST_TABLE_CONTROL_DATA stData = {};
  546. stData.tableName = multiTableName;
  547. for (auto a: vecCalibConfig)
  548. {
  549. stData.controlDataList.append(a);
  550. }
  551. data.push_back(stData);
  552. }
  553. int SqlOperation::updateControlData(QString tableName, QString name, const QString& currentValue)
  554. {
  555. if (m_pCViewInterface == nullptr)
  556. {
  557. //ErrorInfo(QObject::tr("SqlOperation:Initialization failed, please check", "初始化失败,请检查"));
  558. return -1;
  559. }
  560. vector<CONFIG_BASE_STRUCT> changeData;
  561. for (ST_TABLE_CONTROL_DATA &tableData: m_allControlData)
  562. {
  563. if (tableData.tableName == tableName)
  564. {
  565. for (CONFIG_BASE_STRUCT& controlData : tableData.controlDataList)
  566. {
  567. if (controlData.strName == name.toStdString())
  568. {
  569. controlData.strValue = currentValue.toStdString();
  570. changeData.push_back(controlData);
  571. m_pCViewInterface->SaveConfigDB(tableName.toStdString(), changeData);
  572. }
  573. }
  574. }
  575. }
  576. return 0;
  577. }
  578. int SqlOperation::GetThirdDirButtons(QString multiTableName, const int& userPrivilege, QList<CONFIG_BASE_STRUCT>& buttons)
  579. {
  580. QStringList tableNames = multiTableName.split(";");
  581. for (const QString& name : tableNames)
  582. {
  583. QStringList nameAndGroups = name.split(",");
  584. vector<int> vecGroup;
  585. for (int i = 1; i < nameAndGroups.size(); i++)
  586. {
  587. vecGroup.push_back(nameAndGroups[i].toInt());
  588. }
  589. for (ST_TABLE_CONTROL_DATA& tableData : m_allControlData)
  590. {
  591. //寻找表格对应的所有控件
  592. if (tableData.tableName == name)
  593. {
  594. //寻找用户等级对应的控件
  595. for (CONFIG_BASE_STRUCT& value : tableData.controlDataList)
  596. {
  597. if (vecGroup.size() == 0)
  598. {
  599. if (value.iUserGrade == userPrivilege && value.strType == "Button")
  600. {
  601. buttons.append(value);
  602. }
  603. } else
  604. {
  605. for (int& groupId : vecGroup)
  606. {
  607. //if (value.iUserGrade == userPrivilege)
  608. if (value.iUserGrade == userPrivilege && value.strType == "Button")
  609. {
  610. buttons.append(value);
  611. }
  612. }
  613. }
  614. }
  615. }
  616. }
  617. }
  618. //QStringList tableNames = multiTableName.split(",");
  619. //for (const QString& name : tableNames)
  620. //{
  621. // for (ST_TABLE_CONTROL_DATA& tableData : m_allControlData)
  622. // {
  623. // //寻找表格对应的所有控件
  624. // if (tableData.tableName == name)
  625. // {
  626. // //寻找用户等级对应的控件
  627. // for (CONFIG_BASE_STRUCT& value : tableData.controlDataList)
  628. // {
  629. // if (value.iUserGrade == userPrivilege)
  630. // {
  631. // buttons.append(value);
  632. // }
  633. // }
  634. // }
  635. // }
  636. //}
  637. return 0;
  638. }
  639. int SqlOperation::GetMuneName(int id, QString& name)
  640. {
  641. return 0;
  642. }
  643. void SqlOperation::ErrorInfo(const QString& strError)
  644. {
  645. JMessageTip::Message_question(strError);
  646. JLogAllOutput::cmd_debug(strError.toStdString());
  647. //exit(0); //TODO: 关闭可以交给主界面
  648. }
  649. bool SqlOperation::isModuleTable(QString tableName)
  650. {
  651. for (size_t i = 0; i < g_vetModuleConfigTableName.size(); i++)
  652. {
  653. if (g_vetModuleConfigTableName[i] == tableName.toStdString())
  654. {
  655. return true;
  656. }
  657. }
  658. return false;
  659. }
  660. int SqlOperation::LoadControlDataFromModule(std::string tableName, ST_TABLE_CONTROL_DATA& controlData)
  661. {
  662. QTextCodec* codec = QTextCodec::codecForName("GBK");
  663. vector<int> vecCalibGroupId;
  664. vector<CONFIG_BASE_STRUCT> vecCalibConfig;
  665. if (m_pCViewInterface == nullptr)
  666. {
  667. //ErrorInfo(QObject::tr("SqlOperation:Initialization failed, please check", "初始化失败,请检查"));
  668. return -1;
  669. }
  670. int rtn = m_pCViewInterface->LoadConfigDB(tableName, vecCalibGroupId, vecCalibConfig);
  671. if (rtn != OK)
  672. {
  673. JLogAllOutput::cmd_debug("读取底层表格数据出错");
  674. return -1;
  675. }
  676. controlData.tableName = QString::fromStdString(tableName);
  677. controlData.controlDataList.clear();
  678. for (CONFIG_BASE_STRUCT& element : vecCalibConfig)
  679. {
  680. QString str;
  681. if (element.strDescribe.size() > 0)
  682. {
  683. str = codec->toUnicode(element.strDescribe.data(), element.strDescribe.size());
  684. element.strDescribe = str.toStdString();
  685. }
  686. if (element.strUnit.size() > 0)
  687. {
  688. str = codec->toUnicode(element.strUnit.data(), element.strUnit.size());
  689. element.strUnit = str.toStdString();
  690. }
  691. controlData.controlDataList.append(element);
  692. }
  693. return 0;
  694. //m_allControlData.append(controlData);
  695. }
  696. void SqlOperation::DataChange(string strDbName, string strTableName)
  697. {
  698. emit UpDbTreeViewManager3DataSig(strDbName.c_str(), strTableName.c_str());
  699. }
  700. BUTTON_TYPE SqlOperation::StartMessageWnd(MESSAGE_INFO stMsgInfo)
  701. {
  702. // 所有动作执行完毕,开始运动
  703. emit AllAxisOperationsCompleted(stMsgInfo);
  704. return BUTTON_TYPE::CLOSE_BUTTON;
  705. }
  706. void SqlOperation::RunButDone(ns_module::ST_BUTTON_DONE butDone)
  707. {
  708. emit SendRunButDoneSig(butDone);
  709. }