FromWebAPI.cpp 44 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395
  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. }
  1224. /**
  1225. * @brief 更新模板名称
  1226. *
  1227. * @param mapTemplateName
  1228. * @return true
  1229. * @return false
  1230. */
  1231. bool FromWebAPI::updateTemplateName(const QMap<OneTemplateInfo, QString>& mapTemplateName)
  1232. {
  1233. if(m_httpApi == nullptr)
  1234. {
  1235. LH_WRITE_ERROR("WebAPI is nullptr");
  1236. return false;
  1237. }
  1238. nJson json0 = nJson::array();
  1239. for(auto it = mapTemplateName.begin(), end = mapTemplateName.end(); it != end; it++)
  1240. {
  1241. nJson json1;
  1242. json1["opName"] = "TMS_UpdateExecPlanTemplateName";
  1243. json1["Key"] = QUuid::createUuid().toString().toStdString();
  1244. nJson json2;
  1245. json2["channelID"] = it.key().channelInfo.ChannelID;
  1246. json2["oldTemplateName"] = it.key().templateName.toStdString();
  1247. json2["newTemplateName"] = it.value().toStdString();
  1248. json1["paramList"] = json2;
  1249. json0.push_back(json1);
  1250. }
  1251. /* 打印生成的JSON */
  1252. // LH_WRITE_LOG_DEBUG(QString::fromStdString(json0.dump(4)));
  1253. QString strCmd = QString::fromStdString(json0.dump());
  1254. QString strRet;
  1255. auto ret = m_httpApi->DBDoInterface(enDBOperatorType::EDBOT_BatchTransAction, strCmd, strRet, true);
  1256. if(ret != 0)
  1257. {
  1258. LH_WRITE_ERROR(QString("更新模板名称失败:%1, 错误信息:%2").arg(ret).arg(m_httpApi->DoGetLastError(&ret)));
  1259. return false;
  1260. }
  1261. // LH_WRITE_LOG_DEBUG(strRet);
  1262. return true;
  1263. }