diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..52d77d5
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,5 @@
+.idea/
+**/.idea/
+*.iml
+.vscode/
+wms_log/
\ No newline at end of file
diff --git a/.idea/.gitignore b/.idea/.gitignore
deleted file mode 100644
index a0ccf77..0000000
--- a/.idea/.gitignore
+++ /dev/null
@@ -1,5 +0,0 @@
-# Default ignored files
-/shelf/
-/workspace.xml
-# Environment-dependent path to Maven home directory
-/mavenHomeManager.xml
diff --git a/.idea/202504-Wms-MengYang.iml b/.idea/202504-Wms-MengYang.iml
deleted file mode 100644
index d6ebd48..0000000
--- a/.idea/202504-Wms-MengYang.iml
+++ /dev/null
@@ -1,9 +0,0 @@
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/misc.xml b/.idea/misc.xml
deleted file mode 100644
index 639900d..0000000
--- a/.idea/misc.xml
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/modules.xml b/.idea/modules.xml
deleted file mode 100644
index f180dc5..0000000
--- a/.idea/modules.xml
+++ /dev/null
@@ -1,8 +0,0 @@
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/vcs.xml b/.idea/vcs.xml
deleted file mode 100644
index 0e6ac68..0000000
--- a/.idea/vcs.xml
+++ /dev/null
@@ -1,8 +0,0 @@
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/202504-Wms-MengYang-box/.idea/.gitignore b/202504-Wms-MengYang-box/.idea/.gitignore
deleted file mode 100644
index a0ccf77..0000000
--- a/202504-Wms-MengYang-box/.idea/.gitignore
+++ /dev/null
@@ -1,5 +0,0 @@
-# Default ignored files
-/shelf/
-/workspace.xml
-# Environment-dependent path to Maven home directory
-/mavenHomeManager.xml
diff --git a/202504-Wms-MengYang-box/.idea/202504-Wms-MengYang-box.iml b/202504-Wms-MengYang-box/.idea/202504-Wms-MengYang-box.iml
deleted file mode 100644
index d6ebd48..0000000
--- a/202504-Wms-MengYang-box/.idea/202504-Wms-MengYang-box.iml
+++ /dev/null
@@ -1,9 +0,0 @@
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/202504-Wms-MengYang-box/.idea/misc.xml b/202504-Wms-MengYang-box/.idea/misc.xml
deleted file mode 100644
index 639900d..0000000
--- a/202504-Wms-MengYang-box/.idea/misc.xml
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
-
-
-
-
\ No newline at end of file
diff --git a/202504-Wms-MengYang-box/.idea/modules.xml b/202504-Wms-MengYang-box/.idea/modules.xml
deleted file mode 100644
index d290ac9..0000000
--- a/202504-Wms-MengYang-box/.idea/modules.xml
+++ /dev/null
@@ -1,8 +0,0 @@
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/202504-Wms-MengYang-box/.idea/vcs.xml b/202504-Wms-MengYang-box/.idea/vcs.xml
deleted file mode 100644
index 288b36b..0000000
--- a/202504-Wms-MengYang-box/.idea/vcs.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/202504-Wms-MengYang-box/wms_serve_mengyang/.idea/.gitignore b/202504-Wms-MengYang-box/wms_serve_mengyang/.idea/.gitignore
deleted file mode 100644
index 35410ca..0000000
--- a/202504-Wms-MengYang-box/wms_serve_mengyang/.idea/.gitignore
+++ /dev/null
@@ -1,8 +0,0 @@
-# 默认忽略的文件
-/shelf/
-/workspace.xml
-# 基于编辑器的 HTTP 客户端请求
-/httpRequests/
-# Datasource local storage ignored files
-/dataSources/
-/dataSources.local.xml
diff --git a/202504-Wms-MengYang-box/wms_serve_mengyang/.idea/CommonStatePersistent.xml b/202504-Wms-MengYang-box/wms_serve_mengyang/.idea/CommonStatePersistent.xml
deleted file mode 100644
index cce905e..0000000
--- a/202504-Wms-MengYang-box/wms_serve_mengyang/.idea/CommonStatePersistent.xml
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
-
-
-
-
\ No newline at end of file
diff --git a/202504-Wms-MengYang-box/wms_serve_mengyang/.idea/CoolRequestCommonStatePersistent.xml b/202504-Wms-MengYang-box/wms_serve_mengyang/.idea/CoolRequestCommonStatePersistent.xml
deleted file mode 100644
index b081340..0000000
--- a/202504-Wms-MengYang-box/wms_serve_mengyang/.idea/CoolRequestCommonStatePersistent.xml
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
-
-
-
-
\ No newline at end of file
diff --git a/202504-Wms-MengYang-box/wms_serve_mengyang/.idea/CoolRequestSetting.xml b/202504-Wms-MengYang-box/wms_serve_mengyang/.idea/CoolRequestSetting.xml
deleted file mode 100644
index fc5a9d5..0000000
--- a/202504-Wms-MengYang-box/wms_serve_mengyang/.idea/CoolRequestSetting.xml
+++ /dev/null
@@ -1,40 +0,0 @@
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/202504-Wms-MengYang-box/wms_serve_mengyang/.idea/compiler.xml b/202504-Wms-MengYang-box/wms_serve_mengyang/.idea/compiler.xml
deleted file mode 100644
index 269757b..0000000
--- a/202504-Wms-MengYang-box/wms_serve_mengyang/.idea/compiler.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/202504-Wms-MengYang-box/wms_serve_mengyang/.idea/encodings.xml b/202504-Wms-MengYang-box/wms_serve_mengyang/.idea/encodings.xml
deleted file mode 100644
index eebab54..0000000
--- a/202504-Wms-MengYang-box/wms_serve_mengyang/.idea/encodings.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/202504-Wms-MengYang-box/wms_serve_mengyang/.idea/jarRepositories.xml b/202504-Wms-MengYang-box/wms_serve_mengyang/.idea/jarRepositories.xml
deleted file mode 100644
index c7ea920..0000000
--- a/202504-Wms-MengYang-box/wms_serve_mengyang/.idea/jarRepositories.xml
+++ /dev/null
@@ -1,25 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/202504-Wms-MengYang-box/wms_serve_mengyang/.idea/misc.xml b/202504-Wms-MengYang-box/wms_serve_mengyang/.idea/misc.xml
deleted file mode 100644
index 9dc782b..0000000
--- a/202504-Wms-MengYang-box/wms_serve_mengyang/.idea/misc.xml
+++ /dev/null
@@ -1,12 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/202504-Wms-MengYang-box/wms_serve_mengyang/.idea/vcs.xml b/202504-Wms-MengYang-box/wms_serve_mengyang/.idea/vcs.xml
deleted file mode 100644
index 62bd7a0..0000000
--- a/202504-Wms-MengYang-box/wms_serve_mengyang/.idea/vcs.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/202504-Wms-MengYang-box/wms_serve_mengyang/CLAUDE.md b/202504-Wms-MengYang-box/wms_serve_mengyang/CLAUDE.md
index 9221728..5f05f3c 100644
--- a/202504-Wms-MengYang-box/wms_serve_mengyang/CLAUDE.md
+++ b/202504-Wms-MengYang-box/wms_serve_mengyang/CLAUDE.md
@@ -4,12 +4,29 @@ This file provides guidance to Claude Code (claude.ai/code) when working with co
## 项目概述
-这是一个宝应梦阳WMS(仓库管理系统)后端项目,基于Spring Boot 3.3.5和Java 21开发,使用Maven构建。系统管理仓库的入库、出库、库存和任务调度等核心业务。
+这是一个宝应梦阳WMS(仓库管理系统)项目,包含前后端分离的完整解决方案:
+- **后端项目**:基于Spring Boot 3.3.5和Java 21开发,使用Maven构建
+- **前端项目**:基于Vue 3和Element Plus开发,提供Web管理界面
+- **业务场景**:支持托盘库(TP)和料箱库(BOX)两种存储类型,管理仓库的入库、出库、库存和任务调度等核心业务
+
+## 项目结构
+
+本项目包含两个子项目,位于不同目录:
+- `202504-Wms-MengYang-box/` - 料箱库(BOX)版本
+- `202504-Wms-MengYang-tp/` - 托盘库(TP)版本
+
+每个子项目都包含:
+- `wms_serve_mengyang/` - Spring Boot后端服务
+- `wms_web_mengyang/` - Vue.js前端应用
+- `db/` - 数据库SQL文件
## 开发环境设置
-### 构建和运行命令
+### 后端项目命令(Maven)
```bash
+# 进入后端目录(以BOX版本为例)
+cd 202504-Wms-MengYang-box/wms_serve_mengyang
+
# 编译项目
mvn clean compile
@@ -19,28 +36,66 @@ mvn clean package
# 运行项目
mvn spring-boot:run
-# 跳过测试运行(默认配置)
+# 跳过测试运行(项目配置默认跳过测试)
mvn clean package -Dmaven.test.skip=true
```
-### 数据库配置
+### 前端项目命令(Vue.js)
+```bash
+# 进入前端目录(以BOX版本为例)
+cd 202504-Wms-MengYang-box/wms_web_mengyang
+
+# 安装依赖
+npm install
+
+# 启动开发服务器
+npm run serve
+
+# 构建生产版本
+npm run build
+
+# 代码检查和修复
+npm run lint
+```
+
+### 运行环境配置
+
+**数据库配置**
- 本地开发:MySQL `localhost:3306/wms_mengyang_box`
- 生产环境:MySQL `10.18.58.21:3306/wms_yachi_nantong`
-- 用户名/密码:本地使用root/root,生产使用user/user
+- 认证信息:本地使用root/root,生产使用user/user
-### 应用配置
+**后端服务 (Spring Boot)**
- 服务端口:12315
- 应用名称:wms_main
- 文件上传限制:单文件100MB,总计1000MB
+- 当前配置:`spring.profiles.active=online`
+
+**前端应用 (Vue.js)**
+- 开发端口:12306
+- 后端API地址:`http://10.18.58.21:12315`
+- 路由模式:Hash路由
## 核心架构
### 分层架构
+
+**后端架构(Spring Boot)**
系统采用标准的MVC三层架构:
- **Controller层**:REST API接口,包含mywms和wms两个模块
- **Service层**:业务逻辑层,分为controller、business、api三个子模块
- **DAO层**:数据访问层,使用MyBatis-Plus
+**前端架构(Vue.js)**
+采用现代化的Vue 3组件化架构:
+- **Views层**:页面视图组件(login、HomeView、SystemCenter)
+- **Layout层**:业务布局组件(库存、入库、出库等功能页面)
+- **Components层**:可复用组件(sideMenu、appTag)
+- **API层**:HTTP请求封装和接口定义
+- **Store层**:Vuex状态管理(用户信息、菜单权限、标签页)
+- **Router层**:Vue Router路由管理
+- **Utils层**:工具函数(日期处理、格式化、加密等)
+
### 核心业务模块
#### 1. MyWMS模块 (`controller/mywms/`)
@@ -72,35 +127,79 @@ mvn clean package -Dmaven.test.skip=true
- `vo/` - 视图对象(View Object)
### 常用枚举类 (`constant/enums/`)
+
+**WMS业务枚举** (`enums/wms/`)
- `StorageTypeEnums` - 存储类型(托盘库TP/料箱库BOX)
- `WmsDepthStrategyEnums` - 深度策略枚举
- `WmsTaskTypeEnums` - 任务类型枚举
- `OrderStatusEnum` - 订单状态枚举
+- `WmsLocationTypeEnums` - 货位类型枚举
+- `WmsGoodsStatusEnums` - 货物状态枚举
+- `WmsVehicleStatusEnums` - 载具状态枚举
+
+**WCS集成枚举** (`enums/wcs/`)
+- `WcsApiResponseCodeEnums` - WCS API响应码
+- `WcsStackerTaskTypeEnums` - 堆垛机任务类型
+- `WcsStackerTaskStatusEnums` - 堆垛机任务状态
+
+**任务调度枚举** (`enums/jobs/`)
+- `JobStatusEnums` - 任务状态枚举
+- `JobTimerTypeEnums` - 定时器类型枚举
## 技术栈
-### 核心依赖
+### 后端技术栈(Spring Boot)
+
+**核心依赖**
- 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 - 集合工具
+### 前端技术栈(Vue.js)
+
+**核心框架**
+- Vue 3.2.13 - 前端框架
+- Vue Router 4.0.3 - 路由管理
+- Vuex 4.0.0 - 状态管理
+- Element Plus 2.4.0 - UI组件库
+
+**主要依赖**
+- Axios 1.3.3 - HTTP请求库
+- Moment 2.29.4 - 日期处理
+- XLSX 0.18.5 - Excel文件处理
+- QRCode.vue 3.4.1 - 二维码生成
+- Vue3-print-nb 0.1.4 - 打印功能
+- File-saver 2.0.5 - 文件下载
+
+**开发工具**
+- Sass 1.83.4 - CSS预处理器
+- ESLint - 代码质量检查
+- Babel - JavaScript编译器
+
## 开发注意事项
-### 代码规范
+### 后端代码规范
- 使用Lombok注解减少样板代码
- 统一的API响应格式(WmsApiResponse)
- 枚举类管理常量值
- 接口-实现分离的服务层设计
+### 前端代码规范
+- Vue 3 Composition API优先
+- Element Plus组件库统一UI风格
+- Vuex模块化状态管理
+- ESLint代码质量检查(关闭未使用变量警告)
+- 响应式设计,支持不同屏幕尺寸
+
### 数据库操作
- 使用MyBatis-Plus进行ORM操作
- 支持批量操作和事务处理
@@ -113,11 +212,15 @@ mvn clean package -Dmaven.test.skip=true
- 请求日志过滤器:`RequestLogFilter`
### Excel处理
-系统支持完整的Excel导入导出功能:
+**后端**:使用EasyExcel和EasyPOI双重支持
- 货物信息、产品信息、库存信息等业务数据
-- 使用EasyExcel和EasyPOI双重支持
- 模板位置:`excel/easypoi/excelTemplate/`
+**前端**:使用XLSX和Element Plus支持
+- 文件上传组件:`excel/` 目录下的各类Excel上传组件
+- 支持在线预览和数据导出
+- 集成二维码生成和打印功能
+
## 外部系统集成
### WCS系统集成
@@ -131,8 +234,91 @@ mvn clean package -Dmaven.test.skip=true
## 测试说明
+**后端测试**
项目配置中跳过了单元测试执行(`maven-surefire-plugin.skip=true`),在开发新功能时建议:
1. 先实现功能代码
2. 使用Postman等工具进行API测试
3. 检查数据库数据状态
-4. 验证定时任务执行情况
\ No newline at end of file
+4. 验证定时任务执行情况
+
+**前端测试**
+- 使用浏览器开发者工具调试
+- 通过Vue DevTools检查组件状态
+- 使用Element Plus组件库确保UI一致性
+- 在不同浏览器(Chrome、Firefox、Edge)中测试兼容性
+
+## 开发注意事项
+
+### 特殊的Maven配置
+- 项目默认跳过单元测试:`maven-surefire-plugin.skip=true`
+- 最终构建文件名:`wms-box-server`
+- Java版本:21 (source和target都是21)
+- Maven Wrapper可用:使用`./mvnw`替代`mvn`命令
+
+### 重要的文件路径
+- 主要工作目录:`202504-Wms-MengYang-box/wms_serve_mengyang/`
+- 日志存储:`wms_log/` (按日期和级别分类)
+- 数据库脚本:`db/wms_mengyang_box.sql`
+- MyBatis映射:`src/main/resources/mapper/`
+
+### 常见开发任务
+
+**启动后端服务**
+```bash
+cd 202504-Wms-MengYang-box/wms_serve_mengyang
+mvn spring-boot:run
+# 或使用Maven Wrapper
+./mvnw spring-boot:run
+```
+
+**启动前端开发服务器**
+```bash
+cd 202504-Wms-MengYang-box/wms_web_mengyang
+npm run serve
+```
+
+**查看日志**
+```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的定时任务框架
+- 关键执行器:`WmsTaskExecutor`、`MyOutExecutor`、`WcsStackerTaskSender`
+- 任务状态实时监控
+
+**Excel处理**
+- 后端:EasyExcel 4.0.3 + EasyPOI 4.5.0
+- 前端:XLSX 0.18.5 + Element Plus上传组件
+- 模板位置:`excel/easypoi/excelTemplate/`
+
+## 故障排除
+
+### 常见问题
+1. **端口冲突**:确认12315端口未被占用
+2. **数据库连接**:检查MySQL服务状态和配置
+3. **前端代理**:确认后端API地址配置正确
+4. **日志分析**:按级别查看对应日志目录
+
+### 调试技巧
+- 使用`RequestLogFilter`查看API请求日志
+- 通过`WmsControllerExceptionHandler`统一异常处理
+- 检查定时任务执行状态:查看`TAppJobs`表
+- Vue DevTools调试前端状态管理
\ No newline at end of file
diff --git a/202504-Wms-MengYang-box/wms_serve_mengyang/README.md b/202504-Wms-MengYang-box/wms_serve_mengyang/README.md
index aa7a8fb..4871cdb 100644
--- a/202504-Wms-MengYang-box/wms_serve_mengyang/README.md
+++ b/202504-Wms-MengYang-box/wms_serve_mengyang/README.md
@@ -1,3 +1,3 @@
# wms_serve_mengyang
-宝应梦阳料箱库WMS后端
\ No newline at end of file
+宝应梦阳托盘库WMS后端
\ No newline at end of file
diff --git a/202504-Wms-MengYang-box/wms_serve_mengyang/api-tests/MyWmsController.http b/202504-Wms-MengYang-box/wms_serve_mengyang/api-tests/MyWmsController.http
new file mode 100644
index 0000000..1522ad3
--- /dev/null
+++ b/202504-Wms-MengYang-box/wms_serve_mengyang/api-tests/MyWmsController.http
@@ -0,0 +1,69 @@
+### MyWMS接口测试
+### 基础配置
+@baseUrl = http://localhost:12315
+
+### 1. 入库订单接口
+POST {{baseUrl}}/mywms/orderIn
+Content-Type: application/json
+
+{
+ "taskId": "testOrderId6",
+ "vehicleNo": "1006"
+}
+
+### 2. 出库订单接口
+POST {{baseUrl}}/mywms/orderOut
+Content-Type: application/json
+
+{
+ "taskId": "testOrderId1",
+ "vehicleNo": "1004"
+}
+
+### 3. 库存查询接口 - 仅按载具查询
+POST {{baseUrl}}/mywms/stock
+Content-Type: application/json
+
+{
+ "requestId": "testOrderId1",
+ "details": [
+ {
+ "vehicleNo": "1001"
+ }
+ ]
+}
+
+### 4. 库存查询接口 - 仅按库位查询
+POST {{baseUrl}}/mywms/stock
+Content-Type: application/json
+
+{
+ "requestId": "testOrderId2",
+ "details": [
+ {
+ "locationId": "A02-01-02-02"
+ }
+ ]
+}
+
+### 5. 检查是否允许投料
+GET {{baseUrl}}/mywms/allowFeed
+
+### 6. 允许出库
+GET {{baseUrl}}/mywms/allowOut
+
+### 测试数据说明
+# 1. orderIn: 入库订单接口,需要taskId和vehicleNo
+# 2. orderOut: 出库订单接口,需要taskId和vehicleNo
+# 3. stock: 库存查询接口,需要requestId和details数组
+# - details中可以包含vehicleNo和/或locationId
+# 4. allowFeed: 查询当前系统是否允许投料操作(GET请求)
+
+### 响应格式说明
+# 所有接口都返回MyWmsResponse格式:
+# {
+# "code": 200, // 响应码
+# "message": "操作成功", // 响应消息
+# "data": {}, // 具体数据
+# "success": true // 是否成功
+# }
\ No newline at end of file
diff --git a/202504-Wms-MengYang-box/wms_serve_mengyang/api-tests/TaskController.http b/202504-Wms-MengYang-box/wms_serve_mengyang/api-tests/TaskController.http
new file mode 100644
index 0000000..602428f
--- /dev/null
+++ b/202504-Wms-MengYang-box/wms_serve_mengyang/api-tests/TaskController.http
@@ -0,0 +1,60 @@
+### TaskController接口测试 - WMS任务控制接口
+### 基础配置
+@baseUrl = http://localhost:12315
+
+### 1. WCS请求载具入库
+POST {{baseUrl}}/wms/task/wcsRequestVehicleIn
+Content-Type: application/json
+
+{
+ "origin": "R1",
+ "vehicleNo": "1006",
+ "codeMessage": "test",
+ "remark": "载具入库测试"
+}
+
+### 2. 发送任务结果 - 任务完成
+POST {{baseUrl}}/wms/task/sendTaskResult
+Content-Type: application/json
+
+{
+ "taskId": "1753403954324010001",
+ "taskStatus": 100,
+ "vehicleNo": "1004",
+ "destination": "C1",
+ "message": "任务执行成功"
+}
+
+### 测试数据说明
+# 1. wcsRequestVehicleIn: WCS请求载具入库
+# - origin: 点位(必填)
+# - vehicleNo: 载具信息(必填)
+# - codeMessage: 条码信息(可选)
+# - remark: 备注(可选)
+
+# 2. sendTaskResult: WCS反馈任务执行结果
+# - taskId: 任务ID(必填)
+# - taskStatus: 任务状态(必填)
+# * 0: 等待执行
+# * 1: 执行中
+# * 2: 执行完成
+# * 3: 执行失败
+# - vehicleNo: 载具号(必填)
+# - destination: 终点(可选)
+# - message: 信息(可选)
+
+### 响应格式说明
+# wcsRequestVehicleIn返回WcsVehicleInResponse:
+# {
+# "success": true,
+# "code": "SUCCESS",
+# "message": "请求成功",
+# "data": {}
+# }
+
+# sendTaskResult返回BaseWcsApiResponse:
+# {
+# "success": true,
+# "code": "SUCCESS",
+# "message": "任务结果接收成功"
+# }
\ No newline at end of file
diff --git a/202504-Wms-MengYang-box/wms_serve_mengyang/pom.xml b/202504-Wms-MengYang-box/wms_serve_mengyang/pom.xml
index 57aea11..be078b0 100644
--- a/202504-Wms-MengYang-box/wms_serve_mengyang/pom.xml
+++ b/202504-Wms-MengYang-box/wms_serve_mengyang/pom.xml
@@ -9,10 +9,10 @@
com
- dev_wms_serve
+ wms_serve_mengyang_box
3.2
- dev_wms_serve
- dev_wms_serve
+ wms_serve_mengyang_box
+ wms_serve_mengyang_box
@@ -162,6 +162,15 @@
true
+
+ org.apache.maven.plugins
+ maven-compiler-plugin
+
+ 21
+ 21
+ UTF-8
+
+
diff --git a/202504-Wms-MengYang-box/wms_serve_mengyang/src/main/java/com/wms_main/constant/enums/mywms/OrderInCBEnums.java b/202504-Wms-MengYang-box/wms_serve_mengyang/src/main/java/com/wms_main/constant/enums/mywms/OrderInCBEnums.java
new file mode 100644
index 0000000..8fd58ba
--- /dev/null
+++ b/202504-Wms-MengYang-box/wms_serve_mengyang/src/main/java/com/wms_main/constant/enums/mywms/OrderInCBEnums.java
@@ -0,0 +1,18 @@
+package com.wms_main.constant.enums.mywms;
+
+import lombok.Getter;
+
+@Getter
+public enum OrderInCBEnums {
+ COMPLETE(1, "入库完成"),
+ CANCEL(2, "入库取消"),
+ EXCEPTION(3, "入库异常");
+
+ private final Integer code;
+ private final String desc;
+
+ OrderInCBEnums(Integer code, String desc) {
+ this.code = code;
+ this.desc = desc;
+ }
+}
diff --git a/202504-Wms-MengYang-box/wms_serve_mengyang/src/main/java/com/wms_main/constant/enums/mywms/OrderOutCBEnums.java b/202504-Wms-MengYang-box/wms_serve_mengyang/src/main/java/com/wms_main/constant/enums/mywms/OrderOutCBEnums.java
new file mode 100644
index 0000000..6aaa784
--- /dev/null
+++ b/202504-Wms-MengYang-box/wms_serve_mengyang/src/main/java/com/wms_main/constant/enums/mywms/OrderOutCBEnums.java
@@ -0,0 +1,18 @@
+package com.wms_main.constant.enums.mywms;
+
+import lombok.Getter;
+
+@Getter
+public enum OrderOutCBEnums {
+ COMPLETE(1, "出库完成"),
+ CANCEL(2, "出库取消"),
+ EXCEPTION(3, "出库异常");
+
+ private final Integer code;
+ private final String desc;
+
+ OrderOutCBEnums(Integer code, String desc) {
+ this.code = code;
+ this.desc = desc;
+ }
+}
diff --git a/202504-Wms-MengYang-box/wms_serve_mengyang/src/main/java/com/wms_main/constant/enums/wms/AppConfigKeyEnums.java b/202504-Wms-MengYang-box/wms_serve_mengyang/src/main/java/com/wms_main/constant/enums/wms/AppConfigKeyEnums.java
index 98311ff..ee409c5 100644
--- a/202504-Wms-MengYang-box/wms_serve_mengyang/src/main/java/com/wms_main/constant/enums/wms/AppConfigKeyEnums.java
+++ b/202504-Wms-MengYang-box/wms_serve_mengyang/src/main/java/com/wms_main/constant/enums/wms/AppConfigKeyEnums.java
@@ -12,6 +12,7 @@ public enum AppConfigKeyEnums {
WCS_STACKER_TASK_URL("WcsStackerTaskUrl", "发送堆垛机任务地址"),
WCS_PICK_TASK_URL("WcsPickTaskUrl", "发送拣选任务地址"),
WCS_CANCEL_PICK_TASK_URL("WcsCancelPickTaskUrl", "发送取消拣选任务地址"),
+ WCS_CAN_FEED_URL("wcsCanFeedUrl", "查询wcs是否可上料"),
WCS_RELEASE_BOX_URL("WcsReleaseBoxUrl", "发送释放站台箱子地址"),
STAND_CAPACITY("StandCapacity", "站台容量"),
IMAGE_IP("ImageIp", "图片存放ip"),
@@ -19,7 +20,9 @@ public enum AppConfigKeyEnums {
STOCK_WARNING_QTY("StockWarningQty", "库存预警数量"),
MES_GET_GOODS_URL("MesGetGoodsUrl", "获取物料信息地址"),
ERP_GET_VEHICLENO_DATA("ErpGetVehicleNoData", "根据托盘号查询简单生产入库单"),
- WMS_MANAGE_CALLBACK("WmsManageCallback", "场内WMS接受的入库出库执行后回调地址");
+ WMS_ORDER_IN_CALLBACK("WmsOrderInCallback", "WMS接受的入库执行后回调地址"),
+ WMS_ORDER_OUT_CALLBACK("WmsOrderOutCallback", "WMS接受的出库执行后回调地址");
+
private final String key;
private final String desc;
diff --git a/202504-Wms-MengYang-box/wms_serve_mengyang/src/main/java/com/wms_main/constant/enums/wms/WmsAgvLockEnums.java b/202504-Wms-MengYang-box/wms_serve_mengyang/src/main/java/com/wms_main/constant/enums/wms/WmsAgvLockEnums.java
new file mode 100644
index 0000000..4d6673f
--- /dev/null
+++ b/202504-Wms-MengYang-box/wms_serve_mengyang/src/main/java/com/wms_main/constant/enums/wms/WmsAgvLockEnums.java
@@ -0,0 +1,13 @@
+package com.wms_main.constant.enums.wms;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+
+@Getter
+@AllArgsConstructor
+public enum WmsAgvLockEnums {
+ AVAILABLE(0, "可用"),
+ LOCK(1, "锁定");
+ private final Integer code;
+ private final String desc;
+}
diff --git a/202504-Wms-MengYang-box/wms_serve_mengyang/src/main/java/com/wms_main/controller/mywms/MyWmsController.java b/202504-Wms-MengYang-box/wms_serve_mengyang/src/main/java/com/wms_main/controller/mywms/MyWmsController.java
index ba4fd05..29a8249 100644
--- a/202504-Wms-MengYang-box/wms_serve_mengyang/src/main/java/com/wms_main/controller/mywms/MyWmsController.java
+++ b/202504-Wms-MengYang-box/wms_serve_mengyang/src/main/java/com/wms_main/controller/mywms/MyWmsController.java
@@ -7,15 +7,20 @@ import com.wms_main.model.dto.request.mywms.StockRespGoodsDetail;
import com.wms_main.model.dto.response.mywms.MyWmsResponse;
import com.wms_main.service.controller.IMyWmsControllerService;
import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.*;
import java.util.List;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+
@RestController
@ResponseBody
@CrossOrigin
@RequiredArgsConstructor
@RequestMapping("/mywms")
+@Slf4j
public class MyWmsController {
private final IMyWmsControllerService myWmsControllerService;
@@ -34,4 +39,14 @@ public class MyWmsController {
public MyWmsResponse> stock(@RequestBody StockReq request) {
return myWmsControllerService.stock(request);
}
+
+ @GetMapping("/allowFeed")
+ public MyWmsResponse canFeed() {
+ return myWmsControllerService.queryCanFeed();
+ }
+
+ @GetMapping("/allowOut")
+ public MyWmsResponse canOut() {
+ return myWmsControllerService.queryCanOut();
+ }
}
diff --git a/202504-Wms-MengYang-box/wms_serve_mengyang/src/main/java/com/wms_main/dao/ITAppAgvLockService.java b/202504-Wms-MengYang-box/wms_serve_mengyang/src/main/java/com/wms_main/dao/ITAppAgvLockService.java
new file mode 100644
index 0000000..2b0d98e
--- /dev/null
+++ b/202504-Wms-MengYang-box/wms_serve_mengyang/src/main/java/com/wms_main/dao/ITAppAgvLockService.java
@@ -0,0 +1,27 @@
+package com.wms_main.dao;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.wms_main.model.po.TAppAgvLock;
+
+import java.util.List;
+
+/**
+ * AGV互锁表数据访问接口
+ */
+public interface ITAppAgvLockService extends IService {
+
+ /**
+ * 根据AGV和站点查询锁定记录
+ */
+ List getByAgvAndStation(String agvId, String feedStation);
+
+ /**
+ * 根据站点查询所有锁定记录
+ */
+ List getByStation(String feedStation);
+
+ /**
+ * 查询超时的锁定记录
+ */
+ List getTimeoutLocks();
+}
\ No newline at end of file
diff --git a/202504-Wms-MengYang-box/wms_serve_mengyang/src/main/java/com/wms_main/dao/impl/TAppAgvLockServiceImpl.java b/202504-Wms-MengYang-box/wms_serve_mengyang/src/main/java/com/wms_main/dao/impl/TAppAgvLockServiceImpl.java
new file mode 100644
index 0000000..74d556c
--- /dev/null
+++ b/202504-Wms-MengYang-box/wms_serve_mengyang/src/main/java/com/wms_main/dao/impl/TAppAgvLockServiceImpl.java
@@ -0,0 +1,46 @@
+package com.wms_main.dao.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.wms_main.dao.ITAppAgvLockService;
+import com.wms_main.mapper.AppAgvLockMapper;
+import com.wms_main.model.po.TAppAgvLock;
+import org.springframework.stereotype.Service;
+
+import java.time.LocalDateTime;
+import java.util.List;
+
+/**
+ * AGV互锁表数据访问实现
+ */
+@Service
+public class TAppAgvLockServiceImpl extends ServiceImpl implements ITAppAgvLockService {
+
+ @Override
+ public List getByAgvAndStation(String agvId, String feedStation) {
+ return list(new LambdaQueryWrapper()
+ .eq(TAppAgvLock::getAgvId, agvId)
+ .eq(TAppAgvLock::getFeedStation, feedStation)
+ .eq(TAppAgvLock::getLockStatus, 1)
+ .orderByAsc(TAppAgvLock::getCreateTime)
+ );
+ }
+
+ @Override
+ public List getByStation(String feedStation) {
+ return list(new LambdaQueryWrapper()
+ .eq(TAppAgvLock::getFeedStation, feedStation)
+ .eq(TAppAgvLock::getLockStatus, 1)
+ .orderByAsc(TAppAgvLock::getPriority)
+ .orderByAsc(TAppAgvLock::getCreateTime)
+ );
+ }
+
+ @Override
+ public List getTimeoutLocks() {
+ return list(new LambdaQueryWrapper()
+ .eq(TAppAgvLock::getLockStatus, 1)
+ .lt(TAppAgvLock::getLockTime, LocalDateTime.now().minusSeconds(300)) // 超过5分钟的锁定
+ );
+ }
+}
\ No newline at end of file
diff --git a/202504-Wms-MengYang-box/wms_serve_mengyang/src/main/java/com/wms_main/mapper/AppAgvLockMapper.java b/202504-Wms-MengYang-box/wms_serve_mengyang/src/main/java/com/wms_main/mapper/AppAgvLockMapper.java
new file mode 100644
index 0000000..660381f
--- /dev/null
+++ b/202504-Wms-MengYang-box/wms_serve_mengyang/src/main/java/com/wms_main/mapper/AppAgvLockMapper.java
@@ -0,0 +1,12 @@
+package com.wms_main.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.wms_main.model.po.TAppAgvLock;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * AGV互锁表映射器
+ */
+@Mapper
+public interface AppAgvLockMapper extends BaseMapper {
+}
\ No newline at end of file
diff --git a/202504-Wms-MengYang-box/wms_serve_mengyang/src/main/java/com/wms_main/model/dto/request/mywms/OrderInCBReq.java b/202504-Wms-MengYang-box/wms_serve_mengyang/src/main/java/com/wms_main/model/dto/request/mywms/OrderInCBReq.java
index 16ecec0..f48aaca 100644
--- a/202504-Wms-MengYang-box/wms_serve_mengyang/src/main/java/com/wms_main/model/dto/request/mywms/OrderInCBReq.java
+++ b/202504-Wms-MengYang-box/wms_serve_mengyang/src/main/java/com/wms_main/model/dto/request/mywms/OrderInCBReq.java
@@ -1,5 +1,6 @@
package com.wms_main.model.dto.request.mywms;
+import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@@ -8,8 +9,18 @@ import lombok.NoArgsConstructor;
@AllArgsConstructor
@NoArgsConstructor
public class OrderInCBReq {
- String orderId;
- String vehicleNo;
- Integer orderStatus;
- String message;
+ @JsonProperty("taskId")
+ private String taskId;
+
+ @JsonProperty("vehicleNo")
+ private String vehicleNo;
+
+ @JsonProperty("locationId")
+ private String locationId;
+
+ @JsonProperty("result")
+ private Integer result;
+
+ @JsonProperty("resultMessage")
+ private String resultMessage;
}
diff --git a/202504-Wms-MengYang-box/wms_serve_mengyang/src/main/java/com/wms_main/model/dto/request/mywms/OrderInReq.java b/202504-Wms-MengYang-box/wms_serve_mengyang/src/main/java/com/wms_main/model/dto/request/mywms/OrderInReq.java
index f511e4f..0bcda6b 100644
--- a/202504-Wms-MengYang-box/wms_serve_mengyang/src/main/java/com/wms_main/model/dto/request/mywms/OrderInReq.java
+++ b/202504-Wms-MengYang-box/wms_serve_mengyang/src/main/java/com/wms_main/model/dto/request/mywms/OrderInReq.java
@@ -1,15 +1,10 @@
package com.wms_main.model.dto.request.mywms;
-import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.annotation.JsonProperty;
-import com.wms_main.constant.enums.wms.WmsTaskTypeEnums;
import com.wms_main.repository.utils.StringUtils;
import lombok.Getter;
import lombok.Setter;
-import org.springframework.format.annotation.DateTimeFormat;
-import java.time.LocalDateTime;
-import java.util.Objects;
@Getter
@Setter
@@ -18,34 +13,11 @@ public class OrderInReq {
@JsonProperty("taskId")
private String taskId;
- @JsonProperty("storageId")
- private Integer storageId;
-
- @JsonProperty("taskType")
- private Integer taskType;
-
@JsonProperty("vehicleNo")
private String vehicleNo;
- @JsonProperty("standId")
- private String standId;
-
- @JsonProperty("requestTime")
- @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
- @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
- private LocalDateTime requestTime;
-
- @JsonProperty("requestUser")
- private String requestUser;
-
public boolean isValid() {
- if (StringUtils.isEmpty(this.getTaskId())
- || StringUtils.isEmpty(this.getVehicleNo())
- || StringUtils.isEmpty(this.getStandId())
- || !Objects.equals(this.getTaskType(), WmsTaskTypeEnums.IN.getCode())) {
- return false;
- } else {
- return true;
- }
+ return !StringUtils.isEmpty(this.getTaskId())
+ && !StringUtils.isEmpty(this.getVehicleNo());
}
}
diff --git a/202504-Wms-MengYang-box/wms_serve_mengyang/src/main/java/com/wms_main/model/dto/request/mywms/OrderOutCBReq.java b/202504-Wms-MengYang-box/wms_serve_mengyang/src/main/java/com/wms_main/model/dto/request/mywms/OrderOutCBReq.java
index 401efee..ef1ca96 100644
--- a/202504-Wms-MengYang-box/wms_serve_mengyang/src/main/java/com/wms_main/model/dto/request/mywms/OrderOutCBReq.java
+++ b/202504-Wms-MengYang-box/wms_serve_mengyang/src/main/java/com/wms_main/model/dto/request/mywms/OrderOutCBReq.java
@@ -1,5 +1,6 @@
package com.wms_main.model.dto.request.mywms;
+import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@@ -8,9 +9,15 @@ import lombok.NoArgsConstructor;
@AllArgsConstructor
@NoArgsConstructor
public class OrderOutCBReq {
- String orderId;
- String vehicleNo;
- Integer orderStatus;
- String outStand;
- String message;
+ @JsonProperty("taskId")
+ private String taskId;
+
+ @JsonProperty("result")
+ private Integer result;
+
+ @JsonProperty("resultMessage")
+ private String resultMessage;
+
+ @JsonProperty("vehicleNo")
+ private String vehicleNo;
}
diff --git a/202504-Wms-MengYang-box/wms_serve_mengyang/src/main/java/com/wms_main/model/dto/request/mywms/OrderOutGoodsDetail.java b/202504-Wms-MengYang-box/wms_serve_mengyang/src/main/java/com/wms_main/model/dto/request/mywms/OrderOutGoodsDetail.java
index 8986b8f..5d5e0d1 100644
--- a/202504-Wms-MengYang-box/wms_serve_mengyang/src/main/java/com/wms_main/model/dto/request/mywms/OrderOutGoodsDetail.java
+++ b/202504-Wms-MengYang-box/wms_serve_mengyang/src/main/java/com/wms_main/model/dto/request/mywms/OrderOutGoodsDetail.java
@@ -7,6 +7,6 @@ import lombok.Setter;
@Getter
@Setter
public class OrderOutGoodsDetail {
- @JsonProperty("inTaskId")
- private String inTaskId;
+ @JsonProperty("vehicleNo")
+ private String vehicleNo;
}
diff --git a/202504-Wms-MengYang-box/wms_serve_mengyang/src/main/java/com/wms_main/model/dto/request/mywms/OrderOutReq.java b/202504-Wms-MengYang-box/wms_serve_mengyang/src/main/java/com/wms_main/model/dto/request/mywms/OrderOutReq.java
index 67be9d2..d30251c 100644
--- a/202504-Wms-MengYang-box/wms_serve_mengyang/src/main/java/com/wms_main/model/dto/request/mywms/OrderOutReq.java
+++ b/202504-Wms-MengYang-box/wms_serve_mengyang/src/main/java/com/wms_main/model/dto/request/mywms/OrderOutReq.java
@@ -1,14 +1,8 @@
package com.wms_main.model.dto.request.mywms;
-
-import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.Getter;
import lombok.Setter;
-import org.springframework.format.annotation.DateTimeFormat;
-
-import java.time.LocalDateTime;
-import java.util.List;
@Getter
@Setter
@@ -17,20 +11,6 @@ public class OrderOutReq {
@JsonProperty("taskId")
private String taskId;
- @JsonProperty("storageId")
- private Integer storageId;
-
- @JsonProperty("taskType")
- private Integer taskType;
-
- @JsonProperty("details")
- private List details;
-
- @JsonProperty("requestTime")
- @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
- @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
- private LocalDateTime requestTime;
-
- @JsonProperty("requestUser")
- private String requestUser;
+ @JsonProperty("vehicleNo")
+ private String vehicleNo;
}
diff --git a/202504-Wms-MengYang-box/wms_serve_mengyang/src/main/java/com/wms_main/model/dto/request/mywms/StockReq.java b/202504-Wms-MengYang-box/wms_serve_mengyang/src/main/java/com/wms_main/model/dto/request/mywms/StockReq.java
index 7b4ff63..5b60ae9 100644
--- a/202504-Wms-MengYang-box/wms_serve_mengyang/src/main/java/com/wms_main/model/dto/request/mywms/StockReq.java
+++ b/202504-Wms-MengYang-box/wms_serve_mengyang/src/main/java/com/wms_main/model/dto/request/mywms/StockReq.java
@@ -16,25 +16,10 @@ public class StockReq {
@JsonProperty("requestId")
private String requestId;
- @JsonProperty("storageId")
- private Integer storageId;
-
- @JsonProperty("requestTime")
- @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
- @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
- private String requestTime;
-
- @JsonProperty("requestUser")
- private String requestUser;
-
@JsonProperty("details")
private List details;
public boolean empty() {
- return StringUtils.isEmpty(requestId)
- && StringUtils.isEmpty(requestTime)
- && StringUtils.isEmpty(requestUser)
- && Objects.isNull(storageId);
+ return StringUtils.isEmpty(requestId);
}
-
}
diff --git a/202504-Wms-MengYang-box/wms_serve_mengyang/src/main/java/com/wms_main/model/dto/request/mywms/StockReqGoodsDetail.java b/202504-Wms-MengYang-box/wms_serve_mengyang/src/main/java/com/wms_main/model/dto/request/mywms/StockReqGoodsDetail.java
index 190a319..d80b9d9 100644
--- a/202504-Wms-MengYang-box/wms_serve_mengyang/src/main/java/com/wms_main/model/dto/request/mywms/StockReqGoodsDetail.java
+++ b/202504-Wms-MengYang-box/wms_serve_mengyang/src/main/java/com/wms_main/model/dto/request/mywms/StockReqGoodsDetail.java
@@ -12,12 +12,8 @@ public class StockReqGoodsDetail {
@JsonProperty("locationId")
private String locationId;
- @JsonProperty("inTaskId")
- private String inTaskId;
-
public boolean empty() {
return StringUtils.isEmpty(vehicleNo)
- && StringUtils.isEmpty(locationId)
- && StringUtils.isEmpty(inTaskId);
+ && StringUtils.isEmpty(locationId);
}
}
diff --git a/202504-Wms-MengYang-box/wms_serve_mengyang/src/main/java/com/wms_main/model/dto/request/wcs/WcsCanFeedRequest.java b/202504-Wms-MengYang-box/wms_serve_mengyang/src/main/java/com/wms_main/model/dto/request/wcs/WcsCanFeedRequest.java
new file mode 100644
index 0000000..6aef3a3
--- /dev/null
+++ b/202504-Wms-MengYang-box/wms_serve_mengyang/src/main/java/com/wms_main/model/dto/request/wcs/WcsCanFeedRequest.java
@@ -0,0 +1,13 @@
+package com.wms_main.model.dto.request.wcs;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+
+@Data
+@AllArgsConstructor
+public class WcsCanFeedRequest {
+ /**
+ * 入库口编号(默认为单一入库口)
+ */
+ private String inboundPort;
+}
\ No newline at end of file
diff --git a/202504-Wms-MengYang-box/wms_serve_mengyang/src/main/java/com/wms_main/model/dto/response/mes/MesApiResponse.java b/202504-Wms-MengYang-box/wms_serve_mengyang/src/main/java/com/wms_main/model/dto/response/mes/MesApiResponse.java
new file mode 100644
index 0000000..d8b7703
--- /dev/null
+++ b/202504-Wms-MengYang-box/wms_serve_mengyang/src/main/java/com/wms_main/model/dto/response/mes/MesApiResponse.java
@@ -0,0 +1,23 @@
+package com.wms_main.model.dto.response.mes;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+import lombok.NoArgsConstructor;
+import lombok.Setter;
+
+@Getter
+@Setter
+@AllArgsConstructor
+@NoArgsConstructor
+public class MesApiResponse {
+ @JsonProperty("code")
+ private Integer code;
+
+ @JsonProperty("message")
+ private String message;
+
+ public static MesApiResponse error(String msg) {
+ return new MesApiResponse(999, msg);
+ }
+}
diff --git a/202504-Wms-MengYang-box/wms_serve_mengyang/src/main/java/com/wms_main/model/dto/response/mes/MesCanFeedResponse.java b/202504-Wms-MengYang-box/wms_serve_mengyang/src/main/java/com/wms_main/model/dto/response/mes/MesCanFeedResponse.java
new file mode 100644
index 0000000..b8aa371
--- /dev/null
+++ b/202504-Wms-MengYang-box/wms_serve_mengyang/src/main/java/com/wms_main/model/dto/response/mes/MesCanFeedResponse.java
@@ -0,0 +1,47 @@
+package com.wms_main.model.dto.response.mes;
+
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * MES系统查询是否可上料响应
+ */
+@Getter
+@Setter
+public class MesCanFeedResponse {
+
+ /**
+ * 是否可以上料
+ */
+ private Boolean canFeed;
+
+ /**
+ * 入库口状态(空闲/占用)
+ */
+ private String inboundPortStatus;
+
+ /**
+ * 当前处理中的任务数量
+ */
+ private Integer processingTaskCount;
+
+ /**
+ * 响应消息
+ */
+ private String message;
+
+ /**
+ * 预留字段1
+ */
+ private String reserved1;
+
+ /**
+ * 预留字段2
+ */
+ private String reserved2;
+
+ /**
+ * 预留字段3
+ */
+ private String reserved3;
+}
\ No newline at end of file
diff --git a/202504-Wms-MengYang-box/wms_serve_mengyang/src/main/java/com/wms_main/model/dto/response/wcs/WcsApiResponse.java b/202504-Wms-MengYang-box/wms_serve_mengyang/src/main/java/com/wms_main/model/dto/response/wcs/WcsApiResponse.java
index a995dc0..78b7a0b 100644
--- a/202504-Wms-MengYang-box/wms_serve_mengyang/src/main/java/com/wms_main/model/dto/response/wcs/WcsApiResponse.java
+++ b/202504-Wms-MengYang-box/wms_serve_mengyang/src/main/java/com/wms_main/model/dto/response/wcs/WcsApiResponse.java
@@ -17,7 +17,7 @@ public class WcsApiResponse extends BaseWcsApiResponse {
/**
* 返回数据
*/
- @JsonProperty("data")
+ @JsonProperty("returnData")
private T data;
/**
diff --git a/202504-Wms-MengYang-box/wms_serve_mengyang/src/main/java/com/wms_main/model/dto/response/wcs/WcsCanFeedResponse.java b/202504-Wms-MengYang-box/wms_serve_mengyang/src/main/java/com/wms_main/model/dto/response/wcs/WcsCanFeedResponse.java
new file mode 100644
index 0000000..331659c
--- /dev/null
+++ b/202504-Wms-MengYang-box/wms_serve_mengyang/src/main/java/com/wms_main/model/dto/response/wcs/WcsCanFeedResponse.java
@@ -0,0 +1,27 @@
+package com.wms_main.model.dto.response.wcs;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import lombok.Getter;
+import lombok.Setter;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.time.LocalDateTime;
+
+/**
+ * 立库查询是否可上料响应
+ */
+@Getter
+@Setter
+public class WcsCanFeedResponse {
+ @JsonProperty("responseTime")
+ @JsonFormat(pattern = "yyyy-MM-dd hh:mm:ss")
+ @DateTimeFormat(pattern = "yyyy-MM-dd hh:mm:ss")
+ private LocalDateTime responseTime;
+
+ @JsonProperty("allowAction")
+ boolean allowAction;
+
+ @JsonProperty("msg")
+ String msg;
+}
\ No newline at end of file
diff --git a/202504-Wms-MengYang-box/wms_serve_mengyang/src/main/java/com/wms_main/model/po/TAppAgvLock.java b/202504-Wms-MengYang-box/wms_serve_mengyang/src/main/java/com/wms_main/model/po/TAppAgvLock.java
new file mode 100644
index 0000000..04d6077
--- /dev/null
+++ b/202504-Wms-MengYang-box/wms_serve_mengyang/src/main/java/com/wms_main/model/po/TAppAgvLock.java
@@ -0,0 +1,87 @@
+package com.wms_main.model.po;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.time.LocalDateTime;
+
+/**
+ * AGV互锁表
+ */
+@Getter
+@Setter
+@TableName(value = "t_app_agv_lock", autoResultMap = true)
+public class TAppAgvLock {
+
+ @TableId(value = "lock_id")
+ private String lockId;
+
+ /**
+ * AGV设备ID
+ */
+ @TableField(value = "agv_id")
+ private String agvId;
+
+ /**
+ * 上料站点
+ */
+ @TableField(value = "feed_station")
+ private String feedStation;
+
+ /**
+ * 锁定状态: 1-锁定中, 0-已释放
+ */
+ @TableField(value = "lock_status")
+ private Integer lockStatus;
+
+ /**
+ * 锁定类型: FEED-上料锁定, WAIT-等待锁定
+ */
+ @TableField(value = "lock_type")
+ private String lockType;
+
+ /**
+ * 优先级: 数字越小优先级越高
+ */
+ @TableField(value = "priority")
+ private Integer priority;
+
+ /**
+ * 队列位置
+ */
+ @TableField(value = "queue_position")
+ private Integer queuePosition;
+
+ /**
+ * 锁定时间
+ */
+ @TableField(value = "lock_time")
+ private LocalDateTime lockTime;
+
+ /**
+ * 释放时间
+ */
+ @TableField(value = "unlock_time")
+ private LocalDateTime unlockTime;
+
+ /**
+ * 超时时间(秒)
+ */
+ @TableField(value = "timeout_seconds")
+ private Integer timeoutSeconds;
+
+ /**
+ * 备注
+ */
+ @TableField(value = "remark")
+ private String remark;
+
+ @TableField(value = "create_time")
+ private LocalDateTime createTime;
+
+ @TableField(value = "update_time")
+ private LocalDateTime updateTime;
+}
\ No newline at end of file
diff --git a/202504-Wms-MengYang-box/wms_serve_mengyang/src/main/java/com/wms_main/model/po/TAppOrderOut.java b/202504-Wms-MengYang-box/wms_serve_mengyang/src/main/java/com/wms_main/model/po/TAppOrderOut.java
index d3eb020..1951ae6 100644
--- a/202504-Wms-MengYang-box/wms_serve_mengyang/src/main/java/com/wms_main/model/po/TAppOrderOut.java
+++ b/202504-Wms-MengYang-box/wms_serve_mengyang/src/main/java/com/wms_main/model/po/TAppOrderOut.java
@@ -19,8 +19,8 @@ public class TAppOrderOut {
@TableField(value = "order_id")
private String orderId;
- @TableField(value = "in_task_id")
- private String inTaskId;
+ @TableField(value = "vehicle_no")
+ private String vehicleNo;
@TableField(value = "order_status")
private Integer orderStatus;
diff --git a/202504-Wms-MengYang-box/wms_serve_mengyang/src/main/java/com/wms_main/service/api/IExternalApiService.java b/202504-Wms-MengYang-box/wms_serve_mengyang/src/main/java/com/wms_main/service/api/IExternalApiService.java
index 70876d3..2ab1415 100644
--- a/202504-Wms-MengYang-box/wms_serve_mengyang/src/main/java/com/wms_main/service/api/IExternalApiService.java
+++ b/202504-Wms-MengYang-box/wms_serve_mengyang/src/main/java/com/wms_main/service/api/IExternalApiService.java
@@ -1,14 +1,12 @@
package com.wms_main.service.api;
-import com.wms_main.model.bo.ycwms.YCWmsApiResponse;
import com.wms_main.model.dto.request.mywms.OrderInCBReq;
import com.wms_main.model.dto.request.mywms.OrderOutCBReq;
-import com.wms_main.model.dto.response.mywms.MyWmsResponse;
+import com.wms_main.model.dto.response.mes.MesApiResponse;
public interface IExternalApiService {
-// MyWmsResponse getVehicleNoData(String vehicleNo);
- MyWmsResponse invokeOrderInCB(OrderInCBReq request);
+ MesApiResponse invokeOrderInCB(OrderInCBReq request);
- MyWmsResponse invokeOrderOutCB(OrderOutCBReq request);
+ MesApiResponse invokeOrderOutCB(OrderOutCBReq request);
}
diff --git a/202504-Wms-MengYang-box/wms_serve_mengyang/src/main/java/com/wms_main/service/api/IWcsApiService.java b/202504-Wms-MengYang-box/wms_serve_mengyang/src/main/java/com/wms_main/service/api/IWcsApiService.java
index 5e959e2..9849085 100644
--- a/202504-Wms-MengYang-box/wms_serve_mengyang/src/main/java/com/wms_main/service/api/IWcsApiService.java
+++ b/202504-Wms-MengYang-box/wms_serve_mengyang/src/main/java/com/wms_main/service/api/IWcsApiService.java
@@ -2,11 +2,13 @@ package com.wms_main.service.api;
import com.wms_main.model.bo.wcs.WcsPickTask;
import com.wms_main.model.bo.wcs.WcsStackerTask;
+import com.wms_main.model.dto.request.wcs.WcsCanFeedRequest;
import com.wms_main.model.dto.request.wcs.WcsPickTaskRequest;
import com.wms_main.model.dto.request.wcs.WcsReleaseBoxRequest;
import com.wms_main.model.dto.request.wcs.WcsStackerTaskRequest;
import com.wms_main.model.dto.response.wcs.BaseWcsApiResponse;
import com.wms_main.model.dto.response.wcs.WcsApiResponse;
+import com.wms_main.model.dto.response.wcs.WcsCanFeedResponse;
/**
* wcs接口服务
@@ -39,4 +41,11 @@ public interface IWcsApiService {
* @return 发送结果
*/
WcsApiResponse cancelPickTask(WcsPickTaskRequest request);
+
+ /**
+ * 查询是否可上料
+ * @param request 查询请求信息
+ * @return 查询结果
+ */
+ WcsApiResponse canFeed(WcsCanFeedRequest request);
}
diff --git a/202504-Wms-MengYang-box/wms_serve_mengyang/src/main/java/com/wms_main/service/api/serviceImpl/ExternalApiServiceImpl.java b/202504-Wms-MengYang-box/wms_serve_mengyang/src/main/java/com/wms_main/service/api/serviceImpl/ExternalApiServiceImpl.java
index 3d5eb7c..cfa878f 100644
--- a/202504-Wms-MengYang-box/wms_serve_mengyang/src/main/java/com/wms_main/service/api/serviceImpl/ExternalApiServiceImpl.java
+++ b/202504-Wms-MengYang-box/wms_serve_mengyang/src/main/java/com/wms_main/service/api/serviceImpl/ExternalApiServiceImpl.java
@@ -4,7 +4,7 @@ import com.wms_main.app.AppCommon;
import com.wms_main.constant.enums.wms.AppConfigKeyEnums;
import com.wms_main.model.dto.request.mywms.OrderInCBReq;
import com.wms_main.model.dto.request.mywms.OrderOutCBReq;
-import com.wms_main.model.dto.response.mywms.MyWmsResponse;
+import com.wms_main.model.dto.response.mes.MesApiResponse;
import com.wms_main.repository.http.HttpClient;
import com.wms_main.repository.http.entity.HttpRequest;
import com.wms_main.repository.http.entity.HttpResponse;
@@ -12,12 +12,6 @@ import com.wms_main.service.api.IExternalApiService;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
-import com.alibaba.fastjson.JSON;
-
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
@Service
@RequiredArgsConstructor
@@ -26,87 +20,27 @@ public class ExternalApiServiceImpl implements IExternalApiService {
private final HttpClient httpClient;// http客户端
private final AppCommon appCommon;// 应用共通
-// @Override
-// public YcwmsResponse getVehicleNoData(String vehicleNo) {
-// Map request = new HashMap<>();
-// request.put("vehicleNo", vehicleNo);
-// HttpRequest httpRequest = HttpRequest.postInstanceOf(appCommon.getConfigByKey(AppConfigKeyEnums.ERP_GET_VEHICLENO_DATA.getKey()), request);
-// HttpResponse httpResponse = httpClient.httpPost(httpRequest);
-// if (httpResponse != null && httpResponse.isSuccess()) {
-// try {
-// String responseMessage = httpResponse.getResponseMessage();
-// // 使用Map接收基本响应,避免泛型问题
-// Map baseResponseMap = JSON.parseObject(responseMessage, Map.class);
-//
-// // 创建最终返回的对象
-// YcwmsResponse finalResponse = new YcwmsResponse<>();
-// finalResponse.setCode((Integer) baseResponseMap.get("code"));
-// finalResponse.setMessage((String) baseResponseMap.get("message"));
-//
-// // 处理returnData部分
-// if (baseResponseMap.containsKey("returnData") && baseResponseMap.get("returnData") != null) {
-// // 转换returnData部分
-// Map returnDataMap = (Map) baseResponseMap.get("returnData");
-//
-// // 创建ErpVehicleNoResp对象
-// ErpVehicleNoResp vehicleData = new ErpVehicleNoResp();
-// vehicleData.setVehicleNo((String) returnDataMap.get("vehicleNo"));
-//
-// // 处理goodsDetail数组
-// List