|
@@ -0,0 +1,170 @@
|
|
|
+#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(i<len)
|
|
|
+ sysConfShm->userInfo[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;i<ds.length();i++){
|
|
|
+ p |= ((0x0000000000000001)<<(ds.at(i).toUInt()&0x3f));
|
|
|
+ }
|
|
|
+ sysConfShm->userInfo[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);
|
|
|
+ }
|
|
|
+}
|