diff --git a/xiaoqu-agent-service/front/src/App.vue b/xiaoqu-agent-service/front/src/App.vue index 8ea33bc..ae4a5ba 100644 --- a/xiaoqu-agent-service/front/src/App.vue +++ b/xiaoqu-agent-service/front/src/App.vue @@ -254,7 +254,7 @@ onMounted(async () => {
-
人员来自现有 user 表
+
人员来自现有 user 表 · 仅企业账号(不含物业)
diff --git a/xiaoqu-agent-service/src/main/java/me/iiv/agent/admin/AdminConsoleController.java b/xiaoqu-agent-service/src/main/java/me/iiv/agent/admin/AdminConsoleController.java index a059811..b21e816 100644 --- a/xiaoqu-agent-service/src/main/java/me/iiv/agent/admin/AdminConsoleController.java +++ b/xiaoqu-agent-service/src/main/java/me/iiv/agent/admin/AdminConsoleController.java @@ -88,7 +88,9 @@ public class AdminConsoleController { if (keyword.length() > 100) bad("搜索关键词最多 100 字"); int pageNo = Math.max(page, 1); int size = pageSize < 1 ? 20 : Math.min(pageSize, 100); - LambdaQueryWrapper query = new LambdaQueryWrapper().eq(User::getSoftDelete, 0); + LambdaQueryWrapper query = new LambdaQueryWrapper().eq(User::getSoftDelete, 0) + // 只查企业账号(0=企业内部 1=代理),物业账号(2)不进列表;历史数据可能为 NULL 一并保留 + .and(w -> w.ne(User::getEnterpriseType, 2).or().isNull(User::getEnterpriseType)); if (!keyword.isBlank()) query.and(w -> w.like(User::getName, keyword.trim()) .or().like(User::getMobile, keyword.trim())); Long total = userMapper.selectCount(query); diff --git a/xiaoqu-agent-service/src/test/java/me/iiv/agent/admin/AdminConsoleControllerTest.java b/xiaoqu-agent-service/src/test/java/me/iiv/agent/admin/AdminConsoleControllerTest.java index ccbf91d..5dec504 100644 --- a/xiaoqu-agent-service/src/test/java/me/iiv/agent/admin/AdminConsoleControllerTest.java +++ b/xiaoqu-agent-service/src/test/java/me/iiv/agent/admin/AdminConsoleControllerTest.java @@ -19,6 +19,7 @@ import org.mockito.junit.jupiter.MockitoExtension; import java.util.List; import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertTrue; import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.when; @@ -41,6 +42,10 @@ class AdminConsoleControllerTest { @BeforeEach void setUp() { + com.baomidou.mybatisplus.core.metadata.TableInfoHelper.initTableInfo( + new org.apache.ibatis.builder.MapperBuilderAssistant( + new com.baomidou.mybatisplus.core.MybatisConfiguration(), ""), + me.iiv.agent.entity.m0.User.class); controller = new AdminConsoleController(userMapper, authorityMapper, agentMapper, tokenMapper, scopeMapper, toolMapper, scopeToolMapper, auditMapper, tokenScopeMapper, permissionService, tokenService); @@ -62,4 +67,15 @@ class AdminConsoleControllerTest { assertEquals(1, view.page()); assertEquals(20, view.pageSize()); } + + @Test + void usersExcludesPropertyAccounts() { + controller.users("", 1, 20); + org.mockito.ArgumentCaptor> + captor = org.mockito.ArgumentCaptor.forClass(com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper.class); + org.mockito.Mockito.verify(userMapper, org.mockito.Mockito.atLeastOnce()).selectCount(captor.capture()); + String sql = captor.getValue().getSqlSegment(); + assertTrue(sql.contains("enterprise_type"), "用户列表必须过滤物业账号: " + sql); + assertTrue(sql.contains("IS NULL"), "历史 NULL 数据需保留: " + sql); + } }