# Andon 系统文档

> 本文档针对 aucma-mes 项目中的安灯系统（Andon），从**项目文档**与**操作手册**两个维度进行说明，既帮助理解整体业务设计，也指导一线用户具体使用。

---

## 一、项目文档（业务与设计说明）

### 1.1 系统整体概述

安灯系统用于对生产现场的异常、需求等进行**呼叫、响应、处理和追踪**，构建从“发现问题”到“解决问题”的完整闭环。核心目标：

- **快速呼叫**：现场在工位/设备/系统中发起安灯呼叫；
- **规则驱动**：依据预先配置的安灯规则自动匹配处理要求；
- **自动派工/通知**：将事件自动派发给责任人或责任角色；
- **全过程留痕**：记录确认、开始处理、完成、取消等里程碑时间；
- **可视化看板**：通过安灯看板统一展示当前安灯状态和历史数据。

从实现上，安灯系统围绕以下几个核心领域模型展开：

- **AndonRule（安灯规则配置）**：定义不同呼叫类型在不同产线/工位/班组上的处理策略、时限和通知对象；
- **AndonEvent（安灯事件）**：每一次安灯呼叫形成的一条事件记录，是业务闭环的中心实体；
- **AndonEventAssignment（安灯派工记录）**：围绕事件派发给具体人员或角色的待办/任务；
- **AndonEventLog（安灯事件日志）**：记录与事件相关的所有关键操作，形成审计追踪；
- **AndonBoardConfig（安灯看板配置）**：配置各类安灯看板的产线/工位范围、展示字段及刷新策略。

上述模型在后端分别由对应的 Service 与 Mapper 实现，在前端对应以下页面：

- `views/production/andonRule/index.vue`：安灯规则配置；
- `views/production/andonEvent/index.vue`：安灯事件管理；
- `views/production/andonEventAssignment/index.vue`：安灯派工记录管理；
- `views/production/andonEventLog/index.vue`：安灯事件日志查询；
- `views/production/andonBoardConfig/index.vue`：安灯看板配置。

---

### 1.2 模块职责概览

#### 1.2.1 安灯规则配置（AndonRule）

**职责**：

- 定义安灯呼叫类型及其适用范围（产线、工位/工序、班组、触发源类型等）；
- 设置确认时限（ACK Timeout）和解决时限（Resolve Timeout）；
- 定义默认优先级（Priority）；
- 定义通知对象（具体用户列表、角色列表）；
- 通过字段 `isFlag` 控制规则是否生效。

**典型字段（来自 AndonRule / AndonRuleMapper.xml）：**

- `ruleName`：规则名称；
- `callTypeCode`：呼叫类型编码；
- `productLineCode` / `stationCode` / `teamCode`：适用产线、工位、班组；
- `sourceType`：限定触发源类型（如工位、设备、报警、手动等）；
- `ackTimeoutMin`：确认时限（分钟）；
- `resolveTimeoutMin`：解决时限（分钟）；
- `priorityDefault`：默认优先级；
- `notifyUsers`：通知用户 ID 列表（逗号分隔）；
- `notifyRoles`：通知角色 Key 列表（逗号分隔，当前主要作为兜底）；
- `remark`：扩展配置 JSON（如派工模式、是否取消其他派工、解决时限锚点等）；
- `isFlag`：是否有效。

#### 1.2.2 安灯事件（AndonEvent）

**职责**：

- 表示一条实际发生的安灯呼叫记录；
- 保存安灯发生环境（产线/工位/班组/工单/物料/设备等）；
- 保存业务里程碑信息（确认时间、开始处理时间、完成时间等）；
- 保存规则计算得到的截止时间和优先级；
- 通过状态字段反映事件生命周期（待处理、处理中、已解决、已取消等）。

**典型字段（来自 AndonEvent / AndonEventMapper.xml）：**

- 标识与基础信息：
  - `eventId`：事件主键；
  - `callCode`：安灯呼叫单号；
  - `callTypeCode`：呼叫类型编码，对应规则的 `callTypeCode`；
- 触发源与位置：
  - `sourceType` / `sourceRefId`：触发源类型及引用 ID（工位编码、设备编码、报警号等）；
  - `productLineCode` / `stationCode` / `teamCode`：产线、工位、班组；
  - `orderCode` / `materialCode` / `deviceId` / `deviceCode`：关联工单、物料、设备；
- 状态与优先级：
  - `priority`：事件优先级，未设置时从规则 `priorityDefault` 继承；
  - `eventStatus`：事件状态（PENDING/PROCESSING/RESOLVED/CANCELLED，对应字典 `andon_event_status`）；
- 时间与里程碑：
  - `ackBy` / `ackTime`：确认人及确认时间；
  - `responseStartTime`：开始处理时间；
  - `responseEndTime`：处理完成/解决时间；
  - `ackDeadline`：系统计算的确认截止时间；
  - `resolveDeadline`：系统计算的解决截止时间；
  - `escalateLevel` / `escalateTime`：升级级别与时间（预留扩展）；
- 其他：
  - `description`：呼叫描述；
  - `resolution`：解决/处理措施；
  - `cancelReason`：取消原因；
  - `isFlag` / `remark`：有效标记与备注。

在 Service 层（`AndonEventServiceImpl`）中，对新增/修改事件进行了规则匹配、时限计算以及状态变更的封装。

