# CasualtySightPlus 项目结构重构规划

## 当前项目结构分析

### 现有目录结构
```
Client/
├── include/           # 头文件目录
│   ├── DogDatabase.h
│   ├── InjuryAnalysisUI.h
│   ├── InjuryDatabase.h
│   ├── UAVDatabase.h
│   ├── guidingui.h
│   └── injurydisiplayui.h
├── src/              # 源码目录
│   ├── DogDatabase.cpp
│   ├── InjuryAnalysisUI.cpp
│   ├── InjuryDatabase.cpp
│   ├── UAVDatabase.cpp
│   ├── guidingui.cpp
│   ├── injurydisiplayui.cpp
│   └── main.cpp
├── ui/               # UI表单文件
│   ├── InjuryAnalysisUI.ui
│   ├── guidingui.ui
│   └── injurydisiplayui.ui
├── res/              # 资源文件
│   ├── html/
│   ├── icon/
│   ├── image/
│   └── qml/
├── build/            # 构建目录
└── AudioModule/      # 音频模块
```

### 现有数据库架构分析

#### 1. UAVDatabase (无人机数据库)
- **连接方式**: 已使用MySQL (`QMYSQL`)
- **表结构**: `uavdatabase` 表
  - id (VARCHAR)
  - state (INT)
  - ip (VARCHAR)
  - port (INT)
  - lon (DOUBLE)
  - lat (DOUBLE)
- **连接信息**: 数据库名: `fly_land_database`, 用户: `root`

#### 2. DogDatabase (地面机器人数据库)
- **连接方式**: 已使用MySQL (`QMYSQL`)
- **表结构**: `dogdatabase` 表
  - id (VARCHAR)
  - state (INT)
  - ip (VARCHAR)
  - port (INT)
  - lon (DOUBLE)
  - lat (DOUBLE)
- **单例模式**: 线程安全实现

#### 3. InjuryDatabase (伤员信息数据库)
- **连接方式**: 已使用MySQL (`QMYSQL`)
- **表结构**: `injurydatabase` 表
  - id (VARCHAR)
  - injuryrank (INT)
  - lon (DOUBLE)
  - lat (DOUBLE)
  - flag (INT)

## 重构后的项目结构规划

### 新的目录结构
```
Client/
├── src/
│   ├── core/                 # 核心业务逻辑
│   │   ├── database/         # 数据库层
│   │   │   ├── managers/     # 数据库管理器
│   │   │   ├── models/       # 数据模型
│   │   │   └── connections/  # 连接管理
│   │   ├── services/         # 业务服务层
│   │   └── utils/            # 工具类
│   ├── ui/                   # 用户界面层
│   │   ├── main/             # 主界面
│   │   ├── components/       # 可复用组件
│   │   │   ├── DeviceCard/   # 设备卡片组件
│   │   │   ├── StatusPanel/  # 状态面板组件
│   │   │   └── MapViewer/    # 地图显示组件
│   │   ├── dialogs/          # 对话框
│   │   └── widgets/          # 自定义Widget
│   ├── resources/            # 资源文件
│   │   ├── styles/           # 样式文件
│   │   ├── themes/           # 主题配置
│   │   ├── images/           # 图片资源
│   │   ├── icons/            # 图标资源
│   │   ├── qml/              # QML文件
│   │   └── html/             # HTML文件
│   └── main.cpp
├── include/                  # 公共头文件
├── forms/                    # UI表单文件 (.ui)
├── build/                    # 构建输出目录
├── config/                   # 配置文件
├── docs/                     # 项目文档
├── tests/                    # 测试文件
└── scripts/                  # 构建脚本
```

### 数据库层重构规划

#### 1. 连接管理器 (ConnectionManager)
```cpp
// src/core/database/connections/ConnectionManager.h
class ConnectionManager {
public:
    static ConnectionManager* getInstance();
    QSqlDatabase getConnection(const QString& connectionName = "default");
    bool initialize(const DatabaseConfig& config);
    void cleanup();
    
private:
    QMap<QString, QSqlDatabase> m_connections;
    DatabaseConfig m_config;
};
```

#### 2. 数据库配置管理
```cpp
// src/core/database/DatabaseConfig.h
struct DatabaseConfig {
    QString host = "localhost";
    int port = 3306;
    QString database = "fly_land_database";
    QString username = "root";
    QString password;
    int maxConnections = 10;
    int connectionTimeout = 30000;
};
```

