oamsynctimer.cpp 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501
  1. #include "oamsynctimer.h"
  2. #include "ui_oamsynctimer.h"
  3. #include "maindlg.h"
  4. oamsynctimer::oamsynctimer(QWidget *parent)
  5. : QDialog(parent)
  6. , ui(new Ui::oamsynctimer)
  7. {
  8. ui->setupUi(this);
  9. m_pMainDlg = static_cast<MainDlg*>(parent);//保存上级窗口指针
  10. configSignalSlot();
  11. init();
  12. }
  13. oamsynctimer::~oamsynctimer()
  14. {
  15. delete ui;
  16. }
  17. //配置界面按钮信号与槽
  18. void oamsynctimer::configSignalSlot(){
  19. connect(ui->pushButtonAllSel, &QPushButton::clicked, this, &this->selectAllItem);//全选
  20. connect(ui->pushButtonAllNoSel, &QPushButton::clicked, this, &this->selectNoAllItem);//全不选
  21. connect(ui->pushButtonClear, &QPushButton::clicked, this, &this->clearAllItem);//清空
  22. connect(ui->pushButtonQuery, &QPushButton::clicked, this, &oamsynctimer::queryParam);//查询参数
  23. connect(ui->pushButtonConfig, &QPushButton::clicked, this, &oamsynctimer::configParam);//设置参数
  24. connect(ui->pushButtonUpload, &QPushButton::clicked, this,&this->uploadData);//上传参数
  25. //将消息发送到主控模块
  26. connect(this, &this->SignalSendQueryMsg, m_pMainDlg, &m_pMainDlg->slotOamSendQueryMsg);
  27. connect(this, &this->SignalSendConfigMsg, m_pMainDlg, &m_pMainDlg->slotOamSendConfigMsg);
  28. connect(this, &this->SignalUploadBtsBaseParamUpdate, m_pMainDlg, &m_pMainDlg->slotUploadBtsBaseParamUpdate);//上传数据
  29. }
  30. //初始化
  31. void oamsynctimer::init(){
  32. //初始化定时开关
  33. ui->comboBoxTimerSwitch->addItem("关闭", 0);
  34. ui->comboBoxTimerSwitch->addItem("打开", 1);
  35. //初始化当前时间
  36. QDateTime curDateTime = QDateTime::currentDateTime();
  37. ui->dateTimeEditRtcDateTime->setDateTime(curDateTime);
  38. updateUi();
  39. return;
  40. }
  41. //更新ui
  42. void oamsynctimer::updateUi(){
  43. m_dwDeviceType = m_pMainDlg->getDeviceType();
  44. if(!m_dwDeviceType){
  45. switchBtnFlag(false);
  46. selectNoAllItem();
  47. }else{
  48. switchBtnFlag(true);
  49. }
  50. }
  51. //切换按钮状态
  52. //byFlag:开关状态,true:可用,false:不可用
  53. void oamsynctimer::switchBtnFlag(bool byFlag){
  54. ui->pushButtonAllSel->setEnabled(byFlag);
  55. ui->pushButtonAllNoSel->setEnabled(byFlag);
  56. ui->pushButtonClear->setEnabled(byFlag);
  57. ui->pushButtonQuery->setEnabled(byFlag);
  58. ui->pushButtonConfig->setEnabled(byFlag);
  59. ui->pushButtonUpload->setEnabled(byFlag);
  60. }
  61. //选择/不选择所有复选款
  62. void oamsynctimer::selectAll(bool bFlag){
  63. ui->checkBoxRtcDateTime->setChecked(bFlag);
  64. ui->checkBoxTimerSwitch->setChecked(bFlag);
  65. ui->checkBoxTimerNum->setChecked(bFlag);
  66. ui->checkBoxTimer1Start->setChecked(bFlag);
  67. ui->checkBoxTimer1Stop->setChecked(bFlag);
  68. ui->checkBoxTimer2Start->setChecked(bFlag);
  69. ui->checkBoxTimer2Stop->setChecked(bFlag);
  70. }
  71. //全选
  72. void oamsynctimer::selectAllItem(){
  73. selectAll(true);
  74. }
  75. //全不选
  76. void oamsynctimer::selectNoAllItem(){
  77. selectAll(false);
  78. }
  79. //清空所有
  80. void oamsynctimer::clearAllItem(){
  81. QDate date(2023, 6,14);
  82. QTime time(15,16,17);
  83. QDateTime dt(date, time);
  84. ui->dateTimeEditRtcDateTime->setDateTime(dt);
  85. ui->comboBoxTimerSwitch->setCurrentIndex(0);
  86. ui->spinBoxTimerNum->setValue(1);
  87. QTime myTime = QTime::fromString("15:16:17", "HH:mm:ss");
  88. ui->timeEdit1Start->setTime(myTime);
  89. ui->timeEdit1Stop->setTime(myTime);
  90. ui->timeEdit2Start->setTime(myTime);
  91. ui->timeEdit2Stop->setTime(myTime);
  92. }
  93. //查询参数
  94. void oamsynctimer::queryParam(){
  95. quint8 abyData[PS_FRAME_MCPA_PAYLOAD_LEN];
  96. quint8 *pbyHead = abyData;
  97. quint16 wLen = 0;
  98. LTV_T stLtv;
  99. //禁用按钮
  100. switchBtnFlag(false);
  101. memset(abyData, 0, PS_FRAME_MCPA_PAYLOAD_LEN);
  102. memset((void*)&stLtv, 0, sizeof(LTV_T));
  103. //时钟时间
  104. if(ui->checkBoxRtcDateTime->isChecked()){
  105. stLtv.wLen = 10;
  106. stLtv.wTag = ORDER_SYNC_TIMER_CURRENT_TIME;
  107. memcpy(pbyHead, &stLtv, stLtv.wLen);
  108. wLen = wLen + stLtv.wLen;
  109. pbyHead = pbyHead + stLtv.wLen;
  110. }
  111. //定时开关
  112. if(ui->checkBoxTimerSwitch->isChecked()){
  113. stLtv.wLen = 5;
  114. stLtv.wTag = ORDER_SYNC_TIMER_SWITCH;
  115. memcpy(pbyHead, &stLtv, stLtv.wLen);
  116. wLen = wLen + stLtv.wLen;
  117. pbyHead = pbyHead + stLtv.wLen;
  118. }
  119. //定时数量
  120. if(ui->checkBoxTimerNum->isChecked()){
  121. stLtv.wLen = 5;
  122. stLtv.wTag = ORDER_SYNC_TIMER_NUM;
  123. memcpy(pbyHead, &stLtv, stLtv.wLen);
  124. wLen = wLen + stLtv.wLen;
  125. pbyHead = pbyHead + stLtv.wLen;
  126. }
  127. //定时1开始时间
  128. if(ui->checkBoxTimer1Start->isChecked()){
  129. stLtv.wLen = 6;
  130. stLtv.wTag = ORDER_SYNC_TIMER1_START;
  131. memcpy(pbyHead, &stLtv, stLtv.wLen);
  132. wLen = wLen + stLtv.wLen;
  133. pbyHead = pbyHead + stLtv.wLen;
  134. }
  135. //定时1停止时间
  136. if(ui->checkBoxTimer1Stop->isChecked()){
  137. stLtv.wLen = 6;
  138. stLtv.wTag = ORDER_SYNC_TIMER1_STOP;
  139. memcpy(pbyHead, &stLtv, stLtv.wLen);
  140. wLen = wLen + stLtv.wLen;
  141. pbyHead = pbyHead + stLtv.wLen;
  142. }
  143. //定时2开始时间
  144. if(ui->checkBoxTimer2Start->isChecked()){
  145. stLtv.wLen = 6;
  146. stLtv.wTag = ORDER_SYNC_TIMER2_START;
  147. memcpy(pbyHead, &stLtv, stLtv.wLen);
  148. wLen = wLen + stLtv.wLen;
  149. pbyHead = pbyHead + stLtv.wLen;
  150. }
  151. //定时2停止时间
  152. if(ui->checkBoxTimer2Stop->isChecked()){
  153. stLtv.wLen = 6;
  154. stLtv.wTag = ORDER_SYNC_TIMER2_STOP;
  155. memcpy(pbyHead, &stLtv, stLtv.wLen);
  156. wLen = wLen + stLtv.wLen;
  157. pbyHead = pbyHead + stLtv.wLen;
  158. }
  159. if(wLen > PS_FRAME_MCPA_PAYLOAD_LEN){
  160. QMessageBox::information(this,"提示", "数据长度超过报文最大值,请减少查询项");
  161. //启用按钮
  162. switchBtnFlag(true);
  163. return;
  164. }
  165. //将参数发送给主控模块
  166. if(wLen > 0){
  167. emit SignalSendQueryMsg(abyData, wLen);
  168. }else{
  169. QMessageBox::information(this,"提示", "请至少选择一项管理项");
  170. }
  171. switchBtnFlag(true);
  172. return;
  173. }
  174. //显示参数
  175. void oamsynctimer::showParam(LTV_T *pstData){
  176. quint8 byTmp = 0;
  177. quint16 wTmp = 0;
  178. quint16 wHour = 0xFF00;
  179. quint16 wMinute = 0x00FF;
  180. quint8 byLen = pstData->wLen-4;
  181. //将数据显示在界面上
  182. if(pstData->wTag == ORDER_SYNC_TIMER_CURRENT_TIME){//时钟时间
  183. quint16 year = pstData->abyData[5] + 2000;
  184. quint8 month = pstData->abyData[4];
  185. quint8 day = pstData->abyData[3];
  186. quint8 hour = pstData->abyData[2];
  187. quint8 minute = pstData->abyData[1];
  188. quint8 second = pstData->abyData[0];
  189. QDate date(year, month, day);
  190. QTime time(hour, minute, second);
  191. QDateTime dt(date, time);
  192. ui->dateTimeEditRtcDateTime->setDateTime(dt);
  193. }else if(pstData->wTag == ORDER_SYNC_TIMER_SWITCH){//定时开关
  194. memcpy(&byTmp, pstData->abyData, byLen);
  195. ui->comboBoxTimerSwitch->setCurrentIndex(byTmp);
  196. }else if(pstData->wTag == ORDER_SYNC_TIMER_NUM){//定时数量
  197. memcpy(&byTmp, pstData->abyData, byLen);
  198. ui->spinBoxTimerNum->setValue(byTmp);
  199. }else if(pstData->wTag == ORDER_SYNC_TIMER1_START){
  200. memcpy(&wTmp, pstData->abyData, byLen);
  201. wHour = wTmp & wHour;
  202. wHour = wHour >> 8;
  203. wMinute = wTmp & wMinute;
  204. QTime timeTmp(wHour, wMinute, 0);
  205. ui->timeEdit1Start->setTime(timeTmp);
  206. }else if(pstData->wTag == ORDER_SYNC_TIMER1_STOP){
  207. memcpy(&wTmp, pstData->abyData, byLen);
  208. wHour = wTmp & wHour;
  209. wHour = wHour >> 8;
  210. wMinute = wTmp & wMinute;
  211. QTime timeTmp(wHour, wMinute, 0);
  212. ui->timeEdit1Stop->setTime(timeTmp);
  213. }else if(pstData->wTag == ORDER_SYNC_TIMER2_START){
  214. memcpy(&wTmp, pstData->abyData, byLen);
  215. wHour = wTmp & wHour;
  216. wHour = wHour >> 8;
  217. wMinute = wTmp & wMinute;
  218. QTime timeTmp(wHour, wMinute, 0);
  219. ui->timeEdit2Start->setTime(timeTmp);
  220. }else if(pstData->wTag == ORDER_SYNC_TIMER2_STOP){
  221. memcpy(&wTmp, pstData->abyData, byLen);
  222. wHour = wTmp & wHour;
  223. wHour = wHour >> 8;
  224. wMinute = wTmp & wMinute;
  225. QTime timeTmp(wHour, wMinute, 0);
  226. ui->timeEdit2Stop->setTime(timeTmp);
  227. }
  228. return;
  229. }
  230. //配置参数
  231. void oamsynctimer::configParam(){
  232. quint8 abyData[PS_FRAME_MCPA_PAYLOAD_LEN];
  233. quint8 *pbyHead = abyData;
  234. quint16 wLen = 0;
  235. LTV_T stLtv;
  236. QVariant varTmp;
  237. quint8 byTmp = 0;
  238. quint8 abyDateTime[6] = {0};
  239. QTime myTime;
  240. quint16 wTime = 0;
  241. quint16 wMinute = 0x0000;
  242. //禁用按钮
  243. switchBtnFlag(false);
  244. memset(abyData, 0, PS_FRAME_MCPA_PAYLOAD_LEN);
  245. memset((void*)&stLtv, 0, sizeof(LTV_T));
  246. //配置当前时间
  247. if(ui->checkBoxRtcDateTime->isChecked()){
  248. QDateTime current = ui->dateTimeEditRtcDateTime->dateTime();
  249. abyDateTime[5] = current.date().year() - 2000;//年
  250. abyDateTime[4] = current.date().month(); // 月(1-12)
  251. abyDateTime[3] = current.date().day(); // 日(1-31)
  252. abyDateTime[2] = current.time().hour(); // 时(0-23)
  253. abyDateTime[1] = current.time().minute();// 分(0-59)
  254. abyDateTime[0] = current.time().second();// 秒(0-59)
  255. memset((void*)stLtv.abyData, 0, PS_MCP_A_DATA_LEN);
  256. stLtv.wLen = 10;
  257. stLtv.wTag = ORDER_SYNC_TIMER_CURRENT_TIME;
  258. memcpy((void*)stLtv.abyData, abyDateTime, (stLtv.wLen - 4));
  259. memcpy(pbyHead, &stLtv, stLtv.wLen);
  260. wLen = wLen + stLtv.wLen;
  261. pbyHead = pbyHead + stLtv.wLen;
  262. }
  263. //定时开关
  264. if(ui->checkBoxTimerSwitch->isChecked()){
  265. memset((void*)stLtv.abyData, 0, PS_MCP_A_DATA_LEN);
  266. stLtv.wLen = 5;
  267. stLtv.wTag = ORDER_SYNC_TIMER_SWITCH;
  268. varTmp = ui->comboBoxTimerSwitch->currentData();
  269. byTmp = (quint8)varTmp.toInt();
  270. memcpy((void*)stLtv.abyData, &byTmp, (stLtv.wLen - 4));
  271. memcpy(pbyHead, &stLtv, stLtv.wLen);
  272. wLen = wLen + stLtv.wLen;
  273. pbyHead = pbyHead + stLtv.wLen;
  274. }
  275. //定时分段
  276. if(ui->checkBoxTimerNum->isChecked()){
  277. memset((void*)stLtv.abyData, 0, PS_MCP_A_DATA_LEN);
  278. stLtv.wLen = 5;
  279. stLtv.wTag = ORDER_SYNC_TIMER_NUM;
  280. byTmp = ui->spinBoxTimerNum->value();
  281. memcpy((void*)stLtv.abyData, &byTmp, (stLtv.wLen - 4));
  282. memcpy(pbyHead, &stLtv, stLtv.wLen);
  283. wLen = wLen + stLtv.wLen;
  284. pbyHead = pbyHead + stLtv.wLen;
  285. }
  286. //定时1开始时间
  287. if(ui->checkBoxTimer1Start->isChecked()){
  288. memset((void*)stLtv.abyData, 0, PS_MCP_A_DATA_LEN);
  289. stLtv.wLen = 6;
  290. stLtv.wTag = ORDER_SYNC_TIMER1_START;
  291. myTime = ui->timeEdit1Start->time();
  292. wTime = myTime.hour();
  293. wMinute = myTime.minute();
  294. wTime <<= 8;
  295. wTime |= wMinute;
  296. memcpy((void*)stLtv.abyData, &wTime, (stLtv.wLen - 4));
  297. memcpy(pbyHead, &stLtv, stLtv.wLen);
  298. wLen = wLen + stLtv.wLen;
  299. pbyHead = pbyHead + stLtv.wLen;
  300. }
  301. //定时1停止时间
  302. if(ui->checkBoxTimer1Stop->isChecked()){
  303. memset((void*)stLtv.abyData, 0, PS_MCP_A_DATA_LEN);
  304. stLtv.wLen = 6;
  305. stLtv.wTag = ORDER_SYNC_TIMER1_STOP;
  306. myTime = ui->timeEdit1Stop->time();
  307. wTime = myTime.hour();
  308. wMinute = myTime.minute();
  309. wTime <<= 8;
  310. wTime |= wMinute;
  311. memcpy((void*)stLtv.abyData, &wTime, (stLtv.wLen - 4));
  312. memcpy(pbyHead, &stLtv, stLtv.wLen);
  313. wLen = wLen + stLtv.wLen;
  314. pbyHead = pbyHead + stLtv.wLen;
  315. }
  316. //定时2开始时间
  317. if(ui->checkBoxTimer2Start->isChecked()){
  318. memset((void*)stLtv.abyData, 0, PS_MCP_A_DATA_LEN);
  319. stLtv.wLen = 6;
  320. stLtv.wTag = ORDER_SYNC_TIMER2_START;
  321. myTime = ui->timeEdit2Start->time();
  322. wTime = myTime.hour();
  323. wMinute = myTime.minute();
  324. wTime <<= 8;
  325. wTime |= wMinute;
  326. memcpy((void*)stLtv.abyData, &wTime, (stLtv.wLen - 4));
  327. memcpy(pbyHead, &stLtv, stLtv.wLen);
  328. wLen = wLen + stLtv.wLen;
  329. pbyHead = pbyHead + stLtv.wLen;
  330. }
  331. //定时2停止时间
  332. if(ui->checkBoxTimer2Stop->isChecked()){
  333. memset((void*)stLtv.abyData, 0, PS_MCP_A_DATA_LEN);
  334. stLtv.wLen = 6;
  335. stLtv.wTag = ORDER_SYNC_TIMER2_STOP;
  336. myTime = ui->timeEdit2Stop->time();
  337. wTime = myTime.hour();
  338. wMinute = myTime.minute();
  339. wTime <<= 8;
  340. wTime |= wMinute;
  341. memcpy((void*)stLtv.abyData, &wTime, (stLtv.wLen - 4));
  342. memcpy(pbyHead, &stLtv, stLtv.wLen);
  343. wLen = wLen + stLtv.wLen;
  344. pbyHead = pbyHead + stLtv.wLen;
  345. }
  346. if(wLen > PS_FRAME_MCPA_PAYLOAD_LEN){
  347. QMessageBox::information(this,"提示", "数据长度超过报文最大值,请减少配置项");
  348. switchBtnFlag(true);
  349. return;
  350. }
  351. //将参数发送给主控模块
  352. if(wLen > 0){
  353. emit SignalSendConfigMsg(abyData, wLen, 0);
  354. }else{
  355. QMessageBox::information(this,"提示", "请至少选择一项管理项");
  356. }
  357. switchBtnFlag(true);
  358. return;
  359. }
  360. //上传参数
  361. void oamsynctimer::uploadData(){
  362. QJsonObject jsonObject; //定义一个json对象
  363. QVariant varTmp;
  364. quint8 byTmp = 0;
  365. QTime myTime;
  366. QString myTimeStr;
  367. quint8 byFlag = 0;
  368. //禁用按钮
  369. switchBtnFlag(false);
  370. //时钟时间
  371. if(ui->checkBoxRtcDateTime->isChecked()){
  372. QDateTime current = ui->dateTimeEditRtcDateTime->dateTime();
  373. QString dtStr = current.toString("yyyy-MM-dd HH:mm:ss");
  374. jsonObject["rtc_date_time"] = dtStr;
  375. byFlag = 1;
  376. }
  377. //定时开关
  378. if(ui->checkBoxTimerSwitch->isChecked()){
  379. varTmp = ui->comboBoxTimerSwitch->currentData();
  380. byTmp = (quint8)varTmp.toInt();
  381. jsonObject["sync_timer_switch"] = byTmp;
  382. byFlag = 1;
  383. }
  384. //定时分段
  385. if(ui->checkBoxTimerNum->isChecked()){
  386. byTmp = ui->spinBoxTimerNum->value();
  387. jsonObject["sync_timer_num"] = byTmp;
  388. byFlag = 1;
  389. }
  390. //定时1开始时间
  391. if(ui->checkBoxTimer1Start->isChecked()){
  392. myTime = ui->timeEdit1Start->time();
  393. myTimeStr = myTime.toString("HH:mm");
  394. jsonObject["sync_timer1_start"] = myTimeStr;
  395. byFlag = 1;
  396. }
  397. //定时1停止时间
  398. if(ui->checkBoxTimer1Stop->isChecked()){
  399. myTime = ui->timeEdit1Stop->time();
  400. myTimeStr = myTime.toString("HH:mm");
  401. jsonObject["sync_timer1_stop"] = myTimeStr;
  402. byFlag = 1;
  403. }
  404. //定时2开始时间
  405. if(ui->checkBoxTimer2Start->isChecked()){
  406. myTime = ui->timeEdit2Start->time();
  407. myTimeStr = myTime.toString("HH:mm");
  408. jsonObject["sync_timer2_start"] = myTimeStr;
  409. byFlag = 1;
  410. }
  411. //定时2停止时间
  412. if(ui->checkBoxTimer2Stop->isChecked()){
  413. myTime = ui->timeEdit2Stop->time();
  414. myTimeStr = myTime.toString("HH:mm");
  415. jsonObject["sync_timer2_stop"] = myTimeStr;
  416. byFlag = 1;
  417. }
  418. //将参数发送给主控模块
  419. if(byFlag){
  420. emit SignalUploadBtsBaseParamUpdate("guiUploadBtsBaseParamUpdate", jsonObject);//发送post请求
  421. }else{
  422. QMessageBox::information(this,"提示", "请至少选择一项管理项");
  423. }
  424. switchBtnFlag(true);
  425. return;
  426. }