#### 1.2.3 安灯派工记录（AndonEventAssignment）

**职责**：

- 表示围绕某个安灯事件创建的派工/待办记录；
- 记录任务被派给了谁（用户/角色/班组）、何时派工、接单与完成时间；
- 维护派工的状态（已派工、已接单、已完成、已取消、已拒绝等）；
- 与事件状态联动，构成完整处理闭环。

**典型字段（来自 AndonEventAssignment / Mapper）：**

- `assignmentId`：派工记录主键；
- `eventId`：所属安灯事件；
- `assigneeUserId` / `assigneeUserName`：被分配用户信息；
- `assigneeRoleKey` / `assigneeTeamCode`：被分配角色与班组；
- `assignedTime`：派工时间；
- `acceptTime`：接单时间（在 Service 中根据状态自动补充）；
- `finishTime`：完成时间（在 Service 中根据状态自动补充）；
- `status`：派工状态（字典 `andon_status`）；
- `isFlag`：是否有效；
- `remark`：备注。

在 Service 层（`AndonEventAssignmentServiceImpl`）中，`updateAndonEventAssignment` 会根据派工状态自动：

- 补充自身接单/完成时间；
- 联动更新事件的开始处理时间、完成时间及状态；
- 写入对应的事件日志；
- 在配置允许时，自动取消同一事件下的其他并行派工。

#### 1.2.4 安灯事件日志（AndonEventLog）

**职责**：

- 记录所有与安灯事件相关的关键操作，形成审计轨迹；
- 为事后追溯、责任划分和优化分析提供依据。

**典型字段：**

- `logId`：日志主键；
- `eventId`：关联事件；
- `operation`：操作类型（字典 `andon_operation`，如 CREATE、ASSIGN、ACK、RESOLVE、CANCEL 等）；
- `content`：操作内容描述；
- `operatorUserId` / `operatorUserName`：操作人；
- `operationTime`：操作时间；
- `remark`：备注。

事件日志通常由后端 Service 自动写入：

- 事件创建/编辑/取消；
- 自动派工创建；
- 派工接单/完成/取消/拒绝；
- 自动取消其他派工等。

#### 1.2.5 安灯看板配置（AndonBoardConfig）

**职责**：

- 为车间现场的安灯看板（大屏）提供配置；
- 指定看板关联产线/工位、展示字段、刷新周期等。

**典型字段：**

- `boardCode` / `boardName`：看板编码与名称；
- `productLineCode` / `stationCode`：关联产线与工位/工序；
- `displayFields`：看板展示字段配置（JSON 或约定字符串）；
- `refreshIntervalSec`：刷新间隔（秒）；
- `isFlag`：是否有效；
- `remark`：备注。

前端看板程序可根据 `boardCode` 读取配置，再按产线/工位范围实时拉取 AndonEvent 数据进行可视化展示。

---

### 1.3 业务流程说明（从呼叫到关闭的闭环）

#### 1.3.1 前置：配置安灯规则

1. 管理人员在“安灯规则配置”页面维护规则：
   - 定义规则名称与呼叫类型编码；
   - 选择适用的产线/工位/班组与触发源类型；
   - 设置确认时限、解决时限与默认优先级；
   - 选择通知用户（以及可选的通知角色）；
   - 启用（`isFlag = 1`）。
2. 后端通过 `AndonRuleMapper.selectAndonRuleList` 根据条件查询有效规则，为后续事件创建与派工提供基础。

#### 1.3.2 创建安灯事件（AndonEvent）

安灯事件可以由前端页面手工新增，也可以由外部系统/设备通过接口推送，后端统一通过 `AndonEventServiceImpl.insertAndonEvent` 处理：

1. 写入事件的 `createTime`；
2. 调用 `applyRuleAndCompute(e, true)`：
   - 按 `callTypeCode + isFlag` 从规则表拉取候选规则；
   - 通过 `pickBestRule` 根据产线/工位/班组/触发源类型的匹配度选择最优规则；
   - 若命中规则：
     - 若事件未设置 `priority`，使用规则的 `priorityDefault`；
     - 根据规则的 `ackTimeoutMin` 计算确认截止时间 `ackDeadline`；
     - 根据规则的 `resolveTimeoutMin` 及 `remark.resAnchor` 计算解决截止时间 `resolveDeadline`；
3. 调用 `andonEventMapper.insertAndonEvent` 入库；
4. 调用 `autoCreateAssignments(e)` 基于规则自动创建派工记录；
5. 写入一条 `CREATE` 类型的事件日志。

#### 1.3.3 自动派工（AndonEventAssignment）

`autoCreateAssignments` 的主要逻辑：

1. 再次根据事件信息匹配最佳规则；
2. 从规则的 `remark` 中解析派工模式与兜底策略：
   - `mode`：`single`（单人）或 `multi`（多人），默认 `single`；
   - `fallback`：`role` 或 `none`，决定在没有用户或单人模式未创建成功时是否按角色兜底；
3. 优先依据 `notifyUsers` 创建派工：
   - 对每个用户 ID 创建 `AndonEventAssignment`，状态初始为 ASSIGNED；
   - 单人模式下创建第一条后即停止；
