FromWebAPI.cpp 45 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418
  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(OneTemplateInfo tmpInfo, 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"] = tmpInfo.templateName.toStdString();
  879. json1["channelID"] = tmpInfo.channelInfo.ChannelID;
  880. json0["paramList"] = json1;
  881. QString strCmd = QString::fromStdString(json0.dump());
  882. QString strRet;
  883. auto ret = m_httpApi->DBDoInterface(enDBOperatorType::EDBOT_Select, strCmd, strRet, true);
  884. if(ret != 0)
  885. {
  886. LH_WRITE_ERROR(QString("获取模板失败:%1, 错误信息:%2").arg(ret).arg(m_httpApi->DoGetLastError(&ret)));
  887. return false;
  888. }
  889. /* 解析获取到的JSON数据 */
  890. try
  891. {
  892. nJson json2 = nJson::parse(strRet.toStdString());
  893. int retCode = json2["code"].get<int>();
  894. if(retCode != 0)
  895. {
  896. LH_WRITE_ERROR("获取模板失败");
  897. return false;
  898. }
  899. nJson result = json2["result"];
  900. for(auto& it : result)
  901. {
  902. OnePlanItemInfo info;
  903. info.ChannelID = it["channelID"].is_null() ? -1 : it["channelID"].get<int>();
  904. info.ChannelName = QString::fromStdString(it["channelName"].get<std::string>());
  905. info.onWeekDay = static_cast<enum_WeekDay>(it["onWeekDay"].get<int>());
  906. info.onDateTime.setDate(QDate::fromString(QString::fromStdString(it["onDate"].get<std::string>()), "yyyy-MM-dd"));
  907. info.onDateTime.setTime(QTime::fromString(QString::fromStdString(it["onTime"].get<std::string>()), "hh:mm:ss"));
  908. info.offWeekDay = static_cast<enum_WeekDay>(it["offWeekDay"].get<int>());
  909. info.offDateTime.setDate(QDate::fromString(QString::fromStdString(it["offDate"].get<std::string>()), "yyyy-MM-dd"));
  910. info.offDateTime.setTime(QTime::fromString(QString::fromStdString(it["offTime"].get<std::string>()), "hh:mm:ss"));
  911. list.append(info);
  912. }
  913. LH_WRITE_LOG_DEBUG(QString("获取模板数据成功,数据数目:%1").arg(list.size()));
  914. }
  915. catch (const nJson::parse_error& e)
  916. {
  917. LH_WRITE_ERROR(QString("解析模板失败:%1").arg(e.what()));
  918. return false;
  919. }
  920. catch (const nJson::exception& e)
  921. {
  922. LH_WRITE_ERROR(QString("解析模板失败:%1").arg(e.what()));
  923. return false;
  924. }
  925. catch(...)
  926. {
  927. LH_WRITE_ERROR("解析模板失败");
  928. return false;
  929. }
  930. return true;
  931. }
  932. /* 获取多个模板的内容 */
  933. bool FromWebAPI::getTemplateData(QList<OneTemplateInfo>& listTemplate, QMap<int, QList<OnePlanItemInfo>>& mapPlan)
  934. {
  935. if(m_httpApi == nullptr)
  936. {
  937. LH_WRITE_ERROR("WebAPI is nullptr");
  938. return false;
  939. }
  940. nJson json0 = nJson::array();
  941. for(auto& it : listTemplate)
  942. {
  943. nJson json1;
  944. json1["opName"] = "TMS_GetExecPlanTemplateData";
  945. /* 这里的Key使用频率ID,方便后面区分是哪个频率的数据 */
  946. json1["Key"] = it.channelInfo.ChannelID;
  947. nJson json2;
  948. json2["templateName"] = it.templateName.toStdString();
  949. json2["channelID"] = it.channelInfo.ChannelID;
  950. json1["paramList"] = json2;
  951. json0.push_back(json1);
  952. }
  953. /* 打印生成的JSON */
  954. // LH_WRITE_LOG_DEBUG(QString::fromStdString(json0.dump(4)));
  955. QString strCmd = QString::fromStdString(json0.dump());
  956. QString strRet;
  957. auto ret = m_httpApi->DBDoInterface(enDBOperatorType::EDBOT_BatchTransAction, strCmd, strRet, true);
  958. if(ret != 0)
  959. {
  960. LH_WRITE_ERROR(QString("获取模板失败:%1, 错误信息:%2").arg(ret).arg(m_httpApi->DoGetLastError(&ret)));
  961. return false;
  962. }
  963. LH_WRITE_LOG_DEBUG(QString("获取到的json数据的大小:%1").arg(strRet.size()));
  964. /* 解析获取到的JSON数据 */
  965. try
  966. {
  967. nJson jsonRet = nJson::parse(strRet.toStdString());
  968. // LH_WRITE_LOG_DEBUG(QString("\n: %1").arg(QString::fromStdString(jsonRet.dump(4))));
  969. int retCode = jsonRet["code"].get<int>();
  970. if(retCode != 0)
  971. {
  972. LH_WRITE_ERROR("获取模板数据失败");
  973. return false;
  974. }
  975. nJson data = jsonRet["data"];
  976. for(auto& it : data)
  977. {
  978. /* 逐步获取对应频率的计划信息 */
  979. int retChnID = QString::fromStdString(it["key"].get<std::string>()).toInt();
  980. if(retChnID == 0)
  981. {
  982. LH_WRITE_ERROR("获取到的频率ID为0");
  983. continue;
  984. }
  985. nJson value = it["value"];
  986. if(value.is_null())
  987. {
  988. LH_WRITE_ERROR("获取到的值为空");
  989. continue;
  990. }
  991. int retCode1 = value["code"].get<int>();
  992. if(retCode1 != 0)
  993. {
  994. LH_WRITE_ERROR(QString("获取模板:%1数据失败").arg(retChnID));
  995. continue;
  996. }
  997. nJson result = value["result"];
  998. QList<OnePlanItemInfo> listPlan;
  999. for(auto& plan : result)
  1000. {
  1001. OnePlanItemInfo info;
  1002. info.ChannelID = plan["channelID"].is_null() ? -1 : plan["channelID"].get<int>();
  1003. info.ChannelName = plan["channelName"].is_null() ? "" : QString::fromStdString(plan["channelName"].get<std::string>());
  1004. info.onWeekDay = static_cast<enum_WeekDay>(plan["onWeekDay"].get<int>());
  1005. info.onDateTime.setDate(QDate::fromString(QString::fromStdString(plan["onDate"].get<std::string>()), "yyyy-MM-dd"));
  1006. info.onDateTime.setTime(QTime::fromString(QString::fromStdString(plan["onTime"].get<std::string>()), "hh:mm:ss"));
  1007. info.offWeekDay = static_cast<enum_WeekDay>(plan["offWeekDay"].get<int>());
  1008. info.offDateTime.setDate(QDate::fromString(QString::fromStdString(plan["offDate"].get<std::string>()), "yyyy-MM-dd"));
  1009. info.offDateTime.setTime(QTime::fromString(QString::fromStdString(plan["offTime"].get<std::string>()), "hh:mm:ss"));
  1010. listPlan.append(info);
  1011. }
  1012. mapPlan.insert(retChnID, listPlan);
  1013. }
  1014. }
  1015. catch (const nJson::parse_error& e)
  1016. {
  1017. LH_WRITE_ERROR(QString("解析模板失败:%1").arg(e.what()));
  1018. return false;
  1019. }
  1020. catch (const nJson::exception& e)
  1021. {
  1022. LH_WRITE_ERROR(QString("解析模板失败:%1").arg(e.what()));
  1023. return false;
  1024. }
  1025. catch(...)
  1026. {
  1027. LH_WRITE_ERROR("解析模板失败");
  1028. return false;
  1029. }
  1030. LH_WRITE_LOG_DEBUG(QString("获取多个频率模板成功,频率数目:%1").arg(mapPlan.size()));
  1031. return true;
  1032. }
  1033. /* 获取模板列表 */
  1034. bool FromWebAPI::getTemplateList(QMultiMap<int, OneTemplateInfo>& mapTemplate)
  1035. {
  1036. if(m_httpApi == nullptr)
  1037. {
  1038. LH_WRITE_ERROR("WebAPI is nullptr");
  1039. return false;
  1040. }
  1041. nJson json0;
  1042. json0["opName"] = "TMS_GetExecPlanTemplateList";
  1043. QString strCmd = QString::fromStdString(json0.dump());
  1044. QString strRet;
  1045. auto ret = m_httpApi->DBDoInterface(enDBOperatorType::EDBOT_Select, strCmd, strRet, true);
  1046. if(ret != 0)
  1047. {
  1048. LH_WRITE_ERROR(QString("获取模板列表失败:%1, 错误信息:%2").arg(ret).arg(m_httpApi->DoGetLastError(&ret)));
  1049. return false;
  1050. }
  1051. /* 解析获取到的JSON数据 */
  1052. // LH_WRITE_LOG_DEBUG(strRet);
  1053. try
  1054. {
  1055. nJson json1 = nJson::parse(strRet.toStdString());
  1056. int retCode = json1["code"].get<int>();
  1057. if(retCode != 0)
  1058. {
  1059. LH_WRITE_ERROR("获取模板列表失败");
  1060. return false;
  1061. }
  1062. nJson result = json1["result"];
  1063. for(auto& it : result)
  1064. {
  1065. OneTemplateInfo info;
  1066. info.channelInfo.ChannelID = it["channelID"].get<int>();
  1067. info.templateName = QString::fromStdString(it["templateName"].get<std::string>());
  1068. mapTemplate.insert(info.channelInfo.ChannelID, info);
  1069. }
  1070. } catch (const nJson::parse_error& e) {
  1071. LH_WRITE_ERROR(QString("解析模板列表失败:%1").arg(e.what()));
  1072. return false;
  1073. }
  1074. catch (const nJson::exception& e)
  1075. {
  1076. LH_WRITE_ERROR(QString("解析模板列表失败:%1").arg(e.what()));
  1077. return false;
  1078. }
  1079. catch(...)
  1080. {
  1081. LH_WRITE_ERROR("解析模板列表失败");
  1082. return false;
  1083. }
  1084. // for(auto it = list.begin(); it != list.end(); it++)
  1085. // {
  1086. // LH_WRITE_LOG_DEBUG(QString("模板名称:%1, 类型:%2").arg(it.key()).arg(it.value()));
  1087. // }
  1088. return true;
  1089. }
  1090. /* 获取某个频率的模版列表 */
  1091. bool FromWebAPI::getTemplateList(int chnID, QList<OneTemplateInfo>& listTemplate)
  1092. {
  1093. if(m_httpApi == nullptr)
  1094. {
  1095. LH_WRITE_ERROR("WebAPI is nullptr");
  1096. return false;
  1097. }
  1098. nJson json0;
  1099. json0["opName"] = "TMS_GetExecPlanOneTemplateList";
  1100. nJson jsonParam;
  1101. jsonParam["channelID"] = chnID;
  1102. json0["paramList"] = jsonParam;
  1103. /* 发送请求 */
  1104. QString strCmd = QString::fromStdString(json0.dump());
  1105. QString strRet;
  1106. auto ret = m_httpApi->DBDoInterface(enDBOperatorType::EDBOT_Select, strCmd, strRet, true);
  1107. if(ret != 0)
  1108. {
  1109. LH_WRITE_ERROR(QString("获取模板列表失败:%1, 错误信息:%2").arg(ret).arg(m_httpApi->DoGetLastError(&ret)));
  1110. return false;
  1111. }
  1112. /* 解析获取到的JSON数据 */
  1113. // LH_WRITE_LOG_DEBUG(strRet);
  1114. try
  1115. {
  1116. nJson json1 = nJson::parse(strRet.toStdString());
  1117. int retCode = json1["code"].get<int>();
  1118. if(retCode != 0)
  1119. {
  1120. LH_WRITE_ERROR("获取模板列表失败");
  1121. return false;
  1122. }
  1123. nJson result = json1["result"];
  1124. for(auto& it : result)
  1125. {
  1126. OneTemplateInfo info;
  1127. info.channelInfo.ChannelID = it["channelID"].get<int>();
  1128. info.templateName = QString::fromStdString(it["templateName"].get<std::string>());
  1129. listTemplate.append(info);
  1130. }
  1131. } catch (const nJson::parse_error& e) {
  1132. LH_WRITE_ERROR(QString("解析模板列表失败:%1").arg(e.what()));
  1133. return false;
  1134. }
  1135. catch (const nJson::exception& e)
  1136. {
  1137. LH_WRITE_ERROR(QString("解析模板列表失败:%1").arg(e.what()));
  1138. return false;
  1139. }
  1140. catch(...)
  1141. {
  1142. LH_WRITE_ERROR("解析模板列表失败");
  1143. return false;
  1144. }
  1145. return true;
  1146. }
  1147. /* 删除一个模板 */
  1148. bool FromWebAPI::deleteTemplate(const OneTemplateInfo& info)
  1149. {
  1150. if(m_httpApi == nullptr)
  1151. {
  1152. LH_WRITE_ERROR("WebAPI is nullptr");
  1153. return false;
  1154. }
  1155. nJson json0;
  1156. json0["opName"] = "TMS_DeleteExecPlanTemplate";
  1157. nJson json1;
  1158. json1["channelID"] = info.channelInfo.ChannelID;
  1159. json1["templateName"] = info.templateName.toStdString();
  1160. json0["paramList"] = json1;
  1161. QString strCmd = QString::fromStdString(json0.dump());
  1162. QString strRet;
  1163. auto ret = m_httpApi->DBDoInterface(enDBOperatorType::EDBOT_Delete, strCmd, strRet, true);
  1164. if(ret != 0)
  1165. {
  1166. LH_WRITE_ERROR(QString("删除模板失败:%1, 错误信息:%2").arg(ret).arg(m_httpApi->DoGetLastError(&ret)));
  1167. return false;
  1168. }
  1169. return true;
  1170. }
  1171. /* 一次删除多个模版 */
  1172. bool FromWebAPI::deleteTemplateList(const QList<OneTemplateInfo>& listTemplate)
  1173. {
  1174. if(m_httpApi == nullptr)
  1175. {
  1176. LH_WRITE_ERROR("WebAPI is nullptr");
  1177. return false;
  1178. }
  1179. nJson json0 = nJson::array();
  1180. for(auto& it : listTemplate)
  1181. {
  1182. nJson json1;
  1183. json1["opName"] = "TMS_DeleteExecPlanTemplate";
  1184. json1["Key"] = QUuid::createUuid().toString().toStdString();
  1185. nJson json2;
  1186. json2["channelID"] = it.channelInfo.ChannelID;
  1187. json2["templateName"] = it.templateName.toStdString();
  1188. json1["paramList"] = json2;
  1189. json0.push_back(json1);
  1190. }
  1191. /* 打印生成的JSON */
  1192. // LH_WRITE_LOG_DEBUG(QString::fromStdString(json0.dump(4)));
  1193. QString strCmd = QString::fromStdString(json0.dump());
  1194. QString strRet;
  1195. auto ret = m_httpApi->DBDoInterface(enDBOperatorType::EDBOT_BatchTransAction, strCmd, strRet, true);
  1196. if(ret != 0)
  1197. {
  1198. LH_WRITE_ERROR(QString("获取模板失败:%1, 错误信息:%2").arg(ret).arg(m_httpApi->DoGetLastError(&ret)));
  1199. return false;
  1200. }
  1201. // LH_WRITE_LOG_DEBUG(strRet);
  1202. return true;
  1203. }
  1204. /**
  1205. * @brief 修改模版,先删除该频率相同名称的模版,再插入新的模版
  1206. *
  1207. * @param info
  1208. * @param list 新的模版计划
  1209. * @return true
  1210. * @return false
  1211. */
  1212. bool FromWebAPI::modifyTemplate(const OneTemplateInfo& info, QList<OnePlanItemInfo>& list)
  1213. {
  1214. if(deleteTemplate(info) == false)
  1215. {
  1216. LH_WRITE_ERROR("删除模版失败");
  1217. return false;
  1218. }
  1219. if(saveTemplate(info.templateName, list) == false)
  1220. {
  1221. LH_WRITE_ERROR("保存模版失败");
  1222. return false;
  1223. }
  1224. return true;
  1225. }
  1226. /* 批量修改模版 */
  1227. bool FromWebAPI::modifyTemplateList(const QMap<OneTemplateInfo, QList<OnePlanItemInfo>>& mapTemplate)
  1228. {
  1229. /* 先批量删除模版 */
  1230. if(deleteTemplateList(mapTemplate.keys()) == false)
  1231. {
  1232. LH_WRITE_ERROR("批量删除模版失败");
  1233. return false;
  1234. }
  1235. /* 再批量插入模版 */
  1236. if(!saveTemplateList(mapTemplate))
  1237. {
  1238. LH_WRITE_ERROR("批量插入模版失败");
  1239. return false;
  1240. }
  1241. return true;
  1242. }
  1243. /**
  1244. * @brief 更新模板名称
  1245. *
  1246. * @param mapTemplateName
  1247. * @return true
  1248. * @return false
  1249. */
  1250. bool FromWebAPI::updateTemplateName(const QMap<OneTemplateInfo, QString>& mapTemplateName)
  1251. {
  1252. if(m_httpApi == nullptr)
  1253. {
  1254. LH_WRITE_ERROR("WebAPI is nullptr");
  1255. return false;
  1256. }
  1257. nJson json0 = nJson::array();
  1258. for(auto it = mapTemplateName.begin(), end = mapTemplateName.end(); it != end; it++)
  1259. {
  1260. nJson json1;
  1261. json1["opName"] = "TMS_UpdateExecPlanTemplateName";
  1262. json1["Key"] = QUuid::createUuid().toString().toStdString();
  1263. nJson json2;
  1264. json2["channelID"] = it.key().channelInfo.ChannelID;
  1265. json2["oldTemplateName"] = it.key().templateName.toStdString();
  1266. json2["newTemplateName"] = it.value().toStdString();
  1267. json1["paramList"] = json2;
  1268. json0.push_back(json1);
  1269. }
  1270. /* 打印生成的JSON */
  1271. // LH_WRITE_LOG_DEBUG(QString::fromStdString(json0.dump(4)));
  1272. QString strCmd = QString::fromStdString(json0.dump());
  1273. QString strRet;
  1274. auto ret = m_httpApi->DBDoInterface(enDBOperatorType::EDBOT_BatchTransAction, strCmd, strRet, true);
  1275. if(ret != 0)
  1276. {
  1277. LH_WRITE_ERROR(QString("更新模板名称失败:%1, 错误信息:%2").arg(ret).arg(m_httpApi->DoGetLastError(&ret)));
  1278. return false;
  1279. }
  1280. // LH_WRITE_LOG_DEBUG(strRet);
  1281. return true;
  1282. }