oamsynctimer.cpp 15 KB

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