Skip to content

出入库交易表结构

**本文引用的文件** - [store.sql](file://docs/ddl/store.sql) - [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.java](file://lemes-job-devicemate/lemes-job-devicemate-executor/src/main/java/com/lenovo/lemes/job/devicemate/executor/mapper/store/StoreOutOrderDetailMapper.java) - [StoreOutOrderDetailMapper.xml](file://lemes-job-devicemate/lemes-job-devicemate-executor/src/main/resources/mapper/StoreOutOrderDetailMapper.xml) - [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) - [StockValueStatisticsServiceImpl.java](file://lemes-job-devicemate/lemes-job-devicemate-executor/src/main/java/com/lenovo/lemes/job/devicemate/executor/service/store/impl/StockValueStatisticsServiceImpl.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) - [FlowClient.java](file://lemes-cloud/lemes-business-devicemate/lemes-service-dm-workflow/lemes-service-dm-workflow-common/src/main/java/com/lenovo/lemes/service/dm/workflow/client/feign/FlowClient.java) - [NextTaskDTO.java](file://lemes-cloud/lemes-business-devicemate/lemes-service-dm-workflow/lemes-service-dm-workflow-common/src/main/java/com/lenovo/lemes/service/dm/workflow/entity/dto/NextTaskDTO.java) - [TempApproveDTO.java](file://lemes-cloud/lemes-business-devicemate/lemes-service-dm-workflow/lemes-service-dm-workflow-common/src/main/java/com/lenovo/lemes/service/dm/workflow/entity/dto/TempApproveDTO.java)

目录

  1. 简介
  2. 项目结构
  3. 核心组件
  4. 架构概览
  5. 详细组件分析
  6. 依赖关系分析
  7. 性能考虑
  8. 故障排查指南
  9. 结论
  10. 附录

简介

本文件面向出入库交易相关表的数据库架构与业务实现,重点解析以下核心表结构与流程:

  • 入库单表 store_in_orders 及其明细 store_in_order_detail
  • 出库单表 store_out_orders 及其明细 store_out_order_detail
  • 交易流水表 store_transaction_record 的数据记录机制与审计追踪
  • 审批流程集成点与状态流转
  • 触发器设计思路、数据校验规则与异常处理机制
  • 实际业务场景示例与最佳实践建议

项目结构

围绕出入库交易的核心对象与映射关系如下:

  • 数据层 DDL 定义于 docs/ddl/store.sql,涵盖出入库单据、明细、流水、库存台账等表
  • 作业执行器模块通过 MyBatis 映射访问 store_in_orders/store_out_orders 及其明细
  • 仓储服务模块提供库存统计与事务一致性保障
  • 工作流模块提供审批流程对接接口

图表来源

章节来源

核心组件

  • 入库单据与明细
    • store_in_orders:单据主表,包含入库类型、仓库、状态、审批信息等
    • store_in_order_detail:单据明细,包含物料、库区库位、数量、单价、有效期等
  • 出库单据与明细
    • store_out_orders:单据主表,包含出库类型、申请人、部门、状态、审批信息等
    • store_out_order_detail:单据明细,包含物料、库区库位、出库数量、单价、费用科目等
  • 交易流水
    • store_transaction_record:统一记录交易类型、数量、金额、来源去向、审批关联等,用于审计追踪
  • 库存与统计
    • stock_main/stock_detail:库存台账与明细,支撑可用库存、冻结数量、有效期等
    • StockValueStatisticsServiceImpl:按日统计在库/在线库存金额与入库金额,确保事务一致性

章节来源

架构概览

出入库交易从“单据创建—明细登记—库存更新—流水记录—审批联动—统计汇总”的完整链路如下:

图表来源

详细组件分析

入库单表 store_in_orders

  • 主要字段
    • 单据编号:store_in_order_no(唯一约束)
    • 入库类型:store_in_type(数据字典)
    • 仓库:store_no
    • 状态:store_in_status(数据字典)
    • 执行人/创建人:excutor/excutor_no/creator_no
    • 审批:audit_no/audit_status
    • 关联信息:borrow_user/borrow_user_no/borrow_product_line_no/return_order_no
  • 业务要点
    • 支持与借用/归还单据关联,便于追溯
    • 审批状态与业务状态解耦,便于流程集成
  • 表结构参考

章节来源

入库明细表 store_in_order_detail

  • 主要字段
    • 关联单号:store_in_order_no
    • 物料:part_no/product_line_no
    • 仓库/库区/库位:store_no/store_area_no/store_bin_no
    • 数量与金额:store_in_number/unit_price
    • 序列号/箱号:series_number/case_number/package_number
    • 有效期/寿命数:useful_life/life_time_count
    • 申请与来源:apply_number/po_number/pr_number/supplier_no
    • 处理状态:process_status/process_number/add_line/part_type
  • 业务要点
    • 支持序列号/箱号精细化管理
    • 与 PO/PR/供应商关联,便于溯源
  • 表结构参考

章节来源

出库单表 store_out_orders

  • 主要字段
    • 单据编号:store_out_order_no(唯一约束)
    • 出库类型:store_out_type(数据字典)
    • 仓库:store_no
    • 状态:store_out_status(数据字典)
    • 申请人/部门:applicant_name/applicant_no/product_line_no/applicant_dept_no
    • 申请与出库时间:apply_time/store_out_time
    • 总数量:apply_total_number/store_out_total_number
    • 审批:audit_no/audit_status
    • 个人申请单号:personal_application_order_no
  • 业务要点
    • 支持个人借用/领用/调拨等多类型出库
    • 与审批流程强关联,支持撤销与状态回退
  • 表结构参考

章节来源

出库明细表 store_out_order_detail

  • 主要字段
    • 关联单号:store_out_order_no
    • 物料:part_no/product_line_no
    • 仓库/库区/库位:store_no/store_area_no/store_bin_no
    • 出库数量与单价:store_out_number/unit_price
    • 领用类型/归还日期:recipient_type/return_date
    • 费用科目/库存:cost_account/stock_number
    • 处理状态:process_status/process_number/add_line
    • 实际可用库存:practical_usable_stock_number
  • 业务要点
    • 领用类型区分“借用/领用/内部调拨”等
    • 实际可用库存用于风控与提示
  • 表结构参考

章节来源

交易流水表 store_transaction_record

  • 主要字段
    • 关联业务单号:order_no
    • 事务类型:transaction_type(入库/出库/调拨/报废等)
    • 来源/去向:from_store_no/from_store_area_no/from_store_bin_no
    • 去向:to_store_no/to_store_area_no/to_store_bin_no
    • 数量/单价/总价:transaction_number/price/total_price
    • 人员与审批:start_user/start_user_no/start_user_manager/audit_no/audit_status
    • 关联单据:po_number/pr_number/borrow_product_line_no
  • 业务要点
    • 统一审计入口,支持跨单据追踪
    • 与审批流程绑定,便于合规审计
  • 表结构参考

章节来源

审批流程集成

  • 接口能力
    • 审批:approveProcess
    • 获取审批节点:getBusinessAuditNodes
    • 撤销流程:cancelProcess
  • 参数模型
    • NextTaskDTO:活动ID、替换审批人、部门ID等
    • TempApproveDTO:审批意见、审批结果、多级审批标记等
  • 业务要点
    • 入库/出库单据可选择性接入审批流程
    • 审批状态与单据状态解耦,避免阻塞业务

章节来源

数据访问与查询

  • 入库明细查询(MyBatis)
    • 通过 StoreInOrderDetailMapper.searchList 聚合入库单与明细,筛选指定类型与状态并限定时间范围
  • 出库明细查询(MyBatis)
    • 通过 StoreOutOrderDetailMapper.findList 聚合出库单与明细,过滤非个人类型、数量大于0、状态为“已执行”且限定时间范围
  • 对象模型
    • StoreInOrdersVo/StoreOutDetailVo:封装查询结果与扩展字段(如仓库/库区/库位名称、物料规格、控制类型等)

章节来源

事务一致性与统计

  • 统一事务注解
    • @DSTransactional:确保库存统计与交易记录在同一个事务中完成
  • 统计维度
    • 在库/在线库存金额:基于 stock_main 与单价计算
    • 入库金额:基于 store_in_orders 明细单价与数量计算
  • 统计实现
    • StockValueStatisticsServiceImpl:按日聚合生成统计记录

章节来源

触发器设计与数据校验

  • 设计思路
    • 入库/出库完成后,自动写入 store_transaction_record,确保交易可追溯
    • 校验逻辑建议在应用层进行(如可用库存检查、序列号唯一性、有效期校验),必要时可在数据库层增加约束或触发器
  • 异常处理
    • 使用 @DSTransactional 确保失败回滚
    • 审批流程异常时,单据状态与审批状态保持一致,避免脏数据

章节来源

依赖关系分析

图表来源

章节来源

性能考虑

  • 查询优化
    • 入库/出库明细查询通过限定时间范围与状态,减少扫描量
    • 建议在 store_in_orders/store_out_orders 上建立索引以加速状态与类型过滤
  • 事务优化
    • 统一事务注解确保批量统计与写入的一致性,避免中间态
  • 存储优化
    • 交易流水按日聚合统计,避免高频写入对明细表造成压力

故障排查指南

  • 常见问题
    • 审批状态不同步:检查 FlowClient 接口调用与单据状态字段映射
    • 统计金额不准确:核对 StockValueStatisticsServiceImpl 的单价与数量来源
    • 出库可用库存不足:检查 practical_usable_stock_number 与库存明细冻结数量
  • 排查步骤
    • 核对 store_transaction_record 是否正确生成
    • 核对 store_in_order_detail/store_out_order_detail 的数量与单价
    • 核对 stock_main/stock_detail 的库存变化是否符合预期

章节来源

结论

本文档系统梳理了出入库交易相关表的结构与业务实现,明确了单据主表与明细表的职责边界、交易流水的审计机制、审批流程的集成方式以及事务一致性保障策略。通过统一的查询与统计机制,能够有效支撑业务运营与合规审计。

附录

  • 业务场景示例
    • 入库场景:采购到货 → 入库单创建 → 明细登记 → 交易流水生成 → 库存更新 → 审批(可选)→ 统计汇总
    • 出库场景:个人借用/领用 → 出库单创建 → 明细登记 → 交易流水生成 → 库存更新 → 审批(可选)→ 统计汇总
  • 最佳实践
    • 明确入库/出库类型与状态字典,确保业务语义清晰
    • 严格校验序列号/箱号与有效期,避免库存错配
    • 审批流程与单据状态分离,提升系统韧性
    • 交易流水作为审计底账,必须与业务单据强关联