#include "sysuserthread.h" #include #include #include #include #include #include SysUserThread::SysUserThread(QObject *iParent) : TopClassThreadAbs(iParent) { } SysUserThread::~SysUserThread() { } void SysUserThread::run() { if (invokeName() == "LOAD_DATA") { loadData(invokeParameter().toInt()); } else if (invokeName() == "SAVE_DATA") { saveData(invokeParameter().toMap()); } } void SysUserThread::loadData(int iIdInt) { TDataResponse dataRes; TSqlQueryV2 sqlQuery(T_SQLCNT_POOL->getSqlDatabase()); sqlQuery.begin(); try { TSqlSelectorV2 sqlSelector; sqlSelector.setTable("sys_user AS U LEFT JOIN pub_contacts AS C ON U.contcat_id = C.id"); sqlSelector.setField("U.*, C.mail"); sqlSelector.setWhere("U.id", QVariant(iIdInt)); sqlSelector.setFieldFormat("product_category", "array"); sqlSelector.setFieldFormat("attr_data", "json"); QVariantMap dataMap = sqlQuery.selectMap(sqlSelector); if (sqlQuery.lastError().isValid()) { throw sqlQuery.lastError(); } sqlSelector.clear(); sqlSelector.setTable("sys_role_map_user AS UR LEFT JOIN sys_role AS R ON UR.role_id = R.id"); sqlSelector.fieldRef() << "R.id" << "R.name" << "R.sys_name" << "R.tags" << "R.description"; sqlSelector.setWhere("UR.user_id", iIdInt); sqlSelector.setOrder("R.name", Qt::AscendingOrder); QVariantList roleList = sqlQuery.selectArrayMap(sqlSelector); if (sqlQuery.lastError().isValid()) { throw sqlQuery.lastError(); } dataMap.insert("ROLE_LIST", roleList); sqlQuery.commit(); dataRes.setData(dataMap); setInvokeResult(dataRes.toVariantMap()); return; } catch (const TError &err) { dataRes.setError(err); } catch (...) { dataRes.setErrText(ttr("Unknow Error!")); } sqlQuery.rollback(); setInvokeResult(dataRes.toVariantMap()); } void SysUserThread::saveData(const QVariantMap &iDataMap) { TDataResponse dataRes; TSqlQueryV2 sqlQuery(T_SQLCNT_POOL->getSqlDatabase()); sqlQuery.begin(); try { TSqlSelectorV2 sqlSelector; sqlSelector.setTable("sys_user"); sqlSelector.setField("COUNT(1)"); sqlSelector.addWhere("username", iDataMap.value("username")); sqlSelector.addWhere("id", iDataMap.value("id"), "!="); int count = sqlQuery.selectCount(sqlSelector); if (count > 0) { throw TError(ttr("'%1' already exists!").arg(iDataMap.value("username").toString()), "ERROR", "ALREADY_EXISTS"); } // 更新pub_contacts表的mail QVariantMap contactMap; contactMap.insert("mail", iDataMap.value("mail")); QString username = iDataMap.value("username").toString(); QString fullname = iDataMap.value("fullname").toString(); QString name; if (!fullname.isEmpty() && (username != fullname)) { name = QString("%1(%2)").arg(fullname).arg(username); } else { name = username; } contactMap.insert("name", name); contactMap.insert("id", iDataMap.value("contcat_id").toInt()); contactMap.insert("source", "company"); contactMap.insert("status", iDataMap.value("status").toString() == "active" ? "active" : "inactive"); TopClassAbs *parentModule = static_cast(this->parent()); if (parentModule) { if (parentModule->isHookExists("handleContactData")) { contactMap = parentModule->callHooksQuick("handleContactData", QVariantList()<