From cd7dadec3a3bb1cbc628c6c1cd8c86ac5c0cef63 Mon Sep 17 00:00:00 2001 From: luoweijian <1329394916@qq.com> Date: Tue, 25 Aug 2026 15:28:10 +0800 Subject: [PATCH] =?UTF-8?q?feat(dict):=20=E7=A7=8D=20attachment=5Ftype=20?= =?UTF-8?q?=E5=95=86=E6=9C=BA=E8=B5=84=E6=96=99=E7=B1=BB=E5=9E=8B=20(?= =?UTF-8?q?=E4=BA=A7=E5=93=81=E5=BD=95=E5=85=A5=2020260825)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - attachment_type 5 项: 现场资料/涉及清单图纸/客户需求资料/招投标相关资料/其他 (票09 附件分类) - 分组 21→22, item 163→168; 种子测试断言同步, 全绿 行业树形仍挂起: 路② (DictItem 加 parent_id 建两级树) = crm-dict 基础模型扩展, 待立 spec 票 + grill 拍板不变式后单独 implement --- .../crm/dict/config/DictDataInitializer.java | 9 +++++++- .../dict/config/DictDataInitializerTest.java | 23 ++++++++++--------- 2 files changed, 20 insertions(+), 12 deletions(-) diff --git a/crm-dict/src/main/java/com/crm/dict/config/DictDataInitializer.java b/crm-dict/src/main/java/com/crm/dict/config/DictDataInitializer.java index 55260a3..2042429 100644 --- a/crm-dict/src/main/java/com/crm/dict/config/DictDataInitializer.java +++ b/crm-dict/src/main/java/com/crm/dict/config/DictDataInitializer.java @@ -250,7 +250,14 @@ public class DictDataInitializer implements CommandLineRunner { new ItemSeed("customer_role_03", "投资方", "customer_role_03", 3, null, false), new ItemSeed("customer_role_04", "设计院", "customer_role_04", 4, null, false), new ItemSeed("customer_role_05", "集成商", "customer_role_05", 5, null, false), - new ItemSeed("customer_role_06", "投标公司", "customer_role_06", 6, null, false)))); + new ItemSeed("customer_role_06", "投标公司", "customer_role_06", 6, null, false))), + new GroupSeed("attachment_type", "商机资料类型", 22, "商机附件资料分类(票 09 attachment.attachment_type;产品录入 20260825)", + List.of( + new ItemSeed("attachment_type_01", "现场资料", "attachment_type_01", 1, null, false), + new ItemSeed("attachment_type_02", "涉及清单/图纸", "attachment_type_02", 2, null, false), + new ItemSeed("attachment_type_03", "客户需求资料", "attachment_type_03", 3, null, false), + new ItemSeed("attachment_type_04", "招投标相关资料", "attachment_type_04", 4, null, false), + new ItemSeed("attachment_type_99", "其他", "attachment_type_99", 5, null, false)))); @Override public void run(String... args) { diff --git a/crm-dict/src/test/java/com/crm/dict/config/DictDataInitializerTest.java b/crm-dict/src/test/java/com/crm/dict/config/DictDataInitializerTest.java index d1747d1..94a440c 100644 --- a/crm-dict/src/test/java/com/crm/dict/config/DictDataInitializerTest.java +++ b/crm-dict/src/test/java/com/crm/dict/config/DictDataInitializerTest.java @@ -31,27 +31,28 @@ class DictDataInitializerTest extends AbstractDictH2Test { } @Test - @DisplayName("首装:21 个内置分组 + 163 个内置项全部建库,ref_count 预建,种子默认项生效") + @DisplayName("首装:22 个内置分组 + 168 个内置项全部建库,ref_count 预建,种子默认项生效") void firstRun_createsBuiltinDictsWithDefaults() { initializer.run(); List groups = dictGroupMapper.selectList(null); - assertThat(groups).hasSize(21); + assertThat(groups).hasSize(22); assertThat(groups).extracting(DictGroup::getCode) .containsExactlyInAnyOrder("lead_source", "customer_status", "industry", "brand", "product", "scene", "opp_stage", "opp_source", "opp_type", "bid_form", "result_tag", "design_config", "pause_reason", "pool_reason", "project_role", "close_reason", - "locality_type", "follow_way", "survey_seq", "apply_way", "customer_role"); + "locality_type", "follow_way", "survey_seq", "apply_way", "customer_role", + "attachment_type"); assertThat(groups).allMatch(g -> Boolean.TRUE.equals(g.getBuiltin())); assertThat(groups).allMatch(g -> g.getStatus() == DictConstants.STATUS_ENABLED); List items = dictItemMapper.selectList(null); - assertThat(items).hasSize(163); // 144 + 属地2 + 跟进方式5 + 勘察次数4 + 申请方式2 + 客户角色6 + assertThat(items).hasSize(168); // 163 + 资料类型5 assertThat(items).allMatch(i -> Boolean.TRUE.equals(i.getBuiltin())); // 引用计数行预建(与新建接口同口径) - assertThat(dictRefCountMapper.selectCount(null)).isEqualTo(163); + assertThat(dictRefCountMapper.selectCount(null)).isEqualTo(168); DictGroup statusGroup = groups.stream() .filter(g -> g.getCode().equals("customer_status")).findFirst().orElseThrow(); DictItem potential = dictItemMapper.selectList(null).stream() @@ -72,9 +73,9 @@ class DictDataInitializerTest extends AbstractDictH2Test { initializer.run(); initializer.run(); - assertThat(dictGroupMapper.selectCount(null)).isEqualTo(21); - assertThat(dictItemMapper.selectCount(null)).isEqualTo(163); - assertThat(dictRefCountMapper.selectCount(null)).isEqualTo(163); + assertThat(dictGroupMapper.selectCount(null)).isEqualTo(22); + assertThat(dictItemMapper.selectCount(null)).isEqualTo(168); + assertThat(dictRefCountMapper.selectCount(null)).isEqualTo(168); assertThat(dictGroupDefaultMapper.selectCount(null)).isEqualTo(1); } @@ -198,11 +199,11 @@ class DictDataInitializerTest extends AbstractDictH2Test { assertThat(dictItemMapper.selectList(null).stream() .filter(i -> i.getGroupId().equals(userGroup.getId()))).isEmpty(); // 种子其他分组不受影响(继续正常导入):customer_status + industry + brand + product + scene + opp_stage + 8 商机分组 - assertThat(dictGroupMapper.selectCount(null)).isEqualTo(21); // lead_source(用户) + 其余 20 个内置分组 + assertThat(dictGroupMapper.selectCount(null)).isEqualTo(22); // lead_source(用户) + 其余 21 个内置分组 assertThat(dictGroupMapper.selectList(null).stream() .filter(g -> g.getCode().equals("industry"))).hasSize(1); - assertThat(dictItemMapper.selectCount(null)).isEqualTo(125); // 163 - 渠道 38(用户分组整组跳过) - assertThat(dictRefCountMapper.selectCount(null)).isEqualTo(125); + assertThat(dictItemMapper.selectCount(null)).isEqualTo(130); // 168 - 渠道 38(用户分组整组跳过) + assertThat(dictRefCountMapper.selectCount(null)).isEqualTo(130); assertThat(dictGroupDefaultMapper.selectCount(null)).isEqualTo(1); // customer_status 默认项 }