diff --git a/backend-java/src/main/java/com/nanri/aiimage/modules/dedupe/service/DedupeTotalDataService.java b/backend-java/src/main/java/com/nanri/aiimage/modules/dedupe/service/DedupeTotalDataService.java index 92ab9138..36a05a66 100644 --- a/backend-java/src/main/java/com/nanri/aiimage/modules/dedupe/service/DedupeTotalDataService.java +++ b/backend-java/src/main/java/com/nanri/aiimage/modules/dedupe/service/DedupeTotalDataService.java @@ -1131,8 +1131,8 @@ public class DedupeTotalDataService { } private static final List COUNTRY_CODE_MAP = List.of( - "DE", "UK", "FR", "IT", "ES", "US", - "美国", "德国", "英国", "法国", "意大利", "西班牙"); + "DE", "UK", "FR", "IT", "ES", + "德国", "英国", "法国", "意大利", "西班牙"); private String normalizeCountryCode(String raw) { String upper = normalizeExcelText(raw).toUpperCase(Locale.ROOT); @@ -1144,16 +1144,11 @@ public class DedupeTotalDataService { .replace("FRANCE", "FR") .replace("ITALY", "IT") .replace("SPAIN", "ES") - .replace("USA", "US") - .replace("UNITED STATES", "US") - .replace("UNITEDSTATES", "US") - .replace("AMERICA", "US") .replace("德国", "DE") .replace("英国", "UK") .replace("法国", "FR") .replace("意大利", "IT") - .replace("西班牙", "ES") - .replace("美国", "US"); + .replace("西班牙", "ES"); } /** 将国家列单元格内容解析为标准国家代码(去重后按出现顺序),无有效国家返回 null。 */ diff --git a/backend-java/src/main/resources/db/V90__add_variant_collection_app_menu.sql b/backend-java/src/main/resources/db/V90__add_variant_collection_app_menu.sql new file mode 100644 index 00000000..4725ed32 --- /dev/null +++ b/backend-java/src/main/resources/db/V90__add_variant_collection_app_menu.sql @@ -0,0 +1,17 @@ +-- Register the existing legacy static page in the APP permission menu. +-- The route_path is the menu slug; the page URL is /web_source/variant-collection.html. +INSERT INTO `columns` (`name`, `column_key`, `menu_type`, `route_path`, `sort_order`, `parent_id`) +SELECT 'ASIN变体采集', 'variant-collection', 'app', 'variant-collection', 118, + (SELECT id FROM `columns` WHERE `column_key` = 'brand_front_tools' LIMIT 1) +WHERE NOT EXISTS ( + SELECT 1 FROM `columns` WHERE `column_key` = 'variant-collection' +); + +UPDATE `columns` AS child +JOIN `columns` AS parent ON parent.`column_key` = 'brand_front_tools' +SET child.`name` = 'ASIN变体采集', + child.`menu_type` = 'app', + child.`route_path` = 'variant-collection', + child.`sort_order` = 118, + child.`parent_id` = parent.`id` +WHERE child.`column_key` = 'variant-collection'; diff --git a/backend-java/src/main/resources/db/V91__dedupe_total_data_country.sql b/backend-java/src/main/resources/db/V91__dedupe_total_data_country.sql new file mode 100644 index 00000000..2d43deed --- /dev/null +++ b/backend-java/src/main/resources/db/V91__dedupe_total_data_country.sql @@ -0,0 +1,33 @@ +SET @country_col_exists := ( + SELECT COUNT(*) + FROM information_schema.COLUMNS + WHERE TABLE_SCHEMA = DATABASE() + AND TABLE_NAME = 'biz_dedupe_total_data' + AND COLUMN_NAME = 'country' +); + +SET @sql_add_country := IF( + @country_col_exists = 0, + 'ALTER TABLE biz_dedupe_total_data ADD COLUMN country VARCHAR(64) DEFAULT NULL COMMENT ''国家代码,逗号分隔,如 DE,UK'' AFTER data_value', + 'SELECT 1' +); +PREPARE stmt_add_country FROM @sql_add_country; +EXECUTE stmt_add_country; +DEALLOCATE PREPARE stmt_add_country; + +SET @country_idx_exists := ( + SELECT COUNT(*) + FROM information_schema.STATISTICS + WHERE TABLE_SCHEMA = DATABASE() + AND TABLE_NAME = 'biz_dedupe_total_data' + AND INDEX_NAME = 'idx_country' +); + +SET @sql_add_country_idx := IF( + @country_idx_exists = 0, + 'ALTER TABLE biz_dedupe_total_data ADD INDEX idx_country (country)', + 'SELECT 1' +); +PREPARE stmt_add_country_idx FROM @sql_add_country_idx; +EXECUTE stmt_add_country_idx; +DEALLOCATE PREPARE stmt_add_country_idx; diff --git a/backend-java/src/test/java/com/nanri/aiimage/modules/dedupe/service/DedupeTotalDataServiceTest.java b/backend-java/src/test/java/com/nanri/aiimage/modules/dedupe/service/DedupeTotalDataServiceTest.java index db693eb2..56c77e5e 100644 --- a/backend-java/src/test/java/com/nanri/aiimage/modules/dedupe/service/DedupeTotalDataServiceTest.java +++ b/backend-java/src/test/java/com/nanri/aiimage/modules/dedupe/service/DedupeTotalDataServiceTest.java @@ -202,7 +202,8 @@ class DedupeTotalDataServiceTest { assertEquals(1, result.getInsertedCount()); ArgumentCaptor> captor = ArgumentCaptor.forClass(List.class); verify(dedupeTotalDataMapper).insertBatchIgnore(captor.capture()); - assertEquals("DE,US,UK", captor.getValue().getFirst().getCountry()); + // US 不在五国范围内,应被过滤掉 + assertEquals("DE,UK", captor.getValue().getFirst().getCountry()); } @Test diff --git a/backend/static/admin.js b/backend/static/admin.js index 729d4a80..55498f9e 100644 --- a/backend/static/admin.js +++ b/backend/static/admin.js @@ -2192,7 +2192,7 @@ } function getDedupeTotalDataCountryLabel(countryCodes) { var countryLabels = { - DE: '德国', UK: '英国', FR: '法国', IT: '意大利', ES: '西班牙', US: '美国' + DE: '德国', UK: '英国', FR: '法国', IT: '意大利', ES: '西班牙' }; if (Array.isArray(countryCodes)) { return countryCodes.map(function (code) { return countryLabels[code] || code; }).join('、'); diff --git a/backend/web_source/admin.html b/backend/web_source/admin.html index d415f59b..f2ef9acf 100644 --- a/backend/web_source/admin.html +++ b/backend/web_source/admin.html @@ -182,6 +182,24 @@ white-space: nowrap; } + .dedupe-filter-date-row { + display: flex; + gap: 12px; + align-items: flex-end; + flex-wrap: wrap; + margin-bottom: 16px; + } + + .dedupe-filter-date-row .form-group { + flex: 0 0 200px; + min-width: 0; + margin-bottom: 0; + } + + .dedupe-filter-date-row .dedupe-filter-actions { + margin-left: auto; + } + .btn { padding: 10px 20px; background: #667eea; @@ -2100,9 +2118,13 @@ - +
+ +
+ +
@@ -2112,7 +2134,6 @@
-
@@ -3188,7 +3209,7 @@ - +