# 安灯管理系统文档

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

---

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

### 1.1 系统整体概述

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

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

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

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

上述模型在后端分别由对应的 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`：安灯看板配置；
- `views/production/andonDashboard/index.vue`：安灯生产监控看板。

---

### 1.2 模块职责概览

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

**职责**：

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

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

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

**呼叫类型字典（andon_call_type）：**

| 字典值 | 字典标签 |
|---------|-----------|
| EQUIPMENT | 设备故障 |
| QUALITY | 质量问题 |
| MATERIAL | 物料短缺 |

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

**职责**：

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

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

- 标识与基础信息：
  - `eventId`：事件主键；
  - `callCode`：安灯呼叫单号；
  - `callTypeCode`：呼叫类型编码，对应规则的 `callTypeCode`；
- 触发源与位置：
  - `sourceType` / `sourceRefId`：触发源类型及引用 ID（工位编码、设备编码、报警号等）；
  - `productLineCode` / `stationCode` / `teamCode`：产线、工位、班组；
  - `orderCode` / `materialCode` / `deviceId` / `deviceCode`：关联工单、物料、设备；
- 状态与优先级：
  - `priority`：事件优先级，未设置时从规则 `priorityDefault` 继承；
  - `eventStatus`：事件状态（**存储值为数字字符串**："0"=待处理/"1"=处理中/"2"=已解决/"3"=已取消，对应字典 `andon_event_status`）；
  - **注意**：数据库中存储的是数字字符串，后端常量定义在 `AnDonConstants.EventStatus` 中；
- 时间与里程碑：
  - `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`：备注。

**派工状态字典（andon_status）：**

| 存储值 | 字典标签 | 常量名 | 说明 |
|--------|-----------|--------|------|
| "0" | 已派工 | ASSIGNED | 初始状态，等待接单 |
| "1" | 已接单 | ACCEPTED | 责任人已接受任务 |
| "2" | 已拒绝 | REJECTED | 责任人已拒绝 |
| "3" | 已完成 | DONE | 任务已完成 |
| "4" | 已取消 | CANCELLED | 派工已取消 |

**注意**：数据库中存储的是数字字符串，后端常量定义在 `AnDonConstants.AssignmentStatus` 中。

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

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

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

**职责**：

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

**典型字段：**

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

**操作类型字典（andon_operation）：**

| 操作值 | 操作标签 | 说明 |
|--------|-----------|------|
| CREATE | 创建 | 事件创建 |
| ASSIGN | 派工 | 自动派工 |
| ACK | 确认 | 事件确认 |
| ACCEPT | 接单 | 派工被接受 |
| RESOLVE | 解决 | 事件/派工完成 |
| CANCEL | 取消 | 事件取消 |
| CANCEL_ASSIGNMENT | 取消派工 | 派工被取消 |
| CANCEL_OTHERS | 取消其他派工 | 策略取消其他派工 |
| REJECT | 拒绝 | 派工被拒绝 |
| EDIT | 编辑 | 事件编辑 |

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

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

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

**职责**：

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

**典型字段：**

- `boardId`：看板主键；
- `boardCode` / `boardName`：看板编码与名称；
- `stationCode`：关联工位/工序（主要绑定字段）；
- `productLineCode`：关联产线（辅助字段，当前页面中未使用）；
- `displayFields`：看板展示字段配置（JSON 或约定字符串）；
- `refreshIntervalSec`：刷新间隔（秒）；
- `isFlag`：是否有效；
- `remark`：备注。

**展示字段配置（displayFields）写法示例**  
用于前端大屏动态决定列显示，可用字符串、JSON 数组或对象：

```text
1) 逗号分隔字符串（两张表共用同列）
   "callCode,stationCode,eventStatus,priority,createTime"

2) JSON 数组（两张表共用同列，可设置宽度/对齐）
   [
     "callCode",
     "stationCode",
     { "field": "eventStatus", "label": "状态", "align": "center" }
   ]

