core.cpp 42 KB

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