#include "databasethread.h" #include "ytdhcam.h" #define HostName "47.98.201.187" #define HostPort 3306 #define UserName "root" #define PassWord "Yt2018IoT" #define DatabaseName "jdxf" DatabaseThread::DatabaseThread(QObject *parent) : QThread(parent) { hour = 255; sqlList.clear(); alarmRepList.clear(); db = QSqlDatabase::addDatabase("QMYSQL","video_db"); db.setHostName(QString(HostName)); db.setPort(HostPort); db.setUserName(QString(UserName)); db.setPassword(QString(PassWord)); db.setDatabaseName(QString(DatabaseName)); db.open(); check_devicelist(); } void DatabaseThread::appendSql(QString sql) { sqlList.append(sql); } void DatabaseThread::appendAlarm(AlarmRep rep) { alarmRepList.append(rep); } void DatabaseThread::check_devicelist() { QSqlQuery qry = db.exec("select owner_code, owner_name, unitinfo, owner_xh, company, push_param1, push_param2, push_param3, push_param4, login_param from sp_owner where dwtype=16"); int nrow= 0; while(qry.next()){ sysConfShm->deviceInfo[nrow].Enabled=0x01; sprintf(sysConfShm->deviceInfo[nrow].Device_Code,"%s",qry.value(0).toString().toUtf8().data()); sprintf(sysConfShm->deviceInfo[nrow].Device_Name,"%s",qry.value(1).toString().toUtf8().data()); sprintf(sysConfShm->deviceInfo[nrow].Device_Info,"%s",qry.value(2).toString().toUtf8().data()); sprintf(sysConfShm->deviceInfo[nrow].Device_Type,"%s",qry.value(3).toString().toUtf8().data()); sprintf(sysConfShm->deviceInfo[nrow].Company_Code,"%s",qry.value(4).toString().toUtf8().data()); sysConfShm->deviceInfo[nrow].Push_Param[0]=qry.value(5).toUInt(); sysConfShm->deviceInfo[nrow].Push_Param[1]=qry.value(6).toUInt(); sysConfShm->deviceInfo[nrow].Push_Param[2]=qry.value(7).toUInt(); sysConfShm->deviceInfo[nrow].Push_Param[3]=qry.value(8).toUInt(); sysConfShm->deviceInfo[nrow].RegistStatus = 0x00; sysConfShm->deviceInfo[nrow].LoginStatus = 0x00; sysConfShm->deviceInfo[nrow].LoginHandle = 0; QJsonParseError err; QJsonDocument jDoc = QJsonDocument::fromJson(qry.value(9).toString().toUtf8(),&err); if(err.error==QJsonParseError::NoError){ QJsonObject jRoot = jDoc.object(); if((!jRoot.value("loginname").isUndefined())&&(!jRoot.value("loginname").isNull())){ sprintf(sysConfShm->deviceInfo[nrow].LoginName,"%s",jRoot.value("loginname").toString().toUtf8().data()); } if((!jRoot.value("password").isUndefined())&&(!jRoot.value("password").isNull())){ sprintf(sysConfShm->deviceInfo[nrow].Password,"%s",jRoot.value("password").toString().toUtf8().data()); } }else{ } nrow++; } for(int i=nrow;i<102400;i++) sysConfShm->deviceInfo[i].Enabled=0x00; qry.clear(); nrow = 1; qry = db.exec("select id,owner_id from sp_owner_company order by id"); while(qry.next()){ if(nrow<10240){ sysConfShm->companyInfo[nrow].Idx = qry.value(0).toULongLong()&0xffffffff; sysConfShm->companyInfo[nrow].ParentId = 0; sysConfShm->companyInfo[nrow].Enabled = 0x01; sprintf(sysConfShm->companyInfo[nrow].CompanyCode,"%d",qry.value(1).toUInt()); nrow++; }else break; } qry.clear(); nrow = 1; qry = db.exec("select id, owner_code, phone, data2 from sp_owner_phone order by id"); while(qry.next()){ if(nrow<102400){ char *phone = qry.value(2).toString().toUtf8().data(); unsigned long len = strlen(phone); sysConfShm->userInfo[nrow].Idx = qry.value(0).toULongLong()&0xffffffff; sysConfShm->userInfo[nrow].Enabled = 0x01; sprintf(sysConfShm->userInfo[nrow].CompanyCode,"%d",qry.value(1).toUInt()); for(unsigned long i=0;i<20;i++){ sysConfShm->userInfo[nrow].CellPhone[i] = 0x00; if(iuserInfo[nrow].CellPhone[i] = phone[i]; } QString data2 = qry.value(3).toString(); if(data2.length()>0){ QStringList ds = data2.split(","); quint64 p = 0x0000000000000000; for(int i=0;iuserInfo[nrow].InfoChecked = p; }else sysConfShm->userInfo[nrow].InfoChecked=0; nrow++; }else break; } hour=QTime::currentTime().hour(); } void DatabaseThread::run() { while(1){ if(!db.isOpen()){ db.open(); }else{ if(QTime::currentTime().hour()!=hour){ hour=QTime::currentTime().hour(); check_devicelist(); } if(sqlList.length()>0){ while(sqlList.length()>0){ db.exec(sqlList.first()); sqlList.removeFirst(); usleep(1000); } } if(alarmRepList.length()>0){ while(alarmRepList.length()>0){ AlarmRep rep = alarmRepList.first(); QSqlQuery qry = db.exec(rep.Sql); quint64 lastid = qry.lastInsertId().toULongLong()&0xffffffffffffffff; QString companyCode=""; QString phoneList=""; for(int i=0;i<102400;i++){ if(sysConfShm->deviceInfo[i].Enabled==0x01){ if(QString::compare(rep.DeviceId,QString(sysConfShm->deviceInfo[i].Device_Code))==0){ companyCode = QString(sysConfShm->deviceInfo[i].Company_Code); break; } } } if(companyCode.length()>0){ for(int i=0;i<102400;i++){ if(sysConfShm->userInfo[i].Enabled==0x01){ if(QString::compare(companyCode,QString(sysConfShm->userInfo[i].CompanyCode))==0){ if(phoneList.length()==0) phoneList = QString(sysConfShm->userInfo[i].CellPhone); else phoneList.append(QString(",%1").arg(sysConfShm->userInfo[i].CellPhone)); } } } } if((lastid>0)&&(companyCode.length()>0)){ emit AlarmReport(rep.DeviceId,lastid,rep.AlarmType,rep.AlarmTime,companyCode,phoneList); } alarmRepList.removeFirst(); usleep(1000); } } } usleep(50000); } }