ToEQMDataBase.cpp 20 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605
  1. #include "ToEQMDataBase.h"
  2. #include <QJsonDocument>
  3. #include <QJsonObject>
  4. #include <QVector>
  5. ToEQMDataBase::ToEQMDataBase()
  6. {
  7. m_logger = spdlog::get("ToEQMDataBase");
  8. if(m_logger == nullptr)
  9. {
  10. SPDLOG_ERROR("ToEQMDataBase logger is nullptr");
  11. return;
  12. }
  13. }
  14. ToEQMDataBase::~ToEQMDataBase()
  15. {
  16. if(m_httpApi != nullptr)
  17. {
  18. delete m_httpApi;
  19. m_httpApi = nullptr;
  20. }
  21. }
  22. /* 初始化WebApi */
  23. bool ToEQMDataBase::initWebApi(const QString& url, const QString& serverIP, const QString& serID)
  24. {
  25. if(m_httpApi == nullptr)
  26. {
  27. m_httpApi = new lhhttpapi;
  28. }
  29. int ret = 0;
  30. ret = m_httpApi->DBQInit(url);
  31. if(ret < 0)
  32. {
  33. SPDLOG_LOGGER_ERROR(m_logger,"Init WebApi failed:{}, error Info:{}",ret,m_httpApi->DoGetLastError(&ret).toStdString());
  34. return false;
  35. }
  36. // SPDLOG_LOGGER_TRACE(m_logger,"初始化WebApi成功!");
  37. QString serverList;
  38. ret = m_httpApi->DBQGetServerList(serverList);
  39. if(ret < 0)
  40. {
  41. SPDLOG_LOGGER_DEBUG(m_logger,"Get server list failed:{}, error info:{}",ret,m_httpApi->DoGetLastError(&ret).toStdString());
  42. return false;
  43. }
  44. SPDLOG_LOGGER_TRACE(m_logger,"Server list:{}",serverList.toStdString());
  45. SPDLOG_LOGGER_DEBUG(m_logger,"WebAPI Sucess!");
  46. /* 登录,第二个参数是限制的服务 */
  47. ret = m_httpApi->DBQLogin(serverIP, serID, "SPSS", m_userToken);
  48. if(ret < 0)
  49. {
  50. SPDLOG_LOGGER_ERROR(m_logger,"Login failed:{}, error info:{}",ret,m_httpApi->DoGetLastError(&ret).toStdString());
  51. return false;
  52. }
  53. SPDLOG_LOGGER_TRACE(m_logger,"Login sucess!");
  54. return true;
  55. }
  56. /**
  57. * @brief 写入算法信息,写入tAction表
  58. *
  59. * @param vecInfo 要写入的表格数据
  60. * @param vecNowInfo 现有的表格数据,主要是为了重复利用已经删除的自增主键而传入的
  61. * @return true
  62. * @return false
  63. */
  64. bool ToEQMDataBase::writeAlgorithmInfo(std::vector<AlgorithmInfo>& vecInfo)
  65. {
  66. if(m_httpApi == nullptr)
  67. {
  68. SPDLOG_LOGGER_ERROR(m_logger,"WebApi is nullptr");
  69. return false;
  70. }
  71. /* 取出可用的自增主键,从0开始计算 */
  72. // std::list<int> listPKID;
  73. // int nPKID = 0;
  74. // for(const auto& it : vecNowInfo)
  75. // {
  76. // while(it.ActionTaskID == nPKID)
  77. // {
  78. // if(it.PKID != nPKID)
  79. // {
  80. // listPKID.push_back(nPKID);
  81. // break;
  82. // }
  83. // nPKID ++;
  84. // }
  85. // }
  86. /* 循环写入数据 */
  87. for(const auto& it : vecInfo)
  88. {
  89. QString retStr;
  90. /* 操作名称,现在一次性将设备位置和线条信息都下载下来 */
  91. nJson json0;
  92. json0["opName"] = "SPSS_InsertToAction";
  93. nJson json1;
  94. json1["actionID"] = it.ActionID; /* 算法ID */
  95. json1["actionName"] = it.ActionName; /* 算法名称 */
  96. json1["actionTaskID"] = it.ActionTaskID; /* 算法类型 */
  97. json0["paramList"] = json1;
  98. QString strCmd = QString::fromStdString(json0.dump());
  99. int ret = m_httpApi->DBQDoInterface(enDBOperatorType::EDBOT_Insert, strCmd, retStr);
  100. if(ret < 0)
  101. {
  102. SPDLOG_LOGGER_DEBUG(m_logger,"写入tAction失败:{}, 错误信息:{}",ret,m_httpApi->DoGetLastError(&ret).toStdString());
  103. }
  104. SPDLOG_LOGGER_DEBUG(m_logger,"写入一条算法 {} 到 tAction成功!", it.ActionID);
  105. }
  106. return true;
  107. }
  108. /* 删除算法信息 */
  109. bool ToEQMDataBase::deleteAlgorithmInfo(std::vector<AlgorithmInfo>& vecDeleteInfo)
  110. {
  111. if(m_httpApi == nullptr)
  112. {
  113. SPDLOG_LOGGER_ERROR(m_logger,"WebApi is nullptr");
  114. return false;
  115. }
  116. for(const auto& it : vecDeleteInfo)
  117. {
  118. nJson json0;
  119. json0["opName"] = "SPSS_DeleteFromAction";
  120. nJson json1;
  121. json1["actionID"] = it.ActionID;
  122. json0["paramList"] = json1;
  123. QString strCmd = QString::fromStdString(json0.dump());
  124. QString strRet;
  125. int ret = m_httpApi->DBQDoInterface(enDBOperatorType::EDBOT_Delete, strCmd, strRet);
  126. if(ret < 0)
  127. {
  128. SPDLOG_LOGGER_DEBUG(m_logger,"删除tAction失败:{}, 错误信息:{}",ret,m_httpApi->DoGetLastError(&ret).toStdString());
  129. }
  130. SPDLOG_LOGGER_DEBUG(m_logger,"从tAction 删除算法 {} 成功!", it.ActionID);
  131. }
  132. return true;
  133. }
  134. /* 获取tAction数据 */
  135. bool ToEQMDataBase::getAlgorithmInfo(std::vector<AlgorithmInfo>& vecInfo)
  136. {
  137. if(m_httpApi == nullptr)
  138. {
  139. SPDLOG_LOGGER_ERROR(m_logger, "WebAPI is nullptr");
  140. return false;
  141. }
  142. /* 清空内容 */
  143. vecInfo.clear();
  144. nJson json0;
  145. json0["opName"] = "SPSS_SelectFromAction";
  146. QString strCmd = QString::fromStdString(json0.dump());
  147. QString strRet;
  148. auto ret = m_httpApi->DBQDoInterface(enDBOperatorType::EDBOT_Select, strCmd, strRet);
  149. if(ret < 0)
  150. {
  151. SPDLOG_LOGGER_DEBUG(m_logger,"获取tAction失败:{}, 错误信息:{}",ret,m_httpApi->DoGetLastError(&ret).toStdString());
  152. return false;
  153. }
  154. /* 解析获取到的JSON数据 */
  155. // SPDLOG_LOGGER_DEBUG(m_logger,"\n{}",strRet.toStdString());
  156. try {
  157. nJson json1 = nJson::parse(strRet.toStdString());
  158. int retCode = json1["code"].get<int>();
  159. if(retCode != 0)
  160. {
  161. SPDLOG_LOGGER_ERROR(m_logger,"获取tAction失败");
  162. return false;
  163. }
  164. nJson result = json1["result"];
  165. for(auto& it : result)
  166. {
  167. AlgorithmInfo info;
  168. info.ActionID = it["actionId"].is_null() ? "" : it["actionId"].get<std::string>();
  169. info.ActionName = it["actionName"].get<std::string>();
  170. info.ActionTaskID = it["actionTaskid"].get<int>();
  171. // SPDLOG_LOGGER_DEBUG(m_logger,"ActionID:{}, ActionName:{}, ActionTaskID:{}",info.ActionID,info.ActionName,info.ActionTaskID);
  172. vecInfo.push_back(info);
  173. }
  174. } catch (const nJson::parse_error& e) {
  175. SPDLOG_LOGGER_ERROR(m_logger,"解析tAction数据失败:{}",e.what());
  176. return false;
  177. }
  178. return true;
  179. }
  180. /* 插入设备信息 */
  181. bool ToEQMDataBase::insertDeviceInfo(std::vector<DeviceInfo>& vecInfo)
  182. {
  183. if(m_httpApi == nullptr)
  184. {
  185. SPDLOG_LOGGER_ERROR(m_logger,"WebApi is nullptr");
  186. return false;
  187. }
  188. if(vecInfo.empty())
  189. {
  190. return false;
  191. }
  192. bool isSuccess = true;
  193. for(const auto& it : vecInfo)
  194. {
  195. nJson json0;
  196. json0["opName"] = "SPSS_InsertToCamerInfo";
  197. nJson json1;
  198. /* 这里不知道是不是“?”运算符的等级是不是不够,不加括号会报错 */
  199. json1["camerID"] = it.DeviceID;
  200. json1["camerName"] = it.DeviceName;
  201. json1["camerIP"] = it.DeviceIP;
  202. json1["camerPort"] = it.DevicePort;
  203. json1["camerUser"] = it.UserAccount;
  204. json1["camerPwd"] = it.UserPassword;
  205. json1["camerType"] = it.DeviceType;
  206. json1["camerSerial"] = it.DeviceSerial;
  207. json1["camerChannel"] = nullptr;
  208. json1["camerUrl"] = nullptr;
  209. json0["paramList"] = json1;
  210. QString strCmd = QString::fromStdString(json0.dump());
  211. QString strRet;
  212. auto ret = m_httpApi->DBQDoInterface(enDBOperatorType::EDBOT_Insert, strCmd, strRet);
  213. if(ret < 0)
  214. {
  215. SPDLOG_LOGGER_DEBUG(m_logger,"插入设备信息失败:{}, 错误信息:{}",ret,m_httpApi->DoGetLastError(&ret).toStdString());
  216. isSuccess = false;
  217. }
  218. SPDLOG_LOGGER_DEBUG(m_logger,"插入ID {} 信息到 CamerInfo 成功!", it.DeviceID);
  219. }
  220. /* 插入信息到tActionCamer表 */
  221. for(const auto& it0 : vecInfo)
  222. {
  223. for(const auto& it1 : it0.vecAlgorithmInfo)
  224. {
  225. nJson json0;
  226. json0["opName"] = "SPSS_InsertToActionCamer";
  227. nJson json1;
  228. json1["actionID"] = it1.ActionID;
  229. json1["camerID"] = it0.DeviceID;
  230. json0["paramList"] = json1;
  231. QString strCmd = QString::fromStdString(json0.dump());
  232. QString strRet;
  233. auto ret = m_httpApi->DBQDoInterface(enDBOperatorType::EDBOT_Insert, strCmd, strRet);
  234. if(ret < 0)
  235. {
  236. SPDLOG_LOGGER_DEBUG(m_logger,"插入设备信息到tActionCamer失败:{}, 错误信息:{}",ret,m_httpApi->DoGetLastError(&ret).toStdString());
  237. isSuccess = false;
  238. }
  239. SPDLOG_LOGGER_DEBUG(m_logger,"插入DeviceID {} 和 ActionID {} 到 ActionCamer 成功!", it0.DeviceID, it1.ActionID);
  240. }
  241. }
  242. return isSuccess;
  243. }
  244. /* 更新设备信息 */
  245. bool ToEQMDataBase::updateDeviceInfo(std::vector<DeviceInfo>& vecUpdateInfo)
  246. {
  247. if(m_httpApi == nullptr)
  248. {
  249. SPDLOG_LOGGER_ERROR(m_logger,"WebApi is nullptr");
  250. return false;
  251. }
  252. if(vecUpdateInfo.empty())
  253. {
  254. return false;
  255. }
  256. bool isSuccess = true;
  257. for(const auto& it : vecUpdateInfo)
  258. {
  259. nJson json0;
  260. json0["opName"] = "SPSS_UpdateToCamerInfo";
  261. nJson json1;
  262. json1["camerID"] = it.DeviceID;
  263. json1["camerName"] = it.DeviceName;
  264. json1["camerIP"] = it.DeviceIP;
  265. json1["camerPort"] = it.DevicePort;
  266. json1["camerUser"] = it.UserAccount;
  267. json1["camerPwd"] = it.UserPassword;
  268. json1["camerType"] = it.DeviceType;
  269. json1["camerSerial"] = it.DeviceSerial;
  270. json1["camerChannel"] = nullptr;
  271. json1["camerUrl"] = nullptr;
  272. json0["paramList"] = json1;
  273. QString strCmd = QString::fromStdString(json0.dump());
  274. QString strRet;
  275. auto ret = m_httpApi->DBQDoInterface(enDBOperatorType::EDBOT_Update, strCmd, strRet);
  276. if(ret < 0)
  277. {
  278. SPDLOG_LOGGER_DEBUG(m_logger,"更新设备信息失败:{}, 错误信息:{}",ret,m_httpApi->DoGetLastError(&ret).toStdString());
  279. isSuccess = false;
  280. }
  281. SPDLOG_LOGGER_DEBUG(m_logger,"更新ID {} 信息到 CamerInfo 成功!", it.DeviceID);
  282. }
  283. return isSuccess;
  284. }
  285. /* 删除设备信息 */
  286. bool ToEQMDataBase::deleteDeviceInfo(std::vector<DeviceInfo>& vecDeleteInfo)
  287. {
  288. if(m_httpApi == nullptr)
  289. {
  290. SPDLOG_LOGGER_ERROR(m_logger,"WebApi is nullptr");
  291. return false;
  292. }
  293. if(vecDeleteInfo.empty())
  294. {
  295. return false;
  296. }
  297. bool isSuccess = true;
  298. for(const auto& it : vecDeleteInfo)
  299. {
  300. nJson json0;
  301. json0["opName"] = "SPSS_DeleteFromCamerInfo";
  302. nJson json1;
  303. json1["camerID"] = it.DeviceID;
  304. json0["paramList"] = json1;
  305. QString strCmd = QString::fromStdString(json0.dump());
  306. QString strRet;
  307. auto ret = m_httpApi->DBQDoInterface(enDBOperatorType::EDBOT_Delete, strCmd, strRet);
  308. if(ret < 0)
  309. {
  310. SPDLOG_LOGGER_DEBUG(m_logger,"删除设备信息失败:{}, 错误信息:{}",ret,m_httpApi->DoGetLastError(&ret).toStdString());
  311. isSuccess = false;
  312. }
  313. SPDLOG_LOGGER_DEBUG(m_logger,"删除数据 {} 到 CamerInfo 成功!", it.DeviceID);
  314. }
  315. return isSuccess;
  316. }
  317. /* 从EQM获取CamerInfo信息 */
  318. bool ToEQMDataBase::getDeviceInfo(std::vector<DeviceInfo>& vecInfo)
  319. {
  320. if(m_httpApi == nullptr)
  321. {
  322. SPDLOG_LOGGER_ERROR(m_logger,"WebApi is nullptr");
  323. return false;
  324. }
  325. vecInfo.clear();
  326. nJson json0;
  327. json0["opName"] = "SPSS_SelectFromCamerInfo";
  328. QString strCmd = QString::fromStdString(json0.dump());
  329. QString strRet;
  330. auto ret = m_httpApi->DBQDoInterface(enDBOperatorType::EDBOT_Select, strCmd, strRet);
  331. if(ret < 0)
  332. {
  333. SPDLOG_LOGGER_DEBUG(m_logger,"获取CamerInfo失败:{}, 错误信息:{}",ret,m_httpApi->DoGetLastError(&ret).toStdString());
  334. return false;
  335. }
  336. /* 解析信息 */
  337. try {
  338. nJson json1 = nJson::parse(strRet.toStdString());
  339. int retCode = json1["code"].get<int>();
  340. if(retCode != 0)
  341. {
  342. SPDLOG_LOGGER_ERROR(m_logger,"获取CamerInfo失败");
  343. return false;
  344. }
  345. nJson result = json1["result"];
  346. if(result.empty())
  347. {
  348. return false;
  349. }
  350. for(const auto& it : result)
  351. {
  352. // SPDLOG_LOGGER_DEBUG(m_logger,"camerID:{}",it["camerId"].get<int>());
  353. DeviceInfo info;
  354. info.DeviceID = it["camerId"].get<int>();
  355. info.DeviceName = it["camerName"].is_null() ? "" : it["camerName"].get<std::string>();
  356. info.DeviceIP = it["camerIp"].is_null() ? "" : it["camerIp"].get<std::string>();
  357. info.DevicePort = it["camerPort"].is_null() ? 0 : it["camerPort"].get<int>();
  358. info.UserAccount = it["camerUsr"].is_null() ? "" : it["camerUsr"].get<std::string>();
  359. info.UserPassword = it["camerPwd"].is_null() ? "" : it["camerPwd"].get<std::string>();
  360. info.DeviceType = it["camerType"].is_null() ? "" : it["camerType"].get<std::string>();
  361. info.DeviceSerial = it["camerSerial"].is_null() ? "" : it["camerSerial"].get<std::string>();
  362. vecInfo.push_back(info);
  363. }
  364. }
  365. catch (const nJson::parse_error& e) {
  366. SPDLOG_LOGGER_ERROR(m_logger,"解析CamerInfo数据失败:{}, 错误ID:{}",e.what(), e.id);
  367. return false;
  368. }
  369. catch (const nJson::type_error& e) {
  370. SPDLOG_LOGGER_ERROR(m_logger,"解析CamerInfo数据失败:{}, 错误ID:{}",e.what(), e.id);
  371. return false;
  372. }
  373. return true;
  374. }
  375. /* 插入设备和算法关联信息 */
  376. bool ToEQMDataBase::insertDeviceAlgorithmInfo(std::vector<DeviceInfo>& vecInfo)
  377. {
  378. if(m_httpApi == nullptr)
  379. {
  380. SPDLOG_LOGGER_ERROR(m_logger,"WebApi is nullptr");
  381. return false;
  382. }
  383. /* 插入信息到tActionCamer表 */
  384. bool isSuccess = true;
  385. for(const auto& it0 : vecInfo)
  386. {
  387. for(const auto& it1 : it0.vecAlgorithmInfo)
  388. {
  389. nJson json0;
  390. json0["opName"] = "SPSS_InsertToActionCamer";
  391. nJson json1;
  392. json1["actionID"] = it1.ActionID;
  393. json1["camerID"] = it0.DeviceID;
  394. json0["paramList"] = json1;
  395. QString strCmd = QString::fromStdString(json0.dump());
  396. QString strRet;
  397. auto ret = m_httpApi->DBQDoInterface(enDBOperatorType::EDBOT_Insert, strCmd, strRet);
  398. if(ret < 0)
  399. {
  400. SPDLOG_LOGGER_DEBUG(m_logger,"插入设备信息到tActionCamer失败:{}, 错误信息:{}",ret,m_httpApi->DoGetLastError(&ret).toStdString());
  401. isSuccess = false;
  402. }
  403. SPDLOG_LOGGER_DEBUG(m_logger,"插入DeviceID {} 和 ActionID {} 到 ActionCamer 成功!", it0.DeviceID, it1.ActionID);
  404. }
  405. }
  406. return true;
  407. }
  408. /* 更新设备和算法关联表 */
  409. bool ToEQMDataBase::updateDeviceAlgorithmInfo(std::vector<DeviceInfo>& vecInfo)
  410. {
  411. if(m_httpApi == nullptr)
  412. {
  413. SPDLOG_LOGGER_ERROR(m_logger,"WebApi is nullptr");
  414. return false;
  415. }
  416. /* 更新之前先删除相关的信息 */
  417. for(const auto& it : vecInfo)
  418. {
  419. nJson json0;
  420. json0["opName"] = "SPSS_DeleteFromActionCamer";
  421. nJson json1;
  422. json1["camerID"] = it.DeviceID;
  423. json0["paramList"] = json1;
  424. QString strCmd = QString::fromStdString(json0.dump());
  425. QString strRet;
  426. auto ret = m_httpApi->DBQDoInterface(enDBOperatorType::EDBOT_Delete, strCmd, strRet);
  427. if(ret < 0)
  428. {
  429. SPDLOG_LOGGER_DEBUG(m_logger,"删除设备信息到tActionCamer失败:{}, 错误信息:{}",ret,m_httpApi->DoGetLastError(&ret).toStdString());
  430. // return false;
  431. }
  432. SPDLOG_LOGGER_DEBUG(m_logger,"从 ActionCamer 删除DeviceID {} 成功!", it.DeviceID);
  433. }
  434. /* 插入信息到tActionCamer表 */
  435. bool isSuccess = true;
  436. for(const auto& it0 : vecInfo)
  437. {
  438. for(const auto& it1 : it0.vecAlgorithmInfo)
  439. {
  440. nJson json0;
  441. json0["opName"] = "SPSS_InsertToActionCamer";
  442. nJson json1;
  443. json1["actionID"] = it1.ActionID;
  444. json1["camerID"] = it0.DeviceID;
  445. json0["paramList"] = json1;
  446. QString strCmd = QString::fromStdString(json0.dump());
  447. QString strRet;
  448. auto ret = m_httpApi->DBQDoInterface(enDBOperatorType::EDBOT_Insert, strCmd, strRet);
  449. if(ret < 0)
  450. {
  451. SPDLOG_LOGGER_DEBUG(m_logger,"插入设备信息到tActionCamer失败:{}, 错误信息:{}",ret,m_httpApi->DoGetLastError(&ret).toStdString());
  452. isSuccess = false;
  453. }
  454. SPDLOG_LOGGER_DEBUG(m_logger,"插入DeviceID {} 和 ActionID {} 到 ActionCamer 成功!", it0.DeviceID, it1.ActionID);
  455. }
  456. }
  457. return isSuccess;
  458. }
  459. /* 删除设备和算法关联表 */
  460. bool ToEQMDataBase::deleteDeviceAlgorithmInfo(std::vector<DeviceInfo>& vecInfo)
  461. {
  462. if(m_httpApi == nullptr)
  463. {
  464. SPDLOG_LOGGER_ERROR(m_logger,"WebApi is nullptr");
  465. return false;
  466. }
  467. bool isSuccess = true;
  468. /* 更新之前先删除相关的信息 */
  469. for(const auto& it : vecInfo)
  470. {
  471. nJson json0;
  472. json0["opName"] = "SPSS_DeleteFromActionCamer";
  473. nJson json1;
  474. json1["camerID"] = it.DeviceID;
  475. json0["paramList"] = json1;
  476. QString strCmd = QString::fromStdString(json0.dump());
  477. QString strRet;
  478. auto ret = m_httpApi->DBQDoInterface(enDBOperatorType::EDBOT_Delete, strCmd, strRet);
  479. if(ret < 0)
  480. {
  481. SPDLOG_LOGGER_DEBUG(m_logger,"删除设备信息到tActionCamer失败:{}, 错误信息:{}",ret,m_httpApi->DoGetLastError(&ret).toStdString());
  482. // return false;
  483. isSuccess = false;
  484. }
  485. SPDLOG_LOGGER_DEBUG(m_logger,"从 ActionCamer 删除DeviceID {} 成功!", it.DeviceID);
  486. }
  487. return isSuccess;
  488. }
  489. /* 获取设备和算法信息关联表,需要先从EQM数据库中获取到设备信息 */
  490. bool ToEQMDataBase::getDeviceAlgorithmInfo(std::vector<DeviceInfo>& vecInfo)
  491. {
  492. if(m_httpApi == nullptr)
  493. {
  494. SPDLOG_LOGGER_ERROR(m_logger,"WebApi is nullptr");
  495. return false;
  496. }
  497. if(vecInfo.empty())
  498. {
  499. SPDLOG_LOGGER_WARN(m_logger,"Device info is empty");
  500. return false;
  501. }
  502. nJson json0;
  503. json0["opName"] = "SPSS_SelectFromActionCamer";
  504. QString strCmd = QString::fromStdString(json0.dump());
  505. QString strRet;
  506. auto ret = m_httpApi->DBQDoInterface(enDBOperatorType::EDBOT_Select, strCmd, strRet);
  507. if(ret < 0)
  508. {
  509. SPDLOG_LOGGER_DEBUG(m_logger,"获取ActionCamer失败:{}, 错误信息:{}",ret,m_httpApi->DoGetLastError(&ret).toStdString());
  510. return false;
  511. }
  512. /* 解析信息 */
  513. try {
  514. nJson json1 = nJson::parse(strRet.toStdString());
  515. int retCode = json1["code"].get<int>();
  516. if(retCode != 0)
  517. {
  518. SPDLOG_LOGGER_ERROR(m_logger,"获取ActionCamer失败");
  519. return false;
  520. }
  521. nJson result = json1["result"];
  522. if(result.empty())
  523. {
  524. return false;
  525. }
  526. /* 根据缓存中的设备ID解析json字符串 */
  527. for(auto& it0 : vecInfo)
  528. {
  529. for(auto& it1 : result)
  530. {
  531. /* 对比设备ID */
  532. if(it0.DeviceID == it1["camerId"].get<int>())
  533. {
  534. AlgorithmInfo info;
  535. info.ActionID = it1["actionId"].is_null() ? "" : it1["actionId"].get<std::string>();
  536. info.ActionName = it1["actionName"].is_null() ? "" : it1["actionName"].get<std::string>();
  537. info.ActionTaskID = it1["actionTaskid"].is_null() ? 0 : it1["actionTaskid"].get<int>();
  538. it0.vecAlgorithmInfo.push_back(info);
  539. }
  540. }
  541. }
  542. }
  543. catch (const nJson::parse_error& e) {
  544. SPDLOG_LOGGER_ERROR(m_logger,"解析ActionCamer数据失败:{}, 错误ID:{}",e.what(), e.id);
  545. return false;
  546. }
  547. catch (const nJson::type_error& e) {
  548. SPDLOG_LOGGER_ERROR(m_logger,"解析ActionCamer数据失败:{}, 错误ID:{}",e.what(), e.id);
  549. return false;
  550. }
  551. return true;
  552. }