4. 如未成功创建，且 `fallback = role`，则依据 `notifyRoles` 按角色创建派工；
5. 若成功创建至少一条派工，则写入一条 `ASSIGN` 类型的事件日志。

#### 1.3.4 派工状态与事件状态联动

当派工记录状态被修改（`AndonEventAssignmentServiceImpl.updateAndonEventAssignment`）时：

1. 派工自身里程碑时间维护：
   - 若状态变更为 ACCEPTED 且 `acceptTime` 为空，则写入当前时间；
   - 若状态变更为 DONE 且 `finishTime` 为空，则写入当前时间；
2. 事件联动：
   - 若派工状态为 ACCEPTED：
     - 若事件 `responseStartTime` 为空，则写入当前时间；
     - 事件状态设置为 PROCESSING；
     - 写入 `ACCEPT` 操作日志；
   - 若派工状态为 DONE：
     - 若事件 `responseEndTime` 为空，则写入当前时间；
     - 事件状态设置为 RESOLVED；
     - 写入 `RESOLVE` 操作日志；
     - 根据规则策略 `cancelOthers` 可自动取消同一事件下其他未完成派工（状态置为 CANCELLED，并写 `CANCEL_OTHERS` 日志）；
   - 若派工状态为 CANCELLED：
     - 写入 `CANCEL_ASSIGNMENT` 操作日志；
   - 若派工状态为 REJECTED：
     - 写入 `REJECT` 操作日志。

#### 1.3.5 事件生命周期操作（确认/开始处理/完成/取消）

在 `AndonEventServiceImpl` 中提供了对事件基础生命周期的操作方法（同时前端也通过专用按钮调用）：

1. `acknowledgeEvent`（确认事件）：
   - 记录确认人 `ackBy` 与确认时间 `ackTime`；
   - 将事件状态设置为 PROCESSING；
   - 写入 `ACK` 日志；
2. `startProcessEvent`（开始处理）：
   - 记录 `responseStartTime`；
   - 事件状态置为 PROCESSING；
   - 调用 `applyRuleAndCompute` 重新计算解决截止时间（以开始处理时间为锚点）；
   - 写入“开始处理”编辑日志；
3. `completeEvent`（完成事件）：
   - 记录 `responseEndTime` 与 `resolution`；
   - 事件状态置为 RESOLVED；
   - 写入 `RESOLVE` 日志；
4. `cancelEvent`（取消事件）：
   - 记录 `cancelReason`；
   - 事件状态置为 CANCELLED；
   - 级联调用 `cascadeCancelAssignments` 将该事件下所有派工置为 CANCELLED；
   - 写入 `CANCEL` 日志。

#### 1.3.6 日志与看板

- 日志（AndonEventLog）：由各类 Service 方法在关键节点自动写入；
- 看板（AndonBoardConfig）：前端根据配置定时拉取 AndonEvent 数据，在大屏展示当前安灯分布和状态。

---

### 1.4 关键扩展配置（remark JSON）

部分高级策略通过 `remark` 字段以 JSON 形式保存，例如：

```json
{
  "mode": "single|multi",
  "fallback": "role|none",
  "cancelOthers": true,
  "resAnchor": "start|ack|create"
}
```

含义说明：

- `mode`：派工模式
  - `single`：单人模式，只创建一条派工记录；
  - `multi`：多人模式，按照用户列表全部创建；
- `fallback`：兜底策略
  - `role`：当 `notifyUsers` 为空或未成功创建时，退回按 `notifyRoles` 创建派工；
  - `none`：不进行角色兜底；
- `cancelOthers`：是否在某条派工完成后自动取消同一事件下其他并行派工，默认 `true`；
- `resAnchor`：解决时限起算锚点
  - `start`：优先从 `responseStartTime` 起算，若为空则退回确认时间，再退回创建时间；
  - `ack`：从确认时间起算，若为空则退回创建时间；
  - `create`：直接从创建时间起算。

### 1.5 前后端代码逻辑概览

本节从“前端页面 → 前端 api → 后端 Controller → Service → Mapper/数据库”的角度，梳理各模块的主要调用链，方便开发、联调与排查问题。

#### 1.5.1 安灯事件（AndonEvent）调用链

**前端页面与 api：**

- 页面：`views/production/andonEvent/index.vue`
- api：`api/production/andonEvent.js`
  - `listAndonEvent(query)` → `GET /production/andonEvent/list`
  - `getAndonEvent(eventId)` → `GET /production/andonEvent/{eventId}`
  - `addAndonEvent(data)` → `POST /production/andonEvent`
  - `updateAndonEvent(data)` → `PUT /production/andonEvent`
  - `delAndonEvent(eventId)` → `DELETE /production/andonEvent/{eventId}`
  - `acknowledgeEvent(eventId)` → `POST /production/andonEvent/acknowledge/{eventId}`
  - `startProcessEvent(eventId)` → `POST /production/andonEvent/startProcess/{eventId}`
  - `completeEvent(eventId, resolution)` → `POST /production/andonEvent/complete/{eventId}`，`resolution` 通过查询参数传递；
  - `cancelEvent(eventId, cancelReason)` → `POST /production/andonEvent/cancel/{eventId}`，`cancelReason` 通过查询参数传递。

**后端 Controller：** `AndonEventController`（`/production/andonEvent`）

