Explorar o código

Show projects

chengxr hai 1 ano
pai
achega
e32abd62e7

+ 2 - 0
QFD/QFD.pro

@@ -61,6 +61,7 @@ INCLUDEPATH += $$PWD/common
 
 SOURCES += \
     common/ExpertManager.cpp \
+    common/ProjectManager.cpp \
     common/QFDAlert.cpp \
     common/QFDConfig.cpp \
     common/QFDIcon.cpp \
@@ -92,6 +93,7 @@ SOURCES += \
 
 HEADERS += \
     common/ExpertManager.h \
+    common/ProjectManager.h \
     common/QFDAlert.h \
     common/QFDConfig.h \
     common/QFDIcon.h \

+ 36 - 0
QFD/common/ExpertManager.cpp

@@ -0,0 +1,36 @@
+#include "ExpertManager.h"
+
+#include <dbService/ClassSet.h>
+#include <dbService/DBServiceSet.h>
+
+int ExpertManager::addUser(QFUser user)
+{
+    if (user.userNo.isEmpty()) {
+        return QF_CODE_EMPTY_ACCOUNT;
+    }
+
+    if (user.rawPassword().isEmpty()) {
+        return QF_CODE_EMPTY_PASSWORD;
+    }
+
+    if (user.userName.isEmpty()) {
+        return QF_CODE_EMPTY_USERNAME;
+    }
+
+    if (-1 == DBServiceSet().AddUserInfo(user)) {
+        return QF_CODE_ACCOUNT_OCCUPIED;
+    }
+
+    return QF_CODE_ADD_USER_SUCCEEDED;
+}
+
+int ExpertManager::deleteUser(int userId)
+{
+    bool ret = DBServiceSet().DeleteUserById(userId);
+    if (!ret) {
+        return QF_CODE_DELETE_USER_FAILED;
+    }
+
+    DBServiceSet().DeleteUserConfigByEngineerId(userId);
+    return QF_CODE_DELETE_USER_SUCCEEDED;
+}

+ 16 - 0
QFD/common/ExpertManager.h

@@ -0,0 +1,16 @@
+#ifndef EXPERTMANAGER_H
+#define EXPERTMANAGER_H
+
+class QFUser;
+
+class ExpertManager
+{
+public:
+    ExpertManager();
+
+    static int addUser(QFUser user);
+
+    static int deleteUser(int userId);
+};
+
+#endif  // EXPERTMANAGER_H

+ 16 - 0
QFD/common/ProjectManager.cpp

@@ -0,0 +1,16 @@
+#include "ProjectManager.h"
+
+#include <dbService/DBServiceSet.h>
+
+int ProjectManager::queryProjects(QList<EngineerInfo *> *projList)
+{
+    bool ret = DBServiceSet().QueryEngineerList(projList);
+
+    if (ret) {
+        for (EngineerInfo *proj : *projList) {
+            DBServiceSet().QueryUserConfigListInfoByEngineerId(&proj->configs, proj->engineerId);
+        }
+    }
+
+    return ret ? QF_CODE_SUCCEEDED : QF_CODE_DATA_ERROR;
+}

+ 14 - 0
QFD/common/ProjectManager.h

@@ -0,0 +1,14 @@
+#ifndef PROJECTMANAGER_H
+#define PROJECTMANAGER_H
+
+#include <QObject>
+
+class EngineerInfo;
+
+class ProjectManager
+{
+public:
+    static int queryProjects(QList<EngineerInfo *> *projList);
+};
+
+#endif  // PROJECTMANAGER_H

+ 2 - 0
QFD/common/QFDAlert.h

@@ -1,6 +1,8 @@
 #ifndef QFDALERT_H
 #define QFDALERT_H
 
+#include <dbService/ClassSet.h>
+
 #include <QObject>
 
 class QFDAlert : public QObject

+ 76 - 0
QFD/dbService/ClassSet.cpp

@@ -218,3 +218,79 @@ int QFUser::login()
 
     return QF_CODE_SUCCEEDED;
 }
