核心数据结构设计说明

1. 概述

本文档详细阐述了房地产专家评估系统中四个核心数据结构类(Hierarchy、Problem、Expert、Model)的设计理念、结构关系和作用机制。这些类构成了系统的标准体系核心,支撑着整个评估业务的数据模型和算法实现。

Hierarchy:层级体系,用于存储综合体系、设备体系、实测实量体系的层级数据
Problem:问题管理,用于存储建筑工程中的各类安全问题和风险点
Expert:专家管理,用于存储专家信息
Model:模型管理,用于存储模型信息

ByPassInfo:轮空信息,用于存储排查项目

Hierarchy是所有数据的基础,一个树结构
Model则是从Hierarchy中抽取出来的子树
Expert是根据特定Model的配置,定义打分的一些权重、表格,用于具体的计算

1.1 核心数据结构ER图

erDiagram
    Hierarchy {
        int id PK
        string name
        json content
        datetime create_time
        datetime update_time
    }
    
    Problem {
        int id PK
        int hierarchy_id FK
        string hierarchy_path
        text description
        json number_factors
        json scale_factors
        json incident_types
        string review_paradigm
        string responsible_person
        string responsible_department
        string correct_practice
        datetime create_time
        datetime update_time
    }
    
    Expert {
        int id PK
        string name
        string type
        string contact
        float matrix_weight
        float membership_weight
        float expert_inquiry_weight
        json weight_map
        json compare_matrix_map
        datetime create_time
        datetime update_time
    }
    
    Model {
        int id PK
        string name
        string type
        int hierarchy_id FK
        int version
        datetime create_time
        datetime update_time
    }
    
    SysModel {
        int id PK
        json problem_ids
        json hierarchy_paths
    }
    
    DeviceModel {
        int id PK
        boolean published
        boolean enable
        string description
    }
    
    SysExpert {
        int id PK
        int system_model_id FK
    }
    
    DeviceExpert {
        int id PK
        int device_model_id FK
    }
    
    Hierarchy ||--o{ Problem : "包含问题"
    Hierarchy ||--o{ Model : "生成模型"
    Model ||--o{ SysModel : "系统模型"
    Model ||--o{ DeviceModel : "设备模型"
    Expert ||--o{ SysExpert : "系统专家"
    Expert ||--o{ DeviceExpert : "设备专家"
    SysModel ||--o{ SysExpert : "关联专家"
    DeviceModel ||--o{ DeviceExpert : "关联专家"
    Problem ||--o{ SysModel : "选择问题"

2. 核心类详细分析

2.1 Hierarchy(层级体系)

2.1.1 类定义与作用

@Entity
public class Hierarchy extends EntityBase {
    @Type(type = "io.hypersistence.utils.hibernate.type.json.JsonType")
    @Column(columnDefinition = "json")
    private SimpleTreeRoot<HierarchyData> content;
}

核心作用:
- 层级数据存储:用于存储综合体系、设备体系、实测实量体系的层级数据
- 树形结构管理:通过JSON格式存储树形结构,支持层级关系的快速查询和操作
- 内存加速:通过@PostLoad注解在数据加载时构建树形结构,提高查询性能

2.1.2 数据结构特点

  • JSON存储:使用JSON格式存储复杂的树形结构数据,支持动态扩展
  • 树形根节点:SimpleTreeRoot<HierarchyData>提供完整的树形操作接口
  • 层级数据:每个节点包含HierarchyData,包含分数和权重信息

2.1.3 业务价值

  • 为整个评估体系提供结构化的层级框架
  • 支持多种评估体系(综合、设备、实测)的统一管理
  • 为问题分类和专家权重配置提供基础结构

2.2 Problem(问题管理)

2.2.1 类定义与作用

@Entity
public class Problem extends EntityBase {
    @Column(nullable = false)
    private Integer hierarchyId;           // 关联层级ID
    
    @Column(nullable = false)
    private String hierarchyPath;         // 层级路径
    
    @Column(nullable = false)
    private String description;            // 问题描述
    
    // 多种因子类型
    private List<NumberFactor> numberFactors;   // 数量因子
    private List<ScaleFactor> scaleFactors;     // 等级因子
    private List<IncidentType> incidentTypes;   // 事故类型
    
    // 问题处理信息
    private String reviewParadigm;         // 点评范式
    private String responsiblePerson;      // 责任人
    private String responsibleDepartment;  // 责任部门
    private String correctPractice;        // 正确做法
}

核心作用:
- 问题定义:存储建筑工程中的各类安全问题和风险点
- 层级关联:通过hierarchyId和hierarchyPath与层级体系建立关联
- 多因子支持:支持数量因子、等级因子等多种评估因子类型
- 处理指导:提供问题处理的标准流程和责任分工

2.2.2 数据结构特点

  • 层级绑定:每个问题必须属于特定的层级节点
  • 多因子设计:支持不同类型的评估因子,适应不同评估场景
  • 完整信息:包含问题描述、处理建议、责任分工等完整信息
  • 文件关联:支持关联事故案例文件,提供参考依据

2.2.3 业务价值

  • 为评估提供标准化的问题库
  • 支持问题的分类管理和快速检索
  • 为评估算法提供问题权重和因子数据
  • 提供问题处理的标准化指导

2.3 Expert(专家管理)

2.3.1 类定义与作用

@Entity
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(name = "type")
public class Expert extends EntityBase {
    // 权重配置
    private Float matrixWeight;           // 矩阵权重
    private Float membershipWeight;       // 隶属度权重
    private Float expertInquiryWeight;    // 专家调查权重
    
    // 打分专家部分
    @Type(type = "io.hypersistence.utils.hibernate.type.json.JsonType")
    private Map<String, Float> weightMap; // 权重映射表
    
    // 模糊专家部分
    @OneToOne(cascade = CascadeType.ALL, fetch = FetchType.LAZY)
    private MembershipMatrix membershipMatrix;  // 隶属度矩阵
    
    @Type(type = "io.hypersistence.utils.hibernate.type.json.JsonType")
    private Map<String, CompareMatrix> compareMatrixMap; // 比较矩阵映射
}

核心作用:
- 专家分类:支持系统专家(SysExpert)和设备专家(DeviceExpert)两种类型
- 权重管理:管理专家在评估中的权重配置
- 算法支持:为打分算法和模糊评估算法提供权重矩阵和比较矩阵
- 模型关联:通过继承关系与具体的模型建立关联

2.3.2 数据结构特点

  • 继承设计:使用单表继承策略,通过type字段区分专家类型
  • 多权重支持:支持矩阵权重、隶属度权重、专家调查权重等多种权重类型
  • 矩阵存储:使用JSON格式存储复杂的权重矩阵和比较矩阵
  • 懒加载:隶属度矩阵使用懒加载,避免不必要的数据库查询

2.3.3 业务价值

  • 为评估算法提供专家权重数据
  • 支持不同专家的个性化配置
  • 为模糊评估提供隶属度矩阵和比较矩阵
  • 实现专家与模型的灵活关联

2.4 Model(模型管理)

2.4.1 类定义与作用

@Entity
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(name = "type", discriminatorType = DiscriminatorType.STRING)
public class Model extends EntityBase {
    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "hierarchy_id")
    Hierarchy hierarchy;                  // 关联层级
    
    @Column(nullable = false)
    private Integer version;             // 版本号
}

核心作用:
- 模型基类:为系统模型、设备模型、实测模型提供统一的基础结构
- 层级关联:与层级体系建立关联,定义模型的适用范围
- 版本管理:支持模型的版本控制,便于模型迭代和回滚
- 子树抽取:从完整的层级数据中抽取特定的子树作为评估模型

2.4.2 继承体系

// 系统模型
@Entity
@DiscriminatorValue("system")
public class SysModel extends Model {
    private List<Integer> problemIds;        // 选中的问题ID列表
    private List<String> hierarchyPaths;     // 层级路径列表
}

// 设备模型
@Entity
@DiscriminatorValue("device")
public class DeviceModel extends Model {
    private Boolean published;               // 是否发布
    private Boolean enable;                 // 是否激活
    private String description;              // 模型描述
}

2.4.3 业务价值

  • 为不同评估场景提供定制化的模型
  • 支持模型的选择性配置和版本管理
  • 为评估计划提供模型选择的基础
  • 实现评估模型的灵活组合和复用

3. 核心类关系分析

3.1 整体关系图

erDiagram
    Hierarchy ||--o{ Problem : contains
    Hierarchy ||--o{ Model : contains
    Model ||--o{ SysModel : extends
    Model ||--o{ DeviceModel : extends
    Expert ||--|| SysModel : belongs_to_system
    Expert ||--|| DeviceModel : belongs_to_device
    Problem ||--o{ SysModel : selected_by

3.2 关系详细说明

3.2.1 Hierarchy → Problem(一对多)

  • 关系性质:一个层级体系包含多个问题
  • 关联方式:通过hierarchyId和hierarchyPath建立关联
  • 业务意义:问题必须属于特定的层级节点,实现问题的分类管理

3.2.2 Hierarchy → Model(一对多)

  • 关系性质:一个层级体系可以生成多个模型
  • 关联方式:通过hierarchy_id外键建立关联
  • 业务意义:模型从层级数据中抽取,定义评估的范围和结构

3.2.3 Model → Expert(多对一)

  • 关系性质:一个模型可以有多个专家,一个专家属于一个模型
  • 关联方式:通过继承关系在子类中建立关联
  • 业务意义:专家为特定模型提供评估算法和权重配置

3.2.4 Problem → SysModel(多对多)

  • 关系性质:系统模型可以选择多个问题,一个问题可以被多个模型选择
  • 关联方式:通过problemIds列表建立关联
  • 业务意义:系统模型从问题库中选择特定问题进行评估

3.3 数据流向分析

3.3.1 模型构建流程

flowchart TD
    A[Hierarchy层级体系] --> B[Problem问题库]
    A --> C[Model模型基类]
    B --> D[SysModel系统模型]
    C --> D
    D --> E[Expert专家配置]
    E --> F[评估算法]

3.3.2 评估执行流程

flowchart TD
    A[选择Model模型] --> B[获取Problem问题列表]
    B --> C[加载Expert专家配置]
    C --> D[构建评估矩阵]
    D --> E[执行评估算法]
    E --> F[生成评估结果]

4. 设计模式与架构思想

4.1 设计模式应用

4.1.1 继承模式

  • Expert类:使用单表继承,通过type字段区分专家类型
  • Model类:使用单表继承,通过type字段区分模型类型
  • 优势:减少表数量,提高查询效率,便于统一管理

4.1.2 组合模式

  • Hierarchy类:通过SimpleTreeRoot<HierarchyData>实现树形结构
  • Problem类:通过多种因子列表实现复杂的问题定义
  • 优势:支持动态扩展,提高代码复用性

4.1.3 策略模式

  • Expert类:通过不同的权重矩阵和比较矩阵支持不同的评估策略
  • Model类:通过不同的子类实现不同的评估模型
  • 优势:支持算法的灵活切换和扩展

4.2 架构思想

4.2.1 领域驱动设计(DDD)

  • 聚合根:Hierarchy作为层级体系的聚合根
  • 实体:Problem、Expert、Model作为独立的业务实体
  • 值对象:HierarchyData、NumberFactor等作为值对象

4.2.2 分层架构

  • 领域层:四个核心类构成系统的领域模型
  • 服务层:通过Service类提供业务逻辑
  • 数据层:通过Repository类提供数据访问

4.2.3 微服务架构

  • 服务拆分:每个核心类对应独立的服务模块
  • 数据隔离:通过外键关联实现数据的一致性
  • 接口设计:通过DTO类实现服务间的数据传输

这四个核心类构成了房地产专家评估系统的数据模型基础,通过合理的架构设计和优化策略,为整个系统提供了稳定、高效、可扩展的数据支撑。