test: align pallet block contracts
This commit is contained in:
@@ -14707,17 +14707,24 @@ CALL queue_column_comment('baiyue_warehouse', 'wh_pallet_location_transfer_opera
|
|||||||
|
|
||||||
USE baiyue_warehouse;
|
USE baiyue_warehouse;
|
||||||
CREATE TABLE IF NOT EXISTS wh_location_block (
|
CREATE TABLE IF NOT EXISTS wh_location_block (
|
||||||
id BIGINT UNSIGNED NOT NULL COMMENT '整票库位块ID', tenant_id BIGINT UNSIGNED NOT NULL DEFAULT 0,
|
id BIGINT UNSIGNED NOT NULL COMMENT '整票库位块ID',
|
||||||
warehouse_id BIGINT UNSIGNED NOT NULL, source_service VARCHAR(40) NOT NULL,
|
tenant_id BIGINT UNSIGNED NOT NULL DEFAULT 0 COMMENT '平台公共仓储资源域,固定为0',
|
||||||
business_id BIGINT UNSIGNED NOT NULL, inbound_code VARCHAR(40) NOT NULL,
|
warehouse_id BIGINT UNSIGNED NOT NULL COMMENT '仓库ID',
|
||||||
slot_count INT UNSIGNED NOT NULL, idempotency_key VARCHAR(128) NOT NULL,
|
source_service VARCHAR(40) NOT NULL COMMENT '来源服务',
|
||||||
block_status VARCHAR(20) NOT NULL, expires_at DATETIME(3) NOT NULL,
|
business_id BIGINT UNSIGNED NOT NULL COMMENT '当前归属入库单业务ID',
|
||||||
last_operation_key VARCHAR(128) NULL, created_by BIGINT UNSIGNED NOT NULL,
|
inbound_code VARCHAR(40) NOT NULL COMMENT '当前归属入仓码',
|
||||||
created_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
|
slot_count INT UNSIGNED NOT NULL COMMENT '整票独占槽位数',
|
||||||
updated_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3),
|
idempotency_key VARCHAR(128) NOT NULL COMMENT '预占幂等键',
|
||||||
version INT NOT NULL DEFAULT 0,
|
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
|
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),
|
PRIMARY KEY (id),
|
||||||
UNIQUE KEY uk_location_block_idempotency (tenant_id, source_service, idempotency_key),
|
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),
|
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='一票入仓码原子持有的稳定库位块';
|
) ENGINE=InnoDB COMMENT='一票入仓码原子持有的稳定库位块';
|
||||||
CREATE TABLE IF NOT EXISTS wh_location_block_slot (
|
CREATE TABLE IF NOT EXISTS wh_location_block_slot (
|
||||||
id BIGINT UNSIGNED NOT NULL COMMENT '槽位预占ID,对外作为reservationId',
|
id BIGINT UNSIGNED NOT NULL COMMENT '槽位预占ID,对外作为reservationId',
|
||||||
tenant_id BIGINT UNSIGNED NOT NULL DEFAULT 0, block_id BIGINT UNSIGNED NOT NULL,
|
tenant_id BIGINT UNSIGNED NOT NULL DEFAULT 0 COMMENT '平台公共仓储资源域,固定为0',
|
||||||
slot_no INT UNSIGNED NOT NULL, location_id BIGINT UNSIGNED NOT NULL,
|
block_id BIGINT UNSIGNED NOT NULL COMMENT '整票库位块ID',
|
||||||
location_code VARCHAR(50) NOT NULL, shared_overflow TINYINT(1) NOT NULL DEFAULT 0,
|
slot_no INT UNSIGNED NOT NULL COMMENT '块内稳定槽位序号,从1开始',
|
||||||
resource_status VARCHAR(20) NOT NULL,
|
location_id BIGINT UNSIGNED NOT NULL COMMENT '库位ID',
|
||||||
created_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
|
location_code VARCHAR(50) NOT NULL COMMENT '库位编码快照',
|
||||||
updated_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3),
|
shared_overflow TINYINT(1) NOT NULL DEFAULT 0 COMMENT '是否落入同仓共享A0',
|
||||||
version INT NOT NULL DEFAULT 0,
|
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
|
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),
|
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),
|
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),
|
KEY idx_location_block_slot_block (tenant_id, block_id, resource_status),
|
||||||
|
|||||||
+1
-1
@@ -92,7 +92,7 @@ class LoadingPickItemMapperContractTest {
|
|||||||
void pdaWritesAndReadsRequireWarehouseScope() throws Exception {
|
void pdaWritesAndReadsRequireWarehouseScope() throws Exception {
|
||||||
Method list = LoadingPickItemMapper.class.getDeclaredMethod("selectTaskItemsWithAccount", long.class, long.class);
|
Method list = LoadingPickItemMapper.class.getDeclaredMethod("selectTaskItemsWithAccount", long.class, long.class);
|
||||||
Method pick = LoadingPickItemMapper.class.getDeclaredMethod("pick", long.class, int.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])
|
assertThat(list.getAnnotation(Select.class).value()[0])
|
||||||
.contains("booking.warehouse_id = #{warehouseId}")
|
.contains("booking.warehouse_id = #{warehouseId}")
|
||||||
|
|||||||
+14
-3
@@ -157,11 +157,22 @@ class PdaSplitSettlementSqlContractTest {
|
|||||||
.contains("allocation_status = 'CONFIRMED'")
|
.contains("allocation_status = 'CONFIRMED'")
|
||||||
.doesNotContain("THEN 'RELEASED'");
|
.doesNotContain("THEN 'RELEASED'");
|
||||||
|
|
||||||
String release = InboundPalletAllocationMapper.class.getMethod("markReleased",
|
String release = InboundPalletAllocationMapper.class.getMethod("markBlockReleased",
|
||||||
long.class, long.class, long.class)
|
long.class, long.class, long.class)
|
||||||
.getAnnotation(Update.class).value()[0];
|
.getAnnotation(Update.class).value()[0];
|
||||||
assertThat(release)
|
assertThat(release)
|
||||||
.contains("allocation_status = 'RELEASED'")
|
.contains("allocation_status='RELEASED'")
|
||||||
.contains("allocation_status = 'CONFIRMED'");
|
.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'");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user