FromWebAPI.cpp 64 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923
  1. #include "FromWebAPI.h"
  2. #include <QJsonDocument>
  3. #include <QString>
  4. #include <QUuid>
  5. #include "FuncOnAndOffWork.h"
  6. #include "FuncRegionalPerson.h"
  7. #include "UniversalFunc.h"
  8. #include "GlobalConfig.h"
  9. FromWebAPI::FromWebAPI()
  10. {
  11. m_logger = spdlog::get("FromWebAPI");
  12. if(m_logger == nullptr)
  13. {
  14. fmt::print("FromWebAPI logger is nullptr");
  15. return;
  16. }
  17. }
  18. FromWebAPI::~FromWebAPI()
  19. {
  20. if(m_httpApi != nullptr)
  21. {
  22. delete m_httpApi;
  23. m_httpApi = nullptr;
  24. }
  25. }
  26. /* 初始化WebApi */
  27. bool FromWebAPI::initWebApi(const QString& url,const QString& serID, const QString appType, const QString& serverIP)
  28. {
  29. if(m_httpApi == nullptr)
  30. {
  31. m_httpApi = new lhhttpapi;
  32. }
  33. if(!m_httpApi->Load())
  34. {
  35. SPDLOG_LOGGER_ERROR(m_logger, "Load WebAPI failed");
  36. return false;
  37. }
  38. SPDLOG_LOGGER_DEBUG(m_logger, "URL: {}", url.toStdString());
  39. SPDLOG_LOGGER_DEBUG(m_logger, "ServerID: {}", serID.toStdString());
  40. SPDLOG_LOGGER_DEBUG(m_logger, "ServerKey: {}", appType.toStdString());
  41. void* pHttp = nullptr;
  42. int i = 0;
  43. for(i = 0; i < 3; i++)
  44. {
  45. pHttp = m_httpApi->DBInit(url.toStdString().c_str(), true);
  46. if(pHttp != nullptr)
  47. {
  48. break;
  49. }
  50. SPDLOG_LOGGER_ERROR(m_logger, "设置WebAPI地址失败: {}", m_httpApi->DoGetLastError(&i).toStdString());
  51. }
  52. if(i >= 3)
  53. {
  54. SPDLOG_LOGGER_ERROR(m_logger, "WebAPI设置地址错误!");
  55. return false;
  56. }
  57. int ret = 0;
  58. #ifdef QT_DEBUG
  59. /* 获取服务器列表 */
  60. // char serverList[8192]={0};
  61. // ret = m_httpApi->DBGetServerList(serverList, 8192-1);
  62. // if(ret != 0)
  63. // {
  64. // SPDLOG_LOGGER_ERROR(m_logger, "Get server list failed: {}, error info: {}", ret, m_httpApi->DoGetLastError(&ret).toStdString());
  65. // return false;
  66. // }
  67. // SPDLOG_LOGGER_INFO(m_logger, QString("\nGet server list success:%1").arg(serverList));
  68. #endif
  69. /* 登录,第二个参数是限制的服务 */
  70. for(i = 0; i < 3; i++)
  71. {
  72. ret = m_httpApi->DBLogin("", serID, appType, m_userToken, true, pHttp);
  73. if(ret == 0)
  74. {
  75. break;
  76. }
  77. SPDLOG_LOGGER_ERROR(m_logger, "Login failed: {}, error info: {}", ret, m_httpApi->DoGetLastError(&ret).toStdString());
  78. /* 登录失败,等待一段时间 */
  79. QThread::msleep(200);
  80. }
  81. if(i >= 3)
  82. {
  83. SPDLOG_LOGGER_ERROR(m_logger, "登陆WebAPI失败!");
  84. return false;
  85. }
  86. SPDLOG_LOGGER_INFO(m_logger, "WebAPI Login success!");
  87. return true;
  88. }
  89. /**
  90. * @brief 写入算法信息,写入tAction表
  91. *
  92. * @param vecInfo 要写入的表格数据
  93. * @param vecNowInfo 现有的表格数据,主要是为了重复利用已经删除的自增主键而传入的
  94. * @return true
  95. * @return false
  96. */
  97. bool FromWebAPI::writeAlgorithmInfo(std::vector<AlgorithmInfo>& vecInfo)
  98. {
  99. if(m_httpApi == nullptr)
  100. {
  101. SPDLOG_LOGGER_ERROR(m_logger,"WebApi is nullptr");
  102. return false;
  103. }
  104. /* 取出可用的自增主键,从0开始计算 */
  105. // std::list<int> listPKID;
  106. // int nPKID = 0;
  107. // for(const auto& it : vecNowInfo)
  108. // {
  109. // while(it.ActionTaskID == nPKID)
  110. // {
  111. // if(it.PKID != nPKID)
  112. // {
  113. // listPKID.push_back(nPKID);
  114. // break;
  115. // }
  116. // nPKID ++;
  117. // }
  118. // }
  119. /* 循环写入数据 */
  120. try
  121. {
  122. nJson json0 = nJson::array();
  123. for(const auto& it : vecInfo)
  124. {
  125. /* 操作名称,现在一次性将设备位置和线条信息都下载下来 */
  126. nJson json1;
  127. json1["opName"] = "SPSS_InsertToAction";
  128. json1["Key"] = QUuid::createUuid().toString().toStdString();
  129. nJson json2;
  130. json2["actionID"] = it.ActionID; /* 算法ID */
  131. json2["actionName"] = it.ActionName; /* 算法名称 */
  132. json2["actionTaskID"] = it.ActionTaskID; /* 算法类型 */
  133. json1["paramList"] = json2;
  134. json0.push_back(json1);
  135. }
  136. QString retStr;
  137. QString strCmd = QString::fromStdString(json0.dump());
  138. int ret = m_httpApi->DBDoInterface(enDBOperatorType::EDBOT_BatchTransAction, strCmd, retStr, true);
  139. if(ret != 0)
  140. {
  141. SPDLOG_LOGGER_ERROR(m_logger,"写入tAction失败:{}, 错误信息:{}",ret,m_httpApi->DoGetLastError(&ret).toStdString());
  142. }
  143. }
  144. catch (const nJson::parse_error& e) {
  145. SPDLOG_LOGGER_ERROR(m_logger,"创建 算法JSON 数据失败:{}, 错误ID:{}",e.what(), e.id);
  146. return false;
  147. }
  148. catch (const nJson::type_error& e) {
  149. SPDLOG_LOGGER_ERROR(m_logger,"创建 算法JSON 数据失败:{}, 错误ID:{}",e.what(), e.id);
  150. return false;
  151. }
  152. catch(...) {
  153. SPDLOG_LOGGER_ERROR(m_logger,"创建 算法JSON 数据失败");
  154. return false;
  155. }
  156. return true;
  157. }
  158. /* 删除算法信息 */
  159. bool FromWebAPI::deleteAlgorithmInfo(std::vector<AlgorithmInfo>& vecDeleteInfo)
  160. {
  161. if(m_httpApi == nullptr)
  162. {
  163. SPDLOG_LOGGER_ERROR(m_logger,"WebApi is nullptr");
  164. return false;
  165. }
  166. try
  167. {
  168. nJson json0 = nJson::array();
  169. for(const auto& it : vecDeleteInfo)
  170. {
  171. nJson json1;
  172. json0["opName"] = "SPSS_DeleteFromAction";
  173. json1["Key"] = QUuid::createUuid().toString().toStdString();
  174. nJson json2;
  175. json2["actionID"] = it.ActionID;
  176. json0["paramList"] = json2;
  177. json0.push_back(json1);
  178. }
  179. QString strCmd = QString::fromStdString(json0.dump());
  180. QString strRet;
  181. int ret = m_httpApi->DBDoInterface(enDBOperatorType::EDBOT_BatchTransAction, strCmd, strRet, true);
  182. if(ret != 0)
  183. {
  184. SPDLOG_LOGGER_ERROR(m_logger,"删除tAction失败:{}, 错误信息:{}",ret,m_httpApi->DoGetLastError(&ret).toStdString());
  185. return false;
  186. }
  187. }
  188. catch (const nJson::parse_error& e) {
  189. SPDLOG_LOGGER_ERROR(m_logger,"创建 删除算法的JSON 数据失败:{}, 错误ID:{}",e.what(), e.id);
  190. return false;
  191. }
  192. catch (const nJson::type_error& e) {
  193. SPDLOG_LOGGER_ERROR(m_logger,"创建 删除算法的JSON 数据失败:{}, 错误ID:{}",e.what(), e.id);
  194. return false;
  195. }
  196. catch(...) {
  197. SPDLOG_LOGGER_ERROR(m_logger,"创建 删除算法的JSON 数据失败");
  198. return false;
  199. }
  200. return true;
  201. }
  202. /* 获取tAction数据 */
  203. bool FromWebAPI::getAlgorithmInfo(std::vector<AlgorithmInfo>& vecInfo)
  204. {
  205. if(m_httpApi == nullptr)
  206. {
  207. SPDLOG_LOGGER_ERROR(m_logger, "WebAPI is nullptr");
  208. return false;
  209. }
  210. /* 清空内容 */
  211. vecInfo.clear();
  212. nJson json0;
  213. json0["opName"] = "SPSS_SelectFromAction";
  214. QString strCmd = QString::fromStdString(json0.dump());
  215. QString strRet;
  216. auto ret = m_httpApi->DBDoInterface(enDBOperatorType::EDBOT_Select, strCmd, strRet, true);
  217. if(ret != 0)
  218. {
  219. SPDLOG_LOGGER_DEBUG(m_logger,"获取tAction失败:{}, 错误信息:{}",ret,m_httpApi->DoGetLastError(&ret).toStdString());
  220. return false;
  221. }
  222. /* 解析获取到的JSON数据 */
  223. // SPDLOG_LOGGER_DEBUG(m_logger,"\n{}",strRet.toStdString());
  224. try {
  225. nJson json1 = nJson::parse(strRet.toStdString());
  226. int retCode = json1["code"].get<int>();
  227. if(retCode != 0)
  228. {
  229. SPDLOG_LOGGER_ERROR(m_logger,"获取tAction失败");
  230. return false;
  231. }
  232. nJson result = json1["result"];
  233. for(auto& it : result)
  234. {
  235. AlgorithmInfo info;
  236. info.ActionID = it["actionId"].is_null() ? "" : it["actionId"].get<std::string>();
  237. info.ActionName = it["actionName"].get<std::string>();
  238. info.ActionTaskID = it["actionTaskid"].get<int>();
  239. // SPDLOG_LOGGER_DEBUG(m_logger,"ActionID:{}, ActionName:{}, ActionTaskID:{}",info.ActionID,info.ActionName,info.ActionTaskID);
  240. vecInfo.push_back(info);
  241. }
  242. }
  243. catch (const nJson::parse_error& e) {
  244. SPDLOG_LOGGER_ERROR(m_logger,"创建 tAction 数据失败:{}, 错误ID:{}",e.what(), e.id);
  245. return false;
  246. }
  247. catch (const nJson::type_error& e) {
  248. SPDLOG_LOGGER_ERROR(m_logger,"创建 tAction 数据失败:{}, 错误ID:{}",e.what(), e.id);
  249. return false;
  250. }
  251. catch(...) {
  252. SPDLOG_LOGGER_ERROR(m_logger,"创建 tAction 数据失败");
  253. return false;
  254. }
  255. return true;
  256. }
  257. /* 插入设备信息 */
  258. bool FromWebAPI::insertDeviceInfo(std::vector<DeviceInfo>& vecInfo)
  259. {
  260. if(m_httpApi == nullptr)
  261. {
  262. SPDLOG_LOGGER_ERROR(m_logger,"WebApi is nullptr");
  263. return false;
  264. }
  265. if(vecInfo.empty())
  266. {
  267. return false;
  268. }
  269. bool isSuccess = true;
  270. try
  271. {
  272. nJson json0 = nJson::array();
  273. for(const auto& it : vecInfo)
  274. {
  275. nJson json1;
  276. json1["opName"] = "SPSS_InsertToCamerInfo";
  277. json1["Key"] = QUuid::createUuid().toString().toStdString();
  278. nJson json2;
  279. /* 这里不知道是不是“?”运算符的等级是不是不够,不加括号会报错 */
  280. json2["camerID"] = it.DeviceID;
  281. json2["camerName"] = it.DeviceName;
  282. json2["camerIP"] = it.DeviceIP;
  283. json2["camerPort"] = it.DevicePort;
  284. json2["camerUser"] = it.UserAccount;
  285. json2["camerPwd"] = it.UserPassword;
  286. json2["camerType"] = it.DeviceType;
  287. json2["camerSerial"] = it.DeviceSerial;
  288. json2["camerChannel"] = nullptr;
  289. json2["camerUrl"] = nullptr;
  290. json1["paramList"] = json2;
  291. json0.push_back(json1);
  292. }
  293. QString strCmd = QString::fromStdString(json0.dump());
  294. QString strRet;
  295. auto ret = m_httpApi->DBDoInterface(enDBOperatorType::EDBOT_BatchTransAction, strCmd, strRet, true);
  296. if(ret != 0)
  297. {
  298. SPDLOG_LOGGER_ERROR(m_logger,"插入设备信息失败:{}, 错误信息:{}",ret,m_httpApi->DoGetLastError(&ret).toStdString());
  299. isSuccess = false;
  300. }
  301. // /* 插入信息到tActionCamer表 */
  302. // json0.clear();
  303. // for(const auto& it0 : vecInfo)
  304. // {
  305. // for(const auto& it1 : it0.vecAlgorithmInfo)
  306. // {
  307. // nJson json1;
  308. // json1["opName"] = "SPSS_InsertToActionCamer";
  309. // json1["Key"] = QUuid::createUuid().toString().toStdString();
  310. // nJson json2;
  311. // json2["actionID"] = it1.ActionID;
  312. // json2["camerID"] = it0.DeviceID;
  313. // json1["paramList"] = json1;
  314. // json0.push_back(json1);
  315. // }
  316. // }
  317. // strCmd.clear();
  318. // strRet.clear();
  319. // ret = 0;
  320. // strCmd = QString::fromStdString(json0.dump());
  321. // ret = m_httpApi->DBDoInterface(enDBOperatorType::EDBOT_Insert, strCmd, strRet, true);
  322. // if(ret != 0)
  323. // {
  324. // SPDLOG_LOGGER_DEBUG(m_logger,"插入设备信息到tActionCamer失败:{}, 错误信息:{}",ret,m_httpApi->DoGetLastError(&ret).toStdString());
  325. // isSuccess = false;
  326. // }
  327. }
  328. catch (const nJson::parse_error& e) {
  329. SPDLOG_LOGGER_ERROR(m_logger,"创建 设备信息JSON 数据失败:{}, 错误ID:{}",e.what(), e.id);
  330. return false;
  331. }
  332. catch (const nJson::type_error& e) {
  333. SPDLOG_LOGGER_ERROR(m_logger,"创建 设备信息JSON 数据失败:{}, 错误ID:{}",e.what(), e.id);
  334. return false;
  335. }
  336. catch(...) {
  337. SPDLOG_LOGGER_ERROR(m_logger,"创建 设备信息JSON 数据失败");
  338. return false;
  339. }
  340. return isSuccess;
  341. }
  342. /* 更新设备信息 */
  343. bool FromWebAPI::updateDeviceInfo(std::vector<DeviceInfo>& vecUpdateInfo)
  344. {
  345. if(m_httpApi == nullptr)
  346. {
  347. SPDLOG_LOGGER_ERROR(m_logger,"WebApi is nullptr");
  348. return false;
  349. }
  350. if(vecUpdateInfo.empty())
  351. {
  352. return false;
  353. }
  354. bool isSuccess = true;
  355. try
  356. {
  357. nJson json0 = nJson::array();
  358. for(const auto& it : vecUpdateInfo)
  359. {
  360. nJson json1;
  361. json1["opName"] = "SPSS_UpdateToCamerInfo";
  362. json1["Key"] = QUuid::createUuid().toString().toStdString();
  363. nJson json2;
  364. json2["camerID"] = it.DeviceID;
  365. json2["camerName"] = it.DeviceName;
  366. json2["camerIP"] = it.DeviceIP;
  367. json2["camerPort"] = it.DevicePort;
  368. json2["camerUser"] = it.UserAccount;
  369. json2["camerPwd"] = it.UserPassword;
  370. json2["camerType"] = it.DeviceType;
  371. json2["camerSerial"] = it.DeviceSerial;
  372. json2["camerChannel"] = nullptr;
  373. json2["camerUrl"] = nullptr;
  374. json1["paramList"] = json2;
  375. json0.push_back(json1);
  376. }
  377. QString strCmd = QString::fromStdString(json0.dump());
  378. QString strRet;
  379. auto ret = m_httpApi->DBDoInterface(enDBOperatorType::EDBOT_BatchTransAction, strCmd, strRet, true);
  380. if(ret != 0)
  381. {
  382. SPDLOG_LOGGER_ERROR(m_logger,"更新设备信息失败:{}, 错误信息:{}",ret,m_httpApi->DoGetLastError(&ret).toStdString());
  383. isSuccess = false;
  384. }
  385. }
  386. catch (const nJson::parse_error& e) {
  387. SPDLOG_LOGGER_ERROR(m_logger,"创建 更新设备信息JSON 数据失败:{}, 错误ID:{}",e.what(), e.id);
  388. return false;
  389. }
  390. catch (const nJson::type_error& e) {
  391. SPDLOG_LOGGER_ERROR(m_logger,"创建 更新设备信息JSON 数据失败:{}, 错误ID:{}",e.what(), e.id);
  392. return false;
  393. }
  394. catch(...) {
  395. SPDLOG_LOGGER_ERROR(m_logger,"创建 更新设备信息JSON 数据失败");
  396. return false;
  397. }
  398. return isSuccess;
  399. }
  400. /* 删除设备信息 */
  401. bool FromWebAPI::deleteDeviceInfo(std::vector<DeviceInfo>& vecDeleteInfo)
  402. {
  403. if(m_httpApi == nullptr)
  404. {
  405. SPDLOG_LOGGER_ERROR(m_logger,"WebApi is nullptr");
  406. return false;
  407. }
  408. if(vecDeleteInfo.empty())
  409. {
  410. return true;
  411. }
  412. bool isSuccess = true;
  413. try
  414. {
  415. nJson json0 = nJson::array();
  416. for(const auto& it : vecDeleteInfo)
  417. {
  418. nJson json1;
  419. json1["opName"] = "SPSS_DeleteFromCamerInfo";
  420. json1["Key"] = QUuid::createUuid().toString().toStdString();
  421. nJson json2;
  422. json2["camerID"] = it.DeviceID;
  423. json1["paramList"] = json2;
  424. json0.push_back(json1);
  425. }
  426. QString strCmd = QString::fromStdString(json0.dump());
  427. QString strRet;
  428. auto ret = m_httpApi->DBDoInterface(enDBOperatorType::EDBOT_BatchTransAction, strCmd, strRet, true);
  429. if(ret != 0)
  430. {
  431. SPDLOG_LOGGER_ERROR(m_logger,"删除tCamerinfo设备信息失败:{}, 错误信息:{}",ret,m_httpApi->DoGetLastError(&ret).toStdString());
  432. isSuccess = false;
  433. }
  434. }
  435. catch (const nJson::parse_error& e) {
  436. SPDLOG_LOGGER_ERROR(m_logger,"创建 删除设备信息JSON 数据失败:{}, 错误ID:{}",e.what(), e.id);
  437. return false;
  438. }
  439. catch (const nJson::type_error& e) {
  440. SPDLOG_LOGGER_ERROR(m_logger,"创建 删除设备信息JSON 数据失败:{}, 错误ID:{}",e.what(), e.id);
  441. return false;
  442. }
  443. catch(...) {
  444. SPDLOG_LOGGER_ERROR(m_logger,"创建 删除设备信息JSON 数据失败");
  445. return false;
  446. }
  447. return isSuccess;
  448. }
  449. /* 从EQM获取CamerInfo信息 */
  450. bool FromWebAPI::getDeviceInfo(std::vector<DeviceInfo>& vecInfo)
  451. {
  452. if(m_httpApi == nullptr)
  453. {
  454. SPDLOG_LOGGER_ERROR(m_logger,"WebApi is nullptr");
  455. return false;
  456. }
  457. vecInfo.clear();
  458. nJson json0;
  459. json0["opName"] = "SPSS_SelectFromCamerInfo";
  460. QString strCmd = QString::fromStdString(json0.dump());
  461. QString strRet;
  462. auto ret = m_httpApi->DBDoInterface(enDBOperatorType::EDBOT_Select, strCmd, strRet, true);
  463. if(ret != 0)
  464. {
  465. SPDLOG_LOGGER_DEBUG(m_logger,"获取CamerInfo失败:{}, 错误信息:{}",ret,m_httpApi->DoGetLastError(&ret).toStdString());
  466. return false;
  467. }
  468. // SPDLOG_LOGGER_TRACE(m_logger, "摄像机信息:\n{}", nJson::parse(strRet.toStdString()).dump(4));
  469. /* 解析信息 */
  470. try {
  471. nJson json1 = nJson::parse(strRet.toStdString());
  472. int retCode = json1["code"].get<int>();
  473. if(retCode != 0)
  474. {
  475. SPDLOG_LOGGER_ERROR(m_logger,"获取CamerInfo失败");
  476. return false;
  477. }
  478. nJson result = json1["result"];
  479. if(result.empty())
  480. {
  481. return false;
  482. }
  483. for(const auto& it : result)
  484. {
  485. // SPDLOG_LOGGER_DEBUG(m_logger,"camerID:{}",it["camerId"].get<int>());
  486. DeviceInfo info;
  487. info.DeviceID = it["camerId"].get<int>();
  488. info.DeviceName = it["camerName"].is_null() ? "" : it["camerName"].get<std::string>();
  489. info.DeviceIP = it["camerIp"].is_null() ? "" : it["camerIp"].get<std::string>();
  490. info.DevicePort = it["camerPort"].is_null() ? 0 : it["camerPort"].get<int>();
  491. info.UserAccount = it["camerUsr"].is_null() ? "" : it["camerUsr"].get<std::string>();
  492. info.UserPassword = it["camerPwd"].is_null() ? "" : it["camerPwd"].get<std::string>();
  493. info.DeviceType = it["camerType"].is_null() ? "" : it["camerType"].get<std::string>();
  494. info.DeviceSerial = it["camerSerial"].is_null() ? "" : it["camerSerial"].get<std::string>();
  495. vecInfo.push_back(info);
  496. }
  497. }
  498. catch (const nJson::parse_error& e) {
  499. SPDLOG_LOGGER_ERROR(m_logger,"解析 CamerInfo数据失败 数据失败:{}, 错误ID:{}",e.what(), e.id);
  500. return false;
  501. }
  502. catch (const nJson::type_error& e) {
  503. SPDLOG_LOGGER_ERROR(m_logger,"解析 CamerInfo数据失败 数据失败:{}, 错误ID:{}",e.what(), e.id);
  504. return false;
  505. }
  506. catch(...) {
  507. SPDLOG_LOGGER_ERROR(m_logger,"解析 CamerInfo数据失败 数据失败");
  508. return false;
  509. }
  510. return true;
  511. }
  512. /* 获取通道信息 */
  513. bool FromWebAPI::getChannelInfo(std::map<int, std::string>& mapChannelName)
  514. {
  515. if(m_httpApi == nullptr)
  516. {
  517. SPDLOG_LOGGER_ERROR(m_logger,"WebApi is nullptr");
  518. return false;
  519. }
  520. nJson json0;
  521. json0["opName"] = "SPSS_SelectChannelInfo";
  522. QString strCmd = QString::fromStdString(json0.dump());
  523. QString strRet;
  524. auto ret = m_httpApi->DBDoInterface(enDBOperatorType::EDBOT_Select, strCmd, strRet, true);
  525. if(ret != 0)
  526. {
  527. SPDLOG_LOGGER_DEBUG(m_logger,"获取通道信息失败:{}, 错误信息:{}",ret,m_httpApi->DoGetLastError(&ret).toStdString());
  528. return false;
  529. }
  530. /* 解析信息 */
  531. try
  532. {
  533. nJson json1 = nJson::parse(strRet.toStdString());
  534. int retCode = json1["code"].get<int>();
  535. if(retCode != 0)
  536. {
  537. SPDLOG_LOGGER_ERROR(m_logger,"获取通道信息失败");
  538. return false;
  539. }
  540. nJson result = json1["result"];
  541. if(result.empty())
  542. {
  543. return false;
  544. }
  545. for(const auto& it : result)
  546. {
  547. int id = it["chnID"].get<int>();
  548. std::string chnName = it["chnName"].is_null() ? "" : it["chnName"].get<std::string>();
  549. mapChannelName.insert(std::make_pair(id, chnName));
  550. }
  551. }
  552. catch (const nJson::parse_error& e) {
  553. SPDLOG_LOGGER_ERROR(m_logger,"解析 tChannel数据失败 数据失败:{}, 错误ID:{}",e.what(), e.id);
  554. return false;
  555. }
  556. catch (const nJson::type_error& e) {
  557. SPDLOG_LOGGER_ERROR(m_logger,"解析 tChannel数据失败 数据失败:{}, 错误ID:{}",e.what(), e.id);
  558. return false;
  559. }
  560. catch(...) {
  561. SPDLOG_LOGGER_ERROR(m_logger,"解析 tChannel数据失败 数据失败");
  562. return false;
  563. }
  564. return true;
  565. }
  566. std::string FromWebAPI::getChannelInfo(int chnID)
  567. {
  568. if(m_httpApi == nullptr)
  569. {
  570. SPDLOG_LOGGER_ERROR(m_logger,"WebApi is nullptr");
  571. return "";
  572. }
  573. nJson json0;
  574. json0["opName"] = "SPSS_SelectChannelInfo";
  575. QString strCmd = QString::fromStdString(json0.dump());
  576. QString strRet;
  577. auto ret = m_httpApi->DBDoInterface(enDBOperatorType::EDBOT_Select, strCmd, strRet, true);
  578. if(ret != 0)
  579. {
  580. SPDLOG_LOGGER_DEBUG(m_logger,"获取通道信息失败:{}, 错误信息:{}",ret,m_httpApi->DoGetLastError(&ret).toStdString());
  581. return "false;";
  582. }
  583. /* 解析信息 */
  584. try
  585. {
  586. nJson json1 = nJson::parse(strRet.toStdString());
  587. int retCode = json1["code"].get<int>();
  588. if(retCode != 0)
  589. {
  590. SPDLOG_LOGGER_ERROR(m_logger,"获取通道信息失败");
  591. return "";
  592. }
  593. nJson result = json1["result"];
  594. if(result.empty())
  595. {
  596. return "";
  597. }
  598. for(const auto& it : result)
  599. {
  600. int id = it["chnID"].get<int>();
  601. if(id == chnID)
  602. {
  603. return it.dump();
  604. }
  605. }
  606. }
  607. catch (const nJson::parse_error& e) {
  608. SPDLOG_LOGGER_ERROR(m_logger,"解析 tChannel数据失败 数据失败:{}, 错误ID:{}",e.what(), e.id);
  609. return "";
  610. }
  611. catch (const nJson::type_error& e) {
  612. SPDLOG_LOGGER_ERROR(m_logger,"解析 tChannel数据失败 数据失败:{}, 错误ID:{}",e.what(), e.id);
  613. return "";
  614. }
  615. catch(...) {
  616. SPDLOG_LOGGER_ERROR(m_logger,"解析 tChannel数据失败 数据失败");
  617. return "";
  618. }
  619. return "";
  620. }
  621. /* 获取摄像机信息 */
  622. bool FromWebAPI::getCameraInfo(std::map<int, std::string>& mapCameraName)
  623. {
  624. if(m_httpApi == nullptr)
  625. {
  626. SPDLOG_LOGGER_ERROR(m_logger,"WebApi is nullptr");
  627. return false;
  628. }
  629. nJson json0;
  630. json0["opName"] = "SPSS_SelectCameraInfo";
  631. QString strCmd = QString::fromStdString(json0.dump());
  632. QString strRet;
  633. auto ret = m_httpApi->DBDoInterface(enDBOperatorType::EDBOT_Select, strCmd, strRet, true);
  634. if(ret != 0)
  635. {
  636. SPDLOG_LOGGER_DEBUG(m_logger,"获取通道信息失败:{}, 错误信息:{}",ret,m_httpApi->DoGetLastError(&ret).toStdString());
  637. return false;
  638. }
  639. /* 解析信息 */
  640. try
  641. {
  642. nJson json1 = nJson::parse(strRet.toStdString());
  643. int retCode = json1["code"].get<int>();
  644. if(retCode != 0)
  645. {
  646. SPDLOG_LOGGER_ERROR(m_logger,"获取通道信息失败");
  647. return false;
  648. }
  649. nJson result = json1["result"];
  650. if(result.empty())
  651. {
  652. return false;
  653. }
  654. for(const auto& it : result)
  655. {
  656. int id = it["camerId"].get<int>();
  657. std::string camerName = it["camerName"].is_null() ? "" : it["camerName"].get<std::string>();
  658. mapCameraName.insert(std::make_pair(id, camerName));
  659. }
  660. }
  661. catch (const nJson::parse_error& e) {
  662. SPDLOG_LOGGER_ERROR(m_logger,"解析 tChannel数据失败 数据失败:{}, 错误ID:{}",e.what(), e.id);
  663. return false;
  664. }
  665. catch (const nJson::type_error& e) {
  666. SPDLOG_LOGGER_ERROR(m_logger,"解析 tChannel数据失败 数据失败:{}, 错误ID:{}",e.what(), e.id);
  667. return false;
  668. }
  669. catch(...) {
  670. SPDLOG_LOGGER_ERROR(m_logger,"解析 tChannel数据失败 数据失败");
  671. return false;
  672. }
  673. return true;
  674. }
  675. /* 插入设备和算法关联信息 */
  676. bool FromWebAPI::insertDeviceAlgorithmInfo(std::vector<DeviceInfo>& vecInfo)
  677. {
  678. if(m_httpApi == nullptr)
  679. {
  680. SPDLOG_LOGGER_ERROR(m_logger,"WebApi is nullptr");
  681. return false;
  682. }
  683. /* 插入信息到tActionCamer表 */
  684. try
  685. {
  686. nJson json0 = nJson::array();
  687. for(const auto& it0 : vecInfo)
  688. {
  689. for(const auto& it1 : it0.vecAlgorithmInfo)
  690. {
  691. nJson json1;
  692. json1["opName"] = "SPSS_InsertToActionCamer";
  693. json1["Key"] = QUuid::createUuid().toString().toStdString();
  694. nJson json2;
  695. json2["actionID"] = it1.ActionID;
  696. json2["camerID"] = it0.DeviceID;
  697. json1["paramList"] = json1;
  698. json0.push_back(json1);
  699. }
  700. }
  701. QString strRet;
  702. QString strCmd = QString::fromStdString(json0.dump());
  703. int ret = m_httpApi->DBDoInterface(enDBOperatorType::EDBOT_BatchTransAction, strCmd, strRet, true);
  704. if(ret != 0)
  705. {
  706. SPDLOG_LOGGER_ERROR(m_logger,"插入设备信息到tActionCamer失败:{}, 错误信息:{}",ret,m_httpApi->DoGetLastError(&ret).toStdString());
  707. return false;
  708. }
  709. }
  710. catch (const nJson::parse_error& e) {
  711. SPDLOG_LOGGER_ERROR(m_logger,"创建 写入tActionCamer JSON失败 数据失败:{}, 错误ID:{}",e.what(), e.id);
  712. return false;
  713. }
  714. catch (const nJson::type_error& e) {
  715. SPDLOG_LOGGER_ERROR(m_logger,"创建 写入tActionCamer JSON失败 数据失败:{}, 错误ID:{}",e.what(), e.id);
  716. return false;
  717. }
  718. catch(...) {
  719. SPDLOG_LOGGER_ERROR(m_logger,"创建 写入tActionCamer JSON失败 数据失败");
  720. return false;
  721. }
  722. return true;
  723. }
  724. /* 更新设备和算法关联表 */
  725. bool FromWebAPI::updateDeviceAlgorithmInfo(std::vector<DeviceInfo>& vecInfo)
  726. {
  727. if(m_httpApi == nullptr)
  728. {
  729. SPDLOG_LOGGER_ERROR(m_logger,"WebApi is nullptr");
  730. return false;
  731. }
  732. /* 更新之前先删除相关的信息 */
  733. if(!deleteDeviceAlgorithmInfo(vecInfo))
  734. {
  735. SPDLOG_LOGGER_ERROR(m_logger,"删除 tActionCamer 关联表失败");
  736. return false;
  737. }
  738. /* 插入信息到tActionCamer表 */
  739. bool isSuccess = true;
  740. try
  741. {
  742. nJson json0 = nJson::array();
  743. for(const auto& it0 : vecInfo)
  744. {
  745. for(const auto& it1 : it0.vecAlgorithmInfo)
  746. {
  747. nJson json1;
  748. json1["opName"] = "SPSS_InsertToActionCamer";
  749. json1["Key"] = QUuid::createUuid().toString().toStdString();
  750. nJson json2;
  751. json2["actionID"] = it1.ActionID;
  752. json2["camerID"] = it0.DeviceID;
  753. json1["paramList"] = json2;
  754. json0.push_back(json1);
  755. }
  756. }
  757. QString strCmd = QString::fromStdString(json0.dump());
  758. QString strRet;
  759. auto ret = m_httpApi->DBDoInterface(enDBOperatorType::EDBOT_BatchTransAction, strCmd, strRet, true);
  760. if(ret != 0)
  761. {
  762. SPDLOG_LOGGER_ERROR(m_logger,"插入设备信息到tActionCamer失败:{}, 错误信息:{}",ret,m_httpApi->DoGetLastError(&ret).toStdString());
  763. isSuccess = false;
  764. }
  765. // SPDLOG_LOGGER_DEBUG(m_logger,"插入数据到ActionCamer 成功! 数目: {}", json0.size());
  766. }
  767. catch (const nJson::parse_error& e) {
  768. SPDLOG_LOGGER_ERROR(m_logger,"创建 插入tActionCamer JSON失败 数据失败:{}, 错误ID:{}",e.what(), e.id);
  769. return false;
  770. }
  771. catch (const nJson::type_error& e) {
  772. SPDLOG_LOGGER_ERROR(m_logger,"创建 插入tActionCamer JSON失败 数据失败:{}, 错误ID:{}",e.what(), e.id);
  773. return false;
  774. }
  775. catch(...) {
  776. SPDLOG_LOGGER_ERROR(m_logger,"创建 插入tActionCamer JSON失败 数据失败");
  777. return false;
  778. }
  779. return isSuccess;
  780. }
  781. /* 删除设备和算法关联表 */
  782. bool FromWebAPI::deleteDeviceAlgorithmInfo(std::vector<DeviceInfo>& vecInfo)
  783. {
  784. if(m_httpApi == nullptr)
  785. {
  786. SPDLOG_LOGGER_ERROR(m_logger,"WebApi is nullptr");
  787. return false;
  788. }
  789. bool isSuccess = true;
  790. /* 更新之前先删除相关的信息 */
  791. try
  792. {
  793. nJson json0 = nJson::array();
  794. /* 更新之前先删除相关的信息 */
  795. for(const auto& it : vecInfo)
  796. {
  797. nJson json1;
  798. json1["opName"] = "SPSS_DeleteFromActionCamer";
  799. json1["Key"] = QUuid::createUuid().toString().toStdString();
  800. nJson json2;
  801. json2["camerID"] = it.DeviceID;
  802. json1["paramList"] = json2;
  803. json0.push_back(json1);
  804. }
  805. QString strCmd = QString::fromStdString(json0.dump());
  806. QString strRet;
  807. auto ret = m_httpApi->DBDoInterface(enDBOperatorType::EDBOT_BatchTransAction, strCmd, strRet, true);
  808. if(ret != 0)
  809. {
  810. SPDLOG_LOGGER_ERROR(m_logger,"删除设备信息到tActionCamer失败:{}, 错误信息:{}",ret,m_httpApi->DoGetLastError(&ret).toStdString());
  811. // return false;
  812. isSuccess = false;
  813. }
  814. // SPDLOG_LOGGER_DEBUG(m_logger,"从 ActionCamer 删除成功! 数目:{}", vecInfo.size());
  815. }
  816. catch (const nJson::parse_error& e) {
  817. SPDLOG_LOGGER_ERROR(m_logger,"创建 删除tActionCamer JSON失败 数据失败:{}, 错误ID:{}",e.what(), e.id);
  818. return false;
  819. }
  820. catch (const nJson::type_error& e) {
  821. SPDLOG_LOGGER_ERROR(m_logger,"创建 删除tActionCamer JSON失败 数据失败:{}, 错误ID:{}",e.what(), e.id);
  822. return false;
  823. }
  824. catch(...) {
  825. SPDLOG_LOGGER_ERROR(m_logger,"创建 删除tActionCamer JSON失败 数据失败");
  826. return false;
  827. }
  828. return isSuccess;
  829. }
  830. /* 删除设备和算法关联表 */
  831. bool FromWebAPI::deleteDeviceAlgorithmInfo(std::list<int>& vecID)
  832. {
  833. if(m_httpApi == nullptr)
  834. {
  835. SPDLOG_LOGGER_ERROR(m_logger,"WebApi is nullptr");
  836. return false;
  837. }
  838. bool isSuccess = true;
  839. try
  840. {
  841. nJson json0 = nJson::array();
  842. /* 更新之前先删除相关的信息 */
  843. for(const auto& it : vecID)
  844. {
  845. nJson json1;
  846. json1["opName"] = "SPSS_DeleteFromActionCamer";
  847. json1["Key"] = QUuid::createUuid().toString().toStdString();
  848. nJson json2;
  849. json2["camerID"] = it;
  850. json1["paramList"] = json2;
  851. json0.push_back(json1);
  852. }
  853. QString strCmd = QString::fromStdString(json0.dump());
  854. QString strRet;
  855. auto ret = m_httpApi->DBDoInterface(enDBOperatorType::EDBOT_BatchTransAction, strCmd, strRet, true);
  856. if(ret != 0)
  857. {
  858. SPDLOG_LOGGER_ERROR(m_logger,"删除设备信息到tActionCamer失败:{}, 错误信息:{}",ret,m_httpApi->DoGetLastError(&ret).toStdString());
  859. // return false;
  860. isSuccess = false;
  861. }
  862. // SPDLOG_LOGGER_DEBUG(m_logger,"从 ActionCamer 删除成功! 数目:{}", vecID.size());
  863. }
  864. catch (const nJson::parse_error& e) {
  865. SPDLOG_LOGGER_ERROR(m_logger,"创建 删除tActionCamer JSON失败 数据失败:{}, 错误ID:{}",e.what(), e.id);
  866. return false;
  867. }
  868. catch (const nJson::type_error& e) {
  869. SPDLOG_LOGGER_ERROR(m_logger,"创建 删除tActionCamer JSON失败 数据失败:{}, 错误ID:{}",e.what(), e.id);
  870. return false;
  871. }
  872. catch(...) {
  873. SPDLOG_LOGGER_ERROR(m_logger,"创建 删除tActionCamer JSON失败 数据失败");
  874. return false;
  875. }
  876. return isSuccess;
  877. }
  878. /* 获取设备和算法信息关联表,需要先从EQM数据库中获取到设备信息 */
  879. bool FromWebAPI::getDeviceAlgorithmInfo(std::vector<DeviceInfo>& vecInfo, std::list<int>& listDevIDDelete)
  880. {
  881. if(m_httpApi == nullptr)
  882. {
  883. SPDLOG_LOGGER_ERROR(m_logger,"WebApi is nullptr");
  884. return false;
  885. }
  886. if(vecInfo.empty())
  887. {
  888. SPDLOG_LOGGER_WARN(m_logger,"Device info is empty");
  889. return false;
  890. }
  891. listDevIDDelete.clear();
  892. nJson json0;
  893. json0["opName"] = "SPSS_SelectFromActionCamer";
  894. QString strCmd = QString::fromStdString(json0.dump());
  895. QString strRet;
  896. auto ret = m_httpApi->DBDoInterface(enDBOperatorType::EDBOT_Select, strCmd, strRet, true);
  897. if(ret != 0)
  898. {
  899. SPDLOG_LOGGER_DEBUG(m_logger,"获取ActionCamer失败:{}, 错误信息:{}",ret,m_httpApi->DoGetLastError(&ret).toStdString());
  900. return false;
  901. }
  902. /* 设备和算法关联信息容器 */
  903. std::vector<DeviceAlgorithmInfo> vecNewInfo;
  904. /* 解析信息 */
  905. try {
  906. nJson json1 = nJson::parse(strRet.toStdString());
  907. int retCode = json1["code"].get<int>();
  908. if(retCode != 0)
  909. {
  910. SPDLOG_LOGGER_ERROR(m_logger,"获取ActionCamer失败");
  911. return false;
  912. }
  913. nJson result = json1["result"];
  914. if(result.empty())
  915. {
  916. return false;
  917. }
  918. /* 取出所有的设备算法信息 */
  919. for(const auto& it : result)
  920. {
  921. DeviceAlgorithmInfo info;
  922. info.DeviceID = it["camerId"].get<int>();
  923. info.ActionID = it["actionId"].is_null() ? "" : it["actionId"].get<std::string>();
  924. info.ActionName = it["actionName"].is_null() ? "" : it["actionName"].get<std::string>();
  925. info.ActionTaskID = it["actionTaskid"].is_null() ? 0 : it["actionTaskid"].get<int>();
  926. vecNewInfo.push_back(info);
  927. }
  928. }
  929. catch (const nJson::parse_error& e) {
  930. SPDLOG_LOGGER_ERROR(m_logger,"解析ActionCamer数据失败:{}, 错误ID:{}",e.what(), e.id);
  931. return false;
  932. }
  933. catch (const nJson::type_error& e) {
  934. SPDLOG_LOGGER_ERROR(m_logger,"解析ActionCamer数据失败:{}, 错误ID:{}",e.what(), e.id);
  935. return false;
  936. }
  937. /* 根据缓存中的设备ID取出关联的算法 */
  938. for(auto& it0 : vecInfo)
  939. {
  940. for(auto& it1 : vecNewInfo)
  941. {
  942. /* 对比设备ID */
  943. if(it0.DeviceID == it1.DeviceID)
  944. {
  945. AlgorithmInfo info;
  946. info.ActionID = it1.ActionID;
  947. info.ActionName = it1.ActionName;
  948. info.ActionTaskID = it1.ActionTaskID;
  949. it0.vecAlgorithmInfo.push_back(info);
  950. }
  951. }
  952. }
  953. /* 取出关联表中已经消失的设备ID,在本轮循环中删除 */
  954. for(const auto& it : vecNewInfo)
  955. {
  956. bool isExist = false;
  957. for(const auto& it0 : vecInfo)
  958. {
  959. if(it.DeviceID == it0.DeviceID)
  960. {
  961. isExist = true;
  962. break;
  963. }
  964. }
  965. if(!isExist)
  966. {
  967. /* 检查是否重复,一个ID只需要记录一次 */
  968. if(std::find(listDevIDDelete.begin(), listDevIDDelete.end(), it.DeviceID) == listDevIDDelete.end())
  969. {
  970. listDevIDDelete.push_back(it.DeviceID);
  971. }
  972. }
  973. }
  974. return true;
  975. }
  976. /* 获取设备和算法关联信息,包括频率信息,房间信息,重载版,只获取关联关系 */
  977. bool FromWebAPI::getActionInfo(ListActionInfo& listInfo)
  978. {
  979. if(m_httpApi == nullptr)
  980. {
  981. SPDLOG_LOGGER_ERROR(m_logger,"WebApi is nullptr");
  982. return false;
  983. }
  984. listInfo.clear();
  985. nJson json0;
  986. json0["opName"] = "SPSS_SelectFromActionInfo";
  987. QString strCmd = QString::fromStdString(json0.dump());
  988. QString strRet;
  989. auto ret = m_httpApi->DBDoInterface(enDBOperatorType::EDBOT_Select, strCmd, strRet, true);
  990. if(ret != 0)
  991. {
  992. SPDLOG_LOGGER_DEBUG(m_logger,"获取ActionCamer失败:{}, 错误信息:{}",ret,m_httpApi->DoGetLastError(&ret).toStdString());
  993. return false;
  994. }
  995. /* 解析信息 */
  996. try
  997. {
  998. nJson json1 = nJson::parse(strRet.toStdString());
  999. int retCode = json1["code"].get<int>();
  1000. if(retCode != 0)
  1001. {
  1002. SPDLOG_LOGGER_ERROR(m_logger,"获取ActionCamer失败");
  1003. return false;
  1004. }
  1005. nJson result = json1["result"];
  1006. if(result.empty())
  1007. {
  1008. return false;
  1009. }
  1010. /* 取出所有的设备算法信息 */
  1011. for(const auto& it : result)
  1012. {
  1013. ActionInfo info;
  1014. info.CameraID = it["camerId"].is_null() ? -1 : it["camerId"].get<int>();
  1015. info.ActionID = it["actionId"].is_null() ? "" : it["actionId"].get<std::string>();
  1016. info.RoomID = it["roomId"].is_null() ? -1 : it["roomId"].get<int>();
  1017. info.ChannelID = it["chnId"].is_null() ? -1 : it["chnId"].get<int>();
  1018. int roomType = it["rtype"].is_null() ? 0 : it["rtype"].get<int>();
  1019. info.RoomType = static_cast<Enum_RoomType>(roomType);
  1020. info.strRoomName = it["rname"].is_null() ? "" : it["rname"].get<std::string>();
  1021. listInfo.insertActionInfo(&info);
  1022. }
  1023. }
  1024. catch (const nJson::parse_error& e) {
  1025. SPDLOG_LOGGER_ERROR(m_logger,"解析 ActionCamer 数据失败:{}, 错误ID:{}",e.what(), e.id);
  1026. return false;
  1027. }
  1028. catch (const nJson::type_error& e) {
  1029. SPDLOG_LOGGER_ERROR(m_logger,"解析 ActionCamer 数据失败:{}, 错误ID:{}",e.what(), e.id);
  1030. return false;
  1031. }
  1032. catch(...)
  1033. {
  1034. SPDLOG_LOGGER_ERROR(m_logger,"解析 ActionCamer 数据失败");
  1035. return false;
  1036. }
  1037. return true;
  1038. }
  1039. /* 获取摄像机和房间关联信息 */
  1040. bool FromWebAPI::getRoomCameraInfo(std::list<RoomCameraInfo>& vecInfo)
  1041. {
  1042. if(m_httpApi == nullptr)
  1043. {
  1044. SPDLOG_LOGGER_ERROR(m_logger,"WebApi is nullptr");
  1045. return false;
  1046. }
  1047. vecInfo.clear();
  1048. nJson json0;
  1049. json0["opName"] = "SPSS_SelectRoomCamer";
  1050. QString strCmd = QString::fromStdString(json0.dump());
  1051. QString strRet;
  1052. auto ret = m_httpApi->DBDoInterface(enDBOperatorType::EDBOT_Select, strCmd, strRet, true);
  1053. if(ret != 0)
  1054. {
  1055. SPDLOG_LOGGER_DEBUG(m_logger,"获取RoomCamer失败:{}, 错误信息:{}",ret,m_httpApi->DoGetLastError(&ret).toStdString());
  1056. return false;
  1057. }
  1058. try
  1059. {
  1060. nJson json1 = nJson::parse(strRet.toStdString());
  1061. int retCode = json1["code"].get<int>();
  1062. if(retCode != 0)
  1063. {
  1064. SPDLOG_LOGGER_ERROR(m_logger,"获取RoomCamer失败");
  1065. return false;
  1066. }
  1067. nJson result = json1["result"];
  1068. if(result.empty())
  1069. {
  1070. return false;
  1071. }
  1072. for(const auto& it : result)
  1073. {
  1074. auto roomID = it["roomId"].get<int>();
  1075. auto cameraID = it["camerId"].is_null() ? -1 : it["camerId"].get<int>();
  1076. /* 先检查RoomID是否已经在列表中了 */
  1077. bool isExist = false;
  1078. for(auto& it0 : vecInfo)
  1079. {
  1080. if(it0.RoomID == roomID)
  1081. {
  1082. it0.listCameraID.push_back(cameraID);
  1083. isExist = true;
  1084. break;
  1085. }
  1086. }
  1087. /* 没有找到RoomID,创建一个新的 */
  1088. if(!isExist)
  1089. {
  1090. RoomCameraInfo info;
  1091. info.RoomID = roomID;
  1092. info.listCameraID.push_back(cameraID);
  1093. }
  1094. }
  1095. }
  1096. catch (const nJson::parse_error& e) {
  1097. SPDLOG_LOGGER_ERROR(m_logger,"解析ActionCamer数据失败:{}, 错误ID:{}",e.what(), e.id);
  1098. return false;
  1099. }
  1100. catch (const nJson::type_error& e) {
  1101. SPDLOG_LOGGER_ERROR(m_logger,"解析ActionCamer数据失败:{}, 错误ID:{}",e.what(), e.id);
  1102. return false;
  1103. }
  1104. catch(const std::exception& e)
  1105. {
  1106. SPDLOG_LOGGER_ERROR(m_logger,"解析ActionCamer数据失败:{}",e.what());
  1107. return false;
  1108. }
  1109. catch(...)
  1110. {
  1111. SPDLOG_LOGGER_ERROR(m_logger,"解析ActionCamer数据失败");
  1112. return false;
  1113. }
  1114. return true;
  1115. }
  1116. /* 根据获取功能检测时间区间 */
  1117. bool FromWebAPI::getFuncDetectTime(int ChannelID, AppFunction app, DetectPeriodInfo& periodInfo)
  1118. {
  1119. if(m_httpApi == nullptr)
  1120. {
  1121. SPDLOG_LOGGER_ERROR(m_logger,"WebApi is nullptr");
  1122. return false;
  1123. }
  1124. try
  1125. {
  1126. /* 生成发送的字符串 */
  1127. nJson json0;
  1128. json0["opName"] = "SPSS_SelectPeriodByChannel";
  1129. nJson json1;
  1130. json1["channelID"] = ChannelID;
  1131. json1["appType"] = getAppFunctionID(app);
  1132. json0["paramList"] = json1;
  1133. QString strCmd = QString::fromStdString(json0.dump());
  1134. QString strRet;
  1135. auto ret = m_httpApi->DBDoInterface(enDBOperatorType::EDBOT_Select, strCmd, strRet, true);
  1136. if(ret != 0)
  1137. {
  1138. SPDLOG_LOGGER_WARN(m_logger,"获取Period信息失败:{}, 错误信息:{}",ret,m_httpApi->DoGetLastError(&ret).toStdString());
  1139. return false;
  1140. }
  1141. /* 解析返回的数据 */
  1142. nJson retJson = nJson::parse(strRet.toStdString());
  1143. // SPDLOG_LOGGER_DEBUG(m_logger,"获取tPeriod信息成功:\n{}", retJson.dump(4));
  1144. int retCode = retJson["code"].get<int>();
  1145. if(retCode != 0)
  1146. {
  1147. SPDLOG_LOGGER_ERROR(m_logger,"获取Period信息失败");
  1148. return false;
  1149. }
  1150. nJson resultJson = retJson["result"];
  1151. if(resultJson.empty())
  1152. {
  1153. SPDLOG_LOGGER_WARN(m_logger,"获取Period信息失败,结果为空");
  1154. SPDLOG_LOGGER_DEBUG(m_logger,"发送的字符串:{}\n", json0.dump(4));
  1155. return false;
  1156. }
  1157. periodInfo.listWeekTime.clear();
  1158. for(const auto& it : resultJson)
  1159. {
  1160. periodInfo.ChannelID = it["chnId"].get<int>();
  1161. periodInfo.PeriodName = it["periodName"].is_null() ? "" : it["periodName"].get<std::string>();
  1162. int PeriodType = it["type"].is_null() ? 0 : it["type"].get<int>();
  1163. periodInfo.PeriodType = static_cast<Enum_PeriodType>(PeriodType);
  1164. int appType = it["appType"].is_null() ? 0 : it["appType"].get<int>();
  1165. periodInfo.appFunction = getAppFunctionID(appType);
  1166. WeekTime wt;
  1167. wt.WeekDay = it["week"].is_null() ? 0 : it["week"].get<int>();
  1168. std::string st = it["startTime"].is_null() ? "" : it["startTime"].get<std::string>();
  1169. wt.StartTime = QDateTime::fromString(QString::fromStdString(st), "yyyy-MM-dd hh:mm:ss");
  1170. std::string et = it["endTime"].is_null() ? "" : it["endTime"].get<std::string>();
  1171. wt.EndTime = QDateTime::fromString(QString::fromStdString(et), "yyyy-MM-dd hh:mm:ss");
  1172. periodInfo.listWeekTime.push_back(wt);
  1173. }
  1174. }
  1175. catch (const nJson::parse_error& e) {
  1176. SPDLOG_LOGGER_ERROR(m_logger,"解析 tPeriod 数据失败:{}, 错误ID:{}",e.what(), e.id);
  1177. return false;
  1178. }
  1179. catch (const nJson::type_error& e) {
  1180. SPDLOG_LOGGER_ERROR(m_logger,"解析 tPeriod 数据失败:{}, 错误ID:{}",e.what(), e.id);
  1181. return false;
  1182. }
  1183. catch(...)
  1184. {
  1185. SPDLOG_LOGGER_ERROR(m_logger,"解析 tPeriod 数据失败");
  1186. return false;
  1187. }
  1188. return true;
  1189. }
  1190. /* 写入报警信息 */
  1191. bool FromWebAPI::insertAlarmInfo(const AlarmInfo& alarmInfo)
  1192. {
  1193. int PKID = 0;
  1194. return insertAlarmInfo(alarmInfo, PKID);
  1195. }
  1196. bool FromWebAPI::insertAlarmInfo(const AlarmInfo& alarmInfo, int& PKID)
  1197. {
  1198. if(m_httpApi == nullptr)
  1199. {
  1200. SPDLOG_LOGGER_ERROR(m_logger,"WebApi is nullptr");
  1201. return false;
  1202. }
  1203. /* 判断是否有图片,没有图片就取消报警 */
  1204. if(alarmInfo.ImageInfo.empty())
  1205. {
  1206. SPDLOG_LOGGER_WARN(m_logger, "× 取消新增报警信息,因为没有图片,频道[{}],房间[{}],摄像头[{}],{},{},有{}个区域,有{}个人脸",
  1207. alarmInfo.ChannelID, alarmInfo.RoomID, alarmInfo.DeviceID, alarmInfo.ActionDes, alarmInfo.ImageInfo, alarmInfo.listBbox.size(), alarmInfo.listPersonInfo.size());
  1208. return false;
  1209. }
  1210. /* 拼接Bbox */
  1211. std::string strBbox;
  1212. for(const auto& it : alarmInfo.listBbox)
  1213. {
  1214. strBbox += it;
  1215. strBbox += "|";
  1216. }
  1217. /* 去掉最后一个“|” */
  1218. strBbox.pop_back();
  1219. // printAlarmInfo(alarmInfo, strBbox);
  1220. try
  1221. {
  1222. nJson json0;
  1223. json0["opName"] = "SPSS_InsertToAlarm";
  1224. nJson json1;
  1225. json1["alarmID"] = alarmInfo.AlarmID;
  1226. json1["startTime"] = alarmInfo.StartTime.toString("yyyy-MM-dd hh:mm:ss").toStdString();
  1227. json1["createTime"] = alarmInfo.EventTime.toString("yyyy-MM-dd hh:mm:ss").toStdString();
  1228. /* 这里判断一下结束时间是否需要设置,如果不需要,则设置成小于2000年即可 */
  1229. if(alarmInfo.EndTime.isValid())
  1230. {
  1231. json1["endTime"] = alarmInfo.EndTime.toString("yyyy-MM-dd hh:mm:ss").toStdString();
  1232. }else {
  1233. json1["endTime"] = GVariable.nullTimeStr;
  1234. }
  1235. json1["bbox"] = strBbox;
  1236. json1["picUrl"] = alarmInfo.ImageInfo;
  1237. json1["appID"] = getAppFunctionID(alarmInfo.appFunction);
  1238. json1["actionID"] = alarmInfo.ActionID;
  1239. json1["actionDes"] = alarmInfo.ActionDes;
  1240. json1["camerID"] = alarmInfo.DeviceID;
  1241. json1["roomID"] = alarmInfo.RoomID;
  1242. json1["chnid"] = alarmInfo.ChannelID;
  1243. json1["state"] = alarmInfo.State;
  1244. json1["faceIDList"] = alarmInfo.FaceIDList;
  1245. json1["faceNameList"] = alarmInfo.FaceNameList;
  1246. json1["onWork"] = alarmInfo.OnWork;
  1247. json0["paramList"] = json1;
  1248. // SPDLOG_LOGGER_DEBUG(m_logger, "写入报警信息的字符串:{}\n", json0.dump(4));
  1249. QString strCmd = QString::fromStdString(json0.dump());
  1250. QString strRet;
  1251. auto ret = m_httpApi->DBDoInterface(enDBOperatorType::EDBOT_Insert, strCmd, strRet, true);
  1252. if(ret != 0)
  1253. {
  1254. SPDLOG_LOGGER_WARN(m_logger,"插入报警信息失败:{}, 错误信息:{}",ret,m_httpApi->DoGetLastError(&ret).toStdString());
  1255. return false;
  1256. }
  1257. // SPDLOG_LOGGER_DEBUG(m_logger,"插入报警信息成功!");
  1258. // SPDLOG_LOGGER_DEBUG(m_logger, "返回的数据:{}", strRet.toStdString());
  1259. nJson retJson = nJson::parse(strRet.toStdString());
  1260. int retCode = retJson["code"].get<int>();
  1261. if(retCode != 0)
  1262. {
  1263. SPDLOG_LOGGER_ERROR(m_logger,"获取写入报警信息的PKID失败, 错误信息:{}", retJson["msg"].get<std::string>());
  1264. return false;
  1265. }
  1266. /* 解析返回的报警ID */
  1267. nJson result = retJson["result"];
  1268. if(result.empty())
  1269. {
  1270. SPDLOG_LOGGER_ERROR(m_logger,"插入报警信息失败, 返回的结果为空");
  1271. return false;
  1272. }
  1273. for(const auto& it : result)
  1274. {
  1275. PKID = it["pkid"].is_null() ? 0 : it["pkid"].get<int>();
  1276. }
  1277. }
  1278. catch (const nJson::parse_error& e) {
  1279. SPDLOG_LOGGER_ERROR(m_logger,"创建 写入报警信息 JSON失败 数据失败:{}, 错误ID:{}",e.what(), e.id);
  1280. return false;
  1281. }
  1282. catch (const nJson::type_error& e) {
  1283. SPDLOG_LOGGER_ERROR(m_logger,"创建 写入报警信息 JSON失败 数据失败:{}, 错误ID:{}",e.what(), e.id);
  1284. return false;
  1285. }
  1286. catch(...) {
  1287. SPDLOG_LOGGER_ERROR(m_logger,"创建 写入报警信息 JSON失败 数据失败");
  1288. return false;
  1289. }
  1290. return true;
  1291. }
  1292. /* 打印报警数据信息 */
  1293. void FromWebAPI::printAlarmInfo(const AlarmInfo& alarmInfo, std::string strBBox)
  1294. {
  1295. std::string strLog;
  1296. strLog += "写入报警信息:\n";
  1297. strLog += fmt::format("alarmID: {}\n", alarmInfo.AlarmID);
  1298. strLog += fmt::format("startTime: {}\n", alarmInfo.StartTime.toString("yyyy-MM-dd hh:mm:ss.zzz").toStdString());
  1299. strLog += fmt::format("createTime: {}\n", alarmInfo.EventTime.toString("yyyy-MM-dd hh:mm:ss.zzz").toStdString());
  1300. strLog += fmt::format("endTime: {}\n", alarmInfo.EndTime.toString("yyyy-MM-dd hh:mm:ss.zzz").toStdString());
  1301. strLog += fmt::format("bbox: {}\n", strBBox);
  1302. strLog += fmt::format("picUrl: {}\n", alarmInfo.ImageInfo);
  1303. strLog += fmt::format("appID: {}\n", getAppFunctionID(alarmInfo.appFunction));
  1304. strLog += fmt::format("actionID: {}\n", alarmInfo.ActionID);
  1305. strLog += fmt::format("actionDes: {}\n", alarmInfo.ActionDes);
  1306. strLog += fmt::format("camerID: {}\n", alarmInfo.DeviceID);
  1307. strLog += fmt::format("roomID: {}\n", alarmInfo.RoomID);
  1308. strLog += fmt::format("chnid: {}\n", alarmInfo.ChannelID);
  1309. strLog += fmt::format("state: {}\n", alarmInfo.State);
  1310. strLog += fmt::format("faceIDList: {}\n", alarmInfo.FaceIDList);
  1311. strLog += fmt::format("faceNameList: {}\n", alarmInfo.FaceNameList);
  1312. strLog += fmt::format("onWork: {}", alarmInfo.OnWork);
  1313. SPDLOG_LOGGER_DEBUG(m_logger, strLog);
  1314. }
  1315. /* 更新报警结束时间 */
  1316. // bool FromWebAPI::updateAlarmEndTime(const AlarmInfo& alarmInfo)
  1317. // {
  1318. // if(m_httpApi == nullptr)
  1319. // {
  1320. // SPDLOG_LOGGER_ERROR(m_logger,"WebApi is nullptr");
  1321. // return false;
  1322. // }
  1323. // try
  1324. // {
  1325. // nJson json0;
  1326. // json0["opName"] = "SPSS_UpdateAlarmEndTime";
  1327. // nJson json1;
  1328. // json1["EndTime"] = alarmInfo.EndTime.toString("yyyy-MM-dd hh:mm:ss.zzz").toStdString();
  1329. // json1["ChannelID"] = alarmInfo.ChannelID;
  1330. // json1["RoomID"] = alarmInfo.RoomID;
  1331. // json1["CamerID"] = alarmInfo.DeviceID;
  1332. // json1["ActionID"] = alarmInfo.ActionID;
  1333. // json0["paramList"] = json1;
  1334. // QString strCmd = QString::fromStdString(json0.dump());
  1335. // QString strRet;
  1336. // int ret = m_httpApi->DBDoInterface(enDBOperatorType::EDBOT_Update, strCmd, strRet, true);
  1337. // if(ret != 0)
  1338. // {
  1339. // SPDLOG_LOGGER_WARN(m_logger,"更新报警结束时间失败:{}, 错误信息:{}",ret,m_httpApi->DoGetLastError(&ret).toStdString());
  1340. // return false;
  1341. // }
  1342. // }
  1343. // catch (const nJson::parse_error& e) {
  1344. // SPDLOG_LOGGER_ERROR(m_logger,"创建 更新报警结束时间 JSON失败 数据失败:{}, 错误ID:{}",e.what(), e.id);
  1345. // return false;
  1346. // }
  1347. // catch (const nJson::type_error& e) {
  1348. // SPDLOG_LOGGER_ERROR(m_logger,"创建 更新报警结束时间 JSON失败 数据失败:{}, 错误ID:{}",e.what(), e.id);
  1349. // return false;
  1350. // }
  1351. // catch(...) {
  1352. // SPDLOG_LOGGER_ERROR(m_logger,"创建 更新报警结束时间 JSON失败 数据失败");
  1353. // return false;
  1354. // }
  1355. // return true;
  1356. // }
  1357. /**
  1358. * @brief 根据PKID更新报警记录,用来结束报警,这个只需要PKID和结束时间
  1359. *
  1360. * @param alarmInfo
  1361. * @return true
  1362. * @return false
  1363. */
  1364. bool FromWebAPI::endAlarmInfoByPKID(const int PKID, const QDateTime dateTime)
  1365. {
  1366. if(m_httpApi == nullptr)
  1367. {
  1368. SPDLOG_LOGGER_ERROR(m_logger,"WebApi is nullptr");
  1369. return false;
  1370. }
  1371. try
  1372. {
  1373. nJson json0;
  1374. json0["opName"] = "SPSS_EndAlarmByPKID";
  1375. nJson json1;
  1376. json1["PKID"] = PKID;
  1377. json1["endTime"] = dateTime.toString("yyyy-MM-dd hh:mm:ss").toStdString();
  1378. json0["paramList"] = json1;
  1379. QString strCmd = QString::fromStdString(json0.dump());
  1380. QString strRet;
  1381. int ret = m_httpApi->DBDoInterface(enDBOperatorType::EDBOT_Update, strCmd, strRet, true);
  1382. if(ret != 0)
  1383. {
  1384. SPDLOG_LOGGER_WARN(m_logger,"更新报警结束时间失败:{}, 错误信息:{}",ret,m_httpApi->DoGetLastError(&ret).toStdString());
  1385. return false;
  1386. }
  1387. // SPDLOG_LOGGER_DEBUG(m_logger,"更新报警结束时间成功!");
  1388. }
  1389. catch (const nJson::parse_error& e) {
  1390. SPDLOG_LOGGER_ERROR(m_logger,"创建 更新报警结束时间 JSON失败 数据失败:{}, 错误ID:{}",e.what(), e.id);
  1391. return false;
  1392. }
  1393. catch (const nJson::type_error& e) {
  1394. SPDLOG_LOGGER_ERROR(m_logger,"创建 更新报警结束时间 JSON失败 数据失败:{}, 错误ID:{}",e.what(), e.id);
  1395. return false;
  1396. }
  1397. catch(...) {
  1398. SPDLOG_LOGGER_ERROR(m_logger,"创建 更新报警结束时间 JSON失败 数据失败");
  1399. return false;
  1400. }
  1401. return true;
  1402. }
  1403. /* 更新人员信息 */
  1404. bool FromWebAPI::updatePersonInfo(RoomOnWorkInfo& roomInfo)
  1405. {
  1406. if(m_httpApi == nullptr)
  1407. {
  1408. SPDLOG_LOGGER_ERROR(m_logger,"WebApi is nullptr");
  1409. return false;
  1410. }
  1411. try
  1412. {
  1413. std::string strDes = fmt::format("人员在岗[{}][{}]", roomInfo.getFaceIDListString(), roomInfo.getFaceNameListString());
  1414. nJson json0;
  1415. json0["opName"] = "SPSS_UpdateFaceInfoByPKID";
  1416. nJson json1;
  1417. json1["pkid"] = roomInfo.PKID;
  1418. json1["faceIDList"] = roomInfo.getFaceIDListString();
  1419. json1["faceNameList"] = roomInfo.getFaceNameListString();
  1420. json1["ActionDes"] = strDes;
  1421. json0["paramList"] = json1;
  1422. QString strCmd = QString::fromStdString(json0.dump());
  1423. QString strRet;
  1424. int ret = m_httpApi->DBDoInterface(enDBOperatorType::EDBOT_Update, strCmd, strRet, true);
  1425. if(ret != 0)
  1426. {
  1427. SPDLOG_LOGGER_WARN(m_logger,"更新报警结束时间失败:{}, 错误信息:{}",ret,m_httpApi->DoGetLastError(&ret).toStdString());
  1428. return false;
  1429. }
  1430. // SPDLOG_LOGGER_DEBUG(m_logger,"更新报警结束时间成功!");
  1431. }
  1432. catch (const nJson::parse_error& e) {
  1433. SPDLOG_LOGGER_ERROR(m_logger,"创建 更新人员信息 JSON失败 数据失败:{}, 错误ID:{}",e.what(), e.id);
  1434. return false;
  1435. }
  1436. catch (const nJson::type_error& e) {
  1437. SPDLOG_LOGGER_ERROR(m_logger,"创建 更新人员信息 JSON失败 数据失败:{}, 错误ID:{}",e.what(), e.id);
  1438. return false;
  1439. }
  1440. catch(...) {
  1441. SPDLOG_LOGGER_ERROR(m_logger,"创建 更新人员信息 JSON失败 数据失败");
  1442. return false;
  1443. }
  1444. return true;
  1445. }
  1446. /* 通过频率ID和应用ID获取最大的PKID报警 */
  1447. bool FromWebAPI::getMaxAlarmPKID(const int ChannelID, const AppFunction AppID, int& PKID)
  1448. {
  1449. if(m_httpApi == nullptr)
  1450. {
  1451. SPDLOG_LOGGER_ERROR(m_logger,"WebApi is nullptr");
  1452. return false;
  1453. }
  1454. PKID = 0;
  1455. nJson json0;
  1456. json0["opName"] = "SPSS_GetChnAlarmMaxPKID";
  1457. nJson json1;
  1458. json1["channelID "] = ChannelID;
  1459. json1["appId"] = getAppFunctionID(AppID);
  1460. json0["paramList"] = json1;
  1461. QString strCmd = QString::fromStdString(json0.dump());
  1462. QString strRet;
  1463. auto ret = m_httpApi->DBDoInterface(enDBOperatorType::EDBOT_Select, strCmd, strRet, true);
  1464. if(ret != 0)
  1465. {
  1466. SPDLOG_LOGGER_DEBUG(m_logger,"获取Alarma max PKID失败:{}, 错误信息:{}",ret,m_httpApi->DoGetLastError(&ret).toStdString());
  1467. return false;
  1468. }
  1469. try
  1470. {
  1471. nJson json1 = nJson::parse(strRet.toStdString());
  1472. int retCode = json1["code"].get<int>();
  1473. if(retCode != 0)
  1474. {
  1475. SPDLOG_LOGGER_ERROR(m_logger,"获取Alarma max PKID失败");
  1476. return false;
  1477. }
  1478. nJson result = json1["result"];
  1479. if(result.empty())
  1480. {
  1481. return false;
  1482. }
  1483. for(const auto& it : result)
  1484. {
  1485. PKID = it["maxPKID"].is_null() ? 0 : it["maxPKID"].get<int>();
  1486. }
  1487. }
  1488. catch (const nJson::parse_error& e) {
  1489. SPDLOG_LOGGER_ERROR(m_logger,"解析 Alarma max PKID 失败:{}, 错误ID:{}",e.what(), e.id);
  1490. return false;
  1491. }
  1492. catch(const nJson::type_error& e)
  1493. {
  1494. SPDLOG_LOGGER_ERROR(m_logger,"解析 Alarma max PKID 失败:{}, 错误ID:{}",e.what(), e.id);
  1495. return false;
  1496. }
  1497. catch(...)
  1498. {
  1499. SPDLOG_LOGGER_ERROR(m_logger,"解析 Alarma max PKID 失败");
  1500. return false;
  1501. }
  1502. return true;
  1503. }
  1504. /* 清空在岗离岗报警的在岗人员信息 */
  1505. bool FromWebAPI::clearOnWorkAlarmInfo(const int PKID, const bool onWork, const std::string actionDes)
  1506. {
  1507. if(m_httpApi == nullptr)
  1508. {
  1509. SPDLOG_LOGGER_ERROR(m_logger,"WebApi is nullptr");
  1510. return false;
  1511. }
  1512. nJson json0;
  1513. json0["opName"] = "SPSS_ClearAlarmOnWorkPersonInfo";
  1514. nJson json1;
  1515. json1["pkid"] = PKID;
  1516. json1["onWork"] = onWork;
  1517. json1["actionDes"] = actionDes;
  1518. json0["paramList"] = json1;
  1519. QString strCmd = QString::fromStdString(json0.dump());
  1520. QString strRet;
  1521. auto ret = m_httpApi->DBDoInterface(enDBOperatorType::EDBOT_Update, strCmd, strRet, true);
  1522. if(ret != 0)
  1523. {
  1524. SPDLOG_LOGGER_DEBUG(m_logger,"清空在岗离岗报警的在岗人员信息失败:{}, 错误信息:{}",ret,m_httpApi->DoGetLastError(&ret).toStdString());
  1525. return false;
  1526. }
  1527. return true;
  1528. }
  1529. /* 删除超过一年的数据 */
  1530. bool FromWebAPI::deleteOverOneYearAlarm()
  1531. {
  1532. if(m_httpApi == nullptr)
  1533. {
  1534. SPDLOG_LOGGER_ERROR(m_logger,"WebApi is nullptr");
  1535. return false;
  1536. }
  1537. nJson json0;
  1538. json0["opName"] = "SPSS_DeleteOverOneYearAlarm";
  1539. QString strCmd = QString::fromStdString(json0.dump());
  1540. QString strRet;
  1541. auto ret = m_httpApi->DBDoInterface(enDBOperatorType::EDBOT_Delete, strCmd, strRet, true);
  1542. if(ret != 0)
  1543. {
  1544. SPDLOG_LOGGER_DEBUG(m_logger,"删除超过一年的数据失败:{}, 错误信息:{}",ret,m_httpApi->DoGetLastError(&ret).toStdString());
  1545. return false;
  1546. }
  1547. return true;
  1548. }
  1549. /* 获取报警规则表 */
  1550. bool FromWebAPI::getPersonCountRuleInfo(std::list<PersonCountRuleInfo>& list)
  1551. {
  1552. if(m_httpApi == nullptr)
  1553. {
  1554. SPDLOG_LOGGER_ERROR(m_logger,"WebApi is nullptr");
  1555. return false;
  1556. }
  1557. nJson json0;
  1558. json0["opName"] = "SPSS_GetPersonCountRule";
  1559. QString strCmd = QString::fromStdString(json0.dump());
  1560. QString strRet;
  1561. auto ret = m_httpApi->DBDoInterface(enDBOperatorType::EDBOT_Select, strCmd, strRet, true);
  1562. if(ret != 0)
  1563. {
  1564. SPDLOG_LOGGER_DEBUG(m_logger,"获取AlarmRule失败:{}, 错误信息:{}",ret,m_httpApi->DoGetLastError(&ret).toStdString());
  1565. return false;
  1566. }
  1567. try
  1568. {
  1569. nJson json1 = nJson::parse(strRet.toStdString());
  1570. int retCode = json1["code"].get<int>();
  1571. if(retCode != 0)
  1572. {
  1573. SPDLOG_LOGGER_ERROR(m_logger,"获取tAlarmRule失败");
  1574. return false;
  1575. }
  1576. nJson result = json1["result"];
  1577. if(result.empty())
  1578. {
  1579. return false;
  1580. }
  1581. list.clear();
  1582. for(const auto& it : result)
  1583. {
  1584. PersonCountRuleInfo info;
  1585. info.ChannelID = it["chnId"].is_null() ? -1 : it["chnId"].get<int>();
  1586. info.RuleName = it["periodName"].is_null() ? "" : it["periodName"].get<std::string>();
  1587. info.RuleName = it["ruleName"].get<std::string>();
  1588. info.LiveMinEnable = it["liveMinEnable"].get<int>() == 1 ? true : false;
  1589. info.LiveMaxEnable = it["liveMaxEnable"].get<int>() == 1 ? true : false;
  1590. info.DicMinEnable = it["dicMinEnable"].get<int>() == 1 ? true : false;
  1591. info.DicMaxEnable = it["dicMaxEnable"].get<int>() == 1 ? true : false;
  1592. info.LiveDicMinEnable = it["liveDicMinEnable"].get<int>() == 1 ? true : false;
  1593. info.LiveDicMaxEnable = it["liveDicMaxEnable"].get<int>() == 1 ? true : false;
  1594. info.LiveMin = it["liveMin"].is_null() ? 0 : it["liveMin"].get<int>();
  1595. info.LiveMax = it["liveMax"].is_null() ? 0 : it["liveMax"].get<int>();
  1596. info.DicMin = it["dicMin"].is_null() ? 0 : it["dicMin"].get<int>();
  1597. info.DicMax = it["dicMax"].is_null() ? 0 : it["dicMax"].get<int>();
  1598. info.LiveDicMin = it["liveDicMin"].is_null() ? 0 : it["liveDicMin"].get<int>();
  1599. info.LiveDicMax = it["liveDicMax"].is_null() ? 0 : it["liveDicMax"].get<int>();
  1600. list.push_back(info);
  1601. }
  1602. }
  1603. catch (const nJson::parse_error& e) {
  1604. SPDLOG_LOGGER_ERROR(m_logger,"解析 tRuleInfo 数据失败:{}, 错误ID:{}",e.what(), e.id);
  1605. return false;
  1606. }
  1607. catch(const nJson::type_error& e)
  1608. {
  1609. SPDLOG_LOGGER_ERROR(m_logger,"解析 tRuleInfo 数据失败:{}, 错误ID:{}",e.what(), e.id);
  1610. return false;
  1611. }
  1612. catch(...)
  1613. {
  1614. SPDLOG_LOGGER_ERROR(m_logger,"解析 tRuleInfo 数据失败");
  1615. return false;
  1616. }
  1617. return true;
  1618. }
  1619. /* 获取报警时段,也同时获取报警的应用信息,tPeriod表 */
  1620. bool FromWebAPI::getAlarmAppInfo(std::list<ChannelAppInfo>& listInfo)
  1621. {
  1622. nJson json0;
  1623. json0["opName"] = "SPSS_SelectChannelApp";
  1624. QString strCmd = QString::fromStdString(json0.dump());
  1625. QString strRet;
  1626. auto ret = m_httpApi->DBDoInterface(enDBOperatorType::EDBOT_Select, strCmd, strRet, true);
  1627. if(ret != 0)
  1628. {
  1629. SPDLOG_LOGGER_DEBUG(m_logger,"获取AlarmApp失败:{}, 错误信息:{}",ret,m_httpApi->DoGetLastError(&ret).toStdString());
  1630. return false;
  1631. }
  1632. try
  1633. {
  1634. nJson json1 = nJson::parse(strRet.toStdString());
  1635. int retCode = json1["code"].get<int>();
  1636. if(retCode != 0)
  1637. {
  1638. SPDLOG_LOGGER_ERROR(m_logger,"获取tAlarmApp失败");
  1639. return false;
  1640. }
  1641. nJson result = json1["result"];
  1642. if(result.empty())
  1643. {
  1644. return false;
  1645. }
  1646. listInfo.clear();
  1647. for(const auto& it : result)
  1648. {
  1649. ChannelAppInfo info;
  1650. info.ChannelID = it["chnId"].get<int>();
  1651. info.AppType = it["appType"].get<int>();
  1652. info.strChannelName = it["chnName"].is_null() ? "" : it["chnName"].get<std::string>();
  1653. info.strAppName = it["appName"].is_null() ? "" : it["appName"].get<std::string>();
  1654. listInfo.push_back(info);
  1655. }
  1656. }
  1657. catch (const nJson::parse_error& e) {
  1658. SPDLOG_LOGGER_ERROR(m_logger,"解析tPeriod数据失败:{}, 错误ID:{}",e.what(), e.id);
  1659. return false;
  1660. }
  1661. catch(const nJson::type_error& e)
  1662. {
  1663. SPDLOG_LOGGER_ERROR(m_logger,"解析tPeriod数据失败:{}, 错误ID:{}",e.what(), e.id);
  1664. return false;
  1665. }
  1666. catch(...)
  1667. {
  1668. SPDLOG_LOGGER_ERROR(m_logger,"解析tPeriod数据失败");
  1669. return false;
  1670. }
  1671. return true;
  1672. }
  1673. /* 结束人员计数报警,通过频率ID和应用ID */
  1674. bool FromWebAPI::endPersonCountAlarm(int chnID, AppFunction appID)
  1675. {
  1676. if(m_httpApi == nullptr)
  1677. {
  1678. SPDLOG_LOGGER_ERROR(m_logger,"WebApi is nullptr");
  1679. return false;
  1680. }
  1681. try
  1682. {
  1683. nJson json0;
  1684. json0["opName"] = "SPSS_EndPersonCountAlarm";
  1685. nJson json1;
  1686. json1["channelID"] = chnID;
  1687. json1["appID"] = getAppFunctionID(appID);
  1688. json0["paramList"] = json1;
  1689. QString strCmd = QString::fromStdString(json0.dump());
  1690. QString strRet;
  1691. int ret = m_httpApi->DBDoInterface(enDBOperatorType::EDBOT_Update, strCmd, strRet, true);
  1692. if(ret != 0)
  1693. {
  1694. SPDLOG_LOGGER_WARN(m_logger,"结束人员计数报警失败:{}, 错误信息:{}",ret,m_httpApi->DoGetLastError(&ret).toStdString());
  1695. return false;
  1696. }
  1697. }
  1698. catch (const nJson::parse_error& e) {
  1699. SPDLOG_LOGGER_ERROR(m_logger,"创建 结束人员计数报警 JSON失败 数据失败:{}, 错误ID:{}",e.what(), e.id);
  1700. return false;
  1701. }
  1702. catch (const nJson::type_error& e) {
  1703. SPDLOG_LOGGER_ERROR(m_logger,"创建 结束人员计数报警 JSON失败 数据失败:{}, 错误ID:{}",e.what(), e.id);
  1704. return false;
  1705. }
  1706. catch(...) {
  1707. SPDLOG_LOGGER_ERROR(m_logger,"创建 结束人员计数报警 JSON失败 数据失败");
  1708. return false;
  1709. }
  1710. return true;
  1711. }
  1712. /* 写入在岗信息 tWorkOnInfo */
  1713. bool FromWebAPI::insertOnWorkInfo(const RoomFaceInfo& onWorkInfo)
  1714. {
  1715. if(m_httpApi == nullptr)
  1716. {
  1717. SPDLOG_LOGGER_ERROR(m_logger,"WebApi is nullptr");
  1718. return false;
  1719. }
  1720. if(onWorkInfo.listPersonInfo.empty())
  1721. {
  1722. return false;
  1723. }
  1724. /* 拼接人脸ID和人脸名称 */
  1725. std::string strFaceID;
  1726. std::string strFaceName;
  1727. for(const auto& it : onWorkInfo.listPersonInfo)
  1728. {
  1729. strFaceID += it.PersonID + ";";
  1730. strFaceName += it.PersonName + ";";
  1731. }
  1732. /* 去掉最后的“;” */
  1733. strFaceID = strFaceID.substr(0, strFaceID.size() - 1);
  1734. strFaceName = strFaceName.substr(0, strFaceName.size() - 1);
  1735. try
  1736. {
  1737. nJson json0;
  1738. json0["opName"] = "SPSS_InsertToOnWork";
  1739. nJson json1;
  1740. json1["nChID"] = onWorkInfo.ChannelID;
  1741. json1["CamerId"] = onWorkInfo.CameraID;
  1742. json1["FaceIdList"] = strFaceID;
  1743. json1["FaceNameList"] = strFaceName;
  1744. json1["StartTime"] = onWorkInfo.StartTime.toString("yyyy-MM-dd hh:mm:ss").toStdString();
  1745. json1["EndTime"] = onWorkInfo.EndTime.toString("yyyy-MM-dd hh:mm:ss").toStdString();
  1746. json1["MaxNumber"] = onWorkInfo.MaxNum;
  1747. json1["MinNumber"] = onWorkInfo.MinNum;
  1748. json0["paramList"] = json1;
  1749. QString strCmd = QString::fromStdString(json0.dump());
  1750. QString strRet;
  1751. auto ret = m_httpApi->DBDoInterface(enDBOperatorType::EDBOT_Insert, strCmd, strRet, true);
  1752. if(ret != 0)
  1753. {
  1754. SPDLOG_LOGGER_WARN(m_logger,"插入 tWorkOnInfo 失败:{}, 错误信息:{}",ret,m_httpApi->DoGetLastError(&ret).toStdString());
  1755. return false;
  1756. }
  1757. // SPDLOG_LOGGER_DEBUG(m_logger,"插入在岗信息成功!");
  1758. }
  1759. catch (const nJson::parse_error& e) {
  1760. SPDLOG_LOGGER_ERROR(m_logger,"生成 tWorkOnInfo JSON 数据失败:{}, 错误ID:{}",e.what(), e.id);
  1761. return false;
  1762. }
  1763. catch(const nJson::type_error& e)
  1764. {
  1765. SPDLOG_LOGGER_ERROR(m_logger,"生成 tWorkOnInfo JSON 数据失败:{}, 错误ID:{}",e.what(), e.id);
  1766. return false;
  1767. }
  1768. catch(...)
  1769. {
  1770. SPDLOG_LOGGER_ERROR(m_logger,"生成 tWorkOnInfo JSON 数据失败");
  1771. return false;
  1772. }
  1773. return true;
  1774. }