编辑 | blame | 历史 | 原始文档

CLAUDE.md

本文件为 Claude Code (claude.ai/code) 在此代码库中工作时提供指导。

项目概述

这是一个 WCS(仓库控制系统) - 鄯美新能源仓库控制系统,包含:

  • WIDESEAWCS_Client - Vue 3 前端应用(Element Plus UI)
  • WIDESEAWCS_Server - ASP.NET Core 6.0 后端 API 服务器

系统管理自动化仓库作业,包括堆垛机、输送线、穿梭车和机械手的物料搬运任务(组盘、换盘、拆盘)。


常用命令

前端 (WIDESEAWCS_Client)

# 安装依赖(在 Client 目录中)
cd WIDESEAWCS_Client
npm install

# 开发服务器
npm run serve

# 生产构建
npm run build

# 代码检查
npm run lint

Node.js 18+ 注意事项:如果 npm run serve 因 OpenSSL 错误失败,package.json 脚本已包含 SET NODE_OPTIONS=--openssl-legacy-provider 解决方案。

后端 (WIDESEAWCS_Server)

# 构建整个解决方案
cd WIDESEAWCS_Server
dotnet build WIDESEAWCS_Server.sln

# 运行服务器
dotnet run --project WIDESEAWCS_Server

# 运行测试
dotnet test WIDESEAWCS_Tests

服务器端口:API 运行在 http://*:9292(可在 appsettings.json 中配置)


架构

前端架构 (Vue 3)

技术栈
- Vue 3 + Vite
- Element Plus UI 框架
- Vue Router(hash 模式)
- Vuex 状态管理
- Axios HTTP 请求
- SignalR 实时通信(可选)

关键目录
- src/views/ - 页面组件(Home、Login、system、basicinfo、taskinfo、charts)
- src/components/basic/ - 可复用组件,包括 ViewGrid(数据表格组件)
- src/api/ - HTTP 客户端(http.js),带令牌管理和拦截器
- src/router/ - 路由定义,带身份验证守卫
- src/store/ - Vuex 存储,用于用户信息和权限
- src/uitils/ - 工具函数

HTTP 客户端 (src/api/http.js):
- 基础 URL 默认值:开发环境(http://127.0.0.1:9292/)、生产环境(http://115.159.85.185:9292/
- 自动包含 Authorization: Bearer {token} 请求头
- 收到 wideseawcs_exp 响应头时自动刷新令牌
- 401 自动重定向到登录页
- 导出方法:post()get()download()ajax()

全局属性(在 main.js 中挂载):
- this.$http - HTTP 客户端
- this.base - 通用工具
- this.permission - 权限检查
- this.$global - 全局配置(SignalR 启用标志、表格标签显示)

后端架构 (ASP.NET Core)

技术栈
- ASP.NET Core 6.0 Web API
- Autofac DI,使用 IDependency 标记接口实现自动注册
- Quartz.NET 定时任务(设备通信循环)
- SqlSugar ORM 数据库访问
- Redis(通过 WIDESEAWCS_RedisService 实现 L1+L2 混合缓存)
- TCP Socket 服务器(端口 2000)用于实时设备通信
- HslCommunication 库用于 PLC/硬件通信

项目结构
WIDESEAWCS_Server/ # 主 API 服务器 WIDESEAWCS_Core/ # 核心基础设施:基类、DI、扩展、中间件 WIDESEAWCS_Model/ # 数据模型和 DTO WIDESEAWCS_Communicator/ # 硬件通信驱动(西门子、欧姆龙、Modbus 等) WIDESEAWCS_QuartzJob/ # 任务调度基础设施和设备抽象 WIDESEAWCS_Tasks/ # Quartz 任务实现(设备通信循环) WIDESEAWCS_RedisService/ # Redis 服务:缓存、锁、计数器、发布订阅 WIDESEAWCS_*Repository/ # 数据访问层实现 WIDESEAWCS_*Service/ # 业务服务层 WIDESEAWCS_Tests/ # 单元测试

依赖注入模式
- 实现 IDependency 标记接口的服务由 Autofac 自动注册
- 位于 AutofacModuleRegister 中扫描所有程序集
- 添加前使用 services.Remove() 覆盖现有注册

缓存层 (ICacheService):
- L1(内存)+ L2(Redis)混合缓存
- 实现:MemoryCacheServiceRedisCacheServiceHybridCacheService
- 常用方法:AddGet<T>RemoveRemoveByPrefixGetOrAdd<T>

设备通信
- 任务继承 JobBase 并实现 IJob
- 设备类型:IStackerCrane(堆垛机)、IConveyorLine(输送线)、IShuttleCar(穿梭车)、IRobot(机械手)
- 通信器:SiemensS7CommunicatorOmronEtherNetCommunicatorModbusTcpCommunicatorSerialPortCommunicator
- TCP Socket 服务器(端口 2000)由 SocketServerHostedService 管理


关键集成点

系统集成 URL (BaseAPI 常量)

  • WMS:http://localhost:9291/api/
  • WCS(本服务器):http://localhost:9292/api/
  • MES:http://localhost:9293/api/
  • ERP:http://localhost:9294/api/

机械手通信系统

机械手控制的模块化架构:
- RobotClientManager - TCP 客户端连接管理
- RobotStateManager - 线程安全的机械手状态缓存
- RobotMessageHandler - TCP 消息解析
- RobotTaskProcessor - 任务执行和状态转换
- 任务类型:GroupPallet (500) 组盘、ChangePallet (510) 换盘、SplitPallet (520) 拆盘

配置 (appsettings.json)

关键设置:
- "urls": "http://*:9292" - 服务器端口
- "QuartzJobAutoStart": true - 自动启动定时任务
- "SocketServer:Enabled": true - 启用 TCP 服务器
- "RedisConfig:Enabled": true - 启用 Redis 缓存
- "DBType": "SqlServer" - 数据库类型


开发指南

添加新功能

后端
1. 在 WIDESEAWCS_IService/ 中创建服务接口
2. 在 WIDESEAWCS_Service/ 中创建服务实现,实现 IDependency
3. 在 WIDESEAWCS_Tasks/ 中创建任务,继承 JobBaseIJob
4. 在 WIDESEAWCS_QuartzJob/Device/ 中添加设备类型

前端
1. 在 src/views/ 中添加视图
2. 在 src/router/index.js 中添加路由
3. 使用 $http.post()$http.get() 进行 API 调用
4. 使用 ViewGrid 组件显示数据表格

代码风格

  • C#:类型/方法/属性使用 PascalCase,局部变量/参数使用 camelCase。4 空格缩进,大括号换行。
  • JavaScript/Vue:遵循现有模式,新组件使用 Vue 3 Composition API
  • 注释:为新增/修改的代码添加详细的中文注释(方法目的、参数、返回值、逐行说明、异常处理)

重要说明

  • 后端使用 CamelCase JSON 序列化
  • 所有服务通过 Autofac 默认使用 scoped 生命周期
  • Redis 连接在首次访问时延迟初始化
  • 在任务中使用 ConsoleHelper.WriteSuccessLine() / WriteErrorLine() 进行控制台输出
  • TCP Socket 服务器独立于 HTTP API 运行