# 系统审计功能 PRD

## 1. 文档信息

| 属性 | 值 |
|------|-----|
| 文档名称 | 系统审计功能 PRD |
| 所属模块 | 全知平台 / 系统设置 / 审计日志 |
| 文档版本 | v1.0（初稿） |
| 编写日期 | 2026-05-15 |
| 编写目的 | 支持公司对系统本身进行审计，满足内控合规要求 |

---

## 2. 背景与需求

### 2.1 业务背景

根据客户要求，系统需要支持公司级审计能力，确保系统操作可追溯、可审查，满足内控管理和合规要求。

### 2.2 原始需求

1. **审计账号**：只有读权限，没有写权限，要求看到全部数据
2. **操作日志**：系统对所有操作进行记录，审计可以查看日志记录

### 2.3 当前系统能力分析

| 能力项 | 现有情况 | 差距 |
|--------|---------|------|
| 只读权限 | 已有 `readonly=true` 机制 | 需扩展到全模块 |
| 全部数据 | 有数据权限配置功能 | 需配置跨业务域权限 |
| 操作日志 | 有前端埋点（页面访问、点击） | 缺少业务操作日志 |
| 日志查询 | 有"日志登记"菜单（`/logs`） | 需扩展为完整查询功能 |

---

## 3. 功能设计

### 3.1 审计账号

#### 3.1.1 角色定义

| 角色标识 | 角色名称 | 说明 |
|---------|---------|------|
| `auditor` | 审计员 | 只读访问全部模块和数据，可查看操作日志 |

#### 3.1.2 权限配置

| 权限类型 | 配置说明 |
|---------|---------|
| 菜单权限 | 所有模块菜单可见 |
| 数据权限 | 全部数据（不受业务域、组织架构限制） |
| 功能权限 | 只读（隐藏所有操作按钮，禁用表单输入） |

#### 3.1.3 只读模式实现

复用现有 `readonly=true` 机制，审计员登录后全局应用：

- 路由守卫识别审计角色，自动附加 `readonly=true`
- 隐藏所有新增、修改、删除、审批按钮
- 禁用所有表单输入、下拉选择、日期选择
- 保留查看、查询功能（导出功能本期暂不实现）

#### 3.1.4 数据脱敏规则 【待确认】

| 数据类型 | 脱敏规则 | 示例 |
|---------|---------|------|
| 手机号 | 中间4位脱敏 | 138****5678 |
| 邮箱 | 邮箱名部分脱敏 | z***@example.com |
| 密码 | 完全隐藏 | ****** |
| 身份证 | 中间8位脱敏 | 110***********1234 |

> **已确认**：敏感数据需脱敏显示。

#### 3.1.5 导出权限

> **本期暂不实现**。审计日志导出功能纳入后续迭代。

---

### 3.2 操作日志

#### 3.2.1 日志记录范围

**必须记录的操作：**

| 操作类型 | 说明 | 示例 |
|---------|------|------|
| ADD | 新增数据 | 创建风险规则、新增业务域 |
| UPDATE | 修改数据 | 修改规则配置、更新场景参数 |
| DELETE | 删除数据 | 删除规则、删除场景 |
| QUERY | 查询操作 | 数据查询、列表查看 |
| EXPORT | 数据导出 | 导出报表、导出疑点数据 |
| IMPORT | 数据导入 | 导入架构制品、导入规则 |
| LOGIN_SUCCESS | 用户登录成功 | 登录认证成功 |
| LOGIN_FAIL | 用户登录失败 | 登录认证失败 |
| LOGOUT | 用户登出 | 正常登出、超时登出 |
| UPSERT | 插入或更新 | 批量数据合并 |
| OTHER | 其他操作 | 未明确分类的操作 |

#### 3.2.2 日志字段设计

以下为系统埋点表 `DATA_TRACING` 的实际字段（与审计日志查询页面展示的对应关系见 3.2.8）：

