core.cpp 41 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731
  1. #include "core.h"
  2. #include "ytservicecore.h"
  3. #include <QDebug>
  4. #include <time.h>
  5. #include <openssl/md5.h>
  6. #include <string.h>
  7. //extern YT_SERVICE_SHM *ytShm;
  8. void chkmd5(const char *data, char *md5){
  9. MD5_CTX ctx;
  10. unsigned char tmp,md[16];
  11. int i;
  12. MD5_Init(&ctx);
  13. MD5_Update(&ctx,data,strlen(data));
  14. MD5_Final(md,&ctx);
  15. for(i=0;i<16;i++){
  16. tmp = (md[i]>>4)&0x0f;
  17. if(tmp<10)
  18. md5[i*2+0] = (char)(tmp+0x30);
  19. else
  20. md5[i*2+0] = (char)(tmp+0x37);
  21. tmp = md[i]&0x0f;
  22. if(tmp<10)
  23. md5[i*2+1] = (char)(tmp+0x30);
  24. else
  25. md5[i*2+1] = (char)(tmp+0x37);
  26. }
  27. md5[32] = 0x00;
  28. }
  29. Core::Core(QObject *parent) :
  30. QObject(parent)
  31. {
  32. isRunning = false;
  33. ypCount = 0;
  34. lhworktime = 0;
  35. work_time = 0;
  36. xfzdworktime = 0;
  37. lhworktime1 = 0;
  38. ypSyncDisdataList.clear();
  39. XfzdSyncdataLiet.clear();
  40. sqlList.clear();
  41. sqlList2.clear();
  42. sqlList3.clear();
  43. logThread = new LogThread(this);
  44. logThread->start();
  45. ytShm->updatetime[CORE_MAIN] = time(static_cast<time_t *>(nullptr));
  46. ytShm->updatetime[DB_THREAD] = ytShm->updatetime[CORE_MAIN] ;
  47. db = QSqlDatabase::addDatabase("QSQLITE","dog_conf");
  48. db.setDatabaseName("/root/db/watchdog2.db");
  49. mdb = QSqlDatabase::addDatabase("QMYSQL","jdxf2_db");
  50. mdb.setDatabaseName("jdxf");
  51. mdb.setHostName("47.98.201.187");
  52. mdb.setPort(3306);
  53. mdb.setUserName("root");
  54. mdb.setPassword("Yt2018IoT");
  55. mdbOpened = mdb.open();
  56. if(db.open()){
  57. db_init();
  58. }
  59. timer = new QTimer(this);
  60. netAccessManager = new QNetworkAccessManager(this);
  61. connect(timer,SIGNAL(timeout()),this,SLOT(time_out()));
  62. connect(netAccessManager,SIGNAL(finished(QNetworkReply*)),this,SLOT(finishedSlot(QNetworkReply*)));
  63. XfzdnetAccessManager = new QNetworkAccessManager(this);
  64. connect(XfzdnetAccessManager,SIGNAL(finished(QNetworkReply*)),this,SLOT(finishedSlot9(QNetworkReply*)));
  65. time_out();
  66. }
  67. void Core::appendLog(QString log){
  68. logThread->appendData(log);
  69. }
  70. void Core::start()
  71. {
  72. printf("core start\n");
  73. timer->start(1000);
  74. }
  75. void Core::needSync(QString deviceCode)
  76. {
  77. logThread->appendData(QString("[ %1 dataupdate ] %2").arg(QDateTime::currentDateTime().toString("yyyy-MM-dd HH:mm:ss.zzz")).arg(deviceCode));
  78. }
  79. void Core::companyAlarmChanged(QString companyCode)
  80. {
  81. wsCenter->checkLastNote(companyCode);
  82. }
  83. void Core::SyncData(QString uuid, QString jsonstr)
  84. {
  85. ypSyncdataList.append(SyncRep(uuid,jsonstr));
  86. }
  87. void Core::XfzdSyncData(int xh,QString uuid, QString jsonstr, int devCategory, QString deviceCode)
  88. {
  89. XfzdSyncdataLiet.append(XfzdSyncRep(xh,uuid,jsonstr,devCategory,deviceCode));
  90. }
  91. void Core::finishedSlot(QNetworkReply *reply)
  92. {
  93. if(ypSyncdataList.length()>0){
  94. SyncRep rep = ypSyncdataList.first();
  95. if(reply->error()==QNetworkReply::NoError){
  96. ypCount=0;
  97. QString bak_info = QString::fromUtf8(reply->readAll());
  98. sqlList2.append(QString::fromUtf8("update `ypsync_t_rec` set `send`=1, `reply_str`='%1', `reply_time`='%2' where `uuid`='%3'")
  99. .arg(bak_info).arg(QDateTime::currentDateTime().toString("yyyy-MM-dd HH:mm:ss")).arg(rep.Id));
  100. }else
  101. sqlList2.append(QString::fromUtf8("update `ypsync_t_rec` set `reply_time`='%1' where `uuid`='%2'")
  102. .arg(QDateTime::currentDateTime().toString("yyyy-MM-dd HH:mm:ss")).arg(rep.Id));
  103. ypSyncdataList.removeFirst();
  104. }
  105. reply->deleteLater();
  106. isSending = false;
  107. }
  108. void Core::finishedSlot9(QNetworkReply *reply)
  109. {
  110. if(XfzdSyncdataLiet.length()>0){
  111. XfzdSyncRep rep = XfzdSyncdataLiet.first();
  112. if(reply->error()==QNetworkReply::NoError){
  113. QString bak_info = QString::fromUtf8(reply->readAll());
  114. sqlList2.append(QString::fromUtf8("update `xfzdsync_t_rec` set `send`=1, `reply_str`='%1', `reply_time`='%2' where `uuid`='%3'")
  115. .arg(bak_info).arg(QDateTime::currentDateTime().toString("yyyy-MM-dd HH:mm:ss")).arg(rep.Id));
  116. // printf("%s\n",bak_info.toUtf8().data());
  117. }else
  118. sqlList2.append(QString::fromUtf8("update `xfzdsync_t_rec` set `reply_time`='%1' where `uuid`='%2'")
  119. .arg(QDateTime::currentDateTime().toString("yyyy-MM-dd HH:mm:ss")).arg(rep.Id));
  120. XfzdSyncdataLiet.removeFirst();
  121. }
  122. reply->deleteLater();
  123. isSending9 = false;
  124. }
  125. void Core::reply_timeout()
  126. {
  127. if(ypSyncdataList.length()>0){
  128. SyncRep rep = ypSyncdataList.first();
  129. sqlList2.append(QString::fromUtf8("update `ypsync_t_rec` set `reply_time`='%1' where `uuid`='%2'")
  130. .arg(QDateTime::currentDateTime().toString("yyyy-MM-dd HH:mm:ss")).arg(rep.Id));
  131. ypSyncdataList.removeFirst();
  132. }
  133. isSending = false;
  134. }
  135. void Core::reply_timeout9()
  136. {
  137. if(XfzdSyncdataLiet.length()>0){
  138. XfzdSyncRep rep = XfzdSyncdataLiet.first();
  139. sqlList2.append(QString::fromUtf8("update `xfzdsync_t_rec` set `reply_time`='%1' where `uuid`='%2'")
  140. .arg(QDateTime::currentDateTime().toString("yyyy-MM-dd HH:mm:ss")).arg(rep.Id));
  141. XfzdSyncdataLiet.removeFirst();
  142. }
  143. isSending9 = false;
  144. }
  145. void Core::time_out()
  146. {
  147. QSqlQuery qry;
  148. QSqlQuery qry1;
  149. int ret = 0;
  150. // printf("core time_out start\n");
  151. time_t tmp_time = time(static_cast<time_t *>(nullptr));
  152. ytShm->updatetime[CORE_MAIN] = tmp_time;
  153. if(!mdbOpened)
  154. {
  155. mdbOpened = mdb.open();
  156. }
  157. if(isRunning)
  158. return;
  159. isRunning = true;
  160. if((tmp_time-lhworktime)>=1750){
  161. QSqlQuery qry12;
  162. lhworktime=tmp_time;
  163. qry.clear();
  164. syncDevList.clear();
  165. qry = mdb.exec("select id,owner_name,owner_code,unitinfo,company,dwtype from sp_owner where company in ('10232','10318') and dwtype in (2,5)");
  166. while(qry.next()){
  167. syncDevList.append(YPSyncDev(qry.value(0).toInt(),
  168. qry.value(1).toString(),
  169. qry.value(2).toString(),
  170. qry.value(3).toString(),
  171. qry.value(4).toString(),
  172. qry.value(5).toInt()));
  173. }
  174. qry.clear();
  175. qry = mdb.exec("select id,owner_name,owner_code,unitinfo,company,dwtype from sp_owner where owner_code in ('4023383030343730','4023383030343639')");
  176. while(qry.next()){
  177. syncDevList.append(YPSyncDev(qry.value(0).toInt(),
  178. qry.value(1).toString(),
  179. qry.value(2).toString(),
  180. qry.value(3).toString(),
  181. qry.value(4).toString(),
  182. qry.value(5).toInt()));
  183. }
  184. qry.clear();
  185. XfzdDevList.clear();
  186. qry = mdb.exec("select device_code,device_name,descript,device_type,device_type_name,open_project_id, dwtype, data, port,device_floor from sp_corps_share");
  187. while(qry.next()){
  188. XfzdDevList.append(XfzdSyncDev(qry.value(0).toString(),
  189. qry.value(1).toString(),
  190. qry.value(2).toString(),
  191. qry.value(3).toInt(),
  192. qry.value(4).toString(),
  193. qry.value(5).toString(),
  194. qry.value(6).toInt(),
  195. qry.value(7).toString().trimmed(),
  196. qry.value(8).toString(),
  197. qry.value(9).toString()));
  198. }
  199. qry.clear();
  200. }
  201. if((tmp_time-lhworktime1)>=700){
  202. lhworktime1=tmp_time;
  203. for(int i=0;i<syncDevList.length();i++){
  204. time_t tmp_time = time(static_cast<time_t *>(nullptr));
  205. ytShm->updatetime[CORE_MAIN] = tmp_time;
  206. YPSyncDev syncdev = syncDevList.at(i);
  207. QString jdata = "";
  208. QJsonArray jajsonArray;
  209. QJsonObject jaobj;
  210. QJsonObject jaobj2;
  211. if(syncdev.DeviceType==6){
  212. QString sql = QString("select point_code, point_data, content, data_time from sp_owner_status where device_id=%1").arg("4023383030343730");
  213. qry = mdb.exec(sql);
  214. printf("core time_out6 start\n");
  215. while(qry.next()){
  216. if(syncdev.OwnerCode.compare("4023383030343730")==0){
  217. if(qry.value(0).toInt()==65){
  218. printf("core time_out7 start\n");
  219. jaobj2.insert("pointValue", qry.value(1).toDouble());
  220. jaobj2.insert("desc", syncdev.Unitinfo+"-"+"消防泵主管水压-压力正常");
  221. jaobj2.insert("sensorId", 1211017);
  222. }
  223. }else if (syncdev.OwnerCode.compare("4023383030343639")==0) {
  224. if(qry.value(0).toInt()==66){
  225. jaobj2.insert("pointValue", qry.value(1).toDouble());
  226. jaobj2.insert("desc", syncdev.Unitinfo+"-"+"喷淋泵主管水压-压力正常");
  227. jaobj2.insert("sensorId", 1211018);
  228. }
  229. }
  230. }
  231. }else {
  232. printf("core time_out2 start\n");
  233. QString sql = QString("select point_code, point_data, content, data_time from sp_owner_status where device_id=%1 and point_code=4").arg(syncdev.OwnerCode);
  234. qry = mdb.exec(sql);
  235. while(qry.next()){
  236. jaobj2.insert("pointValue", qry.value(1).toDouble());
  237. }
  238. jaobj2.insert("desc", syncdev.Unitinfo+"-"+syncdev.OwnerName+"-压力正常");
  239. jaobj2.insert("sensorId", syncdev.Id);
  240. }
  241. if(syncdev.Company.compare("10232")==0){
  242. jdata.append(QString("\"mqttId\":\"%1\"").arg("a71c40bb-5b02-4741-881b-24449f699db5"));
  243. }else if (syncdev.Company.compare("10318")==0) {
  244. jdata.append(QString("\"mqttId\":\"%1\"").arg("a71c40bb-5b02-4741-881b-24449f699db6"));
  245. }
  246. jdata.append(QString(",\"action\":\"%1\"").arg("transpush"));
  247. if(syncdev.DeviceType==2){
  248. jaobj.insert("deviceType", "XiaoFangShuiYa");
  249. jaobj2.insert("unit", "MPa");
  250. }else if (syncdev.DeviceType==5) {
  251. jaobj.insert("deviceType", "YeWei");
  252. jaobj2.insert("unit", "m-米");
  253. }else {
  254. jaobj.insert("deviceType", "XiaoFangShuiYa");
  255. jaobj2.insert("unit", "MPa");
  256. }
  257. jaobj.insert("dataType", "deviceInfo");
  258. jaobj.insert("provider", "Usky");
  259. jaobj.insert("softVersion", "1.00.00");
  260. jaobj.insert("hardVersion", "0.1");
  261. jaobj2.insert("status", 0);
  262. jaobj2.insert("lowThreshold", 0.07);
  263. jaobj2.insert("highThreshold", 1.2);
  264. jaobj2.insert("sendTime", 1800);
  265. jajsonArray.append(jaobj2);
  266. jaobj["sensorList"]=jajsonArray;
  267. jdata.append(QString(",\"data\":%1").arg(QString(QJsonDocument(jaobj).toJson())));
  268. QString jasign3=jdata.replace("\r","").replace("\n","").replace(" ","");
  269. SyncData(QUuid::createUuid().toString().replace("{","").replace("}",""),"{"+jasign3+"}");
  270. }
  271. }
  272. if((tmp_time-xfzdworktime)>44000){
  273. xfzdworktime=tmp_time;
  274. for(int i=0;i<XfzdDevList.length();i++){
  275. time_t tmp_time = time(static_cast<time_t *>(nullptr));
  276. ytShm->updatetime[CORE_MAIN] = tmp_time;
  277. qry.clear();
  278. XfzdSyncDev xfzddev = XfzdDevList.at(i);
  279. time_t myt=time(NULL);
  280. QString jdata = "";
  281. QString sql = QString("select point_code, point_data, content, data_time from sp_owner_status where device_id=%1").arg(xfzddev.DeviceCode);
  282. jdata.append(QString("\"descript\":\"%1\"").arg(xfzddev.Descript));
  283. jdata.append(QString(",\"deviceName\":\"%1\"").arg(xfzddev.DeviceName));
  284. if(xfzddev.devCategory==6){
  285. jdata.append(QString(",\"deviceNo\":\"%1\"").arg(xfzddev.DeviceCode+xfzddev.Port));
  286. }else{
  287. jdata.append(QString(",\"deviceNo\":\"%1\"").arg(xfzddev.DeviceCode));
  288. }
  289. jdata.append(QString(",\"deviceType\":\"%1\"").arg(xfzddev.DeviceType));
  290. jdata.append(QString(",\"deviceTypeName\":\"%1\"").arg(xfzddev.DeviceTypeName));
  291. jdata.append(QString(",\"openProjectId\":\"%1\"").arg(xfzddev.OpenProjectId));
  292. jdata.append(QString(",\"floor\":\"%1\"").arg(xfzddev.DeviceFloor));
  293. qry = mdb.exec(sql);
  294. if(xfzddev.devCategory==2){
  295. while(qry.next()){
  296. if(qry.value(0).toInt()==4){
  297. jdata.append(QString(",\"logTime\":\"%1\"").arg(QDateTime::fromTime_t(myt).toString("yyyy-MM-dd HH:mm:ss")));
  298. jdata.append(QString(",\"pressure\":\"%1\"").arg(qry.value(1).toString()));
  299. }else if(qry.value(0).toInt()==1){
  300. if(qry.value(2).toString().indexOf(QString::fromUtf8("正常"))==0){
  301. jdata.append(QString(",\"alarmStatus\":\"%1\"").arg(0));
  302. }else if(qry.value(2).toString().indexOf(QString::fromUtf8("低压"))==0){
  303. jdata.append(QString(",\"alarmStatus\":\"%1\"").arg(1));
  304. }else if(qry.value(2).toString().indexOf(QString::fromUtf8("高压"))==0){
  305. jdata.append(QString(",\"alarmStatus\":\"%1\"").arg(2));
  306. }
  307. }
  308. }
  309. if(xfzddev.DeviceType==302){
  310. XfzdSyncData(0,QUuid::createUuid().toString().replace("{","").replace("}",""), "{"+jdata+"}",xfzddev.devCategory,xfzddev.DeviceCode);
  311. }else if(xfzddev.DeviceType==301){
  312. XfzdSyncData(1,QUuid::createUuid().toString().replace("{","").replace("}",""), "{"+jdata+"}",xfzddev.devCategory,xfzddev.DeviceCode);
  313. }else if(xfzddev.DeviceType==305){
  314. XfzdSyncData(13,QUuid::createUuid().toString().replace("{","").replace("}",""), "{"+jdata+"}",xfzddev.devCategory,xfzddev.DeviceCode);
  315. }else if(xfzddev.DeviceType==304){
  316. XfzdSyncData(14,QUuid::createUuid().toString().replace("{","").replace("}",""), "{"+jdata+"}",xfzddev.devCategory,xfzddev.DeviceCode);
  317. }
  318. }else if(xfzddev.devCategory==5){
  319. while(qry.next()){
  320. if(qry.value(0).toInt()==4){
  321. jdata.append(QString(",\"logTime\":\"%1\"").arg(QDateTime::fromTime_t(myt).toString("yyyy-MM-dd HH:mm:ss")));
  322. jdata.append(QString(",\"level\":\"%1\"").arg(qry.value(1).toString()));
  323. }else if(qry.value(0).toInt()==1){
  324. if(qry.value(2).toString().indexOf(QString::fromUtf8("正常"))==0){
  325. jdata.append(QString(",\"alarmStatus\":\"%1\"").arg(0));
  326. }else if(qry.value(2).toString().indexOf(QString::fromUtf8("低液位"))==0){
  327. jdata.append(QString(",\"alarmStatus\":\"%1\"").arg(1));
  328. }else if(qry.value(2).toString().indexOf(QString::fromUtf8("高液位"))==0){
  329. jdata.append(QString(",\"alarmStatus\":\"%1\"").arg(2));
  330. }
  331. }
  332. }
  333. if(xfzddev.DeviceType==402){
  334. XfzdSyncData(2,QUuid::createUuid().toString().replace("{","").replace("}",""), "{"+jdata+"}",xfzddev.devCategory,xfzddev.DeviceCode);
  335. }else{
  336. XfzdSyncData(3,QUuid::createUuid().toString().replace("{","").replace("}",""), "{"+jdata+"}",xfzddev.devCategory,xfzddev.DeviceCode);
  337. }
  338. }else if(xfzddev.devCategory==6){
  339. if(xfzddev.DeviceType==258||xfzddev.DeviceType==256||xfzddev.DeviceType==452){
  340. QList<CnPno> pnoList = getPnoValue(xfzddev.Data);
  341. QJsonArray jajsonArray;
  342. for(int i=0;i<pnoList.length();i++){
  343. if(pnoList.at(i).Pno==-1){
  344. if(pnoList.at(i).PName.compare("powerStatus")==0){
  345. jdata.append(QString(",\"powerState\":\"%1\"").arg(0));
  346. }else if(pnoList.at(i).PName.compare("runStatus")==0){
  347. jdata.append(QString(",\"manualAutomaticState\":\"%1\"").arg(0));
  348. }else if(pnoList.at(i).PName.compare("startStatus")==0){
  349. jdata.append(QString(",\"startStopStatus\":\"%1\"").arg(0));
  350. }else if(pnoList.at(i).PName.compare("faultStatus")==0){
  351. jdata.append(QString(",\"faultStatus\":\"%1\"").arg(0));
  352. }
  353. jdata.append(QString(",\"logTime\":\"%1\"").arg(QDateTime::fromTime_t(myt).toString("yyyy-MM-dd HH:mm:ss")));
  354. }
  355. }
  356. QString device_code;
  357. while(qry.next()){
  358. for(int i=0;i<pnoList.length();i++){
  359. if(pnoList.at(i).Pno==qry.value(0).toInt()&&qry.value(0).toInt()!=0){
  360. if(qry.value(2).toString().indexOf(QString::fromUtf8("正常"))==0||qry.value(2).toString().indexOf(QString::fromUtf8("自动"))==0||qry.value(2).toString().indexOf(QString::fromUtf8("停止"))==0){
  361. if(pnoList.at(i).PName.compare("powerStatus")==0){
  362. jdata.append(QString(",\"powerState\":\"%1\"").arg(0));
  363. }else if(pnoList.at(i).PName.compare("runStatus")==0){
  364. jdata.append(QString(",\"manualAutomaticState\":\"%1\"").arg(0));
  365. }else if(pnoList.at(i).PName.compare("startStatus")==0){
  366. jdata.append(QString(",\"startStopStatus\":\"%1\"").arg(0));
  367. }else if(pnoList.at(i).PName.compare("faultStatus")==0){
  368. jdata.append(QString(",\"faultStatus\":\"%1\"").arg(0));
  369. }
  370. }else if(qry.value(2).toString().indexOf(QString::fromUtf8("关闭"))==0||qry.value(2).toString().indexOf(QString::fromUtf8("手动"))==0||qry.value(2).toString().indexOf(QString::fromUtf8("运行"))==0||qry.value(2).toString().indexOf(QString::fromUtf8("故障"))==0){
  371. if(pnoList.at(i).PName.compare("powerStatus")==0){
  372. jdata.append(QString(",\"powerState\":\"%1\"").arg(1));
  373. }else if(pnoList.at(i).PName.compare("runStatus")==0){
  374. jdata.append(QString(",\"manualAutomaticState\":\"%1\"").arg(1));
  375. }else if(pnoList.at(i).PName.compare("startStatus")==0){
  376. jdata.append(QString(",\"startStopStatus\":\"%1\"").arg(1));
  377. }else if(pnoList.at(i).PName.compare("faultStatus")==0){
  378. jdata.append(QString(",\"faultStatus\":\"%1\"").arg(1));
  379. }
  380. }else{
  381. if(pnoList.at(i).PName.compare("powerStatus")==0){
  382. jdata.append(QString(",\"powerState\":\"%1\"").arg(0));
  383. }else if(pnoList.at(i).PName.compare("runStatus")==0){
  384. jdata.append(QString(",\"manualAutomaticState\":\"%1\"").arg(0));
  385. }else if(pnoList.at(i).PName.compare("startStatus")==0){
  386. jdata.append(QString(",\"startStopStatus\":\"%1\"").arg(0));
  387. }else if(pnoList.at(i).PName.compare("faultStatus")==0){
  388. jdata.append(QString(",\"faultStatus\":\"%1\"").arg(0));
  389. }
  390. }
  391. break;
  392. }
  393. }
  394. }
  395. if(xfzddev.DeviceType==258){
  396. XfzdSyncData(4,QUuid::createUuid().toString().replace("{","").replace("}",""),"{"+jdata+"}",xfzddev.devCategory,xfzddev.DeviceCode);
  397. }else if(xfzddev.DeviceType==256){
  398. XfzdSyncData(5,QUuid::createUuid().toString().replace("{","").replace("}",""),"{"+jdata+"}",xfzddev.devCategory,xfzddev.DeviceCode);
  399. }else if(xfzddev.DeviceType==452){
  400. XfzdSyncData(12,QUuid::createUuid().toString().replace("{","").replace("}",""),"{"+jdata+"}",xfzddev.devCategory,xfzddev.DeviceCode);
  401. }
  402. }else{
  403. QList<CnPno> pnoList = getPnoValue(xfzddev.Data);
  404. jdata.append(QString(",\"logTime\":\"%1\"").arg(QDateTime::fromTime_t(myt).toString("yyyy-MM-dd HH:mm:ss")));
  405. while(qry.next()){
  406. for(int i=0;i<pnoList.length();i++){
  407. if(pnoList.at(i).PName.compare("value")==0){
  408. if(pnoList.at(i).Pno==qry.value(0).toInt()&&qry.value(0).toInt()!=0){
  409. jdata.append(QString(",\"pressure\":\"%1\"").arg(qry.value(1).toString()));
  410. if(qry.value(2).toString().indexOf(QString::fromUtf8("正常"))!=-1){
  411. jdata.append(QString(",\"alarmStatus\":\"%1\"").arg(0));
  412. }else if(qry.value(2).toString().indexOf(QString::fromUtf8("低压"))!=-1){
  413. jdata.append(QString(",\"alarmStatus\":\"%1\"").arg(1));
  414. }else if(qry.value(2).toString().indexOf(QString::fromUtf8("高压"))!=-1){
  415. jdata.append(QString(",\"alarmStatus\":\"%1\"").arg(2));
  416. }else {
  417. jdata.append(QString(",\"alarmStatus\":\"%1\"").arg(0));
  418. }
  419. break;
  420. }
  421. }
  422. }
  423. }
  424. if(xfzddev.DeviceType==302){
  425. XfzdSyncData(0,QUuid::createUuid().toString().replace("{","").replace("}",""), "{"+jdata+"}",xfzddev.devCategory,xfzddev.DeviceCode);
  426. }else if(xfzddev.DeviceType==301){
  427. XfzdSyncData(1,QUuid::createUuid().toString().replace("{","").replace("}",""), "{"+jdata+"}",xfzddev.devCategory,xfzddev.DeviceCode);
  428. }else if(xfzddev.DeviceType==305){
  429. XfzdSyncData(13,QUuid::createUuid().toString().replace("{","").replace("}",""), "{"+jdata+"}",xfzddev.devCategory,xfzddev.DeviceCode);
  430. }else if(xfzddev.DeviceType==304){
  431. XfzdSyncData(14,QUuid::createUuid().toString().replace("{","").replace("}",""), "{"+jdata+"}",xfzddev.devCategory,xfzddev.DeviceCode);
  432. }
  433. }
  434. }else if(xfzddev.devCategory==1){
  435. while(qry.next()){
  436. if(qry.value(0).toInt()==1){
  437. if(qry.value(2).toString().indexOf(QString::fromUtf8("监测连线故障"))==0){
  438. jdata.append(QString(",\"connectStatus\":\"%1\"").arg(1));
  439. }else{
  440. jdata.append(QString(",\"connectStatus\":\"%1\"").arg(0));
  441. }
  442. jdata.append(QString(",\"workStatus\":\"%1\"").arg(0));
  443. jdata.append(QString(",\"mainPower\":\"%1\"").arg(0));
  444. jdata.append(QString(",\"logTime\":\"%1\"").arg(QDateTime::fromTime_t(myt).toString("yyyy-MM-dd HH:mm:ss")));
  445. XfzdSyncData(15,QUuid::createUuid().toString().replace("{","").replace("}",""), "{"+jdata+"}",xfzddev.devCategory,xfzddev.DeviceCode);
  446. }
  447. }
  448. }
  449. }
  450. }
  451. if((!isSending)&&(ypSyncdataList.length()>0)){
  452. isSending = true;
  453. ypCount=ypCount+1;
  454. SyncRep rep = ypSyncdataList.first();
  455. sqlList2.append(QString("insert into `ypsync_t_rec` (`id`,`uuid`,`data_str`, `send`, `store_time`) values (NULL,'%1','%2',0,'%3')")
  456. .arg(rep.Id).arg(rep.JsonStr).arg(QDateTime::currentDateTime().toString("yyyy-MM-dd HH:mm:ss")));
  457. QByteArray Report = rep.JsonStr.toUtf8();
  458. QNetworkRequest *req = new QNetworkRequest();
  459. req->setUrl(QUrl("https://iot.usky.cn/ytapi/admin/Manage/ceShiUrl"));
  460. req->setHeader(QNetworkRequest::ContentTypeHeader,"application/json; charset=UTF-8");
  461. req->setHeader(QNetworkRequest::ContentLengthHeader,QString("%1").arg(Report.length()).toUtf8());
  462. QNetworkReply *reply = netAccessManager->post(*req,Report);
  463. QReplayTimeout *pTimeout = new QReplayTimeout(reply,10000);
  464. connect(pTimeout, SIGNAL(net_timeout()),this,SLOT(reply_timeout()));
  465. }
  466. if((!isSending9)&&(XfzdSyncdataLiet.length()>0)){
  467. isSending9 = true;
  468. XfzdSyncRep rep = XfzdSyncdataLiet.first();
  469. QByteArray Report = rep.JsonStr.toUtf8();
  470. QNetworkRequest *req = new QNetworkRequest();
  471. if(rep.Xh==1){
  472. req->setUrl(QUrl("http://iot.shxf-119.com/access/devlog/sprinkler/pipepressunusual"));
  473. }else if(rep.Xh==0){
  474. req->setUrl(QUrl("http://iot.shxf-119.com/access/devlog/hydrant/pipepress"));
  475. }else if(rep.Xh==2){
  476. req->setUrl(QUrl("http://iot.shxf-119.com/access/devlog/hydrant/tanklevel"));
  477. }else if(rep.Xh==3){
  478. req->setUrl(QUrl("http://iot.shxf-119.com/access/devlog/hydrant/tanklevel"));
  479. }else if(rep.Xh==4){
  480. req->setUrl(QUrl("http://iot.shxf-119.com/access/devlog/hydrant/pumpstatus"));
  481. }else if(rep.Xh==5){
  482. req->setUrl(QUrl("http://iot.shxf-119.com/access/devlog/sprinkler/spraypump"));
  483. }else if(rep.Xh==6){
  484. req->setUrl(QUrl("http://iot.shxf-119.com/access/event/fire/alarm/fireinfo"));
  485. }else if(rep.Xh==7){
  486. req->setUrl(QUrl("http://iot.shxf-119.com/access/event/fault/alarm/freport"));
  487. }else if(rep.Xh==8){
  488. req->setUrl(QUrl("http://iot.shxf-119.com/access/event/action/alarm/supervise"));
  489. }else if(rep.Xh==9){
  490. req->setUrl(QUrl("http://iot.shxf-119.com/access/event/fire/alarm/manual"));
  491. }else if(rep.Xh==10){
  492. req->setUrl(QUrl("http://iot.shxf-119.com/access/devlog/alarm/reset"));
  493. }else if(rep.Xh==11){
  494. req->setUrl(QUrl("http://iot.shxf-119.com/access/event/action/alarm/linkagefeedback"));
  495. }else if(rep.Xh==12){
  496. req->setUrl(QUrl("http://iot.shxf-119.com/access/devlog/smoke/smokefan"));
  497. }else if(rep.Xh==13){
  498. req->setUrl(QUrl("http://iot.shxf-119.com/access/devlog/hydrant/endpressure"));
  499. }else if(rep.Xh==14){
  500. req->setUrl(QUrl("http://iot.shxf-119.com/access/devlog/sprinkler/endpressure"));
  501. }else if(rep.Xh==15){
  502. req->setUrl(QUrl("http://iot.shxf-119.com/access/devlog/transmission/devicestatus"));
  503. }
  504. req->setHeader(QNetworkRequest::ContentTypeHeader,"application/json; charset=UTF-8");
  505. req->setRawHeader("appKey","850404889644236801");
  506. req->setHeader(QNetworkRequest::ContentLengthHeader,QString("%1").arg(Report.length()).toUtf8());
  507. sqlList2.append(QString("insert into `xfzdsync_t_rec` (`id`,`uuid`,`data_str`, `send`, `store_time`, `device_code`) values (NULL,'%1','%2',0,'%3','%4')")
  508. .arg(rep.Id).arg(
  509. req->url().toString()+"\r\n"+
  510. rep.JsonStr).arg(QDateTime::currentDateTime().toString("yyyy-MM-dd HH:mm:ss")).arg(rep.deviceCode));
  511. QNetworkReply *reply = XfzdnetAccessManager->post(*req,Report);
  512. QReplayTimeout *pTimeout = new QReplayTimeout(reply,10000);
  513. connect(pTimeout, SIGNAL(net_timeout()),this,SLOT(reply_timeout9()));
  514. }
  515. if(sqlList.length()>0){
  516. if(db.transaction()){
  517. while(sqlList.length()>0){
  518. db.exec(sqlList.first());
  519. sqlList.removeFirst();
  520. }
  521. db.commit();
  522. }
  523. }
  524. if(sqlList2.length()>0){
  525. QSqlDatabase recdb;
  526. if(QSqlDatabase::contains("rec_db"))
  527. recdb = QSqlDatabase::database("rec_db");
  528. else
  529. recdb = QSqlDatabase::addDatabase("QSQLITE","rec_db");
  530. recdb.setDatabaseName(QString("/root/db/watchdoglog%1.db").arg(QDate::currentDate().toString("yyyyMMdd")));
  531. if(recdb.open()){
  532. if(!chk_table("ypsync_t_rec",recdb.tables()))
  533. {
  534. recdb.exec("create table `ypsync_t_rec` (`id` integer primary key autoincrement, `uuid` text(40), `data_str` text(1024), `send` integer , `store_time` text(20), `reply_str` text(1024), `reply_time` text(20))");
  535. }
  536. if(!chk_table("ypsync_t_rec_dis",recdb.tables()))
  537. {
  538. recdb.exec("create table `ypsync_t_rec_dis` (`id` integer primary key autoincrement, `uuid` text(40), `data_str` text(1024), `send` integer , `store_time` text(20), `reply_str` text(1024), `reply_time` text(20))");
  539. }
  540. if(!chk_table("ypsync_t_rec_xy",recdb.tables()))
  541. {
  542. recdb.exec("create table `ypsync_t_rec_xy` (`id` integer primary key autoincrement, `uuid` text(40), `data_str` text(1024), `send` integer , `store_time` text(20), `reply_str` text(1024), `reply_time` text(20))");
  543. }
  544. if(!chk_table("cnsync_t_rec",recdb.tables())){
  545. recdb.exec("create table `cnsync_t_rec` (`id` integer primary key autoincrement, `uuid` text(40), `data_str` text(1024), `send` integer , `store_time` text(20), `reply_str` text(1024), `reply_time` text(20))");
  546. }
  547. if(!chk_table("jasync_t_rec",recdb.tables())){
  548. recdb.exec("create table `jasync_t_rec` (`id` integer primary key autoincrement, `uuid` text(40), `data_str` text(1024), `send` integer , `store_time` text(20), `reply_str` text(1024), `reply_time` text(20))");
  549. }
  550. if(!chk_table("hpsync_t_rec",recdb.tables())){
  551. recdb.exec("create table `hpsync_t_rec` (`id` integer primary key autoincrement, `uuid` text(40), `data_str` text(1024), `send` integer , `store_time` text(20), `reply_str` text(1024), `reply_time` text(20))");
  552. }
  553. if(!chk_table("newcnsync_t_rec",recdb.tables())){
  554. recdb.exec("create table `newcnsync_t_rec` (`id` integer primary key autoincrement, `uuid` text(40), `data_str` text(1024), `send` integer , `store_time` text(20), `reply_str` text(1024), `reply_time` text(20))");
  555. }
  556. if(!chk_table("ypywsync_t_rec",recdb.tables())){
  557. recdb.exec("create table `ypywsync_t_rec` (`id` integer primary key autoincrement, `uuid` text(40), `data_str` text(1024), `send` integer , `store_time` text(20), `reply_str` text(1024), `reply_time` text(20))");
  558. }
  559. if(!chk_table("xfzdsync_t_rec",recdb.tables())){
  560. recdb.exec("create table `xfzdsync_t_rec` (`id` integer primary key autoincrement, `uuid` text(40), `data_str` text(1024), `send` integer , `store_time` text(20), `reply_str` text(1024), `reply_time` text(20), `device_code` text(40))");
  561. }
  562. if(recdb.transaction()){
  563. while(sqlList2.length()>0){
  564. recdb.exec(sqlList2.first());
  565. sqlList2.removeFirst();
  566. }
  567. recdb.commit();
  568. }
  569. recdb.close();
  570. }
  571. // QSqlDatabase::removeDatabase("rec_db");
  572. }
  573. if((tmp_time-work_time)>59){
  574. work_time = tmp_time;
  575. qry = db.exec("select `app_name`, `app_path`, `keep_working`, `wait_time` , `log_limit`, `keep_size` from `app_t_conf`");
  576. while(qry.next()){
  577. QString app_name = qry.value(0).toString();
  578. QString app_path = qry.value(1).toString();
  579. bool keep_working = (qry.value(2).toUInt()==1);
  580. uint wait_time = qry.value(3).toUInt();
  581. bool log_limit = (qry.value(4).toUInt()==1);
  582. qint64 keep_size = qry.value(5).toLongLong();
  583. if(app_name.compare("workerman")==0){
  584. QFileInfoList loglist= QDir(QString("%1").arg(app_path)).entryInfoList();
  585. qint64 current_size = 0;
  586. uint current_time = 0;
  587. // bool nofile = true;
  588. for(int i=0;i<loglist.length();i++)
  589. {
  590. QFileInfo info = loglist.at(i);
  591. if(((info.isFile())&&(!info.isDir()))&&(info.suffix().indexOf("log")>=0))
  592. {
  593. // nofile = false;
  594. current_size += info.size();
  595. if(info.lastModified().toTime_t()>current_time)
  596. current_time = info.lastModified().toTime_t();
  597. }
  598. }
  599. if(log_limit){
  600. if(current_size>keep_size){
  601. ret = system(QString("rm -f %1/*.log").arg(app_path).toUtf8().data());
  602. db.exec(QString("insert into operation_t_rec (`id`, `app_name`, `operation_type`, `operation_comment`,`store_time`) values (NULL,'%1',2,'delete file %2/*.log', '%3')").arg(app_name).arg(app_path).arg(QDateTime::currentDateTime().toString("yyyy-MM-dd HH:mm:ss")));
  603. }
  604. }
  605. }else{
  606. QDir dir(QString("%1/log").arg(app_path));
  607. dir.setSorting(QDir::Time|QDir::Reversed);
  608. QFileInfoList loglist = dir.entryInfoList();
  609. qint64 current_size = 0;
  610. uint current_time = 0;
  611. // bool nofile = true;
  612. for(int i=0;i<loglist.length();i++)
  613. {
  614. QFileInfo info = loglist.at(i);
  615. if((info.isFile())&&(!info.isDir()))
  616. {
  617. // nofile = false;
  618. current_size += info.size();
  619. if(info.lastModified().toTime_t()>current_time)
  620. current_time = info.lastModified().toTime_t();
  621. }
  622. }
  623. if(log_limit){
  624. if(current_size>keep_size)
  625. {
  626. for(int i=0;i<loglist.length();i++)
  627. {
  628. QFileInfo info = loglist.at(i);
  629. qint64 f_size = info.size();
  630. if((info.isFile())&&(!info.isDir())&&(f_size>0))
  631. {
  632. if(QFile(info.absoluteFilePath()).remove())
  633. {
  634. db.exec(QString("insert into operation_t_rec (`id`, `app_name`, `operation_type`, `operation_comment`,`store_time`) values (NULL,'%1',2,'delete file %2', '%3')").arg(app_name).arg(info.fileName()).arg(QDateTime::currentDateTime().toString("yyyy-MM-dd HH:mm:ss")));
  635. current_size -= f_size;
  636. }
  637. }
  638. if(current_size<=keep_size)
  639. break;
  640. }
  641. ret = system(QString("rm -f %1/vendor/workerman/*.log").arg(app_path).toUtf8().data());
  642. }
  643. }
  644. uint c_time = QDateTime::currentDateTime().toTime_t();
  645. if(keep_working)
  646. {
  647. if(((c_time-wait_time)>(current_time+(times*60)))
  648. &&(current_time>0))
  649. {
  650. ret = system(QString("cd %1 && php start.php restart -d && cd").arg(app_path).toUtf8().data());
  651. db.exec(QString("insert into operation_t_rec (`id`, `app_name`, `operation_type`, `operation_comment`,`store_time`) values (NULL,'%1',1,'restart(%2)', '%3')").arg(app_name).arg(QDateTime::fromTime_t(current_time).toString("yyyy-MM-dd HH:mm:ss")).arg(QDateTime::currentDateTime().toString("yyyy-MM-dd HH:mm:ss")));
  652. }
  653. }
  654. }
  655. }
  656. qry.clear();
  657. }
  658. times++;
  659. isRunning = false;
  660. mdb.close();
  661. mdbOpened = false;
  662. }
  663. QList<CnPno> Core::getPnoValue(QString pnoset)
  664. {
  665. QList<CnPno> list;
  666. QJsonParseError json_error;
  667. QJsonDocument jsonDoc(QJsonDocument::fromJson(pnoset.toUtf8(),&json_error));
  668. if(json_error.error == QJsonParseError::NoError){
  669. QJsonArray json_root = jsonDoc.array();
  670. for(int i=0;i<json_root.size();i++){
  671. QJsonObject obj = json_root.at(i).toObject();
  672. QString name = obj.value("name").toString();
  673. int port = obj.value("port").toInt();
  674. QString defvalue = obj.value("default").toString();
  675. if((port>-2)&&(name.length()>0))
  676. list.append(CnPno(name,port,defvalue));
  677. }
  678. }
  679. return list;
  680. }
  681. bool Core::chk_table(QString tablename, QStringList tables)
  682. {
  683. for(int i=0;i<tables.length();i++)
  684. {
  685. if(tables.at(i).compare(tablename)==0)
  686. return true;
  687. }
  688. return false;
  689. }
  690. void Core::db_init()
  691. {
  692. if(!chk_table("app_t_conf",db.tables()))
  693. {
  694. db.exec("create table `app_t_conf` (`id` integer primary key autoincrement, `app_name` text(30), `app_path` text(256), `keep_working` integer , `wait_time` integer, `log_limit` integer, `keep_size` integer)");
  695. db.exec("insert into `app_t_conf` (`id`, `app_name`, `app_path`, `keep_working`, `wait_time` , `log_limit`, `keep_size` ) values (NULL, 'workerman', '/usky/jd_ctiserver/vendor/workerman', 1, 1800, 1, 524288000)");
  696. db.exec("insert into `app_t_conf` (`id`, `app_name`, `app_path`, `keep_working`, `wait_time` , `log_limit`, `keep_size` ) values (NULL, 'jd_rtu', '/jd_rtu', 1, 1800, 1, 524288000)");
  697. db.exec("insert into `app_t_conf` (`id`, `app_name`, `app_path`, `keep_working`, `wait_time` , `log_limit`, `keep_size` ) values (NULL, 'jd_efire', '/usky/jd_electrical', 1, 3600, 1, 524288000)");
  698. db.exec("insert into `app_t_conf` (`id`, `app_name`, `app_path`, `keep_working`, `wait_time` , `log_limit`, `keep_size` ) values (NULL, 'jd_userinfo', '/usky/jd_userinfo', 1, 900, 1, 524288000)");
  699. db.exec("insert into `app_t_conf` (`id`, `app_name`, `app_path`, `keep_working`, `wait_time` , `log_limit`, `keep_size` ) values (NULL, 'jd_water', '/usky/jd_water', 1, 900, 1, 524288000)");
  700. }
  701. if(!chk_table("operation_t_rec",db.tables()))
  702. {
  703. db.exec("create table `operation_t_rec` (`id` integer primary key autoincrement, `app_name` text(30), `operation_type` integer, `operation_comment` text(256), `store_time` text(20))");
  704. }
  705. }