FromWebAPI.cpp 30 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766
  1. #include "FromWebAPI.h"
  2. #include "GlobalVariable.h"
  3. #include "commonDefine.h"
  4. #include <QString>
  5. #include <qchar.h>
  6. FromWebAPI::FromWebAPI()
  7. {
  8. m_logger = spdlog::get("FromWebAPI");
  9. if(m_logger == nullptr)
  10. {
  11. fmt::print("FromWebAPI: Logger FromWebAPI not found\n");
  12. return;
  13. }
  14. }
  15. FromWebAPI::~FromWebAPI()
  16. {
  17. }
  18. /* 获取数据库中的对比项信息 */
  19. bool FromWebAPI::getCompareItemInfo(QList<CompareItemInfo_t>& listItems)
  20. {
  21. /* 先获取对比项信息 */
  22. nJson json0;
  23. json0["opName"] = "ACAS_GetCompareItem";
  24. QString strCmd1 = QString::fromStdString(json0.dump());
  25. QString strRet1;
  26. int ret = m_httpApi->DBDoInterface(enDBOperatorType::EDBOT_Select, strCmd1, strRet1);
  27. if(ret != 0)
  28. {
  29. SPDLOG_LOGGER_ERROR(m_logger, "获取对比项信息失败: {}, {}", ret, m_httpApi->DoGetLastError(&ret).toStdString());
  30. return false;
  31. }
  32. // SPDLOG_LOGGER_DEBUG(m_logger, "获取对比项信息成功: {}", nJson::parse(strRet1.toStdString()).dump(4));
  33. /* 再获取对比项的通道信息 */
  34. nJson json1;
  35. json1["opName"] = "ACAS_GetCompareItemRoad";
  36. QString strCmd2 = QString::fromStdString(json1.dump());
  37. QString strRet2;
  38. ret = m_httpApi->DBDoInterface(enDBOperatorType::EDBOT_Select, strCmd2, strRet2);
  39. if(ret != 0)
  40. {
  41. SPDLOG_LOGGER_ERROR(m_logger, "获取对比项通道信息失败: {}, {}", ret, m_httpApi->DoGetLastError(&ret).toStdString());
  42. return false;
  43. }
  44. listItems.clear();
  45. /*---------------------------------- 解析对比项信息 ------------------------------*/
  46. try
  47. {
  48. nJson jsonRet;
  49. /* 将json的key全部转换成小写 */
  50. if(!convertJsonKeyToLower(nJson::parse(strRet1.toStdString()), jsonRet))
  51. {
  52. SPDLOG_LOGGER_ERROR(m_logger, "转换JSON键名为小写失败");
  53. return false;
  54. }
  55. int code = jsonRet["code"].get<int>();
  56. if(code != 0)
  57. {
  58. SPDLOG_LOGGER_ERROR(m_logger, "获取对比项信息失败,错误码: {}, 错误信息: {}", code, jsonRet["message"].get<std::string>());
  59. return false;
  60. }
  61. nJson jsonResult = jsonRet["result"];
  62. for(const auto& item : jsonResult)
  63. {
  64. CompareItemInfo_t compareItem;
  65. compareItem.nID = item["itemid"].get<int>();
  66. compareItem.strName = QString::fromStdString(item["itemname"].get<std::string>());
  67. compareItem.isEnable = item["itemenable"].get<bool>();
  68. compareItem.paramMute.isEnable = item["silentenable"].get<bool>();
  69. compareItem.paramMute.nLen = item["silentduration"].get<int>();
  70. compareItem.paramMute.threshold.nThreshold = item["silentthreshold"].get<uint64_t>();
  71. compareItem.paramMute.nSensitivity = item["silentsensitivity"].get<int>();
  72. compareItem.paramOverload.isEnable = item["overloadenable"].get<bool>();
  73. compareItem.paramOverload.nLen = item["overloadduration"].get<int>();
  74. compareItem.paramOverload.threshold.nThreshold = item["overloadthreshold"].get<uint64_t>();
  75. compareItem.paramOverload.nSensitivity = item["overloadsensitivity"].get<int>();
  76. compareItem.paramPhase.isEnable = item["phaseenable"].get<bool>();
  77. compareItem.paramPhase.nLen = item["phaseduration"].get<int>();
  78. compareItem.paramPhase.threshold.dThreshold = item["phasethreshold"].get<double>();
  79. compareItem.paramPhase.nSensitivity = item["phasesensitivity"].get<int>();
  80. listItems.append(compareItem);
  81. }
  82. }nJsonCatch
  83. /*---------------------------------- 解析对比项录音通道信息 ------------------------------*/
  84. try
  85. {
  86. /* 将json的key全部转换成小写 */
  87. nJson jsonRet;
  88. if(!convertJsonKeyToLower(nJson::parse(strRet2.toStdString()), jsonRet))
  89. {
  90. SPDLOG_LOGGER_ERROR(m_logger, "转换JSON键名为小写失败");
  91. return false;
  92. }
  93. // SPDLOG_LOGGER_DEBUG(m_logger, "获取对比项通道信息: {}", jsonRet.dump(4));
  94. int code = jsonRet["code"].get<int>();
  95. if(code != 0)
  96. {
  97. SPDLOG_LOGGER_ERROR(m_logger, "获取对比项通道信息失败,错误码: {}, 错误信息: {}", code, jsonRet["message"].get<std::string>());
  98. return false;
  99. }
  100. nJson jsonResult = jsonRet["result"];
  101. /* 使用迭代器获取对比项信息 */
  102. auto it = listItems.begin();
  103. for(const auto& item : jsonResult)
  104. {
  105. CompareItemRoadInfo_t roadInfo;
  106. int itemID = item["itemid"].get<int>();
  107. roadInfo.nCompareRoadNum = item["roadnum"].get<int>();
  108. roadInfo.strCompareRoadName = QString::fromStdString(item["roadname"].get<std::string>());
  109. roadInfo.isEnableRecord = item["roadrecordenable"].get<bool>();
  110. roadInfo.scRoadInfo.nSoundCardNum = item["soundcardnum"].is_null() ? -1 : item["soundcardnum"].get<int>();
  111. roadInfo.scRoadInfo.strSoundCardID = item["soundcardid"].is_null() ? "" : QString::fromStdString(item["soundcardid"].get<std::string>());
  112. roadInfo.scRoadInfo.strSoundCardName = item["soundcardname"].is_null() ? "" : QString::fromStdString(item["soundcardname"].get<std::string>());
  113. roadInfo.scRoadInfo.roadInfo.nRoadNum = item["soundcardroadnum"].is_null() ? -1 : item["soundcardroadnum"].get<int>();
  114. roadInfo.scRoadInfo.roadInfo.nChannelID = item["channelid"].is_null() ? -1 : item["channelid"].get<int>();
  115. roadInfo.scRoadInfo.roadInfo.strChannelName = item["channelname"].is_null() ? "" : QString::fromStdString(item["channelname"].get<std::string>());
  116. /* 如果这个通道是当前迭代器的,就直接插入,如果不是则重新寻找 */
  117. if(it->nID == itemID)
  118. {
  119. it->mapRoad.insert(roadInfo.nCompareRoadNum, roadInfo);
  120. }else {
  121. for(it = listItems.begin(); it != listItems.end(); ++it)
  122. {
  123. if(it->nID == itemID)
  124. {
  125. it->mapRoad.insert(roadInfo.nCompareRoadNum, roadInfo);
  126. break;
  127. }
  128. }
  129. }
  130. }
  131. }nJsonCatch
  132. return true;
  133. }
  134. /* 添加对比项信息 */
  135. bool FromWebAPI::insertCompareItem(const QList<CompareItemInfo_t>& listItems)
  136. {
  137. /*---------------------------------- 插入对比项信息 ------------------------------*/
  138. try
  139. {
  140. int key = 1;
  141. nJson jsonArray = nJson::array();
  142. for(const auto& item : listItems)
  143. {
  144. nJson json0;
  145. json0["opName"] = "ACAS_InsertCompareItem";
  146. json0["Key"] = key++;
  147. nJson jsonItem;
  148. jsonItem["itemID"] = item.nID;
  149. jsonItem["itemName"] = item.strName.toStdString();
  150. jsonItem["itemEnable"] = item.isEnable;
  151. jsonItem["roadCount"] = item.mapRoad.size();
  152. jsonItem["silentEnable"] = item.paramMute.isEnable;
  153. jsonItem["silentDuration"] = item.paramMute.nLen;
  154. jsonItem["silentThreshold"] = item.paramMute.threshold.nThreshold;
  155. jsonItem["silentSensitivity"] = item.paramMute.nSensitivity;
  156. jsonItem["overloadEnable"] = item.paramOverload.isEnable;
  157. jsonItem["overloadDuration"] = item.paramOverload.nLen;
  158. jsonItem["overloadThreshold"] = item.paramOverload.threshold.nThreshold;
  159. jsonItem["overloadSensitivity"] = item.paramOverload.nSensitivity;
  160. jsonItem["phaseEnable"] = item.paramPhase.isEnable;
  161. jsonItem["phaseDuration"] = item.paramPhase.nLen;
  162. jsonItem["phaseThreshold"] = item.paramPhase.threshold.dThreshold;
  163. jsonItem["phaseSensitivity"] = item.paramPhase.nSensitivity;
  164. json0["paramList"] = jsonItem;
  165. jsonArray.push_back(json0);
  166. }
  167. QString strSend = QString::fromStdString(jsonArray.dump());
  168. QString strRet;
  169. int ret = m_httpApi->DBDoInterface(enDBOperatorType::EDBOT_BatchTransAction, strSend, strRet);
  170. if(ret != 0)
  171. {
  172. SPDLOG_LOGGER_ERROR(m_logger, "添加对比项信息失败: {}, {}", ret, strRet.toStdString());
  173. return false;
  174. }
  175. }nJsonCatch
  176. /*---------------------------------- 插入对比项通道信息 ------------------------------*/
  177. if(!insertCompareItemRoad(listItems))
  178. {
  179. return false;
  180. }
  181. return true;
  182. }
  183. /* 插入对比项通道信息 */
  184. bool FromWebAPI::insertCompareItemRoad(const QList<CompareItemInfo_t>& listItems)
  185. {
  186. try
  187. {
  188. int Key = 1;
  189. nJson jsonArray = nJson::array();
  190. for(const auto& item : listItems)
  191. {
  192. for(const auto& road : item.mapRoad)
  193. {
  194. nJson json1;
  195. json1["opName"] = "ACAS_InsertCompareItemRoad";
  196. json1["Key"] = Key++;
  197. nJson jsonRoad;
  198. jsonRoad["itemID"] = item.nID;
  199. jsonRoad["roadNum"] = road.nCompareRoadNum;
  200. jsonRoad["roadName"] = road.strCompareRoadName.toStdString();
  201. jsonRoad["roadRecordEnable"] = road.isEnableRecord;
  202. jsonRoad["soundCardNum"] = road.scRoadInfo.nSoundCardNum;
  203. jsonRoad["soundCardID"] = road.scRoadInfo.strSoundCardID.toStdString();
  204. jsonRoad["soundCardName"] = road.scRoadInfo.strSoundCardName.toStdString();
  205. jsonRoad["soundCardRoadNum"] = road.scRoadInfo.roadInfo.nRoadNum;
  206. jsonRoad["channelID"] = road.scRoadInfo.roadInfo.nChannelID;
  207. jsonRoad["channelName"] = road.scRoadInfo.roadInfo.strChannelName.toStdString();
  208. json1["paramList"] = jsonRoad;
  209. jsonArray.push_back(json1);
  210. }
  211. }
  212. QString strSend = QString::fromStdString(jsonArray.dump());
  213. QString strRet;
  214. int ret = m_httpApi->DBDoInterface(enDBOperatorType::EDBOT_BatchTransAction, strSend, strRet);
  215. if(ret != 0)
  216. {
  217. SPDLOG_LOGGER_ERROR(m_logger, "添加对比项通道信息失败: {}, {}", ret, m_httpApi->DoGetLastError(&ret).toStdString());
  218. return false;
  219. }
  220. }nJsonCatch
  221. return true;
  222. }
  223. /* 修改对比项信息 */
  224. bool FromWebAPI::updateCompareItemOnly(const QList<CompareItemInfo_t>& listItems)
  225. {
  226. /*---------------------------------- 更新对比项信息 ------------------------------*/
  227. try
  228. {
  229. int key = 1;
  230. nJson jsonArray = nJson::array();
  231. for(const auto& item : listItems)
  232. {
  233. nJson json0;
  234. json0["opName"] = "ACAS_UpdateCompareItem";
  235. json0["Key"] = key++;
  236. nJson jsonItem;
  237. jsonItem["itemID"] = item.nID;
  238. jsonItem["itemName"] = item.strName.toStdString();
  239. jsonItem["itemEnable"] = item.isEnable;
  240. jsonItem["roadCount"] = item.mapRoad.size();
  241. jsonItem["silentEnable"] = item.paramMute.isEnable;
  242. jsonItem["silentDuration"] = item.paramMute.nLen;
  243. jsonItem["silentThreshold"] = item.paramMute.threshold.nThreshold;
  244. jsonItem["silentSensitivity"] = item.paramMute.nSensitivity;
  245. jsonItem["overloadEnable"] = item.paramOverload.isEnable;
  246. jsonItem["overloadDuration"] = item.paramOverload.nLen;
  247. jsonItem["overloadThreshold"] = item.paramOverload.threshold.nThreshold;
  248. jsonItem["overloadSensitivity"] = item.paramOverload.nSensitivity;
  249. jsonItem["phaseEnable"] = item.paramPhase.isEnable;
  250. jsonItem["phaseDuration"] = item.paramPhase.nLen;
  251. jsonItem["phaseThreshold"] = item.paramPhase.threshold.dThreshold;
  252. jsonItem["phaseSensitivity"] = item.paramPhase.nSensitivity;
  253. json0["paramList"] = jsonItem;
  254. jsonArray.push_back(json0);
  255. }
  256. QString strSend = QString::fromStdString(jsonArray.dump());
  257. QString strRet;
  258. int ret = m_httpApi->DBDoInterface(enDBOperatorType::EDBOT_BatchTransAction, strSend, strRet);
  259. if(ret != 0)
  260. {
  261. SPDLOG_LOGGER_ERROR(m_logger, "更新对比项信息失败: {}, {}", ret, m_httpApi->DoGetLastError(&ret).toStdString());
  262. return false;
  263. }
  264. }nJsonCatch
  265. return true;
  266. }
  267. /* 只更新对比项通道信息,通过先删除所有的itemID的对比项,再插入所有的itemID的对比项来实现 */
  268. bool FromWebAPI::updateCompareItemRoadOnly(const QList<CompareItemInfo_t>& listItems)
  269. {
  270. /*---------------------------------- 删除对比项通道信息 ------------------------------*/
  271. QList<int> listItemIDs;
  272. for(const auto& item : listItems)
  273. {
  274. listItemIDs.append(item.nID);
  275. }
  276. if(!deleteCompareItemRoad(listItemIDs))
  277. {
  278. return false;
  279. }
  280. /*---------------------------------- 插入对比项通道信息 ------------------------------*/
  281. if(!insertCompareItemRoad(listItems))
  282. {
  283. return false;
  284. }
  285. return true;
  286. }
  287. /* 更新一条对比项通道信息 */
  288. bool FromWebAPI::updateCompareItemOneRoadOnly(const QList<CompareItemInfo_t>& listItems)
  289. {
  290. /*---------------------------------- 更新对比项通道信息 ------------------------------*/
  291. try
  292. {
  293. int Key = 1;
  294. nJson jsonArray = nJson::array();
  295. for(const auto& item : listItems)
  296. {
  297. for(const auto& road : item.mapRoad)
  298. {
  299. nJson json1;
  300. json1["opName"] = "ACAS_UpdateCompareItemOneRoad";
  301. json1["Key"] = Key++;
  302. nJson jsonRoad;
  303. jsonRoad["itemID"] = item.nID;
  304. jsonRoad["roadNum"] = road.nCompareRoadNum;
  305. jsonRoad["roadName"] = road.strCompareRoadName.toStdString();
  306. jsonRoad["roadRecordEnable"] = road.isEnableRecord;
  307. jsonRoad["soundCardNum"] = road.scRoadInfo.nSoundCardNum;
  308. jsonRoad["soundCardID"] = road.scRoadInfo.strSoundCardID.toStdString();
  309. jsonRoad["soundCardName"] = road.scRoadInfo.strSoundCardName.toStdString();
  310. jsonRoad["soundCardRoadNum"] = road.scRoadInfo.roadInfo.nRoadNum;
  311. jsonRoad["channelID"] = road.scRoadInfo.roadInfo.nChannelID;
  312. jsonRoad["channelName"] = road.scRoadInfo.roadInfo.strChannelName.toStdString();
  313. json1["paramList"] = jsonRoad;
  314. jsonArray.push_back(json1);
  315. }
  316. }
  317. QString strSend = QString::fromStdString(jsonArray.dump());
  318. QString strRet;
  319. int ret = m_httpApi->DBDoInterface(enDBOperatorType::EDBOT_BatchTransAction, strSend, strRet);
  320. if(ret != 0)
  321. {
  322. SPDLOG_LOGGER_ERROR(m_logger, "更新对比项通道信息失败: {}, {}", ret, m_httpApi->DoGetLastError(&ret).toStdString());
  323. return false;
  324. }
  325. }nJsonCatch
  326. return true;
  327. }
  328. /* 删除对比项信息 */
  329. bool FromWebAPI::deleteCompareItem(const QList<int> listIDs)
  330. {
  331. /*---------------------------------- 删除对比项信息 ------------------------------*/
  332. try
  333. {
  334. int Key = 1;
  335. nJson jsonArray = nJson::array();
  336. for(int id : listIDs)
  337. {
  338. nJson json0;
  339. json0["opName"] = "ACAS_DeleteCompareItem";
  340. json0["Key"] = Key++;
  341. nJson jsonItem;
  342. jsonItem["itemID"] = id;
  343. json0["paramList"] = jsonItem;
  344. jsonArray.push_back(json0);
  345. }
  346. QString strSend = QString::fromStdString(jsonArray.dump());
  347. QString strRet;
  348. int ret = m_httpApi->DBDoInterface(enDBOperatorType::EDBOT_BatchTransAction, strSend, strRet);
  349. if(ret != 0)
  350. {
  351. SPDLOG_LOGGER_ERROR(m_logger, "删除对比项信息失败: {}, {}", ret, m_httpApi->DoGetLastError(&ret).toStdString());
  352. return false;
  353. }
  354. }nJsonCatch
  355. /*---------------------------------- 删除对比项通道信息 ------------------------------*/
  356. deleteCompareItemRoad(listIDs);
  357. return true;
  358. }
  359. /* 删除对比项通道信息 */
  360. bool FromWebAPI::deleteCompareItemRoad(const QList<int>& listIDs)
  361. {
  362. /* 在创建表格的时候,设置了ItemID的关联关系,在上面删除对比项ID的时候,这个表格里的项目应该也会自动删除 */
  363. try
  364. {
  365. int Key = 1;
  366. nJson jsonArray = nJson::array();
  367. for(int id : listIDs)
  368. {
  369. nJson json1;
  370. json1["opName"] = "ACAS_DeleteCompareItemAllRoad";
  371. json1["Key"] = Key++;
  372. nJson jsonRoad;
  373. jsonRoad["itemID"] = id;
  374. json1["paramList"] = jsonRoad;
  375. jsonArray.push_back(json1);
  376. }
  377. QString strSend = QString::fromStdString(jsonArray.dump());
  378. QString strRet;
  379. int ret = m_httpApi->DBDoInterface(enDBOperatorType::EDBOT_BatchTransAction, strSend, strRet);
  380. if(ret != 0)
  381. {
  382. SPDLOG_LOGGER_ERROR(m_logger, "删除对比项通道信息失败: {}, {}", ret, m_httpApi->DoGetLastError(&ret).toStdString());
  383. return false;
  384. }
  385. }nJsonCatch
  386. return true;
  387. }
  388. /* 只删除对比项通道信息,int是对比项ID */
  389. bool FromWebAPI::deleteCompareItemRoad(QMap<int, QList<int>>& mapItemRoads)
  390. {
  391. /*---------------------------------- 删除对比项通道信息 ------------------------------*/
  392. try
  393. {
  394. int Key = 1;
  395. nJson jsonArray = nJson::array();
  396. for(auto it = mapItemRoads.begin(); it != mapItemRoads.end(); ++it)
  397. {
  398. int itemID = it.key();
  399. for(int roadNum : it.value())
  400. {
  401. nJson json1;
  402. json1["opName"] = "ACAS_DeleteCompareItemOneRoad";
  403. json1["Key"] = Key++;
  404. nJson jsonRoad;
  405. jsonRoad["itemID"] = itemID;
  406. jsonRoad["roadNum"] = roadNum;
  407. json1["paramList"] = jsonRoad;
  408. jsonArray.push_back(json1);
  409. }
  410. }
  411. QString strSend = QString::fromStdString(jsonArray.dump());
  412. QString strRet;
  413. int ret = m_httpApi->DBDoInterface(enDBOperatorType::EDBOT_BatchTransAction, strSend, strRet);
  414. if(ret != 0)
  415. {
  416. SPDLOG_LOGGER_ERROR(m_logger, "删除对比项通道信息失败: {}, {}", ret, m_httpApi->DoGetLastError(&ret).toStdString());
  417. return false;
  418. }
  419. }nJsonCatch
  420. return true;
  421. }
  422. /* 获取系统配置信息 */
  423. bool FromWebAPI::getSystemConfig(QMap<std::string, std::string>& mapConfig)
  424. {
  425. try
  426. {
  427. nJson json0;
  428. json0["opName"] = "ACAS_GetSystemConfigInfo";
  429. QString strSend = QString::fromStdString(json0.dump());
  430. QString strRet;
  431. int ret = m_httpApi->DBDoInterface(enDBOperatorType::EDBOT_Select, strSend, strRet);
  432. if(ret != 0)
  433. {
  434. SPDLOG_LOGGER_ERROR(m_logger, "获取系统配置信息失败, 错误码: {}, {}", ret, strRet.toStdString());
  435. return false;
  436. }
  437. nJson jsonRet;
  438. /* 将json的key全部转换成小写 */
  439. convertJsonKeyToLower(nJson::parse(strRet.toStdString()), jsonRet);
  440. int code = jsonRet["code"].get<int>();
  441. if(code != 0)
  442. {
  443. SPDLOG_LOGGER_ERROR(m_logger, "获取系统配置信息失败,错误码: {}, 错误信息: {}", code, jsonRet["message"].get<std::string>());
  444. return false;
  445. }
  446. nJson jsonResult = jsonRet["result"];
  447. for(const auto& item : jsonResult)
  448. {
  449. std::string key = item["configkey"].get<std::string>();
  450. std::string value = item["configvalue"].get<std::string>();
  451. mapConfig.insert(key, value);
  452. }
  453. }nJsonCatch
  454. return true;
  455. }
  456. /* 更新系统配置信息 */
  457. bool FromWebAPI::updateSystemConfig(const std::string& key, const std::string& value, const std::string& desc)
  458. {
  459. try
  460. {
  461. nJson json0;
  462. json0["opName"] = "ACAS_UpdateSystemConfigInfo";
  463. nJson jsonData;
  464. jsonData["configKey"] = key;
  465. jsonData["configValue"] = value;
  466. jsonData["configDesc"] = desc;
  467. json0["paramList"] = jsonData;
  468. QString strSend = QString::fromStdString(json0.dump());
  469. QString strRet;
  470. int ret = m_httpApi->DBDoInterface(enDBOperatorType::EDBOT_Update, strSend, strRet);
  471. if(ret != 0)
  472. {
  473. SPDLOG_LOGGER_ERROR(m_logger, "更新系统设置失败, 错误码:{}, {}", ret, strRet.toStdString());
  474. return false;
  475. }
  476. }nJsonCatch
  477. return true;
  478. }
  479. /* 获取检测时段配置 */
  480. bool FromWebAPI::getDetectPeriodConfig(QMap<int, DetectPeriodConfig_t>& mapDetectConfig)
  481. {
  482. try
  483. {
  484. nJson json0;
  485. json0["opName"] = "ACAS_GetDetectPeriod";
  486. QString strSend = QString::fromStdString(json0.dump());
  487. QString strRet;
  488. int ret = m_httpApi->DBDoInterface(enDBOperatorType::EDBOT_Select, strSend, strRet);
  489. if(ret != 0)
  490. {
  491. SPDLOG_LOGGER_ERROR(m_logger, "获取对比项检测时段信息失败, 错误码: {}, {}", ret, strRet.toStdString());
  492. return false;
  493. }
  494. nJson jsonRet;
  495. /* 将json的key全部转换成小写 */
  496. convertJsonKeyToLower(nJson::parse(strRet.toStdString()), jsonRet);
  497. int code = jsonRet["code"].get<int>();
  498. if(code != 0)
  499. {
  500. SPDLOG_LOGGER_ERROR(m_logger, "获取对比项检测时段信息失败,错误码: {}, 错误信息: {}", code, jsonRet["message"].get<std::string>());
  501. return false;
  502. }
  503. nJson jsonResult = jsonRet["result"];
  504. mapDetectConfig.clear();
  505. for(const auto& it : jsonResult)
  506. {
  507. int id = it["itemid"].get<int>();
  508. /* 如果这个ID不存在,会默认创建一个 DetectPeriodConfig_t,以这个ID为键 */
  509. DetectPeriodConfig_t& detectConfig = mapDetectConfig[id];
  510. detectConfig.nID = id;
  511. bool isDetect = it["isdetect"].get<bool>();
  512. if(isDetect)
  513. {
  514. /* 是检测时段 */
  515. OnePlan_t plan;
  516. plan.weekType = static_cast<eWeekType>(it["weektype"].get<int>());
  517. plan.timeStart = QTime::fromString(QString::fromStdString(it["timestart"].get<std::string>()), "HH:mm:ss");
  518. plan.timeEnd = QTime::fromString(QString::fromStdString(it["timeend"].get<std::string>()), "HH:mm:ss");
  519. detectConfig.listDetect.append(plan);
  520. }else
  521. {
  522. /* 不是检测时段 */
  523. OnePlan_t plan;
  524. plan.date = it["cdate"].is_null() ? QDate() : QDate::fromString(QString::fromStdString(it["cdate"].get<std::string>()), "yyyy-MM-dd");
  525. plan.timeStart = QTime::fromString(QString::fromStdString(it["timestart"].get<std::string>()), "HH:mm:ss");
  526. plan.timeEnd = QTime::fromString(QString::fromStdString(it["timeend"].get<std::string>()), "HH:mm:ss");
  527. detectConfig.listNoDetect.append(plan);
  528. detectConfig.isApplySlient = it["applyslient"].get<bool>();
  529. detectConfig.isApplyOverload = it["applyoverload"].get<bool>();
  530. detectConfig.isApplyPhase = it["applyphase"].get<bool>();
  531. detectConfig.isApplyNoise = it["applynoise"].get<bool>();
  532. }
  533. }
  534. }nJsonCatch
  535. return true;
  536. }
  537. /* 插入检测时段配置 */
  538. bool FromWebAPI::insertDetectPeriodConfig(const QMap<int, DetectPeriodConfig_t>& mapDetectConfig)
  539. {
  540. try
  541. {
  542. int Key = 1;
  543. nJson jsonArray = nJson::array();
  544. for(auto it = mapDetectConfig.begin(); it != mapDetectConfig.end(); ++it)
  545. {
  546. int itemID = it.key();
  547. /* 先添加检测计划 */
  548. for(auto& plan : it.value().listDetect)
  549. {
  550. nJson json1;
  551. json1["opName"] = "ACAS_InsertDetectPeriod";
  552. json1["Key"] = Key++;
  553. nJson jsonPlan;
  554. jsonPlan["itemID"] = itemID;
  555. jsonPlan["isDetect"] = true;
  556. jsonPlan["weekType"] = static_cast<int>(plan.weekType);
  557. jsonPlan["cDate"] = ""; // 检测计划没有日期
  558. jsonPlan["timeStart"] = plan.timeStart.toString("HH:mm:ss").toStdString();
  559. jsonPlan["timeEnd"] = plan.timeEnd.toString("HH:mm:ss").toStdString();
  560. /* 检测计划这些全设置为false */
  561. jsonPlan["applySlient"] = false;
  562. jsonPlan["applyOverload"] = false;
  563. jsonPlan["applyPhase"] = false;
  564. jsonPlan["applyNoise"] = false;
  565. json1["paramList"] = jsonPlan;
  566. jsonArray.push_back(json1);
  567. }
  568. /* 再添加非检测计划 */
  569. for(auto& plan : it.value().listNoDetect)
  570. {
  571. nJson json1;
  572. json1["opName"] = "ACAS_InsertDetectPeriod";
  573. json1["Key"] = Key++;
  574. nJson jsonPlan;
  575. jsonPlan["itemID"] = itemID;
  576. jsonPlan["isDetect"] = false;
  577. jsonPlan["weekType"] = static_cast<int>(eWeekType::Week_Special);
  578. jsonPlan["cDate"] = plan.date.isValid() ? plan.date.toString("yyyy-MM-dd").toStdString() : "";
  579. jsonPlan["timeStart"] = plan.timeStart.toString("HH:mm:ss").toStdString();
  580. jsonPlan["timeEnd"] = plan.timeEnd.toString("HH:mm:ss").toStdString();
  581. /* 非检测计划这些按照实际设置来 */
  582. jsonPlan["applySlient"] = it.value().isApplySlient;
  583. jsonPlan["applyOverload"] = it.value().isApplyOverload;
  584. jsonPlan["applyPhase"] = it.value().isApplyPhase;
  585. jsonPlan["applyNoise"] = it.value().isApplyNoise;
  586. json1["paramList"] = jsonPlan;
  587. jsonArray.push_back(json1);
  588. }
  589. }
  590. QString strSend = QString::fromStdString(jsonArray.dump());
  591. QString strRet;
  592. int ret = m_httpApi->DBDoInterface(enDBOperatorType::EDBOT_BatchTransAction, strSend, strRet);
  593. if(ret != 0)
  594. {
  595. SPDLOG_LOGGER_ERROR(m_logger, "写入 对比项检测计划 信息失败: {}, {}", ret, m_httpApi->DoGetLastError(&ret).toStdString());
  596. return false;
  597. }
  598. }nJsonCatch
  599. return true;
  600. }
  601. /* 删除某些对比项的检测时段 */
  602. bool FromWebAPI::deleteDetectPeriodConfig(const QList<int>& listIDs)
  603. {
  604. try
  605. {
  606. int Key = 1;
  607. nJson jsonArray = nJson::array();
  608. for(auto it : listIDs)
  609. {
  610. int itemID = it;
  611. nJson json1;
  612. json1["opName"] = "ACAS_DeleteDetectPeriod";
  613. json1["Key"] = Key++;
  614. nJson josnItem;
  615. josnItem["itemID"] = itemID;
  616. json1["paramList"] = josnItem;
  617. jsonArray.push_back(json1);
  618. }
  619. QString strSend = QString::fromStdString(jsonArray.dump());
  620. QString strRet;
  621. int ret = m_httpApi->DBDoInterface(enDBOperatorType::EDBOT_BatchTransAction, strSend, strRet);
  622. if(ret != 0)
  623. {
  624. SPDLOG_LOGGER_ERROR(m_logger, "删除对比项检测时段信息失败: {}, {}", ret, m_httpApi->DoGetLastError(&ret).toStdString());
  625. return false;
  626. }
  627. }nJsonCatch
  628. return true;
  629. }
  630. /* 写入报警信息 */
  631. bool FromWebAPI::insertAlarmInfo(const std::list<AlarmInfo_t>& listAlarm)
  632. {
  633. try
  634. {
  635. int Key = 1;
  636. nJson jsonArray = nJson::array();
  637. for(auto it : listAlarm)
  638. {
  639. nJson json1;
  640. json1["opName"] = "ACAS_InsertAlarmInfo";
  641. json1["Key"] = Key++;
  642. nJson jsonAlarm;
  643. jsonAlarm["itemID"] = it.CompareItemID;
  644. jsonAlarm["itemName"] = it.strCompareItemName;
  645. jsonAlarm["alarmType"] = static_cast<int>(it.AlarmType);
  646. jsonAlarm["soundCardNum"] = it.RoadInfo.nCompareRoadNum;
  647. jsonAlarm["soundCardName"] = it.RoadInfo.strCompareRoadName.toStdString();
  648. jsonAlarm["soundCardRoadNum"] = it.RoadInfo.scRoadInfo.roadInfo.nRoadNum;
  649. jsonAlarm["compareRoadNum"] = it.RoadInfo.nCompareRoadNum;
  650. jsonAlarm["compareRoadName"] = it.RoadInfo.strCompareRoadName.toStdString();
  651. jsonAlarm["compareRoadType"] = static_cast<int>(it.RoadType);
  652. jsonAlarm["alarmStartTime"] = it.StartTime.toString("yyyy-MM-dd HH:mm:ss").toStdString();
  653. jsonAlarm["alarmEndTime"] = it.EndTime.toString("yyyy-MM-dd HH:mm:ss").toStdString();
  654. jsonAlarm["alarmDuration"] = it.StartTime.secsTo(it.EndTime);
  655. jsonAlarm["alarmFilePath"] = it.strAlarmFilePath;
  656. jsonAlarm["fileAlarmStartPos"] = it.AlarmStartPos;
  657. json1["paramList"] = jsonAlarm;
  658. jsonArray.push_back(json1);
  659. }
  660. QString strSend = QString::fromStdString(jsonArray.dump());
  661. QString strRet;
  662. int ret = m_httpApi->DBDoInterface(enDBOperatorType::EDBOT_BatchTransAction, strSend, strRet);
  663. if(ret != 0)
  664. {
  665. SPDLOG_LOGGER_ERROR(m_logger, "删除对比项检测时段信息失败: {}, {}", ret, m_httpApi->DoGetLastError(&ret).toStdString());
  666. return false;
  667. }
  668. }nJsonCatch
  669. return true;
  670. }