Browse Source

调整评估类型和指标体系定义, 需求分析包含两个指标体系

chengxr 1 year ago
parent
commit
f18862eb07

+ 5 - 5
QFD/CCanvas/CMind.cpp

@@ -2,19 +2,19 @@
 
 #include <QDebug>
 
-CNodeData::CNodeData(int projId, int evalType, int number, int pNumber, int id)
-    : id(id), projectId(projId), evalType(evalType), number(number), pNumber(pNumber)
+CNodeData::CNodeData(int projId, int indexType, int number, int pNumber, int id)
+    : id(id), projectId(projId), indexType(indexType), number(number), pNumber(pNumber)
 {
 }
 
 bool CNodeData::isValid() const
 {
-    return projectId >= 0 && evalType > 0 && number >= 0;
+    return projectId >= 0 && indexType > 0 && number >= 0;
 }
 
 bool CNodeData::isNull() const
 {
-    return id == -1 && projectId == -1 && evalType == 0 && number == -1 && pNumber == -1;
+    return id == -1 && projectId == -1 && indexType == 0 && number == -1 && pNumber == -1;
 }
 
 bool CNodeData::isCached() const
@@ -28,7 +28,7 @@ bool CNodeData::hasParent() const
 
 bool CNodeData::isSameMind(CNodeData n) const
 {
-    return projectId == n.projectId && evalType == n.evalType;
+    return projectId == n.projectId && indexType == n.indexType;
 }
 
 CMind::CMind(QObject *parent) : QObject(parent) { }

+ 3 - 24
QFD/CCanvas/CMindView.cpp

@@ -120,26 +120,6 @@ void CMindView::collectItems(CNodeItem *node)
     }
 }
 
