Newer
Older
CasicBioRecNew / dao / SysPersonDao.cpp
#include "SysPersonDao.h"


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

}

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

    // 查询语句
    QString sql = "SELECT * FROM SYS_PERSON LEFT JOIN SYS_DEPT ON SYS_PERSON.DEPTID = SYS_DEPT.ID WHERE SYS_PERSON.DELFLAG = '0'";

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

    // 获取结果集的大小
    int count = 0;

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

    // 遍历查询结果
    while (query.next()) {
        QVariantMap item;
        count++;
        item.insert("id", query.value("id").toLongLong());
        item.insert("delflag", query.value("delflag").toString());
        item.insert("createtime", query.value("createtime").toString());
        item.insert("updatetime", query.value("updatetime").toString());
        item.insert("name", query.value("name").toString());
        item.insert("gender", query.value("gender").toString());
        item.insert("deptid", query.value("deptid").toLongLong());
        item.insert("id_card_no", query.value("id_card_no").toString());
        item.insert("remarks", query.value("remarks").toString());
        item.insert("person_code", query.value("person_code").toString());
        item.insert("sync_id", query.value("sync_id").toLongLong());
        item.insert("deptname", query.value("fullname").toString());
        result.append(item);
    }

    LOG(DEBUG) << QString("查询SYS_PERSON表的所有记录[%1]").arg(count).toStdString();

    return result;
}

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

    // 查询语句
    QString sql = QString("SELECT * FROM SYS_PERSON LEFT JOIN SYS_DEPT ON SYS_PERSON.DEPTID = SYS_DEPT.ID WHERE SYS_PERSON.DELFLAG = '0' AND SYS_PERSON.ID = '%1'").arg(id);

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

    // 返回结果
    QVariantMap result;

    // 获取结果集的大小
    query.last();
    int count = query.at() + 1;

    if (count >=1)
    {
        query.first();

        result.insert("id", query.value("id").toString());
        result.insert("delflag", query.value("delflag").toString());
        result.insert("createtime", query.value("createtime").toString());
        result.insert("updatetime", query.value("updatetime").toString());
        result.insert("name", query.value("name").toString());
        result.insert("gender", query.value("gender").toString());
        result.insert("deptid", query.value("deptid").toLongLong());
        result.insert("id_card_no", query.value("id_card_no").toString());
        result.insert("remarks", query.value("remarks").toString());
        result.insert("person_code", query.value("person_code").toString());
        result.insert("deptname", query.value("fullname").toString());
        result.insert("sync_id", query.value("sync_id").toString());
    }

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

    return result;
}

int SysPersonDao::findRecordCountByNameAndDept(QString name, QString dept)
{
    // 新建查询
    QSqlQuery query(ConnectionManager::getInstance()->getConnection());

    // 查询语句
    QString sql = "SELECT COUNT(P.ID) AS RECCT FROM SYS_PERSON P LEFT JOIN SYS_DEPT D ON P.DEPTID = D.ID WHERE P.DELFLAG = '0'";
    if (name.isEmpty() == false)
    {
        sql += " AND P.NAME LIKE '%" + name + "%'";
    }
    if (dept.isEmpty() == false && dept.indexOf("-1") < 0)
    {
        sql += QString(" AND (P.DEPTID = '%1') OR (D.PIDS LIKE '%,%1,%')").arg(dept);
    }

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

    // 返回结果
    int result;

    // 遍历查询结果
    if (query.next()) {
        result = query.value("RECCT").toInt();
    }

    LOG(TRACE) << QString("根据姓名和部门查询SYS_PERSON记录总数[%1][%2]").arg(result).arg(sql).toStdString();

    return result;
}