| 字段 | 类型 | 必填 | 说明 |
|------|------|------|------|
| ID | VARCHAR(64) | 是 | 主键 UUID |
| OPERATOR_ID | VARCHAR(64) | 是 | 操作人员工 ID |
| OPERATOR_ACCOUNT | VARCHAR(100) | 是 | 操作人账号 |
| OPERATOR_NAME | VARCHAR(100) | 是 | 操作人姓名 |
| OPERATOR_ORG_NAME | VARCHAR(200) | 否 | 操作人所属单位 |
| MODULE_NAME_CN | VARCHAR(100) | 是 | 模块中文名（Controller `@Tag.description`） |
| MODULE_NAME_EN | VARCHAR(100) | 是 | Controller 类名 |
| OPERATION_NAME_CN | VARCHAR(200) | 是 | 接口中文名（`@Operation.summary`） |
| OPERATION_NAME_EN | VARCHAR(100) | 是 | Controller 方法名 |
| REQUEST_URL | VARCHAR(500) | 否 | 完整请求 URI |
| HTTP_METHOD | VARCHAR(10) | 否 | GET/POST/PUT/DELETE |
| OPERATION_TYPE | VARCHAR(30) | 是 | ADD/UPDATE/DELETE/QUERY/EXPORT/IMPORT/LOGIN_SUCCESS 等 |
| REQUEST_PARAMS | TEXT | 否 | 请求参数 JSON（已脱敏，截断 2000 字符） |
| REQUEST_IP | VARCHAR(50) | 是 | 客户端 IP |
| STATUS | INT | 是 | 1=成功，0=失败 |
| ERROR_MSG | TEXT | 否 | 失败时异常摘要（截断 1000 字符） |
| DURATION_MS | INT | 否 | 接口耗时（毫秒） |
| OPERATION_TIME | DATETIME | 是 | 接口进入时间（精确到毫秒） |
| CREATE_TIME | DATETIME | 是 | 记录落库时间 |

#### 3.2.3 失败操作记录

埋点表通过 `STATUS=0` + `ERROR_MSG` 记录失败操作及原因，由后端切面捕获异常后自动写入。

#### 3.2.4 日志保留策略

沿用埋点表 `DATA_TRACING` 现有的保留策略，不做额外调整。

---

#### 3.2.7 数据来源方案

**决策**：为降低开发成本，复用系统已有的数据埋点表（`DATA_TRACING`），不再新建日志表和拦截逻辑。

已有埋点通过后端 AOP 切面记录每个 Controller 接口调用，数据已在正常积累中。审计日志查询页面直接读取该表数据展示。

**埋点表字段（19 个）：**

| 字段 | 类型 | 说明 | 示例值 |
|------|------|------|--------|
| ID | VARCHAR | 主键 UUID | `04ddcf077d31bb...` |
| OPERATOR_ID | VARCHAR | 操作人员工 ID | `E637DA619EBF...` |
| OPERATOR_ACCOUNT | VARCHAR | 操作人账号 | `huangzhenlin` |
| OPERATOR_NAME | VARCHAR | 操作人姓名 | `黄振林` |
| OPERATOR_ORG_NAME | VARCHAR | 操作人所属单位 | `超高压输电公司` |
| MODULE_NAME_CN | VARCHAR | 模块中文名（Controller `@Tag.description`） | `风险派发和处置` |
| MODULE_NAME_EN | VARCHAR | Controller 类名 | `RiskDisposeController` |
| OPERATION_NAME_CN | VARCHAR | 接口中文名（`@Operation.summary`） | `分页查询风险场景` |
| OPERATION_NAME_EN | VARCHAR | Controller 方法名 | `pageRiskScene` |
| REQUEST_URL | VARCHAR | 完整请求 URI | `/core/RiskSceneController/queryPageList` |
| HTTP_METHOD | VARCHAR | 请求方法 | `GET` / `POST` / `PUT` / `DELETE` |
| OPERATION_TYPE | VARCHAR | 操作类型 | `ADD` / `UPDATE` / `DELETE` / `QUERY` / `EXPORT` / `IMPORT` / `UPSERT` / `LOGIN_SUCCESS` / `LOGIN_FAIL` / `LOGOUT` / `OTHER` |
| REQUEST_PARAMS | TEXT | 请求参数 JSON（已脱敏，截断 2000 字符） | `[{"current":1,"size":10}]` |
| REQUEST_IP | VARCHAR | 客户端 IP | `10.121.203.246` |
| STATUS | INT | 1=成功，0=失败 | `1` |
| ERROR_MSG | TEXT | 失败时异常摘要（截断 1000 字符） | `NULL`（成功时） |
| DURATION_MS | INT | 接口耗时（毫秒） | `120` |
| OPERATION_TIME | DATETIME | 接口进入时间（精确到毫秒） | `2026-05-18 11:43:33.165` |
| CREATE_TIME | DATETIME | 记录落库时间 | `2026-05-18 11:50:53.509` |

