Appearance
入库操作管理
**本文引用的文件** - [StoreInOrdersDo.java](file://lemes-cloud/lemes-business-devicemate/lemes-service-dm-store/lemes-service-dm-store-common/src/main/java/com/lenovo/lemes/service/dm/store/entity/StoreInOrdersDo.java) - [StoreInOrderDetailDo.java](file://lemes-cloud/lemes-business-devicemate/lemes-service-dm-store/lemes-service-dm-store-common/src/main/java/com/lenovo/lemes/service/dm/store/entity/StoreInOrderDetailDo.java) - [StoreInOrdersController.java](file://lemes-cloud/lemes-business-devicemate/lemes-service-dm-store/lemes-service-dm-store-server/src/main/java/com/lenovo/lemes/service/dm/store/controller/StoreInOrdersController.java) - [StoreInOrderDetailController.java](file://lemes-cloud/lemes-business-devicemate/lemes-service-dm-store/lemes-service-dm-store-server/src/main/java/com/lenovo/lemes/service/dm/store/controller/StoreInOrderDetailController.java) - [StoreInOrdersService.java](file://lemes-cloud/lemes-business-devicemate/lemes-service-dm-store/lemes-service-dm-store-server/src/main/java/com/lenovo/lemes/service/dm/store/service/StoreInOrdersService.java) - [StoreInOrderDetailService.java](file://lemes-cloud/lemes-business-devicemate/lemes-service-dm-store/lemes-service-dm-store-server/src/main/java/com/lenovo/lemes/service/dm/store/service/StoreInOrderDetailService.java) - [StoreInOrdersServiceImpl.java](file://lemes-cloud/lemes-business-devicemate/lemes-service-dm-store/lemes-service-dm-store-server/src/main/java/com/lenovo/lemes/service/dm/store/service/impl/StoreInOrdersServiceImpl.java) - [StoreInOrderDetailServiceImpl.java](file://lemes-cloud/lemes-business-devicemate/lemes-service-dm-store/lemes-service-dm-store-server/src/main/java/com/lenovo/lemes/service/dm/store/service/impl/StoreInOrderDetailServiceImpl.java) - [StoreInOrdersMapper.java](file://lemes-cloud/lemes-business-devicemate/lemes-service-dm-store/lemes-service-dm-store-server/src/main/java/com/lenovo/lemes/service/dm/store/mapper/StoreInOrdersMapper.java) - [StoreInOrderDetailMapper.java](file://lemes-cloud/lemes-business-devicemate/lemes-service-dm-store/lemes-service-dm-store-server/src/main/java/com/lenovo/lemes/service/dm/store/mapper/StoreInOrderDetailMapper.java) - [storeInOrder.js](file://dm/lemes-web/src/views/devicemate/api/inventory/storeInOrder/storeInOrder.js) - [storeInGiveBack.js](file://dm/lemes-web/src/views/devicemate/api/inventory/storeInGiveBack/storeInGiveBack.js) - [storeInGiveBack.vue](file://dm/lemes-web/src/views/devicemate/inventory/storeInGiveBack/storeInGiveBack.vue) - [storeInGiveBackDetail.vue](file://dm/lemes-web/src/views/devicemate/inventory/storeInGiveBack/storeInGiveBackDetail.vue) - [batch.vue](file://dm/lemes-web/src/views/devicemate/inventory/stockMain/batch.vue) - [ordinary.vue](file://dm/lemes-web/src/views/devicemate/inventory/stockMain/ordinary.vue) - [series.vue](file://dm/lemes-web/src/views/devicemate/inventory/stockMain/series.vue) - [module.js](file://dm/lemes-web/src/store/modules/module.js)目录
简介
本技术文档围绕“入库操作管理”主题,系统化梳理入库订单与入库明细实体的数据结构、业务含义与处理机制,并结合前后端交互与仓储业务实践,给出完整的入库流程(创建、审批、收货确认、质检、过账)与关键校验规则、库存更新策略、批次与有效期管理建议。文档同时提供面向开发者的API设计思路、流程图与时序图,帮助快速理解并实现复杂入库业务。
项目结构
本项目采用多模块分层架构:前端使用 Vue/UniApp 开发,后端以 Spring Cloud 微服务为核心,仓储模块位于 lemes-business-devicemate 的 lemes-service-dm-store 子模块中,包含实体、Mapper、Service、Controller 层以及前端视图与接口封装。
图表来源
- StoreInOrdersDo.java:1-82
- StoreInOrderDetailDo.java:1-130
- StoreInOrdersController.java
- StoreInOrderDetailController.java
- StoreInOrdersService.java
- StoreInOrderDetailService.java
- StoreInOrdersServiceImpl.java
- StoreInOrderDetailServiceImpl.java
- StoreInOrdersMapper.java
- StoreInOrderDetailMapper.java
章节来源
核心组件
- 入库订单实体 StoreInOrdersDo:承载入库单主表信息,包括入库单号、入库类型、仓库代号、入库状态、执行人、审批相关字段、借还相关信息等。
- 入库明细实体 StoreInOrderDetailDo:承载入库单明细信息,包括物料信息、数量、单价、批次号、有效期、PO/PR/借用单号、处理状态与数量、好坏品标识、供应商等。
章节来源
架构总览
后端采用标准的 MVC 分层:Controller 接受请求,Service 编排业务,Mapper 访问数据库;前端通过统一接口封装调用 Controller,页面负责交互与状态管理。
图表来源
- StoreInOrdersDo.java:1-82
- StoreInOrderDetailDo.java:1-130
- StoreInOrdersController.java
- StoreInOrderDetailController.java
- StoreInOrdersService.java
- StoreInOrderDetailService.java
- StoreInOrdersServiceImpl.java
- StoreInOrderDetailServiceImpl.java
- StoreInOrdersMapper.java
- StoreInOrderDetailMapper.java
详细组件分析
入库订单实体 StoreInOrdersDo
字段概览与业务含义
- 入库单号:唯一标识一张入库单据,贯穿审批、收货、质检、过账全流程。
- 入库类型:区分采购入库、退货入库、盘盈入库、调拨入库等场景。
- 仓库代号:归属仓库,决定库存记账与库位分配。
- 入库状态:用于流程推进与界面提示,如草稿、待收货、待质检、待过账、已完成等。
- 执行人/编号:当前处理该入库单的人员与工号。
- 创建人编号:记录创建者。
- 审批单号/状态:与工作流对接,驱动审批流程。
- 借还相关:当为借用归还场景时,记录借用人、产品线、归还单号等。
关键约束与建议
- 入库类型需与明细中的来源单据类型一致(如PO/PR/借用单)。
- 入库状态应遵循状态机流转,避免跨状态跳转。
- 审批状态与入库状态保持同步,防止并发问题。
章节来源
入库明细实体 StoreInOrderDetailDo
字段概览与业务含义
- 主单关联:入库单号、仓库代号、物料代号。
- 库存定位:产品线、库区、库位、序列号、箱号、包装数。
- 数量与价格:入库数量、申请数量、单价、寿命数。
- 有效期:商品保质期/寿命截止日期,用于到期预警与先进先出。
- 来源单据:PO单号、PR单号、借用单号。
- 质检与处理:处理状态、处理数量、好坏品标识。
- 供应商:便于质量追溯与供应商考核。
关键约束与建议
- 入库数量与申请数量应匹配或按规则允许偏差。
- 有效期必填且不得早于当前日期(可配置宽限期)。
- 好/坏品区分影响后续质检与处置流程。
- 库位分配需满足库位容量与兼容性规则。
章节来源
不同入库场景实现
- 采购入库
- 来源:PO/PR单据,单价来自采购订单。
- 流程:创建入库单 -> 收货确认 -> 质检 -> 过账 -> 更新库存与批次。
- 退货入库
- 来源:客户/供应商退货,通常为借用归还或直运退货。
- 流程:创建退货入库单 -> 收货确认 -> 质检(区分好/坏品)-> 过账 -> 更新库存。
- 盘盈入库
- 来源:盘点差异调整,通常为非收货场景。
- 流程:发起盘盈调整单 -> 审批 -> 过账 -> 增加库存。
- 调拨入库
- 来源:内部调拨出库单的对应入库。
- 流程:生成调拨入库单 -> 收货确认 -> 过账 -> 更新目标库位库存。
章节来源
- storeInOrder.js:53-59
- storeInGiveBack.js:19-53
- storeInGiveBack.vue:276-559
- storeInGiveBackDetail.vue:503-559
入库操作API设计(后端)
- 入库订单接口
- 创建/编辑入库单:接收入库类型、仓库代号、执行人、来源单据号等,返回入库单号。
- 提交审批:触发工作流,更新审批状态与入库状态。
- 收货确认:校验数量与来源单据一致性,锁定库位。
- 质检:更新明细的好/坏品标识与处理状态。
- 过账:生成库存流水、批次记录、库位占用释放。
- 入库明细接口
- 新增/删除/修改明细行。
- 批量导入与校验(序列号/箱号/有效期/单价等)。
- 查询明细与汇总统计。
章节来源
数据验证规则
- 基础校验
- 入库单号唯一性、长度与格式。
- 仓库代号存在性与权限校验。
- 入库类型枚举值校验。
- 入库状态状态机校验。
- 明细校验
- 物料代号存在性与规格匹配。
- 入库数量与申请数量差额在允许范围。
- 有效期不早于当前日期(可配置宽限期)。
- 序列号/箱号唯一性与重复校验。
- 好/坏品标识与处理状态联动。
- 库位与批次
- 库位容量校验与兼容性检查。
- 批次号唯一性与有效期联动。
章节来源
库存更新策略与批次管理
- 库存更新策略
- 过账时按“仓库+物料+库位+批次+有效期”维度增加可用库存。
- 好品与坏品分别记账,坏品库存可用于报废流程。
- 批量导入时支持事务回滚,失败整批拒绝。
- 批次与有效期控制
- 批次号与有效期作为库存快照的一部分,用于先进先出与到期预警。
- 到期前N天触发预警,支持导出与提醒。
- 库位分配
- 自动分配优先选择空闲库位与兼容库位,支持手动指定。
章节来源
前端交互与状态管理
- 页面与接口
- 退货入库页面与详情页:提交入库、获取明细、状态切换。
- 批次/普通/序列号移库页面:库区/库位选择与变更。
- Vuex 状态
- storeInOrderNo:当前入库单号。
- storeInOrderId:当前入库单ID。
- 清除与设置方法:保证页面切换时状态正确。
章节来源
- storeInGiveBack.vue:276-559
- storeInGiveBackDetail.vue:503-559
- batch.vue:134-156
- ordinary.vue:81-103
- series.vue:119-141
- module.js:60-69
依赖关系分析
- 控制器到服务:Controller 仅负责参数解析与结果封装,具体业务由 Service 实现。
- 服务到实现:ServiceImpl 调用 Mapper,编排事务与校验。
- 实体到映射:实体注解绑定数据库表,Mapper 定义 SQL 或使用通用 CRUD。
- 前端到后端:前端通过统一接口封装调用 Controller,页面状态通过 Vuex 管理。
图表来源
- StoreInOrdersController.java
- StoreInOrderDetailController.java
- StoreInOrdersService.java
- StoreInOrderDetailService.java
- StoreInOrdersServiceImpl.java
- StoreInOrderDetailServiceImpl.java
- StoreInOrdersMapper.java
- StoreInOrderDetailMapper.java
章节来源
性能考虑
- 批量导入与过账
- 使用批处理与事务,减少数据库往返;失败整批回滚。
- 库位与批次查询
- 对常用查询建立索引(仓库+物料+库位+批次+有效期),避免全表扫描。
- 前端渲染
- 明细列表分页加载,大字段延迟渲染,提升首屏性能。
- 并发控制
- 入库单状态更新采用乐观锁或版本号,避免并发覆盖。
- 缓存策略
- 仓库/库区/库位基础数据缓存,降低频繁查询成本。
故障排查指南
- 常见问题
- 入库单状态异常:检查审批流程是否完成,状态机是否正确推进。
- 明细数量不一致:核对来源单据与收货数量,确认是否允许偏差。
- 有效期校验失败:确认输入日期与系统当前日期关系,检查宽限期配置。
- 库位分配失败:检查库位容量与兼容性,必要时手动调整。
- 前端调试
- 使用 Vuex 状态检查当前入库单号与ID,确保页面间状态一致。
- 在退货入库详情页刷新明细,确认后端数据已同步。
章节来源
结论
本文从实体定义、流程设计、前后端交互、数据校验与库存策略等方面,全面阐述了入库操作管理的关键点。通过明确的状态机、严格的校验规则与可扩展的批次/有效期管理,能够有效支撑多种入库场景并保障数据一致性与可追溯性。建议在生产环境中进一步完善工作流集成、异常监控与审计日志,以提升系统的稳定性与可观测性。
附录
- 业务场景示例
- 采购入库:从PO生成入库单,收货后质检,最后过账记账。
- 退货入库:根据退货单创建入库单,区分好/坏品,过账后更新库存。
- 盘盈入库:基于盘点差异生成调整单,审批后直接过账。
- 调拨入库:依据调拨出库单生成对应入库单,完成收货与过账。
- API 设计要点
- 请求幂等:入库单创建与过账需支持幂等,避免重复记账。
- 错误码规范:将校验错误、状态错误、并发错误分类编码,便于前端提示与日志追踪。
- 批量接口:提供批量导入与批量过账接口,配合事务与回滚策略。