QVector<QVariantMap> SysPersonDao::findRecordsByNameAndDept(QString name, QString dept, qint8 limit, qint16 offset)
{
    // 新建查询
    QSqlQuery query(ConnectionManager::getInstance()->getConnection());

    // 查询语句
    QString sql = "SELECT * FROM SYS_PERSON P LEFT JOIN SYS_DEPT D ON P.DEPTID = D.ID WHERE P.DELFLAG = '0'";
    if (name.isEmpty() == false)
    {
        sql += " AND P.NAME LIKE '%" + name + "%'";
    }
    if (dept.isEmpty() == false && dept.indexOf("-1") < 0)
    {
        sql += QString(" AND (P.DEPTID = '%1') OR (D.PIDS LIKE '%,%1,%')").arg(dept);
    }

    sql += QString(" LIMIT %1 OFFSET %2").arg(limit).arg(offset);

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

    // 获取结果集的大小
    int count = 0;

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

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

        count++;

        item.insert("id", query.value("id").toString());
        item.insert("delflag", query.value("delflag").toString());
        item.insert("createtime", query.value("createtime").toString());
        item.insert("updatetime", query.value("updatetime").toString());
        item.insert("name", query.value("name").toString());
        item.insert("gender", query.value("gender").toString());
        item.insert("deptid", query.value("deptid").toLongLong());
        item.insert("id_card_no", query.value("id_card_no").toString());
        item.insert("remarks", query.value("remarks").toString());
        item.insert("person_code", query.value("person_code").toString());
        item.insert("sync_id", query.value("sync_id").toLongLong());
        item.insert("deptname", query.value("fullname").toString());

        result.append(item);
    }

    LOG(TRACE) << QString("根据姓名和部门分页查询SYS_PERSON表的记录[%1][%2]").arg(count).arg(sql).toStdString();

    return result;
}

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

    // 查询语句
    QString sql = "SELECT * FROM SYS_PERSON LEFT JOIN SYS_DEPT ON SYS_PERSON.DEPTID = SYS_DEPT.ID WHERE SYS_PERSON.DELFLAG = '0'";
    QVariantMap::iterator it;
    for (it = conditions.begin(); it != conditions.end(); it++)
    {
        sql += QString(" AND SYS_PERSON.%1 = %2").arg(it.key()).arg(it.value().toString());
    }

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

    // 获取结果集的大小
    int count = 0;

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

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

        count++;

        item.insert("id", query.value("id").toLongLong());
        item.insert("delflag", query.value("delflag").toString());
        item.insert("createtime", query.value("createtime").toString());
        item.insert("updatetime", query.value("updatetime").toString());
        item.insert("name", query.value("name").toString());
        item.insert("gender", query.value("gender").toString());
        item.insert("deptid", query.value("deptid").toLongLong());
        item.insert("id_card_no", query.value("id_card_no").toString());
        item.insert("remarks", query.value("remarks").toString());
        item.insert("person_code", query.value("person_code").toString());
        item.insert("sync_id", query.value("sync_id").toLongLong());
        item.insert("deptname", query.value("fullname").toString());

        result.append(item);
    }

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

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

    // 查询语句
    QString sql = "SELECT * FROM SYS_PERSON LEFT JOIN SYS_DEPT ON SYS_PERSON.DEPTID = SYS_DEPT.ID WHERE SYS_PERSON.DELFLAG = '0' AND SYS_PERSON.%1 = '%2'";
    sql = sql.arg(properName).arg(properValue.toString());

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

    // 获取结果集的大小
    int count = 0;

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

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

        count++;

        item.insert("id", query.value("id").toLongLong());
        item.insert("delflag", query.value("delflag").toString());
        item.insert("createtime", query.value("createtime").toString());
        item.insert("updatetime", query.value("updatetime").toString());
        item.insert("name", query.value("name").toString());
        item.insert("gender", query.value("gender").toString());
        item.insert("deptid", query.value("deptid").toLongLong());
        item.insert("id_card_no", query.value("id_card_no").toString());
        item.insert("remarks", query.value("remarks").toString());
        item.insert("person_code", query.value("person_code").toString());
        item.insert("sync_id", query.value("sync_id").toLongLong());
        item.insert("deptname", query.value("fullname").toString());

        result.append(item);
    }

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

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

    qulonglong id = ConnectionManager::getInstance()->generateId();
    QString tm = QDateTime::currentDateTime().toString("yyyy-MM-dd hh:mm:ss");

    // INSERT语句
    QString sql = QString("INSERT INTO SYS_PERSON "
                  "(ID, DELFLAG, CREATETIME, UPDATETIME, "
                  "NAME, GENDER, DEPTID, ID_CARD_NO, "
                  "REMARKS, PERSON_CODE, SYNC_ID) "
                  "VALUES ('%1', '0', '%2', '%2', '%3', '%4', '%5', '%6', '%7', '%8', '%9')")
            .arg(id).arg(tm)
            .arg(object.value("name").toString())
            .arg(object.value("gender").toString())
            .arg(object.value("deptid").toString())
            .arg(object.value("id_card_no").toString())
            .arg(object.value("remarks").toString())
            .arg(object.value("person_code").toString())
            .arg(object.value("sync_id").toString());

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

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

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

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

    // 返回结果
    if (success == true)
    {
        LOG(DEBUG) << QString("保存SYS_PERSON记录成功[ID = %1]").arg(id).toStdString();
        return QString("%1").arg(id);
    }
    else
    {
        return "-1";
    }
}

bool SysPersonDao::edit(QVariantMap newObject, QString id)
{
    // 新建查询
    QSqlQuery query(ConnectionManager::getInstance()->getConnection());

    QString tm = QDateTime::currentDateTime().toString("yyyy-MM-dd hh:mm:ss");

    // UPDATE语句
    QString sql = QString("UPDATE SYS_PERSON SET UPDATETIME = '%1'").arg(tm);
    if (newObject.contains("name"))
    {
        sql.append(QString(", NAME = '%1'").arg(newObject.value("name").toString()));
    }
    if (newObject.contains("gender"))
    {
        sql.append(QString(", GENDER = '%1'").arg(newObject.value("gender").toString()));
    }
    if (newObject.contains("deptid"))
    {
        sql.append(QString(", DEPTID = %1").arg(newObject.value("deptid").toULongLong()));
    }
    if (newObject.contains("person_code"))
    {
        sql.append(QString(", PERSON_CODE = '%1'").arg(newObject.value("person_code").toString()));
    }

    sql.append(QString(" WHERE ID = %1").arg(id));

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

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

    // 执行更新
    bool success = query.exec(sql);

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

    // 返回结果
    return success;
}

bool SysPersonDao::dele(QString id)
{
    // 新建查询
    QSqlQuery query(ConnectionManager::getInstance()->getConnection());

    QString tm = QDateTime::currentDateTime().toString("yyyy-MM-dd hh:mm:ss");
    qint64 tmms = QDateTime::currentDateTime().toMSecsSinceEpoch();

    // UPDATE语句
    QString sql = QString("UPDATE SYS_PERSON SET UPDATETIME = '%1', DELFLAG = '%2' WHERE ID = '%3'")
            .arg(tm).arg(tmms).arg(id);

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

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

    // 执行更新
    bool success = query.exec(sql);

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

    // 返回结果
    return success;
}