- `list(AndonEvent andonEvent)`：查询事件列表，调用 `IAndonEventService.selectAndonEventList`，由 `AndonEventMapper.selectAndonEventList` 查询 `andon_event` 表；
- `add(AndonEvent andonEvent)`：新增事件，补全 `createBy`/`createTime` 后调用 `insertAndonEvent`；
- `edit(AndonEvent andonEvent)`：修改事件，补全 `updateBy`/`updateTime` 后调用 `updateAndonEvent`；
- `acknowledge(Long eventId)`：确认事件，调用 `acknowledgeEvent(eventId, getUsername())`；
- `startProcess(Long eventId)`：开始处理，调用 `startProcessEvent(eventId, getUsername())`；
- `complete(Long eventId, String resolution)`：完成事件，调用 `completeEvent(eventId, resolution, getUsername())`；
- `cancel(Long eventId, String cancelReason)`：取消事件，调用 `cancelEvent(eventId, cancelReason, getUsername())`。

**Service 关键逻辑：** `AndonEventServiceImpl`

- `insertAndonEvent`：执行规则匹配与时限计算（`applyRuleAndCompute`）→ 写入事件（`insertAndonEvent` Mapper）→ 自动创建派工（`autoCreateAssignments`）→ 写入创建日志（`logEvent`）；
- `updateAndonEvent`：根据最新时间重算截止时间；如状态为取消则调用 `cascadeCancelAssignments` 级联取消派工，并写取消日志；
- `acknowledgeEvent` / `startProcessEvent` / `completeEvent` / `cancelEvent`：维护确认/开始处理/完成/取消相关字段与状态，调用 `AndonEventMapper.updateAndonEvent` 落库，并通过 `logEvent` 写入相应操作日志。

**调用链时序图示例（新增安灯事件）：**

```mermaid
sequenceDiagram
    participant U as 用户
    participant V as AndonEvent 页面<br/>index.vue
    participant A as andonEvent.js
    participant C as AndonEventController
    participant S as AndonEventServiceImpl
    participant RM as AndonRuleMapper
    participant EM as AndonEventMapper
    participant AM as AndonEventAssignmentMapper
    participant LM as AndonEventLogMapper

    U->>V: 点击“新增”并提交安灯表单
    V->>A: addAndonEvent(data)
    A->>C: POST /production/andonEvent
    C->>S: insertAndonEvent(andonEvent)
    S->>RM: selectAndonRuleList(...)
    RM-->>S: 返回候选规则
    S->>S: applyRuleAndCompute(匹配规则并计算截止时间)
    S->>EM: insertAndonEvent(写入 andon_event)
    S->>AM: insertAndonEventAssignment(根据规则创建派工)
    S->>LM: insertAndonEventLog(记录创建日志)
    S-->>C: 返回插入结果
    C-->>A: AjaxResult
    A-->>V: 响应成功，刷新事件列表
```

#### 1.5.2 安灯规则（AndonRule）调用链

**前端页面与 api：**

- 页面：`views/production/andonRule/index.vue`
- api：`api/production/andonRule.js`
  - `listAndonRule(query)` → `GET /production/andonRule/list`
  - `getAndonRule(ruleId)` → `GET /production/andonRule/{ruleId}`
  - `addAndonRule(data)` → `POST /production/andonRule`
  - `updateAndonRule(data)` → `PUT /production/andonRule`
  - `delAndonRule(ruleId)` → `DELETE /production/andonRule/{ruleId}`
  - `getAndonRuleList(query)` → `GET /production/andonRule/getAndonRuleList`（安灯事件新增时用于加载规则下拉）

**后端 Service 与 Mapper：**

- `IAndonRuleService` / `AndonRuleServiceImpl`：提供规则的增删改查能力；
- `AndonRuleMapper`（`AndonRuleMapper.xml`）：与 `andon_rule` 表交互；
- 规则查询 `selectAndonRuleList` 被 `AndonEventServiceImpl.applyRuleAndCompute` 与 `autoCreateAssignments` 调用，用于为事件匹配最佳规则及派工策略。

#### 1.5.3 安灯派工记录（AndonEventAssignment）调用链

**前端页面与 api：**

- 页面：`views/production/andonEventAssignment/index.vue`
- api：`api/production/andonEventAssignment.js`
  - `listAndonEventAssignment(query)` → `GET /production/andonEventAssignment/list`
  - `getAndonEventAssignment(assignmentId)` → `GET /production/andonEventAssignment/{assignmentId}`
  - `addAndonEventAssignment(data)` → `POST /production/andonEventAssignment`
  - `updateAndonEventAssignment(data)` → `PUT /production/andonEventAssignment`
  - `delAndonEventAssignment(assignmentId)` → `DELETE /production/andonEventAssignment/{assignmentId}`
  - `getAndonEventAssignmentList(query)` → `GET /production/andonEventAssignment/getAndonEventAssignmentList`

**后端 Service 与 Mapper：**

- `IAndonEventAssignmentService` / `AndonEventAssignmentServiceImpl`：
  - `insertAndonEventAssignment` 在自动派工或手工新增派工时调用，写入 `createTime` 后通过 `AndonEventAssignmentMapper.insertAndonEventAssignment` 持久化；
  - `updateAndonEventAssignment` 根据派工状态自动补 `acceptTime` / `finishTime`，并通过 `AndonEventMapper` 联动更新事件的状态与时间里程碑，同时调用 `AndonEventLogMapper.insertAndonEventLog` 写日志；
