FromWebAPI.cpp 46 KB

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