3) JSON 对象区分"进行中"和"已关闭"列
{
  "activeFields": [
    "callCode",
    "stationCode",
    { "field": "eventStatus", "label": "状态", "align": "center" },
    "priority",
    "createTime"
  ],
  "closedFields": [
    "callCode",
    "stationCode",
    "eventStatus",
    { "field": "responseEndTime", "label": "完成时间" },
    { "field": "resolution", "label": "解决措施" }
  ]
}
```

解析逻辑（前端 `views/board/andonBoard/index.vue`）：
- 为空或解析失败时，回退默认列（进行中：callCode/callTypeCode/stationCode/deviceCode/eventStatus/priority/createTime/description；已关闭：callCode/callTypeCode/stationCode/deviceCode/eventStatus/responseEndTime/resolution/cancelReason）。
- 纯字符串或数组：进行中与已关闭共用同一列集合。
- 对象：优先读取 `activeFields` / `closedFields`（或 `active` / `closed`），否则回退到 `fields` 或整对象键值。
- 每列可附加 `label`、`width`、`align`；缺省时按字段名映射默认中文标题。

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

#### 1.2.6 安灯生产监控看板（AndonDashboard）

**职责**：

- 汇总展示生产现场的实时监控数据；
- 提供设备状态、任务完成、OEE、利用率、品质等关键指标；
- 支持按产线筛选查看不同产线的生产状况。

**数据来源（来自 AndonDashboardServiceImpl）：**

1. **设备状态摘要（getDeviceStatusSummary）**
   - 统计设备总数、运行中、停机、故障、维护等状态分布
   - 数据来源：`base_device_ledger` 表

2. **任务完成摘要（getTaskCompletionSummary）**
   - 统计计划任务数、已完成任务数、任务完成率
   - 数据来源：`product_plan_info` 表

3. **OEE摘要（getOeeSummary）**
   - 计算设备综合效率（OEE = 可用率 × 表现率 × 质量指数）
   - 数据来源：设备台账、设备参数、生产计划

4. **利用率摘要（getUtilizationSummary）**
   - 统计设备利用率、产线利用率
   - 数据来源：设备台账、生产计划

5. **品质摘要（getQualitySummary）**
   - 统计今日产量、良品数、不良品数、良品率
   - 数据来源：`report_quality_inspection` 表（质检记录）
   - 良品率计算：良品率 = 良品数 / (良品数 + 不良品数) × 100%

6. **安灯事件摘要（getAndonEventSummary）**
   - 统计今日安灯事件总数、待处理、处理中、已解决、已取消
   - 数据来源：`andon_event` 表

**典型字段（来自 AndonDashboardDTO）：**

- 设备状态相关：
  - `totalDevices`：设备总数
  - `runningDevices`：运行中设备数
  - `stoppedDevices`：停机设备数
  - `faultDevices`：故障设备数
  - `maintenanceDevices`：维护设备数
  - `deviceDetails`：设备状态详情列表

- 任务完成相关：
  - `todayPlanAmount`：今日计划数量
  - `todayCompleteAmount`：今日完成数量
  - `todayCompletionRate`：今日完成率（%）
  - `monthPlanAmount`：本月计划数量
  - `monthCompleteAmount`：本月完成数量
  - `monthCompletionRate`：本月完成率（%）
  - `lineCompletions`：产线任务完成情况列表

- OEE相关：
  - `overallOee`：综合OEE（%）
  - `availability`：可用率（%）
  - `performance`：表现率（%）
  - `quality`：质量指数（%）
  - `plannedTimeMinutes`：计划时间（分钟）
  - `downtimeMinutes`：停机时间（分钟）
  - `deviceOeeDetails`：设备OEE详情列表

- 利用率相关：
  - `overallUtilization`：整体利用率（%）
  - `lineUtilizations`：产线利用率列表

- 品质相关：
  - `todayOutput`：今日总产量
  - `todayGoodCount`：今日良品数
  - `todayDefectCount`：今日不良品数
  - `todayYieldRate`：今日良品率（%）
  - `monthYieldRate`：本月良品率（%）
  - `lineQualities`：产线品质数据列表

- 安灯事件相关：
  - `todayTotal`：今日事件总数
  - `pendingCount`：待处理事件数
  - `processingCount`：处理中事件数
  - `resolvedCount`：已解决事件数
  - `cancelledCount`：已取消事件数
  - `avgResponseMinutes`：平均响应时间（分钟）
  - `avgResolveMinutes`：平均解决时间（分钟）
  - `eventTypeStats`：安灯事件类型统计列表

#### 1.2.7 安灯看板展示（AndonBoard）

**职责**：

- 为车间现场的安灯看板（大屏）提供实时数据展示；
- 根据看板配置自动过滤和展示安灯事件；
- 支持动态配置展示字段和刷新间隔；
- 提供免登录访问接口，方便大屏展示。

**核心功能：**

1. **看板配置管理**
   - 通过 `AndonBoardConfig` 配置看板的展示范围（产线/工位）
   - 支持配置展示字段和刷新间隔
   - 同一编码可存在多条配置，取最新启用的配置

2. **事件数据过滤**
   - 根据看板配置的产线/工位范围过滤安灯事件
   - 自动拆分为进行中事件（待处理/处理中）和已关闭事件（已解决/已取消）
   - 进行中事件按状态/优先级/创建时间排序
   - 已关闭事件按完成时间/更新时间倒序排序，限制最多显示20条

3. **统计数据汇总**
   - 实时统计待处理、处理中、已解决、已取消、总数
   - 提供服务器时间供前端同步

4. **免登录访问**
   - 接口使用 `@Anonymous` 标记，支持免登录访问
   - 适合大屏展示和外部系统集成

**后端实现（AndonBoardController）：**

- **接口路径**：`GET /production/andonBoard/view`
- **请求参数**：`boardCode`（看板编码，必填）
- **返回数据**：
  ```json
  {
    "config": {
      "boardId": 1,
      "boardCode": "BOARD001",
      "boardName": "装配工位安灯看板",
      "stationCode": "ST001",
      "displayFields": "...",
      "refreshIntervalSec": 10
    },
    "stats": {
      "pending": 5,
      "processing": 3,
      "resolved": 20,
      "cancelled": 2,
      "active": 8,
      "total": 30
    },
    "activeEvents": [...],
    "closedEvents": [...],
    "serverTime": "2025-12-31 10:30:00"
  }
  ```

**核心逻辑：**

1. **参数校验**：boardCode 必填
2. **查询配置**：查询启用的看板配置，同一编码取最新的一条
3. **过滤事件**：根据配置的产线/工位范围查询安灯事件
4. **统计分组**：统计各状态数量，拆分进行中/已关闭事件
5. **排序限制**：进行中事件按优先级排序，已关闭事件限制20条
6. **返回数据**：组装配置、统计、事件列表、服务器时间

**前端实现（views/board/andonBoard/index.vue）：**

- **页面功能**：
  - 深色主题设计，适合大屏展示
  - 顶部显示看板标题、boardCode、刷新间隔、最近更新时间
  - 统计卡片展示待处理、处理中、已解决、已取消、总数
  - 双面板布局：左侧展示进行中事件，右侧展示已关闭事件
  - 支持自动刷新，刷新间隔从配置读取

- **数据获取**：
  - 通过 `viewAndonBoard(boardCode)` 接口获取数据
  - 从 URL 参数中读取 boardCode（支持 query 和 params）
  - 使用定时器自动刷新数据

- **字段配置解析**：
  - 支持字符串、JSON数组、JSON对象三种格式
  - 可区分进行中和已关闭的展示字段
  - 支持设置列宽和对齐方式
  - 解析失败时使用默认字段

- **展示字段配置示例**：

  1. **逗号分隔字符串**（简单配置）
     ```
     callCode,stationCode,eventStatus,priority,createTime
     ```

  2. **JSON数组**（可设置列宽、对齐）
     ```json
     [
       "callCode",
       "stationCode",
       { "field": "eventStatus", "label": "状态", "align": "center" }
     ]
     ```

  3. **JSON对象**（区分进行中/已关闭）
     ```json
     {
       "activeFields": [
         "callCode",
         "stationCode",
         { "field": "eventStatus", "label": "状态", "align": "center" },
         "priority",
         "createTime"
       ],
       "closedFields": [
         "callCode",
         "stationCode",
         "eventStatus",
         { "field": "responseEndTime", "label": "完成时间" },
         { "field": "resolution", "label": "解决措施" }
       ]
     }
     ```

- **可用字段列表**：

  | 字段名 | 说明 |
  |--------|------|
  | index | 序号（前端行号） |
  | eventId | 事件ID |
  | callCode | 呼叫单号 |
  | callTypeCode | 呼叫类型 |
  | sourceType | 触发源类型 |
  | sourceRefId | 触发源编码 |
  | productLineCode | 产线编码 |
  | stationCode | 工位/工序编码 |
  | teamCode | 班组编码 |
  | orderCode | 工单号 |
  | materialCode | 物料编码 |
  | deviceCode | 设备编码 |
  | priority | 优先级 |
  | eventStatus | 状态 |
  | description | 呼叫描述 |
  | ackBy | 确认人 |
  | ackTime | 确认时间 |
  | responseStartTime | 开始处理时间 |
  | responseEndTime | 完成时间 |
  | resolution | 解决措施 |
  | cancelReason | 取消原因 |
  | escalateLevel | 升级级别 |
  | escalateTime | 升级时间 |
  | ackDeadline | 确认截止时间 |
  | resolveDeadline | 解决截止时间 |
  | createTime | 创建时间 |
  | updateTime | 更新时间 |

- **状态显示**：
  - 待处理：红色（#ff5f5f）
  - 处理中：橙色（#ffb020）
  - 已解决：青色（#16ceb9）
  - 已取消：灰色（#9aa3ad）

- **触发源类型**：
  - 0：工位
  - 1：设备
  - 2：报警
  - 3：手动

---

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

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

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

**配置示例（装配工位 ST001）：**

| 规则名称 | 绑定工位 | 呼叫类型 | 通知用户 | 确认时限 | 解决时限 |
|---------|----------|----------|----------|---------|---------|
| ST001-设备故障 | ST001 | EQUIPMENT | 设备维修员 | 5分钟 | 30分钟 |
| ST001-质量问题 | ST001 | QUALITY | 质检员 | 5分钟 | 20分钟 |
| ST001-物料短缺 | ST001 | MATERIAL | 物料配送员 | 3分钟 | 15分钟 |

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

安灯事件可以由前端页面手工新增，也可以由手持PDA通过接口推送，后端统一通过 `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 数据，在大屏展示当前安灯分布和状态；
- 生产监控（AndonDashboard）：前端定时调用 `getDashboardData` 接口，获取设备状态、任务完成、OEE、利用率、品质等实时数据。

