# 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连接超时**: 调整数据库连接池配置