FromWebAPI.cpp 48 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239
  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. QString strSend = QString::fromStdString(json0.dump());
  799. QString strRet;
  800. int ret = m_httpApi->DBDoInterface(enDBOperatorType::EDBOT_BatchTransAction, strSend, strRet, true);
  801. if(ret != 0)
  802. {
  803. SPDLOG_LOGGER_ERROR(m_logger, "更新报警文件状态失败失败: {}, {}", ret, strRet.toStdString());
  804. return false;
  805. }
  806. } nJsonCatch
  807. return true;
  808. }
  809. /* 插入录音文件信息 */
  810. bool FromWebAPI::insertRecordFileInfo(const std::list<RecordFileInfo_t>& listRecordFile)
  811. {
  812. try
  813. {
  814. int Key = 1;
  815. nJson jsonArray = nJson::array();
  816. for(auto it : listRecordFile)
  817. {
  818. nJson json1;
  819. json1["opName"] = "ACAS_InsertRecordFileInfo";
  820. json1["Key"] = Key++;
  821. nJson jsonRecord;
  822. jsonRecord["itemID"] = it.ItemID;
  823. jsonRecord["itemName"] = it.ItemName.toStdString();
  824. jsonRecord["itemRoadNum"] = it.ItemRoadNum;
  825. jsonRecord["itemRoadName"] = it.ItemRoadName.toStdString();
  826. jsonRecord["soundCardName"] = it.scRoadInfo.strSoundCardName;
  827. jsonRecord["soundCardPCMName"] = it.scRoadInfo.pcmInfo.strPCMName;
  828. jsonRecord["fileStartTime"] = it.FileStartTime.toString("yyyy-MM-dd HH:mm:ss").toStdString();
  829. jsonRecord["fileEndTime"] = it.FileEndTime.toString("yyyy-MM-dd HH:mm:ss").toStdString();
  830. jsonRecord["fileDuration"] = it.FileStartTime.secsTo(it.FileEndTime);
  831. jsonRecord["filePath"] = it.FilePath.toStdString();
  832. jsonRecord["fileState"] = static_cast<int>(it.fileState);
  833. json1["paramList"] = jsonRecord;
  834. jsonArray.push_back(json1);
  835. }
  836. // SPDLOG_LOGGER_DEBUG(m_logger, "写入录音文件信息: {}", jsonArray.dump(4));
  837. QString strSend = QString::fromStdString(jsonArray.dump());
  838. QString strRet;
  839. int ret = m_httpApi->DBDoInterface(enDBOperatorType::EDBOT_BatchTransAction, strSend, strRet, true);
  840. if(ret != 0)
  841. {
  842. SPDLOG_LOGGER_ERROR(m_logger, "写入录音文件数据失败: {}, {}", ret, m_httpApi->DoGetLastError(&ret).toStdString());
  843. return false;
  844. }
  845. }nJsonCatch
  846. return true;
  847. }
  848. /* 更新录音文件信息,更新结束时间和文件名,1分钟写入一次文件,也就更新一次 */
  849. bool FromWebAPI::updateRecordFileInfo(const std::list<RecordFileInfo_t>& listRecordFile)
  850. {
  851. try
  852. {
  853. int Key = 1;
  854. nJson jsonArray = nJson::array();
  855. for(auto it : listRecordFile)
  856. {
  857. nJson json1;
  858. json1["opName"] = "ACAS_UpdateRecordFileEndTime";
  859. json1["Key"] = Key++;
  860. nJson jsonRecord;
  861. jsonRecord["itemID"] = it.ItemID;
  862. jsonRecord["itemRoadNum"] = it.ItemRoadNum;
  863. jsonRecord["itemRoadName"] = it.ItemRoadName.toStdString();
  864. jsonRecord["soundCardName"] = it.scRoadInfo.strSoundCardName;
  865. jsonRecord["soundCardPCMName"] = it.scRoadInfo.pcmInfo.strPCMName;
  866. jsonRecord["fileStartTime"] = it.FileStartTime.toString("yyyy-MM-dd HH:mm:ss").toStdString();
  867. jsonRecord["fileEndTime"] = it.FileEndTime.toString("yyyy-MM-dd HH:mm:ss").toStdString();
  868. jsonRecord["fileDuration"] = it.FileStartTime.secsTo(it.FileEndTime);
  869. jsonRecord["filePath"] = it.FilePath.toStdString();
  870. jsonRecord["fileState"] = static_cast<int>(it.fileState);
  871. json1["paramList"] = jsonRecord;
  872. jsonArray.push_back(json1);
  873. }
  874. QString strSend = QString::fromStdString(jsonArray.dump());
  875. QString strRet;
  876. int ret = m_httpApi->DBDoInterface(enDBOperatorType::EDBOT_BatchTransAction, strSend, strRet, true);
  877. if(ret != 0)
  878. {
  879. SPDLOG_LOGGER_ERROR(m_logger, "更新录音文件数据失败: {}, {}", ret, m_httpApi->DoGetLastError(&ret).toStdString());
  880. return false;
  881. }
  882. }nJsonCatch
  883. return true;
  884. }
  885. /* 将所有的录音文件状态设置为已删除 */
  886. bool FromWebAPI::deleteAllRecordFileInfo()
  887. {
  888. try
  889. {
  890. nJson json0;
  891. json0["opName"] = "ACAS_DeleteAllRecordFileInfo";
  892. QString strSend = QString::fromStdString(json0.dump());
  893. QString strRet;
  894. int ret = m_httpApi->DBDoInterface(enDBOperatorType::EDBOT_Delete, strSend, strRet, true);
  895. if(ret != 0)
  896. {
  897. SPDLOG_LOGGER_ERROR(m_logger, "设置所有录音文件状态失败: {}, {}", ret, m_httpApi->DoGetLastError(&ret).toStdString());
  898. return false;
  899. }
  900. }nJsonCatch
  901. return true;
  902. }
  903. /* 删除早于一定时间的录音文件信息 */
  904. bool FromWebAPI::deleteRecordFileInfoBeforeTime(const QDateTime& timePoint)
  905. {
  906. try
  907. {
  908. nJson json0;
  909. json0["opName"] = "ACAS_DeleteRecordFileInfoBeforeTime";
  910. nJson jsonParam;
  911. jsonParam["timePoint"] = timePoint.toString("yyyy-MM-dd HH:mm:ss").toStdString();
  912. json0["paramList"] = jsonParam;
  913. QString strSend = QString::fromStdString(json0.dump());
  914. QString strRet;
  915. int ret = m_httpApi->DBDoInterface(enDBOperatorType::EDBOT_Delete, strSend, strRet, true);
  916. if(ret != 0)
  917. {
  918. SPDLOG_LOGGER_ERROR(m_logger, "删除早于一定时间的录音文件信息失败: {}, {}", ret, m_httpApi->DoGetLastError(&ret).toStdString());
  919. return false;
  920. }
  921. }nJsonCatch
  922. return true;
  923. }
  924. /* 获取早于某个时间点的录音文件信息 */
  925. bool FromWebAPI::getRecordFileInfoBeforeTime(const QDateTime& timePoint, std::list<RecordFileInfo_t>& listRecordFile)
  926. {
  927. try
  928. {
  929. nJson json0;
  930. json0["opName"] = "ACAS_GetRecordFileInfoBeforeTime";
  931. nJson jsonParam;
  932. jsonParam["timePoint"] = timePoint.toString("yyyy-MM-dd HH:mm:ss").toStdString();
  933. json0["paramList"] = jsonParam;
  934. QString strSend = QString::fromStdString(json0.dump());
  935. QString strRet;
  936. int ret = m_httpApi->DBDoInterface(enDBOperatorType::EDBOT_Select, strSend, strRet, true);
  937. if(ret != 0)
  938. {
  939. SPDLOG_LOGGER_ERROR(m_logger, "获取 录音文件信息 失败, 错误码: {}, {}", ret, strRet.toStdString());
  940. return false;
  941. }
  942. nJson jsonRet;
  943. /* 将json的key全部转换成小写 */
  944. convertJsonKeyToLower(nJson::parse(strRet.toStdString()), jsonRet);
  945. int code = jsonRet["code"].get<int>();
  946. if(code != 0)
  947. {
  948. SPDLOG_LOGGER_ERROR(m_logger, "获取 录音文件信息 失败,错误码: {}, 错误信息: {}", code, jsonRet["message"].get<std::string>());
  949. return false;
  950. }
  951. listRecordFile.clear();
  952. // SPDLOG_LOGGER_TRACE(m_logger, "获取 录音文件信息 成功,返回数据: {}", jsonRet.dump(4));
  953. nJson jsonResult = jsonRet["result"];
  954. for(const auto& item : jsonResult)
  955. {
  956. RecordFileInfo_t recordFile;
  957. recordFile.ItemID = item["itemid"].get<int>();
  958. recordFile.ItemName = QString::fromStdString(item["itemname"].get<std::string>());
  959. recordFile.ItemRoadNum = item["itemroadnum"].get<int>();
  960. recordFile.ItemRoadName = QString::fromStdString(item["itemroadname"].get<std::string>());
  961. recordFile.scRoadInfo.strSoundCardName = item["soundcardname"].get<std::string>();
  962. recordFile.scRoadInfo.pcmInfo.strPCMName = item["soundcardpcmname"].get<std::string>();
  963. recordFile.FileStartTime = QDateTime::fromString(QString::fromStdString(item["filestarttime"].get<std::string>()), "yyyy-MM-dd HH:mm:ss");
  964. recordFile.FileEndTime = QDateTime::fromString(QString::fromStdString(item["fileendtime"].get<std::string>()), "yyyy-MM-dd HH:mm:ss");
  965. recordFile.FilePath = QString::fromStdString(item["filepath"].get<std::string>());
  966. recordFile.FileDuration = item["fileduration"].get<int>();
  967. recordFile.fileState = static_cast<eRecordState>(item["filestate"].get<int>());
  968. listRecordFile.push_back(recordFile);
  969. }
  970. }nJsonCatch
  971. return true;
  972. }
  973. /* 获取声卡信息 */
  974. bool FromWebAPI::getSoundCardInfo(std::map<std::string, SoundCardPCMInfo_t>& mapSoundCard)
  975. {
  976. try
  977. {
  978. nJson json0;
  979. json0["opName"] = "ACAS_GetSoundCardPCMChannels";
  980. QString strSend = QString::fromStdString(json0.dump());
  981. QString strRet;
  982. int ret = m_httpApi->DBDoInterface(enDBOperatorType::EDBOT_Select, strSend, strRet, true);
  983. if(ret != 0)
  984. {
  985. SPDLOG_LOGGER_ERROR(m_logger, "获取声卡信息失败: {}, {}", ret, m_httpApi->DoGetLastError(&ret).toStdString());
  986. return false;
  987. }
  988. /* 解析并转换成小写key */
  989. nJson jsonRet;
  990. convertJsonKeyToLower(nJson::parse(strRet.toStdString()), jsonRet);
  991. int code = jsonRet["code"].get<int>();
  992. if(code != 0)
  993. {
  994. SPDLOG_LOGGER_ERROR(m_logger, "获取声卡信息失败,错误码: {}, 错误信息: {}", code, jsonRet["message"].get<std::string>());
  995. return false;
  996. }
  997. nJson jsonResult = jsonRet["result"];
  998. mapSoundCard.clear();
  999. for(const auto& item : jsonResult)
  1000. {
  1001. std::string soundCardName = item["soundcardname"].get<std::string>();
  1002. auto it = mapSoundCard.find(soundCardName);
  1003. if(it == mapSoundCard.end())
  1004. {
  1005. mapSoundCard[soundCardName] = SoundCardPCMInfo_t();
  1006. it = mapSoundCard.find(soundCardName);
  1007. }
  1008. // 找到对应的声卡信息
  1009. SoundCardPCMInfo_t& soundCardInfo = it->second;
  1010. soundCardInfo.strSoundCardName = soundCardName;
  1011. OnePCMChannelInfo_t pcmChannelInfo;
  1012. pcmChannelInfo.strPCMName = item["pcmname"].get<std::string>();
  1013. pcmChannelInfo.strPCMDesc = item["pcmdesc"].get<std::string>();
  1014. pcmChannelInfo.strIO = item["ioid"].get<std::string>();
  1015. soundCardInfo.listPCM.push_back(pcmChannelInfo);
  1016. }
  1017. } nJsonCatch
  1018. return true;
  1019. }
  1020. /* 清空表格 */
  1021. bool FromWebAPI::clearSoundCardInfo()
  1022. {
  1023. try
  1024. {
  1025. nJson json0;
  1026. json0["opName"] = "ACAS_ClearSoundCardPCMInfo";
  1027. QString strSend = QString::fromStdString(json0.dump());
  1028. QString strRet;
  1029. int ret = m_httpApi->DBDoInterface(enDBOperatorType::EDBOT_Delete, strSend, strRet, true);
  1030. if(ret != 0)
  1031. {
  1032. SPDLOG_LOGGER_ERROR(m_logger, "清空声卡信息失败: {}, {}", ret, m_httpApi->DoGetLastError(&ret).toStdString());
  1033. return false;
  1034. }
  1035. }nJsonCatch
  1036. return true;
  1037. }
  1038. /* 插入PCM通道信息 */
  1039. bool FromWebAPI::insertPCMChannelInfo(const std::map<std::string, SoundCardPCMInfo_t>& mapSoundCard)
  1040. {
  1041. try
  1042. {
  1043. nJson jsonArray = nJson::array();
  1044. int Key = 1;
  1045. for(const auto& soundCard : mapSoundCard)
  1046. {
  1047. for(const auto& pcmChannel : soundCard.second.listPCM)
  1048. {
  1049. nJson jsonItem;
  1050. jsonItem["Key"] = Key++;
  1051. jsonItem["opName"] = "ACAS_InsertSoundCardPCMChannels";
  1052. nJson jsonParam;
  1053. jsonParam["soundCardName"] = soundCard.first;
  1054. jsonParam["pcmName"] = pcmChannel.strPCMName;
  1055. jsonParam["pcmDesc"] = pcmChannel.strPCMDesc;
  1056. jsonParam["ioid"] = pcmChannel.strIO;
  1057. jsonParam["soundCardNum"] = 0;
  1058. jsonParam["soundCardRoadNum"] = 0;
  1059. jsonItem["paramList"] = jsonParam;
  1060. jsonArray.push_back(jsonItem);
  1061. }
  1062. }
  1063. QString strSend = QString::fromStdString(jsonArray.dump());
  1064. QString strRet;
  1065. int ret = m_httpApi->DBDoInterface(enDBOperatorType::EDBOT_BatchTransAction, strSend, strRet, true);
  1066. if(ret != 0)
  1067. {
  1068. SPDLOG_LOGGER_ERROR(m_logger, "插入PCM通道信息失败: {}, {}", ret, m_httpApi->DoGetLastError(&ret).toStdString());
  1069. return false;
  1070. }
  1071. }nJsonCatch
  1072. return true;
  1073. }