**已知局限（本期接受）：**

| 局限 | 说明 | 本期处理 |
|------|------|---------|
| MODULE_NAME_CN 是 Controller 名 | 如"风险派发和处置"，不是用户看到的菜单名 | 直接展示，暂不映射 |
| 无 USER_AGENT | 缺少浏览器信息 | 接受缺失 |
| 无 OPERATE_OBJECT | 不知道操作了哪个具体对象 | 通过 OPERATION_NAME_CN 和 REQUEST_URL 间接判断 |
| 大量 QUERY 类型日志 | 页面切换、下拉框加载均记录查询日志 | 不隐藏，全部展示 |

---

#### 3.2.8 审计日志页面设计

##### 列表展示字段

从 19 个字段中选择 11 列展示：

| # | 列表列 | 来源字段 | 宽度 | 说明 |
|---|--------|---------|------|------|
| 1 | 操作时间 | OPERATION_TIME | 180px | 格式 YYYY-MM-DD HH:mm:ss，默认降序排列 |
| 2 | 操作人 | OPERATOR_NAME | 100px | - |
| 3 | 所属单位 | OPERATOR_ORG_NAME | 150px | 企业规模大，仅有姓名不够，需展示组织 |
| 4 | 操作类型 | OPERATION_TYPE | 90px | 彩色标签区分（见下方配色） |
| 5 | 操作描述 | OPERATION_NAME_CN | 自适应 | 最直观看懂用户行为的字段，如"分页查询风险场景" |
| 6 | 所属模块 | MODULE_NAME_CN | 150px | Controller 中文名 |
| 7 | 请求方式 | HTTP_METHOD | 70px | GET / POST / PUT / DELETE |
| 8 | IP 地址 | REQUEST_IP | 130px | - |
| 9 | 操作结果 | STATUS | 80px | 成功=绿色 / 失败=红色 |
| 10 | 耗时(ms) | DURATION_MS | 80px | 右对齐 |
| 11 | 操作 | - | 100px | "查看详情"按钮 |

**不展示的字段**：ID、OPERATOR_ID、OPERATOR_ACCOUNT（内部标识）；MODULE_NAME_EN、OPERATION_NAME_EN（与中文重复）；REQUEST_URL（太长，放详情）；REQUEST_PARAMS（太长，放详情）；ERROR_MSG（失败时详情查看）；CREATE_TIME（内部时间）。

**操作类型配色：**

| 操作类型 | 标签颜色 | 说明 |
|---------|---------|------|
| ADD | 绿 | 新增 |
| UPDATE | 橙 | 修改 |
| DELETE | 红 | 删除 |
| QUERY | 蓝 | 查询 |
| EXPORT | 紫 | 导出 |
| IMPORT | 青 | 导入 |
| LOGIN_SUCCESS | 绿 | 登录成功 |
| LOGIN_FAIL | 红 | 登录失败 |
| LOGOUT | 灰 | 登出 |
| OTHER | 灰 | 其他 |