---

### 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` 写入相应操作日志。

**规则匹配算法（pickBestRule）**  
规则选择在事件侧与派工侧保持同一算法，防止不同模块命中不同规则：
1. 先按呼叫类型（`callTypeCode`）与有效标记筛出候选规则。  
2. 对每条候选规则计算"匹配分"：产线/工位/班组/触发源类型，每命中一项 +1。  
3. 得分最高的规则被选中；并列时按列表顺序先到先得。  
4. 事件侧用于计算时限/优先级并创建派工；派工侧用于读取 `remark.cancelOthers` 等策略，确保一致性。

#### 1.5.2 安灯派工记录（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}`

**后端 Controller：** `AndonEventAssignmentController`（`/production/andonEventAssignment`）

- `list(AndonEventAssignment andonEventAssignment)`：查询派工列表，调用 `IAndonEventAssignmentService.selectAndonEventAssignmentList`；
- `add(AndonEventAssignment andonEventAssignment)`：新增派工，补全 `createBy`/`createTime` 后调用 `insertAndonEventAssignment`；
- `edit(AndonEventAssignment andonEventAssignment)`：修改派工，补全 `updateBy`/`updateTime` 后调用 `updateAndonEventAssignment`，触发状态联动逻辑；
- `remove(assignmentId)`：删除派工，调用 `deleteAndonEventAssignment`。

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

- `updateAndonEventAssignment`：核心方法，处理派工状态变更
  - 补充接单/完成时间；
  - 联动更新事件状态与里程碑时间；
  - 写入事件日志；
  - 根据策略自动取消其他派工。

#### 1.5.3 安灯生产监控看板（AndonDashboard）调用链

**前端页面与 api：**

- 页面：`views/production/andonDashboard/index.vue`
- api：`api/production/andonDashboard.js`
  - `getDashboardData(productLineCode)` → `GET /production/andonDashboard/all`
  - `getDeviceStatusSummary(productLineCode)` → `GET /production/andonDashboard/device-status`
  - `getTaskCompletionSummary(productLineCode)` → `GET /production/andonDashboard/task-completion`
  - `getOeeSummary(productLineCode)` → `GET /production/andonDashboard/oee`
  - `getUtilizationSummary(productLineCode)` → `GET /production/andonDashboard/utilization`
  - `getQualitySummary(productLineCode)` → `GET /production/andonDashboard/quality`
  - `getAndonEventSummary(productLineCode)` → `GET /production/andonDashboard/andon-events`

**后端 Controller：** `AndonDashboardController`（`/production/andonDashboard`）

- `getDashboardData(String productLineCode)`：获取完整看板数据，调用 `IAndonDashboardService.getDashboardData(productLineCode)`；
- `getDeviceStatusSummary(String productLineCode)`：获取设备状态统计，调用 `IAndonDashboardService.getDeviceStatusSummary(productLineCode)`；
- `getTaskCompletionSummary(String productLineCode)`：获取任务完成统计，调用 `IAndonDashboardService.getTaskCompletionSummary(productLineCode)`；
- `getOeeSummary(String productLineCode)`：获取OEE数据，调用 `IAndonDashboardService.getOeeSummary(productLineCode)`；
- `getUtilizationSummary(String productLineCode)`：获取利用率统计，调用 `IAndonDashboardService.getUtilizationSummary(productLineCode)`；
- `getQualitySummary(String productLineCode)`：获取品质数据，调用 `IAndonDashboardService.getQualitySummary(productLineCode)`；
- `getAndonEventSummary(String productLineCode)`：获取安灯事件统计，调用 `IAndonDashboardService.getAndonEventSummary(productLineCode)`。

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

- `getDashboardData(productLineCode)`：汇总获取各类监控数据
  - `getDeviceStatusSummary(productLineCode)`：设备状态统计
  - `getTaskCompletionSummary(productLineCode)`：任务完成统计
  - `getOeeSummary(productLineCode)`：OEE数据计算
  - `getUtilizationSummary(productLineCode)`：利用率统计
  - `getQualitySummary(productLineCode)`：品质数据统计
  - `getAndonEventSummary(productLineCode)`：安灯事件统计

**品质数据计算逻辑：**

- 从 `report_quality_inspection` 表查询今日质检记录
- 按 `treatmentMeasure` 字段判断良品/不良品：
  - `treatmentMeasure = '3'`：合格（良品）
  - `treatmentMeasure = '1'`：返修（不良品）
- 按产线分组统计良品数和不良品数
- 计算良品率：`yieldRate = goodProducts / (goodProducts + defectProducts) * 100`

#### 1.5.4 安灯看板展示（AndonBoard）调用链

**前端页面与 api：**

- 页面：`views/board/andonBoard/index.vue`
- api：`api/production/andonBoard.js`
  - `viewAndonBoard(boardCode)` → `GET /production/andonBoard/view`

