202504-Wms-MengYang/202504-Wms-MengYang-tp/wms_serve_mengyang/CLAUDE.md

317 lines
9.5 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# CLAUDE.md
This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
## 项目概述
这是宝应梦阳托盘库WMS系统的Spring Boot后端服务专门处理托盘式仓库的入库、出库、库存管理和WCS系统集成。基于Spring Boot 3.3.5和Java 21开发采用MyBatis-Plus进行数据持久化支持与WCS设备系统的深度集成。
## 项目特点
**TP托盘库版本特性**
- 专为托盘存储优化的算法策略
- 支持大型货物的托盘化存储管理
- 与BOX料箱库版本在业务逻辑上有所差异
- 数据库schema针对托盘库场景设计
## 开发环境设置
### 基本构建命令
```bash
# 进入项目目录
cd 202504-Wms-MengYang-tp/wms_serve_mengyang
# 编译项目
mvn clean compile
# 打包项目
mvn clean package
# 运行项目
mvn spring-boot:run
# 使用Maven Wrapper
./mvnw spring-boot:run
# 跳过测试运行(项目配置默认跳过测试)
mvn clean package -Dmaven.test.skip=true
```
### 运行环境配置
**数据库配置**
- 本地开发MySQL `localhost:3306/wms_mengyang_tp`注意使用tp数据库
- 生产环境MySQL `10.18.58.21:3306/wms_yachi_nantong`
- 认证信息本地使用root/root生产使用user/user
**应用配置**
- 服务端口12315
- 应用名称wms_main
- 文件上传限制单文件100MB总计1000MB
- 当前配置:`spring.profiles.active=online`
**Maven特殊配置**
- 项目默认跳过单元测试:`maven-surefire-plugin.skip=true`
- 最终构建文件名:`wms-box-server`注意名称还是box-server但实际是tp版本
- Java版本21 (source和target都是21)
## 核心架构
### 分层架构
系统采用标准的MVC三层架构
- **Controller层**REST API接口包含mywms和wms两个模块
- **Service层**业务逻辑层分为controller、business、api三个子模块
- **DAO层**数据访问层使用MyBatis-Plus
### 核心业务模块
#### 1. MyWMS核心控制器服务 (`MyWmsControllerServiceImpl`)
**文件**: `src/main/java/com/wms_main/service/controller/serviceImpl/MyWmsControllerServiceImpl.java`
**核心功能**:
- **入库管理**: `createOrderIn()` - 处理入库订单检查AGV锁定状态
- **出库管理**: `createOrderOut()` - 处理出库订单,执行深度策略分析
- **库存查询**: `queryStock()` - 按载具号/库位号查询库存
- **入库口状态**: `queryAllowFeed()` - 查询WCS和AGV状态
- **出库口状态**: `queryCanOut()` - 查询WCS和AGV状态
**关键特征**:
- 防重复推送检查机制
- AGV互锁机制防冲突
- 深度策略自动分析
- 完整异常处理流程
#### 2. WCS API集成服务 (`WcsApiServiceImpl`)
**文件**: `src/main/java/com/wms_main/service/api/serviceImpl/WcsApiServiceImpl.java`
**集成接口**:
- 堆垛机任务下发: `sendStackerTask()`
- 载具释放控制: `releaseVehicle()`
- 拣选任务管理: `sendPickingTask()`
- 状态查询: `queryCanFeed()`, `queryOutFeed()`
⚠️ **重要**: 当前WCS通信为调试模式实际HTTP调用被注释返回模拟数据
#### 3. 任务控制服务 (`TaskControllerServiceImpl`)
**文件**: `src/main/java/com/wms_main/service/controller/serviceImpl/TaskControllerServiceImpl.java`
**主要功能**:
- 入库任务请求: `taskRequire()`
- 库位分配: `choiceLocation()`
- 任务回馈: `taskFeedback()`
- AGV锁定管理: `lockAgv()`, `releaseAgv()`
#### 4. 深度策略服务 (`IDepthStrategyService`)
**文件**: `src/main/java/com/wms_main/service/business/IDepthStrategyService.java`
**策略类型** (WmsDepthStrategyEnums):
- `DIRECT_OUT`: 直接出库 (深度1)
- `SINGLE_TRANSFER`: 单层移库 (深度2)
- `DOUBLE_TRANSFER`: 双层移库 (深度3)
- `COMPLEX_TRANSFER`: 复杂移库
- `NO_ACTION`: 无需处理
#### 5. AGV锁定服务 (`IAgvLockService`)
**文件**: `src/main/java/com/wms_main/service/business/IAgvLockService.java`
**功能**:
- 单一入库口互锁
- 超时锁定自动清理
- 状态查询监控
- 批量释放支持
### 数据库设计
#### 核心数据表
- **t_app_order_in**: 入库订单表
- **t_app_order_out**: 出库订单表
- **t_app_stock**: 库存信息表
- **t_app_task**: WMS任务表
- **t_app_wcs_task**: WCS任务表
- **t_app_agv_lock**: AGV锁定表
- **t_app_location**: 库位信息表
- **t_app_config**: 系统配置表
#### MyBatis-Plus配置
- 自动分页插件 (最大1000条)
- 驼峰命名自动映射
- 主键自动生成策略
### API接口设计
#### MyWMS外部接口
**控制器**: `src/main/java/com/wms_main/controller/mywms/MyWmsController.java`
```http
POST /mywms/orderIn # 创建入库订单
POST /mywms/orderOut # 创建出库订单
POST /mywms/stock # 查询库存信息
GET /mywms/allowFeed # 查询投料状态
GET /mywms/allowOut # 查询投料状态
```
**测试文件**: `api-tests/MyWmsController.http`
#### 响应格式
```json
{
"success": true,
"message": "操作成功",
"data": {},
"timestamp": "2024-01-01T12:00:00"
}
```
### 重要枚举类 (`constant/enums/`)
**WMS业务枚举** (`enums/wms/`)
- `AppConfigKeyEnums` - 系统配置项枚举
- `WmsDepthStrategyEnums` - 深度策略枚举
- `WmsStockStatusEnums` - 库存状态枚举
- `OrderStatusEnum` - 订单状态枚举
- `WmsTaskTypeEnums` - 任务类型枚举
- `WmsLocationTypeEnums` - 货位类型枚举
- `WmsVehicleStatusEnums` - 载具状态枚举
**WCS集成枚举** (`enums/wcs/`)
- `WcsApiResponseCodeEnums` - WCS API响应码
- `WcsStackerTaskTypeEnums` - 堆垛机任务类型
- `WcsStackerTaskStatusEnums` - 堆垛机任务状态
## 技术栈
### 核心依赖
- **Spring Boot Web 3.3.5** - REST API框架
- **Spring Boot Quartz** - 定时任务调度
- **MyBatis-Plus 3.5.7** - ORM框架
- **MySQL Connector** - 数据库连接
- **Lombok** - 代码简化
### 工具库
- **Hutool 5.8.33** - Java工具类库
- **FastJSON 2.0.21** - JSON处理
- **EasyExcel 4.0.3 & EasyPOI 4.5.0** - Excel处理
- **Apache HttpClient 4.5.13** - HTTP客户端
- **Google Guava 33.3.1** - 集合工具
## 重要的文件路径
- **主要工作目录**`202504-Wms-MengYang-tp/wms_serve_mengyang/`
- **日志存储**`wms_log/` (按日期和级别分类)
- **数据库脚本**`db/wms_mengyang_tp.sql`
- **MyBatis映射**`src/main/resources/mapper/`
## 常见开发任务
### 启动应用
```bash
cd 202504-Wms-MengYang-tp/wms_serve_mengyang
mvn spring-boot:run
```
### 查看日志
```bash
# 查看今天的info日志
tail -f wms_log/info/$(date +%Y-%m-%d)/$(date +%Y-%m-%d).0.log
# 查看今天的error日志
tail -f wms_log/error/$(date +%Y-%m-%d)/$(date +%Y-%m-%d).0.log
```
### 数据库操作
- 使用MyBatis-Plus进行ORM操作
- 支持批量操作和事务处理
- 驼峰命名自动映射(`map-underscore-to-camel-case: true`)
- ID生成策略`assign_id`
## 系统集成要点
### WCS系统集成托盘库专用
- TCP和HTTP双协议支持
- **托盘堆垛机**任务调度和状态同步
- **托盘载具**管理和追踪
### 任务调度系统
- 基于Quartz的定时任务框架
- 关键执行器针对托盘库场景优化
- 任务状态实时监控
### Excel处理
- 后端EasyExcel 4.0.3 + EasyPOI 4.5.0
- 支持托盘库相关的业务数据导入导出
- 模板位置:`excel/easypoi/excelTemplate/`
## TP与BOX版本的差异
### 主要区别
1. **数据库schema**:使用`wms_mengyang_tp`数据库
2. **存储策略算法**:针对托盘存储特点优化
3. **设备集成**:对接托盘库专用设备
4. **业务规则**:托盘的尺寸、重量、堆叠规则不同
### 开发注意事项
- 在开发新功能时注意区分TP和BOX版本的业务差异
- 深度策略算法需要考虑托盘的物理特性
- WCS集成需要适配托盘库的设备类型
## 故障排除
### 常见问题
1. **端口冲突**确认12315端口未被占用
2. **数据库连接**检查MySQL服务状态和TP数据库配置
3. **版本混淆**确认操作的是TP版本而非BOX版本
4. **日志分析**:按级别查看对应日志目录
### 调试技巧
- 使用`RequestLogFilter`查看API请求日志
- 通过`WmsControllerExceptionHandler`统一异常处理
- 检查定时任务执行状态:查看`TAppJobs`表
- 注意区分TP和BOX版本的业务逻辑差异
## 开发规范
### 代码约定
- Controller层只处理HTTP请求业务逻辑在Service层
- 使用DTO传输数据内部业务使用BO对象
- 统一通过MyBatis-Plus的BaseMapper操作数据库
- 所有业务异常继承RuntimeException并返回统一错误格式
### WCS集成规范
- WCS调用通过IWcsApiService统一管理
- AGV操作必须使用锁定机制防冲突
- 任务下发前检查设备状态和库位可用性
- 调试时注意区分模拟数据和真实WCS调用
### 异常处理
- 使用@ControllerAdvice全局异常处理
- 业务异常返回统一MyWmsResponse格式
- 记录详细错误日志便于问题定位
### 日志规范
- 使用Slf4j进行日志记录
- 关键业务操作记录INFO级别日志
- 异常情况记录ERROR级别日志
- 避免敏感信息出现在日志中
## 调试和监控
### 本地调试
- 默认端口: 12315
- H2控制台: 如果启用可通过/h2-console访问
- 日志级别: 通过logback-spring.xml配置
### 数据库连接测试
```bash
# 测试数据库连接
mysql -h localhost -P 3306 -u root -p wms_mengyang_tp
# 查看关键表结构
DESCRIBE t_app_stock;
DESCRIBE t_app_order_in;
```
### 常见问题
1. **WCS连接失败**: 检查WCS系统URL配置和网络连通性
2. **AGV锁定超时**: 检查t_app_agv_lock表的锁定记录
3. **深度策略错误**: 检查库存状态和深度计算逻辑
4. **MySQL连接超时**: 调整数据库连接池配置