- `AndonEventAssignmentMapper`：与 `andon_event_assignment` 表交互。

#### 1.5.4 安灯事件日志（AndonEventLog）调用链

**前端页面与 api：**

- 页面：`views/production/andonEventLog/index.vue`
- api：`api/production/andonEventLog.js`
  - `listAndonEventLog(query)` → `GET /production/andonEventLog/list`
  - `getAndonEventLog(logId)` → `GET /production/andonEventLog/{logId}`
  - `addAndonEventLog(data)` → `POST /production/andonEventLog`
  - `updateAndonEventLog(data)` → `PUT /production/andonEventLog`
  - `delAndonEventLog(logId)` → `DELETE /production/andonEventLog/{logId}`
  - `getAndonEventLogList(query)` → `GET /production/andonEventLog/getAndonEventLogList`

**后端 Service 与 Mapper：**

- `IAndonEventLogService` / `AndonEventLogServiceImpl`：提供日志的增删改查；
- `AndonEventLogMapper`：与 `andon_event_log` 表交互；
- 实际业务中，大多由 `AndonEventServiceImpl`、`AndonEventAssignmentServiceImpl` 内部调用 `AndonEventLogMapper.insertAndonEventLog` 自动写入，不建议前端直接新增/修改。

#### 1.5.5 安灯看板配置（AndonBoardConfig）调用链

**前端页面与 api：**

- 页面：`views/production/andonBoardConfig/index.vue`
- api：`api/production/andonBoardConfig.js`
  - `listAndonBoardConfig(query)` → `GET /production/andonBoardConfig/list`
  - `getAndonBoardConfig(boardId)` → `GET /production/andonBoardConfig/{boardId}`
  - `addAndonBoardConfig(data)` → `POST /production/andonBoardConfig`
  - `updateAndonBoardConfig(data)` → `PUT /production/andonBoardConfig`
  - `delAndonBoardConfig(boardId)` → `DELETE /production/andonBoardConfig/{boardId}`
  - `getAndonBoardConfigList(query)` → `GET /production/andonBoardConfig/getAndonBoardConfigList`

**后端 Service 与 Mapper：**

- `IAndonBoardConfigService` / `AndonBoardConfigServiceImpl`：看板配置的增删改查；
- `AndonBoardConfigMapper`：与 `andon_board_config` 表交互；
- 前端看板展示页可基于 `boardCode` 拉取对应配置，再结合 `AndonEvent` 列表做可视化展示。

---

## 二、操作手册（终端用户使用说明）

本章节面向车间一线操作人员、班组长、维修/质量/设备人员及生产管理人员，说明在各个前端页面上的具体操作方式和注意事项，并结合系统后台逻辑帮助理解业务闭环。

### 2.1 用户角色与使用边界（概览）

> 实际角色划分以项目实施时的权限配置为准，本节仅给出典型场景参考。

- **一线操作工**：
  - 在出现异常时发起安灯呼叫；
  - 补充或更新呼叫描述信息。
- **班组长/线长**：
  - 维护本产线/班组相关的安灯规则；
  - 跟踪本线的安灯事件进度，必要时协助调整处理优先级；
  - 在特殊情况下取消不再需要处理的事件。
- **维修/质量/设备工程师**：
  - 作为安灯派工的接收者，接单并处理问题；
  - 在系统中填写解决措施，完成派工与事件；
- **生产/质量管理人员**：
  - 通过事件列表、派工列表、日志和看板分析异常分布与响应效率；
  - 调整规则和组织方式以持续优化。

---

### 2.2 安灯规则配置页面使用说明

对应前端：`views/production/andonRule/index.vue`

#### 2.2.1 页面结构

- **查询区域**：
  - 可按“规则名称”进行模糊查询；
  - 其它高级条件（产线/工位/班组等）可按需要扩展使用；
- **列表区域**：
  - 展示规则名称、呼叫类型、适用范围、时限、默认优先级、通知对象等；
  - 支持列显隐配置；
- **操作按钮**：
  - 新增：添加新的安灯规则；
  - 修改：编辑选中规则；
  - 删除：逻辑层面删除不再需要的规则（建议谨慎使用，优先通过 `isFlag` 失效）。

#### 2.2.2 新增/编辑规则

在弹出的规则表单中：

- 填写“规则名称”“呼叫类型编码”；
- 选择适用产线、工位/工序、班组（可选）；
- 设置确认时限与解决时限（分钟）；
- 设置默认优先级（1–5）；
- 在“通知用户”中多选需要被通知的人员；
- 必要时在“备注”中约定高级策略（如取消其它派工、解决时限锚点等）；
- 提交后，系统在新增时会自动设置默认值（优先级 3、确认 5 分钟、解决 30 分钟、`isFlag=1` 等）。

**建议：** 上线前先由工艺/设备/质量等相关部门共同评审规则配置，确保呼叫类型、适用范围和处理时限合理。

---

### 2.3 安灯事件页面使用说明

对应前端：`views/production/andonEvent/index.vue`

#### 2.3.1 查看与筛选安灯事件

