123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219 |
- #include "databasethread.h"
- #include "databoardmem.h"
- DatabaseThread::DatabaseThread(QObject *parent) : QThread(parent)
- {
- sqlList.clear();
- keepwork = false;
- }
- void DatabaseThread::stop()
- {
- keepwork = false;
- }
- void DatabaseThread::mem_init()
- {
- int nrow[2];
- QSqlQuery qry = db.exec("select count(*) from yt_t_station ");
- if(qry.next()){
- ytStationCount->StationCount = qry.value(0).toInt();
- }
- qry.clear();
- nrow[0] = 0;
- for(int i=0;i<16;i++)
- ytStationCount->station[i].Enabled = 0x00;
- qry = db.exec("select a.uq_station_id,a.v_station_name,(select count(*) from yt_t_devices where uq_station_id = a.uq_station_id) from yt_t_station a");
- while (qry.next()) {
- if(nrow[0]>15)
- break;
- sprintf(ytStationCount->station[nrow[0]].StationID,"%s",qry.value(0).toString().toUtf8().data());
- sprintf(ytStationCount->station[nrow[0]].StationName,"%s",qry.value(1).toString().toUtf8().data());
- ytStationCount->station[nrow[0]].DeviceCount = qry.value(2).toInt();
- ytStationCount->station[nrow[0]].Enabled = 0x01;
- nrow[1] = 0;
- for(int i=0;i<128;i++)
- ytStationCount->station[nrow[0]].StationDevice[i].Enabled = 0x00;
- QSqlQuery qry2 = db.exec(QString("select a.uq_device_id,a.v_devicename,a.uq_devicetype_id,(select v_devicetype from yt_t_devicetype where uq_devicetype_id = a.uq_devicetype_id) from yt_t_devices a where a.uq_station_id = '%1' order by a.uq_devicetype_id,a.v_devicename").arg(qry.value(0).toString()));
- while(qry2.next()){
- if(nrow[1]>127)
- break;
- sprintf(ytStationCount->station[nrow[0]].StationDevice[nrow[1]].DeviceID,"%s",qry2.value(0).toString().toUtf8().data());
- sprintf(ytStationCount->station[nrow[0]].StationDevice[nrow[1]].DeviceName,"%s",qry2.value(1).toString().toUtf8().data());
- sprintf(ytStationCount->station[nrow[0]].StationDevice[nrow[1]].DeviceTypeID,"%s",qry2.value(2).toString().toUtf8().data());
- sprintf(ytStationCount->station[nrow[0]].StationDevice[nrow[1]].DeviceType,"%s",qry2.value(3).toString().toUtf8().data());
- ytStationCount->station[nrow[0]].StationDevice[nrow[1]].DeviceStatus=0;
- sprintf(ytStationCount->station[nrow[0]].StationDevice[nrow[1]].DeviceStatusNote,"正常");
- ytStationCount->station[nrow[0]].StationDevice[nrow[1]].UpTime = QDateTime::currentDateTime().toTime_t();
- ytStationCount->station[nrow[0]].StationDevice[nrow[1]].Enabled = 0x01;
- for(int i=0;i<256;i++)
- ytStationCount->station[nrow[0]].StationDevice[nrow[1]].DevicePoint[i].Enabled = 0x00;
- QSqlQuery qry3 = db.exec(QString("select i_busaddr,v_pointname,e_pointtype,e_alarmtype,b_iskeypoint from yt_t_point where uq_device_id = '%1'").arg(qry2.value(0).toString()));
- while (qry3.next()) {
- int addr = qry3.value(0).toInt();
- if((addr>=0)&&(addr<256)){
- ytStationCount->station[nrow[0]].StationDevice[nrow[1]].DevicePoint[addr].BusAddr = addr;
- sprintf(ytStationCount->station[nrow[0]].StationDevice[nrow[1]].DevicePoint[addr].PointName,"%s",qry3.value(1).toString().toUtf8().data());
- ytStationCount->station[nrow[0]].StationDevice[nrow[1]].DevicePoint[addr].PointType = qry3.value(2).toInt();
- ytStationCount->station[nrow[0]].StationDevice[nrow[1]].DevicePoint[addr].AlarmType = qry3.value(3).toInt();
- ytStationCount->station[nrow[0]].StationDevice[nrow[1]].DevicePoint[addr].IsKeyPoint = qry3.value(4).toInt();
- ytStationCount->station[nrow[0]].StationDevice[nrow[1]].DevicePoint[addr].Enabled = 0x01;
- }
- }
- qry3.clear();
- nrow[1]++;
- }
- qry2.clear();
- nrow[0]++;
- }
- qry.clear();
- }
- void DatabaseThread::savedata() //保存整点数据
- {
- int minute = QDateTime::currentDateTime().time().minute();
- printf(" enter into savedata() -----minute %d",minute);
- for(int i=0;i<16;i++)
- {
- QString data;
- QString stationStr;
- if(ytStationCount->station[i].Enabled==0x01)
- {
- QString deviceStr;
- //幼儿园只有电气火灾设备特殊处理
- if(QString::compare(ytStationCount->station[i].StationID,"3b153d74-84f4-4441-902c-22960fb97aa5") ==0){
- deviceStr.append("{},{},{},");
- }
- for(int j=0;j<128;j++)
- {
- if(ytStationCount->station[i].StationDevice[j].Enabled==0x01)
- {
- QString pointStr;
- for(int k=0;k<256;k++){
- if(ytStationCount->station[i].StationDevice[j].DevicePoint[k].Enabled==0x01){
- QString pointvalueStr;
- pointvalueStr.append(QString("\"AlarmStatus\":%1,\"Value\":%2,\"Time\":\"%3\"").arg(ytStationCount->station[i].StationDevice[j].DevicePoint[k].pointvaluelist[0].AlarmStatus).arg(ytStationCount->station[i].StationDevice[j].DevicePoint[k].pointvaluelist[0].Value).arg(ytStationCount->station[i].StationDevice[j].DevicePoint[k].pointvaluelist[0].Time));
- if(pointvalueStr.size()>1)
- {
- pointStr.append(QString("{\"BusAddr\":%1,\"PointName\":\"%2\",\"PointType\":%3,\"AlarmType\":%4,%5},").arg(ytStationCount->station[i].StationDevice[j].DevicePoint[k].BusAddr).arg(ytStationCount->station[i].StationDevice[j].DevicePoint[k].PointName).arg(ytStationCount->station[i].StationDevice[j].DevicePoint[k].PointType).arg(ytStationCount->station[i].StationDevice[j].DevicePoint[k].AlarmType).arg(pointvalueStr));
- }else{
- pointStr.append(QString("{\"BusAddr\":%1,\"PointName\":\"%2\",\"PointType\":%3,\"AlarmType\":%4},").arg(ytStationCount->station[i].StationDevice[j].DevicePoint[k].BusAddr).arg(ytStationCount->station[i].StationDevice[j].DevicePoint[k].PointName).arg(ytStationCount->station[i].StationDevice[j].DevicePoint[k].PointType).arg(ytStationCount->station[i].StationDevice[j].DevicePoint[k].AlarmType));
- }
- }
- }
- pointStr=pointStr.left(pointStr.length()-1);
- deviceStr.append(QString("{\"DeviceID\":\"%1\",\"DeviceName\":\"%2\",\"DeviceTypeID\":\"%3\",\"DeviceType\":\"%4\",\"DeviceStatus\":%5,\"DeviceStatusNote\":\"%6\",\"Points\":[%7]},").arg(ytStationCount->station[i].StationDevice[j].DeviceID).arg(ytStationCount->station[i].StationDevice[j].DeviceName).arg(ytStationCount->station[i].StationDevice[j].DeviceTypeID).arg(ytStationCount->station[i].StationDevice[j].DeviceType).arg(ytStationCount->station[i].StationDevice[j].DeviceStatus).arg(ytStationCount->station[i].StationDevice[j].DeviceStatusNote).arg(pointStr));
- }
- }
- deviceStr=deviceStr.left(deviceStr.length()-1);
- stationStr.append(QString("{\"StationID\":\"%1\",\"StationName\":\"%2\",\"Time\":\"%3\",\"LIST\":[%4]}").arg(ytStationCount->station[i].StationID).arg(ytStationCount->station[i].StationName).arg(ytStationCount->station[i].LastCommTime).arg(deviceStr));
- data=QString("{\"time\":\"%1\",\"CMD\":\"getPatrolDetail\",\"VER\":\"1.00\",\"RESULT\":%2,\"TimeStamp\":\"%3\",\"REPLY\":1}").arg(QDateTime::currentDateTime().toString("yyyy-MM-dd HH:mm:ss")).arg(stationStr).arg(QDateTime::currentDateTime().toString("yyyy-MM-dd HH:mm:ss"));
- db.exec(QString("insert into yt_t_rec(v_datatime,uq_station_id,t_values) values('%1','%2','%3')").arg(QDateTime::currentDateTime().toString("yyyy-MM-dd HH:mm:ss")).arg(ytStationCount->station[i].StationID).arg(data));
- }
- }
- }
- void DatabaseThread::run()
- {
- QString savetime = "2430";
- QString savesecond = "1000";
- keepwork = true;
- db = QSqlDatabase::addDatabase("QMYSQL","databoard_db");
- db.setHostName("127.0.0.1");
- db.setUserName("root");
- db.setPassword("root");
- db.setDatabaseName("DataDashBoard");
- if(db.open()){
- mem_init();
- while (keepwork) {
- QDateTime dt = QDateTime::currentDateTime();
- for(int s=0;s<16;s++){
- if(ytStationCount->station[s].Enabled==0x01){
- for(int d=0;d<128;d++){
- if(ytStationCount->station[s].StationDevice[d].Enabled==0x01){
- if((dt.toTime_t()-ytStationCount->station[s].StationDevice[d].UpTime)>300){
- if(ytStationCount->station[s].StationDevice[d].DeviceStatus!=1){
- ytStationCount->station[s].StationDevice[d].DeviceStatus = 2;
- sprintf(ytStationCount->station[s].StationDevice[d].DeviceStatusNote,"%s",QString::fromUtf8("故障").toUtf8().data());
- }
- }
- }
- }
- }
- }
- if((dt.time().minute()==0)||(dt.time().minute()==30)){
- QString Stime = dt.toString("HHmm");
- if(QString::compare(Stime,savetime)!=0){
- savetime = Stime;
- int savecount = 0;
- QSqlQuery savesql = db.exec(QString("select count(*) from yt_t_rec where SUBSTR(v_datatime,1,16) = '%1'").arg(dt.toString("yyyy-MM-dd HH:mm")));
- while(savesql.next())
- {
- savecount = savesql.value(0).toInt();
- }
- if(savecount > 0)
- {
- db.exec(QString("delete from yt_t_rec where SUBSTR(v_datatime,1,16) = '%1'").arg(dt.toString("yyyy-MM-dd HH:mm")));
- }
- savedata();
- }
- }
- //将从数据库查询出来的所有电子巡检记录封装到QList中,然后emit到Core主程序,然后主程序再调用前端处理线程中的函数
- if(dt.time().second()==0){
- QString Ssecond = dt.toString("mmss");
- if(QString::compare(Ssecond,savesecond)!=0)
- {
- savesecond = Ssecond;
- printf(" dt.time().second() ----- %d\n",dt.time().second());
- sendPatrolList.clear();
- QSqlQuery patrol = db.exec("select v_datatime,uq_station_id,t_values from yt_t_rec");
- while (patrol.next()) {
- QString DataTime = patrol.value(0).toDateTime().toString("yyyy-MM-dd HH:mm:ss").toUtf8().data();
- QString StationId = patrol.value(1).toString().toUtf8().data();
- QString Values = patrol.value(2).toString().toUtf8().data();
- sqlList.clear();
- sqlList<<DataTime<<StationId<<Values;
- if(sendPatrolList.size() == 2688){ //保留最近28天的数据 2*24*2*28
- sendPatrolList.removeAt(0);
- }
- sendPatrolList.append(sqlList);
- }
- patrol.clear();
- emit sendpatrol(sendPatrolList);
- }
- }
- usleep(500000);
- }
- db.close();
- }
- }
|