This commit is contained in:
2026-08-07 17:46:23 +08:00
parent 98ac9840c2
commit 645c483649
22 changed files with 370 additions and 29 deletions
@@ -28,6 +28,8 @@ class PriceBookSqlContractTest {
assertThat(schema)
.contains("CREATE TABLE IF NOT EXISTS fl_price_channel_catalog")
.contains("CREATE TABLE IF NOT EXISTS fl_price_origin_alias")
.contains("CREATE TABLE IF NOT EXISTS fl_price_warehouse_mapping")
.contains("华南仓(深圳/东莞)")
.contains("CREATE TABLE IF NOT EXISTS fl_price_book_version")
.contains("CREATE TABLE IF NOT EXISTS fl_price_book_channel")
.contains("price_book_version_id")
@@ -40,6 +42,11 @@ class PriceBookSqlContractTest {
.contains("destination_name VARCHAR(128)")
.contains("parse_issues_json JSON NULL")
.contains("DEFAULT 'PENDING_CONFIRMATION'");
assertThat(schema)
.contains("'ORIGIN_CODE', 'CN-YIWU-01', 193000000000200001")
.contains("'ORIGIN_CODE', 'CN-DONGGUAN-01', 193000000000200002")
.contains("'OVERSEAS_NAME', '洛杉矶仓', 193000000000200003")
.contains("'OVERSEAS_NAME', '纽约仓', 193000000000200004");
assertThat(channelTable)
.contains("created_by BIGINT UNSIGNED NOT NULL COMMENT '创建人ID'")
.contains("updated_by BIGINT UNSIGNED NOT NULL COMMENT '最后修改人ID'")
@@ -14,6 +14,7 @@ import com.baiyue.firstleg.entity.CarrierFbaRateEntity;
import com.baiyue.firstleg.entity.PriceBookChannelEntity;
import com.baiyue.firstleg.entity.PriceBookVersionEntity;
import com.baiyue.firstleg.entity.PriceChannelCatalogEntity;
import com.baiyue.firstleg.entity.PriceWarehouseMappingEntity;
import com.baiyue.firstleg.repository.PriceBookRepository;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.junit.jupiter.api.BeforeEach;
@@ -230,6 +231,29 @@ class PlatformPriceBookServiceTest {
.doesNotContain("DUPLICATE_RATE");
}
@Test
void initializedWarehouseMappingsBindFixedDomesticAndOverseasWarehouses() {
CarrierFbaRateEntity overseasRate = rate(81L);
overseasRate.setDestinationType(PricingDestinationType.OVERSEAS.name());
overseasRate.setDestinationCode(null);
overseasRate.setDestinationName("洛杉矶仓");
PriceBookDtos.ParsedRate parsed = ReflectionTestUtils.invokeMethod(service, "rateDto", overseasRate);
when(repository.activeWarehouseMappings()).thenReturn(List.of(
warehouseMapping("ORIGIN_CODE", "CN-YIWU-01", 193000000000200001L, "CN-YIWU-01", "DOMESTIC"),
warehouseMapping("OVERSEAS_NAME", "洛杉矶仓", 193000000000200003L, "US-LAX-01", "OVERSEAS")
));
@SuppressWarnings("unchecked")
List<PriceBookDtos.ParsedRate> mapped = ReflectionTestUtils.invokeMethod(
service, "applyInitializedWarehouseMappings", List.of(parsed));
assertThat(mapped).singleElement().satisfies(rate -> {
assertThat(rate.originWarehouseId()).isEqualTo(193000000000200001L);
assertThat(rate.destinationWarehouseId()).isEqualTo(193000000000200003L);
assertThat(rate.destinationCode()).isEqualTo("US-LAX-01");
});
}
@Test
void duplicatePublishIsRejectedAfterPublishLock() {
when(repository.findVersion(31L)).thenReturn(version(31L, PriceBookStatus.ACTIVE));
@@ -300,6 +324,18 @@ class PlatformPriceBookServiceTest {
List.of(new PriceBookConfirmationRequest.OriginMapping(code, id)), List.of());
}
private static PriceWarehouseMappingEntity warehouseMapping(String sourceType, String sourceValue, long warehouseId,
String warehouseCode, String warehouseType) {
PriceWarehouseMappingEntity value = new PriceWarehouseMappingEntity();
value.setSourceType(sourceType);
value.setSourceValue(sourceValue);
value.setWarehouseId(warehouseId);
value.setWarehouseCode(warehouseCode);
value.setWarehouseType(warehouseType);
value.setStatus("ACTIVE");
return value;
}
private void executeTransactionsImmediately() {
when(transactions.execute(any())).thenAnswer(invocation -> {
@SuppressWarnings("unchecked")