From 32a853eecbc4f60d472dfbfb8860f7849426885f Mon Sep 17 00:00:00 2001 From: Yxq <2290299376@qq.com> Date: Mon, 26 Jan 2026 14:20:07 +0800 Subject: [PATCH] =?UTF-8?q?1.=E6=96=B0=E5=A2=9E=E5=A4=9A=E9=80=89=E7=9B=98?= =?UTF-8?q?=E7=82=B9=E5=92=8CEXCEL=E5=AF=BC=E5=85=A5=E7=9B=98=E7=82=B9=202?= =?UTF-8?q?.EWM=E6=8E=A5=E5=8F=A3=E4=BC=98=E5=8C=96=203.=E5=87=BA=E5=BA=93?= =?UTF-8?q?=E7=94=B1=E8=87=AA=E5=8A=A8=E6=94=B9=E4=B8=BA=E6=89=8B=E5=8A=A8?= =?UTF-8?q?=E4=B8=8B=E5=8F=91=204.=E5=87=BA=E5=BA=93=E6=A0=A1=E9=AA=8C?= =?UTF-8?q?=E9=80=BB=E8=BE=91=E4=BF=AE=E6=94=B9=205.=E5=BA=93=E5=AD=98?= =?UTF-8?q?=E5=90=88=E5=B9=B6=E5=8A=9F=E8=83=BD=206.=E7=AC=AC=E4=BA=8C?= =?UTF-8?q?=E7=A7=8D=E5=85=A5=E5=BA=93=E6=A8=A1=E5=BC=8F=207.WMS=E6=96=B0?= =?UTF-8?q?=E5=A2=9E=E5=9B=BE=E6=A0=87=E7=BB=9F=E8=AE=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- dev_wms_client/package-lock.json | 59 ++ dev_wms_client/package.json | 1 + dev_wms_client/src/api/excel.js | 9 + dev_wms_client/src/api/goods.js | 8 + dev_wms_client/src/api/stock.js | 27 +- dev_wms_client/src/api/task.js | 41 ++ dev_wms_client/src/http/request.js | 1 + dev_wms_client/src/layout/batchInventory.vue | 46 +- dev_wms_client/src/layout/excelInventory.vue | 426 ++++++++++++ dev_wms_client/src/layout/goods.vue | 291 +++++++-- dev_wms_client/src/layout/pda.vue | 36 +- dev_wms_client/src/layout/pdaSecondIn.vue | 566 ++++++++++++++++ dev_wms_client/src/layout/stockMix.vue | 616 ++++++++++++++++++ dev_wms_client/src/layout/stockMixConfirm.vue | 402 ++++++++++++ dev_wms_client/src/layout/wmsChart.vue | 343 ++++++++++ dev_wms_client/src/router/index.js | 14 + dev_wms_client/src/views/PDACenter.vue | 60 ++ dev_wms_client/src/views/SystemCenter.vue | 7 +- .../constant/enums/wms/WmsInvTypeEnums.java | 4 +- .../controller/wms/DataController.java | 66 ++ .../controller/wms/ExcelController.java | 16 + .../controller/wms/StockController.java | 21 + .../controller/wms/TaskController.java | 54 ++ .../controller/wms/TaskQueryController.java | 11 + .../excelTemplate/GoodsImportTemplate.java | 29 + .../easypoi/service/IExportExcelEasyPoi.java | 2 + .../easypoi/service/IImportExcelEasyPoi.java | 2 + .../base/impl/BaseExportExcelEasyPoi.java | 15 +- .../serviceImpl/ImportExcelEasyPoi.java | 122 +++- .../request/wms/InventoryConfirmRequest.java | 14 + .../dto/request/wms/InventoryRequest.java | 6 + .../dto/request/wms/MixStockRequest.java | 23 + .../com/wms_main/model/po/TAppInventory.java | 3 + .../java/com/wms_main/model/po/TAppOuts.java | 4 + .../model/vo/wms/InventoryConfirmVo.java | 6 + .../com/wms_main/model/vo/wms/OutsVo.java | 8 + .../repository/http/entity/HttpRequest.java | 46 +- .../repository/utils/StringUtils.java | 22 + .../api/serviceImpl/EwmApiServiceImpl.java | 112 +++- .../serviceImpl/ConveyTaskServiceImpl.java | 1 + .../serviceImpl/StackerTaskServiceImpl.java | 126 ++-- .../controller/IDataControllerService.java | 5 + .../controller/IStockControllerService.java | 16 + .../controller/ITaskControllerService.java | 29 + .../ITaskQueryControllerService.java | 3 + .../DataControllerServiceImpl.java | 138 ++++ .../StockControllerServiceImpl.java | 137 ++++ .../TaskControllerServiceImpl.java | 514 ++++++++++++++- .../TaskQueryControllerServiceImpl.java | 51 ++ .../serviceImpl/OutsExecutorServiceImpl.java | 5 +- .../src/main/resources/application.yml | 8 +- 51 files changed, 4423 insertions(+), 149 deletions(-) create mode 100644 dev_wms_client/src/layout/excelInventory.vue create mode 100644 dev_wms_client/src/layout/pdaSecondIn.vue create mode 100644 dev_wms_client/src/layout/stockMix.vue create mode 100644 dev_wms_client/src/layout/stockMixConfirm.vue create mode 100644 dev_wms_client/src/layout/wmsChart.vue create mode 100644 dev_wms_client/src/views/PDACenter.vue create mode 100644 dev_wms_serve/src/main/java/com/wms_main/excel/easypoi/excelTemplate/GoodsImportTemplate.java create mode 100644 dev_wms_serve/src/main/java/com/wms_main/model/dto/request/wms/MixStockRequest.java diff --git a/dev_wms_client/package-lock.json b/dev_wms_client/package-lock.json index 5e94a4d..1f24ff9 100644 --- a/dev_wms_client/package-lock.json +++ b/dev_wms_client/package-lock.json @@ -11,6 +11,7 @@ "@element-plus/icons-vue": "^2.3.1", "axios": "^1.3.3", "core-js": "^3.8.3", + "echarts": "^5.4.3", "element-plus": "^2.9.8", "file-saver": "^2.0.5", "moment": "^2.29.4", @@ -5558,6 +5559,20 @@ "node": ">=6.0.0" } }, + "node_modules/echarts": { + "version": "5.4.3", + "resolved": "https://registry.npmmirror.com/echarts/-/echarts-5.4.3.tgz", + "integrity": "sha512-mYKxLxhzy6zyTi/FaEbJMOZU1ULGEQHaeIeuMR5L+JnJTpz+YR03mnnpBhbR4+UYJAgiXgpyTVLffPAjOTLkZA==", + "dependencies": { + "tslib": "2.3.0", + "zrender": "5.4.4" + } + }, + "node_modules/echarts/node_modules/tslib": { + "version": "2.3.0", + "resolved": "https://registry.npmmirror.com/tslib/-/tslib-2.3.0.tgz", + "integrity": "sha512-N82ooyxVNm6h1riLCoyS9e3fuJ3AMG2zIZs2Gd1ATcSFjSA23Q0fzjjZeh0jbJvWVDZ0cJT8yaNNaaXHzueNjg==" + }, "node_modules/ee-first": { "version": "1.1.1", "resolved": "https://registry.npmmirror.com/ee-first/-/ee-first-1.1.1.tgz", @@ -12223,6 +12238,19 @@ "engines": { "node": ">=10" } + }, + "node_modules/zrender": { + "version": "5.4.4", + "resolved": "https://registry.npmmirror.com/zrender/-/zrender-5.4.4.tgz", + "integrity": "sha512-0VxCNJ7AGOMCWeHVyTrGzUgrK4asT4ml9PEkeGirAkKNYXYzoPJCLvmyfdoOXcjTHPs10OZVMfD1Rwg16AZyYw==", + "dependencies": { + "tslib": "2.3.0" + } + }, + "node_modules/zrender/node_modules/tslib": { + "version": "2.3.0", + "resolved": "https://registry.npmmirror.com/tslib/-/tslib-2.3.0.tgz", + "integrity": "sha512-N82ooyxVNm6h1riLCoyS9e3fuJ3AMG2zIZs2Gd1ATcSFjSA23Q0fzjjZeh0jbJvWVDZ0cJT8yaNNaaXHzueNjg==" } }, "dependencies": { @@ -16416,6 +16444,22 @@ "integrity": "sha512-wK2sCs4feiiJeFXn3zvY0p41mdU5VUgbgs1rNsc/y5ngFUijdWd+iIN8eoyuZHKB8xN6BL4PdWmzqFmxNg6V2w==", "dev": true }, + "echarts": { + "version": "5.4.3", + "resolved": "https://registry.npmmirror.com/echarts/-/echarts-5.4.3.tgz", + "integrity": "sha512-mYKxLxhzy6zyTi/FaEbJMOZU1ULGEQHaeIeuMR5L+JnJTpz+YR03mnnpBhbR4+UYJAgiXgpyTVLffPAjOTLkZA==", + "requires": { + "tslib": "2.3.0", + "zrender": "5.4.4" + }, + "dependencies": { + "tslib": { + "version": "2.3.0", + "resolved": "https://registry.npmmirror.com/tslib/-/tslib-2.3.0.tgz", + "integrity": "sha512-N82ooyxVNm6h1riLCoyS9e3fuJ3AMG2zIZs2Gd1ATcSFjSA23Q0fzjjZeh0jbJvWVDZ0cJT8yaNNaaXHzueNjg==" + } + } + }, "ee-first": { "version": "1.1.1", "resolved": "https://registry.npmmirror.com/ee-first/-/ee-first-1.1.1.tgz", @@ -21683,6 +21727,21 @@ "resolved": "https://registry.npmmirror.com/yargs-parser/-/yargs-parser-20.2.9.tgz", "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", "dev": true + }, + "zrender": { + "version": "5.4.4", + "resolved": "https://registry.npmmirror.com/zrender/-/zrender-5.4.4.tgz", + "integrity": "sha512-0VxCNJ7AGOMCWeHVyTrGzUgrK4asT4ml9PEkeGirAkKNYXYzoPJCLvmyfdoOXcjTHPs10OZVMfD1Rwg16AZyYw==", + "requires": { + "tslib": "2.3.0" + }, + "dependencies": { + "tslib": { + "version": "2.3.0", + "resolved": "https://registry.npmmirror.com/tslib/-/tslib-2.3.0.tgz", + "integrity": "sha512-N82ooyxVNm6h1riLCoyS9e3fuJ3AMG2zIZs2Gd1ATcSFjSA23Q0fzjjZeh0jbJvWVDZ0cJT8yaNNaaXHzueNjg==" + } + } } } } diff --git a/dev_wms_client/package.json b/dev_wms_client/package.json index f57c645..95f6388 100644 --- a/dev_wms_client/package.json +++ b/dev_wms_client/package.json @@ -11,6 +11,7 @@ "@element-plus/icons-vue": "^2.3.1", "axios": "^1.3.3", "core-js": "^3.8.3", + "echarts": "^5.4.3", "element-plus": "^2.9.8", "file-saver": "^2.0.5", "moment": "^2.29.4", diff --git a/dev_wms_client/src/api/excel.js b/dev_wms_client/src/api/excel.js index 1ebda5e..68b5122 100644 --- a/dev_wms_client/src/api/excel.js +++ b/dev_wms_client/src/api/excel.js @@ -172,4 +172,13 @@ export const exportLocationDetailExcel = (data) => { data: data, timeout: 600000 }) +} +// 导入盘点任务 +export const importInventoryExcel = (data) => { + return request({ + url: '/excel/importGoods', // 根据你提供的地址修改 + method: 'post', + data: data, + timeout: 600000 + }) } \ No newline at end of file diff --git a/dev_wms_client/src/api/goods.js b/dev_wms_client/src/api/goods.js index 3691170..20a532d 100644 --- a/dev_wms_client/src/api/goods.js +++ b/dev_wms_client/src/api/goods.js @@ -1,5 +1,13 @@ import request from "@/http/request"; +export function batchIssueTasks(params) { + return request({ + url: '/taskQuery/updateOutsTaskStatus', + method: 'post', + data: params + }) +} + /** * 分页查找物料 */ diff --git a/dev_wms_client/src/api/stock.js b/dev_wms_client/src/api/stock.js index afffb7e..9739e31 100644 --- a/dev_wms_client/src/api/stock.js +++ b/dev_wms_client/src/api/stock.js @@ -8,6 +8,14 @@ export const queryStocksByPage = (params) => { }) } +export const querySpecialEmptyStocksForMix = (params) => { + return request({ + url: '/stock/querySpecialEmptyStocksForMix', + method: 'post', + data: params + }) +} + export const queryStocks = (params) => { return request({ url: '/stock/queryStocks', @@ -16,10 +24,27 @@ export const queryStocks = (params) => { }) } +export const queryStocksBySpecial = (params) => { + return request({ + url: '/stock/queryStocksBySpecial', + method: 'post', + data: params + }) +} + +export const querySpecialEmptyStocksForPDA = (params) => { + return request({ + url: '/stock/querySpecialEmptyStocksForPDA', + method: 'post', + data: params + }) +} + export const queryStockUpdateByPage = (params) => { return request({ url: '/stock/queryStockUpdateByPage', method: 'post', data: params }) -} \ No newline at end of file +} + diff --git a/dev_wms_client/src/api/task.js b/dev_wms_client/src/api/task.js index a25c400..3c99613 100644 --- a/dev_wms_client/src/api/task.js +++ b/dev_wms_client/src/api/task.js @@ -73,6 +73,14 @@ export const confirmCurrentTask = (params, config = {}) => { }) } +export const mergeStocks = (params) => { + return request({ + url: '/task/createInventoryFromMixStock', + method: 'post', + data: params + }) +} + export const confirmCurrentTaskByPDA = (params) => { return request({ @@ -115,6 +123,39 @@ export const confirmInventory = (params) => { data: params }) } +export const confirmMixStock = (params) => { + return request({ + url: '/task/confirmMixStock', + method: 'post', + data: params, + timeout: 30000 + }) +} + +export const pdaOutTask = (params) => { + return request({ + url: '/task/pdaOutTask', + method: 'post', + data: params + }) +} + +export const queryInOutBoundStatistics = (params) => { + return request({ + url: '/board/queryInOutBoundStatistics', + method: 'post', + data: params + }) +} + +export const queryStockAgeDistribution = (params) => { + return request({ + url: '/board/queryStockAgeDistribution', + method: 'get', + data: params + }) +} + // 获取缺料数量 export const getGoodsLackQty = (params) => { return request({ diff --git a/dev_wms_client/src/http/request.js b/dev_wms_client/src/http/request.js index 485004c..7c7698e 100644 --- a/dev_wms_client/src/http/request.js +++ b/dev_wms_client/src/http/request.js @@ -2,6 +2,7 @@ import axios from 'axios' const request = axios.create({ baseURL: 'http://172.18.222.253:12315/wms', + //baseURL: 'http://172.18.222.253:12306/wms', //baseURL: 'http://localhost:12315/wms', timeout: 5000 }) diff --git a/dev_wms_client/src/layout/batchInventory.vue b/dev_wms_client/src/layout/batchInventory.vue index 0a9946a..bfe9da4 100644 --- a/dev_wms_client/src/layout/batchInventory.vue +++ b/dev_wms_client/src/layout/batchInventory.vue @@ -274,6 +274,7 @@ const handleSelectionChange = (row) => { } } +// 处理全选变化 // 处理全选变化 const handleSelectAllChange = (val) => { displayStocks.value.forEach(row => { @@ -281,12 +282,15 @@ const handleSelectAllChange = (val) => { }) if (val) { - // 全选 + // 全选 - 添加到选中数组 selectedRows.value = [...displayStocks.value] } else { - // 取消全选 + // 取消全选 - 清空选中数组 selectedRows.value = [] } + + // 强制更新视图 + displayStocks.value = [...displayStocks.value] } // 处理批量盘点按钮点击 const handleBatchInventory = () => { @@ -320,14 +324,13 @@ const confirmBatchInventory = () => { if (res.data.code === 0) { ElMessage.success('批量盘点成功'); showBatchInventoryDialog.value = false; - search(); // 刷新表格数据 - // 清空选择 - selectedRows.value.forEach(row => { - row.checked = false; - }); - selectedRows.value = []; - isSelectAll.value = false; + // 先清空选择状态 + selectedRows.value = [] + isSelectAll.value = false + + // 然后刷新数据 + search(); // 刷新表格数据 } else { ElMessage.error(res.data.message); } @@ -336,6 +339,18 @@ const confirmBatchInventory = () => { }); }; +// 重置选择状态 +const resetSelection = () => { + selectedRows.value = [] + isSelectAll.value = false + if (displayStocks.value && displayStocks.value.length > 0) { + displayStocks.value.forEach(row => { + row.checked = false + }) + // 强制更新视图 + displayStocks.value = [...displayStocks.value] + } +} // 查询 const search = () => { @@ -356,11 +371,21 @@ const search = () => { const data = response.data console.log(data) if (data != null) { - displayStocks.value = data.lists + // 重置每行的checked状态 + displayStocks.value = data.lists.map(item => ({ + ...item, + checked: false + })) baseTableQuery.total = data.total + + // 重置选择状态 + selectedRows.value = [] + isSelectAll.value = false } else { displayStocks.value = [] baseTableQuery.total = 0 + selectedRows.value = [] + isSelectAll.value = false } } else { ElMessage.error(response.message) @@ -381,6 +406,7 @@ const clearQuery = () => { stockQuery.fromDate = null, stockQuery.toDate = null, stockQuery.noUseDays = null + resetSelection() } const loadAllGoodsInfo = () => { const request = { diff --git a/dev_wms_client/src/layout/excelInventory.vue b/dev_wms_client/src/layout/excelInventory.vue new file mode 100644 index 0000000..373e7c2 --- /dev/null +++ b/dev_wms_client/src/layout/excelInventory.vue @@ -0,0 +1,426 @@ + + + + diff --git a/dev_wms_client/src/layout/goods.vue b/dev_wms_client/src/layout/goods.vue index b83a1b3..5336f00 100644 --- a/dev_wms_client/src/layout/goods.vue +++ b/dev_wms_client/src/layout/goods.vue @@ -15,24 +15,30 @@ - - - - + + + +
查询 清除输入 + + + 批量下发({{ selectedRows.length }}) + - - - - - - - - + + + + + + + +
@@ -46,6 +52,7 @@