From 4b8bc03343068c7893f343b61928b6dd941721a4 Mon Sep 17 00:00:00 2001
From: zgw <13623675548@163.com>
Date: Thu, 25 Jun 2026 17:42:39 +0800
Subject: [PATCH] =?UTF-8?q?chore:=20=E4=BF=9D=E5=AD=98=E7=9B=98=E7=82=B9?=
=?UTF-8?q?=E5=BC=80=E5=8F=91=E5=89=8D=E6=94=B9=E5=8A=A8?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
handoff.md | 48 ++
pda/api/warehouse/inbound.js | 6 +-
pda/api/warehouse/outbound.js | 29 +-
pda/api/warehouse/stock.js | 10 +
pda/pages.json | 13 +-
pda/pages/index.vue | 30 +-
pda/pages/login.vue | 23 +-
pda/pages/mine/about/index.vue | 20 +-
pda/pages/warehouse/inbound/bindTray.vue | 48 +-
pda/pages/warehouse/inbound/emptyTray.vue | 298 +++++++++++
pda/pages/warehouse/inbound/index.vue | 18 +-
pda/pages/warehouse/inbound/supply.vue | 318 ------------
pda/pages/warehouse/inventory/index.vue | 176 ++++---
pda/pages/warehouse/outbound/confirm.vue | 189 +++++--
pda/pages/warehouse/outbound/emptyTray.vue | 416 +++++++++++++++
pda/pages/warehouse/outbound/exception.vue | 411 ---------------
pda/pages/warehouse/outbound/index.vue | 26 +-
pda/pages/warehouse/stock/index.vue | 429 +++++++++++-----
pda/static/logo.png | Bin 3616 -> 22968 bytes
pda/static/logo200.png | Bin 7995 -> 22968 bytes
.../com/ruoyi/api/aspect/ApiLogAspect.java | 41 +-
.../java/com/ruoyi/api/client/WcsClient.java | 43 +-
.../com/ruoyi/api/config/ExternalProp.java | 4 +
.../api/controller/ExternalApiController.java | 162 +++++-
.../api/domain/WcsJobExceptionRequest.java | 84 +++
.../mapper/BasCargoSpaceMapper.java | 65 +++
.../stationpoint/domain/BasStationPoint.java | 4 +-
.../stock/controller/BasStockController.java | 13 +
.../bas/stock/domain/BasStockDetail.java | 14 +
.../stock/mapper/BasStockDetailMapper.java | 5 +
.../bas/stock/mapper/BasStockMapper.java | 8 +
.../service/impl/BasStockServiceImpl.java | 32 +-
.../job/controller/InMydoJobController.java | 33 +-
.../ruoyi/in/job/mapper/MydoJobMapper.java | 16 +
.../ruoyi/in/job/service/IMydoJobService.java | 19 +
.../job/service/impl/MydoJobServiceImpl.java | 219 +++++++-
.../jobdetail/mapper/MydoJobDetailMapper.java | 2 +
.../controller/InStockinController.java | 20 +-
.../service/impl/InStockinServiceImpl.java | 15 +
.../kpi/service/impl/KpiServiceImpl.java | 100 ++--
.../job/controller/OutMydoJobController.java | 33 +-
.../LocationOutboundController.java | 53 ++
.../LocationOutboundGenerateRequest.java | 35 ++
.../domain/LocationOutboundStock.java | 290 +++++++++++
.../mapper/LocationOutboundMapper.java | 25 +
.../service/ILocationOutboundService.java | 16 +
.../impl/LocationOutboundServiceImpl.java | 310 +++++++++++
.../controller/OutStockoutController.java | 34 +-
.../stockout/domain/OutStockoutAssignDTO.java | 24 +
.../domain/OutStockoutManualAssignDTO.java | 28 +
.../stockout/mapper/OutStockoutMapper.java | 8 +
.../stockout/service/IOutStockoutService.java | 13 +-
.../service/impl/OutStockoutServiceImpl.java | 102 +++-
.../domain/OutStockoutDetail.java | 14 +
.../mapper/OutStockoutDetailMapper.java | 8 +
.../ruoyi/pda/controller/PdaController.java | 72 ++-
.../pda/domain/EmptyTrayOutboundRequest.java | 40 ++
.../java/com/ruoyi/pda/mapper/PdaMapper.java | 44 +-
.../com/ruoyi/pda/service/PdaService.java | 40 +-
.../pda/service/impl/PdaServiceImpl.java | 412 ++++++++++++++-
.../src/main/resources/application.yml | 2 +
.../mapper/bas/BasCargoSpaceMapper.xml | 96 +++-
.../mapper/bas/BasStockDetailMapper.xml | 51 +-
.../resources/mapper/bas/BasStockMapper.xml | 21 +-
.../mapper/in/MydoJobDetailMapper.xml | 4 +
.../resources/mapper/in/MydoJobMapper.xml | 35 +-
.../mapper/out/LocationOutboundMapper.xml | 245 +++++++++
.../mapper/out/OutStockoutDetailMapper.xml | 90 +++-
.../mapper/out/OutStockoutMapper.xml | 22 +
.../main/resources/mapper/pda/PdaMapper.xml | 234 +++++++--
.../ruoyi/api/aspect/ApiLogAspectTest.java | 106 ++++
.../com/ruoyi/api/client/WcsClientTest.java | 200 +++++++-
.../ExternalApiControllerWcsCodeTest.java | 146 ++++++
.../mapper/BasCargoSpaceMapperSqlTest.java | 72 +++
.../BasStationPointConfigurationTest.java | 41 ++
.../service/impl/BasStockServiceImplTest.java | 91 ++++
.../in/job/mapper/MydoJobMapperSqlTest.java | 125 +++++
.../service/impl/MydoJobServiceImplTest.java | 320 +++++++++++-
.../impl/InStockinServiceImplTest.java | 97 ++++
.../kpi/service/impl/KpiServiceImplTest.java | 109 ++++
.../impl/LocationOutboundServiceImplTest.java | 199 ++++++++
.../mapper/OutStockoutMapperSqlTest.java | 213 ++++++++
.../impl/OutStockoutServiceImplTest.java | 105 ++++
.../ruoyi/pda/mapper/PdaMapperSqlTest.java | 112 ++++
.../pda/service/impl/PdaServiceImplTest.java | 483 ++++++++++++++++++
ruoyi-ui/src/api/out/locationOutbound.js | 19 +
ruoyi-ui/src/api/out/stockout.js | 5 +-
ruoyi-ui/src/assets/logo/logo.png | Bin 5663 -> 20029 bytes
.../src/layout/components/Sidebar/Logo.vue | 17 +-
ruoyi-ui/src/views/bas/barcodeData/index.vue | 74 ++-
ruoyi-ui/src/views/bas/stationpoint/index.vue | 5 +-
ruoyi-ui/src/views/bas/stock/index.vue | 6 +-
ruoyi-ui/src/views/in/job/index.vue | 54 +-
ruoyi-ui/src/views/out/job/index.vue | 28 +-
.../src/views/out/locationOutbound/index.vue | 472 +++++++++++++++++
ruoyi-ui/src/views/out/stockout/index.vue | 243 ++++++++-
ruoyi-ui/src/views/search/inJobFlow/index.vue | 213 ++++++++
.../views/search/inStockinHistory/index.vue | 204 ++++++++
.../src/views/search/outJobFlow/index.vue | 133 +++++
.../views/search/outStockoutHistory/index.vue | 125 +++++
.../src/views/search/stockDetail/index.vue | 139 +++++
ruoyi-ui/src/views/tool/build/index.vue | 5 +-
.../verify-history-query-and-barcode-print.js | 92 ++++
scripts/verify-inbound-job-fixes.js | 119 +++++
scripts/verify-outbound-stock-fixes.js | 208 ++++++++
sql/20260624_update_job_dicts.sql | 133 +++++
sql/bas_station_point.sql | 1 +
sql/bas_stock_master_detail.sql | 49 +-
sql/location_outbound.sql | 170 ++++++
sql/out_stockout_flow.sql | 304 +++++++++--
sql/proc_hand_delete_in_job.sql | 7 +-
sql/search_statistics.sql | 341 +++++++++++++
sql/wms.sql | 3 +-
tmp-tool-check.txt | 1 +
114 files changed, 10005 insertions(+), 1392 deletions(-)
create mode 100644 handoff.md
create mode 100644 pda/api/warehouse/stock.js
create mode 100644 pda/pages/warehouse/inbound/emptyTray.vue
delete mode 100644 pda/pages/warehouse/inbound/supply.vue
create mode 100644 pda/pages/warehouse/outbound/emptyTray.vue
delete mode 100644 pda/pages/warehouse/outbound/exception.vue
create mode 100644 ruoyi-admin/src/main/java/com/ruoyi/api/domain/WcsJobExceptionRequest.java
create mode 100644 ruoyi-admin/src/main/java/com/ruoyi/out/location/controller/LocationOutboundController.java
create mode 100644 ruoyi-admin/src/main/java/com/ruoyi/out/location/domain/LocationOutboundGenerateRequest.java
create mode 100644 ruoyi-admin/src/main/java/com/ruoyi/out/location/domain/LocationOutboundStock.java
create mode 100644 ruoyi-admin/src/main/java/com/ruoyi/out/location/mapper/LocationOutboundMapper.java
create mode 100644 ruoyi-admin/src/main/java/com/ruoyi/out/location/service/ILocationOutboundService.java
create mode 100644 ruoyi-admin/src/main/java/com/ruoyi/out/location/service/impl/LocationOutboundServiceImpl.java
create mode 100644 ruoyi-admin/src/main/java/com/ruoyi/out/stockout/domain/OutStockoutAssignDTO.java
create mode 100644 ruoyi-admin/src/main/java/com/ruoyi/pda/domain/EmptyTrayOutboundRequest.java
create mode 100644 ruoyi-admin/src/main/resources/mapper/out/LocationOutboundMapper.xml
create mode 100644 ruoyi-admin/src/test/java/com/ruoyi/api/aspect/ApiLogAspectTest.java
create mode 100644 ruoyi-admin/src/test/java/com/ruoyi/api/controller/ExternalApiControllerWcsCodeTest.java
create mode 100644 ruoyi-admin/src/test/java/com/ruoyi/bas/cargospace/mapper/BasCargoSpaceMapperSqlTest.java
create mode 100644 ruoyi-admin/src/test/java/com/ruoyi/bas/stationpoint/BasStationPointConfigurationTest.java
create mode 100644 ruoyi-admin/src/test/java/com/ruoyi/bas/stock/service/impl/BasStockServiceImplTest.java
create mode 100644 ruoyi-admin/src/test/java/com/ruoyi/in/job/mapper/MydoJobMapperSqlTest.java
create mode 100644 ruoyi-admin/src/test/java/com/ruoyi/in/stockin/service/impl/InStockinServiceImplTest.java
create mode 100644 ruoyi-admin/src/test/java/com/ruoyi/kpi/service/impl/KpiServiceImplTest.java
create mode 100644 ruoyi-admin/src/test/java/com/ruoyi/out/location/service/impl/LocationOutboundServiceImplTest.java
create mode 100644 ruoyi-admin/src/test/java/com/ruoyi/out/stockout/mapper/OutStockoutMapperSqlTest.java
create mode 100644 ruoyi-admin/src/test/java/com/ruoyi/out/stockout/service/impl/OutStockoutServiceImplTest.java
create mode 100644 ruoyi-admin/src/test/java/com/ruoyi/pda/mapper/PdaMapperSqlTest.java
create mode 100644 ruoyi-admin/src/test/java/com/ruoyi/pda/service/impl/PdaServiceImplTest.java
create mode 100644 ruoyi-ui/src/api/out/locationOutbound.js
create mode 100644 ruoyi-ui/src/views/out/locationOutbound/index.vue
create mode 100644 ruoyi-ui/src/views/search/inJobFlow/index.vue
create mode 100644 ruoyi-ui/src/views/search/inStockinHistory/index.vue
create mode 100644 ruoyi-ui/src/views/search/outJobFlow/index.vue
create mode 100644 ruoyi-ui/src/views/search/outStockoutHistory/index.vue
create mode 100644 ruoyi-ui/src/views/search/stockDetail/index.vue
create mode 100644 scripts/verify-history-query-and-barcode-print.js
create mode 100644 scripts/verify-inbound-job-fixes.js
create mode 100644 scripts/verify-outbound-stock-fixes.js
create mode 100644 sql/20260624_update_job_dicts.sql
create mode 100644 sql/location_outbound.sql
create mode 100644 sql/search_statistics.sql
create mode 100644 tmp-tool-check.txt
diff --git a/handoff.md b/handoff.md
new file mode 100644
index 0000000..93c0cf0
--- /dev/null
+++ b/handoff.md
@@ -0,0 +1,48 @@
+# FTC25009 会话交接文档
+
+## 当前状态
+
+### 仓库操作已完成
+
+1. **仓库名称已更新**:
+ - `01` → `托盘库1`
+ - `02` → `托盘库2`
+
+2. **货位已重建(按 proc_create_cargo_space 规则)**:
+ - `01` 仓库:4排 × 12列 × 5层 = **240个货位**,4条巷道(1-4)已存在
+ - `02` 仓库:2排 × 10列 × 5层 = **100个货位**,新增了2条巷道(1-2)
+
+3. **旧数据已清空**:01仓库的旧库存、作业、货位记录已删除
+
+4. **新货位编码格式**(proc_create_cargo_space 规则):
+ - `cargo_space_id`:`010100101`(warehouse + platoon(2位) + column(3位) + floor(2位))
+ - `cargo_space_name`:`01排001列01层`
+
+### 关键变更 - 编码格式不兼容
+
+旧货位格式:`CS001` / `A-1-1-1`
+新货位格式:`010100101` / `01排001列01层`
+
+**系统中可能有代码依赖旧的 `cargo_space_id` 或 `cargo_space_name` 命名格式,需要排查。**
+
+### 数据库信息
+- 服务器:`172.16.4.12:1433`
+- 数据库:`FTC25009-WMS`
+- 用户:`sa`
+- MCP 已配置并正常工作
+
+### MCP 配置文件位置
+- `C:\Users\13623\.cursor\mcp.json`(Cursor 主要读取)
+- `C:\Users\13623\AppData\Roaming\Cursor\User\globalStorage\mcp-settings.json`
+- `D:\workSpace\PROJECT_SPACE\FTC25009\.cursorrules-mcp.json`
+
+### Git 仓库
+- 本地:`D:\workSpace\PROJECT_SPACE\FTC25009`
+- 远程:`http://106.13.86.63:10082/zgw/FTC25009.git`
+- 项目框架:若依(RuoYi) WMS 系统
+
+## 建议下一步
+
+1. 检查 Java 代码中是否有硬编码 `CS001` 或其他旧货位编码的地方
+2. 检查前端 ruoyi-ui 是否对货位编码格式有依赖
+3. 如果有入库流程测试,验证新货位编码能否正常使用
diff --git a/pda/api/warehouse/inbound.js b/pda/api/warehouse/inbound.js
index faabcac..36aea00 100644
--- a/pda/api/warehouse/inbound.js
+++ b/pda/api/warehouse/inbound.js
@@ -78,10 +78,10 @@ export function submitBindTrayAndAddInJob(data) {
})
}
-// 提交补料入库
-export function submitSupplyInbound(data) {
+// 空托入库并立即生成入库作业
+export function submitEmptyTrayInbound(data) {
return request({
- url: '/wms/inbound/supply',
+ url: '/pda/emptyTrayInbound',
method: 'post',
data: data
})
diff --git a/pda/api/warehouse/outbound.js b/pda/api/warehouse/outbound.js
index 7b1c34f..dc0aa78 100644
--- a/pda/api/warehouse/outbound.js
+++ b/pda/api/warehouse/outbound.js
@@ -9,6 +9,27 @@ export function getOutboundTaskList(query) {
})
}
+// 查询仓库空托按条码头分组的数量
+export function getEmptyTrayOutboundTypes(warehouseId) {
+ return request({
+ url: '/pda/emptyTrayOutbound/count',
+ method: 'get',
+ params: { warehouseId }
+ })
+}
+
+// 兼容旧调用名
+export const getEmptyTrayOutboundCount = getEmptyTrayOutboundTypes
+
+// 生成空托出库作业并下发 WCS
+export function submitEmptyTrayOutbound(data) {
+ return request({
+ url: '/pda/emptyTrayOutbound',
+ method: 'post',
+ data: data
+ })
+}
+
// 获取出库任务详情
export function getOutboundDetail(query) {
return request({
@@ -27,11 +48,3 @@ export function confirmOutbound(data) {
})
}
-// 提交出库异常确认
-export function submitOutboundException(data) {
- return request({
- url: '/pda/outboundException',
- method: 'post',
- data: data
- })
-}
diff --git a/pda/api/warehouse/stock.js b/pda/api/warehouse/stock.js
new file mode 100644
index 0000000..4f5a2b1
--- /dev/null
+++ b/pda/api/warehouse/stock.js
@@ -0,0 +1,10 @@
+import request from '@/utils/request'
+
+// 扫描托盘码查询托盘绑定的库存物料
+export function getTrayStock(trayCode) {
+ return request({
+ url: '/pda/trayStock',
+ method: 'get',
+ params: { trayCode }
+ })
+}
diff --git a/pda/pages.json b/pda/pages.json
index 4ff1d18..d1d8db5 100644
--- a/pda/pages.json
+++ b/pda/pages.json
@@ -71,9 +71,9 @@
"navigationBarTitleText": "入库绑盘"
}
}, {
- "path": "pages/warehouse/inbound/supply",
+ "path": "pages/warehouse/inbound/emptyTray",
"style": {
- "navigationBarTitleText": "补料入库"
+ "navigationBarTitleText": "空托盘入库"
}
}, {
"path": "pages/warehouse/outbound/index",
@@ -86,9 +86,9 @@
"navigationBarTitleText": "出库确认"
}
}, {
- "path": "pages/warehouse/outbound/exception",
+ "path": "pages/warehouse/outbound/emptyTray",
"style": {
- "navigationBarTitleText": "出库异常确认"
+ "navigationBarTitleText": "空托盘出库"
}
}, {
"path": "pages/warehouse/inventory/index",
@@ -121,11 +121,6 @@
"iconPath": "static/images/tabbar/home.png",
"selectedIconPath": "static/images/tabbar/home_.png",
"text": "首页"
- }, {
- "pagePath": "pages/work/index",
- "iconPath": "static/images/tabbar/work.png",
- "selectedIconPath": "static/images/tabbar/work_.png",
- "text": "工作台"
}, {
"pagePath": "pages/mine/index",
"iconPath": "static/images/tabbar/mine.png",
diff --git a/pda/pages/index.vue b/pda/pages/index.vue
index 7c15acc..fe07d0a 100644
--- a/pda/pages/index.vue
+++ b/pda/pages/index.vue
@@ -19,7 +19,7 @@
-
+
-
+
-
-
- 补料入库
+
+
+ 空托入库
出库确认
-
-
- 出库异常
+
+
+ 空托出库
@@ -97,10 +97,11 @@
}
.header {
- background: linear-gradient(135deg, #1890ff, #096dd9);
+ background: #fff;
border-radius: 20rpx;
padding: 40rpx 36rpx;
margin-bottom: 32rpx;
+ box-shadow: 0 2rpx 12rpx rgba(0, 0, 0, 0.06);
}
.header-info {
@@ -109,27 +110,28 @@
}
.logo {
- width: 80rpx;
- height: 80rpx;
- border-radius: 16rpx;
+ flex-shrink: 0;
+ width: 220rpx;
+ height: 70rpx;
margin-right: 24rpx;
}
.header-text {
display: flex;
flex-direction: column;
+ min-width: 0;
}
.app-name {
font-size: 36rpx;
font-weight: 500;
- color: #fff;
+ color: #1f2933;
margin-bottom: 8rpx;
}
.welcome-text {
font-size: 24rpx;
- color: rgba(255, 255, 255, 0.8);
+ color: #6b7280;
}
.menu-section {
diff --git a/pda/pages/login.vue b/pda/pages/login.vue
index 8794386..09660ee 100644
--- a/pda/pages/login.vue
+++ b/pda/pages/login.vue
@@ -1,9 +1,10 @@
-
-
- 若依移动端登录
+
+
+
+
@@ -143,11 +144,21 @@
padding-top: 15%;
image {
- border-radius: 4px;
+ border-radius: 12rpx;
}
- .title {
- margin-left: 10px;
+ .login-logo-box {
+ width: 300rpx;
+ height: 96rpx;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ box-sizing: border-box;
+ }
+
+ .login-logo {
+ width: 100%;
+ height: 100%;
}
}
diff --git a/pda/pages/mine/about/index.vue b/pda/pages/mine/about/index.vue
index 77bc093..cf920d3 100644
--- a/pda/pages/mine/about/index.vue
+++ b/pda/pages/mine/about/index.vue
@@ -1,8 +1,10 @@
@@ -72,4 +74,18 @@
flex-direction: column;
align-items: center;
}
+
+ .about-logo-box {
+ width: 360rpx;
+ height: 114rpx;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ box-sizing: border-box;
+ }
+
+ .about-logo {
+ width: 100%;
+ height: 100%;
+ }
diff --git a/pda/pages/warehouse/inbound/bindTray.vue b/pda/pages/warehouse/inbound/bindTray.vue
index db06a1b..4da9fb1 100644
--- a/pda/pages/warehouse/inbound/bindTray.vue
+++ b/pda/pages/warehouse/inbound/bindTray.vue
@@ -18,19 +18,20 @@
-
- 入库点位
-
-
- {{ selectedStationPointName || '请选择入库点位' }}
-
-
-
托盘号
+ 请先选择仓库和扫描托盘号
+
+ 入库点位
+
+
+ {{ selectedStationPointName || '请扫描入库点位' }}
+
+
+
@@ -551,18 +552,28 @@
return submitBindTrayAndAddInJob(data)
}).then(function(res) {
that.$modal.msgSuccess(res.msg || '绑盘并生成入库作业成功')
- that.bindSuccess = true
+ that.resetBindPayload()
if (that.stockinId) {
that.loadDetailList()
}
- that.barcode = ''
- that.currentMaterial = null
- that.currentRemainQty = 0
- that.currentQty = ''
- that.showQuantityPopup = false
}).catch(function() {})
},
+ resetBindPayload() {
+ this.stationPointId = ''
+ this.stationPointName = ''
+ this.stationPointIndex = 0
+ this.stationPointOptions = []
+ this.trayCode = ''
+ this.barcode = ''
+ this.currentMaterial = null
+ this.currentRemainQty = 0
+ this.currentQty = ''
+ this.showQuantityPopup = false
+ this.bindSuccess = false
+ this.items = []
+ },
+
// 全部重置
resetAll() {
this.stockinId = ''
@@ -697,6 +708,13 @@
padding: 16rpx 0;
}
+ .form-tip {
+ padding: 8rpx 0 16rpx 160rpx;
+ font-size: 24rpx;
+ color: #909399;
+ line-height: 1.4;
+ }
+
.form-label {
font-size: 28rpx;
color: #666;
diff --git a/pda/pages/warehouse/inbound/emptyTray.vue b/pda/pages/warehouse/inbound/emptyTray.vue
new file mode 100644
index 0000000..8ca5189
--- /dev/null
+++ b/pda/pages/warehouse/inbound/emptyTray.vue
@@ -0,0 +1,298 @@
+
+
+
+ 空托盘入库
+
+
+ 仓库
+
+
+ {{ selectedWarehouseName || '请选择仓库' }}
+
+
+
+
+
+ 托盘号
+
+
+
+ 请先选择仓库和扫描托盘号
+
+
+ 入库点位
+
+
+ {{ selectedStationPointName || '请选择入库点位' }}
+
+
+
+
+
+
+
+
+ 作业类型
+ 空容器入库
+
+
+ 绑定物料
+ 无需绑定
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pda/pages/warehouse/inbound/index.vue b/pda/pages/warehouse/inbound/index.vue
index f6122ab..87f87bb 100644
--- a/pda/pages/warehouse/inbound/index.vue
+++ b/pda/pages/warehouse/inbound/index.vue
@@ -15,14 +15,14 @@
-