Browse Source

feat(opportunity): 票09 步5 行业回显改查 industry 分组一级 code (Q7)

- fillDictNames industry_code 分组(从不存在) → industry 两级树分组; 商机存/查一级 code
- 测试 mock industry_code/it → industry/gov(政府机关), 断言回显政府机关
- crm-dict/lead/opportunity 全回归绿 (dict 51 / lead 116 / opportunity 152)
master
luoweijian 2 weeks ago
parent
commit
319539282b
  1. 6
      crm-opportunity/src/main/java/com/crm/opportunity/query/impl/OpportunityViewQueryImpl.java
  2. 10
      crm-opportunity/src/test/java/com/crm/opportunity/query/impl/OpportunityViewQueryImplTest.java

6
crm-opportunity/src/main/java/com/crm/opportunity/query/impl/OpportunityViewQueryImpl.java

@ -231,7 +231,9 @@ public class OpportunityViewQueryImpl implements OpportunityViewQuery {
/**
* 字典名称快照回显对称 crm-lead {@code fillDictNames}商机来源 / 行业
* <p>groupCode 契约见 PRD §10 字典清单{@code opp_source} / {@code industry_code}
* <p>groupCode 契约见 PRD §10 字典清单{@code opp_source} / {@code industry}
* 行业为全系统通用两级树 09商机只选到一级{@code industryCode} 存一级 codeQ7
* 故回显按 {@code industry} 分组查一级名
* {@link DictQueryService#getItem}含停用项扛历史数据回显Caffeine 缓存
* (分组, code) 去重后逐个查同一页内重复值只查一次DTO 仅暴露
* {@code oppSourceName}/{@code industryName} 两回显位oppType/bidForm/localityType Name 不填</p>
@ -239,7 +241,7 @@ public class OpportunityViewQueryImpl implements OpportunityViewQuery {
private void fillDictNames(List<OpportunityDTO> dtos) {
Map<String, String> sourceNames = dictNames("opp_source",
dtos.stream().map(OpportunityDTO::getOppSource).collect(Collectors.toSet()));
Map<String, String> industryNames = dictNames("industry_code",
Map<String, String> industryNames = dictNames("industry",
dtos.stream().map(OpportunityDTO::getIndustryCode).collect(Collectors.toSet()));
dtos.forEach(d -> {
d.setOppSourceName(sourceNames.get(d.getOppSource()));

10
crm-opportunity/src/test/java/com/crm/opportunity/query/impl/OpportunityViewQueryImplTest.java

@ -250,7 +250,7 @@ class OpportunityViewQueryImplTest {
Opportunity opp = new Opportunity();
opp.setId(7001L);
opp.setOppSource("lead_transfer");
opp.setIndustryCode("it");
opp.setIndustryCode("gov");
opp.setOwnerDeptId(300L);
opp.setProvinceCode("440000");
opp.setCityCode("440300");
@ -258,13 +258,13 @@ class OpportunityViewQueryImplTest {
page.setRecords(List.of(opp));
when(opportunityMapper.selectPage(any(), any())).thenReturn(page);
// 字典:(opp_source, lead_transfer) / (industry_code, it)
// 字典:(opp_source, lead_transfer) / (industry, gov) — 行业商机只选到一级 code(票 09 Q7)
com.crm.dict.domain.entity.DictItem srcItem = new com.crm.dict.domain.entity.DictItem();
srcItem.setName("线索转入");
com.crm.dict.domain.entity.DictItem indItem = new com.crm.dict.domain.entity.DictItem();
indItem.setName("信息技术");
indItem.setName("政府机关");
when(dictQueryService.getItem("opp_source", "lead_transfer")).thenReturn(srcItem);
when(dictQueryService.getItem("industry_code", "it")).thenReturn(indItem);
when(dictQueryService.getItem("industry", "gov")).thenReturn(indItem);
// 部门:300 -> 华南大区
com.crm.auth.domain.entity.SysDept dept = new com.crm.auth.domain.entity.SysDept();
@ -286,7 +286,7 @@ class OpportunityViewQueryImplTest {
OpportunityDTO dto = query.pageOpportunities(param).getContent().get(0);
assertThat(dto.getOppSourceName()).isEqualTo("线索转入");
assertThat(dto.getIndustryName()).isEqualTo("信息技术");
assertThat(dto.getIndustryName()).isEqualTo("政府机关");
assertThat(dto.getOwnerDeptName()).isEqualTo("华南大区");
assertThat(dto.getProvinceName()).isEqualTo("广东省");
assertThat(dto.getCityName()).isEqualTo("深圳市");

Loading…
Cancel
Save