优化
This commit is contained in:
@@ -2,7 +2,7 @@
|
||||
|
||||
## 唯一入口与区域边界
|
||||
|
||||
当前开发阶段只维护纯初始化,不提供存量升级、数据回填、清理或兼容入口。两个 SQL 文件沿用原文件名,名称中的“增量”不表示可向已有业务库重放。
|
||||
两个统一 SQL 文件仍只用于空库初始化,名称中的“增量”不表示可向已有业务库重放。已有生产库的受控结构补齐单独放在 `migrations/`,只允许明确审阅过的增量变更;不提供存量数据回填、清理或兼容入口。
|
||||
|
||||
| 区域 | 完整入口 | 服务 schema | 表数 |
|
||||
|---|---|---|---:|
|
||||
@@ -54,7 +54,7 @@
|
||||
|
||||
## 维护规则
|
||||
|
||||
- 最终字段、类型、默认值、索引、外键、CHECK、注释直接维护在 CREATE TABLE;64 个国内业务触发器保留最终定义。不追加 ALTER、迁移过程、动态 DDL、UPDATE 回填或 DELETE 清理段。
|
||||
- 空库基线的最终字段、类型、默认值、索引、外键、CHECK、注释直接维护在 CREATE TABLE;64 个国内业务触发器保留最终定义。统一初始化文件不追加 ALTER、迁移过程、动态 DDL、UPDATE 回填或 DELETE 清理段;已有库的受控增量只能放入对应 schema 的 `migrations/` 文件,并保持不删数据。
|
||||
- 系统种子直接维护最终 INSERT,不保留退役 ID 清理或 ON DUPLICATE KEY UPDATE 升级。权限变更联查 IAM 来源、Controller、OpenAPI 与调用端。
|
||||
- 原 `权限点初始化-MySQL8.sql` 独立补丁已撤销,订单申报权限和默认授权已纳入国内 IAM 基线,不另设存量权限发布入口。
|
||||
- 模块 `src/main/resources/db/` 用作结构来源和开发追溯,不是区域部署前置;不再向历史迁移文件追加发布步骤。修改当前字段时同步模块有效建表定义及其合同。
|
||||
@@ -62,7 +62,7 @@
|
||||
|
||||
## 后续迁移工具(已开始实施)
|
||||
|
||||
机制启用前,以上两份统一 SQL 仍是空库初始化的唯一入口;本节工具不会修改已有数据库,也不会把当前可丢弃的开发/测试存量转换成迁移链。
|
||||
机制启用前,以上两份统一 SQL 仍是空库初始化入口;本节工具不会把当前可丢弃的开发/测试存量转换成迁移链。当前已登记一份生产尾程结构补齐迁移 `migrations/overseas/baiyue_lastleg/V1__align_lastleg_production_schema.sql`,由 `scripts/prod-database-schema-acceptance.mjs` 默认只读核对,只有显式确认参数才执行;它只新增字段、放宽生成后才确定字段的可空性并创建缺失表,不执行 DML。
|
||||
|
||||
迁移范围映射位于 `migration-scopes.json`,按区域、schema、所属服务和顺序登记。迁移文件位于 `migrations/{cn|overseas}/<schema>/`,一个文件只允许修改一个 schema。目录中的 `.gitkeep` 仅用于保留空目录,不是迁移文件。
|
||||
|
||||
@@ -82,7 +82,7 @@ node deploy/sql/scripts/db-migrations.mjs plan --services auth,iam --regions CN
|
||||
node deploy/sql/scripts/db-migrations.mjs run --manifest release-manifest.json --dry-run
|
||||
```
|
||||
|
||||
`new` 使用独占创建避免并发覆盖;成功历史或已冻结制品不能由普通命令改写。`plan` 只打包选中服务及评审确认的 schema,不会因为同一提交存在其他区域或服务 SQL 就自动扩大范围。`run` 的真实执行还未接入测试数据库和 Jenkins,当前未授权任何部署或 SQL 操作。
|
||||
`new` 使用独占创建避免并发覆盖;成功历史或已冻结制品不能由普通命令改写。`plan` 只打包选中服务及评审确认的 schema,不会因为同一提交存在其他区域或服务 SQL 就自动扩大范围。`run` 的真实 Flyway 执行仍未接入测试数据库和 Jenkins;生产增量由专用验收脚本在当前轮明确授权后执行,不把统一初始化文件用于生产。
|
||||
|
||||
## 本地验证
|
||||
|
||||
|
||||
+147
@@ -0,0 +1,147 @@
|
||||
-- Region: OVERSEAS
|
||||
-- Schema: baiyue_lastleg
|
||||
-- Purpose: 对齐生产尾程库中已存在表的增量字段,并补齐仓储转运测量照片表。
|
||||
-- Safety: 仅新增可空/带默认值字段、放宽既有字段的 NOT NULL 约束、创建缺失表;不删除字段、索引、数据或表。
|
||||
-- Preconditions: 已核对生产库缺失字段清单;执行连接必须指向 baiyue_lastleg。
|
||||
-- Postconditions: 生产库与 deploy/sql/海外区域统一增量-MySQL8.sql 的尾程字段集合一致。
|
||||
|
||||
SET NAMES utf8mb4;
|
||||
|
||||
-- ll_delivery_order: 私人仓目的地快照字段。
|
||||
SET @ddl = IF(NOT EXISTS (SELECT 1 FROM information_schema.columns WHERE table_schema = DATABASE() AND table_name = 'll_delivery_order' AND column_name = 'destination_type'), 'ALTER TABLE ll_delivery_order ADD COLUMN destination_type varchar(16) NULL COMMENT ''目的地类型:FBA或PRIVATE'' AFTER destination_warehouse_name', 'SELECT 1');
|
||||
PREPARE stmt FROM @ddl; EXECUTE stmt; DEALLOCATE PREPARE stmt;
|
||||
SET @ddl = IF(NOT EXISTS (SELECT 1 FROM information_schema.columns WHERE table_schema = DATABASE() AND table_name = 'll_delivery_order' AND column_name = 'delivery_address'), 'ALTER TABLE ll_delivery_order ADD COLUMN delivery_address varchar(1000) NULL COMMENT ''私人仓派送地址'' AFTER destination_type', 'SELECT 1');
|
||||
PREPARE stmt FROM @ddl; EXECUTE stmt; DEALLOCATE PREPARE stmt;
|
||||
SET @ddl = IF(NOT EXISTS (SELECT 1 FROM information_schema.columns WHERE table_schema = DATABASE() AND table_name = 'll_delivery_order' AND column_name = 'postal_code'), 'ALTER TABLE ll_delivery_order ADD COLUMN postal_code varchar(32) NULL COMMENT ''私人仓邮编'' AFTER delivery_address', 'SELECT 1');
|
||||
PREPARE stmt FROM @ddl; EXECUTE stmt; DEALLOCATE PREPARE stmt;
|
||||
SET @ddl = IF(NOT EXISTS (SELECT 1 FROM information_schema.columns WHERE table_schema = DATABASE() AND table_name = 'll_delivery_order' AND column_name = 'contact_name'), 'ALTER TABLE ll_delivery_order ADD COLUMN contact_name varchar(128) NULL COMMENT ''私人仓联系人'' AFTER postal_code', 'SELECT 1');
|
||||
PREPARE stmt FROM @ddl; EXECUTE stmt; DEALLOCATE PREPARE stmt;
|
||||
SET @ddl = IF(NOT EXISTS (SELECT 1 FROM information_schema.columns WHERE table_schema = DATABASE() AND table_name = 'll_delivery_order' AND column_name = 'contact_phone'), 'ALTER TABLE ll_delivery_order ADD COLUMN contact_phone varchar(64) NULL COMMENT ''私人仓联系电话'' AFTER contact_name', 'SELECT 1');
|
||||
PREPARE stmt FROM @ddl; EXECUTE stmt; DEALLOCATE PREPARE stmt;
|
||||
SET @ddl = IF((SELECT is_nullable FROM information_schema.columns WHERE table_schema = DATABASE() AND table_name = 'll_delivery_order' AND column_name = 'dispatch_order_id') = 'NO', 'ALTER TABLE ll_delivery_order MODIFY COLUMN dispatch_order_id bigint NULL COMMENT ''关联派车单ID,仓储转运直接出库时为空''', 'SELECT 1');
|
||||
PREPARE stmt FROM @ddl; EXECUTE stmt; DEALLOCATE PREPARE stmt;
|
||||
SET @ddl = IF((SELECT is_nullable FROM information_schema.columns WHERE table_schema = DATABASE() AND table_name = 'll_delivery_order' AND column_name = 'dispatch_no') = 'NO', 'ALTER TABLE ll_delivery_order MODIFY COLUMN dispatch_no varchar(64) NULL COMMENT ''关联派车单号,仓储转运直接出库时为空''', 'SELECT 1');
|
||||
PREPARE stmt FROM @ddl; EXECUTE stmt; DEALLOCATE PREPARE stmt;
|
||||
SET @ddl = IF((SELECT is_nullable FROM information_schema.columns WHERE table_schema = DATABASE() AND table_name = 'll_delivery_order' AND column_name = 'destination_warehouse_code') = 'NO', 'ALTER TABLE ll_delivery_order MODIFY COLUMN destination_warehouse_code varchar(128) NULL COMMENT ''本派送单目的FBA仓编码快照,私人仓为空''', 'SELECT 1');
|
||||
PREPARE stmt FROM @ddl; EXECUTE stmt; DEALLOCATE PREPARE stmt;
|
||||
|
||||
-- ll_dispatch_item: 私人仓目的地与计量快照字段。
|
||||
SET @ddl = IF(NOT EXISTS (SELECT 1 FROM information_schema.columns WHERE table_schema = DATABASE() AND table_name = 'll_dispatch_item' AND column_name = 'destination_type'), 'ALTER TABLE ll_dispatch_item ADD COLUMN destination_type varchar(32) NULL COMMENT ''目的类型:FBA或PRIVATE'' AFTER fba_warehouse_code', 'SELECT 1');
|
||||
PREPARE stmt FROM @ddl; EXECUTE stmt; DEALLOCATE PREPARE stmt;
|
||||
SET @ddl = IF(NOT EXISTS (SELECT 1 FROM information_schema.columns WHERE table_schema = DATABASE() AND table_name = 'll_dispatch_item' AND column_name = 'delivery_address'), 'ALTER TABLE ll_dispatch_item ADD COLUMN delivery_address varchar(1000) NULL COMMENT ''私人仓目的地址快照'' AFTER destination_type', 'SELECT 1');
|
||||
PREPARE stmt FROM @ddl; EXECUTE stmt; DEALLOCATE PREPARE stmt;
|
||||
SET @ddl = IF(NOT EXISTS (SELECT 1 FROM information_schema.columns WHERE table_schema = DATABASE() AND table_name = 'll_dispatch_item' AND column_name = 'postal_code'), 'ALTER TABLE ll_dispatch_item ADD COLUMN postal_code varchar(32) NULL COMMENT ''私人仓邮编快照'' AFTER delivery_address', 'SELECT 1');
|
||||
PREPARE stmt FROM @ddl; EXECUTE stmt; DEALLOCATE PREPARE stmt;
|
||||
SET @ddl = IF(NOT EXISTS (SELECT 1 FROM information_schema.columns WHERE table_schema = DATABASE() AND table_name = 'll_dispatch_item' AND column_name = 'contact_name'), 'ALTER TABLE ll_dispatch_item ADD COLUMN contact_name varchar(128) NULL COMMENT ''私人仓联系人快照'' AFTER postal_code', 'SELECT 1');
|
||||
PREPARE stmt FROM @ddl; EXECUTE stmt; DEALLOCATE PREPARE stmt;
|
||||
SET @ddl = IF(NOT EXISTS (SELECT 1 FROM information_schema.columns WHERE table_schema = DATABASE() AND table_name = 'll_dispatch_item' AND column_name = 'contact_phone'), 'ALTER TABLE ll_dispatch_item ADD COLUMN contact_phone varchar(64) NULL COMMENT ''私人仓联系电话快照'' AFTER contact_name', 'SELECT 1');
|
||||
PREPARE stmt FROM @ddl; EXECUTE stmt; DEALLOCATE PREPARE stmt;
|
||||
SET @ddl = IF(NOT EXISTS (SELECT 1 FROM information_schema.columns WHERE table_schema = DATABASE() AND table_name = 'll_dispatch_item' AND column_name = 'gross_weight_kg'), 'ALTER TABLE ll_dispatch_item ADD COLUMN gross_weight_kg decimal(18,3) NOT NULL DEFAULT 0 COMMENT ''毛重(千克)'' AFTER package_count', 'SELECT 1');
|
||||
PREPARE stmt FROM @ddl; EXECUTE stmt; DEALLOCATE PREPARE stmt;
|
||||
SET @ddl = IF(NOT EXISTS (SELECT 1 FROM information_schema.columns WHERE table_schema = DATABASE() AND table_name = 'll_dispatch_item' AND column_name = 'volume_weight_kg'), 'ALTER TABLE ll_dispatch_item ADD COLUMN volume_weight_kg decimal(18,3) NOT NULL DEFAULT 0 COMMENT ''材积重(千克)'' AFTER gross_weight_kg', 'SELECT 1');
|
||||
PREPARE stmt FROM @ddl; EXECUTE stmt; DEALLOCATE PREPARE stmt;
|
||||
|
||||
-- ll_inbound_plan_line / ll_inbound_plan_pallet: 私人仓目的地快照字段。
|
||||
SET @ddl = IF(NOT EXISTS (SELECT 1 FROM information_schema.columns WHERE table_schema = DATABASE() AND table_name = 'll_inbound_plan_line' AND column_name = 'delivery_address'), 'ALTER TABLE ll_inbound_plan_line ADD COLUMN delivery_address varchar(1000) NULL COMMENT ''私人仓目的地址快照'' AFTER destination_warehouse_name', 'SELECT 1');
|
||||
PREPARE stmt FROM @ddl; EXECUTE stmt; DEALLOCATE PREPARE stmt;
|
||||
SET @ddl = IF(NOT EXISTS (SELECT 1 FROM information_schema.columns WHERE table_schema = DATABASE() AND table_name = 'll_inbound_plan_line' AND column_name = 'postal_code'), 'ALTER TABLE ll_inbound_plan_line ADD COLUMN postal_code varchar(32) NULL COMMENT ''私人仓邮编快照'' AFTER delivery_address', 'SELECT 1');
|
||||
PREPARE stmt FROM @ddl; EXECUTE stmt; DEALLOCATE PREPARE stmt;
|
||||
SET @ddl = IF(NOT EXISTS (SELECT 1 FROM information_schema.columns WHERE table_schema = DATABASE() AND table_name = 'll_inbound_plan_line' AND column_name = 'contact_name'), 'ALTER TABLE ll_inbound_plan_line ADD COLUMN contact_name varchar(128) NULL COMMENT ''私人仓联系人快照'' AFTER postal_code', 'SELECT 1');
|
||||
PREPARE stmt FROM @ddl; EXECUTE stmt; DEALLOCATE PREPARE stmt;
|
||||
SET @ddl = IF(NOT EXISTS (SELECT 1 FROM information_schema.columns WHERE table_schema = DATABASE() AND table_name = 'll_inbound_plan_line' AND column_name = 'contact_phone'), 'ALTER TABLE ll_inbound_plan_line ADD COLUMN contact_phone varchar(64) NULL COMMENT ''私人仓联系电话快照'' AFTER contact_name', 'SELECT 1');
|
||||
PREPARE stmt FROM @ddl; EXECUTE stmt; DEALLOCATE PREPARE stmt;
|
||||
|
||||
SET @ddl = IF(NOT EXISTS (SELECT 1 FROM information_schema.columns WHERE table_schema = DATABASE() AND table_name = 'll_inbound_plan_pallet' AND column_name = 'destination_type'), 'ALTER TABLE ll_inbound_plan_pallet ADD COLUMN destination_type varchar(32) NULL COMMENT ''目的类型:FBA或PRIVATE'' AFTER destination_warehouse_name', 'SELECT 1');
|
||||
PREPARE stmt FROM @ddl; EXECUTE stmt; DEALLOCATE PREPARE stmt;
|
||||
SET @ddl = IF(NOT EXISTS (SELECT 1 FROM information_schema.columns WHERE table_schema = DATABASE() AND table_name = 'll_inbound_plan_pallet' AND column_name = 'delivery_address'), 'ALTER TABLE ll_inbound_plan_pallet ADD COLUMN delivery_address varchar(1000) NULL COMMENT ''私人仓目的地址快照'' AFTER destination_type', 'SELECT 1');
|
||||
PREPARE stmt FROM @ddl; EXECUTE stmt; DEALLOCATE PREPARE stmt;
|
||||
SET @ddl = IF(NOT EXISTS (SELECT 1 FROM information_schema.columns WHERE table_schema = DATABASE() AND table_name = 'll_inbound_plan_pallet' AND column_name = 'postal_code'), 'ALTER TABLE ll_inbound_plan_pallet ADD COLUMN postal_code varchar(32) NULL COMMENT ''私人仓邮编快照'' AFTER delivery_address', 'SELECT 1');
|
||||
PREPARE stmt FROM @ddl; EXECUTE stmt; DEALLOCATE PREPARE stmt;
|
||||
SET @ddl = IF(NOT EXISTS (SELECT 1 FROM information_schema.columns WHERE table_schema = DATABASE() AND table_name = 'll_inbound_plan_pallet' AND column_name = 'contact_name'), 'ALTER TABLE ll_inbound_plan_pallet ADD COLUMN contact_name varchar(128) NULL COMMENT ''私人仓联系人快照'' AFTER postal_code', 'SELECT 1');
|
||||
PREPARE stmt FROM @ddl; EXECUTE stmt; DEALLOCATE PREPARE stmt;
|
||||
SET @ddl = IF(NOT EXISTS (SELECT 1 FROM information_schema.columns WHERE table_schema = DATABASE() AND table_name = 'll_inbound_plan_pallet' AND column_name = 'contact_phone'), 'ALTER TABLE ll_inbound_plan_pallet ADD COLUMN contact_phone varchar(64) NULL COMMENT ''私人仓联系电话快照'' AFTER contact_name', 'SELECT 1');
|
||||
PREPARE stmt FROM @ddl; EXECUTE stmt; DEALLOCATE PREPARE stmt;
|
||||
|
||||
-- ll_order: PDA 实际入库箱数。
|
||||
SET @ddl = IF(NOT EXISTS (SELECT 1 FROM information_schema.columns WHERE table_schema = DATABASE() AND table_name = 'll_order' AND column_name = 'received_package_count'), 'ALTER TABLE ll_order ADD COLUMN received_package_count int NULL COMMENT ''PDA实际入库箱数'' AFTER package_count', 'SELECT 1');
|
||||
PREPARE stmt FROM @ddl; EXECUTE stmt; DEALLOCATE PREPARE stmt;
|
||||
|
||||
-- ll_outbound_order / ll_outbound_pallet_item: 出库计量快照字段。
|
||||
SET @ddl = IF(NOT EXISTS (SELECT 1 FROM information_schema.columns WHERE table_schema = DATABASE() AND table_name = 'll_outbound_order' AND column_name = 'gross_weight_kg'), 'ALTER TABLE ll_outbound_order ADD COLUMN gross_weight_kg decimal(18,3) NOT NULL DEFAULT 0 COMMENT ''毛重(千克)'' AFTER pallet_count', 'SELECT 1');
|
||||
PREPARE stmt FROM @ddl; EXECUTE stmt; DEALLOCATE PREPARE stmt;
|
||||
SET @ddl = IF(NOT EXISTS (SELECT 1 FROM information_schema.columns WHERE table_schema = DATABASE() AND table_name = 'll_outbound_order' AND column_name = 'volume_weight_kg'), 'ALTER TABLE ll_outbound_order ADD COLUMN volume_weight_kg decimal(18,3) NOT NULL DEFAULT 0 COMMENT ''材积重(千克)'' AFTER gross_weight_kg', 'SELECT 1');
|
||||
PREPARE stmt FROM @ddl; EXECUTE stmt; DEALLOCATE PREPARE stmt;
|
||||
SET @ddl = IF(NOT EXISTS (SELECT 1 FROM information_schema.columns WHERE table_schema = DATABASE() AND table_name = 'll_outbound_order' AND column_name = 'volume_cbm'), 'ALTER TABLE ll_outbound_order ADD COLUMN volume_cbm decimal(18,4) NOT NULL DEFAULT 0 COMMENT ''体积(立方米)'' AFTER volume_weight_kg', 'SELECT 1');
|
||||
PREPARE stmt FROM @ddl; EXECUTE stmt; DEALLOCATE PREPARE stmt;
|
||||
|
||||
SET @ddl = IF(NOT EXISTS (SELECT 1 FROM information_schema.columns WHERE table_schema = DATABASE() AND table_name = 'll_outbound_pallet_item' AND column_name = 'gross_weight_kg'), 'ALTER TABLE ll_outbound_pallet_item ADD COLUMN gross_weight_kg decimal(18,3) NOT NULL DEFAULT 0 COMMENT ''毛重(千克)'' AFTER package_count', 'SELECT 1');
|
||||
PREPARE stmt FROM @ddl; EXECUTE stmt; DEALLOCATE PREPARE stmt;
|
||||
SET @ddl = IF(NOT EXISTS (SELECT 1 FROM information_schema.columns WHERE table_schema = DATABASE() AND table_name = 'll_outbound_pallet_item' AND column_name = 'volume_weight_kg'), 'ALTER TABLE ll_outbound_pallet_item ADD COLUMN volume_weight_kg decimal(18,3) NOT NULL DEFAULT 0 COMMENT ''材积重(千克)'' AFTER gross_weight_kg', 'SELECT 1');
|
||||
PREPARE stmt FROM @ddl; EXECUTE stmt; DEALLOCATE PREPARE stmt;
|
||||
SET @ddl = IF(NOT EXISTS (SELECT 1 FROM information_schema.columns WHERE table_schema = DATABASE() AND table_name = 'll_outbound_pallet_item' AND column_name = 'volume_cbm'), 'ALTER TABLE ll_outbound_pallet_item ADD COLUMN volume_cbm decimal(18,4) NOT NULL DEFAULT 0 COMMENT ''体积(立方米)'' AFTER volume_weight_kg', 'SELECT 1');
|
||||
PREPARE stmt FROM @ddl; EXECUTE stmt; DEALLOCATE PREPARE stmt;
|
||||
|
||||
-- ll_warehouse_transfer_order: 目的地、审核及绑定幂等字段。
|
||||
SET @ddl = IF(NOT EXISTS (SELECT 1 FROM information_schema.columns WHERE table_schema = DATABASE() AND table_name = 'll_warehouse_transfer_order' AND column_name = 'destination_type'), 'ALTER TABLE ll_warehouse_transfer_order ADD COLUMN destination_type varchar(16) NULL COMMENT ''目的类型:FBA或PRIVATE'' AFTER fba_warehouse_code', 'SELECT 1');
|
||||
PREPARE stmt FROM @ddl; EXECUTE stmt; DEALLOCATE PREPARE stmt;
|
||||
SET @ddl = IF(NOT EXISTS (SELECT 1 FROM information_schema.columns WHERE table_schema = DATABASE() AND table_name = 'll_warehouse_transfer_order' AND column_name = 'destination_warehouse_id'), 'ALTER TABLE ll_warehouse_transfer_order ADD COLUMN destination_warehouse_id varchar(128) NULL COMMENT ''目的仓ID快照'' AFTER destination_type', 'SELECT 1');
|
||||
PREPARE stmt FROM @ddl; EXECUTE stmt; DEALLOCATE PREPARE stmt;
|
||||
SET @ddl = IF(NOT EXISTS (SELECT 1 FROM information_schema.columns WHERE table_schema = DATABASE() AND table_name = 'll_warehouse_transfer_order' AND column_name = 'destination_warehouse_code'), 'ALTER TABLE ll_warehouse_transfer_order ADD COLUMN destination_warehouse_code varchar(128) NULL COMMENT ''目的仓编码快照'' AFTER destination_warehouse_id', 'SELECT 1');
|
||||
PREPARE stmt FROM @ddl; EXECUTE stmt; DEALLOCATE PREPARE stmt;
|
||||
SET @ddl = IF(NOT EXISTS (SELECT 1 FROM information_schema.columns WHERE table_schema = DATABASE() AND table_name = 'll_warehouse_transfer_order' AND column_name = 'destination_warehouse_name'), 'ALTER TABLE ll_warehouse_transfer_order ADD COLUMN destination_warehouse_name varchar(255) NULL COMMENT ''目的仓名称快照'' AFTER destination_warehouse_code', 'SELECT 1');
|
||||
PREPARE stmt FROM @ddl; EXECUTE stmt; DEALLOCATE PREPARE stmt;
|
||||
SET @ddl = IF(NOT EXISTS (SELECT 1 FROM information_schema.columns WHERE table_schema = DATABASE() AND table_name = 'll_warehouse_transfer_order' AND column_name = 'private_destination_address'), 'ALTER TABLE ll_warehouse_transfer_order ADD COLUMN private_destination_address varchar(1000) NULL COMMENT ''私人仓完整地址'' AFTER destination_warehouse_name', 'SELECT 1');
|
||||
PREPARE stmt FROM @ddl; EXECUTE stmt; DEALLOCATE PREPARE stmt;
|
||||
SET @ddl = IF(NOT EXISTS (SELECT 1 FROM information_schema.columns WHERE table_schema = DATABASE() AND table_name = 'll_warehouse_transfer_order' AND column_name = 'private_destination_postal_code'), 'ALTER TABLE ll_warehouse_transfer_order ADD COLUMN private_destination_postal_code varchar(32) NULL COMMENT ''私人仓邮编'' AFTER private_destination_address', 'SELECT 1');
|
||||
PREPARE stmt FROM @ddl; EXECUTE stmt; DEALLOCATE PREPARE stmt;
|
||||
SET @ddl = IF(NOT EXISTS (SELECT 1 FROM information_schema.columns WHERE table_schema = DATABASE() AND table_name = 'll_warehouse_transfer_order' AND column_name = 'private_destination_contact_name'), 'ALTER TABLE ll_warehouse_transfer_order ADD COLUMN private_destination_contact_name varchar(128) NULL COMMENT ''私人仓联系人'' AFTER private_destination_postal_code', 'SELECT 1');
|
||||
PREPARE stmt FROM @ddl; EXECUTE stmt; DEALLOCATE PREPARE stmt;
|
||||
SET @ddl = IF(NOT EXISTS (SELECT 1 FROM information_schema.columns WHERE table_schema = DATABASE() AND table_name = 'll_warehouse_transfer_order' AND column_name = 'private_destination_contact_phone'), 'ALTER TABLE ll_warehouse_transfer_order ADD COLUMN private_destination_contact_phone varchar(64) NULL COMMENT ''私人仓联系电话'' AFTER private_destination_contact_name', 'SELECT 1');
|
||||
PREPARE stmt FROM @ddl; EXECUTE stmt; DEALLOCATE PREPARE stmt;
|
||||
SET @ddl = IF(NOT EXISTS (SELECT 1 FROM information_schema.columns WHERE table_schema = DATABASE() AND table_name = 'll_warehouse_transfer_order' AND column_name = 'pickup_contact_name'), 'ALTER TABLE ll_warehouse_transfer_order ADD COLUMN pickup_contact_name varchar(128) NULL COMMENT ''提货联系人'' AFTER delivery_address', 'SELECT 1');
|
||||
PREPARE stmt FROM @ddl; EXECUTE stmt; DEALLOCATE PREPARE stmt;
|
||||
SET @ddl = IF(NOT EXISTS (SELECT 1 FROM information_schema.columns WHERE table_schema = DATABASE() AND table_name = 'll_warehouse_transfer_order' AND column_name = 'pickup_contact_phone'), 'ALTER TABLE ll_warehouse_transfer_order ADD COLUMN pickup_contact_phone varchar(64) NULL COMMENT ''提货联系电话'' AFTER pickup_contact_name', 'SELECT 1');
|
||||
PREPARE stmt FROM @ddl; EXECUTE stmt; DEALLOCATE PREPARE stmt;
|
||||
SET @ddl = IF(NOT EXISTS (SELECT 1 FROM information_schema.columns WHERE table_schema = DATABASE() AND table_name = 'll_warehouse_transfer_order' AND column_name = 'review_decision'), 'ALTER TABLE ll_warehouse_transfer_order ADD COLUMN review_decision varchar(32) NULL COMMENT ''审核决定'' AFTER status', 'SELECT 1');
|
||||
PREPARE stmt FROM @ddl; EXECUTE stmt; DEALLOCATE PREPARE stmt;
|
||||
SET @ddl = IF(NOT EXISTS (SELECT 1 FROM information_schema.columns WHERE table_schema = DATABASE() AND table_name = 'll_warehouse_transfer_order' AND column_name = 'review_remark'), 'ALTER TABLE ll_warehouse_transfer_order ADD COLUMN review_remark varchar(1000) NULL COMMENT ''审核备注或驳回原因'' AFTER review_decision', 'SELECT 1');
|
||||
PREPARE stmt FROM @ddl; EXECUTE stmt; DEALLOCATE PREPARE stmt;
|
||||
SET @ddl = IF(NOT EXISTS (SELECT 1 FROM information_schema.columns WHERE table_schema = DATABASE() AND table_name = 'll_warehouse_transfer_order' AND column_name = 'reviewed_by'), 'ALTER TABLE ll_warehouse_transfer_order ADD COLUMN reviewed_by varchar(128) NULL COMMENT ''审核人ID'' AFTER review_remark', 'SELECT 1');
|
||||
PREPARE stmt FROM @ddl; EXECUTE stmt; DEALLOCATE PREPARE stmt;
|
||||
SET @ddl = IF(NOT EXISTS (SELECT 1 FROM information_schema.columns WHERE table_schema = DATABASE() AND table_name = 'll_warehouse_transfer_order' AND column_name = 'reviewed_at'), 'ALTER TABLE ll_warehouse_transfer_order ADD COLUMN reviewed_at datetime(3) NULL COMMENT ''审核时间'' AFTER reviewed_by', 'SELECT 1');
|
||||
PREPARE stmt FROM @ddl; EXECUTE stmt; DEALLOCATE PREPARE stmt;
|
||||
SET @ddl = IF(NOT EXISTS (SELECT 1 FROM information_schema.columns WHERE table_schema = DATABASE() AND table_name = 'll_warehouse_transfer_order' AND column_name = 'destination_binding_idempotency_key'), 'ALTER TABLE ll_warehouse_transfer_order ADD COLUMN destination_binding_idempotency_key varchar(255) NULL COMMENT ''目的地绑定幂等键'' AFTER customer_confirmed_at', 'SELECT 1');
|
||||
PREPARE stmt FROM @ddl; EXECUTE stmt; DEALLOCATE PREPARE stmt;
|
||||
SET @ddl = IF(NOT EXISTS (SELECT 1 FROM information_schema.columns WHERE table_schema = DATABASE() AND table_name = 'll_warehouse_transfer_order' AND column_name = 'destination_binding_request_hash'), 'ALTER TABLE ll_warehouse_transfer_order ADD COLUMN destination_binding_request_hash char(64) NULL COMMENT ''目的地绑定请求哈希'' AFTER destination_binding_idempotency_key', 'SELECT 1');
|
||||
PREPARE stmt FROM @ddl; EXECUTE stmt; DEALLOCATE PREPARE stmt;
|
||||
|
||||
-- ll_warehouse_transfer_pallet: PDA 草稿/生成/绑定生命周期字段,并放宽生成后才确定的资源字段。
|
||||
SET @ddl = IF(NOT EXISTS (SELECT 1 FROM information_schema.columns WHERE table_schema = DATABASE() AND table_name = 'll_warehouse_transfer_pallet' AND column_name = 'draft_idempotency_key'), 'ALTER TABLE ll_warehouse_transfer_pallet ADD COLUMN draft_idempotency_key varchar(255) NULL COMMENT ''草稿保存幂等键'' AFTER status', 'SELECT 1');
|
||||
PREPARE stmt FROM @ddl; EXECUTE stmt; DEALLOCATE PREPARE stmt;
|
||||
SET @ddl = IF(NOT EXISTS (SELECT 1 FROM information_schema.columns WHERE table_schema = DATABASE() AND table_name = 'll_warehouse_transfer_pallet' AND column_name = 'draft_request_hash'), 'ALTER TABLE ll_warehouse_transfer_pallet ADD COLUMN draft_request_hash char(64) NULL COMMENT ''草稿请求摘要'' AFTER draft_idempotency_key', 'SELECT 1');
|
||||
PREPARE stmt FROM @ddl; EXECUTE stmt; DEALLOCATE PREPARE stmt;
|
||||
SET @ddl = IF(NOT EXISTS (SELECT 1 FROM information_schema.columns WHERE table_schema = DATABASE() AND table_name = 'll_warehouse_transfer_pallet' AND column_name = 'generate_idempotency_key'), 'ALTER TABLE ll_warehouse_transfer_pallet ADD COLUMN generate_idempotency_key varchar(255) NULL COMMENT ''新托盘生成幂等键'' AFTER draft_request_hash', 'SELECT 1');
|
||||
PREPARE stmt FROM @ddl; EXECUTE stmt; DEALLOCATE PREPARE stmt;
|
||||
SET @ddl = IF(NOT EXISTS (SELECT 1 FROM information_schema.columns WHERE table_schema = DATABASE() AND table_name = 'll_warehouse_transfer_pallet' AND column_name = 'bind_idempotency_key'), 'ALTER TABLE ll_warehouse_transfer_pallet ADD COLUMN bind_idempotency_key varchar(255) NULL COMMENT ''扫码绑定幂等键'' AFTER generate_idempotency_key', 'SELECT 1');
|
||||
PREPARE stmt FROM @ddl; EXECUTE stmt; DEALLOCATE PREPARE stmt;
|
||||
SET @ddl = IF(NOT EXISTS (SELECT 1 FROM information_schema.columns WHERE table_schema = DATABASE() AND table_name = 'll_warehouse_transfer_pallet' AND column_name = 'bound_at'), 'ALTER TABLE ll_warehouse_transfer_pallet ADD COLUMN bound_at datetime(3) NULL COMMENT ''扫码确认绑定时间'' AFTER bind_idempotency_key', 'SELECT 1');
|
||||
PREPARE stmt FROM @ddl; EXECUTE stmt; DEALLOCATE PREPARE stmt;
|
||||
SET @ddl = IF((SELECT is_nullable FROM information_schema.columns WHERE table_schema = DATABASE() AND table_name = 'll_warehouse_transfer_pallet' AND column_name = 'warehouse_pallet_id') = 'NO', 'ALTER TABLE ll_warehouse_transfer_pallet MODIFY COLUMN warehouse_pallet_id bigint NULL COMMENT ''生成后的海外仓真实托盘ID'', MODIFY COLUMN pallet_no varchar(128) NULL COMMENT ''生成后的真实托盘码'', MODIFY COLUMN warehouse_location_id bigint NULL COMMENT ''生成后的真实库位ID'', MODIFY COLUMN warehouse_resource_lock_id bigint NULL COMMENT ''生成后的仓储资源锁ID'', MODIFY COLUMN completed_at datetime(3) NULL COMMENT ''整单打托完成时间''', 'SELECT 1');
|
||||
PREPARE stmt FROM @ddl; EXECUTE stmt; DEALLOCATE PREPARE stmt;
|
||||
|
||||
-- 新表不存在时直接创建完整定义;IF NOT EXISTS 使重复执行安全。
|
||||
CREATE TABLE IF NOT EXISTS ll_warehouse_transfer_measurement_photo (
|
||||
id bigint NOT NULL COMMENT '测量照片引用ID',
|
||||
transfer_order_id bigint NOT NULL COMMENT '仓储转运单ID',
|
||||
customer_id varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '客户租户ID',
|
||||
file_id bigint NOT NULL COMMENT '文件服务文件ID',
|
||||
file_name varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '文件名快照',
|
||||
content_type varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '文件媒体类型快照',
|
||||
size_bytes bigint NOT NULL DEFAULT 0 COMMENT '文件字节数快照',
|
||||
uploaded_by varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT 'PDA上传操作人',
|
||||
uploaded_at datetime(3) NOT NULL COMMENT '上传时间',
|
||||
submitted_at datetime(3) DEFAULT NULL COMMENT '随测量打托提交时间',
|
||||
PRIMARY KEY (id),
|
||||
UNIQUE KEY uk_ll_transfer_measurement_photo_file (customer_id,transfer_order_id,file_id),
|
||||
KEY idx_ll_transfer_measurement_photo_order (customer_id,transfer_order_id,uploaded_at)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='仓储转运PDA测量现场照片引用';
|
||||
Reference in New Issue
Block a user