98 lines
6.0 KiB
SQL
98 lines
6.0 KiB
SQL
-- 二期入库测量与 OCR 维护增量(只增不删,可重复执行)。
|
|
-- 执行顺序:phase2-inbound-schema.sql 后执行本文件;已有二期库只需执行本文件。
|
|
SET NAMES utf8mb4;
|
|
USE baiyue_firstleg;
|
|
|
|
DROP PROCEDURE IF EXISTS phase2_measure_add_column;
|
|
DELIMITER $$
|
|
CREATE PROCEDURE phase2_measure_add_column(
|
|
IN p_table_name VARCHAR(64),
|
|
IN p_column_name VARCHAR(64),
|
|
IN p_column_definition TEXT
|
|
)
|
|
BEGIN
|
|
IF NOT EXISTS (
|
|
SELECT 1 FROM information_schema.columns
|
|
WHERE table_schema = DATABASE()
|
|
AND table_name = p_table_name
|
|
AND column_name = p_column_name
|
|
) THEN
|
|
SET @phase2_measure_sql = CONCAT(
|
|
'ALTER TABLE `', REPLACE(p_table_name, '`', '``'),
|
|
'` ADD COLUMN `', REPLACE(p_column_name, '`', '``'), '` ', p_column_definition
|
|
);
|
|
PREPARE phase2_measure_statement FROM @phase2_measure_sql;
|
|
EXECUTE phase2_measure_statement;
|
|
DEALLOCATE PREPARE phase2_measure_statement;
|
|
END IF;
|
|
END$$
|
|
DELIMITER ;
|
|
|
|
CALL phase2_measure_add_column('fl_inbound_measurement', 'original_document_no',
|
|
'VARCHAR(64) NULL COMMENT ''原单据号码快照'' AFTER raw_payload_json');
|
|
CALL phase2_measure_add_column('fl_inbound_measurement', 'original_gross_weight_kg',
|
|
'DECIMAL(18,3) NULL COMMENT ''原单据毛重kg'' AFTER original_document_no');
|
|
CALL phase2_measure_add_column('fl_inbound_measurement', 'original_volume_cbm',
|
|
'DECIMAL(18,4) NULL COMMENT ''原单据体积或材积m3'' AFTER original_gross_weight_kg');
|
|
CALL phase2_measure_add_column('fl_inbound_measurement', 'actual_goods_name',
|
|
'VARCHAR(255) NULL COMMENT ''实际品名'' AFTER original_volume_cbm');
|
|
CALL phase2_measure_add_column('fl_inbound_measurement', 'volume_weight_kg',
|
|
'DECIMAL(18,3) NULL COMMENT ''本批次总材积重kg'' AFTER total_volume_cbm');
|
|
CALL phase2_measure_add_column('fl_inbound_measurement', 'version',
|
|
'INT NOT NULL DEFAULT 0 COMMENT ''乐观锁版本号'' AFTER updated_at');
|
|
|
|
CALL phase2_measure_add_column('fl_inbound_measurement_item', 'box_specification',
|
|
'VARCHAR(64) NOT NULL DEFAULT '''' COMMENT ''箱规标识'' AFTER item_no');
|
|
CALL phase2_measure_add_column('fl_inbound_measurement_item', 'girth_cm',
|
|
'DECIMAL(12,3) NOT NULL DEFAULT 0 COMMENT ''周长cm,规则为长+2*(宽+高)'' AFTER height_cm');
|
|
CALL phase2_measure_add_column('fl_inbound_measurement_item', 'unit_volume_cbm',
|
|
'DECIMAL(18,4) NOT NULL DEFAULT 0 COMMENT ''单箱业务体积m3'' AFTER volume_cbm');
|
|
CALL phase2_measure_add_column('fl_inbound_measurement_item', 'total_volume_cbm',
|
|
'DECIMAL(18,4) NOT NULL DEFAULT 0 COMMENT ''本箱规总体积m3'' AFTER volume_cbm');
|
|
CALL phase2_measure_add_column('fl_inbound_measurement_item', 'volume_weight_kg',
|
|
'DECIMAL(18,3) NOT NULL DEFAULT 0 COMMENT ''本箱规材积重kg'' AFTER total_volume_cbm');
|
|
CALL phase2_measure_add_column('fl_inbound_measurement_item', 'over_limit_warning',
|
|
'VARCHAR(500) NULL COMMENT ''超线提醒快照'' AFTER source_image_file_id');
|
|
CALL phase2_measure_add_column('fl_inbound_measurement_item', 'outer_length_cm',
|
|
'DECIMAL(12,3) NULL COMMENT ''外箱规长度cm'' AFTER over_limit_warning');
|
|
CALL phase2_measure_add_column('fl_inbound_measurement_item', 'outer_width_cm',
|
|
'DECIMAL(12,3) NULL COMMENT ''外箱规宽度cm'' AFTER outer_length_cm');
|
|
CALL phase2_measure_add_column('fl_inbound_measurement_item', 'outer_height_cm',
|
|
'DECIMAL(12,3) NULL COMMENT ''外箱规高度cm'' AFTER outer_width_cm');
|
|
CALL phase2_measure_add_column('fl_inbound_measurement_item', 'manual_outer_length_cm',
|
|
'DECIMAL(12,3) NULL COMMENT ''仓库人工外箱规长度计算基数cm'' AFTER outer_height_cm');
|
|
CALL phase2_measure_add_column('fl_inbound_measurement_item', 'manual_outer_width_cm',
|
|
'DECIMAL(12,3) NULL COMMENT ''仓库人工外箱规宽度计算基数cm'' AFTER manual_outer_length_cm');
|
|
CALL phase2_measure_add_column('fl_inbound_measurement_item', 'manual_outer_height_cm',
|
|
'DECIMAL(12,3) NULL COMMENT ''仓库人工外箱规高度计算基数cm'' AFTER manual_outer_width_cm');
|
|
CALL phase2_measure_add_column('fl_inbound_measurement_item', 'charge_rule_id',
|
|
'BIGINT UNSIGNED NULL COMMENT ''该测量明细绑定的客户计费规则ID'' AFTER volume_weight_kg');
|
|
CALL phase2_measure_add_column('fl_inbound_measurement_item', 'coefficient_mode',
|
|
'VARCHAR(16) NULL COMMENT ''系数模式快照:ADD或MULTIPLY'' AFTER charge_rule_id');
|
|
|
|
DROP PROCEDURE IF EXISTS phase2_measure_add_column;
|
|
|
|
CREATE TABLE IF NOT EXISTS fl_inbound_weight_revision (
|
|
id BIGINT UNSIGNED NOT NULL COMMENT 'OCR重量修订记录ID',
|
|
tenant_id BIGINT UNSIGNED NOT NULL COMMENT '客户ID和数据隔离键',
|
|
inbound_id BIGINT UNSIGNED NOT NULL COMMENT '入库单ID',
|
|
weight_result_id BIGINT UNSIGNED NOT NULL COMMENT 'OCR重量结果ID',
|
|
revision_no INT UNSIGNED NOT NULL COMMENT '结果版本号,与乐观锁版本一致',
|
|
action VARCHAR(24) NOT NULL COMMENT '动作:CORRECT或CONFIRM',
|
|
before_weight_value DECIMAL(18,3) NULL COMMENT '变更前原单位重量',
|
|
before_weight_unit VARCHAR(8) NULL COMMENT '变更前单位',
|
|
after_weight_value DECIMAL(18,3) NULL COMMENT '变更后原单位重量',
|
|
after_weight_unit VARCHAR(8) NULL COMMENT '变更后单位',
|
|
gross_weight_kg DECIMAL(18,3) NULL COMMENT '确认时统一换算后的含托盘毛重kg',
|
|
net_weight_kg DECIMAL(18,3) NULL COMMENT '确认毛重扣除托盘皮重后的货物净重kg',
|
|
reason VARCHAR(500) NULL COMMENT '人工修正原因',
|
|
operator_id BIGINT UNSIGNED NOT NULL COMMENT '操作人ID',
|
|
operator_name VARCHAR(64) NULL COMMENT '操作人名称快照',
|
|
operated_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '操作时间',
|
|
PRIMARY KEY (id),
|
|
UNIQUE KEY uk_weight_revision_no (tenant_id, weight_result_id, revision_no),
|
|
KEY idx_weight_revision_time (tenant_id, inbound_id, operated_at),
|
|
CONSTRAINT fk_weight_revision_inbound FOREIGN KEY (inbound_id) REFERENCES fl_inbound_order (id),
|
|
CONSTRAINT fk_weight_revision_result FOREIGN KEY (weight_result_id) REFERENCES fl_inbound_weight_result (id)
|
|
) ENGINE=InnoDB COMMENT='OCR重量人工修正和确认的不可变版本历史';
|