#### 3. 基础数据访问对象 (BaseDAO)
```cpp
// src/core/database/BaseDAO.h
template<typename T>
class BaseDAO {
public:
    virtual bool insert(const T& entity) = 0;
    virtual bool update(const T& entity) = 0;
    virtual bool deleteById(const QString& id) = 0;
    virtual T findById(const QString& id) = 0;
    virtual QList<T> findAll() = 0;
    virtual QList<T> findByCondition(const QString& condition) = 0;
    
protected:
    QSqlDatabase getDatabase();
    bool executeQuery(const QString& sql, const QVariantList& params = {});
};
```

#### 4. 改进的数据模型
```cpp
// src/core/database/models/UAVModel.h
struct UAVModel {
    QString id;
    QString name;
    int state;
    QString ip;
    int port;
    double longitude;
    double latitude;
    int signalStrength;
    QDateTime lastHeartbeat;
    QDateTime createdAt;
    QDateTime updatedAt;
    
    // 序列化支持
    QJsonObject toJson() const;
    static UAVModel fromJson(const QJsonObject& json);
};
```

### UI组件重构规划

#### 1. 设备卡片组件 (DeviceCard)
```cpp
// src/ui/components/DeviceCard/DeviceCard.h
class DeviceCard : public QWidget {
    Q_OBJECT
public:
    explicit DeviceCard(QWidget* parent = nullptr);
    void setDevice(const DeviceInfo& device);
    void updateStatus(DeviceStatus status);
    void setCardStyle(CardStyle style);
    
signals:
    void deviceSelected(const QString& deviceId);
    void controlRequested(const QString& deviceId);
    void locationRequested(const QString& deviceId);
    
private:
    void setupUI();
    void updateStatusIndicator();
    void applyCardStyle();
    
private:
    DeviceInfo m_device;
    QLabel* m_nameLabel;
    QLabel* m_statusLabel;
    QLabel* m_ipLabel;
    QLabel* m_locationLabel;
    QProgressBar* m_signalBar;
    QPushButton* m_detailsBtn;
    QPushButton* m_controlBtn;
    QPushButton* m_locateBtn;
};
```

#### 2. 状态面板组件 (StatusPanel)
```cpp
// src/ui/components/StatusPanel/StatusPanel.h
class StatusPanel : public QWidget {
    Q_OBJECT
public:
    explicit StatusPanel(QWidget* parent = nullptr);
    void addStatusItem(const QString& name, const QVariant& value);
    void updateStatusItem(const QString& name, const QVariant& value);
    void setUpdateInterval(int msec);
    
private slots:
    void refreshStatus();
    
private:
    QTimer* m_refreshTimer;
    QMap<QString, QLabel*> m_statusLabels;
    QVBoxLayout* m_layout;
};
```

#### 3. 主界面重构 (MainWindow)
```cpp
// src/ui/main/MainWindow.h
class MainWindow : public QMainWindow {
    Q_OBJECT
public:
    explicit MainWindow(QWidget* parent = nullptr);
    
private slots:
    void onDeviceSelected(const QString& deviceId);
    void onStatusChanged(const QString& deviceId, DeviceStatus status);
    void refreshDeviceList();
    
private:
    void setupUI();
    void setupMenus();
    void setupStatusBar();
    void setupDockWidgets();
    void connectSignals();
    
private:
    DeviceListWidget* m_deviceList;
    MapViewerWidget* m_mapViewer;
    StatusPanel* m_statusPanel;
    QDockWidget* m_deviceDock;
    QDockWidget* m_statusDock;
};
```

### 样式系统规划

#### 1. 主题管理器 (ThemeManager)
```cpp
// src/core/ui/ThemeManager.h
class ThemeManager : public QObject {
    Q_OBJECT
public:
    enum Theme { Light, Dark, Military };
    
    static ThemeManager* getInstance();
    void setTheme(Theme theme);
    Theme currentTheme() const;
    QString getStyleSheet(const QString& component) const;
    
signals:
    void themeChanged(Theme theme);
    
private:
    void loadTheme(Theme theme);
    QMap<QString, QString> m_styleSheets;
    Theme m_currentTheme;
};
```

#### 2. 样式配置文件结构
```
src/resources/styles/
├── themes/
│   ├── dark.qss              # 深色主题
│   ├── light.qss             # 浅色主题
│   └── military.qss          # 军事主题
├── components/
│   ├── device_card.qss       # 设备卡片样式
│   ├── status_panel.qss      # 状态面板样式
│   ├── main_window.qss       # 主窗口样式
│   └── buttons.qss           # 按钮样式
└── common/
    ├── colors.qss            # 颜色定义
    ├── fonts.qss             # 字体定义
    └── animations.qss        # 动画效果
```

