# 业务流程设计

> DDS-Section: 8. 业务流程
> DDS-Lines: L822-L856

## 项目创建流程

```mermaid
sequenceDiagram
    participant Admin as 超级管理员
    participant PM as rmdc-project-management
    participant WP as rmdc-work-procedure
    participant User as 填写人

    Admin->>PM: POST /api/project/create
    PM->>PM: 创建Project记录 (status=INIT)
    PM->>WP: 创建project_detail工单
    WP-->>PM: 返回workflow_id
    PM->>PM: 创建ProjectVersion草稿记录
    PM->>PM: 创建ProjectWorkflow关联记录
    PM-->>Admin: 返回项目创建成功

    PM->>User: 通知填写人
    User->>PM: POST /api/project/draft/save
    PM->>PM: 更新ProjectVersion草稿
    User->>PM: POST /api/project/draft/submit
    PM->>WP: 状态转换为pending_review
    PM->>PM: 更新lifecycle_status=REVIEWING
```

## 项目与工单关系

| 关系类型 | 项目状态 | 说明 |
|:---|:---|:---|
| 项目:填写工单 = 1:1 | INIT/DRAFTING | 项目创建时只能有一个填写工单 |
| 项目:修改工单 = 1:N | RELEASED/MODIFYING | 已发布项目可以有多个修改工单 |
| 用户:修改工单 = 1:1 (per project) | - | 非SuperAdmin用户同一项目只能有一个活跃修改工单 |

## 修改工单流程

```mermaid
sequenceDiagram
    participant User as 普通用户
    participant PM as rmdc-project-management
    participant WP as rmdc-work-procedure
    participant Admin as 超级管理员

    User->>PM: POST /api/project/draft/create (修改工单)
    PM->>PM: 检查用户项目权限
    PM->>WP: 创建project_modify工单
    WP-->>PM: 返回workflow_id
    PM->>PM: 创建ProjectVersion草稿 (base_version=current)
    PM->>PM: 更新lifecycle_status=MODIFYING
    PM-->>User: 返回工单创建成功

    loop 填写草稿
        User->>PM: POST /api/project/draft/save
        PM->>PM: 更新草稿数据
    end

    User->>PM: POST /api/project/draft/submit
    PM->>PM: 检查版本冲突 (base_version == current_version?)
    alt 无冲突
        PM->>WP: 状态转换为pending_review
        PM->>PM: 更新lifecycle_status=REVIEWING
    else 有冲突
        PM-->>User: 返回409 Conflict
    end

    Admin->>PM: POST /api/workflow/approve
    PM->>PM: 合并草稿到主线
    PM->>PM: 生成新版本 (official)
    PM->>PM: 更新lifecycle_status=RELEASED
```

## 超管直改流程

```mermaid
sequenceDiagram
    participant Admin as 超级管理员
    participant PM as rmdc-project-management
    participant DB as PostgreSQL

    Admin->>PM: POST /api/project/update
    PM->>PM: 验证权限 (SuperAdmin)
    PM->>DB: BEGIN TRANSACTION
    PM->>DB: UPDATE projects SET ...
    PM->>DB: INSERT project_versions (official)
    PM->>DB: COMMIT
    PM-->>Admin: 返回更新成功 + 新版本号
```

## 审计日志

所有对 `projects` 表的写操作均需通过 `rmdc-audit-log` 记录：
- **Resource**: `project`
- **Action**: `create`, `update`, `publish_version`, `delete`, `permission_grant`
- **Payload**: 记录关键变更字段