**后端 Controller：** `AndonBoardController`（`/production/andonBoard`）

- `view(String boardCode)`：根据看板编码获取看板数据
  - 参数校验：boardCode 必填
  - 查询配置：调用 `IAndonBoardConfigService.selectAndonBoardConfigList` 查询启用的看板配置，同一编码取最新的一条
  - 过滤事件：根据配置的产线/工位范围调用 `IAndonEventService.selectAndonEventList` 查询安灯事件
  - 统计分组：统计各状态数量，拆分进行中/已关闭事件
  - 排序限制：进行中事件按优先级排序，已关闭事件限制20条
  - 返回数据：组装配置、统计、事件列表、服务器时间

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

- `selectActiveBoardConfig(String boardCode)`：查询指定看板编码下启用的配置记录
  - 按更新时间优先、否则按创建时间，倒序排序，取第一条（最新配置）
  
- `selectEventsByConfig(AndonBoardConfig config)`：根据看板配置的作用域查询事件列表
  - 仅当配置字段非空时才作为过滤条件；为空表示不按该维度过滤
  - 产线范围过滤：`productLineCode`
  - 工位/工序范围过滤：`stationCode`

- `buildStats(List<AndonEvent> events)`：构建看板统计数据
  - 返回字段：pending / processing / resolved / cancelled / active / total

- `filterByStatus(List<AndonEvent> events, boolean active)`：按状态将事件分为"进行中"和"已关闭"两组
  - active=true：待处理/处理中
  - active=false：已解决/已取消（以及其他未知状态）

- `sortActiveEvents(List<AndonEvent> events)`：进行中事件排序
  - 1) 状态（待处理优先于处理中）
  - 2) 优先级（数值越小越紧急；空值排最后）
  - 3) 创建时间（越早越靠前；空值排最后）

- `sortClosedEvents(List<AndonEvent> events)`：已关闭事件排序
  - 1) 解决/结束时间 responseEndTime 倒序（最近关闭的在前；空值排最后）
  - 2) 更新时间 updateTime 倒序（空值排最后）

**前端关键逻辑：** `views/board/andonBoard/index.vue`

- **数据获取**：
  - 从 URL 参数中读取 boardCode（支持 query 和 params）
  - 通过 `viewAndonBoard(boardCode)` 接口获取数据
  - 使用定时器自动刷新数据，刷新间隔从配置读取

- **字段配置解析**：
  - `parseDisplayFields(raw)`：解析展示字段配置
    - 支持字符串、JSON数组、JSON对象三种格式
    - 可区分进行中和已关闭的展示字段
    - 支持设置列宽和对齐方式
    - 解析失败时使用默认字段

- **列配置归一化**：
  - `normalizeColumns(input)`：将不同格式的配置转换为统一的列配置
    - 字符串：转换为 {field, label}
    - 对象：保留 field, label, width, align
    - 数组：递归处理每个元素

- **字段标签映射**：
  - `fieldLabel(field)`：将字段名映射为中文标签
    - 支持常用字段的中文标签映射
    - 未知字段返回原字段名

- **数据格式化**：
  - `formatValue(row, field, rowIndex)`：格式化单元格值
    - 序号字段：返回行号
    - 状态字段：返回状态文本
    - 触发源类型字段：返回类型文本
    - 时间字段：格式化为 yyyy-MM-dd HH:mm:ss
    - 其他字段：转换为字符串

- **状态文本映射**：
  - `statusText(status)`：将状态码转换为中文文本
    - '0'：待处理
    - '1'：处理中
    - '2'：已解决
    - '3'：已取消

- **状态样式映射**：
  - `statusClass(status)`：返回状态对应的CSS类名
    - '0'：pending（红色）
    - '1'：processing（橙色）
    - '2'：resolved（青色）
    - '3'：cancelled（灰色）

- **触发源类型映射**：
  - `sourceTypeText(v)`：将触发源类型码转换为中文文本
    - '0'：工位
    - '1'：设备
    - '2'：报警
    - '3'：手动

- **网格样式计算**：
  - `gridStyle(cols)`：计算网格布局的列模板
    - 根据列配置的 width 属性生成 grid-template-columns
    - 未设置 width 的列使用 1fr

- **单元格样式计算**：
  - `cellStyle(col)`：计算单元格样式
    - 根据 align 属性设置文本对齐方式

- **自动刷新管理**：
  - `resetRefreshTimer()`：重置刷新定时器
    - 根据配置的刷新间隔设置定时器
    - 定时器到期后调用 `fetchBoardData()` 重新获取数据
  - `clearRefreshTimer()`：清除刷新定时器
    - 在组件销毁或重新加载时清除定时器

---

## 二、操作手册（用户使用指南）

### 2.1 安灯设置

#### 2.1.1 功能说明

根据需求自定义安灯呼叫异常类别，支持配置不同呼叫类型在不同产线、工位、班组上的处理策略、时限和通知对象。

#### 2.1.2 操作步骤

1. **进入安灯规则配置页面**
   - 菜单路径：生产管理 → 安灯管理 → 安灯规则配置
   - 页面位置：`views/production/andonRule/index.vue`

2. **新增安灯规则**
   - 点击"新增"按钮
   - 填写规则信息：
     - **规则名称**：输入规则名称，如"装配工位-设备故障"
     - **呼叫类型**：选择呼叫类型（设备故障/质量问题/物料短缺）
     - **产线编码**：选择适用的产线（可选）
     - **工位/工序编码**：选择适用的工位（可选）
     - **班组编码**：选择适用的班组（可选）
     - **触发源类型**：选择触发源类型（可选）
     - **确认时限（分钟）**：输入确认时限，如5
     - **解决时限（分钟）**：输入解决时限，如30
     - **默认优先级**：选择默认优先级（1-5，1最高）
     - **通知用户**：选择通知的用户（支持多选）
     - **通知角色**：选择通知的角色（可选，作为兜底）
     - **是否有效**：选择是否启用该规则
     - **备注**：输入备注信息
   - 点击"确定"保存

3. **修改安灯规则**
   - 在列表中选中要修改的规则
   - 点击"修改"按钮
   - 修改规则信息
   - 点击"确定"保存

4. **删除安灯规则**
   - 在列表中选中要删除的规则（支持多选）
   - 点击"删除"按钮
   - 确认删除

5. **查询安灯规则**
   - 在搜索框中输入查询条件（规则名称、呼叫类型、产线、工位等）
   - 点击"搜索"按钮
   - 点击"重置"按钮清空查询条件

#### 2.1.3 注意事项