##### 筛选条件（6 个）

| 筛选项 | 类型 | 来源字段 | 默认值 | 说明 |
|--------|------|---------|--------|------|
| 操作时间 | 日期范围选择器 | OPERATION_TIME | 近 7 天 | 支持自定义 |
| 操作人 | 文本输入 | OPERATOR_NAME | - | 模糊搜索 |
| 操作类型 | 下拉单选 | OPERATION_TYPE | 全部 | ADD/UPDATE/DELETE/QUERY/EXPORT/IMPORT/LOGIN_SUCCESS/LOGIN_FAIL/LOGOUT/OTHER |
| 所属模块 | 下拉单选 | MODULE_NAME_CN | 全部 | 从现有数据中提取去重 |
| 操作结果 | 下拉单选 | STATUS | 全部 | 成功 / 失败 |
| IP 地址 | 文本输入 | REQUEST_IP | - | 模糊搜索 |

> **说明**：QUERY 类型默认不隐藏，与所有类型同等展示。

##### 详情弹窗

点击"查看详情"弹出，分 4 个区域：

| 区域 | 内容 | 字段来源 |
|------|------|---------|
| 基本信息 | 操作时间、操作人、所属单位、IP 地址 | OPERATION_TIME、OPERATOR_NAME、OPERATOR_ORG_NAME、REQUEST_IP |
| 操作信息 | 操作类型、所属模块(CN)、操作描述(CN)、请求 URL、HTTP 方法 | OPERATION_TYPE、MODULE_NAME_CN、OPERATION_NAME_CN、REQUEST_URL、HTTP_METHOD |
| 请求参数 | JSON 格式化展示 | REQUEST_PARAMS |
| 执行结果 | 成功/失败、错误信息、耗时(ms) | STATUS、ERROR_MSG、DURATION_MS |

##### 页面线框图

```
┌──────────────────────────────────────────────────────────────────────┐
│  系统管理 / 审计日志                                                   │
├──────────────────────────────────────────────────────────────────────┤
│  操作时间：[____] 至 [____]   操作人：[________]                       │
│  操作类型：[全部  ▼]  所属模块：[全部  ▼]  操作结果：[全部  ▼]         │
│  IP地址：[________]                            [查询] [重置]           │
├──────────────────────────────────────────────────────────────────────┤
│  共 8031 条记录                                                       │
├──────────────────────────────────────────────────────────────────────┤
│  操作时间      │操作人│所属单位      │类型  │操作描述          │模块  │
│  ─────────────┼──────┼─────────────┼─────┼─────────────────┼──────│
│  05-18 11:43  │黄振林│超高压输电公司│QUERY │分页查询风险场景   │风险..│
│  05-18 12:17  │蒋雄文│超高压输电公司│LOGIN │登录认证          │身份..│
│  05-18 11:43  │黄振林│超高压输电公司│IMPORT│导入业务活动Excel  │规则..│
│  ─────────────┴──────┴─────────────┴─────┴─────────────────┴──────│
│  │方式  │结果│耗时  │操作    │                                     │
│  │POST  │成功│ 25ms │查看详情│                                     │
│  │POST  │成功│   -  │查看详情│                                     │
│  │POST  │成功│18841 │查看详情│                                     │
│  ───────────────────────────────────────────────────────────────────│
│  [< 1 2 3 ... 402 >]    每页 [20 ▼] 条                              │
└──────────────────────────────────────────────────────────────────────┘
```

##### 日志导出

> **本期暂不实现**，纳入后续迭代。

| 功能 | 说明 |
|------|------|
| 导出格式 | Excel（.xlsx） |
| 导出范围 | 当前筛选条件下的数据 |
| 导出限制 | 单次最多 10000 条 |
| 导出字段 | 列表可见的 10 列（含操作人、所属单位、操作描述等） |

---

### 3.3 审计日志查询

#### 3.3.1 功能入口

