FromWebAPI.cpp 20 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674
  1. #include "FromWebAPI.h"
  2. #include <QVector>
  3. #include <QString>
  4. #include <QUuid>
  5. #include <QApplication>
  6. #include "LHQLogAPI.h"
  7. #include "TransmitterSwitchInfo.h"
  8. FromWebAPI::FromWebAPI()
  9. {
  10. }
  11. FromWebAPI::~FromWebAPI()
  12. {
  13. if(m_httpApi != nullptr)
  14. {
  15. delete m_httpApi;
  16. m_httpApi = nullptr;
  17. }
  18. }
  19. /* 初始化WebApi */
  20. bool FromWebAPI::initWebApi(const QString& url, const QString& serverID, const QString& serverKey)
  21. {
  22. if(m_httpApi == nullptr)
  23. {
  24. m_httpApi = new lhhttpapi;
  25. }
  26. #if defined(Q_OS_WIN)
  27. #ifdef QT_DEBUG
  28. QString libFile = QString("%1/LHSqlWebInterfaced.dll").arg(QApplication::applicationDirPath());
  29. #else
  30. QString libFile = QString("%1/LHSqlWebInterface.dll").arg(QApplication::applicationDirPath());
  31. #endif
  32. #elif defined(Q_OS_LINUX)
  33. #ifdef QT_DEBUG
  34. QString libFile = QString("%1/libLHSqlWebInterfaced.so").arg(QApplication::applicationDirPath());
  35. #else
  36. QString libFile = QString("%1/libLHSqlWebInterface.so").arg(QApplication::applicationDirPath());
  37. #endif
  38. #endif
  39. if(!m_httpApi->Load(libFile))
  40. {
  41. LH_WRITE_ERROR("Load WebAPI failed");
  42. return false;
  43. }
  44. m_httpApi->DBInit(url.toStdString().c_str());
  45. int ret = 0;
  46. #ifdef QT_DEBUG
  47. /* 获取服务器列表 */
  48. char serverList[8192];
  49. ret = m_httpApi->DBGetServerList(serverList, 8192);
  50. if(ret < 0)
  51. {
  52. LH_WRITE_ERROR(QString("Get server list failed:%1, error info:%2").arg(ret).arg(m_httpApi->DoGetLastError(&ret)));
  53. return false;
  54. }
  55. // LH_WRITE_LOG(QString("\nGet server list success:%1").arg(serverList));
  56. #endif
  57. /* 登录,第二个参数是限制的服务 */
  58. ret = m_httpApi->DBLogin("", serverID, serverKey, m_userToken);
  59. if(ret < 0)
  60. {
  61. LH_WRITE_ERROR(QString("Login failed:%1, error info:%2").arg(ret).arg(m_httpApi->DoGetLastError(&ret)));
  62. return false;
  63. }
  64. LH_WRITE_LOG("Login success!");
  65. return true;
  66. }
  67. /* 获取设备信息 */
  68. bool FromWebAPI::getDeviceInfo(QMap<QString, DeviceInfo>& mapDevice)
  69. {
  70. if(m_httpApi == nullptr)
  71. {
  72. LH_WRITE_ERROR("WebAPI is nullptr");
  73. return false;
  74. }
  75. nJson json0;
  76. json0["opName"] = "ESM8C_GetDevice";
  77. QString strCmd = QString::fromStdString(json0.dump());
  78. QString strRet;
  79. auto ret = m_httpApi->DBDoInterface(enDBOperatorType::EDBOT_Select, strCmd, strRet);
  80. if(ret < 0)
  81. {
  82. LH_WRITE_ERROR(QString("从数据库获取设备失败:%1, 错误信息:%2").arg(ret).arg(m_httpApi->DoGetLastError(&ret)));
  83. return false;
  84. }
  85. /* 解析获取到的JSON数据 */
  86. // LH_WRITE_LOG_DEBUG(strRet);
  87. try
  88. {
  89. nJson json1 = nJson::parse(strRet.toStdString());
  90. int retCode = json1["code"].get<int>();
  91. if(retCode != 0)
  92. {
  93. LH_WRITE_ERROR("获取设备数据失败");
  94. return false;
  95. }
  96. nJson result = json1["result"];
  97. for(auto& it : result)
  98. {
  99. DeviceInfo DevInfo;
  100. QString devName = QString::fromStdString(it["dname"].get<std::string>());
  101. DevInfo.devName = devName;
  102. DevInfo.DID = it["did"].is_null() ? -1 : it["did"].get<int>();
  103. DevInfo.DTID = it["dtid"].is_null() ? -1 : it["dtid"].get<int>();
  104. DevInfo.PTTypeCode = it["pttypecode"].is_null() ? -1 : it["pttypecode"].get<int>();
  105. DevInfo.ChannelID = it["chnid"].is_null() ? -1 : it["chnid"].get<int>();
  106. if(DevInfo.ChannelID <= 0)
  107. {
  108. LH_WRITE_LOG_DEBUG(QString("通道ID错误:%1").arg(DevInfo.ChannelID));
  109. continue;
  110. }
  111. /* 查找对应的设备类型,根据PTTypeCode来查找,这个是唯一的 */
  112. auto devType = DevTypeContainer.getDevType(DevInfo.PTTypeCode);
  113. if(devType.PTTypeCode < 0)
  114. {
  115. LH_WRITE_LOG_DEBUG(QString("未找到设备类型:%1").arg(DevInfo.PTTypeCode));
  116. continue;
  117. }
  118. DevInfo.DevType = devType;
  119. /* 检查有没有设置主备 */
  120. int devMB = it["dClass"].is_null() ? -1 : it["dClass"].get<int>();
  121. if(devMB < 0)
  122. {
  123. LH_WRITE_ERROR(QString("设备类型:%1《主/备》 类型为空").arg(DevInfo.DevType.PTTypeCode));
  124. continue;
  125. }
  126. mapDevice.insert(DevInfo.devName, DevInfo);
  127. }
  128. LH_WRITE_LOG(QString("获取设备数据成功,设备数目:%1").arg(mapDevice.size()));
  129. } catch (const nJson::parse_error& e) {
  130. LH_WRITE_ERROR("解析ESM-8C设备数据失败");
  131. return false;
  132. }
  133. catch (const nJson::exception& e)
  134. {
  135. LH_WRITE_ERROR("解析ESM-8C设备数据失败");
  136. return false;
  137. }
  138. catch(...)
  139. {
  140. LH_WRITE_ERROR("解析ESM-8C设备数据失败");
  141. return false;
  142. }
  143. return true;
  144. }
  145. /**
  146. * @brief 将数据写入EQM数据库,这里不需要模版编号和名称,编号都设置成0
  147. *
  148. * @param list
  149. * @return true
  150. * @return false
  151. */
  152. bool FromWebAPI::insertData(QList<ExecPlanItemInfo>& list)
  153. {
  154. if(m_httpApi == nullptr)
  155. {
  156. LH_WRITE_ERROR("WebAPI is nullptr");
  157. return false;
  158. }
  159. /* 先删除表格中的数据 */
  160. deleteAllTransmitterPlan();
  161. QDate zeroDate(1970,1,1);
  162. /* 写入数据 */
  163. nJson json0 = nJson::array();
  164. for(auto& it : list)
  165. {
  166. nJson json1;
  167. json1["opName"] = "ESM8C_InsertDataToExecPlan";
  168. json1["Key"] = QUuid::createUuid().toString().toStdString();
  169. nJson json2;
  170. json2["ExecType"] = it.ExecType;
  171. json2["WeekDay"] = it.WeekDay;
  172. json2["Date"] = it.date.toString("yyyy-MM-dd").toStdString();
  173. json2["ExecTime"] = it.execTime.toString("hh:mm:ss").toStdString();
  174. json2["DeviceName"] = it.devName.toStdString();
  175. json2["ActionName"] = it.actionName.toStdString();
  176. json2["ActionID"] = static_cast<int>(it.actionID);
  177. /* 根据设备名称找到设备信息 */
  178. auto devInfo = DeviceContainer.getDevice(it.devName);
  179. if(devInfo.PTTypeCode < 0)
  180. {
  181. LH_WRITE_ERROR(QString("未找到设备:%1").arg(it.devName));
  182. continue;
  183. }
  184. json2["PTTypeCode"] = devInfo.PTTypeCode;
  185. json2["DID"] = devInfo.DID;
  186. json2["DTID"] = devInfo.DTID;
  187. json2["ChannelID"] = devInfo.ChannelID;
  188. json1["paramList"] = json2;
  189. json0.push_back(json1);
  190. }
  191. /* 将json写入本地文件 */
  192. #ifdef C_DEBUG
  193. QString fileJson(QString::fromStdString(json0.dump(4)));
  194. LH_WRITE_LOG_DEBUG("\n" + fileJson);
  195. // QString filePath = QApplication::applicationDirPath() + QString("ExecPlanData.json");
  196. // SPDLOG_LOGGER_DEBUG(m_logger,"To EQM Json写入文件:{}", filePath.toStdString());
  197. // QFile file(filePath);
  198. // if(file.open(QIODevice::WriteOnly | QIODevice::Truncate))
  199. // {
  200. // file.write(fileJson.toUtf8());
  201. // file.close();
  202. // }else {
  203. // SPDLOG_LOGGER_ERROR(m_logger,"打开文件失败:{}", filePath.toStdString());
  204. // }
  205. #endif
  206. /* 写入EQM数据库 */
  207. QString strCmd = QString::fromStdString(json0.dump());
  208. QString strRet;
  209. auto ret = m_httpApi->DBDoInterface(enDBOperatorType::EDBOT_BatchTransAction, strCmd, strRet);
  210. if(ret < 0)
  211. {
  212. LH_WRITE_ERROR(QString("写入EQM数据库失败:%1, 错误信息:%2").arg(ret).arg(m_httpApi->DoGetLastError(&ret)));
  213. return false;
  214. }
  215. LH_WRITE_LOG("写入EQM数据库成功");
  216. return true;
  217. }
  218. /**
  219. * @brief 获取tExecPlan表格数据,获取到的数据会根据设备名查找对应的设备信息,如果没有查找到,就抛弃这个计划
  220. *
  221. * @param list
  222. * @return true
  223. * @return false
  224. */
  225. bool FromWebAPI::getExecPlanData(QList<ExecPlanItemInfo>& list)
  226. {
  227. if(m_httpApi == nullptr)
  228. {
  229. LH_WRITE_ERROR("WebAPI is nullptr");
  230. return false;
  231. }
  232. nJson json0;
  233. json0["opName"] = "ESM8C_GetExecPlan";
  234. QString strCmd = QString::fromStdString(json0.dump());
  235. QString strRet;
  236. auto ret = m_httpApi->DBDoInterface(enDBOperatorType::EDBOT_Select, strCmd, strRet);
  237. if(ret < 0)
  238. {
  239. LH_WRITE_ERROR(QString("从EQM获取tExecPlan表格数据失败:%1, 错误信息:%2").arg(ret).arg(m_httpApi->DoGetLastError(&ret)));
  240. return false;
  241. }
  242. /* 解析获取到的JSON数据 */
  243. // SPDLOG_LOGGER_DEBUG(m_logger,"获取执行计划:\n{}",strRet.toStdString());
  244. try
  245. {
  246. nJson json1 = nJson::parse(strRet.toStdString());
  247. int retCode = json1["code"].get<int>();
  248. if(retCode != 0)
  249. {
  250. LH_WRITE_ERROR("获取tExecPlan表格数据失败");
  251. return false;
  252. }
  253. nJson result = json1["result"];
  254. for(auto& it : result)
  255. {
  256. ExecPlanItemInfo info;
  257. info.devName = QString::fromStdString(it["deviceName"].get<std::string>());
  258. if(!DeviceContainer.findDevice(info.devName))
  259. {
  260. LH_WRITE_LOG(QString("未找到设备:%1").arg(info.devName));
  261. continue;
  262. }
  263. info.ExecType = it["execType"].get<int>();
  264. info.WeekDay = it["weekDay"].get<int>();
  265. auto tmpDate = it["date"].is_null() ? "" : it["date"].get<std::string>();
  266. if(!tmpDate.empty())
  267. {
  268. info.date = QDate::fromString(QString::fromStdString(tmpDate),"yyyy-MM-dd");
  269. }
  270. info.execTime = QTime::fromString(QString::fromStdString(it["execTime"].get<std::string>()),"hh:mm:ss");
  271. info.actionName = QString::fromStdString(it["actionName"].get<std::string>());
  272. info.actionID = it["actionID"].get<int>();
  273. list.append(info);
  274. }
  275. LH_WRITE_LOG(QString("获取tExecPlan表格数据成功,数据数目:%1").arg(list.size()));
  276. } catch (const nJson::parse_error& e) {
  277. LH_WRITE_ERROR(QString("解析tExecPlan表格数据失败:%1").arg(e.what()));
  278. return false;
  279. }
  280. catch (const nJson::exception& e)
  281. {
  282. LH_WRITE_ERROR(QString("解析tExecPlan表格数据失败:%1").arg(e.what()));
  283. return false;
  284. }
  285. catch(...)
  286. {
  287. LH_WRITE_ERROR("解析tExecPlan表格数据失败");
  288. return false;
  289. }
  290. LH_WRITE_LOG_DEBUG(QString("从EQM.tExecPlan表格获取数据成功,数据数目:%1").arg(list.size()));
  291. return true;
  292. }
  293. /* 获取EQM数据库中的模版编号 */
  294. bool FromWebAPI::getEQMTemplateID(QList<int>& listId)
  295. {
  296. if(m_httpApi == nullptr)
  297. {
  298. LH_WRITE_ERROR("WebAPI is nullptr");
  299. return false;
  300. }
  301. nJson json0;
  302. json0["opName"] = "ESMC_GetTemplateNumFromExecPlan";
  303. QString strCmd = QString::fromStdString(json0.dump());
  304. QString strRet;
  305. auto ret = m_httpApi->DBDoInterface(enDBOperatorType::EDBOT_Select, strCmd, strRet);
  306. if(ret < 0)
  307. {
  308. LH_WRITE_ERROR(QString("从EQM获取模版编号失败:%1, 错误信息:%2").arg(ret).arg(m_httpApi->DoGetLastError(&ret)));
  309. return false;
  310. }
  311. /* 解析获取到的JSON数据 */
  312. LH_WRITE_LOG_DEBUG(strRet);
  313. try
  314. {
  315. nJson json1 = nJson::parse(strRet.toStdString());
  316. int retCode = json1["code"].get<int>();
  317. if(retCode != 0)
  318. {
  319. LH_WRITE_ERROR("获取模版编号失败");
  320. return false;
  321. }
  322. nJson result = json1["result"];
  323. for(auto& it : result)
  324. {
  325. if(it["templateNum"].is_null())
  326. {
  327. LH_WRITE_ERROR("模版编号为空");
  328. continue;
  329. }
  330. auto id = it["templateNum"].get<int>();
  331. if(listId.contains(id))
  332. {
  333. continue;
  334. }
  335. listId.append(id);
  336. }
  337. } catch (const nJson::parse_error& e) {
  338. LH_WRITE_ERROR(QString("解析模版编号失败:%1").arg(e.what()));
  339. return false;
  340. }
  341. catch (const nJson::exception& e)
  342. {
  343. LH_WRITE_ERROR(QString("解析模版编号失败:%1").arg(e.what()));
  344. return false;
  345. }
  346. catch(...)
  347. {
  348. LH_WRITE_ERROR("解析模版编号失败");
  349. return false;
  350. }
  351. return true;
  352. }
  353. /* 删除所有行 */
  354. bool FromWebAPI::deleteAllRow()
  355. {
  356. if(m_httpApi == nullptr)
  357. {
  358. LH_WRITE_ERROR("WebAPI is nullptr");
  359. return false;
  360. }
  361. nJson json0;
  362. json0["opName"] = "ESM8C_DeleteAllRow";
  363. QString strCmd = QString::fromStdString(json0.dump());
  364. QString strRet;
  365. auto ret = m_httpApi->DBDoInterface(enDBOperatorType::EDBOT_Delete, strCmd, strRet);
  366. if(ret < 0)
  367. {
  368. LH_WRITE_ERROR(QString("删除所有行失败:%1, 错误信息:%2").arg(ret).arg(m_httpApi->DoGetLastError(&ret)));
  369. return false;
  370. }
  371. return true;
  372. }
  373. /* 删除所有的发射机计划 */
  374. bool FromWebAPI::deleteAllTransmitterPlan()
  375. {
  376. if(m_httpApi == nullptr)
  377. {
  378. LH_WRITE_ERROR("WebAPI is nullptr");
  379. return false;
  380. }
  381. /* 查找出有多少发射机类型 */
  382. QList<int> listPttypeCodeID;
  383. for(auto& it : DevTypeContainer.getMapDevType())
  384. {
  385. listPttypeCodeID.append(it.PTTypeCode);
  386. }
  387. nJson json0;
  388. json0["opName"] = "ESM8C_DeleteTransmitterPlan";
  389. for(const auto& it : listPttypeCodeID)
  390. {
  391. json0["paramList"].clear();
  392. nJson json1;
  393. json1["PTTypeCode"] = it;
  394. json0["paramList"].push_back(json1);
  395. QString strCmd = QString::fromStdString(json0.dump());
  396. QString strRet;
  397. auto ret = m_httpApi->DBDoInterface(enDBOperatorType::EDBOT_Delete, strCmd, strRet);
  398. if(ret < 0)
  399. {
  400. LH_WRITE_ERROR(QString("删除发射机(%3)计划失败:%1, 错误信息:%2").arg(ret).arg(m_httpApi->DoGetLastError(&ret)).arg(it));
  401. }else {
  402. LH_WRITE_LOG(QString("删除发射机(%1)计划成功!").arg(it));
  403. }
  404. }
  405. return true;
  406. }
  407. /* 保存到模板 */
  408. bool FromWebAPI::saveTemplate(const QString& templateName, QList<ExecPlanItemInfo>& list)
  409. {
  410. if(m_httpApi == nullptr)
  411. {
  412. LH_WRITE_ERROR("WebAPI is nullptr");
  413. return false;
  414. }
  415. nJson json0 = nJson::array();
  416. for(const auto& it : list)
  417. {
  418. nJson json1;
  419. json1["opName"] = "TMS_ExecPlanSaveToTemplate";
  420. json1["Key"] = QUuid::createUuid().toString().toStdString();
  421. nJson json2;
  422. json2["templateName"] = templateName.toStdString();
  423. json2["execDate"] = it.date.toString("yyyy-MM-dd").toStdString();
  424. json2["execTime"] = it.execTime.toString("hh:mm:ss").toStdString();
  425. json2["deviceName"] = it.devName.toStdString();
  426. json2["actionName"] = it.actionName.toStdString();
  427. json2["actionID"] = static_cast<int>(it.actionID);
  428. json1["paramList"] = json2;
  429. json0.push_back(json1);
  430. }
  431. /* 将json写入本地文件 */
  432. #ifdef C_DEBUG
  433. // QString fileJson(QString::fromStdString(json0.dump(4)));
  434. // LH_WRITE_LOG_DEBUG("\n" + fileJson);
  435. #endif
  436. /* 写入EQM数据库 */
  437. QString strCmd = QString::fromStdString(json0.dump());
  438. QString strRet;
  439. auto ret = m_httpApi->DBDoInterface(enDBOperatorType::EDBOT_BatchTransAction, strCmd, strRet);
  440. if(ret < 0)
  441. {
  442. LH_WRITE_ERROR(QString("保存到模板失败:%1, 错误信息:%2").arg(ret).arg(m_httpApi->DoGetLastError(&ret)));
  443. return false;
  444. }
  445. LH_WRITE_LOG("保存到模板成功");
  446. return true;
  447. }
  448. /* 获取模板内容 */
  449. bool FromWebAPI::getTemplate(QString templateName, QList<ExecPlanItemInfo>& list)
  450. {
  451. if(m_httpApi == nullptr)
  452. {
  453. LH_WRITE_ERROR("WebAPI is nullptr");
  454. return false;
  455. }
  456. nJson json0;
  457. json0["opName"] = "TMS_GetExecPlanTemplateData";
  458. nJson json1;
  459. json1["templateName"] = templateName.toStdString();
  460. json0["paramList"] = json1;
  461. QString strCmd = QString::fromStdString(json0.dump());
  462. QString strRet;
  463. auto ret = m_httpApi->DBDoInterface(enDBOperatorType::EDBOT_Select, strCmd, strRet);
  464. if(ret < 0)
  465. {
  466. LH_WRITE_ERROR(QString("获取模板失败:%1, 错误信息:%2").arg(ret).arg(m_httpApi->DoGetLastError(&ret)));
  467. return false;
  468. }
  469. /* 解析获取到的JSON数据 */
  470. try
  471. {
  472. nJson json2 = nJson::parse(strRet.toStdString());
  473. int retCode = json2["code"].get<int>();
  474. if(retCode != 0)
  475. {
  476. LH_WRITE_ERROR("获取模板失败");
  477. return false;
  478. }
  479. nJson result = json2["result"];
  480. for(auto& it : result)
  481. {
  482. ExecPlanItemInfo info;
  483. info.devName = QString::fromStdString(it["deviceName"].get<std::string>());
  484. if(!DeviceContainer.findDevice(info.devName))
  485. {
  486. LH_WRITE_LOG(QString("未找到设备:%1").arg(info.devName));
  487. continue;
  488. }
  489. auto tmpDate = it["execDate"].is_null() ? "" : it["execDate"].get<std::string>();
  490. if(!tmpDate.empty())
  491. {
  492. info.date = QDate::fromString(QString::fromStdString(tmpDate),"yyyy-MM-dd");
  493. }
  494. info.execTime = QTime::fromString(QString::fromStdString(it["execTime"].get<std::string>()),"hh:mm:ss");
  495. info.actionName = QString::fromStdString(it["actionName"].get<std::string>());
  496. info.actionID = it["actionID"].get<int>();
  497. list.append(info);
  498. }
  499. LH_WRITE_LOG(QString("获取模板成功,数据数目:%1").arg(list.size()));
  500. }
  501. catch (const nJson::parse_error& e)
  502. {
  503. LH_WRITE_ERROR(QString("解析模板失败:%1").arg(e.what()));
  504. return false;
  505. }
  506. catch (const nJson::exception& e)
  507. {
  508. LH_WRITE_ERROR(QString("解析模板失败:%1").arg(e.what()));
  509. return false;
  510. }
  511. catch(...)
  512. {
  513. LH_WRITE_ERROR("解析模板失败");
  514. return false;
  515. }
  516. return true;
  517. }
  518. /* 获取模板列表 */
  519. bool FromWebAPI::getTemplateList(QStringList& list)
  520. {
  521. if(m_httpApi == nullptr)
  522. {
  523. LH_WRITE_ERROR("WebAPI is nullptr");
  524. return false;
  525. }
  526. nJson json0;
  527. json0["opName"] = "TMS_GetExecPlanTemplateList";
  528. QString strCmd = QString::fromStdString(json0.dump());
  529. QString strRet;
  530. auto ret = m_httpApi->DBDoInterface(enDBOperatorType::EDBOT_Select, strCmd, strRet);
  531. if(ret < 0)
  532. {
  533. LH_WRITE_ERROR(QString("获取模板列表失败:%1, 错误信息:%2").arg(ret).arg(m_httpApi->DoGetLastError(&ret)));
  534. return false;
  535. }
  536. /* 解析获取到的JSON数据 */
  537. // LH_WRITE_LOG_DEBUG(strRet);
  538. try
  539. {
  540. nJson json1 = nJson::parse(strRet.toStdString());
  541. int retCode = json1["code"].get<int>();
  542. if(retCode != 0)
  543. {
  544. LH_WRITE_ERROR("获取模板列表失败");
  545. return false;
  546. }
  547. nJson result = json1["result"];
  548. for(auto& it : result)
  549. {
  550. if(it["templateName"].is_null())
  551. {
  552. LH_WRITE_ERROR("模板名称为空");
  553. continue;
  554. }
  555. auto name = QString::fromStdString(it["templateName"].get<std::string>());
  556. if(list.contains(name))
  557. {
  558. continue;
  559. }
  560. list.append(name);
  561. }
  562. } catch (const nJson::parse_error& e) {
  563. LH_WRITE_ERROR(QString("解析模板列表失败:%1").arg(e.what()));
  564. return false;
  565. }
  566. catch (const nJson::exception& e)
  567. {
  568. LH_WRITE_ERROR(QString("解析模板列表失败:%1").arg(e.what()));
  569. return false;
  570. }
  571. catch(...)
  572. {
  573. LH_WRITE_ERROR("解析模板列表失败");
  574. return false;
  575. }
  576. /* 对模版按照名称排序 */
  577. list.sort();
  578. return true;
  579. }
  580. /* 删除一个模板 */
  581. bool FromWebAPI::deleteTemplate(const QString& name)
  582. {
  583. if(m_httpApi == nullptr)
  584. {
  585. LH_WRITE_ERROR("WebAPI is nullptr");
  586. return false;
  587. }
  588. nJson json0;
  589. json0["opName"] = "TMS_DeleteExecPlanTemplate";
  590. nJson json1;
  591. json1["templateName"] = name.toStdString();
  592. json0["paramList"] = json1;
  593. QString strCmd = QString::fromStdString(json0.dump());
  594. QString strRet;
  595. auto ret = m_httpApi->DBDoInterface(enDBOperatorType::EDBOT_Delete, strCmd, strRet);
  596. if(ret < 0)
  597. {
  598. LH_WRITE_ERROR(QString("删除模板失败:%1, 错误信息:%2").arg(ret).arg(m_httpApi->DoGetLastError(&ret)));
  599. return false;
  600. }
  601. return true;
  602. }