设计文档完善状态机

This commit is contained in:
2026-04-23 10:22:08 +08:00
parent 774fe86941
commit 2aa0ae83c2
2 changed files with 272 additions and 133 deletions

View File

@@ -1,9 +1,10 @@
-- ================================
-- 出入库单据控制层(新增)
-- 出入库单据控制层
-- 目标:通过“单据 -> 审核 -> 执行”控制库存变更,避免直接操作出入库流水
-- 说明:
-- 1) 业务先创建出入库单,再由单据生成实际 gear_stock_io / gear_stock_io_detail
-- 2) 单据状态控制提交、审核、作废与执行结果
-- 3) 通过 source_io_id 关联已生成的实际出入库记录,确保单据可追溯
-- 1) 业务先创建出入库单,再由单据驱动实际 gear_stock_io / gear_stock_io_detail
-- 2) 单据支持草稿、提交、审核、执行、作废、冲销
-- 3) 通过关联字段保留来源单、回退单、执行单之间的链路
-- ================================
DROP TABLE IF EXISTS gear_stock_io_order;
@@ -12,13 +13,20 @@ CREATE TABLE gear_stock_io_order (
order_code varchar(64) NOT NULL COMMENT '单据编号(唯一)',
io_type char(1) NOT NULL COMMENT '出入库类型I入库 O出库 T调拨',
biz_type varchar(32) NOT NULL COMMENT '业务类型purchase/sale/return/transfer/other',
source_type varchar(32) DEFAULT '' COMMENT '来源单据类型(采购单/销售单/报工单等)',
source_type varchar(32) DEFAULT '' COMMENT '来源单据类型(采购单/销售单/退货单/调拨单等)',
source_no varchar(64) DEFAULT '' COMMENT '来源单据编号',
source_order_id bigint(20) DEFAULT NULL COMMENT '来源单据ID业务单ID',
warehouse_id bigint(20) DEFAULT NULL COMMENT '主仓库ID',
from_warehouse_id bigint(20) DEFAULT NULL COMMENT '调出仓库ID',
to_warehouse_id bigint(20) DEFAULT NULL COMMENT '调入仓库ID',
status char(1) NOT NULL DEFAULT '0' COMMENT '单据状态0草稿 1已提交 2已审核 3已执行 4已作废',
status char(1) NOT NULL DEFAULT '0' COMMENT '单据状态0草稿 1已提交 2已审核 3已执行 4已作废 5已冲销',
exec_flag char(1) NOT NULL DEFAULT '0' COMMENT '执行标志0未执行 1已执行',
reversal_flag char(1) NOT NULL DEFAULT '0' COMMENT '是否冲销单0否 1是',
reversal_order_id bigint(20) DEFAULT NULL COMMENT '对应原单据ID',
reversal_reason varchar(500) DEFAULT '' COMMENT '冲销原因',
reversal_time datetime COMMENT '冲销时间',
cancel_reason varchar(500) DEFAULT '' COMMENT '作废原因',
cancel_time datetime COMMENT '作废时间',
audit_by varchar(64) DEFAULT '' COMMENT '审核人',
audit_time datetime COMMENT '审核时间',
execute_by varchar(64) DEFAULT '' COMMENT '执行人',
@@ -33,12 +41,15 @@ CREATE TABLE gear_stock_io_order (
update_time datetime COMMENT '更新时间',
PRIMARY KEY (order_id),
UNIQUE KEY uk_order_code (order_code),
UNIQUE KEY uk_reversal_order_id (reversal_order_id),
KEY idx_status (status),
KEY idx_exec_flag (exec_flag),
KEY idx_biz_type (biz_type),
KEY idx_source_no (source_no),
KEY idx_source_order_id (source_order_id),
KEY idx_create_time (create_time),
KEY idx_source_io_id (source_io_id)
KEY idx_source_io_id (source_io_id),
KEY idx_reversal_flag (reversal_flag)
) ENGINE=InnoDB COMMENT='出入库单据表';
DROP TABLE IF EXISTS gear_stock_io_order_detail;
@@ -58,6 +69,7 @@ CREATE TABLE gear_stock_io_order_detail (
unit_price decimal(18,4) NOT NULL DEFAULT 0.0000 COMMENT '单价快照',
amount decimal(18,4) NOT NULL DEFAULT 0.0000 COMMENT '金额快照',
source_detail_no varchar(64) DEFAULT '' COMMENT '来源明细编号',
reversal_detail_id bigint(20) DEFAULT NULL COMMENT '对应冲销明细ID',
remark varchar(500) DEFAULT NULL COMMENT '备注',
del_flag char(1) NOT NULL DEFAULT '0' COMMENT '删除标志0存在 2删除',
create_by varchar(64) DEFAULT '' COMMENT '创建者',
@@ -69,11 +81,11 @@ CREATE TABLE gear_stock_io_order_detail (
KEY idx_order_id (order_id),
KEY idx_item_id (item_id),
KEY idx_batch_no (batch_no),
KEY idx_source_detail_no (source_detail_no)
KEY idx_source_detail_no (source_detail_no),
KEY idx_reversal_detail_id (reversal_detail_id)
) ENGINE=InnoDB COMMENT='出入库单据明细表';
-- 建议补充的业务索引说明
-- 1) 先保存 gear_stock_io_order/gear_stock_io_order_detail 为草稿
-- 2) 提交后进入审核
-- 3) 审核通过后生成实际 gear_stock_io / gear_stock_io_detail并回写 source_io_id
-- 4) 如果需要严格防重复执行,可在业务层通过 order_code + status / source_io_id 控制幂等
-- 建议:
-- 1) 业务层只允许通过单据驱动库存变更,禁止直接改 gear_stock / gear_stock_log
-- 2) 审核通过后,统一调用执行入口生成实际 gear_stock_io / gear_stock_io_detail
-- 3) 已执行错误时,通过反向单据进行冲销,不直接修改历史流水