+
+QString EngineerInfo::nameOFEvalType(EngineerInfo::EvalType t)
+{
+    switch (t) {
+    case UnknownEval:
+        return "未知评估类型";
+    case Importance:
+        return "能力与技术重要度评估";
+    case TechSchema:
+        return "技术方案评估";
+    }
+}
+
+QString EngineerInfo::nameOFIndexType(EngineerInfo::IndexType t)
+{
+    switch (t) {
+    case UnknownIndex:
+        return "未知指标体系";
+    case Capability:
+        return "能力重要度评估指标体系";
+    case TechMessaures:
+        return "技术措施重要度评估对象";
+    case SchemaEval:
+        return "方案评估指标体系";
+    }
+}
+
+int EngineerInfo::indexCountOfEvalFlags(EvalFlags flags)
+{
+    int indexCount = 0;  // 包含指标体系个数
+    if ((flags & EngineerInfo::Importance) == EngineerInfo::Importance) {
+        indexCount += 2;  // 能力与技术重要度评估,包含 2 个指标体系
+    }
+    if ((flags & EngineerInfo::TechSchema) == EngineerInfo::TechSchema) {
+        indexCount += 1;  // 技术方案评估,包含 1 个指标体系
+    }
+    return indexCount;
+}
+
+EngineerInfo::EvalFlags EngineerInfo::evalFlags() const
+{
+    EvalFlags flags = UnknownEval;
+    if (remark.contains("能力与技术重要度评估")) {
+        flags |= Importance;
+    }
+
+    if (remark.contains("技术方案评估")) {
+        flags |= TechSchema;
+    }
+
+    return flags;
+}
+
+int EngineerInfo::indexCount() const
+{
+    return indexCountOfEvalFlags(evalFlags());
+}
+
+EngineerInfo::IndexType EngineerInfo::indexType(int i) const
+{
+    QList<IndexType> types;
+
+    if ((evalFlags() & EngineerInfo::Importance) == EngineerInfo::Importance) {
+        types.append(Capability);
+        types.append(TechMessaures);
+    }
+    if ((evalFlags() & EngineerInfo::TechSchema) == EngineerInfo::TechSchema) {
+        types.append(SchemaEval);
+    }
+
+    if (i < 0 || i > types.count()) {
+        return UnknownIndex;
+    }
+
+    return types[i];
+}

+ 31 - 0
QFD/dbService/ClassSet.h

@@ -55,6 +55,7 @@ public:
     static QList<NodeMatrixInfo *> datas;
 };
 