- 在顶部查询区域，可按“安灯呼叫单号”等条件查询；
- 列表中可看到事件的呼叫类型、触发源类型、产线/工位/班组、工单号、设备、优先级、状态、各类时间节点等；
- 可通过右上角列配置按钮开启/关闭不关心的列，简化视图。

#### 2.3.2 新增安灯事件（手工发起呼叫）

点击“新增”，在弹窗中：

- 系统会自动给出一条默认的呼叫单号（如 `AD + 时间戳`），可直接使用；
- 选择“呼叫类型编码”：
  - 下拉选项来自安灯规则列表（仅取有效规则）；
  - 推荐按实际业务场景选择对应类型；
- 选择“触发源类型”与“触发源引用”：
  - 若是工位安灯：选择触发源类型为工位，并从下拉中选择具体工位；
  - 若是设备安灯：选择触发源类型为设备，并选择设备台账中的设备；
  - 报警/手动等类型可直接输入引用 ID；
- 选择产线、工位/工序、班组（均为下拉框）；
- 如有需要，可录入工单号、设备编码等辅助信息；
- 在“呼叫描述”中尽量详细描述问题现象和影响范围；
- 提交后：
  - 系统将自动匹配规则并计算确认/解决截止时间与优先级；
  - 自动生成相关派工记录；
  - 写入事件创建日志。

#### 2.3.3 事件确认、完成与取消

在事件列表的“操作”列中，根据事件状态会显示不同按钮：

- **确认**（仅待处理状态显示）：
  - 点击后，系统记录当前用户为确认人，并写入确认时间；
  - 事件状态变为“处理中”；
  - 写入确认日志；
- **完成**（处理中状态显示）：
  - 点击后，在弹窗或表单中填写解决措施；
  - 系统记录处理完成时间，将事件状态置为“已解决”；
  - 写入解决日志；
- **取消**（待处理/处理中状态显示）：
  - 输入取消原因后提交；
  - 事件状态变为“已取消”；
  - 系统自动将该事件下所有派工记录状态改为“已取消”；
  - 写入取消日志。

> 注意：安灯事件用于统计分析和追溯，**不建议删除事件**，如需终止处理，请使用“取消”功能。

---

### 2.4 安灯派工记录页面使用说明

对应前端：`views/production/andonEventAssignment/index.vue`

#### 2.4.1 查看派工记录

- 在查询区域可按“派工状态”等条件进行筛选；
- 列表中展示：被分配用户/角色/班组、派工时间、接单时间、完成时间、派工状态、是否有效等信息；
- 通过列控制可隐藏技术性较强的字段（如主键 ID 等），方便业务人员使用。

#### 2.4.2 修改派工状态

系统设计上，派工记录通常由后端根据规则自动创建，业务人员主要通过“修改状态”来反映实际执行情况：

- 选择一条或多条记录，点击“修改状态”；
- 在弹出的表单中：
  - 选择事件（只读或下拉）；
  - 选择被分配用户（如有需要可调整）；
  - 查看接单时间、完成时间（由后端自动维护）；
  - 修改派工状态为：已派工、已接单、已完成、已取消、已拒绝等；
  - 提交后，后端将自动补充对应的时间戳，并联动更新事件状态与里程碑时间，同时写入相应日志。

**不建议**在日常使用中删除派工记录，以免影响事件完整性和统计结果。在特殊需要删除时，应遵循项目管理规范执行。

---

### 2.5 安灯事件日志页面使用说明

对应前端：`views/production/andonEventLog/index.vue`

#### 2.5.1 查看日志

- 在查询区域可按“操作类型”筛选（如只看创建、派工、取消等）；
- 列表中展示：事件 ID、操作类型、操作内容、操作人、操作时间等；
- 可按时间排序，便于从时间轴维度审查某一事件的完整处理过程。

#### 2.5.2 使用建议

- 日志主要由系统后台自动记录，**通常无需人工新增或修改**；
- 管理人员可在以下场景使用：
  - 复盘重大停线/质量事故的处理过程；
  - 检查某一次安灯是否按规定时限响应和完成；
  - 分析不同班组/人员对安灯的响应习惯和效率。

---

### 2.6 安灯看板配置页面使用说明

对应前端：`views/production/andonBoardConfig/index.vue`

#### 2.6.1 查看与维护看板配置

- 列表中展示：看板编码、看板名称、产线、工位/工序、展示字段配置、刷新间隔、是否有效等；
- 可按看板编码或名称搜索特定看板配置。

#### 2.6.2 新增/编辑看板配置

在新增或编辑对话框中：

- 填写“看板编码”“看板名称”；
- 选择关联的产线和工位/工序；
- 设置“刷新间隔”（秒）：
  - 决定大屏从后端拉取数据的频率；
  - 建议根据现场网络与数据量情况合理设置；
- 根据需求配置“展示字段配置”（如展示哪些时间、状态、优先级等）；
- 设置“是否有效”为启用状态；
- 提交后，大屏应用即可根据新的配置进行展示。

---

### 2.7 典型业务使用场景小结

#### 场景一：上线前配置规则

- 由工艺/设备/质量/IT 等角色共同在“安灯规则配置”页面定义：
  - 规则名称与呼叫类型；
  - 适用产线/工位/班组；
  - 确认与解决时限；
  - 通知用户列表；
  - 是否自动取消其他派工等策略。

#### 场景二：现场发起安灯

