这是一个用来监控本地文件夹变化的服务
w1146869587
2021-11-10 08d963298148327571feeaea057185d6cbfb0965
mbwatch/mbwatchdb.cpp
@@ -4,6 +4,8 @@
#include <QSqlQuery>
#include <QDebug>
#include "mbfileutil.h"
#include "mbbackupdirop.h"
#include "mbdateutils.h"
CMBWatchDb::CMBWatchDb()
{
@@ -83,7 +85,7 @@
    return true;
}
bool CMBWatchDb::getTmpFiledSql(QString sql, QString &tmpValue, QString &errInfo)
bool CMBWatchDb::getFiledValueSql(QString sql, QString &tmpValue, QString tmpFiled, QString &errInfo)
{
    QMutexLocker locker(&m_mutex);
@@ -101,7 +103,7 @@
        }
        while(query.next())
        {
            tmpValue = query.value("TmpFiled").toString();
            tmpValue = query.value(tmpFiled).toString();
        }
        query.clear();
@@ -206,7 +208,8 @@
                   "CN_G_ID             VARCHAR (128) PRIMARY KEY NOT NULL,"
                   "CN_S_FILE_NAME      VARCHAR (128) NOT NULL,"
                   "CN_S_NEWFILE_NAME   VARCHAR (128),"
                   "CN_S_SERVERPATH     VARCHAR (128),"
                   "CN_S_SERVER_PATH    VARCHAR (128),"
                   "CN_S_SERVER_FLAG    VARCHAR (128),"
                   "CN_S_OP_TYPE        TEXT (128),"
                   "CN_T_CREATE         DATE (128)"
               ")").arg(m_backupDirTableName);
