Appearance
库存管理表结构
**本文引用的文件** - [store.sql](file://docs/ddl/store.sql) - [device.sql](file://docs/ddl/device.sql) - [StockMainDo.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/StockMainDo.java) - [StockDetailDo.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/StockDetailDo.java) - [SafeStockDo.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/SafeStockDo.java) - [StoreMainDo.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/StoreMainDo.java) - [StockMainServiceImpl.java](file://lemes-job-devicemate/lemes-job-devicemate-executor/src/main/java/com/lenovo/lemes/job/devicemate/executor/service/store/impl/StockMainServiceImpl.java) - [StockValueStatisticsServiceImpl.java](file://lemes-job-devicemate/lemes-job-devicemate-executor/src/main/java/com/lenovo/lemes/job/devicemate/executor/service/store/impl/StockValueStatisticsServiceImpl.java) - [StockMainMapper.xml](file://lemes-job-devicemate/lemes-job-devicemate-executor/src/main/resources/mapper/StockMainMapper.xml) - [StockMainVo.java](file://lemes-job-devicemate/lemes-job-devicemate-executor/src/main/java/com/lenovo/lemes/job/devicemate/executor/model/store/StockMainVo.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) - [StoreOutDetailDo.java](file://lemes-job-devicemate/lemes-job-devicemate-executor/src/main/java/com/lenovo/lemes/job/devicemate/executor/model/store/StoreOutDetailDo.java)目录
简介
本文件面向库存管理相关表的数据库架构,围绕库存主表(stock_main)与库存明细表(stock_detail)展开,系统性说明以下内容:
- 库存主表的核心字段设计:库存总量、在库库存、其他来源库存等
- 库存明细表的批次管理、序列号跟踪、有效期控制、冻结数量等机制
- 库存计算逻辑、并发控制策略、事务处理流程
- 库存状态管理、安全库存设置、库存调整机制等业务规则
- 库存查询优化、索引设计建议与性能调优方案
- 典型业务场景:库存盘点、移库操作、损耗处理的数据处理流程
项目结构
本项目的库存相关DDL定义位于docs/ddl目录,库存实体模型位于lemes-cloud与lemes-job-devicemate两个模块中,分别对应后端服务层与作业执行器层。
图表来源
- store.sql
- device.sql
- StockMainDo.java
- StockDetailDo.java
- SafeStockDo.java
- StoreMainDo.java
- StockMainServiceImpl.java
- StockValueStatisticsServiceImpl.java
- StockMainMapper.xml
- StockMainVo.java
- StoreInOrdersVo.java
- StoreOutDetailVo.java
- StoreOutDetailDo.java
章节来源
核心组件
本节聚焦库存主表与明细表的字段设计与职责边界,并结合业务实体类进行说明。
- 库存主表(stock_main)
- 字段要点:台账代号、仓库/库区/库位/物料/产品线维度、库存总量、在库库存、其他来源库存等
- 作用:聚合各库位/库区/仓库的库存汇总,支撑库存查询与统计
- 库存明细表(stock_detail)
- 字段要点:台账代号、序列号、箱号、包装数量、剩余库存数量、单价、有效期、剩余寿命数、入库时间、冻结数量、是否在库标识、工厂代号等
- 作用:承载批次、序列号、有效期、冻结等细粒度库存信息,支持先进先出、序列号追踪、冻结解冻等业务
章节来源
架构总览
库存管理涉及三层:DDL定义层(表结构)、实体模型层(服务/执行器)、业务服务层(统计/事务)。
图表来源
- store.sql
- device.sql
- StockMainDo.java
- StockDetailDo.java
- SafeStockDo.java
- StoreMainDo.java
- StockMainServiceImpl.java
- StockValueStatisticsServiceImpl.java
- StockMainMapper.xml
- StockMainVo.java
- StoreInOrdersVo.java
- StoreOutDetailVo.java
- StoreOutDetailDo.java
详细组件分析
库存主表(stock_main)字段设计与业务含义
- 关键字段
- 台账代号(mainNo):唯一标识一个库存台账
- 仓库/库区/库位(storeNo/storeAreaNo/storeBinNo):物理定位
- 物料(partNo)与产品线(productLineNo):业务维度
- 库存总量(stockNumber):该台账下总库存数量
- 在库库存(inStockNumber):当前可发料/可用库存
- 其他来源库存(stockOtherNumber):如LSSC等外部来源库存
- 设计意图
- 聚合维度明确,便于按仓库/库区/库位/物料/产品线进行库存汇总
- 与明细表通过台账代号关联,保证主细一致性
章节来源
库存明细表(stock_detail)字段设计与业务机制
- 关键字段
- 台账代号(mainNo):与stock_main关联
- 序列号(seriesNumber):序列号管理
- 箱号(caseNumber):包装层级管理
- 包装数量(packageNumber):单箱数量
- 剩余库存数量(inStockNumber):该明细的可用数量
- 单价(unitPrice):成本核算
- 有效期(usefulLife)与剩余寿命数(lifeTimeCount):寿命件/有效期件控制
- 入库时间(storeInTime):先进先出依据
- 冻结数量(blockedNumber):冻结/解冻控制
- 是否在库(isStore):物理在库状态
- 工厂代号(factoryNo):多工厂隔离
- 业务机制
- 批次管理:通过箱号/序列号/有效期/入库时间实现批次追踪
- 序列号跟踪:序列号唯一性与发放/回收闭环
- 有效期控制:结合usefulLife与lifeTimeCount进行临期/过期预警与处置
- 冻结数量:用于借出/报损/盘点等场景的临时占用
章节来源
安全库存与仓库主数据
- 安全库存表(safe_stock)
- 字段:仓库代号(storeNo)、物料代号(partNo)、最高库存(maxStock)、最低库存(minStock)、安全库存(safeStock)
- 用途:支撑库存预警与补货策略
- 仓库主数据表(store_main)
- 字段:仓库代号/编码/名称、所属部门、仓库类型、管理员、位置、有效性等
- 用途:仓库维度的基础资料与权限控制
章节来源
库存计算逻辑与事务处理
- 计算逻辑
- stock_main的stockNumber通常由stock_detail的inStockNumber按台账聚合得出
- 在库库存(inStockNumber)与冻结数量(blockedNumber)共同决定实际可用数
- 对于寿命件/有效期件,需结合lifeTimeCount/usefulLife进行临期/过期判定
- 并发控制与事务
- 服务层使用注解驱动的分布式事务(DSTransactional),确保库存增删改的原子性
- 通过Mapper XML中的查询条件与聚合逻辑,避免脏读与幻读
- 事务处理流程(示例:库存统计)
- 从stock_main查询当日数据
- 计算在库/在线库存金额
- 写入库存价值统计表
图表来源
章节来源
典型业务场景数据流
库存盘点
- 数据来源:stock_detail按台账/库位/序列号/箱号进行盘点
- 判定逻辑:结合usefulLife/lifeTimeCount判断临期/过期;blockedNumber用于排除冻结
- 结果更新:根据盘点差异更新stock_main与stock_detail的inStockNumber
图表来源
移库操作
- 数据来源:源库位stock_detail减少,目标库位stock_detail增加
- 关键点:保持序列号/箱号/有效期不变,仅变更库位字段
- 事务:使用DSTransactional保证源减目增的原子性
图表来源
损耗处理
- 触发条件:报损单据(part_scrap_orders/part_scrap_order_detail)产生
- 处理方式:减少stock_detail的inStockNumber,必要时同步stock_main
- 成本核算:结合unitPrice计算损耗金额
章节来源
依赖关系分析
- 表间依赖
- stock_main与stock_detail:一对多,通过mainNo关联
- safe_stock与stock_main:按仓库/物料维度进行安全库存匹配
- store_main与stock_main:按仓库维度进行仓库级统计
- 实体与服务依赖
- StockMainDo/StockDetailDo作为MyBatis实体映射stock_*表
- StockMainServiceImpl负责stock_main的聚合与事务
- StockValueStatisticsServiceImpl负责库存金额统计与安全库存对比
图表来源
章节来源
性能考虑
- 索引设计建议
- stock_main:按仓库/库区/库位/物料/产品线建立组合索引,加速分组与聚合
- stock_detail:按mainNo、序列号、箱号、有效期、入库时间建立索引,支撑FIFO与批次查询
- safe_stock:按storeNo+partNo建立唯一索引,避免重复配置
- store_main:按storeNo建立主键索引,保障仓库维度查询
- 查询优化
- 使用Mapper XML中的聚合查询替代应用侧聚合,降低网络与内存开销
- 对高频查询字段建立覆盖索引,减少回表
- 事务与并发
- 使用DSTransactional确保库存变更的原子性
- 对热点库存采用乐观锁或行级锁策略,避免超卖
- 统计与归档
- 定期将历史明细归档至冷存储,降低热表扫描压力
- 分页查询与延迟加载,避免一次性拉取大量明细
[本节为通用性能指导,不直接分析具体文件]
故障排查指南
- 常见问题
- 库存不一致:检查stock_main与stock_detail的聚合逻辑是否正确,确认事务是否提交
- 冻结库存无法使用:核查blockedNumber与isStore字段状态
- 有效期/寿命件异常:核对usefulLife与lifeTimeCount的更新时机
- 排查步骤
- 核对stock_detail的inStockNumber与blockedNumber之和是否等于packageNumber
- 校验stock_main的stockNumber是否与明细按台账求和一致
- 检查Mapper XML中的聚合条件与时间范围
- 相关实现参考
- 统一使用DSTransactional注解的事务服务
- 通过StockMainMapper.xml的SQL进行批量统计与校验
章节来源
结论
本文基于DDL与实体模型,系统梳理了库存主表与明细表的字段设计、业务机制与服务实现,给出了并发控制、事务处理、查询优化与典型业务场景的数据流。建议在生产环境中:
- 明确批次/序列号/有效期的业务规则并严格执行
- 建立完善的索引与监控体系,保障查询与统计性能
- 强化事务与一致性校验,定期进行库存对账与差异分析
[本节为总结性内容,不直接分析具体文件]
附录
- 关键实体与表的对应关系
- StockMainDo → stock_main
- StockDetailDo → stock_detail
- SafeStockDo → safe_stock
- StoreMainDo → store_main
- 关键查询与统计
- stock_main按日聚合查询:参见StockMainMapper.xml
- 库存金额统计:参见StockValueStatisticsServiceImpl
章节来源