FromWebAPI.cpp 28 KB

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