9.5 KiB
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针对托盘库场景设计
开发环境设置
基本构建命令
# 进入项目目录
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
POST /mywms/orderIn # 创建入库订单
POST /mywms/orderOut # 创建出库订单
POST /mywms/stock # 查询库存信息
GET /mywms/allowFeed # 查询投料状态
GET /mywms/allowOut # 查询投料状态
测试文件: api-tests/MyWmsController.http
响应格式
{
"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/
常见开发任务
启动应用
cd 202504-Wms-MengYang-tp/wms_serve_mengyang
mvn spring-boot:run
查看日志
# 查看今天的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版本的差异
主要区别
- 数据库schema:使用
wms_mengyang_tp数据库 - 存储策略算法:针对托盘存储特点优化
- 设备集成:对接托盘库专用设备
- 业务规则:托盘的尺寸、重量、堆叠规则不同
开发注意事项
- 在开发新功能时,注意区分TP和BOX版本的业务差异
- 深度策略算法需要考虑托盘的物理特性
- WCS集成需要适配托盘库的设备类型
故障排除
常见问题
- 端口冲突:确认12315端口未被占用
- 数据库连接:检查MySQL服务状态和TP数据库配置
- 版本混淆:确认操作的是TP版本而非BOX版本
- 日志分析:按级别查看对应日志目录
调试技巧
- 使用
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配置
数据库连接测试
# 测试数据库连接
mysql -h localhost -P 3306 -u root -p wms_mengyang_tp
# 查看关键表结构
DESCRIBE t_app_stock;
DESCRIBE t_app_order_in;
常见问题
- WCS连接失败: 检查WCS系统URL配置和网络连通性
- AGV锁定超时: 检查t_app_agv_lock表的锁定记录
- 深度策略错误: 检查库存状态和深度计算逻辑
- MySQL连接超时: 调整数据库连接池配置