# CLAUDE.md
This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
## 项目概述
**WIDESEA** 是一个工业仓储自动化系统,包含两个核心子系统:
- **WCS**(仓库控制系统):直接控制堆垛机、输送线、机器人、穿梭车等物理设备,与 PLC 通信
- **WMS**(仓库管理系统):管理库存、入库、出库任务、盘点等业务逻辑
两个系统通过 HTTP API 交互,WMS 依赖 WCS 完成设备调度。
## 构建命令
```bash
# WCS 后端(端口 9292)
dotnet build WCS/WIDESEAWCS_Server/WIDESEAWCS_Server.sln
dotnet run --project WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/WIDESEAWCS_Server.csproj
# WMS 后端(端口 9291)
dotnet build WMS/WIDESEA_WMSServer/WIDESEA_WMSServer.sln
dotnet run --project WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/WIDESEA_WMSServer.csproj
# WCS 前端
cd WCS/WIDESEAWCS_Client && npm run serve
# WMS 前端
cd WMS/WIDESEA_WMSClient && npm run serve
# S7 模拟器
cd 测试工具/WIDESEAWCS_S7Simulator/WIDESEAWCS_S7Simulator.Web && npm run dev
```
## 架构概览
```
┌─────────────────────────────────────────────────────────────┐
│ WCS (端口 9292) │
│ ┌─────────────┐ ┌──────────────┐ ┌────────────────────┐ │
│ │ Quartz │ │ Communicator │ │ Redis L1+L2 │ │
│ │ Jobs │→ │ (PLC协议) │ │ Cache │ │
│ └─────────────┘ └──────────────┘ └────────────────────┘ │
│ ↓ │
│ ┌─────────────────────────────────────────────────────┐ │
│ │ TcpSocketServer (端口 2000) / WebSocket (端口 9296) │ │
│ └─────────────────────────────────────────────────────┘ │
└─────────────────────────────────────────────────────────────┘
↑ HTTP API
↓
┌─────────────────────────────────────────────────────────────┐
│ WMS (端口 9291) │
│ ┌─────────────┐ ┌──────────────┐ ┌────────────────────┐ │
│ │ Tasks │ │ Stock │ │ Inbound/ │ │
│ │ Service │ │ Service │ │ Outbound │ │
│ └─────────────┘ └──────────────┘ └────────────────────┘ │
└─────────────────────────────────────────────────────────────┘
```
## WCS 项目结构
| 项目 | 用途 |
|------|------|
| `WIDESEAWCS_Server` | 主 API 入口(端口 9292) |
| `WIDESEAWCS_Core` | 框架(数据库、缓存、DI、日志) |
| `WIDESEAWCS_Common` | 常量、枚举、Redis 键 |
| `WIDESEAWCS_Model` | 实体模型 |
| `WIDESEAWCS_DTO` | 数据传输对象 |
| `WIDESEAWCS_Communicator` | 工业协议(Modbus、S7、Omron 等) |
| `WIDESEAWCS_Tasks` | 后台设备控制作业 |
| `WIDESEAWCS_QuartzJob` | Quartz.NET 调度 |
**详细 WCS 规范**:见 `WCS/WIDESEAWCS_Server/CLAUDE.md`
## WMS 项目结构
| 项目 | 用途 |
|------|------|
| `WIDESEA_WMSServer` | 主 API 入口(端口 9291) |
| `WIDESEA_Core` | 框架工具 |
| `WIDESEA_Common` | 常量、枚举 |
| `WIDESEA_Model` | 实体模型 |
| `WIDESEA_*Service` | 业务逻辑服务 |
## 关键设计
- **ORM**:SqlSugar(支持多数据库)
- **依赖注入**:Autofac,通过 `AutofacModuleRegister` 注册
- **缓存**:Redis L1(内存)+ L2(Redis)混合缓存
- **调度**:Quartz.NET
- **实时通信**:SignalR WebSocket
- **设备协议**:存储在数据库 `Dt_DeviceProtocol` 表,非配置文件
## 技术栈
- **后端**:.NET 6/8,ASP.NET Core,C# 12
- **前端**:Vue 3,Element Plus,Vite,Pinia
- **数据库**:SQL Server
- **缓存**:Redis
## 注释与文档 (强制)
- **XML 文档注释**: 所有 `public` 类、接口、方法、属性**必须**包含 XML 文档注释 (`/// ...`),解释其用途、参数和返回值。
- **行内注释**: 对于复杂的业务逻辑、算法实现或非直观的代码块,**必须**添加 `//` 行内注释解释“为什么这么做”。
- **TODO 标记**: 如果代码未完成或有临时方案,必须使用 `// TODO: 说明` 标记。
## 通用规范
- **异步编程**: 所有 I/O 操作必须使用 `async/await`。库代码请使用 `ConfigureAwait(false)`。
- **命名**:
- 接口以 "I" 开头 (例如: `IUserService`)。
- 类名、方法名使用 **PascalCase**。
- 私有字段、局部变量使用 **camelCase**。
- **命名空间**: 使用 **文件作用域命名空间** (`namespace MyApp.Api;`)。
- 当需要对两个或以上的数据库执行修改/添加操作并保证事务一致性时,请使用工作单元管理器(`IUnitOfWorkManage`)的事务方法:
- **同步场景**:调用 `BeginTran(Func func)`,传入同步委托。
- **异步场景**:调用 `BeginTranAsync(Func> funcAsync)`,传入异步委托。
**注意**:`IUnitOfWorkManage` 需通过依赖注入(DI)获取。该方法会自动管理事务的提交与回滚,只需确保所有数据库操作在传入的委托内完成。
## 🚫 严禁事项
- **严禁** 生成没有注释的代码 (尤其是公共方法)。
- **严禁** 使用 `Task.Result` 或 `Task.Wait()`。
- **严禁** 在异步上下文中使用 `.ToList()` (必须用 `.ToListAsync()`)。
- **严禁** 直接暴露实体 (Entity),必须使用 DTO。
- **严禁** 捕获 `Exception` 而不记录日志。