- 一个工位可以配置多条规则，每条规则对应不同的呼叫类型
- 呼叫类型必须选择，其他条件（产线、工位、班组、触发源）为可选
- 确认时限和解决时限建议根据实际情况合理设置
- 通知用户和通知角色至少配置一个
- 规则必须设置为"有效"状态才会生效

---

### 2.2 汇报设置

#### 2.2.1 功能说明

根据不同的安灯异常类别，设置不同的汇报层级。通过配置安灯规则的优先级、通知对象和时限，实现分级汇报机制。

#### 2.2.2 配置说明

**优先级设置：**
- 优先级范围：1-5（1最高，5最低）
- 高优先级事件会优先处理和展示
- 不同呼叫类型可以设置不同的默认优先级

**汇报层级实现：**

1. **按优先级汇报**
   - 高优先级事件（1-2）：立即通知，短时限
   - 中优先级事件（3）：正常通知，标准时限
   - 低优先级事件（4-5）：延迟通知，长时限

2. **按通知对象汇报**
   - 通知用户：直接通知具体责任人
   - 通知角色：通知角色下的所有用户
   - 支持同时配置用户和角色

3. **按时限汇报**
   - 确认时限：事件需要在多长时间内被确认
   - 解决时限：事件需要在多长时间内被解决
   - 超时事件会在看板中高亮显示

**配置示例（不同汇报层级）：**

| 呼叫类型 | 优先级 | 确认时限 | 解决时限 | 通知对象 | 汇报层级 |
|---------|-------|---------|---------|---------|---------|
| 设备故障（关键设备） | 1 | 3分钟 | 15分钟 | 设备主管、维修组长 | 一级汇报 |
| 设备故障（普通设备） | 3 | 5分钟 | 30分钟 | 设备维修员 | 二级汇报 |
| 质量问题（严重） | 1 | 5分钟 | 20分钟 | 质量主管、质检组长 | 一级汇报 |
| 质量问题（一般） | 3 | 5分钟 | 30分钟 | 质检员 | 二级汇报 |
| 物料短缺 | 2 | 3分钟 | 15分钟 | 物料主管、配送组长 | 一级汇报 |

#### 2.2.3 操作步骤

汇报设置通过"安灯规则配置"页面实现，操作步骤同2.1.2节。

---

### 2.3 生产进度

#### 2.3.1 功能说明

机器状态监控、机台任务完成情况、OEE 数据、利用率、品质等基本信息汇总与展示，帮助管理人员实时掌握生产进度和效率。

#### 2.3.2 数据展示

**1. 设备状态监控**
- 设备总数
- 运行中设备数
- 停机设备数
- 故障设备数
- 维护设备数
- 设备状态分布图

**2. 机台任务完成情况**
- 计划任务总数
- 已完成任务数
- 任务完成率
- 任务进度条

**3. OEE 数据**
- 可用率（Availability）：设备实际运行时间 / 计划运行时间
- 表现率（Performance）：实际产量 / 理论产量
- 质量指数（Quality Index）：良品数 / 总产量
- 综合效率（OEE）：可用率 × 表现率 × 质量指数

**4. 利用率**
- 设备利用率：设备运行时间 / 可用时间
- 产线利用率：产线运行时间 / 可用时间

**5. 品质数据**
- 今日总产量
- 良品数
- 不良品数
- 良品率（%）

**6. 安灯事件统计**
- 今日事件总数
- 待处理事件数
- 处理中事件数
- 已解决事件数
- 已取消事件数

#### 2.3.3 操作步骤

1. **进入安灯生产监控看板**
   - 菜单路径：生产管理 → 安灯管理 → 安灯生产监控
   - 页面位置：`views/production/andonDashboard/index.vue`

2. **查看生产进度数据**
   - 页面自动刷新（默认刷新间隔）
   - 查看设备状态、任务完成、OEE、利用率、品质等数据
   - 数据按产线分组展示

3. **按产线筛选**
   - 在产线下拉框中选择要查看的产线
   - 页面自动刷新该产线的生产数据

4. **查看详细数据**
   - 点击各模块的"查看详情"按钮
   - 查看该模块的详细数据列表

#### 2.3.4 注意事项

- 看板数据实时更新，建议保持页面打开以获取最新数据
- OEE数据需要设备台账、设备参数、生产计划等基础数据支持
- 品质数据来源于质检记录，需要及时录入质检信息
- 可以通过"安灯看板配置"页面调整看板的刷新间隔和展示字段

---

### 2.4 效率监控

#### 2.4.1 功能说明

机器状态监控、OEE 数据、利用率、品质等基本信息汇总与展示，帮助管理人员分析生产效率，发现瓶颈和改进机会。

#### 2.4.2 关键指标说明

**1. 设备状态监控**
- **运行中**：设备正在生产
- **停机**：设备正常停机（如换班、休息）
- **故障**：设备发生故障
- **维护**：设备进行计划维护

**2. OEE（设备综合效率）**

OEE是衡量生产效率的核心指标，由三个部分组成：

- **可用率（Availability）**
  - 公式：可用率 = 实际运行时间 / 计划运行时间 × 100%
  - 说明：衡量设备是否按计划运行
  - 目标值：≥ 90%

- **表现率（Performance）**
  - 公式：表现率 = 实际产量 / 理论产量 × 100%
  - 说明：衡量设备运行速度是否达标
  - 目标值：≥ 95%

- **质量指数（Quality Index）**
  - 公式：质量指数 = 良品数 / 总产量 × 100%
  - 说明：衡量产品质量水平
  - 目标值：≥ 98%

- **综合效率（OEE）**
  - 公式：OEE = 可用率 × 表现率 × 质量指数
  - 说明：综合衡量设备整体效率
  - 世界级标准：≥ 85%

**3. 利用率**

- **设备利用率**
  - 公式：设备利用率 = 设备运行时间 / 可用时间 × 100%
  - 说明：衡量设备时间利用程度

- **产线利用率**
  - 公式：产线利用率 = 产线运行时间 / 可用时间 × 100%
  - 说明：衡量产线时间利用程度

**4. 品质指标**

- **良品率**
  - 公式：良品率 = 良品数 / (良品数 + 不良品数) × 100%
  - 说明：衡量产品合格率
  - 目标值：≥ 98%

#### 2.4.3 操作步骤

效率监控通过"安灯生产监控看板"页面实现，操作步骤同2.3.3节。

#### 2.4.4 效率分析建议

