feat(user-verify): 添加操作员信息关联及数据去重功能

- 在 UserVerify 实体类中添加 adminName 字段用于显示操作员名称
- 修改控制器在验证过程中自动设置当前登录用户为操作员 ID
- 更新 MyBatis 查询 SQL 以关联查询操作员昵称信息
- 实现防止同一用户在验证表中重复记录的数据去重逻辑
- 添加基于用户 ID 分组并获取最新记录的查询优化
- 支持按操作员 ID 进行筛选查询功能
This commit is contained in:
2026-02-05 17:39:57 +08:00
parent 6462e51bc8
commit 823c56293d
3 changed files with 89 additions and 2 deletions

View File

@@ -123,6 +123,8 @@ public class UserVerifyController extends BaseController {
if (userVerify.getType().equals(1)) {
byUserId.setRealName(userVerify.getName());
}
// 设置管理员id
userVerify.setAdminId(loginUser.getUserId());
}
userService.updateById(byUserId);

View File

@@ -61,9 +61,13 @@ public class UserVerify implements Serializable {
@Schema(description = "其他证件")
private String files;
@Schema(description = "审核人")
@Schema(description = "操作员ID")
private Integer adminId;
@Schema(description = "操作员名称")
@TableField(exist = false)
private String adminName;
@Schema(description = "机构ID")
private Integer organizationId;

View File

@@ -4,10 +4,11 @@
<!-- 关联查询sql -->
<sql id="selectSql">
SELECT a.*, b.phone, c.organization_name
SELECT a.*, b.phone, c.organization_name, d.nickname as adminName
FROM sys_user_verify a
LEFT JOIN sys_user b ON a.user_id = b.user_id
LEFT JOIN sys_organization c ON a.organization_id = c.organization_id
LEFT JOIN sys_user d ON a.admin_id = d.user_id
<where>
<if test="param.id != null">
AND a.id = #{param.id}
@@ -77,6 +78,86 @@
OR a.zz_code = #{param.keywords}
)
</if>
<!--
防止同一个 user_id 在 sys_user_verify 中存在多条记录时,列表查询返回 userId 重复。
这里保留每个 user_id 的最新一条记录(按 id 最大)。
注意:当按主键 id 精确查询时不做去重,避免把历史记录过滤掉。
-->
<if test="param.id == null">
AND a.id IN (
SELECT MAX(v.id)
FROM sys_user_verify v
LEFT JOIN sys_user u ON v.user_id = u.user_id
<where>
<if test="param.userId != null">
AND v.user_id = #{param.userId}
</if>
<if test="param.type != null">
AND v.type = #{param.type}
</if>
<if test="param.name != null">
AND v.name LIKE CONCAT('%', #{param.name}, '%')
</if>
<if test="param.realName != null">
AND v.real_name LIKE CONCAT('%', #{param.realName}, '%')
</if>
<if test="param.idCard != null">
AND v.id_card LIKE CONCAT('%', #{param.idCard}, '%')
</if>
<if test="param.birthday != null">
AND v.birthday LIKE CONCAT('%', #{param.birthday}, '%')
</if>
<if test="param.sfz1 != null">
AND v.sfz1 LIKE CONCAT('%', #{param.sfz1}, '%')
</if>
<if test="param.sfz2 != null">
AND v.sfz2 LIKE CONCAT('%', #{param.sfz2}, '%')
</if>
<if test="param.zzCode != null">
AND v.zz_code = #{param.zzCode}
</if>
<if test="param.adminId != null">
AND v.admin_id = #{param.adminId}
</if>
<if test="param.organizationId != null">
AND v.organization_id = #{param.organizationId}
</if>
<if test="param.comments != null">
AND v.comments LIKE CONCAT('%', #{param.comments}, '%')
</if>
<if test="param.status != null">
AND v.status = #{param.status}
</if>
<if test="param.deleted != null">
AND v.deleted = #{param.deleted}
</if>
<if test="param.deleted == null">
AND v.deleted = 0
</if>
<if test="param.createTimeStart != null">
AND v.create_time &gt;= #{param.createTimeStart}
</if>
<if test="param.createTimeEnd != null">
AND v.create_time &lt;= #{param.createTimeEnd}
</if>
<if test="param.organizationIds != null">
AND v.organization_id IN
<foreach collection="param.organizationIds" item="item" separator="," open="(" close=")">
#{item}
</foreach>
</if>
<if test="param.keywords != null">
AND (v.name LIKE CONCAT('%', #{param.keywords}, '%')
OR v.real_name LIKE CONCAT('%', #{param.keywords}, '%')
OR u.phone = #{param.keywords}
OR v.id_card = #{param.keywords}
OR v.zz_code = #{param.keywords}
)
</if>
</where>
GROUP BY v.user_id
)
</if>
</where>
</sql>