@@ -284,16 +287,272 @@
    return true;
}
bool CMBWatchDb::insertBackupDirDB(QString opType, QString fileName, QString newFileName, QString svrPath, QString lastMdfTime)
bool CMBWatchDb::exsitLogDB(QString fileName, bool &bExsit, QString &errInfo)
{
    QString sql;
    sql = QString("SELECT * FROM %1 where  CN_S_FILE_NAME='%2'").arg(m_logTableName,fileName);
    if(!exsitSql(sql, bExsit, errInfo))
        return false;
    return true;
}
bool CMBWatchDb::updateLogDB(QString fileName, QString lastMdfTime, QString &errInfo)
{
    QMutexLocker locker(&m_mutex);
    QString connectionName,sql;
    sql = QString("UPDATE  %1 SET "
                  "CN_T_LAST_MODFIY=':lastmdy'"
                  " where CN_S_FILE_NAME=':filename'").arg(m_logTableName);
    {
        QSqlDatabase db = openDataBase();
        connectionName = db.connectionName();
        QSqlQuery queryAdd(db);
        queryAdd.prepare(sql);
        queryAdd.bindValue(":lastmdy", lastMdfTime);
        queryAdd.bindValue(":filename", fileName);
        if(!queryAdd.exec())
        {
            errInfo = queryAdd.lastError().text();
            return false;
        }
    }
    closeDataBase(connectionName);
    return true;
}
bool CMBWatchDb::insertLogDB(QString fileName, QString lastMdfTime, QString &errInfo)
{
    QMutexLocker locker(&m_mutex);
    QString connectionName,sql;
    sql = QString("INSERT INTO %1 "
                  "(CN_S_FILE_NAME,CN_T_LAST_MODFIY)"
                  "  VALUES (:filename,:lastmdf)").arg(m_logTableName);
    {
        QSqlDatabase db = openDataBase();
        connectionName = db.connectionName();
        QSqlQuery queryAdd(db);
        queryAdd.prepare(sql);
        queryAdd.bindValue(":filename", fileName);
        queryAdd.bindValue(":lastmdf", lastMdfTime);
        if(!queryAdd.exec())
        {
            errInfo = queryAdd.lastError().text();
            return false;
        }
    }
    closeDataBase(connectionName);
    return true;
}
bool CMBWatchDb::getLastMdfTimeLogDB(QString fileName, QString &lastMdfTime, QString &errInfo)
{
    QString sql;
    QString tmpFiled;
    tmpFiled = "CN_T_LAST_MODFIY";
    sql      = QString("SELECT * FROM %1 where  CN_S_FILE_NAME='%2'").arg(m_logTableName,fileName);
    if(!getFiledValueSql(sql, lastMdfTime, tmpFiled,errInfo))
        return false;
    return true;
}
bool CMBWatchDb::setLogDB(QString &cmd,bool &bOpDB, QString fileName, QString lastMdfTime, QString &errInfo)
{
    bOpDB = true;
    lastMdfTime = lastMdfTime.trimmed();
    bool  bExsit = false;
    if( !exsitLogDB(fileName, bExsit, errInfo) )
        return false;
    if( bExsit ){
        QString tmpLastMdfTime;
        if(!getLastMdfTimeLogDB(fileName, tmpLastMdfTime, errInfo))
            return false;
        tmpLastMdfTime = tmpLastMdfTime.trimmed();
        if( tmpLastMdfTime == lastMdfTime ){
            bOpDB = false;
            return true;
        }
        cmd = CMBBackupdirOp::CMD_MODIFY;
        if( !updateLogDB(fileName, lastMdfTime,errInfo) )
            return false;
        return true;
    }
    cmd = CMBBackupdirOp::CMD_NEW;
    if( !insertLogDB(fileName, lastMdfTime,errInfo) )
        return false;
    return true;
}
bool CMBWatchDb::setLogDB(bool &bOpDB, QString fileName, QString lastMdfTime, QString &errInfo)
{
    QString cmd;
    return setLogDB(cmd,bOpDB, fileName, lastMdfTime, errInfo);
}
bool CMBWatchDb::insertBackupDirDB(QString opType, QString fileName, QString newFileName, QString svrPath, QString svrFlag, QString &errInfo)
{
    QMutexLocker locker(&m_mutex);
    QString connectionName,sql,id,tCreate;
    id      = CMBFileUtil::genGuid();
    tCreate = CMBDateUtils::getCurTime();
    sql = QString("INSERT INTO %1 "
                  "(CN_G_ID,CN_S_FILE_NAME,CN_S_NEWFILE_NAME,CN_S_SERVER_PATH,CN_S_SERVER_FLAG,CN_S_OP_TYPE,CN_T_CREATE)"
                  "  VALUES (:id,:filename,:newfilename,:svrpath,:svrflag,:optype,:tcreate)").arg(m_backupDirTableName);
    {
        QSqlDatabase db = openDataBase();
        connectionName = db.connectionName();
        QSqlQuery queryAdd(db);
        queryAdd.prepare(sql);
        queryAdd.bindValue(":id", id);
        queryAdd.bindValue(":filename", fileName);
        queryAdd.bindValue(":newfilename", newFileName);
        queryAdd.bindValue(":svrflag", svrFlag);
        queryAdd.bindValue(":svrpath", svrPath);
        queryAdd.bindValue(":optype", opType);
        queryAdd.bindValue(":tcreate", tCreate);
        if(!queryAdd.exec())
        {
            errInfo = queryAdd.lastError().text();
            return false;
        }
    }
    closeDataBase(connectionName);
    return true;
}
bool CMBWatchDb::exsitFileNameBackupDirDB(QString fileName, bool &bExsit, QString &errInfo)
{
    QString sql;
    sql = QString("SELECT * FROM %1 where  CN_S_FILE_NAME='%2'").arg(m_backupDirTableName,fileName);
    if(!exsitSql(sql, bExsit, errInfo))
        return false;
    return true;
}
bool CMBWatchDb::delBackupDirDB(QString fileName, QString &errInfo)
{
    QString sql;
    sql = QString("delete from %1 where CN_S_FILE_NAME='%2'").arg(m_backupDirTableName,fileName);
    if(!execSql(sql,errInfo))
        return false;
    return true;
}
bool CMBWatchDb::renameBakcupDirDB(QString opType, QString fileName, QString newFileName, QString svrPath,  QString svrFlag, QString &errInfo)
{
    return insertBackupDirDB(opType, fileName, newFileName, svrPath, svrFlag, errInfo);
}
bool CMBWatchDb::newBakcupDirDB(QString opType, QString fileName, QString newFileName, QString svrPath, QString svrFlag, QString &errInfo)
{
    return insertBackupDirDB(opType, fileName, newFileName, svrPath, svrFlag, errInfo);
}
bool CMBWatchDb::mdyBakcupDirDB(QString opType, QString fileName, QString newFileName, QString svrPath, QString svrFlag, QString &errInfo)
{
    bool bExsit = false;
    if(!exsitFileNameBackupDirDB(fileName, bExsit, errInfo))
        return false;
    if( bExsit )
        return true;
    return insertBackupDirDB(opType, fileName, newFileName, svrPath, svrFlag, errInfo);
}
bool CMBWatchDb::setBackupDirDB(QString opType, QString fileName, QString newFileName, QString svrPath, QString lastMdfTime, QString svrFlag, QString &errInfo)
{
    opType = opType.trimmed();
    if( opType == CMBBackupdirOp::CMD_NEW ){
        return newBakcupDirDB(opType, fileName, newFileName, svrPath,  svrFlag, errInfo);
    }else if( opType == CMBBackupdirOp::CMD_MODIFY ){
        return mdyBakcupDirDB(opType, fileName, newFileName, svrPath,  svrFlag, errInfo);
    }else if( opType == CMBBackupdirOp::CMD_DELETE ){
        return delBackupDirDB(fileName, errInfo);
    }else if( opType == CMBBackupdirOp::CMD_RENAME ){
        return renameBakcupDirDB(opType, fileName, newFileName, svrPath,  svrFlag, errInfo);
    }
    return true;
}
bool CMBWatchDb::adjDB(QString opType, QString fileName, QString newFileName, QString svrPath, QString lastMdfTime,QString svrFlag,QString &errInfo)
{
    bool    bOpDB = false;
    if( !setLogDB(bOpDB,fileName, lastMdfTime, errInfo) )
        return false;
    if(!bOpDB)
        return true;
    // 写 backup dir db
    if( !setBackupDirDB(opType, fileName,newFileName, svrPath,lastMdfTime, svrFlag, errInfo) )
        return false;
    return true;
}
// 自已决定,操作类型
bool CMBWatchDb::insertBackupDirDB(QString fileName, QString newFileName,
                                   QString svrPath, QString lastMdfTime)
bool CMBWatchDb::adjDB(QString fileName, QString newFileName,
                                   QString svrPath, QString lastMdfTime,QString svrFlag,QString &errInfo)
{
    QString opType;
    bool    bOpDB = false;
    if( !setLogDB(opType,bOpDB,fileName, lastMdfTime, errInfo) )
        return false;
    if(!bOpDB)
        return true;
    //opType = CMBBackupdirOp::CMD_DELETE;
    // 写 backup dir db
    if( !setBackupDirDB(opType, fileName,newFileName, svrPath,lastMdfTime, svrFlag, errInfo) )
        return false;
    return true;
}