From db6ed676aca3e04c7dd97326c82477a32d711217 Mon Sep 17 00:00:00 2001 From: ouyangxq <775153912@qq.com> Date: Fri, 4 Sep 2026 12:35:55 +0800 Subject: [PATCH] test: align pallet block contracts --- deploy/sql/头程数据库统一增量-MySQL8.sql | 47 ++++++++++++------- .../LoadingPickItemMapperContractTest.java | 2 +- .../PdaSplitSettlementSqlContractTest.java | 17 +++++-- 3 files changed, 44 insertions(+), 22 deletions(-) diff --git a/deploy/sql/头程数据库统一增量-MySQL8.sql b/deploy/sql/头程数据库统一增量-MySQL8.sql index f5c8c4c26..b5c45f229 100644 --- a/deploy/sql/头程数据库统一增量-MySQL8.sql +++ b/deploy/sql/头程数据库统一增量-MySQL8.sql @@ -14707,17 +14707,24 @@ CALL queue_column_comment('baiyue_warehouse', 'wh_pallet_location_transfer_opera USE baiyue_warehouse; CREATE TABLE IF NOT EXISTS wh_location_block ( - id BIGINT UNSIGNED NOT NULL COMMENT '整票库位块ID', tenant_id BIGINT UNSIGNED NOT NULL DEFAULT 0, - warehouse_id BIGINT UNSIGNED NOT NULL, source_service VARCHAR(40) NOT NULL, - business_id BIGINT UNSIGNED NOT NULL, inbound_code VARCHAR(40) NOT NULL, - slot_count INT UNSIGNED NOT NULL, idempotency_key VARCHAR(128) NOT NULL, - block_status VARCHAR(20) NOT NULL, expires_at DATETIME(3) NOT NULL, - last_operation_key VARCHAR(128) NULL, created_by BIGINT UNSIGNED NOT NULL, - created_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), - updated_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3), - version INT NOT NULL DEFAULT 0, + id BIGINT UNSIGNED NOT NULL COMMENT '整票库位块ID', + tenant_id BIGINT UNSIGNED NOT NULL DEFAULT 0 COMMENT '平台公共仓储资源域,固定为0', + warehouse_id BIGINT UNSIGNED NOT NULL COMMENT '仓库ID', + source_service VARCHAR(40) NOT NULL COMMENT '来源服务', + business_id BIGINT UNSIGNED NOT NULL COMMENT '当前归属入库单业务ID', + inbound_code VARCHAR(40) NOT NULL COMMENT '当前归属入仓码', + slot_count INT UNSIGNED NOT NULL COMMENT '整票独占槽位数', + idempotency_key VARCHAR(128) NOT NULL COMMENT '预占幂等键', + block_status VARCHAR(20) NOT NULL COMMENT '整票块状态:RESERVED、OCCUPIED或RELEASED', + expires_at DATETIME(3) NOT NULL COMMENT '预占过期时间', + last_operation_key VARCHAR(128) NULL COMMENT '最近确认、转移或释放幂等键', + created_by BIGINT UNSIGNED NOT NULL COMMENT '创建人或系统主体ID', + created_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '创建时间', + updated_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3) COMMENT '更新时间', + version INT NOT NULL DEFAULT 0 COMMENT '乐观锁版本号', active_business_block TINYINT GENERATED ALWAYS AS - (CASE WHEN block_status IN ('RESERVED','OCCUPIED') THEN 1 ELSE NULL END) STORED, + (CASE WHEN block_status IN ('RESERVED','OCCUPIED') THEN 1 ELSE NULL END) STORED + COMMENT '同一来源入库单仅允许一个活动整票块', PRIMARY KEY (id), UNIQUE KEY uk_location_block_idempotency (tenant_id, source_service, idempotency_key), UNIQUE KEY uk_location_block_active_business (tenant_id, source_service, business_id, active_business_block), @@ -14727,15 +14734,19 @@ CREATE TABLE IF NOT EXISTS wh_location_block ( ) ENGINE=InnoDB COMMENT='一票入仓码原子持有的稳定库位块'; CREATE TABLE IF NOT EXISTS wh_location_block_slot ( id BIGINT UNSIGNED NOT NULL COMMENT '槽位预占ID,对外作为reservationId', - tenant_id BIGINT UNSIGNED NOT NULL DEFAULT 0, block_id BIGINT UNSIGNED NOT NULL, - slot_no INT UNSIGNED NOT NULL, location_id BIGINT UNSIGNED NOT NULL, - location_code VARCHAR(50) NOT NULL, shared_overflow TINYINT(1) NOT NULL DEFAULT 0, - resource_status VARCHAR(20) NOT NULL, - created_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), - updated_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3), - version INT NOT NULL DEFAULT 0, + tenant_id BIGINT UNSIGNED NOT NULL DEFAULT 0 COMMENT '平台公共仓储资源域,固定为0', + block_id BIGINT UNSIGNED NOT NULL COMMENT '整票库位块ID', + slot_no INT UNSIGNED NOT NULL COMMENT '块内稳定槽位序号,从1开始', + location_id BIGINT UNSIGNED NOT NULL COMMENT '库位ID', + location_code VARCHAR(50) NOT NULL COMMENT '库位编码快照', + shared_overflow TINYINT(1) NOT NULL DEFAULT 0 COMMENT '是否落入同仓共享A0', + resource_status VARCHAR(20) NOT NULL COMMENT '资源状态:RESERVED、OCCUPIED或RELEASED', + created_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '创建时间', + updated_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3) COMMENT '更新时间', + version INT NOT NULL DEFAULT 0 COMMENT '乐观锁版本号', active_normal_slot TINYINT GENERATED ALWAYS AS - (CASE WHEN resource_status IN ('RESERVED','OCCUPIED') AND shared_overflow = 0 THEN 1 ELSE NULL END) STORED, + (CASE WHEN resource_status IN ('RESERVED','OCCUPIED') AND shared_overflow = 0 THEN 1 ELSE NULL END) STORED + COMMENT '普通库位活动块槽唯一标记;A0返回NULL', PRIMARY KEY (id), UNIQUE KEY uk_location_block_slot_no (tenant_id, block_id, slot_no), UNIQUE KEY uk_location_block_active_normal (tenant_id, location_id, active_normal_slot), KEY idx_location_block_slot_block (tenant_id, block_id, resource_status), diff --git a/firstleg/src/test/java/com/baiyue/firstleg/repository/LoadingPickItemMapperContractTest.java b/firstleg/src/test/java/com/baiyue/firstleg/repository/LoadingPickItemMapperContractTest.java index 06477ebdf..39050982e 100644 --- a/firstleg/src/test/java/com/baiyue/firstleg/repository/LoadingPickItemMapperContractTest.java +++ b/firstleg/src/test/java/com/baiyue/firstleg/repository/LoadingPickItemMapperContractTest.java @@ -92,7 +92,7 @@ class LoadingPickItemMapperContractTest { void pdaWritesAndReadsRequireWarehouseScope() throws Exception { Method list = LoadingPickItemMapper.class.getDeclaredMethod("selectTaskItemsWithAccount", long.class, long.class); Method pick = LoadingPickItemMapper.class.getDeclaredMethod("pick", long.class, int.class, - String.class, String.class, int.class, long.class); + int.class, long.class); assertThat(list.getAnnotation(Select.class).value()[0]) .contains("booking.warehouse_id = #{warehouseId}") diff --git a/firstleg/src/test/java/com/baiyue/firstleg/repository/PdaSplitSettlementSqlContractTest.java b/firstleg/src/test/java/com/baiyue/firstleg/repository/PdaSplitSettlementSqlContractTest.java index a7703c107..08e2d4f21 100644 --- a/firstleg/src/test/java/com/baiyue/firstleg/repository/PdaSplitSettlementSqlContractTest.java +++ b/firstleg/src/test/java/com/baiyue/firstleg/repository/PdaSplitSettlementSqlContractTest.java @@ -157,11 +157,22 @@ class PdaSplitSettlementSqlContractTest { .contains("allocation_status = 'CONFIRMED'") .doesNotContain("THEN 'RELEASED'"); - String release = InboundPalletAllocationMapper.class.getMethod("markReleased", + String release = InboundPalletAllocationMapper.class.getMethod("markBlockReleased", long.class, long.class, long.class) .getAnnotation(Update.class).value()[0]; assertThat(release) - .contains("allocation_status = 'RELEASED'") - .contains("allocation_status = 'CONFIRMED'"); + .contains("allocation_status='RELEASED'") + .contains("slot_status='RELEASED'") + .contains("block_id=#{blockId}") + .contains("allocation_status='CONFIRMED'"); + + String transfer = InboundPalletAllocationMapper.class.getMethod("markBlockTransferred", + long.class, long.class, long.class) + .getAnnotation(Update.class).value()[0]; + assertThat(transfer) + .contains("allocation_status='TRANSFERRED'") + .contains("slot_status='TRANSFERRED'") + .contains("block_id=#{blockId}") + .contains("allocation_status='CONFIRMED'"); } }