- 菜单位置：系统设置 → 审计日志
- 路由地址：`/xtgl/auditLog`
- 访问权限：审计员、系统管理员

**配套菜单调整：**

系统设置下原有的"风险规则管理"和"风险疑点管理"两个菜单项移除——相关功能已由风险监控模块下的新页面承接。调整后的系统设置菜单：

```
系统设置
├── 审计日志          ← 新增
```

> 原有的"已上线规则""上线中规则""草稿规则"同样移除，功能已在风险规则库中覆盖。

**系统设置菜单可见性调整：**

| 角色 | 调整前 | 调整后 | 说明 |
|------|--------|--------|------|
| 系统管理员 (`qzxtxtgly`) | 可见 | 可见 | 不变 |
| 审计员 (`auditor`) | 不可见 | 可见 | **新增**，审计员需通过此入口访问审计日志 |

---

#### 3.3.2 查询条件

| 筛选项 | 类型 | 说明 |
|--------|------|------|
| 操作时间 | 日期范围 | 默认近7天，支持自定义 |
| 操作人 | 文本/选择 | 支持模糊搜索 |
| 操作类型 | 下拉单选 | ADD/UPDATE/DELETE/QUERY/EXPORT/IMPORT/LOGIN_SUCCESS/LOGIN_FAIL/LOGOUT/OTHER |
| 所属模块 | 下拉单选 | 风险管理/业务架构/制度管理等 |
| 具体菜单 | 下拉单选 | 联动所属模块 |
| 操作结果 | 下拉单选 | 成功/失败 |
| IP地址 | 文本 | 支持模糊搜索 |
| 关键词 | 文本 | 搜索操作对象名称 |

#### 3.3.3 列表展示

| 列名 | 宽度 | 说明 |
|------|------|------|
| 操作时间 | 180px | 格式：YYYY-MM-DD HH:mm:ss |
| 操作人 | 100px | 姓名 |
| 所属组织 | 150px | 操作人组织 |
| 操作类型 | 80px | 标签展示，不同颜色区分 |
| 所属模块 | 120px | - |
| 具体菜单 | 150px | - |
| 操作对象 | 200px | 可点击查看对象详情 |
| 操作结果 | 80px | 成功（绿色）/失败（红色） |
| IP地址 | 120px | - |
| 耗时 | 80px | 毫秒 |
| 操作 | 100px | 查看详情 |

#### 3.3.4 日志详情弹窗

点击"查看详情"展示：

| 区域 | 内容 |
|------|------|
| 基本信息 | 操作时间、操作人、所属组织、IP地址、浏览器信息 |
| 操作信息 | 操作类型、所属模块、具体菜单、操作对象、请求地址 |
| 请求参数 | 原始请求参数（JSON格式，敏感字段脱敏） |
| 操作详情 | 修改前后值对比（高亮显示变更字段） |
| 执行结果 | 操作结果、失败原因（如有）、执行耗时 |

#### 3.3.5 日志导出

> **本期暂不实现**，纳入后续迭代。

| 功能 | 说明 |
|------|------|
| 导出格式 | Excel（.xlsx） |
| 导出范围 | 当前筛选条件下的数据 |
| 导出限制 | 单次最多导出10000条 |
| 异步导出 | 超过1000条时异步导出，完成后通知下载 |

---

## 4. 页面交互说明

### 4.1 审计员登录后

1. 登录成功后，系统识别审计员角色
2. 左侧菜单展示所有模块（与管理员一致）
3. 所有页面自动应用只读模式：
   - 隐藏操作按钮
   - 禁用表单输入
   - 保留查看、查询功能（导出功能本期暂不实现）

### 4.2 审计日志页面

