FromWebAPI.cpp 31 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000
  1. #include "FromWebAPI.h"
  2. #include <QVector>
  3. #include <QString>
  4. #include <QUuid>
  5. #include <QApplication>
  6. #include "LHQLogAPI.h"
  7. #include "TransmitterSwitchInfo.h"
  8. FromWebAPI::FromWebAPI()
  9. {
  10. }
  11. FromWebAPI::~FromWebAPI()
  12. {
  13. if(m_httpApi != nullptr)
  14. {
  15. delete m_httpApi;
  16. m_httpApi = nullptr;
  17. }
  18. }
  19. /* 初始化WebApi */
  20. bool FromWebAPI::initWebApi(const QString& url, const QString& serverID, const QString& serverKey)
  21. {
  22. if(m_httpApi == nullptr)
  23. {
  24. m_httpApi = new lhhttpapi;
  25. }
  26. #if defined(Q_OS_WIN)
  27. #ifdef QT_DEBUG
  28. QString libFile = QString("%1/LHSqlWebInterface.dll").arg(QApplication::applicationDirPath());
  29. #else
  30. QString libFile = QString("%1/LHSqlWebInterface.dll").arg(QApplication::applicationDirPath());
  31. #endif
  32. #elif defined(Q_OS_LINUX)
  33. #ifdef QT_DEBUG
  34. QString libFile = QString("%1/libLHSqlWebInterface.so").arg(QApplication::applicationDirPath());
  35. #else
  36. QString libFile = QString("%1/libLHSqlWebInterface.so").arg(QApplication::applicationDirPath());
  37. #endif
  38. #endif
  39. if(!m_httpApi->Load(libFile))
  40. {
  41. LH_WRITE_ERROR("Load WebAPI failed");
  42. return false;
  43. }
  44. LH_WRITE_LOG_DEBUG(QString("URL:%1").arg(url));
  45. LH_WRITE_LOG_DEBUG(QString("ServerID:%1").arg(serverID));
  46. LH_WRITE_LOG_DEBUG(QString("ServerKey:%1").arg(serverKey));
  47. auto pHttp = m_httpApi->DBInit(url.toStdString().c_str(), true);
  48. int ret = 0;
  49. #ifdef QT_DEBUG
  50. /* 获取服务器列表 */
  51. char serverList[8192]={0};
  52. ret = m_httpApi->DBGetServerList(serverList, 8192-1);
  53. if(ret != 0)
  54. {
  55. LH_WRITE_ERROR(QString("Get server list failed:%1, error info:%2").arg(ret).arg(m_httpApi->DoGetLastError(&ret)));
  56. return false;
  57. }
  58. // LH_WRITE_LOG(QString("\nGet server list success:%1").arg(serverList));
  59. #endif
  60. /* 登录,第二个参数是限制的服务 */
  61. // ret = m_httpApi->DBLogin("", serverID, serverKey, m_userToken, true, pHttp);
  62. ret = m_httpApi->DBLogin("", serverID, "ESM8C", m_userToken, true, pHttp);
  63. if(ret != 0)
  64. {
  65. LH_WRITE_ERROR(QString("Login failed:%1, error info:%2").arg(ret).arg(m_httpApi->DoGetLastError(&ret)));
  66. return false;
  67. }
  68. LH_WRITE_LOG("\n");
  69. LH_WRITE_LOG("WebAPI Login success!");
  70. return true;
  71. }
  72. /* 获取设备信息 */
  73. bool FromWebAPI::getDeviceInfo(QMap<QString, DeviceInfo>& mapDevice)
  74. {
  75. if(m_httpApi == nullptr)
  76. {
  77. LH_WRITE_ERROR("WebAPI is nullptr");
  78. return false;
  79. }
  80. nJson json0;
  81. json0["opName"] = "ESM8C_GetDevice";
  82. QString strCmd = QString::fromStdString(json0.dump());
  83. QString strRet;
  84. auto ret = m_httpApi->DBDoInterface(enDBOperatorType::EDBOT_Select, strCmd, strRet, true);
  85. if(ret != 0)
  86. {
  87. LH_WRITE_ERROR(QString("从数据库获取设备失败:%1, 错误信息:%2").arg(ret).arg(m_httpApi->DoGetLastError(&ret)));
  88. return false;
  89. }
  90. /* 解析获取到的JSON数据 */
  91. // LH_WRITE_LOG_DEBUG(strRet);
  92. try
  93. {
  94. nJson json1 = nJson::parse(strRet.toStdString());
  95. int retCode = json1["code"].get<int>();
  96. if(retCode != 0)
  97. {
  98. LH_WRITE_ERROR("获取设备数据失败");
  99. return false;
  100. }
  101. nJson result = json1["result"];
  102. for(auto& it : result)
  103. {
  104. DeviceInfo DevInfo;
  105. QString devName = QString::fromStdString(it["dname"].get<std::string>());
  106. DevInfo.devName = devName;
  107. DevInfo.DID = it["did"].is_null() ? -1 : it["did"].get<int>();
  108. DevInfo.DTID = it["dtid"].is_null() ? -1 : it["dtid"].get<int>();
  109. DevInfo.MPID = it["mpid"].is_null() ? -1 : it["mpid"].get<int>();
  110. DevInfo.PTTypeCode = it["pttypecode"].is_null() ? -1 : it["pttypecode"].get<int>();
  111. DevInfo.ChannelID = it["chnid"].is_null() ? -1 : it["chnid"].get<int>();
  112. if(DevInfo.ChannelID <= 0)
  113. {
  114. LH_WRITE_LOG_DEBUG(QString("通道ID错误:%1").arg(DevInfo.ChannelID));
  115. continue;
  116. }
  117. /* 查找对应的设备类型,根据PTTypeCode来查找,这个是唯一的 */
  118. auto devType = DevTypeContainer.getDevType(DevInfo.PTTypeCode);
  119. if(devType.PTTypeCode < 0)
  120. {
  121. LH_WRITE_LOG_DEBUG(QString("未找到设备类型:%1").arg(DevInfo.PTTypeCode));
  122. continue;
  123. }
  124. DevInfo.DevType = devType;
  125. /* 检查有没有设置主备 */
  126. int devMB = it["dClass"].is_null() ? -1 : it["dClass"].get<int>();
  127. if(devMB < 0)
  128. {
  129. LH_WRITE_ERROR(QString("设备类型:%1《主/备》 类型为空").arg(DevInfo.DevType.PTTypeCode));
  130. continue;
  131. }
  132. mapDevice.insert(DevInfo.devName, DevInfo);
  133. }
  134. LH_WRITE_LOG(QString("获取设备数据成功,设备数目:%1").arg(mapDevice.size()));
  135. } catch (const nJson::parse_error& e) {
  136. LH_WRITE_ERROR("解析ESM-8C设备数据失败");
  137. return false;
  138. }
  139. catch (const nJson::exception& e)
  140. {
  141. LH_WRITE_ERROR("解析ESM-8C设备数据失败");
  142. return false;
  143. }
  144. catch(...)
  145. {
  146. LH_WRITE_ERROR("解析ESM-8C设备数据失败");
  147. return false;
  148. }
  149. return true;
  150. }
  151. /* 获取频率信息 */
  152. bool FromWebAPI::getChannelInfo(QMap<int, ChannelInfo>& mapFreq)
  153. {
  154. if(m_httpApi == nullptr)
  155. {
  156. LH_WRITE_ERROR("WebAPI is nullptr");
  157. return false;
  158. }
  159. nJson json0;
  160. json0["opName"] = "ESM8C_GetChannel";
  161. QString strCmd = QString::fromStdString(json0.dump());
  162. QString strRet;
  163. auto ret = m_httpApi->DBDoInterface(enDBOperatorType::EDBOT_Select, strCmd, strRet, true);
  164. if(ret != 0)
  165. {
  166. LH_WRITE_ERROR(QString("从数据库获取频率信息失败:%1, 错误信息:%2").arg(ret).arg(m_httpApi->DoGetLastError(&ret)));
  167. return false;
  168. }
  169. try
  170. {
  171. nJson json1 = nJson::parse(strRet.toStdString());
  172. int retCode = json1["code"].get<int>();
  173. if(retCode != 0)
  174. {
  175. LH_WRITE_ERROR("获取频率数据失败");
  176. return false;
  177. }
  178. nJson result = json1["result"];
  179. for(auto& it : result)
  180. {
  181. ChannelInfo freqInfo;
  182. freqInfo.ChannelID = it["chnid"].is_null() ? -1 : it["chnid"].get<int>();
  183. if(freqInfo.ChannelID <= 0)
  184. {
  185. LH_WRITE_LOG_DEBUG(QString("通道ID错误:%1").arg(freqInfo.ChannelID));
  186. continue;
  187. }
  188. freqInfo.ChannelName = QString::fromStdString(it["chnname"].get<std::string>());
  189. mapFreq.insert(freqInfo.ChannelID, freqInfo);
  190. }
  191. }
  192. catch (const nJson::parse_error& e) {
  193. LH_WRITE_ERROR("解析频率信息数据失败");
  194. return false;
  195. }
  196. catch (const nJson::exception& e)
  197. {
  198. LH_WRITE_ERROR("解析频率信息数据失败");
  199. return false;
  200. }
  201. catch(...)
  202. {
  203. LH_WRITE_ERROR("解析频率信息数据失败");
  204. return false;
  205. }
  206. LH_WRITE_LOG_DEBUG(QString("获取频率数据成功,频率数目:%1").arg(mapFreq.size()));
  207. return true;
  208. }
  209. /**
  210. * @brief 将数据写入EQM数据库,这里不需要模版编号和名称,编号都设置成0
  211. *
  212. * @param list
  213. * @return true
  214. * @return false
  215. */
  216. bool FromWebAPI::insertData(QList<ExecPlanItemInfo>& list)
  217. {
  218. if(m_httpApi == nullptr)
  219. {
  220. LH_WRITE_ERROR("WebAPI is nullptr");
  221. return false;
  222. }
  223. /* 先删除表格中的数据 */
  224. deleteAllTransmitterPlan();
  225. QDate zeroDate(1970,1,1);
  226. /* 写入数据 */
  227. nJson json0 = nJson::array();
  228. try{
  229. for(auto& it : list)
  230. {
  231. nJson json1;
  232. json1["opName"] = "ESM8C_InsertDataToExecPlan";
  233. json1["Key"] = QUuid::createUuid().toString().toStdString();
  234. nJson json2;
  235. json2["ExecType"] = it.ExecType;
  236. json2["WeekDay"] = it.WeekDay;
  237. json2["Date"] = it.dateTime.date().toString("yyyy-MM-dd").toStdString();
  238. json2["ExecTime"] = it.dateTime.time().toString("hh:mm:ss").toStdString();
  239. json2["DeviceName"] = it.devName.toStdString();
  240. json2["ActionName"] = it.actionName.toStdString();
  241. json2["ActionID"] = static_cast<int>(it.actionID);
  242. /* 根据设备名称找到设备信息 */
  243. auto devInfo = DeviceContainer.getDevice(it.devName);
  244. if(devInfo.PTTypeCode < 0)
  245. {
  246. LH_WRITE_ERROR(QString("未找到设备:%1").arg(it.devName));
  247. continue;
  248. }
  249. json2["PTTypeCode"] = devInfo.PTTypeCode;
  250. json2["DID"] = devInfo.DID;
  251. json2["MPID"] = devInfo.MPID;
  252. json2["ChannelID"] = devInfo.ChannelID;
  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 list
  301. * @return true
  302. * @return false
  303. */
  304. bool FromWebAPI::getExecPlanData(QList<ExecPlanItemInfo>& list)
  305. {
  306. if(m_httpApi == nullptr)
  307. {
  308. LH_WRITE_ERROR("WebAPI is nullptr");
  309. return false;
  310. }
  311. nJson json0;
  312. json0["opName"] = "ESM8C_GetExecPlan";
  313. QString strCmd = QString::fromStdString(json0.dump());
  314. QString strRet;
  315. auto ret = m_httpApi->DBDoInterface(enDBOperatorType::EDBOT_Select, strCmd, strRet, true);
  316. if(ret != 0)
  317. {
  318. LH_WRITE_ERROR(QString("从EQM获取tExecPlan表格数据失败:%1, 错误信息:%2").arg(ret).arg(m_httpApi->DoGetLastError(&ret)));
  319. return false;
  320. }
  321. /* 解析获取到的JSON数据 */
  322. // SPDLOG_LOGGER_DEBUG(m_logger,"获取执行计划:\n{}",strRet.toStdString());
  323. try
  324. {
  325. nJson json1 = nJson::parse(strRet.toStdString());
  326. int retCode = json1["code"].get<int>();
  327. if(retCode != 0)
  328. {
  329. LH_WRITE_ERROR("获取tExecPlan表格数据失败");
  330. return false;
  331. }
  332. nJson result = json1["result"];
  333. for(auto& it : result)
  334. {
  335. ExecPlanItemInfo info;
  336. info.devName = QString::fromStdString(it["deviceName"].get<std::string>());
  337. if(!DeviceContainer.findDevice(info.devName))
  338. {
  339. LH_WRITE_LOG(QString("未找到设备:%1").arg(info.devName));
  340. continue;
  341. }
  342. info.ExecType = it["execType"].get<int>();
  343. info.WeekDay = static_cast<enum_WeekDay>(it["weekDay"].get<int>());
  344. auto tmpDate = it["date"].is_null() ? "" : it["date"].get<std::string>();
  345. if(!tmpDate.empty())
  346. {
  347. info.dateTime.setDate(QDate::fromString(QString::fromStdString(tmpDate),"yyyy-MM-dd"));
  348. }
  349. info.dateTime.setTime(QTime::fromString(QString::fromStdString(it["execTime"].get<std::string>()),"hh:mm:ss"));
  350. info.actionName = QString::fromStdString(it["actionName"].get<std::string>());
  351. info.actionID = it["actionID"].get<int>();
  352. list.append(info);
  353. }
  354. } catch (const nJson::parse_error& e) {
  355. LH_WRITE_ERROR(QString("解析tExecPlan表格数据失败:%1").arg(e.what()));
  356. return false;
  357. }
  358. catch (const nJson::exception& e)
  359. {
  360. LH_WRITE_ERROR(QString("解析tExecPlan表格数据失败:%1").arg(e.what()));
  361. return false;
  362. }
  363. catch(...)
  364. {
  365. LH_WRITE_ERROR("解析tExecPlan表格数据失败");
  366. return false;
  367. }
  368. LH_WRITE_LOG_DEBUG(QString("从EQM.tExecPlan表格获取数据成功,计划数目:%1").arg(list.size()));
  369. return true;
  370. }
  371. /**
  372. * @brief 将页面的配置写入数据库,主要是默认计划和执行模式
  373. *
  374. * @param mapConfig
  375. * @return true
  376. * @return false
  377. */
  378. bool FromWebAPI::insertConfigData(QMap<int, ConfigData>& list)
  379. {
  380. if(m_httpApi == nullptr)
  381. {
  382. LH_WRITE_ERROR("WebAPI is nullptr");
  383. return false;
  384. }
  385. deleteConfigData(list);
  386. nJson json0 = nJson::array();
  387. try{
  388. for(auto begin = list.begin(), end = list.end(); begin != end; begin++)
  389. {
  390. nJson json1;
  391. json1["opName"] = "ESM8C_InsertExecPlanConfig";
  392. json1["Key"] = QUuid::createUuid().toString().toStdString();
  393. nJson json2;
  394. json2["keyWord"] = begin->key;
  395. json2["value1"] = begin->value;
  396. json2["updateTime"] = begin->updateTime.toString("yyyy-MM-dd hh:mm:ss").toStdString();
  397. json2["notes"] = begin->notes.toStdString();
  398. json1["paramList"] = json2;
  399. json0.push_back(json1);
  400. }
  401. }catch (const nJson::parse_error& e) {
  402. SPDLOG_ERROR("生成json数据失败:{}", e.what());
  403. return false;
  404. }
  405. catch (const nJson::exception& e)
  406. {
  407. SPDLOG_ERROR("生成json数据失败:{}", e.what());
  408. return false;
  409. }
  410. catch (...)
  411. {
  412. SPDLOG_ERROR("生成json数据失败");
  413. return false;
  414. }
  415. /* 写入EQM数据库 */
  416. QString strCmd = QString::fromStdString(json0.dump());
  417. QString strRet;
  418. auto ret = m_httpApi->DBDoInterface(enDBOperatorType::EDBOT_BatchTransAction, strCmd, strRet, true);
  419. if(ret != 0)
  420. {
  421. LH_WRITE_ERROR(QString("写入tExecPlanConfig失败:%1, 错误信息:%2").arg(ret).arg(m_httpApi->DoGetLastError(&ret)));
  422. return false;
  423. }
  424. LH_WRITE_LOG(QString("页面配置写入tExecPlanConfig成功, 数目:%1").arg(QString::number(list.size())));
  425. return true;
  426. }
  427. /* 删除配置数据 */
  428. bool FromWebAPI::deleteConfigData(QMap<int, ConfigData>& list)
  429. {
  430. if(m_httpApi == nullptr)
  431. {
  432. LH_WRITE_ERROR("WebAPI is nullptr");
  433. return false;
  434. }
  435. nJson json0 = nJson::array();
  436. try{
  437. for(auto begin = list.begin(), end = list.end(); begin != end; begin++)
  438. {
  439. nJson json1;
  440. json1["opName"] = "ESM8C_DeleteExecPlanConfig";
  441. json1["Key"] = QUuid::createUuid().toString().toStdString();
  442. nJson json2;
  443. json2["keyWord"] = begin->key;
  444. json1["paramList"] = json2;
  445. json0.push_back(json1);
  446. }
  447. }catch (const nJson::parse_error& e) {
  448. SPDLOG_ERROR("生成json数据失败:{}", e.what());
  449. return false;
  450. }
  451. catch (const nJson::exception& e)
  452. {
  453. SPDLOG_ERROR("生成json数据失败:{}", e.what());
  454. return false;
  455. }
  456. catch (...)
  457. {
  458. SPDLOG_ERROR("生成json数据失败");
  459. return false;
  460. }
  461. /* 写入EQM数据库 */
  462. QString strCmd = QString::fromStdString(json0.dump());
  463. QString strRet;
  464. auto ret = m_httpApi->DBDoInterface(enDBOperatorType::EDBOT_BatchTransAction, strCmd, strRet, true);
  465. if(ret != 0)
  466. {
  467. LH_WRITE_ERROR(QString("删除tExecPlanConfig表格数据失败:%1, 错误信息:%2").arg(ret).arg(m_httpApi->DoGetLastError(&ret)));
  468. return false;
  469. }
  470. LH_WRITE_LOG_DEBUG(QString("删除tExecPlanConfig表格数据成功, 计划数目:%1").arg(QString::number(list.size())));
  471. return true;
  472. }
  473. /* 获取配置数据 */
  474. bool FromWebAPI::getConfigData(QMap<int, ConfigData>& list)
  475. {
  476. if(m_httpApi == nullptr)
  477. {
  478. LH_WRITE_ERROR("WebAPI is nullptr");
  479. return false;
  480. }
  481. nJson json0;
  482. json0["opName"] = "ESM8C_GetExecPlanConfig";
  483. QString strCmd = QString::fromStdString(json0.dump());
  484. QString strRet;
  485. auto ret = m_httpApi->DBDoInterface(enDBOperatorType::EDBOT_Select, strCmd, strRet, true);
  486. if(ret != 0)
  487. {
  488. LH_WRITE_ERROR(QString("获取tExecPlanConfig表格数据失败:%1, 错误信息:%2").arg(ret).arg(m_httpApi->DoGetLastError(&ret)));
  489. return false;
  490. }
  491. /* 解析获取到的JSON数据 */
  492. LH_WRITE_LOG_DEBUG(QString("Ret:%1").arg(ret));
  493. LH_WRITE_LOG_DEBUG(strRet);
  494. try{
  495. nJson json1 = nJson::parse(strRet.toStdString());
  496. int retCode = json1["code"].get<int>();
  497. if(retCode != 0)
  498. {
  499. LH_WRITE_ERROR("获取tExecPlanConfig失败");
  500. return false;
  501. }
  502. nJson result = json1["result"];
  503. for(auto& it : result)
  504. {
  505. ConfigData data;
  506. data.key = it["keyWord"].get<int>();
  507. data.value = it["value1"].get<int>();
  508. data.updateTime = QDateTime::fromString(QString::fromStdString(it["updateTime"].get<std::string>()),"yyyy-MM-dd hh:mm:ss");
  509. data.notes = QString::fromStdString(it["notes"].get<std::string>());
  510. list.insert(data.key, data);
  511. }
  512. } catch (const nJson::parse_error& e) {
  513. LH_WRITE_ERROR(QString("解析tExecPlanConfig数据失败:%1").arg(e.what()));
  514. return false;
  515. }
  516. catch (const nJson::exception& e)
  517. {
  518. LH_WRITE_ERROR(QString("解析tExecPlanConfig数据失败:%1").arg(e.what()));
  519. return false;
  520. }
  521. catch(...)
  522. {
  523. LH_WRITE_ERROR("解析tExecPlanConfig数据失败");
  524. return false;
  525. }
  526. LH_WRITE_LOG_DEBUG(QString("获取tExecPlanConfig表格数据成功,数据数目:%1").arg(list.size()));
  527. return true;
  528. }
  529. /* 单独获取某个关键字的数据 */
  530. bool FromWebAPI::getConfigData(int key, ConfigData& data)
  531. {
  532. if(m_httpApi == nullptr)
  533. {
  534. LH_WRITE_ERROR("WebAPI is nullptr");
  535. return false;
  536. }
  537. nJson json0;
  538. json0["opName"] = "ESM8C_GetExecPlanConfigOfKeyWord";
  539. nJson json1;
  540. json1["keyWord"] = key;
  541. json0["paramList"] = json1;
  542. QString strCmd = QString::fromStdString(json0.dump());
  543. QString strRet;
  544. auto ret = m_httpApi->DBDoInterface(enDBOperatorType::EDBOT_Select, strCmd, strRet, true);
  545. if(ret != 0)
  546. {
  547. LH_WRITE_ERROR(QString("获取tExecPlanConfig表格数据失败:%1, 错误信息:%2").arg(ret).arg(m_httpApi->DoGetLastError(&ret)));
  548. return false;
  549. }
  550. /* 解析获取到的JSON数据 */
  551. LH_WRITE_LOG_DEBUG(strRet);
  552. try{
  553. nJson json1 = nJson::parse(strRet.toStdString());
  554. int retCode = json1["code"].get<int>();
  555. if(retCode != 0)
  556. {
  557. LH_WRITE_ERROR("获取tExecPlanConfig失败");
  558. return false;
  559. }
  560. nJson result = json1["result"];
  561. for(auto& it : result)
  562. {
  563. data.key = it["keyWord"].get<int>();
  564. if(data.key != key)
  565. {
  566. LH_WRITE_ERROR("获取到的数据和传入的关键字不匹配");
  567. continue;
  568. }
  569. data.value = it["value1"].get<int>();
  570. data.updateTime = QDateTime::fromString(QString::fromStdString(it["updateTime"].get<std::string>()),"yyyy-MM-dd hh:mm:ss");
  571. data.notes = QString::fromStdString(it["notes"].get<std::string>());
  572. break;
  573. }
  574. } catch (const nJson::parse_error& e) {
  575. LH_WRITE_ERROR(QString("解析tExecPlanConfig数据失败:%1").arg(e.what()));
  576. return false;
  577. }
  578. catch (const nJson::exception& e)
  579. {
  580. LH_WRITE_ERROR(QString("解析tExecPlanConfig数据失败:%1").arg(e.what()));
  581. return false;
  582. }
  583. catch(...)
  584. {
  585. LH_WRITE_ERROR("解析tExecPlanConfig数据失败");
  586. return false;
  587. }
  588. if(data.key != key)
  589. {
  590. LH_WRITE_ERROR("获取到的数据和传入的关键字不匹配");
  591. return false;
  592. }
  593. return true;
  594. }
  595. /* 获取EQM数据库中的模版编号 */
  596. bool FromWebAPI::getEQMTemplateID(QList<int>& listId)
  597. {
  598. if(m_httpApi == nullptr)
  599. {
  600. LH_WRITE_ERROR("WebAPI is nullptr");
  601. return false;
  602. }
  603. nJson json0;
  604. json0["opName"] = "ESMC_GetTemplateNumFromExecPlan";
  605. QString strCmd = QString::fromStdString(json0.dump());
  606. QString strRet;
  607. auto ret = m_httpApi->DBDoInterface(enDBOperatorType::EDBOT_Select, strCmd, strRet, true);
  608. if(ret != 0)
  609. {
  610. LH_WRITE_ERROR(QString("从EQM获取模版编号失败:%1, 错误信息:%2").arg(ret).arg(m_httpApi->DoGetLastError(&ret)));
  611. return false;
  612. }
  613. /* 解析获取到的JSON数据 */
  614. LH_WRITE_LOG_DEBUG(strRet);
  615. try
  616. {
  617. nJson json1 = nJson::parse(strRet.toStdString());
  618. int retCode = json1["code"].get<int>();
  619. if(retCode != 0)
  620. {
  621. LH_WRITE_ERROR("获取模版编号失败");
  622. return false;
  623. }
  624. nJson result = json1["result"];
  625. for(auto& it : result)
  626. {
  627. if(it["templateNum"].is_null())
  628. {
  629. LH_WRITE_ERROR("模版编号为空");
  630. continue;
  631. }
  632. auto id = it["templateNum"].get<int>();
  633. if(listId.contains(id))
  634. {
  635. continue;
  636. }
  637. listId.append(id);
  638. }
  639. } catch (const nJson::parse_error& e) {
  640. LH_WRITE_ERROR(QString("解析模版编号失败:%1").arg(e.what()));
  641. return false;
  642. }
  643. catch (const nJson::exception& e)
  644. {
  645. LH_WRITE_ERROR(QString("解析模版编号失败:%1").arg(e.what()));
  646. return false;
  647. }
  648. catch(...)
  649. {
  650. LH_WRITE_ERROR("解析模版编号失败");
  651. return false;
  652. }
  653. return true;
  654. }
  655. /* 删除所有行 */
  656. bool FromWebAPI::deleteAllRow()
  657. {
  658. if(m_httpApi == nullptr)
  659. {
  660. LH_WRITE_ERROR("WebAPI is nullptr");
  661. return false;
  662. }
  663. nJson json0;
  664. json0["opName"] = "ESM8C_DeleteAllRow";
  665. QString strCmd = QString::fromStdString(json0.dump());
  666. QString strRet;
  667. auto ret = m_httpApi->DBDoInterface(enDBOperatorType::EDBOT_Delete, strCmd, strRet, true);
  668. if(ret != 0)
  669. {
  670. LH_WRITE_ERROR(QString("删除所有行失败:%1, 错误信息:%2").arg(ret).arg(m_httpApi->DoGetLastError(&ret)));
  671. return false;
  672. }
  673. return true;
  674. }
  675. /* 删除所有的发射机计划 */
  676. bool FromWebAPI::deleteAllTransmitterPlan()
  677. {
  678. if(m_httpApi == nullptr)
  679. {
  680. LH_WRITE_ERROR("WebAPI is nullptr");
  681. return false;
  682. }
  683. /* 查找出有多少发射机类型 */
  684. QList<int> listPttypeCodeID;
  685. for(auto& it : DevTypeContainer.getMapDevType())
  686. {
  687. listPttypeCodeID.append(it.PTTypeCode);
  688. }
  689. nJson json0;
  690. json0["opName"] = "ESM8C_DeleteRowBasePTTypeCode";
  691. for(const auto& it : listPttypeCodeID)
  692. {
  693. json0["paramList"].clear();
  694. nJson json1;
  695. json1["PTTypeCode"] = it;
  696. json0["paramList"].push_back(json1);
  697. QString strCmd = QString::fromStdString(json0.dump());
  698. QString strRet;
  699. auto ret = m_httpApi->DBDoInterface(enDBOperatorType::EDBOT_Delete, strCmd, strRet, true);
  700. if(ret != 0)
  701. {
  702. LH_WRITE_ERROR(QString("删除发射机(%3)计划失败:%1, 错误信息:%2").arg(ret).arg(m_httpApi->DoGetLastError(&ret)).arg(it));
  703. }else {
  704. LH_WRITE_LOG(QString("删除发射机(%1)计划成功!").arg(it));
  705. }
  706. }
  707. return true;
  708. }
  709. /* 保存到模板 */
  710. bool FromWebAPI::saveTemplate(const QString& templateName, const int type, QList<ExecPlanItemInfo>& list)
  711. {
  712. if(m_httpApi == nullptr)
  713. {
  714. LH_WRITE_ERROR("WebAPI is nullptr");
  715. return false;
  716. }
  717. nJson json0 = nJson::array();
  718. for(const auto& it : list)
  719. {
  720. nJson json1;
  721. json1["opName"] = "TMS_ExecPlanSaveToTemplate";
  722. json1["Key"] = QUuid::createUuid().toString().toStdString();
  723. nJson json2;
  724. json2["templateName"] = templateName.toStdString();
  725. json2["templateType"] = type;
  726. json2["execDate"] = it.dateTime.date().toString("yyyy-MM-dd").toStdString();
  727. json2["execTime"] = it.dateTime.time().toString("hh:mm:ss").toStdString();
  728. json2["deviceName"] = it.devName.toStdString();
  729. json2["actionName"] = it.actionName.toStdString();
  730. json2["actionID"] = static_cast<int>(it.actionID);
  731. json1["paramList"] = json2;
  732. json0.push_back(json1);
  733. }
  734. /* 将json写入本地文件 */
  735. #ifdef C_DEBUG
  736. // QString fileJson(QString::fromStdString(json0.dump(4)));
  737. // LH_WRITE_LOG_DEBUG("\n" + fileJson);
  738. #endif
  739. /* 写入EQM数据库 */
  740. QString strCmd = QString::fromStdString(json0.dump());
  741. QString strRet;
  742. auto ret = m_httpApi->DBDoInterface(enDBOperatorType::EDBOT_BatchTransAction, strCmd, strRet, true);
  743. if(ret != 0)
  744. {
  745. LH_WRITE_ERROR(QString("保存到模板失败:%1, 错误信息:%2").arg(ret).arg(m_httpApi->DoGetLastError(&ret)));
  746. return false;
  747. }
  748. LH_WRITE_LOG("保存到模板成功,模板名称:" + templateName + ", 类型:" + QString::number(type) + ", 计划数目:" + QString::number(list.size()));
  749. return true;
  750. }
  751. /* 获取模板内容 */
  752. bool FromWebAPI::getTemplate(QString templateName, QList<ExecPlanItemInfo>& list)
  753. {
  754. if(m_httpApi == nullptr)
  755. {
  756. LH_WRITE_ERROR("WebAPI is nullptr");
  757. return false;
  758. }
  759. nJson json0;
  760. json0["opName"] = "TMS_GetExecPlanTemplateData";
  761. nJson json1;
  762. json1["templateName"] = templateName.toStdString();
  763. json0["paramList"] = json1;
  764. QString strCmd = QString::fromStdString(json0.dump());
  765. QString strRet;
  766. auto ret = m_httpApi->DBDoInterface(enDBOperatorType::EDBOT_Select, strCmd, strRet, true);
  767. if(ret != 0)
  768. {
  769. LH_WRITE_ERROR(QString("获取模板失败:%1, 错误信息:%2").arg(ret).arg(m_httpApi->DoGetLastError(&ret)));
  770. return false;
  771. }
  772. /* 解析获取到的JSON数据 */
  773. try
  774. {
  775. nJson json2 = nJson::parse(strRet.toStdString());
  776. int retCode = json2["code"].get<int>();
  777. if(retCode != 0)
  778. {
  779. LH_WRITE_ERROR("获取模板失败");
  780. return false;
  781. }
  782. nJson result = json2["result"];
  783. for(auto& it : result)
  784. {
  785. ExecPlanItemInfo info;
  786. info.devName = QString::fromStdString(it["deviceName"].get<std::string>());
  787. if(!DeviceContainer.findDevice(info.devName))
  788. {
  789. LH_WRITE_LOG(QString("未找到设备:%1").arg(info.devName));
  790. continue;
  791. }
  792. auto tmpDate = it["execDate"].is_null() ? "" : it["execDate"].get<std::string>();
  793. if(!tmpDate.empty())
  794. {
  795. info.dateTime.setDate(QDate::fromString(QString::fromStdString(tmpDate),"yyyy-MM-dd"));
  796. }
  797. info.dateTime.setTime(QTime::fromString(QString::fromStdString(it["execTime"].get<std::string>()),"hh:mm:ss"));
  798. info.actionName = QString::fromStdString(it["actionName"].get<std::string>());
  799. info.actionID = it["actionID"].get<int>();
  800. list.append(info);
  801. }
  802. LH_WRITE_LOG(QString("获取模板成功,数据数目:%1").arg(list.size()));
  803. }
  804. catch (const nJson::parse_error& e)
  805. {
  806. LH_WRITE_ERROR(QString("解析模板失败:%1").arg(e.what()));
  807. return false;
  808. }
  809. catch (const nJson::exception& e)
  810. {
  811. LH_WRITE_ERROR(QString("解析模板失败:%1").arg(e.what()));
  812. return false;
  813. }
  814. catch(...)
  815. {
  816. LH_WRITE_ERROR("解析模板失败");
  817. return false;
  818. }
  819. return true;
  820. }
  821. /* 获取模板列表 */
  822. bool FromWebAPI::getTemplateList(QMap<QString, int>& list)
  823. {
  824. if(m_httpApi == nullptr)
  825. {
  826. LH_WRITE_ERROR("WebAPI is nullptr");
  827. return false;
  828. }
  829. nJson json0;
  830. json0["opName"] = "TMS_GetExecPlanTemplateList";
  831. QString strCmd = QString::fromStdString(json0.dump());
  832. QString strRet;
  833. auto ret = m_httpApi->DBDoInterface(enDBOperatorType::EDBOT_Select, strCmd, strRet, true);
  834. if(ret != 0)
  835. {
  836. LH_WRITE_ERROR(QString("获取模板列表失败:%1, 错误信息:%2").arg(ret).arg(m_httpApi->DoGetLastError(&ret)));
  837. return false;
  838. }
  839. /* 解析获取到的JSON数据 */
  840. LH_WRITE_LOG_DEBUG(strRet);
  841. try
  842. {
  843. nJson json1 = nJson::parse(strRet.toStdString());
  844. int retCode = json1["code"].get<int>();
  845. if(retCode != 0)
  846. {
  847. LH_WRITE_ERROR("获取模板列表失败");
  848. return false;
  849. }
  850. nJson result = json1["result"];
  851. for(auto& it : result)
  852. {
  853. if(it["templateName"].is_null())
  854. {
  855. LH_WRITE_ERROR("模板名称为空");
  856. continue;
  857. }
  858. auto name = QString::fromStdString(it["templateName"].get<std::string>());
  859. int type = it["templateType"].is_null() ? -1 : it["templateType"].get<int>();
  860. if(list.contains(name))
  861. {
  862. continue;
  863. }
  864. list.insert(name, type);
  865. }
  866. } catch (const nJson::parse_error& e) {
  867. LH_WRITE_ERROR(QString("解析模板列表失败:%1").arg(e.what()));
  868. return false;
  869. }
  870. catch (const nJson::exception& e)
  871. {
  872. LH_WRITE_ERROR(QString("解析模板列表失败:%1").arg(e.what()));
  873. return false;
  874. }
  875. catch(...)
  876. {
  877. LH_WRITE_ERROR("解析模板列表失败");
  878. return false;
  879. }
  880. // for(auto it = list.begin(); it != list.end(); it++)
  881. // {
  882. // LH_WRITE_LOG_DEBUG(QString("模板名称:%1, 类型:%2").arg(it.key()).arg(it.value()));
  883. // }
  884. return true;
  885. }
  886. /* 删除一个模板 */
  887. bool FromWebAPI::deleteTemplate(const QString& name)
  888. {
  889. if(m_httpApi == nullptr)
  890. {
  891. LH_WRITE_ERROR("WebAPI is nullptr");
  892. return false;
  893. }
  894. nJson json0;
  895. json0["opName"] = "TMS_DeleteExecPlanTemplate";
  896. nJson json1;
  897. json1["templateName"] = name.toStdString();
  898. json0["paramList"] = json1;
  899. QString strCmd = QString::fromStdString(json0.dump());
  900. QString strRet;
  901. auto ret = m_httpApi->DBDoInterface(enDBOperatorType::EDBOT_Delete, strCmd, strRet, true);
  902. if(ret != 0)
  903. {
  904. LH_WRITE_ERROR(QString("删除模板失败:%1, 错误信息:%2").arg(ret).arg(m_httpApi->DoGetLastError(&ret)));
  905. return false;
  906. }
  907. return true;
  908. }