Newer
Older
WorkCardReader / dao / RecordsDao.cpp
tanyue on 18 Jun 2022 4 KB 20220618 界面调整
#include "RecordsDao.h"

RecordsDao::RecordsDao(QObject *parent) : BaseDao(parent)
{

}


QVector<QVariantMap> RecordsDao::findAllRecord()
{
    // 新建查询
    QSqlQuery query(ConnectionManager::getInstance()->getConnection());

    // 查询语句
    QString sql = "SELECT PERSON_ID, TS FROM WCR_RECORDS ORDER BY TS DESC";

    // 执行查询
    query.exec(sql);

    // 返回结果
    QVector<QVariantMap> result;

    // 遍历查询结果
    while (query.next()) {
        QVariantMap item;

        item.insert("person_id", query.value("PERSON_ID").toString());
        item.insert("ts", query.value("TS").toString());
        result.append(item);
    }

    LOG(DEBUG) << QString("查询RECORDS表的所有记录[%1]").arg(result.size()).toStdString();
    return result;
}

QVector<QVariantMap> RecordsDao::findLatestRecords(int count)
{
    // 新建查询
    QSqlQuery query(ConnectionManager::getInstance()->getConnection());

    // 查询语句
    QString sql = "SELECT PERSON_ID, TS FROM WCR_RECORDS ORDER BY TS DESC LIMIT %1";
    sql = sql.arg(count);

    // 执行查询
    query.exec(sql);

    // 返回结果
    QVector<QVariantMap> result;

    // 遍历查询结果
    while (query.next()) {
        QVariantMap item;

        item.insert("person_id", query.value("PERSON_ID").toString());
        item.insert("ts", query.value("TS").toString());
        result.append(item);
    }

    LOG(DEBUG) << QString("查询RECORDS表的最近[%1]条记录[%2]").arg(count).arg(result.size()).toStdString();
    return result;
}

QVariantMap RecordsDao::findRecordById(QString id)
{
    // 新建查询
    QSqlQuery query(ConnectionManager::getInstance()->getConnection());

    // 查询语句
    QString sql = QString("SELECT ID, PERSON_ID, TS, SYNCHED FROM WCR_RECORDS WHERE ID = '%1'").arg(id);

    // 执行查询
    query.exec(sql);

    // 返回结果
    QVariantMap result;

    if (query.next())
    {
        result.insert("id", query.value("ID").toString());
        result.insert("person_id", query.value("PERSON_ID").toString());
        result.insert("ts", query.value("TS").toString());
        result.insert("synched", query.value("SYNCHED").toUInt());
    }

    LOG(DEBUG) << QString("根据id查询RECORDS表的记录[id=%1][%2]").arg(id).arg(sql).toStdString();

    return result;
}

QVector<QVariantMap> RecordsDao::findRecordsByProperty(QString properName, QVariant properValue)
{
    // 新建查询
    QSqlQuery query(ConnectionManager::getInstance()->getConnection());

    // 查询语句
    QString sql = "SELECT ID, PERSON_ID, TS, SYNCHED FROM WCR_RECORDS WHERE %1 = '%2'";
    sql = sql.arg(properName).arg(properValue.toString());

    // 执行查询
    query.exec(sql);

    // 返回结果
    QVector<QVariantMap> result;

    // 遍历查询结果
    while (query.next()) {
        QVariantMap item;

        item.insert("id", query.value("ID").toString());
        item.insert("person_id", query.value("PERSON_ID").toString());
        item.insert("ts", query.value("TS").toString());
        item.insert("synched", query.value("SYNCHED").toUInt());

        result.append(item);
    }

    LOG(DEBUG) << sql.toStdString();
    LOG(DEBUG) << QString("根据属性值查询RECORDS表的记录[%1]").arg(result.size()).toStdString();
    return result;
}

QString RecordsDao::save(QVariantMap object)
{
    // 新建查询
    QSqlQuery query(ConnectionManager::getInstance()->getConnection());

    qulonglong id = ConnectionManager::getInstance()->generateId();

    // INSERT语句
    QString sql = QString("INSERT INTO WCR_RECORDS (ID, PERSON_ID, TS, SYNCHED) VALUES ('%1', '%2', '%3', %4)")
            .arg(id).arg(object.value("person_id").toString())
            .arg(object.value("ts").toString())
            .arg(object.value("synched").toUInt());

    query.prepare(sql);
    LOG(DEBUG) << sql.toStdString();

    // 开启事务
    ConnectionManager::getInstance()->getConnection().transaction();

    // 执行插入
    bool success = query.exec();

    // 结束事务
    ConnectionManager::getInstance()->getConnection().commit();

    // 返回结果
    if (success == true)
    {
        return QString("%1").arg(id);
    }
    else
    {
        return "-1";
    }
}

bool RecordsDao::edit(QVariantMap newObject, QString id)
{
    return false;
}

bool RecordsDao::dele(QString id)
{
    return false;
}