**1. OEE分析**
- OEE < 60%：效率低下，需要全面改进
- OEE 60-75%：效率一般，有较大提升空间
- OEE 75-85%：效率良好，持续优化
- OEE ≥ 85%：世界级水平，保持优势

**2. 可用率低**
- 检查设备故障率，加强预防性维护
- 优化换班、休息等计划停机时间
- 减少非计划停机

**3. 表现率低**
- 检查设备运行速度是否达标
- 优化工艺参数，提高生产节拍
- 减少设备空转、等待时间

**4. 质量指数低**
- 分析不良品原因，改进工艺
- 加强过程质量控制
- 提高员工操作技能

**5. 利用率低**
- 优化生产计划，减少设备闲置
- 提高设备开机率
- 合理安排生产任务

---

### 2.5 安灯事件管理

#### 2.5.1 功能说明

管理安灯事件的全生命周期，包括事件创建、确认、开始处理、完成、取消等操作。

#### 2.5.2 操作步骤

1. **进入安灯事件管理页面**
   - 菜单路径：生产管理 → 安灯管理 → 安灯事件管理
   - 页面位置：`views/production/andonEvent/index.vue`

2. **新增安灯事件**
   - 点击"新增"按钮
   - 填写事件信息：
     - **呼叫单号**：系统自动生成
     - **呼叫类型**：选择呼叫类型
     - **触发源类型**：选择触发源类型
     - **产线编码**：选择产线
     - **工位/工序编码**：选择工位
     - **班组编码**：选择班组
     - **工单号**：输入工单号
     - **物料编码**：选择物料
     - **设备编码**：选择设备
     - **优先级**：选择优先级
     - **呼叫描述**：输入描述
   - 点击"确定"保存

3. **确认事件**
   - 在列表中选中要确认的事件
   - 点击"确认"按钮
   - 系统自动记录确认人和确认时间

4. **开始处理**
   - 在列表中选中要处理的事件
   - 点击"开始处理"按钮
   - 系统自动记录开始处理时间

5. **完成事件**
   - 在列表中选中要完成的事件
   - 点击"完成"按钮
   - 输入解决措施
   - 点击"确定"
   - 系统自动记录完成时间和解决措施

6. **取消事件**
   - 在列表中选中要取消的事件
   - 点击"取消"按钮
   - 输入取消原因
   - 点击"确定"
   - 系统自动取消事件及相关派工

7. **查询事件**
   - 在搜索框中输入查询条件
   - 点击"搜索"按钮
   - 点击"重置"按钮清空查询条件

#### 2.5.3 注意事项

- 事件创建后系统会自动匹配规则并创建派工
- 事件状态会随操作自动更新
- 取消事件会级联取消相关派工
- 所有操作都会记录在事件日志中

---

### 2.6 安灯派工管理

#### 2.6.1 功能说明

管理安灯派工记录，查看派工状态，接单、完成派工任务。

#### 2.6.2 操作步骤

1. **进入安灯派工管理页面**
   - 菜单路径：生产管理 → 安灯管理 → 安灯派工管理
   - 页面位置：`views/production/andonEventAssignment/index.vue`

2. **查看派工列表**
   - 默认显示当前用户的派工记录（"只看我的"开关默认开启）
   - 可以关闭"只看我的"查看所有派工
   - 待接单的记录会高亮显示（红色背景）
   - 处理中的记录会显示蓝色背景

3. **接单**
   - 在列表中选中要接单的派工
   - 点击"修改状态"按钮
   - 将状态改为"已接单"
   - 点击"确定"
   - 系统自动记录接单时间

4. **完成派工**
   - 在列表中选中要完成的派工
   - 点击"修改状态"按钮
   - 将状态改为"已完成"
   - 点击"确定"
   - 系统自动记录完成时间

5. **查询派工**
   - 在搜索框中输入查询条件
   - 点击"搜索"按钮
   - 点击"重置"按钮清空查询条件

#### 2.6.3 注意事项

- 派工记录由系统自动创建，不允许手动新增
- 派工状态变更会联动更新事件状态
- 完成派工后，根据规则配置可能自动取消同一事件的其他派工
- 所有操作都会记录在事件日志中

---

### 2.7 安灯事件日志

#### 2.7.1 功能说明

查询安灯事件的操作日志，追溯事件处理过程，用于审计和问题分析。

#### 2.7.2 操作步骤

1. **进入安灯事件日志页面**
   - 菜单路径：生产管理 → 安灯管理 → 安灯事件日志
   - 页面位置：`views/production/andonEventLog/index.vue`

2. **查询日志**
   - 在搜索框中输入查询条件：
     - **操作类型**：选择操作类型（创建、派工、确认、接单、解决、取消等）
   - 点击"搜索"按钮
   - 点击"重置"按钮清空查询条件

3. **查看日志详情**
   - 日志列表显示所有操作记录
   - 每条记录包含：事件ID、操作类型、操作内容、操作人、操作时间

#### 2.7.3 注意事项

- 事件日志由系统自动记录，不允许手动修改
- 日志按时间倒序排列，最新操作显示在最前面
- 可以通过事件ID关联查看完整的事件处理过程

---

### 2.8 安灯看板配置

#### 2.8.1 功能说明

配置安灯看板的展示内容，包括绑定工位、展示字段、刷新间隔等。

#### 2.8.2 操作步骤

1. **进入安灯看板配置页面**
   - 菜单路径：生产管理 → 安灯管理 → 安灯看板配置
   - 页面位置：`views/production/andonBoardConfig/index.vue`

2. **新增看板配置**
   - 点击"新增"按钮
   - 填写配置信息：
     - **看板编码**：输入看板编码，如"BOARD001"
     - **看板名称**：输入看板名称，如"装配工位安灯看板"
     - **绑定工位**：选择绑定的工位（必填）
     - **展示字段配置**：输入展示字段配置（JSON格式）
     - **刷新间隔**：输入刷新间隔（秒）
     - **是否有效**：选择是否启用该看板
     - **备注**：输入备注信息
   - 点击"确定"保存

3. **修改看板配置**
   - 在列表中选中要修改的配置
   - 点击"修改"按钮
   - 修改配置信息
   - 点击"确定"保存

4. **删除看板配置**
   - 在列表中选中要删除的配置（支持多选）
   - 点击"删除"按钮
   - 确认删除

5. **查看配置说明**
   - 在新增/修改对话框中，点击"操作说明"按钮
   - 查看展示字段配置的详细说明和示例

#### 2.8.3 展示字段配置说明

**配置格式：**

1. **逗号分隔字符串**（简单配置）
   ```
   callCode,stationCode,eventStatus,priority,createTime
   ```

