Browse Source

feat(dict): 种 attachment_type 商机资料类型 (产品录入 20260825)

- attachment_type 5 项: 现场资料/涉及清单图纸/客户需求资料/招投标相关资料/其他 (票09 附件分类)
- 分组 21→22, item 163→168; 种子测试断言同步, 全绿

行业树形仍挂起: 路② (DictItem 加 parent_id 建两级树) = crm-dict 基础模型扩展, 待立 spec 票 + grill 拍板不变式后单独 implement
master
luoweijian 2 weeks ago
parent
commit
cd7dadec3a
  1. 9
      crm-dict/src/main/java/com/crm/dict/config/DictDataInitializer.java
  2. 23
      crm-dict/src/test/java/com/crm/dict/config/DictDataInitializerTest.java

9
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) {

23
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<DictGroup> 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<DictItem> 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 默认项
}

Loading…
Cancel
Save