|
@@ -12,6 +12,8 @@ groupdb::groupdb(std::string strdbpath)
|
|
|
void groupdb::OpenDataBase()
|
|
|
{
|
|
|
mbSQL = false;
|
|
|
+
|
|
|
+ msleep(100);
|
|
|
mdatabase = QSqlDatabase::addDatabase("QSQLITE");
|
|
|
mdatabase.setDatabaseName(mstrdbpath.data());
|
|
|
if (!mdatabase.open())
|
|
@@ -127,7 +129,6 @@ void groupdb::OpenDataBase()
|
|
|
void groupdb::run()
|
|
|
{
|
|
|
|
|
|
- msleep(100);
|
|
|
OpenDataBase();
|
|
|
//建立并打开数据库
|
|
|
|
|
@@ -141,10 +142,17 @@ void groupdb::run()
|
|
|
std::vector<iv::groupdbmsg> xvectordbmsg;
|
|
|
qint64 nLastWrite = QDateTime::currentMSecsSinceEpoch();
|
|
|
qint64 nWriteInterval = 1000;
|
|
|
+ qint64 nLastCheckRecVector = QDateTime::currentMSecsSinceEpoch();
|
|
|
+ qint64 nCheckRecInterval = 3000;
|
|
|
|
|
|
while(!QThread::isInterruptionRequested())
|
|
|
{
|
|
|
qint64 nNow = QDateTime::currentMSecsSinceEpoch();
|
|
|
+ if((nNow-nLastCheckRecVector) >= nCheckRecInterval)
|
|
|
+ {
|
|
|
+ nLastCheckRecVector = nNow;
|
|
|
+ CheckRecID();
|
|
|
+ }
|
|
|
mMutexmsg.lock();
|
|
|
if(mvectordbmsg.size() > 0)
|
|
|
{
|
|
@@ -165,6 +173,7 @@ void groupdb::run()
|
|
|
unsigned int i;
|
|
|
for(i=0;i<xvectordbmsg.size();i++)
|
|
|
{
|
|
|
+
|
|
|
xvectordbmsg.at(i).mrecid = GetRecID(xvectordbmsg[i].mstrvehid,
|
|
|
xvectordbmsg[i].mgroupid);
|
|
|
}
|
|
@@ -188,7 +197,7 @@ void groupdb::run()
|
|
|
}
|
|
|
mdatabase.commit();
|
|
|
xvectordbmsg.clear();
|
|
|
- qDebug("transaction time :%d",xTime.elapsed());
|
|
|
+// qDebug("transaction time :%d",xTime.elapsed());
|
|
|
}
|
|
|
else
|
|
|
{
|
|
@@ -231,6 +240,7 @@ qint64 groupdb::GetRecID(std::string strvehid,int groupid)
|
|
|
{
|
|
|
qint64 nrecid = 0;
|
|
|
bool bFind = false;
|
|
|
+ iv::recid xrec;
|
|
|
mMutexrec.lock();
|
|
|
unsigned int i;
|
|
|
for(i=0;i<mvectorrecid.size();i++)
|
|
@@ -245,30 +255,48 @@ qint64 groupdb::GetRecID(std::string strvehid,int groupid)
|
|
|
}
|
|
|
if(bFind == false)
|
|
|
{
|
|
|
- iv::recid xrec;
|
|
|
+
|
|
|
xrec.mgroupid = groupid;
|
|
|
xrec.mnLastUpdateTime = QDateTime::currentMSecsSinceEpoch();
|
|
|
xrec.mrecid = QDateTime::currentMSecsSinceEpoch();
|
|
|
xrec.mstrvehid = strvehid;
|
|
|
nrecid = xrec.mrecid;
|
|
|
+ mvectorrecid.push_back(xrec);
|
|
|
}
|
|
|
mMutexrec.unlock();
|
|
|
|
|
|
if(bFind == false)
|
|
|
{
|
|
|
+
|
|
|
QSqlQuery query;
|
|
|
|
|
|
char strsen[1000];
|
|
|
- snprintf(strsen,1000,"INSERT INTO groupdata(vehid,recordid,recvtime,msgtime,groupid,intragroupid,vehdata)"
|
|
|
- "VALUES(\"%s\",%lld, %lld, %lld,%d,%d,:vehdata)",
|
|
|
- xvectordbmsg[i].mstrvehid.data(),xvectordbmsg[i].mrecid,xvectordbmsg[i].mrecvtime,
|
|
|
- xvectordbmsg[i].mmsgtime,xvectordbmsg[i].mgroupid,xvectordbmsg[i].mintragroupid);
|
|
|
- query.prepare(strsen);
|
|
|
-// qDebug(strsen);
|
|
|
- query.bindValue(":vehdata", xvectordbmsg[i].mba);
|
|
|
-// query.bindValue(":tracedata", batrace);
|
|
|
- query.exec();
|
|
|
+ snprintf(strsen,1000,"INSERT INTO recorddata(recordid,groupid,vehid)"
|
|
|
+ " VALUES(%lld, %d,\"%s\")",
|
|
|
+ xrec.mrecid,xrec.mgroupid,xrec.mstrvehid.data());
|
|
|
+ query.exec(strsen);
|
|
|
+ qDebug(strsen);
|
|
|
+ // query.exec();
|
|
|
+
|
|
|
}
|
|
|
|
|
|
return nrecid;
|
|
|
}
|
|
|
+
|
|
|
+void groupdb::CheckRecID()
|
|
|
+{
|
|
|
+ qint64 nEraseTime = 60000; //More than 1 minutes no data. erase.
|
|
|
+ if(mvectorrecid.size() == 0)return;
|
|
|
+ mMutexrec.lock();
|
|
|
+ unsigned int i;
|
|
|
+ qint64 nNow = QDateTime::currentMSecsSinceEpoch();
|
|
|
+ for(i=0;i<mvectorrecid.size();i++)
|
|
|
+ {
|
|
|
+ if((nNow - mvectorrecid[i].mnLastUpdateTime)>nEraseTime)
|
|
|
+ {
|
|
|
+ mvectorrecid.erase(mvectorrecid.begin()+i);
|
|
|
+ // qDebug("erase");
|
|
|
+ }
|
|
|
+ }
|
|
|
+ mMutexrec.unlock();
|
|
|
+}
|