+class UserConfig;
 /**
  * @projectName   QFD
  * @author        cyh
@@ -64,6 +65,30 @@ public:
 class EngineerInfo
 {
 public:
+    /// 评估方案类型
+    enum EvalType
+    {
+        UnknownEval = 0,
+        Importance  = 0x001 | 0x010,  // 能力与技术重要度评估
+        TechSchema  = 0x100,          // 技术方案评估
+    };
+
+    Q_DECLARE_FLAGS(EvalFlags, EvalType)
+
+    static QString nameOFEvalType(EvalType t);
+
+    /// 指标体系类型
+    enum IndexType
+    {
+        UnknownIndex  = 0,
+        Capability    = 0x001,  // 能力重要度评估指标体系
+        TechMessaures = 0x010,  // 技术措施重要度评估对象
+        SchemaEval    = 0x100,  // 方案评估指标体系
+    };
+
+    static QString nameOFIndexType(IndexType t);
+    static int indexCountOfEvalFlags(EvalFlags flags);  // 包含指标体系个数
+
     int engineerId = -1;         //工程id
     QString engineerName;        //工程名称
     int indexSetId        = -1;  //指标体系id
@@ -71,6 +96,12 @@ public:
     int schemaEvalId      = -1;  //方案评估id
     QString remark;              //备注
     QString effectNameStr;       //生效列(逗号分割)
+
+    EvalFlags evalFlags() const;
+    int indexCount() const;
+    IndexType indexType(int i) const;
+
+    QList<UserConfig *> configs;
 };
 
 /**

+ 27 - 4
QFD/view/HomeView.cpp

@@ -2,6 +2,8 @@
 
 #include "CreateProjWidget.h"
 #include "ProjectStateWidget.h"
+#include "ProjectManager.h"
+#include "QFDAlert.h"
 
 #include <Widgets/Button.h>
 #include <Widgets/LineEdit.h>
@@ -15,8 +17,6 @@ HomeView::HomeView(QWidget *parent) : QWidget(parent) { }
 
 void HomeView::showEvent(QShowEvent *event)
 {
-    qDebug() << __FUNCTION__ << __LINE__;
-
     if (m_initilized == false) {
         initialize();
         initLayout();
@@ -25,11 +25,12 @@ void HomeView::showEvent(QShowEvent *event)
     }
 
     QWidget::showEvent(event);
+
+    refreshTable();
 }
 
 void HomeView::hideEvent(QHideEvent *event)
 {
-    qDebug() << __FUNCTION__ << __LINE__;
     QWidget::hideEvent(event);
 }
 
@@ -42,7 +43,8 @@ void HomeView::initialize()
     QFont ft("Microsoft YaHei", 12);
     m_titleLabel->setFont(ft);
     m_hBoxLayout     = new QHBoxLayout();
-    m_searchLineEdit = new SearchLineEdit(this);
+    m_searchLineEdit = new LineEdit(this);
+    m_searchLineEdit->setIsClearButtonEnabled(true);
     m_searchLineEdit->setPlaceholderText("搜索工程");
     m_searchLineEdit->setMinimumWidth(300);
     m_createProjPushButton = new PushButton("新建工程", NEWFLICON(FluentIcon, ADD), this);
@@ -71,6 +73,27 @@ void HomeView::connectSignalsAndSlots()
     connect(m_createProjPushButton, &PushButton::clicked, this, &HomeView::slotCreateProjClicked);
 }
 
+void HomeView::refreshTable()
+{
+    qDeleteAll(m_projList);
+    m_projList.clear();
+    int code = ProjectManager::queryProjects(&m_projList);
+    if (code != QF_CODE_SUCCEEDED) {
+        QFDAlert::showAlertWithCode(code, this);
+        return;
+    }
+
+    m_projStateWidget->showProjects(m_projList);
+
+    for (EngineerInfo *proj : m_projList) {
+        qDebug() << proj->engineerId << proj->engineerName << proj->schemaEvalId << proj->remark << proj->evalFlags();
+
+        for (UserConfig *config : proj->configs) {
+            qDebug() << "==" << config->userName << config->weight;
+        }
+    }
+}
+
 void HomeView::slotCreateProjClicked()
 {
     if (m_createProjWidget->isVisible() == false) {

+ 8 - 2
QFD/view/HomeView.h

@@ -3,11 +3,13 @@
 
 #include <QWidget>
 
+class EngineerInfo;
+
 class CreateProjWidget;
 class ProjectStateWidget;
 
 class PushButton;
-class SearchLineEdit;
+class LineEdit;
 
 class QVBoxLayout;
 class QHBoxLayout;
@@ -30,6 +32,8 @@ private:
     void initLayout();
     void connectSignalsAndSlots();
 
+    void refreshTable();
+
 private slots:
     void slotCreateProjClicked();
 
@@ -39,12 +43,14 @@ private:
     QVBoxLayout *m_vBoxLayout          = nullptr;
     QLabel *m_titleLabel               = nullptr;
     QHBoxLayout *m_hBoxLayout          = nullptr;
-    SearchLineEdit *m_searchLineEdit   = nullptr;
+    LineEdit *m_searchLineEdit         = nullptr;
     PushButton *m_createProjPushButton = nullptr;
 
     ProjectStateWidget *m_projStateWidget = nullptr;
 
     CreateProjWidget *m_createProjWidget = nullptr;
+
+    QList<EngineerInfo *> m_projList;
 };
 
 #endif  // HOMEVIEW_H

+ 77 - 44
QFD/widgets/ProjectStateWidget.cpp

@@ -1,5 +1,7 @@
 #include "ProjectStateWidget.h"
 
+#include <dbService/ClassSet.h>
+
 #include <QTableWidget>
 #include <QHeaderView>
 #include <QBoxLayout>
@@ -7,11 +9,67 @@
 
 #include <QDebug>
 
+int ProjectStateWidget::rowCount(EngineerInfo *proj)
+{
+    int expertCount = proj->configs.count();
+    int rowProj     = std::max(proj->indexCount(), proj->indexCount() * expertCount);
+    return rowProj;
+}
+
 ProjectStateWidget::ProjectStateWidget(QWidget *parent) : QWidget(parent)
 {
     initialize();
     initLayout();
-    refreshList();
+}
+
+void ProjectStateWidget::showProjects(QList<EngineerInfo *> proList)
+{
+    m_projTableWidget->clearContents();
+    setRowCount(proList);
+
+    int row = 0;
+
+    for (int i = 0; i < proList.count(); i++) {
+        QColor color = i % 2 ? QColor(244, 244, 255) : QColor(255, 255, 255);
+
+        EngineerInfo *proj = proList[i];
+        int rowProj        = rowCount(proj);
+
+        QTableWidgetItem *item = new QTableWidgetItem(proj->engineerName);
+        setItem(row, 0, item, color);
+        m_projTableWidget->setSpan(row, 0, rowProj, 1);
+
+        for (int j = 0; j < proj->indexCount(); j++) {
+
+            EngineerInfo::IndexType indexType = proj->indexType(j);
+            QString indexName                 = EngineerInfo::nameOFIndexType(indexType);
+            QTableWidgetItem *item            = new QTableWidgetItem(indexName);
+            setItem(row, 1, item, color);
+            m_projTableWidget->setSpan(row, 1, proj->configs.count(), 1);
+
+            for (int k = 0; k < proj->configs.count(); k++) {
+                UserConfig *config        = proj->configs[k];
+                QTableWidgetItem *expItem = new QTableWidgetItem(config->userName);
+                setItem(row + k, 2, expItem, color);
+
+                unsigned seed = QDateTime::currentDateTime().toTime_t() + pow(row + k, 4);
+                srand(seed);
+                bool loaded                = (rand() % 4) == 0;
+                QTableWidgetItem *loadItem = new QTableWidgetItem(loaded ? "已录入" : "未录入");
+                setItem(row + k, 3, loadItem, color);
+            }
+
+            if (proj->configs.count() <= 0) {
+                QTableWidgetItem *item = new QTableWidgetItem("无");
+                setItem(row, 2, item, color);
+                item = new QTableWidgetItem("无");
+                setItem(row, 3, item, color);
+            }
+
+            int rowIndex = std::max(1, proj->configs.count());
+            row += rowIndex;
+        }
+    }
 }
 
 void ProjectStateWidget::initialize()
@@ -27,10 +85,11 @@ void ProjectStateWidget::initialize()
     const QStringList headers = { "工程名", "工程类型", "专家信息", "评估状态" };
     m_projTableWidget->setColumnCount(headers.count());
     m_projTableWidget->setHorizontalHeaderLabels(headers);
-    m_projTableWidget->setAlternatingRowColors(true);
+    //    m_projTableWidget->setAlternatingRowColors(true);
     m_projTableWidget->setStyleSheet(
             "QTableWidget {border: 1px solid rgba(0, 0, 0, 0.073);background: rgb(244, 244, "
             "255);alternate-background-color: rgb(255, 255, 255);}"
+            //            "QTableWidget::item{border:1px outset red;}"
             //            "QHeaderView::section{font-size: 14px;font:bold;font-family: 'Microsoft YaHei UI';}"
             "QHeaderView::section {"
             "background-color: qlineargradient(x1:0, y1:0, x2:0, y2:1,"
@@ -47,48 +106,22 @@ void ProjectStateWidget::initLayout()
     layout()->addWidget(m_projTableWidget);
 }
 
-void ProjectStateWidget::refreshList()
+void ProjectStateWidget::setRowCount(QList<EngineerInfo *> list)
 {
-    m_projTableWidget->clearContents();
-    int projCount = 10;
-
-    QStringList list = { "能力需求指标体系", "技术措施指标体系", "方案评估" };
-    int expertCount  = 3;
-
-    int rowCount = projCount * list.count() * expertCount;
-    m_projTableWidget->setRowCount(rowCount);
-
-    for (int i = 0; i < projCount; i++) {
-        int row                = i * list.count() * expertCount;
-        QTableWidgetItem *item = new QTableWidgetItem(QString("工程%1").arg(i + 1));
-        item->setFlags(Qt::ItemIsEnabled | Qt::ItemIsSelectable);
-        item->setTextAlignment(Qt::AlignCenter);
-        m_projTableWidget->setItem(row, 0, item);
-        m_projTableWidget->setSpan(row, 0, list.count() * expertCount, 1);
-
-        for (int j = 0; j < list.count(); j++) {
-            row                    = i * list.count() * expertCount + j * expertCount;
-            QTableWidgetItem *item = new QTableWidgetItem(list[j]);
-            item->setFlags(Qt::ItemIsEnabled | Qt::ItemIsSelectable);
-            item->setTextAlignment(Qt::AlignCenter);
-            m_projTableWidget->setItem(row, 1, item);
-            m_projTableWidget->setSpan(row, 1, expertCount, 1);
-
-            for (int k = 0; k < 3; k++) {
-                row                       = i * list.count() * expertCount + j * expertCount + k;
-                QTableWidgetItem *expItem = new QTableWidgetItem(QString("专家%1").arg(k + 1));
-                expItem->setFlags(Qt::ItemIsEnabled | Qt::ItemIsSelectable);
-                expItem->setTextAlignment(Qt::AlignCenter);
-                m_projTableWidget->setItem(row, 2, expItem);
-
-                unsigned seed = QDateTime::currentDateTime().toTime_t() + pow(row, 4);
-                srand(seed);
-                bool loaded                = (rand() % 4) == 0;
-                QTableWidgetItem *loadItem = new QTableWidgetItem(loaded ? "已录入" : "未录入");
-                loadItem->setFlags(Qt::ItemIsEnabled | Qt::ItemIsSelectable);
-                loadItem->setTextAlignment(Qt::AlignCenter);
-                m_projTableWidget->setItem(row, 3, loadItem);
-            }
-        }
+    int count = 0;
+    for (EngineerInfo *proj : list) {
+        int rowProj = rowCount(proj);
+        count += rowProj;
     }
+
+    m_projTableWidget->setRowCount(count);
+}
+
+void ProjectStateWidget::setItem(int row, int column, QTableWidgetItem *item, QColor bgColor)
+{
+    item->setBackgroundColor(bgColor);
+    item->setFlags(Qt::ItemIsEnabled | Qt::ItemIsSelectable);
+    item->setTextAlignment(Qt::AlignCenter);
+    m_projTableWidget->setItem(row, column, item);
+    m_projTableWidget->setRowHeight(row, 50);
 }

+ 10 - 1
QFD/widgets/ProjectStateWidget.h

@@ -3,8 +3,11 @@
 
 #include <QWidget>
 
+class EngineerInfo;
+
 class QTableWidget;
 class QVBoxLayout;
+class QTableWidgetItem;
 
 ///
 /// \brief The ProjectStateWidget class
@@ -13,15 +16,21 @@ class ProjectStateWidget : public QWidget
 {
     Q_OBJECT
 public:
+    static int rowCount(EngineerInfo *proj);
+
     explicit ProjectStateWidget(QWidget *parent = nullptr);
 
+    void showProjects(QList<EngineerInfo *> list);
+
 signals:
 
 private:
     void initialize();
     void initLayout();
 
-    void refreshList();
+    void setRowCount(QList<EngineerInfo *> list);
+
+    void setItem(int row, int column, QTableWidgetItem *item, QColor bgColor);
 
 private:
     QVBoxLayout *m_vBoxLayout = nullptr;

BIN=BIN
bin/data/qfd.db