- 一线操作工或班组长根据现场情况，在“安灯事件”页面点击“新增”；
- 选择合适的呼叫类型与触发源，填写产线/工位/班组与问题描述；
- 提交后系统自动匹配规则和派工，不需要人工额外操作。

#### 场景三：责任人接单并处理

- 维修、质量等责任人员在“安灯派工记录”或“安灯事件”页面：
  - 将派工状态改为“已接单”，开始实际处理；
  - 在完成后改为“已完成”，并填写解决措施；
- 系统自动维护相关时间节点并更新事件状态。

#### 场景四：管理层监控与复盘

- 通过“安灯事件”页面查看当前和历史事件分布；
- 通过“安灯派工记录”分析不同责任人/班组的响应与处理情况；
- 通过“安灯事件日志”还原重要事件的全过程；
- 通过“安灯看板配置”与现场大屏，实时监控车间安灯整体健康状况。

---

### 2.8 参考案例：1号产线设备故障安灯全流程

以下以“1号产线设备 A 停机故障”为例，从操作顺序和后台逻辑两个角度，串起完整安灯闭环：

#### 2.8.1 前置配置（由规则到页面）

1. 管理人员在“安灯规则配置”页面新增规则：
   - `ruleName`：1号产线-设备故障；
   - `callTypeCode`：DEVICE_FAULT；
   - `productLineCode`：PL001（1号产线）；
   - `stationCode`：对应工位；
   - `ackTimeoutMin`：5 分钟，`resolveTimeoutMin`：30 分钟；
   - `priorityDefault`：1（最高优先级）；
   - `notifyUsers`：选择维修工程师账号；
   - `remark` 中可配置 `{"mode":"single","cancelOthers":true,"resAnchor":"start"}`；
2. 前端保存规则时调用 `addAndonRule` → `POST /production/andonRule`；
3. 后端 `AndonRuleServiceImpl.insertAndonRule` 将规则写入 `andon_rule` 表，后续事件创建时会按 `callTypeCode` + 产线/工位/班组匹配到该规则。

#### 2.8.2 现场发起安灯事件

1. 一线操作工在 1 号产线操作台发现设备 A 停机：
   - 打开“安灯事件”页面，点击“新增”；
   - 选择“呼叫类型编码：DEVICE_FAULT”；
   - 触发源类型选“设备”，触发源引用选择设备 A；
   - 产线选择 PL001，工位选择当前工位，班组选择当前班组；
   - 在“呼叫描述”中填写“设备 A 突然停机，无法启动”；
   - 提交表单。
2. 前端调用 `addAndonEvent` → `POST /production/andonEvent`，将表单数据作为 `AndonEvent` 传入后端；
3. 后端 `AndonEventController.add`：
   - 补全 `createBy = 当前登录用户`、`createTime = 当前时间`；
   - 调用 `AndonEventServiceImpl.insertAndonEvent`；
4. `insertAndonEvent` 内部：
   - 调用 `applyRuleAndCompute(andonEvent, true)`：
     - 根据 `callTypeCode=DEVICE_FAULT`、产线/工位/班组在 `andon_rule` 中筛选出候选规则；
     - 通过 `pickBestRule` 按匹配度选择前面配置的“1号产线-设备故障”规则；
     - 计算 `ackDeadline = createTime + 5 分钟`；
     - 计算 `resolveDeadline = （后续 start 时间 或 createTime）+ 30 分钟`；
     - 若未手动设置优先级，则赋值为 `priorityDefault=1`；
   - 通过 `AndonEventMapper.insertAndonEvent` 写入 `andon_event` 表；
   - 调用 `autoCreateAssignments(andonEvent)`：
     - 读取规则中的 `notifyUsers`，为维修工程师创建一条派工记录（状态 ASSIGNED，`assignedTime` 为当前时间）；
     - 通过 `AndonEventAssignmentMapper.insertAndonEventAssignment` 写入 `andon_event_assignment` 表；
   - 调用 `logEvent` 向 `andon_event_log` 记录一条“事件创建并完成规则计算与派工初始化”的日志。

#### 2.8.3 责任人接单与处理

1. 维修工程师在系统中查看“安灯派工记录”页面：
   - 筛选派工状态为“已派工”；
   - 看到自己被分配到的“设备 A 故障”记录；
2. 维修工程师点击“修改”/“修改状态”，将派工状态改为“已接单”：
   - 前端调用 `updateAndonEventAssignment` → `PUT /production/andonEventAssignment`；
   - 后端 `AndonEventAssignmentServiceImpl.updateAndonEventAssignment`：
     - 补全 `acceptTime = 当前时间`；
     - 根据 `eventId` 读取对应 `AndonEvent`，若 `responseStartTime` 为空则补为当前时间；
     - 将事件状态置为 PROCESSING；
     - 更新 `andon_event` 与 `andon_event_assignment`，并写入一条“派工已接受，事件进入处理中”的日志；
3. 维修工程师处理完成后，再次修改派工状态为“已完成”：
   - 前端仍然调用 `updateAndonEventAssignment`；
   - `updateAndonEventAssignment`：
     - 补全 `finishTime = 当前时间`；
     - 若事件 `responseEndTime` 为空则补为当前时间，将事件状态置为 RESOLVED；
     - 按规则中 `cancelOthers=true`，自动取消同一事件下其他未完成派工（如有）；
     - 写入“派工已完成，事件标记已解决”以及“策略要求取消该事件的其他并行派工”的日志。

