# 数据生命周期管理

<cite>
**本文引用的文件**
- `README.md`
- `package.json`
- `src/app/app.component.ts`
- `src/app/services/project-manager/project-manager.service.ts`
- `src/app/services/storage.service.ts`
- `src/app/services/valuation-date.service.ts`
- `src/app/services/globalvariable.service.ts`
- `src/app/services/api/system-api.service.ts`
- `src/app/utils/date-utils.ts`
- `src-tauri/src/lib.rs`
- `src-tauri/Cargo.toml`
- `src-tauri/src/main.rs`
</cite>

## 目录
1. [简介](#简介)
2. [项目结构](#项目结构)
3. [核心组件](#核心组件)
4. [架构总览](#架构总览)
5. [详细组件分析](#详细组件分析)
6. [依赖关系分析](#依赖关系分析)
7. [性能考量](#性能考量)
8. [故障排查指南](#故障排查指南)
9. [结论](#结论)
10. [附录](#附录)

## 简介
本文件面向“GSDJGXApp”项目，围绕数据生命周期管理进行系统性梳理与说明。重点覆盖以下方面：
- 数据从创建到销毁的完整生命周期：创建、更新、归档、删除
- 项目数据管理：项目状态跟踪、生命周期事件、数据保留策略
- 数据清理机制：过期数据识别、自动清理规则、手动清理流程
- 数据归档策略：历史数据管理、压缩存储、检索优化
- 备份与恢复机制：定期备份、增量备份、灾难恢复、数据一致性保证
- 数据治理：数据分类、权限控制、审计日志、合规要求
- 具体实现与配置示例：结合前端服务与后端命令接口定位关键实现点

## 项目结构
项目采用“前端 Angular + 后端 Tauri/Rust”的双端架构，数据持久化以 SQLite 为主，配合 SeaORM 进行结构化查询与事务管理；同时通过 Tauri 插件提供文件系统、存储、日志、更新等能力。

```mermaid
graph TB
subgraph "前端(Angular)"
APP["app.component.ts"]
PM["project-manager.service.ts"]
ST["storage.service.ts"]
VDS["valuation-date.service.ts"]
GVS["globalvariable.service.ts"]
SAS["system-api.service.ts"]
DU["date-utils.ts"]
end
subgraph "后端(Tauri/Rust)"
LIB["src/lib.rs"]
MAIN["src/main.rs"]
CARGO["Cargo.toml"]
end
APP --> PM
APP --> ST
APP --> VDS
APP --> GVS
APP --> SAS
APP --> DU
APP --> LIB
LIB --> MAIN
MAIN --> CARGO
```

**图表来源**
- `src/app/app.component.ts#L1-L851`
- `src/app/services/project-manager/project-manager.service.ts#L1-L252`
- `src/app/services/storage.service.ts#L1-L282`
- `src/app/services/valuation-date.service.ts#L1-L306`
- `src/app/services/globalvariable.service.ts#L1-L442`
- `src/app/services/api/system-api.service.ts#L1-L273`
- `src/app/utils/date-utils.ts#L1-L106`
- `src-tauri/src/lib.rs#L1-L308`
- `src-tauri/src/main.rs#L1-L9`
- `src-tauri/Cargo.toml#L1-L66`

**章节来源**
- `README.md#L1-L118`
- `package.json#L1-L90`

## 核心组件
- 项目管理与工作区：通过全局变量服务维护工作区路径与数据库路径，驱动项目状态与视图切换；项目管理服务负责最近项目列表的增删改查与统计。
- 存储与配置：前端使用 Tauri Store 插件持久化应用设置、窗口状态与用户偏好；同时提供最近项目列表的持久化。
- 基准日与估值：估值日服务封装对“valuation_date”表的查询、创建、更新、删除与激活切换，并提供日期格式化与工作日序列生成。
- 系统与备份：系统 API 服务封装文件系统、日志、配置以及备份/恢复等系统级操作，供前端调用。
- 日期工具：统一日期格式化与本地时间处理，避免时区差异导致的数据不一致。

**章节来源**
- `src/app/services/globalvariable.service.ts#L51-L442`
- `src/app/services/project-manager/project-manager.service.ts#L16-L252`
- `src/app/services/storage.service.ts#L7-L282`
- `src/app/services/valuation-date.service.ts#L39-L306`
- `src/app/services/api/system-api.service.ts#L11-L273`
- `src/app/utils/date-utils.ts#L4-L106`

## 架构总览
前端通过 Tauri 命令与后端交互，后端集中注册大量数据相关命令，覆盖项目、基准日、财务报表、参数设置、可比公司、计算分析、报告存储、验证数据等模块。SQLite 作为本地数据库，SeaORM 提供 ORM 能力；日志、存储、文件系统等插件提供基础设施。

```mermaid
sequenceDiagram
participant FE as "前端组件<br/>app.component.ts"
participant SVC as "系统API服务<br/>system-api.service.ts"
participant CMD as "后端命令注册<br/>src/lib.rs"
participant DB as "SQLite/SeaORM"
FE->>SVC : 调用系统命令(如备份/恢复/文件操作)
SVC->>CMD : invoke('command', payload)
CMD->>DB : 执行SQL/事务/表初始化
DB-->>CMD : 返回结果/错误
CMD-->>SVC : 返回结果
SVC-->>FE : Promise.resolve/错误处理
```

**图表来源**
- `src/app/app.component.ts#L410-L439`
- `src/app/services/api/system-api.service.ts#L11-L273`
- `src-tauri/src/lib.rs#L77-L304`

## 详细组件分析

### 项目数据管理与生命周期
- 工作区与数据库路径：全局变量服务在设置工作区路径时同步构建数据库路径，并触发工作区变更事件，驱动前端视图与数据加载。
- 最近项目列表：项目管理服务维护最近打开项目的有序列表，支持去重、截断、更新时间戳、清空等操作；与前端最近项目弹窗联动。
- 生命周期事件：通过自定义事件（如 workspace-path-changed、current-project-changed）在组件间传递状态变更，便于订阅方响应。

```mermaid
flowchart TD
Start(["设置工作区路径"]) --> BuildDB["构建数据库路径"]
BuildDB --> EmitWS["触发工作区变更事件"]
EmitWS --> LoadVD["加载激活的估值日"]
LoadVD --> Ready(["项目数据可用"])
subgraph "最近项目管理"
Open["打开项目"] --> AddRecent["加入最近项目列表"]
AddRecent --> Dedup["去重并更新时间"]
Dedup --> Limit["限制数量"]
Limit --> Persist["持久化存储"]
end
```

**图表来源**
- `src/app/services/globalvariable.service.ts#L133-L160`
- `src/app/services/project-manager/project-manager.service.ts#L60-L170`
- `src/app/app.component.ts#L656-L671`

**章节来源**
- `src/app/services/globalvariable.service.ts#L51-L442`
- `src/app/services/project-manager/project-manager.service.ts#L16-L252`
- `src/app/app.component.ts#L656-L671`

### 估值日与基准日生命周期
- 激活/停用：通过“设置激活的估值日”命令实现原子切换；支持停用全部。
- 查询与分页：提供分页查询、按ID查询、批量查询等接口。
- 初始化与校验：提供表初始化命令与数据库状态检查命令。
- 日期格式化：提供本地时间格式化与工作日序列生成，便于批量创建。

```mermaid
sequenceDiagram
participant FE as "前端组件"
participant VDS as "估值日服务"
participant CMD as "后端命令"
participant DB as "SQLite"
FE->>VDS : setActiveValuationDateOnBackend(id)
VDS->>CMD : invoke('set_active_valuation_date', {id})
CMD->>DB : 更新激活记录
DB-->>CMD : 成功/失败
CMD-->>VDS : 返回结果
VDS-->>FE : 设置激活状态
```

**图表来源**
- `src/app/services/valuation-date.service.ts#L199-L208`
- `src-tauri/src/lib.rs#L159-L160`

**章节来源**
- `src/app/services/valuation-date.service.ts#L39-L306`
- `src-tauri/src/lib.rs#L154-L160`

### 数据清理机制
- 过期数据识别：存在“清理验证THS数据”相关命令，表明系统具备清理过期或临时验证数据的能力。
- 自动清理规则：通过命令接口暴露清理入口，实际策略可在后端实现中定义（例如按时间阈值或项目维度）。
- 手动清理流程：前端可通过系统 API 服务调用相应命令，或在管理界面触发清理动作。

```mermaid
flowchart TD
Scan["扫描验证数据"] --> Threshold{"是否超过保留阈值?"}
Threshold --> |是| Cleanup["调用清理命令"]
Threshold --> |否| Keep["保留数据"]
Cleanup --> Done(["完成"])
Keep --> Done
```

**图表来源**
- `src-tauri/src/lib.rs#L246-L247`

**章节来源**
- `src-tauri/src/lib.rs#L246-L247`

### 数据归档策略
- 历史数据管理：系统提供“项目扩展信息”“财务报表”“可比公司计算结果批次”“DLOM计算”“财务指标分析”“参数设置”“方法选择”等多张表，支持历史数据的结构化存储与查询。
- 压缩存储：后端导出Excel时使用专用库，便于生成压缩的报表文件。
- 检索优化：提供分页查询、条件过滤、唯一性检查等命令，支撑高效检索。

```mermaid
erDiagram
PROJECT {
int id PK
string name
string workspace_path
}
VALUATION_DATE {
int valuation_date_id PK
string valuation_date
string day_type
string status
}
FINANCIAL_STATEMENT {
int id PK
int project_id FK
string period
json data
}
COMPARABLE_COMPANY_CALC_BATCH {
int id PK
int project_id FK
string batch_key
text batch_data
}
PARAMETER_SETTINGS {
int id PK
int project_id FK
string config_key
json config_value
}
METHOD_SELECTION {
int id PK
int project_id FK
string method_name
}
PROJECT ||--o{ FINANCIAL_STATEMENT : "拥有"
PROJECT ||--o{ COMPARABLE_COMPANY_CALC_BATCH : "拥有"
PROJECT ||--o{ PARAMETER_SETTINGS : "拥有"
PROJECT ||--o{ METHOD_SELECTION : "拥有"
PROJECT ||--o{ VALUATION_DATE : "关联(扩展信息)"
```

**图表来源**
- `src-tauri/src/lib.rs#L162-L223`
- `src-tauri/src/lib.rs#L198-L203`
- `src-tauri/src/lib.rs#L225-L232`

**章节来源**
- `src-tauri/src/lib.rs#L162-L223`
- `src-tauri/src/lib.rs#L198-L203`
- `src-tauri/src/lib.rs#L225-L232`

### 备份与恢复机制
- 备份/恢复：系统 API 服务提供创建备份、还原备份、列出备份、删除备份等命令。
- 定期备份：可通过外部调度或应用内任务触发；建议结合项目生命周期事件（如项目归档、周期性评估）自动触发。
- 增量备份：当前命令集未显式暴露增量备份接口，可考虑基于时间戳或哈希对比实现增量策略。
- 灾难恢复：结合备份列表与还原命令，实现快速恢复；建议在前端提供可视化恢复向导。
- 数据一致性：后端命令均通过 SeaORM 与 SQLite 执行，建议在关键流程使用事务命令保障一致性。

```mermaid
sequenceDiagram
participant FE as "前端组件"
participant SAS as "系统API服务"
participant CMD as "后端命令"
participant FS as "文件系统"
FE->>SAS : createBackup(backupPath)
SAS->>CMD : invoke('create_backup', {backupPath})
CMD->>FS : 写入备份文件
FS-->>CMD : 成功/失败
CMD-->>SAS : 返回结果
SAS-->>FE : Promise.resolve
FE->>SAS : restoreBackup(backupPath)
SAS->>CMD : invoke('restore_backup', {backupPath})
CMD->>FS : 读取备份并写入数据库
FS-->>CMD : 完成
CMD-->>SAS : 返回结果
SAS-->>FE : Promise.resolve
```

**图表来源**
- `src/app/services/api/system-api.service.ts#L209-L228`
- `src-tauri/src/lib.rs#L301-L303`

**章节来源**
- `src/app/services/api/system-api.service.ts#L202-L237`
- `src-tauri/src/lib.rs#L301-L303`

### 数据治理与合规
- 数据分类：项目、财务报表、参数设置、方法选择、可比公司计算批次、验证数据、报告存储等，按业务域划分。
- 权限控制：通过认证命令（如同花顺自动登录、独立登录）与代理模式命令（默认/增强）实现访问控制与会话管理。
- 审计日志：后端启用统一日志插件，过滤冗余 SQL 日志，保留关键信息；前端通过系统 API 写入日志。
- 合规要求：建议在项目层面建立“最小化采集”“数据保留期限”“删除请求”等策略，并通过系统命令实现自动化执行。

**章节来源**
- `src-tauri/src/lib.rs#L33-L51`
- `src/app/services/api/system-api.service.ts#L137-L162`

## 依赖关系分析
- 前端依赖：Angular 22、Syncfusion/ECharts UI、RxJS、@tauri-apps/* 插件（fs、store、log、process、dialog、opener、http、clipboard、deep-link、updater）。
- 后端依赖：Tauri 2、SeaORM、reqwest、log、rust_xlsxwriter、rayon 等，提供数据库、HTTP、日志、文件系统、并发等能力。
- 命令注册：后端集中注册大量数据相关命令，覆盖项目、估值日、财务报表、参数设置、可比公司、计算分析、报告存储、验证数据等。

```mermaid
graph LR
PJSON["package.json 依赖"] --> Tauri["@tauri-apps/* 插件"]
PJSON --> UI["@syncfusion/ej2-* + echarts"]
CARGO["Cargo.toml 依赖"] --> SEA["sea-orm"]
CARGO --> REQ["reqwest/log/rayon"]
CARGO --> XLSX["rust_xlsxwriter"]
Tauri --> LIBRS["src/lib.rs 命令注册"]
SEA --> LIBRS
REQ --> LIBRS
XLSX --> LIBRS
```

**图表来源**
- `package.json#L19-L87`
- `src-tauri/Cargo.toml#L26-L66`
- `src-tauri/src/lib.rs#L77-L304`

**章节来源**
- `package.json#L19-L87`
- `src-tauri/Cargo.toml#L26-L66`
- `src-tauri/src/lib.rs#L77-L304`

## 性能考量
- 按需懒加载与变更检测优化：前端文档指出按需懒加载与组件级变更检测优化有助于提升性能。
- 并发与计算：后端使用 rayon 进行并行计算，适合大规模指标与矩阵运算场景。
- 日志与IO：日志插件配置合理大小与轮转策略，避免日志文件过大影响性能；文件系统操作建议批量处理与异步执行。

## 故障排查指南
- 数据库未初始化：估值日服务在加载激活估值日时对“数据库池未初始化”错误进行静默处理，避免阻塞启动流程。
- 代理模式与认证：应用启动时检查代理模式与Cookie有效性，必要时切换到默认模式；认证失败时触发自动登录流程。
- 通知与日志：前端通过监听后端通知事件与系统API写日志，便于定位问题；建议在关键命令前后记录日志。

**章节来源**
- `src/app/services/valuation-date.service.ts#L94-L101`
- `src/app/app.component.ts#L444-L458`
- `src/app/services/api/system-api.service.ts#L137-L162`

## 结论
本项目在数据生命周期管理上形成了从前端状态管理、存储持久化，到后端命令注册、数据库事务与文件系统操作的完整闭环。通过明确的项目状态跟踪、估值日生命周期、归档与清理机制、备份恢复能力以及日志与审计支持，能够满足专业估值分析工具对数据质量与合规性的要求。建议后续在增量备份、自动清理策略、权限细化与合规审计等方面进一步完善。

## 附录
- 前端服务与命令调用路径参考：
  - 项目管理：`src/app/services/project-manager/project-manager.service.ts#L92-L137`
  - 存储服务：`src/app/services/storage.service.ts#L51-L84`
  - 估值日服务：`src/app/services/valuation-date.service.ts#L137-L208`
  - 系统API服务：`src/app/services/api/system-api.service.ts#L209-L228`
- 后端命令注册与数据库操作：
  - `src-tauri/src/lib.rs#L154-L160`
  - `src-tauri/src/lib.rs#L246-L247`
  - `src-tauri/src/lib.rs#L268-L273`