Appearance
调拨转移管理
**本文引用的文件** - [transfers.vue](file://dm/lemes-web/src/views/devicemate/inventory/transfers/transfers.vue) - [transfers.js](file://dm/lemes-web/src/views/devicemate/api/inventory/transfers/transfers.js) - [StoreInOrderDetailDo.java](file://lemes-job-devicemate/lemes-job-devicemate-executor/src/main/java/com/lenovo/lemes/job/devicemate/executor/model/store/StoreInOrderDetailDo.java) - [StoreOutDetailDo.java](file://lemes-job-devicemate/lemes-job-devicemate-executor/src/main/java/com/lenovo/lemes/job/devicemate/executor/model/store/StoreOutDetailDo.java) - [StoreInOrdersVo.java](file://lemes-job-devicemate/lemes-job-devicemate-executor/src/main/java/com/lenovo/lemes/job/devicemate/executor/model/store/StoreInOrdersVo.java) - [StoreOutDetailVo.java](file://lemes-job-devicemate/lemes-job-devicemate-executor/src/main/java/com/lenovo/lemes/job/devicemate/executor/model/store/StoreOutDetailVo.java) - [StoreInOrderDetailMapper.java](file://lemes-job-devicemate/lemes-job-devicemate-executor/src/main/java/com/lenovo/lemes/job/devicemate/executor/mapper/store/StoreInOrderDetailMapper.java) - [StoreInOrderDetailMapper.xml](file://lemes-job-devicemate/lemes-job-devicemate-executor/src/main/resources/mapper/StoreInOrderDetailMapper.xml) - [StoreOutOrderDetailMapper.xml](file://lemes-job-devicemate/lemes-job-devicemate-executor/src/main/resources/mapper/StoreOutOrderDetailMapper.xml) - [ExceptionCode.java](file://lemes-cloud/lemes-business-devicemate/lemes-service-dm-common/lemes-service-dm-common-common/src/main/java/com/lenovo/lemes/service/dm/common/client/tools/entity/constant/ExceptionCode.java)目录
引言
本技术文档围绕“调拨转移管理”模块展开,聚焦于调拨订单与调拨明细的数据模型、业务流程与前后端交互接口设计。通过对前端页面、API 定义以及后端数据模型与查询映射的系统梳理,帮助读者快速理解从“调拨申请—审批—执行—确认”的完整闭环,并掌握不同调拨场景(仓库间调拨、部门间转移、客户退回)的实现要点与最佳实践。
项目结构
调拨转移管理涉及三层:前端界面层、前端接口层、后端数据层(DO/VO/Mapper/XML)。前端通过 Vue 页面与 API 层交互,后端通过 MyBatis 映射器访问数据库表,完成调拨订单与明细的查询与统计。
图表来源
- transfers.vue:1-450
- transfers.js:1-183
- StoreInOrderDetailMapper.xml:1-19
- StoreOutOrderDetailMapper.xml:1-19
章节来源
核心组件
- 前端界面组件:负责筛选、分页、导出、路由跳转到调拨详情与编辑页面。
- 前端接口封装:统一管理调拨列表、仓库权限、明细、提交、接收、导出等 API 请求。
- 后端数据模型:StoreInOrderDetailDo/StoreOutDetailDo 描述调拨明细字段;StoreInOrdersVo/StoreOutDetailVo 作为查询结果视图对象。
- 后端映射器与 SQL:通过 XML 映射器查询当日满足条件的调拨明细,供前端展示与统计。
章节来源
- transfers.vue:120-444
- transfers.js:26-182
- StoreInOrderDetailDo.java:1-88
- StoreOutDetailDo.java:1-62
- StoreInOrdersVo.java:1-93
- StoreOutDetailVo.java:80-115
架构总览
调拨管理的端到端流程由前端页面发起请求,经由接口封装调用后端接口,后端通过映射器执行 SQL 查询,返回视图对象给前端渲染。调拨明细支持按日期范围、仓库、状态、类型等多维筛选,并提供导出能力。
图表来源
详细组件分析
组件A:调拨列表页面(前端)
- 功能职责
- 支持按调拨单号、调出/调入仓库、状态、类型、日期范围筛选。
- 分页加载与多选删除、导出功能。
- 路由跳转至调拨详情或编辑页,区分“申请/执行/确认”阶段。
- 关键交互
- 研究/清空筛选条件、分页变更、导出动作均通过方法触发。
- 字典项(状态、类型)动态加载,保障展示一致性。
- 数据绑定
- 表格列包含单号、状态、调出/调入仓库、经办人、创建时间等字段。
图表来源
章节来源
组件B:调拨API封装(前端)
- 功能职责
- 封装调拨列表、仓库权限、明细、提交、接收、导出等接口调用。
- 统一封装下载服务,支持 Excel 导出。
- 关键接口
- 列表分页、仓库列表、字典获取、调拨信息/明细查询、新增/删除、提交/接收、单号生成/删除、导出等。
图表来源
章节来源
组件C:调拨明细数据模型(后端)
- StoreInOrderDetailDo:描述调拨入库明细的关键字段(单号、仓库/库区/库位、物料、序列号/箱号、数量、单价、寿命数/有效期等),用于入库侧的明细建模。
- StoreOutDetailDo:描述调拨出库明细的关键字段(出库单号、物料、库区/库位、序列号/箱号、出库数量、单价、有效期、寿命数、申请数量、库存数量、成本核算、处理状态/数量、仓库、可用库存等),用于出库侧的明细建模。
- StoreInOrdersVo / StoreOutDetailVo:作为查询结果视图对象,承载前端展示所需字段(如借用人、仓库名称、状态、执行人、创建人、序列号、箱号、包装数量、入库/出库数量、申请数量、单位、单价、总价、寿命数、有效期、PO/PR/借用单号、处理状态/数量、是否好品/坏品、归还单号、供应商代号等)。
图表来源
- StoreInOrderDetailDo.java:1-88
- StoreOutDetailDo.java:1-62
- StoreInOrdersVo.java:1-93
- StoreOutDetailVo.java:80-115
章节来源
- StoreInOrderDetailDo.java:1-88
- StoreOutDetailDo.java:1-62
- StoreInOrdersVo.java:185-298
- StoreOutDetailVo.java:80-115
组件D:调拨明细查询映射(后端)
- StoreInOrderDetailMapper.searchList:通过 XML 映射器查询当日满足条件的入库调拨明细,用于前端“当日入库调拨”场景的展示。
- StoreOutOrderDetailMapper.findList:通过 XML 映射器查询当日满足条件的出库调拨明细,用于前端“当日出库调拨”场景的展示。
- 过滤条件
- 入库:入库类型=1、入库状态=3、创建日期为当日。
- 出库:出库状态=1、出库数量>0、非特定收货类型、创建日期为当日。
图表来源
章节来源
- StoreInOrderDetailMapper.java:1-15
- StoreInOrderDetailMapper.xml:1-19
- StoreOutOrderDetailMapper.xml:1-19
组件E:调拨业务流程(概念示意)
以下流程图展示调拨从申请到确认的典型步骤,结合前端页面与后端接口的职责划分:
说明
- 申请:前端填写调拨单并提交,后端校验(如数量、序列号/箱号、有效期/寿命数等)。
- 执行:调出仓库根据明细拣选、包装、运输;调入仓库接收、核对、登记。
- 确认:双方确认无误后完成,系统更新库存与状态。
- 同步:异常或错误时,通过异常码提示并阻断后续流程。
(本图为概念流程,不直接对应具体源码文件)
依赖关系分析
- 前端依赖
- 页面依赖接口封装,接口封装依赖服务配置与下载服务。
- 页面依赖字典与仓库权限数据,以保证筛选与权限控制。
- 后端依赖
- 映射器依赖数据库表结构与视图对象,视图对象承载前端展示字段。
- 异常码集中定义于公共模块,用于约束业务规则与错误提示。
图表来源
- transfers.vue:120-444
- transfers.js:1-183
- StoreOutOrderDetailMapper.xml:1-19
- StoreOutDetailDo.java:1-62
- StoreInOrderDetailDo.java:1-88
- StoreInOrdersVo.java:1-93
- StoreOutDetailVo.java:80-115
- ExceptionCode.java:6807-6821
章节来源
性能考量
- 查询性能
- 使用索引覆盖常见筛选字段(仓库、状态、日期、单号)可显著降低扫描成本。
- 采用“当日”过滤减少结果集规模,避免全表扫描。
- 分页与缓存
- 前端分页参数合理设置,避免一次性拉取大量数据。
- 对高频字典与仓库列表进行本地缓存,减少重复请求。
- 导出性能
- 导出接口应限制最大导出条数与并发,避免内存溢出。
- 对大文件导出采用流式输出与分段写入。
故障排查指南
- 常见异常码与提示
- 出库数量不能大于申请数量:EX90141
- 出库数量不能大于实际可用库存:EX90142
- 调拨数量不能大于库存数量:EX90158
- 归还数量必须和申请数量保持一致:EX90159
- 价格不能为空:EX90160
- 移入数量大于剩余库存数量:EX90206
- 移入数量不能为0:EX90207
- 排查步骤
- 核对前端传参与后端校验逻辑,定位异常码来源。
- 检查库存台账与可用库存字段(practicalUsableStockNumber)是否正确。
- 确认序列号/箱号/有效期/寿命数等必填字段是否完整。
章节来源
结论
调拨转移管理模块通过清晰的前后端分工与规范的数据模型,实现了从申请、审批、执行到确认的完整业务闭环。前端提供灵活的筛选与导出能力,后端通过映射器与视图对象支撑高效查询与展示。结合异常码约束与最佳实践,可在保证数据准确性的同时提升整体效率与用户体验。
附录
API 接口清单(前端封装)
- 列表分页:POST /inventory/transfers/page
- 仓库权限:POST /inventory/transfers/storePermissionPage
- 仓库列表:POST /inventory/transfers/storeMainPage
- 调拨信息:GET /inventory/transfers/transferInfo/
- 调拨明细:GET /inventory/transfers/transferDetail
- 新增调拨:POST /inventory/transfers/addTransfer
- 删除调拨:GET /inventory/transfers/delTransfer/
- 提交出库:POST /inventory/transfers/submitOut
- 接收调拨:POST /inventory/transfers/receive
- 单号生成:GET /inventory/transfers/orderNo
- 删除新增单号:GET /inventory/transfers/delOrderNo/
- 调拨列表导出:GET /inventory/transfers/transferExcel
- 调出导出:GET /inventory/transfers/outTransferExcel
- 调入导出:GET /inventory/transfers/inTransferExcel?transferOrderNo=
- 导入调拨:POST /inventory/transfers/importExcel
章节来源