> 也可以由班组长在“安灯事件”页面直接对该事件点击“完成”，前端调用 `completeEvent` 接口，后端 `AndonEventServiceImpl.completeEvent` 会记录 `responseEndTime`、`resolution` 并将事件状态置为 RESOLVED，同样写入解决日志。

#### 2.8.4 管理层查看与复盘

1. 生产管理在“安灯事件”页面按时间、产线、呼叫类型筛选，可看到该次设备故障安灯的：
   - 呼叫单号、产线/工位、设备、班组；
   - 优先级、当前状态；
   - 确认时间、开始处理时间、完成时间；
   - 确认/解决截止时间是否被超时等；
2. 在“安灯事件日志”页面按事件 ID 查询，可看到完整的日志链：
   - 事件创建；
   - 自动派工；
   - 派工被接受；
   - 派工完成及自动取消其他派工（若有）；
3. 在现场安灯看板上，对应 1 号产线的大屏会按配置展示：
   - 当前正在处理或已超时的安灯事件；
   - 该设备故障事件在处理期间会以高优先级标记，以便管理者快速关注。

通过上述案例，可以看到：

- 业务人员仅需按实际情况在前端页面完成“配置规则 → 发起安灯 → 接单处理 → 填写结果”等操作；
- 系统自动完成规则命中、时限计算、派工生成、状态联动和日志记录；
- 管理层可以通过事件列表、派工记录、日志和看板对一次安灯从呼叫到解决的全过程进行追踪与复盘。

---

### 2.9 安灯业务流程总览（流程图）

本节通过一张整体流程图，展示安灯从**规则配置 → 现场呼叫 → 系统匹配规则与派工 → 接单处理 → 完成/取消 → 日志与看板**的闭环过程。若使用支持 Mermaid 的 Markdown 查看器（如 VSCode 对应扩展、部分 Git 平台），下方代码块会直接渲染为流程图。

```mermaid
flowchart LR
    subgraph PRE[规则与基础配置]
      RCFG[安灯规则配置<br/>AndonRule] -->|保存规则| RDB[(andon_rule)]
      BCFG[安灯看板配置<br/>AndonBoardConfig] --> BDB[(andon_board_config)]
    end

    subgraph CALL[现场呼叫]
      OP[一线操作工/班组长] -->|点击“新增安灯”或外部系统触发| FEV[前端安灯事件页面<br/>andonEvent/index.vue]
      FEV -->|addAndonEvent| API[/api/production/andonEvent.js/]
      API --> CTRL[AndonEventController]
    end

    CTRL -->|insertAndonEvent| SVC[AndonEventServiceImpl]

    subgraph RULE[规则匹配与时限计算]
      SVC -->|selectAndonRuleList| RDB
      RDB --> SVC
      SVC -->|applyRuleAndCompute<br/>计算确认/解决时限、优先级| SVC
    end

    subgraph EVENTDB[事件与派工落库]
      SVC -->|insertAndonEvent| EDB[(andon_event)]
      SVC -->|autoCreateAssignments| ADB[(andon_event_assignment)]
      SVC -->|logEvent(CREATE/ASSIGN)| LDB[(andon_event_log)]
    end

    subgraph EXEC[接单与处理]
      RSP[维修/质量/设备人员] -->|在派工页面查看并“接单/完成”| FAS[前端派工页面<br/>andonEventAssignment/index.vue]
      FAS -->|updateAndonEventAssignment| AAPI[/api/production/andonEventAssignment.js/]
      AAPI --> ASVC[AndonEventAssignmentServiceImpl]
      ASVC --> ADB
      ASVC --> EDB
      ASVC -->|logEvent(ACCEPT/RESOLVE/CANCEL_OTHERS)| LDB
    end

    subgraph LIFECYCLE[事件生命周期操作]
      MGR[班组长/管理人员] -->|确认/开始处理/完成/取消| FEV2[安灯事件页面操作按钮]
      FEV2 -->|acknowledgeEvent/startProcessEvent/completeEvent/cancelEvent| API2[/api/production/andonEvent.js/]
      API2 --> CTRL2[AndonEventController]
      CTRL2 --> SVC2[AndonEventServiceImpl]
      SVC2 --> EDB
      SVC2 -->|logEvent(ACK/RESOLVE/CANCEL)| LDB
    end

    subgraph VIEW[查看与复盘]
      MGR2[管理层/分析人员] --> EVLIST[安灯事件列表页]
      MGR2 --> ASSLIST[派工记录页]
      MGR2 --> LOGPAGE[事件日志页]
      MGR2 --> BOARD[现场安灯看板]

      EVLIST -->|查询/统计| EDB
      ASSLIST --> ADB
      LOGPAGE --> LDB
      BOARD -->|读看板配置| BDB
      BOARD -->|拉取安灯事件数据| EDB
    end

    PRE --> CALL
    EVENTDB --> EXEC
    EVENTDB --> LIFECYCLE
    EXEC --> VIEW
    LIFECYCLE --> VIEW
```

---

> 本文档仅覆盖当前代码与前端页面实现范围。若后续扩展了安灯统计报表、自动升级策略、移动端推送等能力，可在本文件中增补相应章节。