2. **JSON数组**（可设置列宽、对齐）
   ```json
   [
     "callCode",
     "stationCode",
     { "field": "eventStatus", "label": "状态", "align": "center" }
   ]
   ```

3. **JSON对象**（区分进行中/已关闭）
   ```json
   {
     "activeFields": [
       "callCode",
       "stationCode",
       { "field": "eventStatus", "label": "状态", "align": "center" },
       "priority",
       "createTime"
     ],
     "closedFields": [
       "callCode",
       "stationCode",
       "eventStatus",
       { "field": "responseEndTime", "label": "完成时间" },
       { "field": "resolution", "label": "解决措施" }
     ]
   }
   ```

**可用字段列表：**

| 字段名 | 说明 |
|--------|------|
| index | 序号（前端行号） |
| eventId | 事件ID |
| callCode | 呼叫单号 |
| callTypeCode | 呼叫类型 |
| sourceType | 触发源类型 |
| sourceRefId | 触发源编码 |
| productLineCode | 产线编码 |
| stationCode | 工位/工序编码 |
| teamCode | 班组编码 |
| orderCode | 工单号 |
| materialCode | 物料编码 |
| deviceCode | 设备编码 |
| priority | 优先级 |
| eventStatus | 状态 |
| description | 呼叫描述 |
| ackBy | 确认人 |
| ackTime | 确认时间 |
| responseStartTime | 开始处理时间 |
| responseEndTime | 完成时间 |
| resolution | 解决措施 |
| cancelReason | 取消原因 |
| escalateLevel | 升级级别 |
| escalateTime | 升级时间 |
| ackDeadline | 确认截止时间 |
| resolveDeadline | 解决截止时间 |
| createTime | 创建时间 |
| updateTime | 更新时间 |

#### 2.8.4 注意事项

- 看板必须绑定工位才能正常显示数据
- 展示字段配置为空或格式错误时会使用默认列
- 刷新间隔建议设置为30-60秒，避免频繁刷新
- 看板配置必须设置为"有效"状态才会生效

---

### 2.9 安灯看板展示

#### 2.9.1 功能说明

安灯看板展示是用于车间现场大屏展示的安灯事件实时监控页面，通过看板配置自动过滤和展示安灯事件，支持动态配置展示字段和刷新间隔。

#### 2.9.2 页面特点

- **深色主题设计**：适合大屏展示，减少视觉疲劳
- **自动刷新**：根据配置的刷新间隔自动更新数据
- **双面板布局**：左侧展示进行中事件，右侧展示已关闭事件
- **实时统计**：顶部统计卡片展示待处理、处理中、已解决、已取消、总数
- **免登录访问**：支持免登录访问，方便大屏展示和外部系统集成

#### 2.9.3 操作步骤

1. **进入安灯看板展示页面**
   - 访问路径：`/andonBoard?boardCode=BOARD001`
   - 页面位置：`views/board/andonBoard/index.vue`
   - 必须在URL中传入 `boardCode` 参数

2. **查看看板数据**
   - 页面顶部显示看板标题、boardCode、刷新间隔、最近更新时间
   - 统计卡片展示各状态事件数量
   - 左侧面板展示待处理/处理中事件
   - 右侧面板展示已解决/已取消事件

3. **理解事件状态颜色**
   - 待处理：红色（#ff5f5f）
   - 处理中：橙色（#ffb020）
   - 已解决：青色（#16ceb9）
   - 已取消：灰色（#9aa3ad）

4. **查看事件详情**
   - 查看各列展示的事件信息
   - 时间字段格式化为：yyyy-MM-dd HH:mm:ss
   - 状态字段显示中文文本和颜色标识

5. **切换看板**
   - 修改URL中的 `boardCode` 参数
   - 页面自动加载新看板的配置和数据

#### 2.9.4 数据刷新

- **自动刷新**：页面根据配置的刷新间隔自动刷新数据
- **刷新间隔**：从看板配置中读取，默认10秒
- **最近更新时间**：页面顶部显示最近一次数据更新时间
- **手动刷新**：刷新浏览器页面可手动刷新数据

#### 2.9.5 事件排序规则

**进行中事件排序：**
1. 状态优先：待处理优先于处理中
2. 优先级：数值越小越紧急（1最高，5最低）
3. 创建时间：越早越靠前

**已关闭事件排序：**
1. 完成时间：最近关闭的在前
2. 更新时间：最近更新的在前
3. 最多显示20条历史记录

#### 2.9.6 注意事项

- 必须在URL中传入有效的 `boardCode` 参数
- 看板配置必须存在且设置为"有效"状态
- 看板配置必须绑定工位才能显示数据
- 展示字段配置为空或格式错误时会使用默认列
- 刷新间隔建议设置为30-60秒，避免频繁刷新
- 页面支持免登录访问，适合大屏展示

#### 2.9.7 常见问题

**Q: 看板显示"缺少 boardCode"？**
A: 请在URL中传入 `boardCode` 参数，例如：`/andonBoard?boardCode=BOARD001`

**Q: 看板显示"看板配置不存在或未启用"？**
A: 请检查看板配置是否存在且设置为"有效"状态

**Q: 看板显示"暂无数据"？**
A: 请检查看板配置是否绑定了工位，以及该工位是否有安灯事件

**Q: 看板显示的列不是我想要的？**
A: 请在"安灯看板配置"页面修改展示字段配置

**Q: 看板刷新太慢或太快？**
A: 请在"安灯看板配置"页面调整刷新间隔

---

## 三、附录

### 3.1 字典表

#### 3.1.1 呼叫类型字典（andon_call_type）

| 字典值 | 字典标签 |
|---------|-----------|
| EQUIPMENT | 设备故障 |
| QUALITY | 质量问题 |
| MATERIAL | 物料短缺 |

#### 3.1.2 事件状态字典（andon_event_status）

| 字典值 | 字典标签 |
|---------|-----------|
| PENDING | 待处理 |
| PROCESSING | 处理中 |
| RESOLVED | 已解决 |
| CANCELLED | 已取消 |

#### 3.1.3 派工状态字典（andon_status）

| 字典值 | 字典标签 |
|---------|-----------|
| ASSIGNED | 已派工 |
| ACCEPTED | 已接单 |
| DONE | 已完成 |
| CANCELLED | 已取消 |
| REJECTED | 已拒绝 |

#### 3.1.4 操作类型字典（andon_operation）