-qreal CMindView::hNodeSpace() const
-{
-    return m_hNodeSpace;
-}
-
-void CMindView::setHNodeSpace(qreal h)
-{
-    m_hNodeSpace = h;
-}
-
-qreal CMindView::vNodeSpace() const
-{
-    return m_vNodeSpace;
-}
-
-void CMindView::setVNodeSpace(qreal v)
-{
-    m_vNodeSpace = v;
-}
-
 void CMindView::setALignNodes(bool align)
 {
     m_align = align;
@@ -170,9 +150,9 @@ void CMindView::refreshNodeGeometry(CNodeItem *node, QPointF topLeft)
     node->rectItem()->setPos(QPoint(0, 0));
 
     /// 子节点
-    int x = borderRect.right() + m_hNodeSpace;
+    int x = borderRect.right() + node->hNodeSpace();
     if (m_align) {
-        x = borderRect.left() + m_root->maxBorderWidthOfLevel(node->depth()) + m_hNodeSpace;
+        x = borderRect.left() + m_root->maxBorderWidthOfLevel(node->depth()) + node->hNodeSpace();
     }
 
     int y = topLeft.y();
@@ -183,7 +163,7 @@ void CMindView::refreshNodeGeometry(CNodeItem *node, QPointF topLeft)
     for (QObject *obj : node->children()) {
         CNodeItem *subNode = dynamic_cast<CNodeItem *>(obj);
         refreshNodeGeometry(subNode, QPointF(x, y));
-        y += subNode->treeHeight() + m_vNodeSpace;
+        y += subNode->treeHeight() + subNode->vNodeSpace();
 
         subNode->lineItem()->setStartPos(node->rectItem()->centerRight());
         subNode->lineItem()->setEndPos(subNode->rectItem()->centerLeft());
@@ -224,7 +204,6 @@ bool CMindView::isCloseToEdge()
 
 void CMindView::moveToCenter()
 {
-    m_group->setPos(QPointF());
     QRectF r = m_group->childrenBoundingRect();
     setSceneRect(QRectF(QPointF(), r.size()));
 }

+ 0 - 9
QFD/CCanvas/CMindView.h

@@ -28,12 +28,6 @@ public:
 
     void collectItems(CNodeItem *node);
 
-    qreal hNodeSpace() const;
-    void setHNodeSpace(qreal h);
-
-    qreal vNodeSpace() const;
-    void setVNodeSpace(qreal v);
-
     void setALignNodes(bool align);
 
     CNodeItem *root() const;
@@ -74,9 +68,6 @@ private:
     // 场景中显示的项目
     QList<QGraphicsItem *> m_items;
 
-    qreal m_hNodeSpace = 50;
-    qreal m_vNodeSpace = 20;
-
     bool m_align = true;
 };
 

+ 2 - 2
QFD/CCanvas/CNode.h

@@ -7,13 +7,13 @@ struct CNodeData
 {
     int id         = -1;  // 节点 id, 对应数据库节点表中的 id, 数据库自动生成
     int projectId  = -1;  // 项目 id, 对应数据库项目表中的 id, 为脑图所属项目, 数据库自动生成
-    int evalType   = 0;   // 评估类型
+    int indexType  = 0;   // 指标类型
     int number     = -1;  // 节点编号, 作用域为当前脑图, 0 为根节点
     int pNumber    = -1;  // 父节点编号
     QString name   = "新节点";  // 名称
     QString remark = "";        // 备注
 
-    CNodeData(int projId = -1, int evalType = 0, int number = -1, int pNumber = -1, int id = -1);
+    CNodeData(int projId = -1, int indexType = 0, int number = -1, int pNumber = -1, int id = -1);
 
     bool isValid() const;
     bool isNull() const;

+ 21 - 1
QFD/CCanvas/CNodeItem.cpp

@@ -229,9 +229,29 @@ qreal CNodeItem::borderHeight() const
     return std::max(textHeight() + m_yMargin * 2, m_minHeight);
 }
 
+qreal CNodeItem::hNodeSpace() const
+{
+    return m_hNodeSpace;
+}
+
+void CNodeItem::setHNodeSpace(qreal h)
+{
+    m_hNodeSpace = h;
+}
+
+qreal CNodeItem::vNodeSpace() const
+{
+    return m_vNodeSpace;
+}
+
+void CNodeItem::setVNodeSpace(qreal v)
+{
+    m_vNodeSpace = v;
+}
+
 qreal CNodeItem::childrenHeight() const
 {
-    qreal h = 20 * (children().count() - 1);  // 子节点竖直方向上总间隔
+    qreal h = vNodeSpace() * (children().count() - 1);  // 子节点竖直方向上总间隔
     for (QObject *obj : children()) {
         CNodeItem *item = dynamic_cast<CNodeItem *>(obj);
         h += item->treeHeight();  // 加上各子节点高度

+ 10 - 1
QFD/CCanvas/CNodeItem.h

@@ -67,6 +67,12 @@ public:
     qreal borderWidth() const;
     qreal borderHeight() const;
 
+    qreal hNodeSpace() const;
+    void setHNodeSpace(qreal h);
+
+    qreal vNodeSpace() const;
+    void setVNodeSpace(qreal v);
+
     /// 子节点的布局高度
     qreal childrenHeight() const;
 
@@ -111,9 +117,12 @@ private:
     qreal m_xMargin = 10;
     qreal m_yMargin = 5;
 
-    qreal m_minWidth  = 100;
+    qreal m_minWidth  = 150;
     qreal m_maxWidth  = 200;
     qreal m_minHeight = 30;
+
+    qreal m_hNodeSpace = 80;
+    qreal m_vNodeSpace = 10;
 };
 
 #endif  // CNODEITEM_H

+ 11 - 13
QFD/common/ProjectManager.cpp

@@ -10,12 +10,14 @@
 QString ProjectManager::nameOfIndexType(ProjectManager::IndexType t)
 {
     switch (t) {
-    case Capability:
+    case AbilityIndex:
         return "能力重要度评估指标体系";
-    case TechMessaures:
+    case TechIndex:
         return "技术措施重要度评估对象";
-    case SchemaEval:
+    case OptimalIndex:
         return "方案评估指标体系";
+    case EfficiencyIndex:
+        return "综合效能评估指标体系";
     }
 }
 
@@ -24,15 +26,11 @@ QString ProjectManager::nameOfEvalType(ProjectManager::EvalType t)
     switch (t) {
     case None:
         return "无";
-    case Importance:
-        return "能力与技术重要度评估";
-    case TechSchema:
-        return "技术方案评估";
-    case Requirements:
+    case DemandEval:
         return "需求分析评估";
-    case SchemeOptimization:
+    case OptimalEval:
         return "方案优选评估";
-    case OverallEfficiency:
+    case EfficiencyEval:
         return "综合效能评估";
     }
 }
@@ -42,11 +40,11 @@ QList<ProjectManager::IndexType> ProjectManager::indexListOfEvalTypes(EvalTypes
     QList<IndexType> list;
 
     if ((types & EngineerInfo::Importance) == EngineerInfo::Importance) {
-        list.append(Capability);
-        list.append(TechMessaures);
+        list.append(AbilityIndex);
+        list.append(TechIndex);
     }
     if ((types & EngineerInfo::TechSchema) == EngineerInfo::TechSchema) {
-        list.append(SchemaEval);
+        list.append(OptimalIndex);
     }
 
     return list;

+ 8 - 11
QFD/common/ProjectManager.h

@@ -13,9 +13,10 @@ public:
     /// @attention 枚举值与本地数据库关联,可以新增,但如无必要禁止修改,除非你知道自己在干什么
     enum IndexType
     {
-        Capability    = 0b1,       // 能力重要度评估指标体系
-        TechMessaures = 0b1 << 1,  // 技术措施重要度评估对象
-        SchemaEval    = 0b1 << 2,  // 方案评估指标体系
+        AbilityIndex    = 0b1,       // 能力重要度评估指标体系
+        TechIndex       = 0b1 << 1,  // 技术措施重要度评估对象
+        OptimalIndex    = 0b1 << 2,  // 方案评估指标体系
+        EfficiencyIndex = 0b1 << 3,  // 综合效能评估指标体系?
     };
 
     static QString nameOfIndexType(IndexType t);
@@ -24,14 +25,10 @@ public:
     /// @attention 枚举值与本地数据库关联,可以新增,但如无必要禁止修改,除非你知道自己在干什么
     enum EvalType
     {
-        None       = 0,
-        Importance = Capability | TechMessaures,  // 能力与技术重要度评估
-        TechSchema = SchemaEval,                  // 技术方案评估
-
-        // QFD2 新增
-        Requirements       = 0b1 << 5,  // 需求分析评估
-        SchemeOptimization = 0b1 << 6,  // 方案优选评估
-        OverallEfficiency  = 0b1 << 7,  // 综合效能评估
+        None,
+        DemandEval     = AbilityIndex | TechIndex,  // 需求分析评估
+        OptimalEval    = OptimalIndex,              // 方案优选评估
+        EfficiencyEval = EfficiencyIndex,           // 综合效能评估
     };
 
     Q_ENUM(EvalType);

+ 4 - 4
QFD/dbService/CNodeDataService.cpp

@@ -11,7 +11,7 @@ int CNodeDataService::AddCNodeData(const CNodeData &cNodeData)
         InsertQuery query = t.insertInto(
                 "t_node_data(`project_id`, `eval_type`, `number`, `p_number`, `name`, `remark`, `create_time`)");
 
-        NonQueryResult result = query.values(cNodeData.projectId, cNodeData.evalType, cNodeData.number,
+        NonQueryResult result = query.values(cNodeData.projectId, cNodeData.indexType, cNodeData.number,
                                              cNodeData.pNumber, cNodeData.name, cNodeData.remark,
                                              QDateTime::currentDateTime().toString("yyyy-MM-dd hh:mm:ss"))
                                         .exec();
@@ -31,7 +31,7 @@ bool CNodeDataService::UpdateCNodeData(const CNodeData &cNodeData)
         Transaction t(SqlDBHelper::getDatabase());
         t.update("t_node_data")
                 .set("project_id", cNodeData.projectId)
-                .set("eval_type", cNodeData.evalType)
+                .set("eval_type", cNodeData.indexType)
                 .set("number", cNodeData.number)
                 .set("p_number", cNodeData.pNumber)
                 .set("name", cNodeData.name)
@@ -61,7 +61,7 @@ bool CNodeDataService::QueryCNodeDataById(CNodeData &cNodeData, int id)
             if (query.isNull(0) == false) {
                 cNodeData.id        = query.value(0).toInt();
                 cNodeData.projectId = query.value(1).toInt();
-                cNodeData.evalType  = query.value(1).toInt();
+                cNodeData.indexType = query.value(1).toInt();
                 cNodeData.number    = query.value(2).toInt();
                 cNodeData.pNumber   = query.value(3).toInt();
                 cNodeData.name      = query.value(4).toString();
@@ -92,7 +92,7 @@ bool CNodeDataService::QueryAll(QList<CNodeData> &cNodeDataList, int projectId,
                 CNodeData cNodeData;
                 cNodeData.id        = query.value(0).toInt();
                 cNodeData.projectId = query.value(1).toInt();
-                cNodeData.evalType  = query.value(2).toInt();
+                cNodeData.indexType = query.value(2).toInt();
                 cNodeData.number    = query.value(3).toInt();
                 cNodeData.pNumber   = query.value(4).toInt();
                 cNodeData.name      = query.value(5).toString();

+ 1 - 1
QFD/view/MainWindow.cpp

@@ -109,7 +109,7 @@ MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent)
 
     initLoginPage();
 
-    setMinimumSize(QSize(1200, 800));
+    setMinimumSize(QSize(1200, 900));
 }
 
 MainWindow::~MainWindow() { }

+ 6 - 6
QFD/widgets/CreateProjWidget.cpp

@@ -104,9 +104,9 @@ ProjectInfo CreateProjWidget::editedProjInfo() const
     proj.projectName = m_proj->text();
 
     ProjectManager::EvalTypes t;
-    t |= (m_type1->isChecked() ? ProjectManager::Requirements : ProjectManager::None);
-    t |= (m_type2->isChecked() ? ProjectManager::SchemeOptimization : ProjectManager::None);
-    t |= (m_type3->isChecked() ? ProjectManager::OverallEfficiency : ProjectManager::None);
+    t |= (m_type1->isChecked() ? ProjectManager::DemandEval : ProjectManager::None);
+    t |= (m_type2->isChecked() ? ProjectManager::OptimalEval : ProjectManager::None);
+    t |= (m_type3->isChecked() ? ProjectManager::EfficiencyEval : ProjectManager::None);
     if (t != ProjectManager::None) {
         proj.estimateType = QString::number(t);
     }
@@ -129,9 +129,9 @@ void CreateProjWidget::setProjectInfo(ProjectInfo *info)
 
     ProjectManager::EvalTypes types = ProjectManager::evalTypes(*info);
 
-    m_type1->setChecked((types & ProjectManager::Requirements) == ProjectManager::Requirements);
-    m_type2->setChecked((types & ProjectManager::SchemeOptimization) == ProjectManager::SchemeOptimization);
-    m_type3->setChecked((types & ProjectManager::OverallEfficiency) == ProjectManager::OverallEfficiency);
+    m_type1->setChecked((types & ProjectManager::DemandEval) == ProjectManager::DemandEval);
+    m_type2->setChecked((types & ProjectManager::OptimalEval) == ProjectManager::OptimalEval);
+    m_type3->setChecked((types & ProjectManager::EfficiencyEval) == ProjectManager::EfficiencyEval);
 }
 
 void CreateProjWidget::initWindow()

+ 1 - 1
QFD/widgets/IndexSystemWidget.cpp

@@ -106,7 +106,7 @@ void IndexSystemWidget::slotAddSubNode(int pNumber)
         return;
     }
     CNodeData data = m_mindView->root()->data();
-    CNodeData n    = CNodeData(data.projectId, data.evalType, m_mindView->mind()->maxNumber() + 1, pNumber);
+    CNodeData n    = CNodeData(data.projectId, data.indexType, m_mindView->mind()->maxNumber() + 1, pNumber);
 
     addNode(n);
 }