FromWebAPI.cpp 43 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351
  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. #include "lhhttpapi.h"
  9. FromWebAPI::FromWebAPI()
  10. {
  11. }
  12. FromWebAPI::~FromWebAPI()
  13. {
  14. if(m_httpApi != nullptr)
  15. {
  16. delete m_httpApi;
  17. m_httpApi = nullptr;
  18. }
  19. }
  20. /* 初始化WebApi */
  21. bool FromWebAPI::initWebApi(const QString& url, const QString& serverID, const QString& serverKey)
  22. {
  23. if(m_httpApi == nullptr)
  24. {
  25. m_httpApi = new lhhttpapi;
  26. }
  27. #if defined(Q_OS_WIN)
  28. #ifdef QT_DEBUG
  29. QString libFile = QString("%1/LHSqlWebInterfaced.dll").arg(QApplication::applicationDirPath());
  30. #else
  31. QString libFile = QString("%1/LHSqlWebInterface.dll").arg(QApplication::applicationDirPath());
  32. #endif
  33. #elif defined(Q_OS_LINUX)
  34. #ifdef QT_DEBUG
  35. QString libFile = QString("%1/libLHSqlWebInterface.so").arg(QApplication::applicationDirPath());
  36. #else
  37. QString libFile = QString("%1/libLHSqlWebInterface.so").arg(QApplication::applicationDirPath());
  38. #endif
  39. #endif
  40. if(!m_httpApi->Load(libFile))
  41. {
  42. LH_WRITE_ERROR("Load WebAPI failed");
  43. return false;
  44. }
  45. LH_WRITE_LOG_DEBUG(QString("URL:%1").arg(url));
  46. LH_WRITE_LOG_DEBUG(QString("ServerID:%1").arg(serverID));
  47. LH_WRITE_LOG_DEBUG(QString("ServerKey:%1").arg(serverKey));
  48. auto pHttp = m_httpApi->DBInit(url.toStdString().c_str(), true);
  49. int ret = 0;
  50. #ifdef QT_DEBUG
  51. /* 获取服务器列表 */
  52. char serverList[8192]={0};
  53. ret = m_httpApi->DBGetServerList(serverList, 8192-1);
  54. if(ret != 0)
  55. {
  56. LH_WRITE_ERROR(QString("Get server list failed:%1, error info:%2").arg(ret).arg(m_httpApi->DoGetLastError(&ret)));
  57. return false;
  58. }
  59. // LH_WRITE_LOG(QString("\nGet server list success:%1").arg(serverList));
  60. #endif
  61. /* 登录,第二个参数是限制的服务 */
  62. // ret = m_httpApi->DBLogin("", serverID, serverKey, m_userToken, true, pHttp);
  63. ret = m_httpApi->DBLogin("", serverID, "ESM8C", m_userToken, true, pHttp);
  64. if(ret != 0)
  65. {
  66. LH_WRITE_ERROR(QString("Login failed:%1, error info:%2").arg(ret).arg(m_httpApi->DoGetLastError(&ret)));
  67. return false;
  68. }
  69. LH_WRITE_LOG("\n");
  70. LH_WRITE_LOG("WebAPI Login success!");
  71. return true;
  72. }
  73. /* 获取设备信息 */
  74. bool FromWebAPI::getDeviceInfo(QMap<QString, DeviceInfo>& mapDevice)
  75. {
  76. if(m_httpApi == nullptr)
  77. {
  78. LH_WRITE_ERROR("WebAPI is nullptr");
  79. return false;
  80. }
  81. nJson json0;
  82. json0["opName"] = "ESM8C_GetDevice";
  83. QString strCmd = QString::fromStdString(json0.dump());
  84. QString strRet;
  85. auto ret = m_httpApi->DBDoInterface(enDBOperatorType::EDBOT_Select, strCmd, strRet, true);
  86. if(ret != 0)
  87. {
  88. LH_WRITE_ERROR(QString("从数据库获取设备失败:%1, 错误信息:%2").arg(ret).arg(m_httpApi->DoGetLastError(&ret)));
  89. return false;
  90. }
  91. /* 解析获取到的JSON数据 */
  92. // LH_WRITE_LOG_DEBUG(strRet);
  93. try
  94. {
  95. nJson json1 = nJson::parse(strRet.toStdString());
  96. int retCode = json1["code"].get<int>();
  97. if(retCode != 0)
  98. {
  99. LH_WRITE_ERROR("获取设备数据失败");
  100. return false;
  101. }
  102. nJson result = json1["result"];
  103. for(auto& it : result)
  104. {
  105. DeviceInfo DevInfo;
  106. QString devName = QString::fromStdString(it["dname"].get<std::string>());
  107. DevInfo.devName = devName;
  108. DevInfo.DID = it["did"].is_null() ? -1 : it["did"].get<int>();
  109. DevInfo.DTID = it["dtid"].is_null() ? -1 : it["dtid"].get<int>();
  110. DevInfo.MPID = it["mpid"].is_null() ? -1 : it["mpid"].get<int>();
  111. DevInfo.PTTypeCode = it["pttypecode"].is_null() ? -1 : it["pttypecode"].get<int>();
  112. DevInfo.ChannelID = it["chnid"].is_null() ? -1 : it["chnid"].get<int>();
  113. if(DevInfo.ChannelID <= 0)
  114. {
  115. // LH_WRITE_LOG_DEBUG(QString("通道ID错误:%1").arg(DevInfo.ChannelID));
  116. continue;
  117. }
  118. /* 查找对应的设备类型,根据PTTypeCode来查找,这个是唯一的 */
  119. auto devType = DevTypeContainer.getDevType(DevInfo.PTTypeCode);
  120. if(devType.PTTypeCode < 0)
  121. {
  122. // LH_WRITE_LOG_DEBUG(QString("未找到设备类型:%1").arg(DevInfo.PTTypeCode));
  123. continue;
  124. }
  125. DevInfo.DevType = devType;
  126. /* 检查有没有设置主备 */
  127. int devMB = it["dClass"].is_null() ? -1 : it["dClass"].get<int>();
  128. if(devMB < 0)
  129. {
  130. LH_WRITE_ERROR(QString("设备类型:%1《主/备》 类型为空").arg(DevInfo.DevType.PTTypeCode));
  131. continue;
  132. }
  133. mapDevice.insert(DevInfo.devName, DevInfo);
  134. }
  135. LH_WRITE_LOG(QString("获取设备数据成功,设备数目:%1").arg(mapDevice.size()));
  136. } catch (const nJson::parse_error& e) {
  137. LH_WRITE_ERROR("解析ESM-8C设备数据失败");
  138. return false;
  139. }
  140. catch (const nJson::exception& e)
  141. {
  142. LH_WRITE_ERROR("解析ESM-8C设备数据失败");
  143. return false;
  144. }
  145. catch(...)
  146. {
  147. LH_WRITE_ERROR("解析ESM-8C设备数据失败");
  148. return false;
  149. }
  150. return true;
  151. }
  152. /* 获取频率信息 */
  153. bool FromWebAPI::getChannelInfo(QMap<int, ChannelInfo>& mapFreq)
  154. {
  155. /* 测试,创建几个频率 */
  156. // for(int i = 0; i < 12; i++)
  157. // {
  158. // ChannelInfo freqInfo;
  159. // freqInfo.ChannelID = i + 1;
  160. // freqInfo.ChannelName = QString("频率%1").arg(freqInfo.ChannelID);
  161. // mapFreq.insert(freqInfo.ChannelID, freqInfo);
  162. // }
  163. if(m_httpApi == nullptr)
  164. {
  165. LH_WRITE_ERROR("WebAPI is nullptr");
  166. return false;
  167. }
  168. nJson json0;
  169. json0["opName"] = "ESM8C_GetChannel";
  170. QString strCmd = QString::fromStdString(json0.dump());
  171. QString strRet;
  172. auto ret = m_httpApi->DBDoInterface(enDBOperatorType::EDBOT_Select, strCmd, strRet, true);
  173. if(ret != 0)
  174. {
  175. LH_WRITE_ERROR(QString("从数据库获取频率信息失败:%1, 错误信息:%2").arg(ret).arg(m_httpApi->DoGetLastError(&ret)));
  176. return false;
  177. }
  178. try
  179. {
  180. nJson json1 = nJson::parse(strRet.toStdString());
  181. int retCode = json1["code"].get<int>();
  182. if(retCode != 0)
  183. {
  184. LH_WRITE_ERROR("获取频率数据失败");
  185. return false;
  186. }
  187. nJson result = json1["result"];
  188. for(auto& it : result)
  189. {
  190. ChannelInfo freqInfo;
  191. freqInfo.ChannelID = it["chnid"].is_null() ? -1 : it["chnid"].get<int>();
  192. if(freqInfo.ChannelID <= 0)
  193. {
  194. LH_WRITE_LOG_DEBUG(QString("通道ID错误:%1").arg(freqInfo.ChannelID));
  195. continue;
  196. }
  197. freqInfo.ChannelName = QString::fromStdString(it["chnname"].get<std::string>());
  198. mapFreq.insert(freqInfo.ChannelID, freqInfo);
  199. }
  200. }
  201. catch (const nJson::parse_error& e) {
  202. LH_WRITE_ERROR("解析频率信息数据失败");
  203. return false;
  204. }
  205. catch (const nJson::exception& e)
  206. {
  207. LH_WRITE_ERROR("解析频率信息数据失败");
  208. return false;
  209. }
  210. catch(...)
  211. {
  212. LH_WRITE_ERROR("解析频率信息数据失败");
  213. return false;
  214. }
  215. LH_WRITE_LOG_DEBUG(QString("获取频率数据成功,频率数目:%1").arg(mapFreq.size()));
  216. return true;
  217. }
  218. /**
  219. * @brief 将数据写入EQM数据库
  220. *
  221. * @param chnID 频率ID
  222. * @param list
  223. * @return true
  224. * @return false
  225. */
  226. bool FromWebAPI::insertData(int chnID, QList<OnePlanItemInfo>& list)
  227. {
  228. if(m_httpApi == nullptr)
  229. {
  230. LH_WRITE_ERROR("WebAPI is nullptr");
  231. return false;
  232. }
  233. /* 先删除表格中的数据 */
  234. deleteOneChnPlan(chnID);
  235. QDate zeroDate(1970,1,1);
  236. /* 写入数据 */
  237. nJson json0 = nJson::array();
  238. try{
  239. for(auto& it : list)
  240. {
  241. nJson json1;
  242. json1["opName"] = "ESM8C_InsertDataToExecPlan";
  243. json1["Key"] = QUuid::createUuid().toString().toStdString();
  244. nJson json2;
  245. json2["channelID"] = it.ChannelID;
  246. json2["channelName"] = it.ChannelName.toStdString();
  247. json2["onWeekDay"] = it.onWeekDay;
  248. json2["onDate"] = it.onDateTime.date().toString("yyyy-MM-dd").toStdString();
  249. json2["onTime"] = it.onDateTime.time().toString("hh:mm:ss").toStdString();
  250. json2["offWeekDay"] = it.offWeekDay;
  251. json2["offDate"] = it.offDateTime.date().toString("yyyy-MM-dd").toStdString();
  252. json2["offTime"] = it.offDateTime.time().toString("hh:mm:ss").toStdString();
  253. json1["paramList"] = json2;
  254. json0.push_back(json1);
  255. }
  256. }catch (const nJson::parse_error& e) {
  257. SPDLOG_ERROR("生成json数据失败:{}", e.what());
  258. return false;
  259. }
  260. catch (const nJson::exception& e)
  261. {
  262. SPDLOG_ERROR("生成json数据失败:{}", e.what());
  263. return false;
  264. }
  265. catch (...)
  266. {
  267. SPDLOG_ERROR("生成json数据失败");
  268. return false;
  269. }
  270. /* 将json写入本地文件 */
  271. #ifdef C_DEBUG
  272. QString fileJson(QString::fromStdString(json0.dump(4)));
  273. // LH_WRITE_LOG_DEBUG("\n" + fileJson);
  274. // QString filePath = QApplication::applicationDirPath() + QString("ExecPlanData.json");
  275. // SPDLOG_LOGGER_DEBUG(m_logger,"To EQM Json写入文件:{}", filePath.toStdString());
  276. // QFile file(filePath);
  277. // if(file.open(QIODevice::WriteOnly | QIODevice::Truncate))
  278. // {
  279. // file.write(fileJson.toUtf8());
  280. // file.close();
  281. // }else {
  282. // SPDLOG_LOGGER_ERROR(m_logger,"打开文件失败:{}", filePath.toStdString());
  283. // }
  284. #endif
  285. /* 写入EQM数据库 */
  286. QString strCmd = QString::fromStdString(json0.dump());
  287. QString strRet;
  288. auto ret = m_httpApi->DBDoInterface(enDBOperatorType::EDBOT_BatchTransAction, strCmd, strRet, true);
  289. if(ret != 0)
  290. {
  291. LH_WRITE_ERROR(QString("写入EQM数据库失败:%1, 错误信息:%2").arg(ret).arg(m_httpApi->DoGetLastError(&ret)));
  292. return false;
  293. }
  294. // LH_WRITE_LOG(QString("计划写入EQM数据库成功, 计划数目:%1").arg(QString::number(list.size())));
  295. return true;
  296. }
  297. /**
  298. * @brief 获取tExecPlan表格数据,获取到的数据会根据设备名查找对应的设备信息,如果没有查找到,就抛弃这个计划
  299. *
  300. * @param chnID 频率ID
  301. * @param mapPlan
  302. * @return true
  303. * @return false
  304. */
  305. bool FromWebAPI::getExecPlanData(int chnID, QList<OnePlanItemInfo>& list)
  306. {
  307. if(m_httpApi == nullptr)
  308. {
  309. LH_WRITE_ERROR("WebAPI is nullptr");
  310. return false;
  311. }
  312. nJson json0;
  313. json0["opName"] = "ESM8C_GetOneChnPlan";
  314. nJson json1;
  315. json1["channelID"] = chnID;
  316. json0["paramList"] = json1;
  317. QString strCmd = QString::fromStdString(json0.dump());
  318. QString strRet;
  319. auto ret = m_httpApi->DBDoInterface(enDBOperatorType::EDBOT_Select, strCmd, strRet, true);
  320. if(ret != 0)
  321. {
  322. LH_WRITE_ERROR(QString("从EQM获取tExecPlan表格数据失败:%1, 错误信息:%2").arg(ret).arg(m_httpApi->DoGetLastError(&ret)));
  323. return false;
  324. }
  325. /* 解析获取到的JSON数据 */
  326. // SPDLOG_LOGGER_DEBUG(m_logger,"获取执行计划:\n{}",strRet.toStdString());
  327. try
  328. {
  329. nJson json2 = nJson::parse(strRet.toStdString());
  330. int retCode = json2["code"].get<int>();
  331. if(retCode != 0)
  332. {
  333. LH_WRITE_ERROR("获取tExecPlan表格数据失败");
  334. return false;
  335. }
  336. nJson result = json2["result"];
  337. for(auto& it : result)
  338. {
  339. OnePlanItemInfo info;
  340. info.ChannelID = chnID;
  341. info.ChannelName = QString::fromStdString(it["channelName"].get<std::string>());
  342. info.onWeekDay = static_cast<enum_WeekDay>(it["onWeekDay"].get<int>());
  343. info.onDateTime.setDate(QDate::fromString(QString::fromStdString(it["onDate"].get<std::string>()), "yyyy-MM-dd"));
  344. info.onDateTime.setTime(QTime::fromString(QString::fromStdString(it["onTime"].get<std::string>()), "hh:mm:ss"));
  345. info.offWeekDay = static_cast<enum_WeekDay>(it["offWeekDay"].get<int>());
  346. info.offDateTime.setDate(QDate::fromString(QString::fromStdString(it["offDate"].get<std::string>()), "yyyy-MM-dd"));
  347. info.offDateTime.setTime(QTime::fromString(QString::fromStdString(it["offTime"].get<std::string>()), "hh:mm:ss"));
  348. list.append(info);
  349. }
  350. } catch (const nJson::parse_error& e) {
  351. LH_WRITE_ERROR(QString("解析 tExecPlan 表格数据失败:%1").arg(e.what()));
  352. return false;
  353. }
  354. catch (const nJson::exception& e)
  355. {
  356. LH_WRITE_ERROR(QString("解析 tExecPlan 表格数据失败:%1").arg(e.what()));
  357. return false;
  358. }
  359. catch(...)
  360. {
  361. LH_WRITE_ERROR("解析 tExecPlan 表格数据失败");
  362. return false;
  363. }
  364. // LH_WRITE_LOG_DEBUG(QString("从 EQM.tExecPlan 表格获取数据成功,计划数目:%1").arg(list.size()));
  365. return true;
  366. }
  367. bool FromWebAPI::getExecPlanData(QMap<int, QList<OnePlanItemInfo>>& mapPlan)
  368. {
  369. if(m_httpApi == nullptr)
  370. {
  371. LH_WRITE_ERROR("WebAPI is nullptr");
  372. return false;
  373. }
  374. nJson json0;
  375. json0["opName"] = "ESM8C_GetExecPlan";
  376. nJson json1;
  377. json0["paramList"] = json1;
  378. QString strCmd = QString::fromStdString(json0.dump());
  379. QString strRet;
  380. auto ret = m_httpApi->DBDoInterface(enDBOperatorType::EDBOT_Select, strCmd, strRet, true);
  381. if(ret != 0)
  382. {
  383. LH_WRITE_ERROR(QString("从EQM获取tExecPlan表格数据失败:%1, 错误信息:%2").arg(ret).arg(m_httpApi->DoGetLastError(&ret)));
  384. return false;
  385. }
  386. /* 解析获取到的JSON数据 */
  387. // SPDLOG_LOGGER_DEBUG(m_logger,"获取执行计划:\n{}",strRet.toStdString());
  388. try
  389. {
  390. nJson json2 = nJson::parse(strRet.toStdString());
  391. int retCode = json2["code"].get<int>();
  392. if(retCode != 0)
  393. {
  394. LH_WRITE_ERROR("获取tExecPlan表格数据失败");
  395. return false;
  396. }
  397. nJson result = json2["result"];
  398. for(auto& it : result)
  399. {
  400. OnePlanItemInfo info;
  401. info.ChannelID = it["channelID"].is_null() ? -1 : it["channelID"].get<int>();
  402. info.ChannelName = QString::fromStdString(it["channelName"].get<std::string>());
  403. info.onWeekDay = static_cast<enum_WeekDay>(it["onWeekDay"].get<int>());
  404. info.onDateTime.setDate(QDate::fromString(QString::fromStdString(it["onDate"].get<std::string>()), "yyyy-MM-dd"));
  405. info.onDateTime.setTime(QTime::fromString(QString::fromStdString(it["onTime"].get<std::string>()), "hh:mm:ss"));
  406. info.offWeekDay = static_cast<enum_WeekDay>(it["offWeekDay"].get<int>());
  407. info.offDateTime.setDate(QDate::fromString(QString::fromStdString(it["offDate"].get<std::string>()), "yyyy-MM-dd"));
  408. info.offDateTime.setTime(QTime::fromString(QString::fromStdString(it["offTime"].get<std::string>()), "hh:mm:ss"));
  409. /* 查找对应的设备列表 */
  410. auto list = mapPlan.find(info.ChannelID);
  411. if(list == mapPlan.end())
  412. {
  413. /* 创建一个新的列表 */
  414. QList<OnePlanItemInfo> listPlan;
  415. listPlan.append(info);
  416. mapPlan.insert(info.ChannelID, listPlan);
  417. }else {
  418. /* 找到对应的列表 */
  419. list->append(info);
  420. }
  421. }
  422. } catch (const nJson::parse_error& e) {
  423. LH_WRITE_ERROR(QString("解析 tExecPlan 表格数据失败:%1").arg(e.what()));
  424. return false;
  425. }
  426. catch (const nJson::exception& e)
  427. {
  428. LH_WRITE_ERROR(QString("解析 tExecPlan 表格数据失败:%1").arg(e.what()));
  429. return false;
  430. }
  431. catch(...)
  432. {
  433. LH_WRITE_ERROR("解析 tExecPlan 表格数据失败");
  434. return false;
  435. }
  436. return true;
  437. }
  438. /* 删除所有行 */
  439. bool FromWebAPI::deleteAllRow()
  440. {
  441. if(m_httpApi == nullptr)
  442. {
  443. LH_WRITE_ERROR("WebAPI is nullptr");
  444. return false;
  445. }
  446. nJson json0;
  447. json0["opName"] = "ESM8C_DeleteAllRow";
  448. QString strCmd = QString::fromStdString(json0.dump());
  449. QString strRet;
  450. auto ret = m_httpApi->DBDoInterface(enDBOperatorType::EDBOT_Delete, strCmd, strRet, true);
  451. if(ret != 0)
  452. {
  453. LH_WRITE_ERROR(QString("删除所有行失败:%1, 错误信息:%2").arg(ret).arg(m_httpApi->DoGetLastError(&ret)));
  454. return false;
  455. }
  456. return true;
  457. }
  458. /* 删除一个发射机计划 */
  459. bool FromWebAPI::deleteOneChnPlan(int chnID)
  460. {
  461. if(m_httpApi == nullptr)
  462. {
  463. LH_WRITE_ERROR("WebAPI is nullptr");
  464. return false;
  465. }
  466. /* 查找出有多少发射机类型 */
  467. QList<int> listPttypeCodeID;
  468. for(auto& it : DevTypeContainer.getMapDevType())
  469. {
  470. listPttypeCodeID.append(it.PTTypeCode);
  471. }
  472. nJson json0;
  473. json0["opName"] = "ESM8C_DeleteOneChnPlan";
  474. json0["paramList"].clear();
  475. nJson json1;
  476. json1["channelID"] = chnID;
  477. json0["paramList"].push_back(json1);
  478. QString strCmd = QString::fromStdString(json0.dump());
  479. QString strRet;
  480. auto ret = m_httpApi->DBDoInterface(enDBOperatorType::EDBOT_Delete, strCmd, strRet, true);
  481. if(ret != 0)
  482. {
  483. LH_WRITE_ERROR(QString("删除频率: %3 计划失败: %1, 错误信息: %2").arg(ret).arg(m_httpApi->DoGetLastError(&ret)).arg(chnID));
  484. }else {
  485. // LH_WRITE_LOG(QString("删除频率: %1 计划成功!").arg(chnID));
  486. }
  487. return true;
  488. }
  489. /**
  490. * @brief 将页面的配置写入数据库,主要是默认计划和执行模式
  491. *
  492. * @param mapConfig
  493. * @return true
  494. * @return false
  495. */
  496. bool FromWebAPI::insertConfigData(QMap<int, ConfigData>& list)
  497. {
  498. if(m_httpApi == nullptr)
  499. {
  500. LH_WRITE_ERROR("WebAPI is nullptr");
  501. return false;
  502. }
  503. deleteConfigData(list);
  504. nJson json0 = nJson::array();
  505. try{
  506. for(auto begin = list.begin(), end = list.end(); begin != end; begin++)
  507. {
  508. nJson json1;
  509. json1["opName"] = "ESM8C_InsertExecPlanConfig";
  510. json1["Key"] = QUuid::createUuid().toString().toStdString();
  511. nJson json2;
  512. json2["keyWord"] = begin->key;
  513. json2["value1"] = begin->value;
  514. json2["updateTime"] = begin->updateTime.toString("yyyy-MM-dd hh:mm:ss").toStdString();
  515. json2["notes"] = begin->notes.toStdString();
  516. json1["paramList"] = json2;
  517. json0.push_back(json1);
  518. }
  519. }catch (const nJson::parse_error& e) {
  520. SPDLOG_ERROR("生成json数据失败:{}", e.what());
  521. return false;
  522. }
  523. catch (const nJson::exception& e)
  524. {
  525. SPDLOG_ERROR("生成json数据失败:{}", e.what());
  526. return false;
  527. }
  528. catch (...)
  529. {
  530. SPDLOG_ERROR("生成json数据失败");
  531. return false;
  532. }
  533. /* 写入EQM数据库 */
  534. QString strCmd = QString::fromStdString(json0.dump());
  535. QString strRet;
  536. auto ret = m_httpApi->DBDoInterface(enDBOperatorType::EDBOT_BatchTransAction, strCmd, strRet, true);
  537. if(ret != 0)
  538. {
  539. LH_WRITE_ERROR(QString("写入tExecPlanConfig失败:%1, 错误信息:%2").arg(ret).arg(m_httpApi->DoGetLastError(&ret)));
  540. return false;
  541. }
  542. LH_WRITE_LOG_DEBUG(QString("页面配置写入tExecPlanConfig成功, 数目:%1").arg(QString::number(list.size())));
  543. return true;
  544. }
  545. /* 删除配置数据 */
  546. bool FromWebAPI::deleteConfigData(QMap<int, ConfigData>& list)
  547. {
  548. if(m_httpApi == nullptr)
  549. {
  550. LH_WRITE_ERROR("WebAPI is nullptr");
  551. return false;
  552. }
  553. nJson json0 = nJson::array();
  554. try{
  555. for(auto begin = list.begin(), end = list.end(); begin != end; begin++)
  556. {
  557. nJson json1;
  558. json1["opName"] = "ESM8C_DeleteExecPlanConfig";
  559. json1["Key"] = QUuid::createUuid().toString().toStdString();
  560. nJson json2;
  561. json2["keyWord"] = begin->key;
  562. json1["paramList"] = json2;
  563. json0.push_back(json1);
  564. }
  565. }catch (const nJson::parse_error& e) {
  566. SPDLOG_ERROR("生成json数据失败:{}", e.what());
  567. return false;
  568. }
  569. catch (const nJson::exception& e)
  570. {
  571. SPDLOG_ERROR("生成json数据失败:{}", e.what());
  572. return false;
  573. }
  574. catch (...)
  575. {
  576. SPDLOG_ERROR("生成json数据失败");
  577. return false;
  578. }
  579. /* 写入EQM数据库 */
  580. QString strCmd = QString::fromStdString(json0.dump());
  581. QString strRet;
  582. auto ret = m_httpApi->DBDoInterface(enDBOperatorType::EDBOT_BatchTransAction, strCmd, strRet, true);
  583. if(ret != 0)
  584. {
  585. LH_WRITE_ERROR(QString("删除tExecPlanConfig表格数据失败:%1, 错误信息:%2").arg(ret).arg(m_httpApi->DoGetLastError(&ret)));
  586. return false;
  587. }
  588. LH_WRITE_LOG_DEBUG(QString("删除tExecPlanConfig表格数据成功, 计划数目:%1").arg(QString::number(list.size())));
  589. return true;
  590. }
  591. /* 获取配置数据 */
  592. bool FromWebAPI::getConfigData(QMap<int, ConfigData>& list)
  593. {
  594. if(m_httpApi == nullptr)
  595. {
  596. LH_WRITE_ERROR("WebAPI is nullptr");
  597. return false;
  598. }
  599. nJson json0;
  600. json0["opName"] = "ESM8C_GetExecPlanConfig";
  601. QString strCmd = QString::fromStdString(json0.dump());
  602. QString strRet;
  603. auto ret = m_httpApi->DBDoInterface(enDBOperatorType::EDBOT_Select, strCmd, strRet, true);
  604. if(ret != 0)
  605. {
  606. LH_WRITE_ERROR(QString("获取tExecPlanConfig表格数据失败:%1, 错误信息:%2").arg(ret).arg(m_httpApi->DoGetLastError(&ret)));
  607. return false;
  608. }
  609. /* 解析获取到的JSON数据 */
  610. // LH_WRITE_LOG_DEBUG(QString("Ret:%1").arg(ret));
  611. // LH_WRITE_LOG_DEBUG(strRet);
  612. try{
  613. nJson json1 = nJson::parse(strRet.toStdString());
  614. int retCode = json1["code"].get<int>();
  615. if(retCode != 0)
  616. {
  617. LH_WRITE_ERROR("获取tExecPlanConfig失败");
  618. return false;
  619. }
  620. nJson result = json1["result"];
  621. for(auto& it : result)
  622. {
  623. ConfigData data;
  624. data.key = it["keyWord"].get<int>();
  625. data.value = it["value1"].get<int>();
  626. data.updateTime = QDateTime::fromString(QString::fromStdString(it["updateTime"].get<std::string>()),"yyyy-MM-dd hh:mm:ss");
  627. data.notes = QString::fromStdString(it["notes"].get<std::string>());
  628. list.insert(data.key, data);
  629. }
  630. } catch (const nJson::parse_error& e) {
  631. LH_WRITE_ERROR(QString("解析tExecPlanConfig数据失败:%1").arg(e.what()));
  632. return false;
  633. }
  634. catch (const nJson::exception& e)
  635. {
  636. LH_WRITE_ERROR(QString("解析tExecPlanConfig数据失败:%1").arg(e.what()));
  637. return false;
  638. }
  639. catch(...)
  640. {
  641. LH_WRITE_ERROR("解析tExecPlanConfig数据失败");
  642. return false;
  643. }
  644. LH_WRITE_LOG_DEBUG(QString("获取tExecPlanConfig表格数据成功,数据数目:%1").arg(list.size()));
  645. return true;
  646. }
  647. /* 单独获取某个关键字的数据 */
  648. bool FromWebAPI::getConfigData(int key, ConfigData& data)
  649. {
  650. if(m_httpApi == nullptr)
  651. {
  652. LH_WRITE_ERROR("WebAPI is nullptr");
  653. return false;
  654. }
  655. nJson json0;
  656. json0["opName"] = "ESM8C_GetExecPlanConfigOfKeyWord";
  657. nJson json1;
  658. json1["keyWord"] = key;
  659. json0["paramList"] = json1;
  660. QString strCmd = QString::fromStdString(json0.dump());
  661. QString strRet;
  662. auto ret = m_httpApi->DBDoInterface(enDBOperatorType::EDBOT_Select, strCmd, strRet, true);
  663. if(ret != 0)
  664. {
  665. LH_WRITE_ERROR(QString("获取tExecPlanConfig表格数据失败:%1, 错误信息:%2").arg(ret).arg(m_httpApi->DoGetLastError(&ret)));
  666. return false;
  667. }
  668. /* 解析获取到的JSON数据 */
  669. LH_WRITE_LOG_DEBUG(strRet);
  670. try{
  671. nJson json1 = nJson::parse(strRet.toStdString());
  672. int retCode = json1["code"].get<int>();
  673. if(retCode != 0)
  674. {
  675. LH_WRITE_ERROR("获取tExecPlanConfig失败");
  676. return false;
  677. }
  678. nJson result = json1["result"];
  679. for(auto& it : result)
  680. {
  681. data.key = it["keyWord"].get<int>();
  682. if(data.key != key)
  683. {
  684. LH_WRITE_ERROR("获取到的数据和传入的关键字不匹配");
  685. continue;
  686. }
  687. data.value = it["value1"].get<int>();
  688. data.updateTime = QDateTime::fromString(QString::fromStdString(it["updateTime"].get<std::string>()),"yyyy-MM-dd hh:mm:ss");
  689. data.notes = QString::fromStdString(it["notes"].get<std::string>());
  690. break;
  691. }
  692. } catch (const nJson::parse_error& e) {
  693. LH_WRITE_ERROR(QString("解析tExecPlanConfig数据失败:%1").arg(e.what()));
  694. return false;
  695. }
  696. catch (const nJson::exception& e)
  697. {
  698. LH_WRITE_ERROR(QString("解析tExecPlanConfig数据失败:%1").arg(e.what()));
  699. return false;
  700. }
  701. catch(...)
  702. {
  703. LH_WRITE_ERROR("解析tExecPlanConfig数据失败");
  704. return false;
  705. }
  706. if(data.key != key)
  707. {
  708. LH_WRITE_ERROR("获取到的数据和传入的关键字不匹配");
  709. return false;
  710. }
  711. return true;
  712. }
  713. /* 获取EQM数据库中的模版编号 */
  714. bool FromWebAPI::getEQMTemplateID(QList<int>& listId)
  715. {
  716. if(m_httpApi == nullptr)
  717. {
  718. LH_WRITE_ERROR("WebAPI is nullptr");
  719. return false;
  720. }
  721. nJson json0;
  722. json0["opName"] = "ESMC_GetTemplateNumFromExecPlan";
  723. QString strCmd = QString::fromStdString(json0.dump());
  724. QString strRet;
  725. auto ret = m_httpApi->DBDoInterface(enDBOperatorType::EDBOT_Select, strCmd, strRet, true);
  726. if(ret != 0)
  727. {
  728. LH_WRITE_ERROR(QString("从EQM获取模版编号失败:%1, 错误信息:%2").arg(ret).arg(m_httpApi->DoGetLastError(&ret)));
  729. return false;
  730. }
  731. /* 解析获取到的JSON数据 */
  732. LH_WRITE_LOG_DEBUG(strRet);
  733. try
  734. {
  735. nJson json1 = nJson::parse(strRet.toStdString());
  736. int retCode = json1["code"].get<int>();
  737. if(retCode != 0)
  738. {
  739. LH_WRITE_ERROR("获取模版编号失败");
  740. return false;
  741. }
  742. nJson result = json1["result"];
  743. for(auto& it : result)
  744. {
  745. if(it["templateNum"].is_null())
  746. {
  747. LH_WRITE_ERROR("模版编号为空");
  748. continue;
  749. }
  750. auto id = it["templateNum"].get<int>();
  751. if(listId.contains(id))
  752. {
  753. continue;
  754. }
  755. listId.append(id);
  756. }
  757. } catch (const nJson::parse_error& e) {
  758. LH_WRITE_ERROR(QString("解析模版编号失败:%1").arg(e.what()));
  759. return false;
  760. }
  761. catch (const nJson::exception& e)
  762. {
  763. LH_WRITE_ERROR(QString("解析模版编号失败:%1").arg(e.what()));
  764. return false;
  765. }
  766. catch(...)
  767. {
  768. LH_WRITE_ERROR("解析模版编号失败");
  769. return false;
  770. }
  771. return true;
  772. }
  773. /* 保存到模板 */
  774. bool FromWebAPI::saveTemplate(const QString& templateName, QList<OnePlanItemInfo>& list)
  775. {
  776. if(m_httpApi == nullptr)
  777. {
  778. LH_WRITE_ERROR("WebAPI is nullptr");
  779. return false;
  780. }
  781. nJson json0 = nJson::array();
  782. for(const auto& it : list)
  783. {
  784. nJson json1;
  785. json1["opName"] = "TMS_InsertToExecPlanTemplate";
  786. json1["Key"] = QUuid::createUuid().toString().toStdString();
  787. nJson json2;
  788. json2["templateName"] = templateName.toStdString();
  789. json2["channelID"] = it.ChannelID;
  790. json2["channelName"] = it.ChannelName.toStdString();
  791. json2["onWeekDay"] = it.onWeekDay;
  792. json2["onDate"] = it.onDateTime.date().toString("yyyy-MM-dd").toStdString();
  793. json2["onTime"] = it.onDateTime.time().toString("hh:mm:ss").toStdString();
  794. json2["offWeekDay"] = it.offWeekDay;
  795. json2["offDate"] = it.offDateTime.date().toString("yyyy-MM-dd").toStdString();
  796. json2["offTime"] = it.offDateTime.time().toString("hh:mm:ss").toStdString();
  797. json1["paramList"] = json2;
  798. json0.push_back(json1);
  799. }
  800. /* 将json写入本地文件 */
  801. #ifdef C_DEBUG
  802. // QString fileJson(QString::fromStdString(json0.dump(4)));
  803. // LH_WRITE_LOG_DEBUG("\n" + fileJson);
  804. #endif
  805. /* 写入EQM数据库 */
  806. QString strCmd = QString::fromStdString(json0.dump());
  807. QString strRet;
  808. auto ret = m_httpApi->DBDoInterface(enDBOperatorType::EDBOT_BatchTransAction, strCmd, strRet, true);
  809. if(ret != 0)
  810. {
  811. LH_WRITE_ERROR(QString("保存到模板失败:%1, 错误信息:%2").arg(ret).arg(m_httpApi->DoGetLastError(&ret)));
  812. return false;
  813. }
  814. // LH_WRITE_LOG("保存到模板成功,模板名称:" + templateName + ", 计划数目:" + QString::number(list.size()));
  815. return true;
  816. }
  817. /* 批量写入模版数据 */
  818. bool FromWebAPI::saveTemplateList(const QMap<OneTemplateInfo, QList<OnePlanItemInfo>>& mapTemplate)
  819. {
  820. if(m_httpApi == nullptr)
  821. {
  822. LH_WRITE_ERROR("WebAPI is nullptr");
  823. return false;
  824. }
  825. nJson json0 = nJson::array();
  826. try
  827. {
  828. for(auto list = mapTemplate.begin(), end = mapTemplate.end(); list != end; list++)
  829. {
  830. for(auto& item : *list)
  831. {
  832. nJson json1;
  833. json1["opName"] = "TMS_InsertToExecPlanTemplate";
  834. json1["Key"] = QUuid::createUuid().toString().toStdString();
  835. nJson json2;
  836. json2["templateName"] = list.key().templateName.toStdString();
  837. json2["channelID"] = item.ChannelID;
  838. json2["channelName"] = item.ChannelName.toStdString();
  839. json2["onWeekDay"] = item.onWeekDay;
  840. json2["onDate"] = item.onDateTime.date().toString("yyyy-MM-dd").toStdString();
  841. json2["onTime"] = item.onDateTime.time().toString("hh:mm:ss").toStdString();
  842. json2["offWeekDay"] = item.offWeekDay;
  843. json2["offDate"] = item.offDateTime.date().toString("yyyy-MM-dd").toStdString();
  844. json2["offTime"] = item.offDateTime.time().toString("hh:mm:ss").toStdString();
  845. json1["paramList"] = json2;
  846. json0.push_back(json1);
  847. }
  848. }
  849. }
  850. catch(...)
  851. {
  852. LH_WRITE_ERROR("生成json数据失败");
  853. return false;
  854. }
  855. /* 写入EQM数据库 */
  856. QString strCmd = QString::fromStdString(json0.dump());
  857. QString strRet;
  858. auto ret = m_httpApi->DBDoInterface(enDBOperatorType::EDBOT_BatchTransAction, strCmd, strRet, true);
  859. if(ret != 0)
  860. {
  861. LH_WRITE_ERROR(QString("保存到模板失败:%1, 错误信息:%2").arg(ret).arg(m_httpApi->DoGetLastError(&ret)));
  862. return false;
  863. }
  864. // LH_WRITE_LOG("保存到模板成功,模板名称:" + templateName + ", 计划数目:" + QString::number(list.size()));
  865. return true;
  866. }
  867. /* 获取模板内容 */
  868. bool FromWebAPI::getOneTemplateData(QString templateName, QList<OnePlanItemInfo>& list)
  869. {
  870. if(m_httpApi == nullptr)
  871. {
  872. LH_WRITE_ERROR("WebAPI is nullptr");
  873. return false;
  874. }
  875. nJson json0;
  876. json0["opName"] = "TMS_GetExecPlanTemplateData";
  877. nJson json1;
  878. json1["templateName"] = templateName.toStdString();
  879. json0["paramList"] = json1;
  880. QString strCmd = QString::fromStdString(json0.dump());
  881. QString strRet;
  882. auto ret = m_httpApi->DBDoInterface(enDBOperatorType::EDBOT_Select, strCmd, strRet, true);
  883. if(ret != 0)
  884. {
  885. LH_WRITE_ERROR(QString("获取模板失败:%1, 错误信息:%2").arg(ret).arg(m_httpApi->DoGetLastError(&ret)));
  886. return false;
  887. }
  888. /* 解析获取到的JSON数据 */
  889. try
  890. {
  891. nJson json2 = nJson::parse(strRet.toStdString());
  892. int retCode = json2["code"].get<int>();
  893. if(retCode != 0)
  894. {
  895. LH_WRITE_ERROR("获取模板失败");
  896. return false;
  897. }
  898. nJson result = json2["result"];
  899. for(auto& it : result)
  900. {
  901. OnePlanItemInfo info;
  902. info.ChannelID = it["channelID"].is_null() ? -1 : it["channelID"].get<int>();
  903. info.ChannelName = QString::fromStdString(it["channelName"].get<std::string>());
  904. info.onWeekDay = static_cast<enum_WeekDay>(it["onWeekDay"].get<int>());
  905. info.onDateTime.setDate(QDate::fromString(QString::fromStdString(it["onDate"].get<std::string>()), "yyyy-MM-dd"));
  906. info.onDateTime.setTime(QTime::fromString(QString::fromStdString(it["onTime"].get<std::string>()), "hh:mm:ss"));
  907. info.offWeekDay = static_cast<enum_WeekDay>(it["offWeekDay"].get<int>());
  908. info.offDateTime.setDate(QDate::fromString(QString::fromStdString(it["offDate"].get<std::string>()), "yyyy-MM-dd"));
  909. info.offDateTime.setTime(QTime::fromString(QString::fromStdString(it["offTime"].get<std::string>()), "hh:mm:ss"));
  910. list.append(info);
  911. }
  912. LH_WRITE_LOG(QString("获取模板成功,数据数目:%1").arg(list.size()));
  913. }
  914. catch (const nJson::parse_error& e)
  915. {
  916. LH_WRITE_ERROR(QString("解析模板失败:%1").arg(e.what()));
  917. return false;
  918. }
  919. catch (const nJson::exception& e)
  920. {
  921. LH_WRITE_ERROR(QString("解析模板失败:%1").arg(e.what()));
  922. return false;
  923. }
  924. catch(...)
  925. {
  926. LH_WRITE_ERROR("解析模板失败");
  927. return false;
  928. }
  929. return true;
  930. }
  931. /* 获取多个模板的内容 */
  932. bool FromWebAPI::getTemplateData(QList<OneTemplateInfo>& listTemplate, QMap<int, QList<OnePlanItemInfo>>& mapPlan)
  933. {
  934. if(m_httpApi == nullptr)
  935. {
  936. LH_WRITE_ERROR("WebAPI is nullptr");
  937. return false;
  938. }
  939. nJson jsonArry = nJson::array();
  940. for(auto& it : listTemplate)
  941. {
  942. jsonArry.push_back(it.templateName.toStdString());
  943. }
  944. nJson json0;
  945. json0["opName"] = "TMS_GetExecPlanTemplateData";
  946. nJson json1;
  947. json1["templateName"] = jsonArry;
  948. json0["paramList"] = json1;
  949. /* 打印生成的JSON */
  950. // LH_WRITE_LOG_DEBUG(QString::fromStdString(json0.dump(4)));
  951. QString strCmd = QString::fromStdString(json0.dump());
  952. QString strRet;
  953. auto ret = m_httpApi->DBDoInterface(enDBOperatorType::EDBOT_Select, strCmd, strRet, true);
  954. if(ret != 0)
  955. {
  956. LH_WRITE_ERROR(QString("获取模板失败:%1, 错误信息:%2").arg(ret).arg(m_httpApi->DoGetLastError(&ret)));
  957. return false;
  958. }
  959. // LH_WRITE_LOG_DEBUG(strRet);
  960. /* 解析获取到的JSON数据 */
  961. try
  962. {
  963. nJson jsonRet = nJson::parse(strRet.toStdString());
  964. int retCode = jsonRet["code"].get<int>();
  965. if(retCode != 0)
  966. {
  967. LH_WRITE_ERROR("获取模板失败");
  968. return false;
  969. }
  970. nJson result = jsonRet["result"];
  971. for(auto& it : result)
  972. {
  973. OnePlanItemInfo info;
  974. info.ChannelID = it["channelID"].is_null() ? -1 : it["channelID"].get<int>();
  975. info.ChannelName = QString::fromStdString(it["channelName"].get<std::string>());
  976. info.onWeekDay = static_cast<enum_WeekDay>(it["onWeekDay"].get<int>());
  977. info.onDateTime.setDate(QDate::fromString(QString::fromStdString(it["onDate"].get<std::string>()), "yyyy-MM-dd"));
  978. info.onDateTime.setTime(QTime::fromString(QString::fromStdString(it["onTime"].get<std::string>()), "hh:mm:ss"));
  979. info.offWeekDay = static_cast<enum_WeekDay>(it["offWeekDay"].get<int>());
  980. info.offDateTime.setDate(QDate::fromString(QString::fromStdString(it["offDate"].get<std::string>()), "yyyy-MM-dd"));
  981. info.offDateTime.setTime(QTime::fromString(QString::fromStdString(it["offTime"].get<std::string>()), "hh:mm:ss"));
  982. /* 查找该频率所属的列表 */
  983. auto list = mapPlan.find(info.ChannelID);
  984. if(list == mapPlan.end())
  985. {
  986. /* 创建一个新的列表 */
  987. QList<OnePlanItemInfo> listPlan;
  988. listPlan.append(info);
  989. mapPlan.insert(info.ChannelID, listPlan);
  990. }else {
  991. /* 找到对应的列表 */
  992. list->append(info);
  993. }
  994. }
  995. }
  996. catch (const nJson::parse_error& e)
  997. {
  998. LH_WRITE_ERROR(QString("解析模板失败:%1").arg(e.what()));
  999. return false;
  1000. }
  1001. catch (const nJson::exception& e)
  1002. {
  1003. LH_WRITE_ERROR(QString("解析模板失败:%1").arg(e.what()));
  1004. return false;
  1005. }
  1006. catch(...)
  1007. {
  1008. LH_WRITE_ERROR("解析模板失败");
  1009. return false;
  1010. }
  1011. LH_WRITE_LOG_DEBUG(QString("获取多个频率模板成功,频率数目:%1").arg(mapPlan.size()));
  1012. return true;
  1013. }
  1014. /* 获取模板列表 */
  1015. bool FromWebAPI::getTemplateList(QMultiMap<int, OneTemplateInfo>& mapTemplate)
  1016. {
  1017. if(m_httpApi == nullptr)
  1018. {
  1019. LH_WRITE_ERROR("WebAPI is nullptr");
  1020. return false;
  1021. }
  1022. nJson json0;
  1023. json0["opName"] = "TMS_GetExecPlanTemplateList";
  1024. QString strCmd = QString::fromStdString(json0.dump());
  1025. QString strRet;
  1026. auto ret = m_httpApi->DBDoInterface(enDBOperatorType::EDBOT_Select, strCmd, strRet, true);
  1027. if(ret != 0)
  1028. {
  1029. LH_WRITE_ERROR(QString("获取模板列表失败:%1, 错误信息:%2").arg(ret).arg(m_httpApi->DoGetLastError(&ret)));
  1030. return false;
  1031. }
  1032. /* 解析获取到的JSON数据 */
  1033. // LH_WRITE_LOG_DEBUG(strRet);
  1034. try
  1035. {
  1036. nJson json1 = nJson::parse(strRet.toStdString());
  1037. int retCode = json1["code"].get<int>();
  1038. if(retCode != 0)
  1039. {
  1040. LH_WRITE_ERROR("获取模板列表失败");
  1041. return false;
  1042. }
  1043. nJson result = json1["result"];
  1044. for(auto& it : result)
  1045. {
  1046. OneTemplateInfo info;
  1047. info.channelInfo.ChannelID = it["channelID"].get<int>();
  1048. info.templateName = QString::fromStdString(it["templateName"].get<std::string>());
  1049. mapTemplate.insert(info.channelInfo.ChannelID, info);
  1050. }
  1051. } catch (const nJson::parse_error& e) {
  1052. LH_WRITE_ERROR(QString("解析模板列表失败:%1").arg(e.what()));
  1053. return false;
  1054. }
  1055. catch (const nJson::exception& e)
  1056. {
  1057. LH_WRITE_ERROR(QString("解析模板列表失败:%1").arg(e.what()));
  1058. return false;
  1059. }
  1060. catch(...)
  1061. {
  1062. LH_WRITE_ERROR("解析模板列表失败");
  1063. return false;
  1064. }
  1065. // for(auto it = list.begin(); it != list.end(); it++)
  1066. // {
  1067. // LH_WRITE_LOG_DEBUG(QString("模板名称:%1, 类型:%2").arg(it.key()).arg(it.value()));
  1068. // }
  1069. return true;
  1070. }
  1071. /* 获取某个频率的模版列表 */
  1072. bool FromWebAPI::getTemplateList(int chnID, QList<OneTemplateInfo>& listTemplate)
  1073. {
  1074. if(m_httpApi == nullptr)
  1075. {
  1076. LH_WRITE_ERROR("WebAPI is nullptr");
  1077. return false;
  1078. }
  1079. nJson json0;
  1080. json0["opName"] = "TMS_GetExecPlanOneTemplateList";
  1081. nJson jsonParam;
  1082. jsonParam["channelID"] = chnID;
  1083. json0["paramList"] = jsonParam;
  1084. /* 发送请求 */
  1085. QString strCmd = QString::fromStdString(json0.dump());
  1086. QString strRet;
  1087. auto ret = m_httpApi->DBDoInterface(enDBOperatorType::EDBOT_Select, strCmd, strRet, true);
  1088. if(ret != 0)
  1089. {
  1090. LH_WRITE_ERROR(QString("获取模板列表失败:%1, 错误信息:%2").arg(ret).arg(m_httpApi->DoGetLastError(&ret)));
  1091. return false;
  1092. }
  1093. /* 解析获取到的JSON数据 */
  1094. // LH_WRITE_LOG_DEBUG(strRet);
  1095. try
  1096. {
  1097. nJson json1 = nJson::parse(strRet.toStdString());
  1098. int retCode = json1["code"].get<int>();
  1099. if(retCode != 0)
  1100. {
  1101. LH_WRITE_ERROR("获取模板列表失败");
  1102. return false;
  1103. }
  1104. nJson result = json1["result"];
  1105. for(auto& it : result)
  1106. {
  1107. OneTemplateInfo info;
  1108. info.channelInfo.ChannelID = it["channelID"].get<int>();
  1109. info.templateName = QString::fromStdString(it["templateName"].get<std::string>());
  1110. listTemplate.append(info);
  1111. }
  1112. } catch (const nJson::parse_error& e) {
  1113. LH_WRITE_ERROR(QString("解析模板列表失败:%1").arg(e.what()));
  1114. return false;
  1115. }
  1116. catch (const nJson::exception& e)
  1117. {
  1118. LH_WRITE_ERROR(QString("解析模板列表失败:%1").arg(e.what()));
  1119. return false;
  1120. }
  1121. catch(...)
  1122. {
  1123. LH_WRITE_ERROR("解析模板列表失败");
  1124. return false;
  1125. }
  1126. return true;
  1127. }
  1128. /* 删除一个模板 */
  1129. bool FromWebAPI::deleteTemplate(const OneTemplateInfo& info)
  1130. {
  1131. if(m_httpApi == nullptr)
  1132. {
  1133. LH_WRITE_ERROR("WebAPI is nullptr");
  1134. return false;
  1135. }
  1136. nJson json0;
  1137. json0["opName"] = "TMS_DeleteExecPlanTemplate";
  1138. nJson json1;
  1139. json1["channelID"] = info.channelInfo.ChannelID;
  1140. json1["templateName"] = info.templateName.toStdString();
  1141. json0["paramList"] = json1;
  1142. QString strCmd = QString::fromStdString(json0.dump());
  1143. QString strRet;
  1144. auto ret = m_httpApi->DBDoInterface(enDBOperatorType::EDBOT_Delete, strCmd, strRet, true);
  1145. if(ret != 0)
  1146. {
  1147. LH_WRITE_ERROR(QString("删除模板失败:%1, 错误信息:%2").arg(ret).arg(m_httpApi->DoGetLastError(&ret)));
  1148. return false;
  1149. }
  1150. return true;
  1151. }
  1152. /* 一次删除多个模版 */
  1153. bool FromWebAPI::deleteTemplateList(const QList<OneTemplateInfo>& listTemplate)
  1154. {
  1155. if(m_httpApi == nullptr)
  1156. {
  1157. LH_WRITE_ERROR("WebAPI is nullptr");
  1158. return false;
  1159. }
  1160. nJson json0 = nJson::array();
  1161. for(auto& it : listTemplate)
  1162. {
  1163. nJson json1;
  1164. json1["opName"] = "TMS_DeleteExecPlanTemplate";
  1165. json1["Key"] = QUuid::createUuid().toString().toStdString();
  1166. nJson json2;
  1167. json2["channelID"] = it.channelInfo.ChannelID;
  1168. json2["templateName"] = it.templateName.toStdString();
  1169. json1["paramList"] = json2;
  1170. json0.push_back(json1);
  1171. }
  1172. /* 打印生成的JSON */
  1173. LH_WRITE_LOG_DEBUG(QString::fromStdString(json0.dump(4)));
  1174. QString strCmd = QString::fromStdString(json0.dump());
  1175. QString strRet;
  1176. auto ret = m_httpApi->DBDoInterface(enDBOperatorType::EDBOT_BatchTransAction, strCmd, strRet, true);
  1177. if(ret != 0)
  1178. {
  1179. LH_WRITE_ERROR(QString("获取模板失败:%1, 错误信息:%2").arg(ret).arg(m_httpApi->DoGetLastError(&ret)));
  1180. return false;
  1181. }
  1182. // LH_WRITE_LOG_DEBUG(strRet);
  1183. return true;
  1184. }
  1185. /**
  1186. * @brief 修改模版,先删除该频率相同名称的模版,再插入新的模版
  1187. *
  1188. * @param info
  1189. * @param list 新的模版计划
  1190. * @return true
  1191. * @return false
  1192. */
  1193. bool FromWebAPI::modifyTemplate(const OneTemplateInfo& info, QList<OnePlanItemInfo>& list)
  1194. {
  1195. if(deleteTemplate(info) == false)
  1196. {
  1197. LH_WRITE_ERROR("删除模版失败");
  1198. return false;
  1199. }
  1200. if(saveTemplate(info.templateName, list) == false)
  1201. {
  1202. LH_WRITE_ERROR("保存模版失败");
  1203. return false;
  1204. }
  1205. return true;
  1206. }
  1207. /* 批量修改模版 */
  1208. bool FromWebAPI::modifyTemplateList(const QMap<OneTemplateInfo, QList<OnePlanItemInfo>>& mapTemplate)
  1209. {
  1210. /* 先批量删除模版 */
  1211. if(deleteTemplateList(mapTemplate.keys()) == false)
  1212. {
  1213. LH_WRITE_ERROR("批量删除模版失败");
  1214. return false;
  1215. }
  1216. /* 再批量插入模版 */
  1217. if(!saveTemplateList(mapTemplate))
  1218. {
  1219. LH_WRITE_ERROR("批量插入模版失败");
  1220. return false;
  1221. }
  1222. return true;
  1223. }