diff --git a/crm-opportunity/src/main/java/com/crm/opportunity/query/impl/OpportunityViewQueryImpl.java b/crm-opportunity/src/main/java/com/crm/opportunity/query/impl/OpportunityViewQueryImpl.java
index ba80576..f85fd54 100644
--- a/crm-opportunity/src/main/java/com/crm/opportunity/query/impl/OpportunityViewQueryImpl.java
+++ b/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}):商机来源 / 行业。
- *
groupCode 契约见 PRD §10 字典清单({@code opp_source} / {@code industry_code})。
+ *
groupCode 契约见 PRD §10 字典清单({@code opp_source} / {@code industry})。
+ * 行业为全系统通用两级树(票 09),商机只选到一级,{@code industryCode} 存一级 code(Q7),
+ * 故回显按 {@code industry} 分组查一级名。
* 走 {@link DictQueryService#getItem}(含停用项,扛历史数据回显,Caffeine 缓存),
* 按 (分组, code) 去重后逐个查,同一页内重复值只查一次。DTO 仅暴露
* {@code oppSourceName}/{@code industryName} 两回显位(oppType/bidForm/localityType 无 Name 位,不填)。
@@ -239,7 +241,7 @@ public class OpportunityViewQueryImpl implements OpportunityViewQuery {
private void fillDictNames(List dtos) {
Map sourceNames = dictNames("opp_source",
dtos.stream().map(OpportunityDTO::getOppSource).collect(Collectors.toSet()));
- Map industryNames = dictNames("industry_code",
+ Map industryNames = dictNames("industry",
dtos.stream().map(OpportunityDTO::getIndustryCode).collect(Collectors.toSet()));
dtos.forEach(d -> {
d.setOppSourceName(sourceNames.get(d.getOppSource()));
diff --git a/crm-opportunity/src/test/java/com/crm/opportunity/query/impl/OpportunityViewQueryImplTest.java b/crm-opportunity/src/test/java/com/crm/opportunity/query/impl/OpportunityViewQueryImplTest.java
index 1bda46c..daffb16 100644
--- a/crm-opportunity/src/test/java/com/crm/opportunity/query/impl/OpportunityViewQueryImplTest.java
+++ b/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("深圳市");