FromWebAPI.cpp 48 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240
  1. #include "FromWebAPI.h"
  2. #include "GlobalVariable.h"
  3. #include "commonDefine.h"
  4. #include "spdlog.h"
  5. #include <QString>
  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, true);
  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, true);
  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.strSoundCardName = item["soundcardname"].get<std::string>();
  111. roadInfo.scRoadInfo.pcmInfo.strPCMName = item["soundcardpcmname"].get<std::string>();
  112. /* 如果这个通道是当前迭代器的,就直接插入,如果不是则重新寻找 */
  113. if(it->nID == itemID)
  114. {
  115. it->mapRoad.insert(roadInfo.nCompareRoadNum, roadInfo);
  116. }else {
  117. for(it = listItems.begin(); it != listItems.end(); ++it)
  118. {
  119. if(it->nID == itemID)
  120. {
  121. it->mapRoad.insert(roadInfo.nCompareRoadNum, roadInfo);
  122. break;
  123. }
  124. }
  125. }
  126. }
  127. }nJsonCatch
  128. return true;
  129. }
  130. /* 添加对比项信息 */
  131. bool FromWebAPI::insertCompareItem(const QList<CompareItemInfo_t>& listItems)
  132. {
  133. /*---------------------------------- 插入对比项信息 ------------------------------*/
  134. try
  135. {
  136. int key = 1;
  137. nJson jsonArray = nJson::array();
  138. for(const auto& item : listItems)
  139. {
  140. nJson json0;
  141. json0["opName"] = "ACAS_InsertCompareItem";
  142. json0["Key"] = key++;
  143. nJson jsonItem;
  144. jsonItem["itemID"] = item.nID;
  145. jsonItem["itemName"] = item.strName.toStdString();
  146. jsonItem["itemEnable"] = item.isEnable;
  147. jsonItem["roadCount"] = item.mapRoad.size();
  148. jsonItem["silentEnable"] = item.paramMute.isEnable;
  149. jsonItem["silentDuration"] = item.paramMute.nLen;
  150. jsonItem["silentThreshold"] = item.paramMute.threshold.nThreshold;
  151. jsonItem["silentSensitivity"] = item.paramMute.nSensitivity;
  152. jsonItem["overloadEnable"] = item.paramOverload.isEnable;
  153. jsonItem["overloadDuration"] = item.paramOverload.nLen;
  154. jsonItem["overloadThreshold"] = item.paramOverload.threshold.nThreshold;
  155. jsonItem["overloadSensitivity"] = item.paramOverload.nSensitivity;
  156. jsonItem["phaseEnable"] = item.paramPhase.isEnable;
  157. jsonItem["phaseDuration"] = item.paramPhase.nLen;
  158. jsonItem["phaseThreshold"] = item.paramPhase.threshold.dThreshold;
  159. jsonItem["phaseSensitivity"] = item.paramPhase.nSensitivity;
  160. json0["paramList"] = jsonItem;
  161. jsonArray.push_back(json0);
  162. }
  163. QString strSend = QString::fromStdString(jsonArray.dump());
  164. QString strRet;
  165. int ret = m_httpApi->DBDoInterface(enDBOperatorType::EDBOT_BatchTransAction, strSend, strRet, true);
  166. if(ret != 0)
  167. {
  168. SPDLOG_LOGGER_ERROR(m_logger, "添加对比项信息失败: {}, {}", ret, strRet.toStdString());
  169. return false;
  170. }
  171. }nJsonCatch
  172. /*---------------------------------- 插入对比项通道信息 ------------------------------*/
  173. if(!insertCompareItemRoad(listItems))
  174. {
  175. return false;
  176. }
  177. return true;
  178. }
  179. /* 插入对比项通道信息 */
  180. bool FromWebAPI::insertCompareItemRoad(const QList<CompareItemInfo_t>& listItems)
  181. {
  182. try
  183. {
  184. int Key = 1;
  185. nJson jsonArray = nJson::array();
  186. for(const auto& item : listItems)
  187. {
  188. for(const auto& road : item.mapRoad)
  189. {
  190. nJson json1;
  191. json1["opName"] = "ACAS_InsertCompareItemRoad";
  192. json1["Key"] = Key++;
  193. nJson jsonRoad;
  194. jsonRoad["itemID"] = item.nID;
  195. jsonRoad["roadNum"] = road.nCompareRoadNum;
  196. jsonRoad["roadName"] = road.strCompareRoadName.toStdString();
  197. jsonRoad["roadRecordEnable"] = road.isEnableRecord;
  198. jsonRoad["soundCardName"] = road.scRoadInfo.strSoundCardName;
  199. jsonRoad["soundCardPCMName"] = road.scRoadInfo.pcmInfo.strPCMName;
  200. json1["paramList"] = jsonRoad;
  201. jsonArray.push_back(json1);
  202. }
  203. }
  204. // SPDLOG_LOGGER_DEBUG(m_logger, "插入对比项通道信息: {}", jsonArray.dump(4));
  205. QString strSend = QString::fromStdString(jsonArray.dump());
  206. QString strRet;
  207. int ret = m_httpApi->DBDoInterface(enDBOperatorType::EDBOT_BatchTransAction, strSend, strRet, true);
  208. if(ret != 0)
  209. {
  210. SPDLOG_LOGGER_ERROR(m_logger, "添加对比项通道信息失败: {}, {}", ret, m_httpApi->DoGetLastError(&ret).toStdString());
  211. return false;
  212. }
  213. }nJsonCatch
  214. return true;
  215. }
  216. /* 修改对比项信息 */
  217. bool FromWebAPI::updateCompareItemOnly(const QList<CompareItemInfo_t>& listItems)
  218. {
  219. /*---------------------------------- 更新对比项信息 ------------------------------*/
  220. try
  221. {
  222. int key = 1;
  223. nJson jsonArray = nJson::array();
  224. for(const auto& item : listItems)
  225. {
  226. nJson json0;
  227. json0["opName"] = "ACAS_UpdateCompareItem";
  228. json0["Key"] = key++;
  229. nJson jsonItem;
  230. jsonItem["itemID"] = item.nID;
  231. jsonItem["itemName"] = item.strName.toStdString();
  232. jsonItem["itemEnable"] = item.isEnable;
  233. jsonItem["roadCount"] = item.mapRoad.size();
  234. jsonItem["silentEnable"] = item.paramMute.isEnable;
  235. jsonItem["silentDuration"] = item.paramMute.nLen;
  236. jsonItem["silentThreshold"] = item.paramMute.threshold.nThreshold;
  237. jsonItem["silentSensitivity"] = item.paramMute.nSensitivity;
  238. jsonItem["overloadEnable"] = item.paramOverload.isEnable;
  239. jsonItem["overloadDuration"] = item.paramOverload.nLen;
  240. jsonItem["overloadThreshold"] = item.paramOverload.threshold.nThreshold;
  241. jsonItem["overloadSensitivity"] = item.paramOverload.nSensitivity;
  242. jsonItem["phaseEnable"] = item.paramPhase.isEnable;
  243. jsonItem["phaseDuration"] = item.paramPhase.nLen;
  244. jsonItem["phaseThreshold"] = item.paramPhase.threshold.dThreshold;
  245. jsonItem["phaseSensitivity"] = item.paramPhase.nSensitivity;
  246. json0["paramList"] = jsonItem;
  247. jsonArray.push_back(json0);
  248. }
  249. QString strSend = QString::fromStdString(jsonArray.dump());
  250. QString strRet;
  251. int ret = m_httpApi->DBDoInterface(enDBOperatorType::EDBOT_BatchTransAction, strSend, strRet, true);
  252. if(ret != 0)
  253. {
  254. SPDLOG_LOGGER_ERROR(m_logger, "更新对比项信息失败: {}, {}", ret, m_httpApi->DoGetLastError(&ret).toStdString());
  255. return false;
  256. }
  257. }nJsonCatch
  258. return true;
  259. }
  260. /* 只更新对比项通道信息,通过先删除所有的itemID的对比项,再插入所有的itemID的对比项来实现 */
  261. bool FromWebAPI::updateCompareItemRoadOnly(const QList<CompareItemInfo_t>& listItems)
  262. {
  263. /*---------------------------------- 删除对比项通道信息 ------------------------------*/
  264. QList<int> listItemIDs;
  265. for(const auto& item : listItems)
  266. {
  267. listItemIDs.append(item.nID);
  268. }
  269. if(!deleteCompareItemRoad(listItemIDs))
  270. {
  271. return false;
  272. }
  273. /*---------------------------------- 插入对比项通道信息 ------------------------------*/
  274. if(!insertCompareItemRoad(listItems))
  275. {
  276. return false;
  277. }
  278. return true;
  279. }
  280. /* 更新一条对比项通道信息 */
  281. bool FromWebAPI::updateCompareItemOneRoadOnly(const QList<CompareItemInfo_t>& listItems)
  282. {
  283. /*---------------------------------- 更新对比项通道信息 ------------------------------*/
  284. try
  285. {
  286. int Key = 1;
  287. nJson jsonArray = nJson::array();
  288. for(const auto& item : listItems)
  289. {
  290. for(const auto& road : item.mapRoad)
  291. {
  292. nJson json1;
  293. json1["opName"] = "ACAS_UpdateCompareItemOneRoad";
  294. json1["Key"] = Key++;
  295. nJson jsonRoad;
  296. jsonRoad["itemID"] = item.nID;
  297. jsonRoad["roadNum"] = road.nCompareRoadNum;
  298. jsonRoad["roadName"] = road.strCompareRoadName.toStdString();
  299. jsonRoad["roadRecordEnable"] = road.isEnableRecord;
  300. jsonRoad["soundCardName"] = road.scRoadInfo.strSoundCardName;
  301. jsonRoad["soundCardPCMName"] = road.scRoadInfo.pcmInfo.strPCMName;
  302. json1["paramList"] = jsonRoad;
  303. jsonArray.push_back(json1);
  304. }
  305. }
  306. QString strSend = QString::fromStdString(jsonArray.dump());
  307. QString strRet;
  308. int ret = m_httpApi->DBDoInterface(enDBOperatorType::EDBOT_BatchTransAction, strSend, strRet, true);
  309. if(ret != 0)
  310. {
  311. SPDLOG_LOGGER_ERROR(m_logger, "更新对比项通道信息失败: {}, {}", ret, m_httpApi->DoGetLastError(&ret).toStdString());
  312. return false;
  313. }
  314. }nJsonCatch
  315. return true;
  316. }
  317. /* 删除对比项信息 */
  318. bool FromWebAPI::deleteCompareItem(const QList<int> listIDs)
  319. {
  320. /*---------------------------------- 删除对比项信息 ------------------------------*/
  321. try
  322. {
  323. int Key = 1;
  324. nJson jsonArray = nJson::array();
  325. for(int id : listIDs)
  326. {
  327. nJson json0;
  328. json0["opName"] = "ACAS_DeleteCompareItem";
  329. json0["Key"] = Key++;
  330. nJson jsonItem;
  331. jsonItem["itemID"] = id;
  332. json0["paramList"] = jsonItem;
  333. jsonArray.push_back(json0);
  334. }
  335. QString strSend = QString::fromStdString(jsonArray.dump());
  336. QString strRet;
  337. int ret = m_httpApi->DBDoInterface(enDBOperatorType::EDBOT_BatchTransAction, strSend, strRet, true);
  338. if(ret != 0)
  339. {
  340. SPDLOG_LOGGER_ERROR(m_logger, "删除对比项信息失败: {}, {}", ret, m_httpApi->DoGetLastError(&ret).toStdString());
  341. return false;
  342. }
  343. }nJsonCatch
  344. /*---------------------------------- 删除对比项通道信息 ------------------------------*/
  345. deleteCompareItemRoad(listIDs);
  346. return true;
  347. }
  348. /* 删除对比项通道信息 */
  349. bool FromWebAPI::deleteCompareItemRoad(const QList<int>& listIDs)
  350. {
  351. /* 在创建表格的时候,设置了ItemID的关联关系,在上面删除对比项ID的时候,这个表格里的项目应该也会自动删除 */
  352. try
  353. {
  354. int Key = 1;
  355. nJson jsonArray = nJson::array();
  356. for(int id : listIDs)
  357. {
  358. nJson json1;
  359. json1["opName"] = "ACAS_DeleteCompareItemAllRoad";
  360. json1["Key"] = Key++;
  361. nJson jsonRoad;
  362. jsonRoad["itemID"] = id;
  363. json1["paramList"] = jsonRoad;
  364. jsonArray.push_back(json1);
  365. }
  366. QString strSend = QString::fromStdString(jsonArray.dump());
  367. QString strRet;
  368. int ret = m_httpApi->DBDoInterface(enDBOperatorType::EDBOT_BatchTransAction, strSend, strRet, true);
  369. if(ret != 0)
  370. {
  371. SPDLOG_LOGGER_ERROR(m_logger, "删除对比项通道信息失败: {}, {}", ret, m_httpApi->DoGetLastError(&ret).toStdString());
  372. return false;
  373. }
  374. }nJsonCatch
  375. return true;
  376. }
  377. /* 只删除对比项通道信息,int是对比项ID */
  378. bool FromWebAPI::deleteCompareItemRoad(QMap<int, QList<int>>& mapItemRoads)
  379. {
  380. /*---------------------------------- 删除对比项通道信息 ------------------------------*/
  381. try
  382. {
  383. int Key = 1;
  384. nJson jsonArray = nJson::array();
  385. for(auto it = mapItemRoads.begin(); it != mapItemRoads.end(); ++it)
  386. {
  387. int itemID = it.key();
  388. for(int roadNum : it.value())
  389. {
  390. nJson json1;
  391. json1["opName"] = "ACAS_DeleteCompareItemOneRoad";
  392. json1["Key"] = Key++;
  393. nJson jsonRoad;
  394. jsonRoad["itemID"] = itemID;
  395. jsonRoad["roadNum"] = roadNum;
  396. json1["paramList"] = jsonRoad;
  397. jsonArray.push_back(json1);
  398. }
  399. }
  400. QString strSend = QString::fromStdString(jsonArray.dump());
  401. QString strRet;
  402. int ret = m_httpApi->DBDoInterface(enDBOperatorType::EDBOT_BatchTransAction, strSend, strRet, true);
  403. if(ret != 0)
  404. {
  405. SPDLOG_LOGGER_ERROR(m_logger, "删除对比项通道信息失败: {}, {}", ret, m_httpApi->DoGetLastError(&ret).toStdString());
  406. return false;
  407. }
  408. }nJsonCatch
  409. return true;
  410. }
  411. /* 获取系统配置信息 */
  412. bool FromWebAPI::getSystemConfig(QMap<std::string, std::string>& mapConfig)
  413. {
  414. try
  415. {
  416. nJson json0;
  417. json0["opName"] = "ACAS_GetSystemConfigInfo";
  418. QString strSend = QString::fromStdString(json0.dump());
  419. QString strRet;
  420. int ret = m_httpApi->DBDoInterface(enDBOperatorType::EDBOT_Select, strSend, strRet, true);
  421. if(ret != 0)
  422. {
  423. SPDLOG_LOGGER_ERROR(m_logger, "获取系统配置信息失败, 错误码: {}, {}", ret, strRet.toStdString());
  424. return false;
  425. }
  426. nJson jsonRet;
  427. /* 将json的key全部转换成小写 */
  428. convertJsonKeyToLower(nJson::parse(strRet.toStdString()), jsonRet);
  429. int code = jsonRet["code"].get<int>();
  430. if(code != 0)
  431. {
  432. SPDLOG_LOGGER_ERROR(m_logger, "获取系统配置信息失败,错误码: {}, 错误信息: {}", code, jsonRet["message"].get<std::string>());
  433. return false;
  434. }
  435. nJson jsonResult = jsonRet["result"];
  436. for(const auto& item : jsonResult)
  437. {
  438. std::string key = item["configkey"].get<std::string>();
  439. std::string value = item["configvalue"].get<std::string>();
  440. mapConfig.insert(key, value);
  441. }
  442. }nJsonCatch
  443. return true;
  444. }
  445. /* 更新系统配置信息 */
  446. bool FromWebAPI::updateSystemConfig(const std::string& key, const std::string& value, const std::string& desc)
  447. {
  448. try
  449. {
  450. nJson json0;
  451. json0["opName"] = "ACAS_UpdateSystemConfigInfo";
  452. nJson jsonData;
  453. jsonData["configKey"] = key;
  454. jsonData["configValue"] = value;
  455. jsonData["configDesc"] = desc;
  456. json0["paramList"] = jsonData;
  457. QString strSend = QString::fromStdString(json0.dump());
  458. QString strRet;
  459. int ret = m_httpApi->DBDoInterface(enDBOperatorType::EDBOT_Update, strSend, strRet, true);
  460. if(ret != 0)
  461. {
  462. SPDLOG_LOGGER_ERROR(m_logger, "更新系统设置失败, 错误码:{}, {}", ret, strRet.toStdString());
  463. return false;
  464. }
  465. }nJsonCatch
  466. return true;
  467. }
  468. /* 获取检测时段配置 */
  469. bool FromWebAPI::getDetectPeriodConfig(QMap<int, DetectPeriodConfig_t>& mapDetectConfig)
  470. {
  471. try
  472. {
  473. nJson json0;
  474. json0["opName"] = "ACAS_GetDetectPeriod";
  475. QString strSend = QString::fromStdString(json0.dump());
  476. QString strRet;
  477. int ret = m_httpApi->DBDoInterface(enDBOperatorType::EDBOT_Select, strSend, strRet, true);
  478. if(ret != 0)
  479. {
  480. SPDLOG_LOGGER_ERROR(m_logger, "获取对比项检测时段信息失败, 错误码: {}, {}", ret, strRet.toStdString());
  481. return false;
  482. }
  483. nJson jsonRet;
  484. /* 将json的key全部转换成小写 */
  485. convertJsonKeyToLower(nJson::parse(strRet.toStdString()), jsonRet);
  486. int code = jsonRet["code"].get<int>();
  487. if(code != 0)
  488. {
  489. SPDLOG_LOGGER_ERROR(m_logger, "获取对比项检测时段信息失败,错误码: {}, 错误信息: {}", code, jsonRet["message"].get<std::string>());
  490. return false;
  491. }
  492. nJson jsonResult = jsonRet["result"];
  493. mapDetectConfig.clear();
  494. bool isOnceAsOthrer = true;
  495. for(const auto& it : jsonResult)
  496. {
  497. int id = it["itemid"].get<int>();
  498. /* 如果这个ID不存在,会默认创建一个 DetectPeriodConfig_t,以这个ID为键 */
  499. DetectPeriodConfig_t& detectConfig = mapDetectConfig[id];
  500. detectConfig.nID = id;
  501. bool isDetect = it["isdetect"].get<bool>();
  502. if(isDetect)
  503. {
  504. /* 是检测时段 */
  505. OnePlan_t plan;
  506. plan.weekType = static_cast<eWeekType>(it["weektype"].get<int>());
  507. plan.timeStart = QTime::fromString(QString::fromStdString(it["timestart"].get<std::string>()), "HH:mm:ss");
  508. plan.timeEnd = QTime::fromString(QString::fromStdString(it["timeend"].get<std::string>()), "HH:mm:ss");
  509. detectConfig.listDetect.append(plan);
  510. }else
  511. {
  512. /* 不是检测时段 */
  513. OnePlan_t plan;
  514. plan.date = it["cdate"].is_null() ? QDate() : QDate::fromString(QString::fromStdString(it["cdate"].get<std::string>()), "yyyy-MM-dd");
  515. plan.timeStart = QTime::fromString(QString::fromStdString(it["timestart"].get<std::string>()), "HH:mm:ss");
  516. plan.timeEnd = QTime::fromString(QString::fromStdString(it["timeend"].get<std::string>()), "HH:mm:ss");
  517. detectConfig.listNoDetect.append(plan);
  518. }
  519. /* 获取计划是否应用于静音、过载、反相、噪音检测 */
  520. if(isOnceAsOthrer)
  521. {
  522. detectConfig.isApplySlient = it["applyslient"].get<bool>();
  523. detectConfig.isApplyOverload = it["applyoverload"].get<bool>();
  524. detectConfig.isApplyPhase = it["applyphase"].get<bool>();
  525. detectConfig.isApplyNoise = it["applynoise"].get<bool>();
  526. isOnceAsOthrer = false; // 只需要获取一次就行了
  527. }
  528. }
  529. }nJsonCatch
  530. return true;
  531. }
  532. /* 插入检测时段配置 */
  533. bool FromWebAPI::insertDetectPeriodConfig(const QMap<int, DetectPeriodConfig_t>& mapDetectConfig)
  534. {
  535. try
  536. {
  537. int Key = 1;
  538. nJson jsonArray = nJson::array();
  539. for(auto it = mapDetectConfig.begin(); it != mapDetectConfig.end(); ++it)
  540. {
  541. int itemID = it.key();
  542. /* 先添加检测计划 */
  543. for(auto& plan : it.value().listDetect)
  544. {
  545. nJson json1;
  546. json1["opName"] = "ACAS_InsertDetectPeriod";
  547. json1["Key"] = Key++;
  548. nJson jsonPlan;
  549. jsonPlan["itemID"] = itemID;
  550. jsonPlan["isDetect"] = true;
  551. jsonPlan["weekType"] = static_cast<int>(plan.weekType);
  552. jsonPlan["cDate"] = ""; // 检测计划没有日期
  553. jsonPlan["timeStart"] = plan.timeStart.toString("HH:mm:ss").toStdString();
  554. jsonPlan["timeEnd"] = plan.timeEnd.toString("HH:mm:ss").toStdString();
  555. /* 设置是否应用于其它检测 */
  556. jsonPlan["applySlient"] = it.value().isApplySlient;
  557. jsonPlan["applyOverload"] = it.value().isApplyOverload;
  558. jsonPlan["applyPhase"] = it.value().isApplyPhase;
  559. jsonPlan["applyNoise"] = it.value().isApplyNoise;
  560. json1["paramList"] = jsonPlan;
  561. jsonArray.push_back(json1);
  562. }
  563. /* 再添加非检测计划 */
  564. for(auto& plan : it.value().listNoDetect)
  565. {
  566. nJson json1;
  567. json1["opName"] = "ACAS_InsertDetectPeriod";
  568. json1["Key"] = Key++;
  569. nJson jsonPlan;
  570. jsonPlan["itemID"] = itemID;
  571. jsonPlan["isDetect"] = false;
  572. jsonPlan["weekType"] = static_cast<int>(eWeekType::Week_Special);
  573. jsonPlan["cDate"] = plan.date.isValid() ? plan.date.toString("yyyy-MM-dd").toStdString() : "";
  574. jsonPlan["timeStart"] = plan.timeStart.toString("HH:mm:ss").toStdString();
  575. jsonPlan["timeEnd"] = plan.timeEnd.toString("HH:mm:ss").toStdString();
  576. /* 设置是否应用于其它检测 */
  577. jsonPlan["applySlient"] = it.value().isApplySlient;
  578. jsonPlan["applyOverload"] = it.value().isApplyOverload;
  579. jsonPlan["applyPhase"] = it.value().isApplyPhase;
  580. jsonPlan["applyNoise"] = it.value().isApplyNoise;
  581. json1["paramList"] = jsonPlan;
  582. jsonArray.push_back(json1);
  583. }
  584. }
  585. QString strSend = QString::fromStdString(jsonArray.dump());
  586. QString strRet;
  587. int ret = m_httpApi->DBDoInterface(enDBOperatorType::EDBOT_BatchTransAction, strSend, strRet, true);
  588. if(ret != 0)
  589. {
  590. SPDLOG_LOGGER_ERROR(m_logger, "写入 对比项检测计划 信息失败: {}, {}", ret, m_httpApi->DoGetLastError(&ret).toStdString());
  591. return false;
  592. }
  593. }nJsonCatch
  594. return true;
  595. }
  596. /* 删除某些对比项的检测时段 */
  597. bool FromWebAPI::deleteDetectPeriodConfig(const QList<int>& listIDs)
  598. {
  599. try
  600. {
  601. int Key = 1;
  602. nJson jsonArray = nJson::array();
  603. for(auto it : listIDs)
  604. {
  605. int itemID = it;
  606. nJson json1;
  607. json1["opName"] = "ACAS_DeleteDetectPeriod";
  608. json1["Key"] = Key++;
  609. nJson josnItem;
  610. josnItem["itemID"] = itemID;
  611. json1["paramList"] = josnItem;
  612. jsonArray.push_back(json1);
  613. }
  614. QString strSend = QString::fromStdString(jsonArray.dump());
  615. QString strRet;
  616. int ret = m_httpApi->DBDoInterface(enDBOperatorType::EDBOT_BatchTransAction, strSend, strRet, true);
  617. if(ret != 0)
  618. {
  619. SPDLOG_LOGGER_ERROR(m_logger, "删除对比项检测时段信息失败: {}, {}", ret, m_httpApi->DoGetLastError(&ret).toStdString());
  620. return false;
  621. }
  622. }nJsonCatch
  623. return true;
  624. }
  625. /* 写入报警信息 */
  626. bool FromWebAPI::insertAlarmInfo(const std::list<AlarmInfo_t>& listAlarm)
  627. {
  628. try
  629. {
  630. int Key = 1;
  631. nJson jsonArray = nJson::array();
  632. for(auto it : listAlarm)
  633. {
  634. nJson json1;
  635. json1["opName"] = "ACAS_InsertAlarmInfo";
  636. json1["Key"] = Key++;
  637. nJson jsonAlarm;
  638. jsonAlarm["itemID"] = it.CompareItemID;
  639. jsonAlarm["itemName"] = it.strCompareItemName.toStdString();
  640. jsonAlarm["alarmType"] = static_cast<int>(it.AlarmType);
  641. jsonAlarm["soundCardName"] = it.RoadInfo.scRoadInfo.strSoundCardName;
  642. jsonAlarm["soundCardPCMName"] = it.RoadInfo.scRoadInfo.pcmInfo.strPCMName;
  643. jsonAlarm["compareRoadNum"] = it.RoadInfo.nCompareRoadNum;
  644. jsonAlarm["compareRoadName"] = it.RoadInfo.strCompareRoadName.toStdString();
  645. jsonAlarm["compareRoadType"] = static_cast<int>(it.RoadType);
  646. jsonAlarm["alarmStartTime"] = it.StartTime.toString("yyyy-MM-dd HH:mm:ss").toStdString();
  647. jsonAlarm["alarmEndTime"] = it.EndTime.toString("yyyy-MM-dd HH:mm:ss").toStdString();
  648. jsonAlarm["alarmDuration"] = it.StartTime.secsTo(it.EndTime);
  649. jsonAlarm["alarmFilePath"] = it.strAlarmFilePath.toStdString();
  650. jsonAlarm["fileAlarmStartPos"] = it.AlarmStartPos;
  651. jsonAlarm["fileState"] = static_cast<int>(it.fileState);
  652. json1["paramList"] = jsonAlarm;
  653. jsonArray.push_back(json1);
  654. }
  655. QString strSend = QString::fromStdString(jsonArray.dump());
  656. QString strRet;
  657. int ret = m_httpApi->DBDoInterface(enDBOperatorType::EDBOT_BatchTransAction, strSend, strRet, true);
  658. if(ret != 0)
  659. {
  660. SPDLOG_LOGGER_ERROR(m_logger, "写入报警数据失败: {}, {}", ret, m_httpApi->DoGetLastError(&ret).toStdString());
  661. return false;
  662. }
  663. }nJsonCatch
  664. return true;
  665. }
  666. /* 写入一致性报警信息,先写入主通道报警,获取返回的PKID,再写入次通道数据 */
  667. bool FromWebAPI::insertConsistencyAlarmInfo(const AlarmInfo_t& mainAlarm, const AlarmInfo_t& subAlarm)
  668. {
  669. try
  670. {
  671. nJson json0;
  672. json0["opName"] = "ACAS_InsertTwoAlarmInfo";
  673. nJson json1;
  674. json1["itemID1"] = mainAlarm.CompareItemID;
  675. json1["itemName1"] = mainAlarm.strCompareItemName.toStdString();
  676. json1["alarmType1"] = static_cast<int>(mainAlarm.AlarmType);
  677. json1["soundCardName1"] = mainAlarm.RoadInfo.scRoadInfo.strSoundCardName;
  678. json1["soundCardPCMName1"] = mainAlarm.RoadInfo.scRoadInfo.pcmInfo.strPCMName;
  679. json1["compareRoadNum1"] = mainAlarm.RoadInfo.nCompareRoadNum;
  680. json1["compareRoadName1"] = mainAlarm.RoadInfo.strCompareRoadName.toStdString();
  681. json1["compareRoadType1"] = static_cast<int>(mainAlarm.RoadType);
  682. json1["alarmStartTime1"] = mainAlarm.StartTime.toString("yyyy-MM-dd HH:mm:ss").toStdString();
  683. json1["alarmEndTime1"] = mainAlarm.EndTime.toString("yyyy-MM-dd HH:mm:ss").toStdString();
  684. json1["alarmDuration1"] = mainAlarm.StartTime.secsTo(mainAlarm.EndTime);
  685. json1["alarmFilePath1"] = mainAlarm.strAlarmFilePath.toStdString();
  686. json1["fileAlarmStartPos1"] = mainAlarm.AlarmStartPos;
  687. json1["fileState1"] = static_cast<int>(mainAlarm.fileState);
  688. json1["itemID2"] = subAlarm.CompareItemID;
  689. json1["itemName2"] = subAlarm.strCompareItemName.toStdString();
  690. json1["alarmType2"] = static_cast<int>(subAlarm.AlarmType);
  691. json1["soundCardName2"] = subAlarm.RoadInfo.scRoadInfo.strSoundCardName;
  692. json1["soundCardPCMName2"] = subAlarm.RoadInfo.scRoadInfo.pcmInfo.strPCMName;
  693. json1["compareRoadNum2"] = subAlarm.RoadInfo.nCompareRoadNum;
  694. json1["compareRoadName2"] = subAlarm.RoadInfo.strCompareRoadName.toStdString();
  695. json1["compareRoadType2"] = static_cast<int>(subAlarm.RoadType);
  696. json1["alarmStartTime2"] = subAlarm.StartTime.toString("yyyy-MM-dd HH:mm:ss").toStdString();
  697. json1["alarmEndTime2"] = subAlarm.EndTime.toString("yyyy-MM-dd HH:mm:ss").toStdString();
  698. json1["alarmDuration2"] = subAlarm.StartTime.secsTo(subAlarm.EndTime);
  699. json1["alarmFilePath2"] = subAlarm.strAlarmFilePath.toStdString();
  700. json1["fileAlarmStartPos2"] = subAlarm.AlarmStartPos;
  701. json1["fileState2"] = static_cast<int>(subAlarm.fileState);
  702. json0["paramList"] = json1;
  703. SPDLOG_LOGGER_DEBUG(m_logger, "写入一致性报警信息: {}", json0.dump(4));
  704. QString strSend = QString::fromStdString(json0.dump());
  705. QString strRet;
  706. int ret = m_httpApi->DBDoInterface(enDBOperatorType::EDBOT_Insert, strSend, strRet, true);
  707. if(ret != 0)
  708. {
  709. SPDLOG_LOGGER_ERROR(m_logger, "写入一致性报警信息失败: {}, {}", ret, m_httpApi->DoGetLastError(&ret).toStdString());
  710. return false;
  711. }
  712. }nJsonCatch
  713. return true;
  714. }
  715. /* 删除早于一定时间的报警信息 */
  716. bool FromWebAPI::deleteAlarmInfoBeforeTime(const QDateTime& timePoint)
  717. {
  718. try
  719. {
  720. nJson json0;
  721. json0["opName"] = "ACAS_DeleteAlarmFileInfoBeforeTime";
  722. nJson jsonParam;
  723. jsonParam["timePoint"] = timePoint.toString("yyyy-MM-dd HH:mm:ss").toStdString();
  724. json0["paramList"] = jsonParam;
  725. QString strSend = QString::fromStdString(json0.dump());
  726. QString strRet;
  727. int ret = m_httpApi->DBDoInterface(enDBOperatorType::EDBOT_Delete, strSend, strRet, true);
  728. if(ret != 0)
  729. {
  730. SPDLOG_LOGGER_ERROR(m_logger, "删除早于一定时间的报警信息失败: {}, {}", ret, m_httpApi->DoGetLastError(&ret).toStdString());
  731. return false;
  732. }
  733. }nJsonCatch
  734. return true;
  735. }
  736. /* 获取早于某个时间点的报警信息 */
  737. bool FromWebAPI::getAlarmInfoBeforeTime(const QDateTime& timePoint, std::list<AlarmInfo_t>& listAlarm)
  738. {
  739. try
  740. {
  741. nJson json0;
  742. json0["opName"] = "ACAS_GetAlarmFileInfoBeforeTime";
  743. nJson jsonParam;
  744. jsonParam["timePoint"] = timePoint.toString("yyyy-MM-dd HH:mm:ss").toStdString();
  745. json0["paramList"] = jsonParam;
  746. QString strSend = QString::fromStdString(json0.dump());
  747. QString strRet;
  748. int ret = m_httpApi->DBDoInterface(enDBOperatorType::EDBOT_Select, strSend, strRet, true);
  749. if(ret != 0)
  750. {
  751. SPDLOG_LOGGER_ERROR(m_logger, "获取早于某个时间点的报警信息失败: {}, {}", ret, strRet.toStdString());
  752. return false;
  753. }
  754. nJson jsonRet;
  755. /* 将json的key全部转换成小写 */
  756. convertJsonKeyToLower(nJson::parse(strRet.toStdString()), jsonRet);
  757. int code = jsonRet["code"].get<int>();
  758. if(code != 0)
  759. {
  760. SPDLOG_LOGGER_ERROR(m_logger, "获取早于某个时间点的报警信息失败,错误码: {}, 错误信息: {}", code, jsonRet["message"].get<std::string>());
  761. return false;
  762. }
  763. nJson jsonResult = jsonRet["result"];
  764. listAlarm.clear();
  765. for(const auto& it : jsonResult)
  766. {
  767. AlarmInfo_t alarm;
  768. alarm.PKID = it["pkid"].get<int>();
  769. alarm.CompareItemID = it["itemid"].get<int>();
  770. alarm.strCompareItemName = QString::fromStdString(it["itemname"].get<std::string>());
  771. alarm.StartTime = QDateTime::fromString(QString::fromStdString(it["alarmstarttime"].get<std::string>()), "yyyy-MM-dd HH:mm:ss");
  772. alarm.EndTime = QDateTime::fromString(QString::fromStdString(it["alarmendtime"].get<std::string>()), "yyyy-MM-dd HH:mm:ss");
  773. alarm.strAlarmFilePath = QString::fromStdString(it["alarmfilepath"].get<std::string>());
  774. alarm.fileState = static_cast<eRecordState>(it["filestate"].get<int>());
  775. listAlarm.push_back(alarm);
  776. }
  777. } nJsonCatch
  778. return true;
  779. }
  780. /* 更新报警文件的状态 */
  781. bool FromWebAPI::updateAlarmFileState(const std::list<AlarmInfo_t>& listAlarm)
  782. {
  783. try
  784. {
  785. nJson json0 = nJson::array();
  786. int Key = 1;
  787. for(const auto& alarm : listAlarm)
  788. {
  789. nJson jsonItem;
  790. jsonItem["opName"] = "ACAS_UpdateAlarmFileStateOne";
  791. jsonItem["Key"] = Key++;
  792. nJson jsonParam;
  793. jsonParam["pkid"] = alarm.PKID;
  794. jsonParam["fileState"] = static_cast<int>(alarm.fileState);
  795. jsonItem["paramList"] = jsonParam;
  796. json0.push_back(jsonItem);
  797. }
  798. // SPDLOG_LOGGER_DEBUG(m_logger, "更新报警文件状态: {}", json0.dump(4));
  799. QString strSend = QString::fromStdString(json0.dump());
  800. // SPDLOG_LOGGER_DEBUG(m_logger, "strSend Size: {}", strSend.size());
  801. QString strRet;
  802. int ret = m_httpApi->DBDoInterface(enDBOperatorType::EDBOT_BatchTransAction, strSend, strRet, true);
  803. if(ret != 0)
  804. {
  805. SPDLOG_LOGGER_ERROR(m_logger, "更新报警文件状态失败失败: {}, {}", ret, strRet.toStdString());
  806. return false;
  807. }
  808. } nJsonCatch
  809. return true;
  810. }
  811. /* 插入录音文件信息 */
  812. bool FromWebAPI::insertRecordFileInfo(const std::list<RecordFileInfo_t>& listRecordFile)
  813. {
  814. try
  815. {
  816. int Key = 1;
  817. nJson jsonArray = nJson::array();
  818. for(auto it : listRecordFile)
  819. {
  820. nJson json1;
  821. json1["opName"] = "ACAS_InsertRecordFileInfo";
  822. json1["Key"] = Key++;
  823. nJson jsonRecord;
  824. jsonRecord["itemID"] = it.ItemID;
  825. jsonRecord["itemName"] = it.ItemName.toStdString();
  826. jsonRecord["itemRoadNum"] = it.ItemRoadNum;
  827. jsonRecord["itemRoadName"] = it.ItemRoadName.toStdString();
  828. jsonRecord["soundCardName"] = it.scRoadInfo.strSoundCardName;
  829. jsonRecord["soundCardPCMName"] = it.scRoadInfo.pcmInfo.strPCMName;
  830. jsonRecord["fileStartTime"] = it.FileStartTime.toString("yyyy-MM-dd HH:mm:ss").toStdString();
  831. jsonRecord["fileEndTime"] = it.FileEndTime.toString("yyyy-MM-dd HH:mm:ss").toStdString();
  832. jsonRecord["fileDuration"] = it.FileStartTime.secsTo(it.FileEndTime);
  833. jsonRecord["filePath"] = it.FilePath.toStdString();
  834. jsonRecord["fileState"] = static_cast<int>(it.fileState);
  835. json1["paramList"] = jsonRecord;
  836. jsonArray.push_back(json1);
  837. }
  838. // SPDLOG_LOGGER_DEBUG(m_logger, "写入录音文件信息: {}", jsonArray.dump(4));
  839. QString strSend = QString::fromStdString(jsonArray.dump());
  840. QString strRet;
  841. int ret = m_httpApi->DBDoInterface(enDBOperatorType::EDBOT_BatchTransAction, strSend, strRet, true);
  842. if(ret != 0)
  843. {
  844. SPDLOG_LOGGER_ERROR(m_logger, "写入录音文件数据失败: {}, {}", ret, m_httpApi->DoGetLastError(&ret).toStdString());
  845. return false;
  846. }
  847. }nJsonCatch
  848. return true;
  849. }
  850. /* 更新录音文件信息,更新结束时间和文件名,1分钟写入一次文件,也就更新一次 */
  851. bool FromWebAPI::updateRecordFileInfo(const std::list<RecordFileInfo_t>& listRecordFile)
  852. {
  853. try
  854. {
  855. int Key = 1;
  856. nJson jsonArray = nJson::array();
  857. for(auto it : listRecordFile)
  858. {
  859. nJson json1;
  860. json1["opName"] = "ACAS_UpdateRecordFileEndTime";
  861. json1["Key"] = Key++;
  862. nJson jsonRecord;
  863. jsonRecord["itemID"] = it.ItemID;
  864. jsonRecord["itemRoadNum"] = it.ItemRoadNum;
  865. jsonRecord["itemRoadName"] = it.ItemRoadName.toStdString();
  866. jsonRecord["soundCardName"] = it.scRoadInfo.strSoundCardName;
  867. jsonRecord["soundCardPCMName"] = it.scRoadInfo.pcmInfo.strPCMName;
  868. jsonRecord["fileStartTime"] = it.FileStartTime.toString("yyyy-MM-dd HH:mm:ss").toStdString();
  869. jsonRecord["fileEndTime"] = it.FileEndTime.toString("yyyy-MM-dd HH:mm:ss").toStdString();
  870. jsonRecord["fileDuration"] = it.FileStartTime.secsTo(it.FileEndTime);
  871. jsonRecord["filePath"] = it.FilePath.toStdString();
  872. jsonRecord["fileState"] = static_cast<int>(it.fileState);
  873. json1["paramList"] = jsonRecord;
  874. jsonArray.push_back(json1);
  875. }
  876. QString strSend = QString::fromStdString(jsonArray.dump());
  877. QString strRet;
  878. int ret = m_httpApi->DBDoInterface(enDBOperatorType::EDBOT_BatchTransAction, strSend, strRet, true);
  879. if(ret != 0)
  880. {
  881. SPDLOG_LOGGER_ERROR(m_logger, "更新录音文件数据失败: {}, {}", ret, m_httpApi->DoGetLastError(&ret).toStdString());
  882. return false;
  883. }
  884. }nJsonCatch
  885. return true;
  886. }
  887. /* 将所有的录音文件状态设置为已删除 */
  888. bool FromWebAPI::deleteAllRecordFileInfo()
  889. {
  890. try
  891. {
  892. nJson json0;
  893. json0["opName"] = "ACAS_DeleteAllRecordFileInfo";
  894. QString strSend = QString::fromStdString(json0.dump());
  895. QString strRet;
  896. int ret = m_httpApi->DBDoInterface(enDBOperatorType::EDBOT_Delete, strSend, strRet, true);
  897. if(ret != 0)
  898. {
  899. SPDLOG_LOGGER_ERROR(m_logger, "设置所有录音文件状态失败: {}, {}", ret, m_httpApi->DoGetLastError(&ret).toStdString());
  900. return false;
  901. }
  902. }nJsonCatch
  903. return true;
  904. }
  905. /* 删除早于一定时间的录音文件信息 */
  906. bool FromWebAPI::deleteRecordFileInfoBeforeTime(const QDateTime& timePoint)
  907. {
  908. try
  909. {
  910. nJson json0;
  911. json0["opName"] = "ACAS_DeleteRecordFileInfoBeforeTime";
  912. nJson jsonParam;
  913. jsonParam["timePoint"] = timePoint.toString("yyyy-MM-dd HH:mm:ss").toStdString();
  914. json0["paramList"] = jsonParam;
  915. QString strSend = QString::fromStdString(json0.dump());
  916. QString strRet;
  917. int ret = m_httpApi->DBDoInterface(enDBOperatorType::EDBOT_Delete, strSend, strRet, true);
  918. if(ret != 0)
  919. {
  920. SPDLOG_LOGGER_ERROR(m_logger, "删除早于一定时间的录音文件信息失败: {}, {}", ret, m_httpApi->DoGetLastError(&ret).toStdString());
  921. return false;
  922. }
  923. }nJsonCatch
  924. return true;
  925. }
  926. /* 获取早于某个时间点的录音文件信息 */
  927. bool FromWebAPI::getRecordFileInfoBeforeTime(const QDateTime& timePoint, std::list<RecordFileInfo_t>& listRecordFile)
  928. {
  929. try
  930. {
  931. nJson json0;
  932. json0["opName"] = "ACAS_GetRecordFileInfoBeforeTime";
  933. nJson jsonParam;
  934. jsonParam["timePoint"] = timePoint.toString("yyyy-MM-dd HH:mm:ss").toStdString();
  935. json0["paramList"] = jsonParam;
  936. QString strSend = QString::fromStdString(json0.dump());
  937. QString strRet;
  938. int ret = m_httpApi->DBDoInterface(enDBOperatorType::EDBOT_Select, strSend, strRet, true);
  939. if(ret != 0)
  940. {
  941. SPDLOG_LOGGER_ERROR(m_logger, "获取 录音文件信息 失败, 错误码: {}, {}", ret, strRet.toStdString());
  942. return false;
  943. }
  944. nJson jsonRet;
  945. /* 将json的key全部转换成小写 */
  946. convertJsonKeyToLower(nJson::parse(strRet.toStdString()), jsonRet);
  947. int code = jsonRet["code"].get<int>();
  948. if(code != 0)
  949. {
  950. SPDLOG_LOGGER_ERROR(m_logger, "获取 录音文件信息 失败,错误码: {}, 错误信息: {}", code, jsonRet["message"].get<std::string>());
  951. return false;
  952. }
  953. listRecordFile.clear();
  954. // SPDLOG_LOGGER_TRACE(m_logger, "获取 录音文件信息 成功,返回数据: {}", jsonRet.dump(4));
  955. nJson jsonResult = jsonRet["result"];
  956. for(const auto& item : jsonResult)
  957. {
  958. RecordFileInfo_t recordFile;
  959. recordFile.ItemID = item["itemid"].get<int>();
  960. recordFile.ItemName = QString::fromStdString(item["itemname"].get<std::string>());
  961. recordFile.ItemRoadNum = item["itemroadnum"].get<int>();
  962. recordFile.ItemRoadName = QString::fromStdString(item["itemroadname"].get<std::string>());
  963. recordFile.scRoadInfo.strSoundCardName = item["soundcardname"].get<std::string>();
  964. recordFile.scRoadInfo.pcmInfo.strPCMName = item["soundcardpcmname"].get<std::string>();
  965. recordFile.FileStartTime = QDateTime::fromString(QString::fromStdString(item["filestarttime"].get<std::string>()), "yyyy-MM-dd HH:mm:ss");
  966. recordFile.FileEndTime = QDateTime::fromString(QString::fromStdString(item["fileendtime"].get<std::string>()), "yyyy-MM-dd HH:mm:ss");
  967. recordFile.FilePath = QString::fromStdString(item["filepath"].get<std::string>());
  968. recordFile.FileDuration = item["fileduration"].get<int>();
  969. recordFile.fileState = static_cast<eRecordState>(item["filestate"].get<int>());
  970. listRecordFile.push_back(recordFile);
  971. }
  972. }nJsonCatch
  973. return true;
  974. }
  975. /* 获取声卡信息 */
  976. bool FromWebAPI::getSoundCardInfo(std::map<std::string, SoundCardPCMInfo_t>& mapSoundCard)
  977. {
  978. try
  979. {
  980. nJson json0;
  981. json0["opName"] = "ACAS_GetSoundCardPCMChannels";
  982. QString strSend = QString::fromStdString(json0.dump());
  983. QString strRet;
  984. int ret = m_httpApi->DBDoInterface(enDBOperatorType::EDBOT_Select, strSend, strRet, true);
  985. if(ret != 0)
  986. {
  987. SPDLOG_LOGGER_ERROR(m_logger, "获取声卡信息失败: {}, {}", ret, m_httpApi->DoGetLastError(&ret).toStdString());
  988. return false;
  989. }
  990. /* 解析并转换成小写key */
  991. nJson jsonRet;
  992. convertJsonKeyToLower(nJson::parse(strRet.toStdString()), jsonRet);
  993. int code = jsonRet["code"].get<int>();
  994. if(code != 0)
  995. {
  996. SPDLOG_LOGGER_ERROR(m_logger, "获取声卡信息失败,错误码: {}, 错误信息: {}", code, jsonRet["message"].get<std::string>());
  997. return false;
  998. }
  999. nJson jsonResult = jsonRet["result"];
  1000. mapSoundCard.clear();
  1001. for(const auto& item : jsonResult)
  1002. {
  1003. std::string soundCardName = item["soundcardname"].get<std::string>();
  1004. auto it = mapSoundCard.find(soundCardName);
  1005. if(it == mapSoundCard.end())
  1006. {
  1007. mapSoundCard[soundCardName] = SoundCardPCMInfo_t();
  1008. it = mapSoundCard.find(soundCardName);
  1009. }
  1010. // 找到对应的声卡信息
  1011. SoundCardPCMInfo_t& soundCardInfo = it->second;
  1012. soundCardInfo.strSoundCardName = soundCardName;
  1013. OnePCMChannelInfo_t pcmChannelInfo;
  1014. pcmChannelInfo.strPCMName = item["pcmname"].get<std::string>();
  1015. pcmChannelInfo.strPCMDesc = item["pcmdesc"].get<std::string>();
  1016. pcmChannelInfo.strIO = item["ioid"].get<std::string>();
  1017. soundCardInfo.listPCM.push_back(pcmChannelInfo);
  1018. }
  1019. } nJsonCatch
  1020. return true;
  1021. }
  1022. /* 清空表格 */
  1023. bool FromWebAPI::clearSoundCardInfo()
  1024. {
  1025. try
  1026. {
  1027. nJson json0;
  1028. json0["opName"] = "ACAS_ClearSoundCardPCMInfo";
  1029. QString strSend = QString::fromStdString(json0.dump());
  1030. QString strRet;
  1031. int ret = m_httpApi->DBDoInterface(enDBOperatorType::EDBOT_Delete, strSend, strRet, true);
  1032. if(ret != 0)
  1033. {
  1034. SPDLOG_LOGGER_ERROR(m_logger, "清空声卡信息失败: {}, {}", ret, m_httpApi->DoGetLastError(&ret).toStdString());
  1035. return false;
  1036. }
  1037. }nJsonCatch
  1038. return true;
  1039. }
  1040. /* 插入PCM通道信息 */
  1041. bool FromWebAPI::insertPCMChannelInfo(const std::map<std::string, SoundCardPCMInfo_t>& mapSoundCard)
  1042. {
  1043. try
  1044. {
  1045. nJson jsonArray = nJson::array();
  1046. int Key = 1;
  1047. for(const auto& soundCard : mapSoundCard)
  1048. {
  1049. for(const auto& pcmChannel : soundCard.second.listPCM)
  1050. {
  1051. nJson jsonItem;
  1052. jsonItem["Key"] = Key++;
  1053. jsonItem["opName"] = "ACAS_InsertSoundCardPCMChannels";
  1054. nJson jsonParam;
  1055. jsonParam["soundCardName"] = soundCard.first;
  1056. jsonParam["pcmName"] = pcmChannel.strPCMName;
  1057. jsonParam["pcmDesc"] = pcmChannel.strPCMDesc;
  1058. jsonParam["ioid"] = pcmChannel.strIO;
  1059. jsonParam["soundCardNum"] = 0;
  1060. jsonParam["soundCardRoadNum"] = 0;
  1061. jsonItem["paramList"] = jsonParam;
  1062. jsonArray.push_back(jsonItem);
  1063. }
  1064. }
  1065. QString strSend = QString::fromStdString(jsonArray.dump());
  1066. QString strRet;
  1067. int ret = m_httpApi->DBDoInterface(enDBOperatorType::EDBOT_BatchTransAction, strSend, strRet, true);
  1068. if(ret != 0)
  1069. {
  1070. SPDLOG_LOGGER_ERROR(m_logger, "插入PCM通道信息失败: {}, {}", ret, m_httpApi->DoGetLastError(&ret).toStdString());
  1071. return false;
  1072. }
  1073. }nJsonCatch
  1074. return true;
  1075. }