# CNC机床数据采集分析系统 - OpenCode Agent Instructions

## Project Overview

CNC机床多品牌统一化分布式数据采集分析系统，实现设备状态监控、零件产量自动统计、加工过程分析、人员与设备绑定管理，及BI大屏实时展示。

## Tech Stack

- **Backend**: .NET Framework 4.0 WebForm (IIS部署)
- **Frontend Admin**: Vue.js 管理后台
- **Frontend Dashboard**: Vue.js BI大屏
- **Database**: MariaDB 10.6+ (本地部署，双库分离)
- **Deployment**: Windows Server + IIS

## Project Structure (Planned)

```
src/
├── backend/                    # .NET Framework 4.0 WebForm 后端
│   ├── Api/                    # API接口层
│   ├── Core/                   # 核心业务逻辑
│   ├── Data/                   # 数据访问层
│   └── Models/                 # 数据模型
├── frontend/
│   ├── admin/                  # Vue.js 管理后台
│   └── dashboard/              # Vue.js BI大屏
├── database/
│   ├── cnc_business.sql        # 业务库建表脚本
│   └── cnc_log.sql             # 日志库建表脚本
└── docs/                       # 文档
```

## Key Commands

### Backend Development
```bash
# 构建后端项目
cd src/backend && msbuild /p:Configuration=Release

# 运行后端 (IIS部署，无dotnet run)
```

### Frontend Development
```bash
# 管理后台 (默认端口8080，代理到后端)
cd src/frontend/admin && npm install && npm run serve

# BI大屏 (默认端口8081，代理到后端)
cd src/frontend/dashboard && npm install && npm run serve

# 前端构建
npm run build
```

### Testing
```bash
# 运行所有测试
./test.sh
```

## Critical Constraints

### Database Architecture
- **业务库 (cnc_business)**: 设备、员工、模板、产量、配置、告警
- **日志库 (cnc_log)**: 原始采集JSON、系统日志、异常日志
- 两个数据库在同一MariaDB实例，严格分离

### CNC Data Format (发那科标准)
- 接口返回JSON数组，每台设备包含 `device`、`desc`、`tags` 数组
- 每个tag: `id`、`desc`、`quality`、`value`、`time`
- 关键字段通过 `id` 匹配：
  - `_io_status` → 设备状态
  - `Tag5` → NC程序名
  - `Tag8` → 当前加工累计数量
  - `Tag9` → 运行状态
  - `Tag11` → 操作模式
  - `Tag14` → 主轴倍率
  - `Tag17`-`Tag21` → 速度/负载
  - `Tag22`-`Tag25` → 时间统计
  - `Tag26` → 加工状态
- 数值自动去除 `.00000` 尾缀，转换为数值/字符串
- 示例数据见 `发那科系统采集示例.txt`

### 产量统计核心逻辑 (差分计算)
- CNC接口仅返回实时累计值，无历史数据
- 同一程序连续加工：产量 = MAX(0, 当前累计数 - 上次累计数)
- 程序切换(A→B)：A产量锁定，B以当前累计数为新起点
- 切回历史程序(B→A)：视为A重新开始，增量累加到当日产量
- 跨天处理：0点自动重置，新日期以首次采集累计值为起点
- 异常值保护：跳变、负数、突变过大时忽略并告警

### 采集机制
- 设备必须Ping通 + 状态可用 才执行采集
- 采集失败重试3次，间隔30秒
- 连续5次失败记录异常日志，不改变在线状态
- 网络恢复后自动恢复采集
- 在线/离线仅由Ping判断，与HTTP采集成功与否无关

### API Design
- 统一响应格式：`{ success, data, message, timestamp }`
- API版本化前缀：`/api/v1/`
- 模板和统计数据使用内存缓存，写操作需清除缓存

## Module References

### 1. CNC品牌模板配置
- 多品牌统一接入（发那科、三菱、西门子、新代、广数等）
- JSON字段映射模板，将原始字段映射为系统标准字段
- 可视化配置tags数组路径、id匹配规则
- 模板增删改查、启用/禁用，修改实时生效无需重编译

### 2. 分布式设备采集
- 每台CNC独立配置：IP、HTTP采集地址、采集间隔、绑定模板、可用状态
- 定时轮询采集，原始JSON存日志库，解析后存业务库

### 3. 零件产量统计
- 以NC程序名(Tag5.value)作为零件唯一识别
- 按自然日00:00-23:59统计，支持跨天加班归属配置
- 差分统计逻辑（见上方核心逻辑）

### 4. 统计规则动态配置
- 自定义统计指标、计算公式、分组维度（设备/员工/日期/NC程序）
- 配置实时生效

### 5. 设备状态监控
- 在线/离线(Ping)、可用/不可用(人工)、运行状态(_io_status/Tag9/Tag11/Tag26)

### 6. 后台管理系统
- 设备管理、模板管理、员工与设备分配、统计规则配置、系统全局配置、数据查询导出、告警管理

### 7. BI数据大屏
- 实时可视化，支持折线图/柱状图/饼图/设备状态卡片
- 刷新频率可配置，支持全屏和按车间/班组筛选

## Performance Requirements
- 单服务器支持 ≥ 100台CNC同时采集
- 采集响应延迟 < 3秒
- API响应 < 500ms
- 7×24小时稳定运行

## Code Style
- 遵循各子项目现有代码规范
- 后端C#遵循.NET Framework 4.0 WebForm模式
- 前端Vue.js遵循组件化开发规范
- 所有配置页面化，无需改代码即可调整
- 日志清晰，便于排查