## 配置文件管理

### 1. 应用配置 (AppConfig)
```json
// config/app.json
{
  "application": {
    "name": "CasualtySightPlus",
    "version": "2.0.0",
    "theme": "military",
    "language": "zh_CN"
  },
  "database": {
    "host": "localhost",
    "port": 3306,
    "name": "fly_land_database",
    "username": "root",
    "pool_size": 10,
    "connection_timeout": 30000
  },
  "ui": {
    "window_size": [1400, 900],
    "device_card_style": "modern",
    "auto_refresh_interval": 5000,
    "animation_enabled": true
  },
  "map": {
    "default_center": [39.9, 116.4],
    "default_zoom": 12,
    "tile_server": "amap"
  }
}
```

### 2. 设备模板配置
```json
// config/device_templates.json
{
  "uav_templates": [
    {
      "name": "侦察机模板",
      "type": "reconnaissance",
      "default_settings": {
        "max_altitude": 500,
        "max_speed": 50,
        "camera_resolution": "1080p"
      }
    }
  ],
  "robot_templates": [
    {
      "name": "巡逻机器人模板",
      "type": "patrol",
      "default_settings": {
        "max_speed": 5,
        "sensor_range": 50,
        "battery_capacity": 8000
      }
    }
  ]
}
```

## 构建系统改进

### 1. 更新的 .pro 文件结构
```pro
# CasualtySightPlus.pro
QT += core gui widgets quickwidgets positioning
QT += multimedia multimediawidgets
QT += webenginewidgets webchannel
QT += sql charts network

CONFIG += c++17

# 版本信息
VERSION = 2.0.0
DEFINES += APP_VERSION=\\\"$$VERSION\\\"

# 包含路径
INCLUDEPATH += \
    include \
    src/core \
    src/ui \
    AudioModule

# 构建目录
OBJECTS_DIR = build/obj
MOC_DIR = build/moc
UI_DIR = build/ui
RCC_DIR = build/rcc
DESTDIR = build/bin

# 预编译头文件
PRECOMPILED_HEADER = src/core/pch.h

# 源文件组织
include(src/core/core.pri)
include(src/ui/ui.pri)
include(AudioModule/audio.pri)

# 资源文件
RESOURCES += \
    resources/resources.qrc \
    resources/styles/styles.qrc \
    resources/themes/themes.qrc

# 安装规则
target.path = /opt/CasualtySightPlus/bin
config.files = config/*
config.path = /opt/CasualtySightPlus/config
INSTALLS += target config
```

### 2. 模块化 .pri 文件
```pro
# src/core/core.pri
HEADERS += \
    $$PWD/database/ConnectionManager.h \
    $$PWD/database/BaseDAO.h \
    $$PWD/database/models/UAVModel.h \
    $$PWD/database/models/DogModel.h \
    $$PWD/database/models/InjuryModel.h \
    $$PWD/services/DeviceService.h \
    $$PWD/utils/Logger.h

SOURCES += \
    $$PWD/database/ConnectionManager.cpp \
    $$PWD/database/BaseDAO.cpp \
    $$PWD/database/models/UAVModel.cpp \
    $$PWD/database/models/DogModel.cpp \
    $$PWD/database/models/InjuryModel.cpp \
    $$PWD/services/DeviceService.cpp \
    $$PWD/utils/Logger.cpp
```

## 迁移策略

### 阶段1: 准备工作
1. 创建新的目录结构
2. 设置构建环境
3. 创建基础框架类

### 阶段2: 数据库层迁移
1. 实现新的数据库连接管理
2. 迁移现有数据模型
3. 创建改进的DAO类
4. 测试数据库操作

### 阶段3: UI组件重构
1. 创建新的设备卡片组件
2. 重构主界面布局
3. 实现样式主题系统
4. 迁移现有功能

### 阶段4: 集成和测试
1. 集成所有模块
2. 全面功能测试
3. 性能优化
4. 文档更新

## 风险评估

### 技术风险
- **数据库迁移风险**: 中等 - 现有数据库结构已经使用MySQL
- **UI兼容性风险**: 低 - 使用标准Qt组件
- **性能风险**: 低 - 改进的架构应该提升性能

### 时间风险
- **开发周期**: 预计4-5周
- **测试时间**: 额外1周
- **文档编写**: 额外几天

### 缓解策略
1. 分阶段实施，确保每个阶段都有可工作的版本
2. 保持现有数据库结构兼容性
3. 充分的单元测试和集成测试
4. 详细的代码审查和文档