| 操作值 | 操作标签 | 说明 |
|--------|-----------|------|
| CREATE | 创建 | 事件创建 |
| ASSIGN | 派工 | 自动派工 |
| ACK | 确认 | 事件确认 |
| ACCEPT | 接单 | 派工被接受 |
| RESOLVE | 解决 | 事件/派工完成 |
| CANCEL | 取消 | 事件取消 |
| CANCEL_ASSIGNMENT | 取消派工 | 派工被取消 |
| CANCEL_OTHERS | 取消其他派工 | 策略取消其他派工 |
| REJECT | 拒绝 | 派工被拒绝 |
| EDIT | 编辑 | 事件编辑 |

### 3.2 数据库表结构

#### 3.2.1 安灯规则表（andon_rule）

| 字段名 | 类型 | 说明 |
|--------|------|------|
| rule_id | NUMBER | 规则主键 |
| rule_name | VARCHAR2 | 规则名称 |
| call_type_code | VARCHAR2 | 呼叫类型编码 |
| product_line_code | VARCHAR2 | 产线编码 |
| station_code | VARCHAR2 | 工位/工序编码 |
| team_code | VARCHAR2 | 班组编码 |
| source_type | VARCHAR2 | 触发源类型 |
| ack_timeout_min | NUMBER | 确认时限（分钟） |
| resolve_timeout_min | NUMBER | 解决时限（分钟） |
| priority_default | NUMBER | 默认优先级 |
| notify_roles | VARCHAR2 | 通知角色 |
| notify_users | VARCHAR2 | 通知用户 |
| escalate_levels | VARCHAR2 | 升级级别 |
| effective_begin_time | DATE | 生效开始时间 |
| effective_end_time | DATE | 生效结束时间 |
| is_flag | VARCHAR2 | 是否有效 |
| remark | VARCHAR2 | 备注 |
| create_by | VARCHAR2 | 创建人 |
| create_time | DATE | 创建时间 |
| update_by | VARCHAR2 | 更新人 |
| update_time | DATE | 更新时间 |

#### 3.2.2 安灯事件表（andon_event）

| 字段名 | 类型 | 说明 |
|--------|------|------|
| event_id | NUMBER | 事件主键 |
| call_code | VARCHAR2 | 呼叫单号 |
| call_type_code | VARCHAR2 | 呼叫类型编码 |
| source_type | VARCHAR2 | 触发源类型 |
| source_ref_id | VARCHAR2 | 触发源引用ID |
| product_line_code | VARCHAR2 | 产线编码 |
| station_code | VARCHAR2 | 工位/工序编码 |
| team_code | VARCHAR2 | 班组编码 |
| order_code | VARCHAR2 | 工单号 |
| material_code | VARCHAR2 | 物料编码 |
| device_id | NUMBER | 设备ID |
| device_code | VARCHAR2 | 设备编码 |
| priority | NUMBER | 优先级 |
| event_status | VARCHAR2 | 事件状态 |
| description | VARCHAR2 | 呼叫描述 |
| ack_by | VARCHAR2 | 确认人 |
| ack_time | DATE | 确认时间 |
| response_start_time | DATE | 开始处理时间 |
| response_end_time | DATE | 处理完成时间 |
| resolution | VARCHAR2 | 解决措施 |
| cancel_reason | VARCHAR2 | 取消原因 |
| escalate_level | NUMBER | 升级级别 |
| escalate_time | DATE | 升级时间 |
| ack_deadline | DATE | 确认截止时间 |
| resolve_deadline | DATE | 解决截止时间 |
| is_flag | VARCHAR2 | 是否有效 |
| remark | VARCHAR2 | 备注 |
| create_by | VARCHAR2 | 创建人 |
| create_time | DATE | 创建时间 |
| update_by | VARCHAR2 | 更新人 |
| update_time | DATE | 更新时间 |

#### 3.2.3 安灯派工记录表（andon_event_assignment）

| 字段名 | 类型 | 说明 |
|--------|------|------|
| assignment_id | NUMBER | 派工记录主键 |
| event_id | NUMBER | 所属安灯事件 |
| assignee_user_id | NUMBER | 被分配用户ID |
| assignee_user_name | VARCHAR2 | 被分配用户姓名 |
| assignee_role_key | VARCHAR2 | 被分配角色编码 |
| assignee_team_code | VARCHAR2 | 被分配班组编码 |
| assigned_time | DATE | 派工时间 |
| accept_time | DATE | 接单时间 |
| finish_time | DATE | 完成时间 |
| status | VARCHAR2 | 派工状态 |
| is_flag | VARCHAR2 | 是否有效 |
| remark | VARCHAR2 | 备注 |
| create_by | VARCHAR2 | 创建人 |
| create_time | DATE | 创建时间 |
| update_by | VARCHAR2 | 更新人 |
| update_time | DATE | 更新时间 |

#### 3.2.4 安灯事件日志表（andon_event_log）

| 字段名 | 类型 | 说明 |
|--------|------|------|
| log_id | NUMBER | 日志主键 |
| event_id | NUMBER | 关联事件 |
| operation | VARCHAR2 | 操作类型 |
| content | VARCHAR2 | 操作内容 |
| operator_user_id | NUMBER | 操作人ID |
| operator_user_name | VARCHAR2 | 操作人姓名 |
| operation_time | DATE | 操作时间 |
| remark | VARCHAR2 | 备注 |
| create_by | VARCHAR2 | 创建人 |
| create_time | DATE | 创建时间 |
| update_by | VARCHAR2 | 更新人 |
| update_time | DATE | 更新时间 |

#### 3.2.5 安灯看板配置表（andon_board_config）

| 字段名 | 类型 | 说明 |
|--------|------|------|
| board_id | NUMBER | 看板主键 |
| board_code | VARCHAR2 | 看板编码 |
| board_name | VARCHAR2 | 看板名称 |
| product_line_code | VARCHAR2 | 产线编码 |
| station_code | VARCHAR2 | 工位/工序编码 |
| display_fields | VARCHAR2 | 展示字段配置 |
| refresh_interval_sec | NUMBER | 刷新间隔（秒） |
| is_flag | VARCHAR2 | 是否有效 |
| remark | VARCHAR2 | 备注 |
| create_by | VARCHAR2 | 创建人 |
| create_time | DATE | 创建时间 |
| update_by | VARCHAR2 | 更新人 |
| update_time | DATE | 更新时间 |

### 3.3 版本历史

| 版本号 | 日期 | 说明 |
|--------|------|------|
| v1.0 | 2025-12-29 | 初始版本，支持手持PDA安灯呼叫 |
| v2.0 | 2025-12-31 | 重构文档，增加生产进度和效率监控模块 |
