# 按企业查询用户接口设计 - 日期:2026-07-27 - 模块:`txw-mhzc`(门户主站) - 状态:待用户审阅 ## 1. 背景与目标 ### 1.1 需求 新增一个按企业名称(及登录账号)查询用户的接口: - 入参:单个 `key` 关键字,对 `dlzh`(登录账号)或 `qymc`(企业名称)做 **OR 模糊匹配**;`key` 为空时返回空结果 - 出参:符合条件的 `dlzh` + `qymc` 列表,分页返回 - 一个用户可关联多个企业,匹配结果**每个企业一条记录**(dlzh 可重复) ### 1.2 设计目标 - 与现有代码风格一致(XML 处理复杂 SQL、default 方法处理简单 wrapper) - 不污染现有 `getAllUser` 接口,独立新增 - 单条 SQL 完成三表 JOIN,分页由 MyBatis-Plus 插件自动包装 ## 2. 数据模型 | 表 | 关键字段 | |---|---| | `txw_mhzc_yhxxb`(用户表) | `yh_uuid`、`dlzh`(登录账号)、`yxbz`(有效标志 Y/N)、`sdbz`(锁定标志 Y/N) | | `txw_mhzc_qyxxb`(企业表) | `qyuuid`、`qymc`(企业名称) | | `txw_mhzc_yhqygxb`(用户-企业关系表) | `yh_uuid` → `qyuuid`,**一对多** | 用户过滤硬性条件:`yxbz = 'Y' AND sdbz = 'N'`(与 `getYhxxByDlzh` 等现有查询保持一致)。 ## 3. 接口契约 ### 3.1 请求 ``` POST /user/listUserByQy Content-Type: application/json ``` 请求体 `UserQyReqVO`: | 字段 | 类型 | 必填 | 说明 | |---|---|---|---| | `key` | String | 是 | 模糊匹配关键字,对 `dlzh` 或 `qymc` 任一命中即返回 | | `pageNo` | Integer | 是 | 页码(继承 `PageParam`) | | `pageSize` | Integer | 是 | 每页大小(继承 `PageParam`) | `key` 为空字符串或 null → 返回空结果;`key` 非空 → 对 `dlzh` 与 `qymc` 做 OR 模糊匹配。 ### 3.2 响应 ```json { "code": 0, "msg": "ok", "data": { "total": 42, "current": 1, "size": 10, "pages": 5, "records": [ { "dlzh": "zhangsan@qy", "qymc": "某某科技有限公司" }, { "dlzh": "zhangsan@qy", "qymc": "某某集团" } ] } } ``` `UserQyVO` 字段: | 字段 | 类型 | 说明 | |---|---|---| | `dlzh` | String | 登录账号 | | `qymc` | String | 企业名称 | ## 4. 组件设计 ### 4.1 新增文件 | 文件 | 作用 | |---|---| | `pojo/vo/UserQyReqVO.java` | 入参 VO(含 `dlzh`、`qymc`,继承 `PageParam`) | | `pojo/vo/UserQyVO.java` | 出参 VO(`dlzh` + `qymc`) | | `mapper/TxwMhzcYhxxbMapper.java` | 新增 `listUserByQy` 方法 | | `mapper/TxwMhzcYhxxbMapper.xml` | 新增对应 `) → DB: 三表 JOIN + LIKE + 分页 → Page ``` ## 5. SQL 设计 ```xml ``` - `LIKE` 参数通过 MyBatis `#{}` 占位符绑定,`%` 由 `CONCAT` 在 SQL 内拼接,不存在 SQL 注入风险 - `` 分支保证 `key` 为空时 SQL 必定返回空(`AND 1=0` 短路),不依赖调用方 - 分页由 MyBatis-Plus 的 `PaginationInnerInterceptor` 自动包装(项目已有配置) ## 6. 代码骨架 ### 6.1 `UserQyReqVO.java` ```java package com.css.txw.mhzc.pojo.vo; import com.css.ggzc.framework.common.pojo.PageParam; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; @Schema(description = "按企业查询用户请求") @Data public class UserQyReqVO extends PageParam { @Schema(description = "关键字,对登录账号或企业名称做模糊匹配(必填,为空时返回空结果)") private String key; } ``` ### 6.2 `UserQyVO.java` ```java package com.css.txw.mhzc.pojo.vo; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; @Schema(description = "用户-企业匹配结果") @Data public class UserQyVO { @Schema(description = "登录账号") private String dlzh; @Schema(description = "企业名称") private String qymc; } ``` ### 6.3 `TxwMhzcYhxxbMapper.java` 新增方法 ```java Page listUserByQy(IPage page, @Param("reqVO") UserQyReqVO reqVO); ``` > **备注**:项目内 MyBatis-Plus 习惯 `default` 方法直接用 `QueryWrapper`,复杂 SQL 才走 XML。本接口需三表 JOIN + LIKE + 分页,**直接走 XML**。Mapper 接口只声明方法,由 `TxwMhzcYhxxbMapper.xml` 中 `