```
┌─────────────────────────────────────────────────────────────┐
│  系统设置 / 审计日志                                          │
├─────────────────────────────────────────────────────────────┤
│  [查询条件区域]                                               │
│  操作时间：[____-__-__] 至 [____-__-__]   操作人：[________] │
│  操作类型：[全部        ▼]  所属模块：[全部        ▼]        │
│  操作结果：[全部        ▼]  关键词：  [________] [查询] [重置]│
├─────────────────────────────────────────────────────────────┤
│  共 1234 条记录                                                │
├─────────────────────────────────────────────────────────────┤
│  操作时间  │操作人│操作类型│所属模块│操作对象│操作结果│操作   │
│  ─────────┼──────┼───────┼───────┼───────┼───────┼─────── │
│  2026-... │ 张三 │ 修改  │风险监控│规则XX │ 成功  │ 查看详情│
│  2026-... │ 李四 │ 登录  │ -     │ -     │ 成功  │ 查看详情│
│  2026-... │ 王五 │ 删除  │业务架构│场景YY │ 失败  │ 查看详情│
├─────────────────────────────────────────────────────────────┤
│  [< 1 2 3 4 5 ... 100 >]    每页 [20 ▼] 条                   │
└─────────────────────────────────────────────────────────────┘
```

---

## 5. 数据库设计

本期不新建表，直接复用系统已有的数据埋点表 `DATA_TRACING`。该表由后端 AOP 切面自动记录每个 Controller 接口调用日志。

| 字段 | 类型 | 说明 |
|------|------|------|
| ID | VARCHAR | 主键 UUID |
| OPERATOR_ID | VARCHAR | 操作人员工 ID |
| OPERATOR_ACCOUNT | VARCHAR | 操作人账号 |
| OPERATOR_NAME | VARCHAR | 操作人姓名 |
| OPERATOR_ORG_NAME | VARCHAR | 操作人所属单位 |
| MODULE_NAME_CN | VARCHAR | Controller 中文名（`@Tag.description`） |
| MODULE_NAME_EN | VARCHAR | Controller 类名 |
| OPERATION_NAME_CN | VARCHAR | 接口中文名（`@Operation.summary`） |
| OPERATION_NAME_EN | VARCHAR | Controller 方法名 |
| REQUEST_URL | VARCHAR | 完整请求 URI |
| HTTP_METHOD | VARCHAR | GET/POST/PUT/DELETE |
| OPERATION_TYPE | VARCHAR | ADD/UPDATE/DELETE/QUERY/EXPORT/IMPORT/UPSERT/LOGIN_SUCCESS/LOGIN_FAIL/LOGOUT/OTHER |
| REQUEST_PARAMS | TEXT | 请求参数 JSON（已脱敏，截断 2000 字符） |
| REQUEST_IP | VARCHAR | 客户端 IP |
| STATUS | INT | 1=成功，0=失败 |
| ERROR_MSG | TEXT | 失败时异常摘要（截断 1000 字符） |
| DURATION_MS | INT | 接口耗时（毫秒） |
| OPERATION_TIME | DATETIME | 接口进入时间（精确到毫秒） |
| CREATE_TIME | DATETIME | 记录落库时间 |

---

## 6. 接口设计

### 6.1 审计日志查询接口

```
GET /core/auditLog/list
```

**请求参数：**

| 参数 | 类型 | 必填 | 说明 | 来源字段 |
|------|------|------|------|---------|
| startTime | String | 否 | 开始时间 | OPERATION_TIME |
| endTime | String | 否 | 结束时间 | OPERATION_TIME |
| operatorName | String | 否 | 操作人（模糊） | OPERATOR_NAME |
| operateType | String | 否 | 操作类型 | OPERATION_TYPE |
| moduleName | String | 否 | 所属模块 | MODULE_NAME_CN |
| status | Int | 否 | 操作结果（1成功/0失败） | STATUS |
| ipAddress | String | 否 | IP 地址（模糊） | REQUEST_IP |
| pageNum | Int | 是 | 页码 | - |
| pageSize | Int | 是 | 每页条数 | - |

**响应示例：**

