Files
GEAR-OA/script/sql/mysql/item/gear_stock_io_order.sql
2026-04-23 10:42:05 +08:00

103 lines
7.5 KiB
SQL
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

-- ================================
-- 出入库单据控制层
-- 目标:通过“单据 -> 完成 -> 执行”控制库存变更,避免直接操作出入库流水
-- 说明:
-- 1) 业务先创建出入库单据,再由单据驱动实际 gear_stock_io / gear_stock_io_detail
-- 2) 单据仅保留两种状态:进行中、已完成
-- 3) 通过关联字段保留来源单、回退单、执行单之间的链路
-- ================================
DROP TABLE IF EXISTS gear_stock_io_order;
CREATE TABLE gear_stock_io_order (
order_id bigint(20) NOT NULL COMMENT '单据ID',
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_no varchar(64) DEFAULT '' COMMENT '来源单据编号',
source_order_id bigint(20) DEFAULT NULL COMMENT '来源单据ID业务单ID',
responsible_id bigint(20) DEFAULT NULL COMMENT '责任人ID',
responsible_name varchar(64) DEFAULT '' COMMENT '责任人姓名',
plan_arrival_time datetime COMMENT '预计到货时间',
actual_arrival_time datetime COMMENT '实际到货时间',
plan_finish_time datetime COMMENT '预计完成时间',
actual_finish_time datetime COMMENT '实际完成时间',
delay_minutes int(11) NOT NULL DEFAULT 0 COMMENT '延迟分钟数',
delay_reason varchar(500) DEFAULT '' COMMENT '延迟原因',
delay_status char(1) NOT NULL DEFAULT '0' COMMENT '延迟状态0正常 1超时 2已处理',
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已完成',
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 '执行人',
execute_time datetime COMMENT '执行时间',
source_io_id bigint(20) DEFAULT NULL COMMENT '实际出入库单IDgear_stock_io.stock_io_id',
total_qty decimal(18,4) NOT NULL DEFAULT 0.0000 COMMENT '单据总数量',
remark varchar(500) DEFAULT NULL COMMENT '备注',
del_flag char(1) NOT NULL DEFAULT '0' COMMENT '删除标志0存在 2删除',
create_by varchar(64) DEFAULT '' COMMENT '创建者',
create_time datetime COMMENT '创建时间',
update_by varchar(64) DEFAULT '' COMMENT '更新者',
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_responsible_id (responsible_id),
KEY idx_delay_status (delay_status),
KEY idx_create_time (create_time),
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;
CREATE TABLE gear_stock_io_order_detail (
detail_id bigint(20) NOT NULL COMMENT '明细ID',
order_id bigint(20) NOT NULL COMMENT '单据ID',
line_no int(11) NOT NULL DEFAULT 1 COMMENT '行号',
item_type varchar(32) NOT NULL COMMENT '物料类型product/material/other',
item_id bigint(20) NOT NULL COMMENT '物料ID',
item_name varchar(128) DEFAULT '' COMMENT '物料名称快照',
spec_name varchar(128) DEFAULT '' COMMENT '规格型号快照',
warehouse_id bigint(20) DEFAULT NULL COMMENT '入库仓库ID',
from_warehouse_id bigint(20) DEFAULT NULL COMMENT '出库仓库ID',
quantity decimal(18,4) NOT NULL DEFAULT 0.0000 COMMENT '数量',
unit varchar(32) DEFAULT '' COMMENT '单位',
batch_no varchar(64) DEFAULT '' COMMENT '批次号',
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 '创建者',
create_time datetime COMMENT '创建时间',
update_by varchar(64) DEFAULT '' COMMENT '更新者',
update_time datetime COMMENT '更新时间',
PRIMARY KEY (detail_id),
UNIQUE KEY uk_order_line (order_id, line_no),
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_reversal_detail_id (reversal_detail_id)
) ENGINE=InnoDB COMMENT='出入库单据明细表';
-- 建议:
-- 1) 业务层只允许通过单据驱动库存变更,禁止直接改 gear_stock / gear_stock_log
-- 2) 审核通过后,统一调用执行入口生成实际 gear_stock_io / gear_stock_io_detail
-- 3) 已执行错误时,通过反向单据进行冲销,不直接修改历史流水