```json
{
  "code": 200,
  "data": {
    "total": 8031,
    "list": [
      {
        "id": "04ddcf077d31bb...",
        "operatorName": "黄振林",
        "operatorOrgName": "超高压输电公司",
        "operationTime": "2026-05-18 11:43:33",
        "operationType": "QUERY",
        "operationNameCn": "分页查询风险场景",
        "moduleNameCn": "风险场景controller",
        "httpMethod": "POST",
        "status": 1,
        "durationMs": 25
      }
    ]
  }
}
```

### 6.2 日志详情接口

```
GET /core/auditLog/detail/{id}
```

返回完整字段，供详情弹窗展示。

### 6.3 日志导出接口

> **本期暂不实现**，纳入后续迭代。

```
POST /core/auditLog/export
```

导出当前筛选条件下的数据为 Excel，最多 10000 条。

---

## 7. 验收标准

### 7.1 审计账号

| 验收项 | 验收标准 |
|--------|---------|
| 角色创建 | 可创建审计员角色 |
| 菜单权限 | 审计员可访问所有模块菜单 |
| 数据权限 | 审计员可查看全部业务域数据 |
| 只读模式 | 所有页面操作按钮隐藏、表单禁用 |
| 查看功能 | 审计员可正常查看数据详情 |
| 查询功能 | 审计员可正常使用查询筛选 |

### 7.2 操作日志

| 验收项 | 验收标准 |
|--------|---------|
| 新增记录 | 新增操作自动记录日志 |
| 修改记录 | 修改操作自动记录日志，包含修改详情 |
| 删除记录 | 删除操作自动记录日志 |
| 登录记录 | 登录成功记录日志（不记录失败） |
| 审批记录 | 审批操作自动记录日志 |
| 日志完整性 | 包含操作人、时间、类型、对象、IP等信息 |

### 7.3 日志查询

| 验收项 | 验收标准 |
|--------|---------|
| 列表展示 | 正确展示日志列表，分页正常 |
| 筛选功能 | 各筛选条件生效，结果正确 |
| 详情查看 | 点击查看详情，信息完整 |
| 导出功能 | （本期暂不实现） |

---

## 8. 待确认事项清单

| 序号 | 事项 | 确认结果 |
|------|------|---------|
| 1 | 敏感数据是否脱敏 | ✅ 脱敏 |
| 2 | 审计账号是否允许导出 | 🔄 本期暂不实现，纳入后续迭代 |
| 3 | 是否记录查询操作 | ✅ 记录 |
| 4 | 是否记录失败操作 | ✅ 不记录（前端失败无法记录） |
| 5 | 日志保留时长 | ✅ 180天 |
| 6 | 审计日志数据来源 | ✅ 复用现有埋点表 DATA_TRACING，不新建日志表 |
| 7 | 列表是否包含"操作描述"列 | ✅ 是，使用 OPERATION_NAME_CN 字段 |
| 8 | QUERY 类型是否默认隐藏 | ✅ 不隐藏，全部展示 |
| 9 | 列表是否包含"所属单位"列 | ✅ 是，使用 OPERATOR_ORG_NAME 字段，放在操作人后面 |

---

## 9. 功能边界

### 9.1 本期实现

- 审计员角色及权限配置
- 审计日志查询页面（基于现有埋点表 DATA_TRACING，不新增表）

### 9.2 后续迭代

- 审计报告生成
- 异常操作告警
- 日志统计分析
- 字段级变更记录

---

## 10. 风险与注意事项

### 10.1 性能风险

- 操作日志记录需异步处理，避免影响业务接口响应时间
- 建议使用消息队列异步写入日志

### 10.2 存储风险

- 日志数据量较大，需提前规划存储空间
- 建议按月分表，便于归档清理

### 10.3 安全风险

- 日志表需独立权限，防止篡改
- 审计账号本身的操作也需记录
- 日志导出需限制数量，防止数据泄露

---

## 11. 一句话总结

本功能通过新增审计员角色和操作日志记录，实现系统操作的全面可追溯，满足公司级审计需求。
