From 65f5d0baf605442dfc9f2ceb9a1d6d623f0886a0 Mon Sep 17 00:00:00 2001 From: ganhao Date: Wed, 20 May 2026 18:36:15 +0800 Subject: [PATCH] =?UTF-8?q?=E7=9B=91=E7=9D=A3=E7=AB=AF=E6=9F=A5=E8=AF=A2?= =?UTF-8?q?=E6=89=A7=E6=B3=95=E4=BA=BA=E5=91=98&=E9=9D=9E=E6=89=A7?= =?UTF-8?q?=E6=B3=95=E4=BA=BA=E5=91=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../app/enforcement/AppSystemController.java | 110 ++++++++++++++++++ .../system/domain/bo/QuerySysUserBo.java | 110 ++++++++++++++++++ .../dromara/system/mapper/SysUserMapper.java | 7 +- .../system/service/ISysUserService.java | 6 +- .../service/impl/SysUserServiceImpl.java | 12 +- .../resources/mapper/system/SysUserMapper.xml | 57 ++++----- 6 files changed, 267 insertions(+), 35 deletions(-) create mode 100644 zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/controller/app/enforcement/AppSystemController.java create mode 100644 zdxt-modules/zdxt-system/src/main/java/org/dromara/system/domain/bo/QuerySysUserBo.java diff --git a/zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/controller/app/enforcement/AppSystemController.java b/zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/controller/app/enforcement/AppSystemController.java new file mode 100644 index 00000000..c398d4ca --- /dev/null +++ b/zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/controller/app/enforcement/AppSystemController.java @@ -0,0 +1,110 @@ +package com.zdxt.enforcementcode.controller.app.enforcement; + + +import cn.hutool.core.convert.Convert; +import com.zdxt.enforcementcode.common.config.SrnwgConfig; +import com.zdxt.enforcementcode.common.util.IdCardCryptoUtil; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; +import org.dromara.common.mybatis.core.page.PageQuery; +import org.dromara.common.mybatis.core.page.TableDataInfo; +import org.dromara.common.web.core.BaseController; +import org.dromara.system.domain.bo.QuerySysUserBo; +import org.dromara.system.domain.vo.SysUserVo; +import org.dromara.system.service.ISysUserService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; + +import java.util.List; + +/** + * 执法端共用方法类 + * @Author: kylin + * @Date: 2024/5/1 3:00 下午 + * @Version: 1.0 + * @Desc: TODO + */ +@Slf4j +@Controller +@RequestMapping("/app-enf/app") +public class AppSystemController extends BaseController { + + @Autowired + private ISysUserService userService; + + @Autowired + private SrnwgConfig srnwgConfig; + + /** + * 监督端查询执法人员&非执法人员 + * 排除admin和手机号码为空的数据) + * + * @param user 查询条件 + * @param pageQuery 分页参数 + * @return 分页结果 + */ + @PostMapping("/selectUserListByHave") + @ResponseBody + public TableDataInfo selectUserListByHave(QuerySysUserBo user, PageQuery pageQuery) { + // 初始化 params,避免空指针异常 + if (user.getParams() == null) { + user.setParams(new java.util.HashMap<>()); + } + + // 设置排除的用户ID列表 + if (null != user.getNotUserId()) { + user.getParams().put("notUserIds", Convert.toStrArray(user.getNotUserId())); + } + + // 设置是否显示执法证号标识 + if (null != user.getIsShowCardId()) { + user.getParams().put("showCardId", user.getIsShowCardId()); + } + + // 清空部门ID过滤 + user.setDeptId(null); + + // 调用 Service 层获取分页数据 + TableDataInfo result = userService.selectUserListByHave(user, pageQuery); + List list = result.getRows(); + + // 解密手机号 + if (list != null && !list.isEmpty()) { + decryptPhoneNumbers(list); + } + + return result; + } + + /** + * 批量解密用户手机号 + * + * @param userList 用户列表 + */ + private void decryptPhoneNumbers(List userList) { + String secretKey = srnwgConfig.getSecretKey(); + userList.forEach(user -> { + if (StringUtils.isEmpty(user.getPhonenumber())) { + return; + } + + // 纯数字表示未加密,直接使用 + if (user.getPhonenumber().matches("^\\d+$")) { + return; + } + + // 尝试解密手机号 + try { + String decryptPhone = IdCardCryptoUtil.symmetricDecryptIdCard(secretKey, user.getPhonenumber()); + user.setPhonenumber(decryptPhone); + } catch (Exception e) { + // 解密失败,保持原值 + log.warn("手机号解密失败: {}", user.getPhonenumber(), e); + } + }); + } + +} diff --git a/zdxt-modules/zdxt-system/src/main/java/org/dromara/system/domain/bo/QuerySysUserBo.java b/zdxt-modules/zdxt-system/src/main/java/org/dromara/system/domain/bo/QuerySysUserBo.java new file mode 100644 index 00000000..c0f4a522 --- /dev/null +++ b/zdxt-modules/zdxt-system/src/main/java/org/dromara/system/domain/bo/QuerySysUserBo.java @@ -0,0 +1,110 @@ +package org.dromara.system.domain.bo; + +import lombok.Data; + +import java.io.Serializable; +import java.util.Map; + +/** + * 用户查询对象 sys_user + * + * @author ruoyi + */ +@Data +public class QuerySysUserBo implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 用户ID + */ + private String userId; + + /** + * 部门ID + */ + private String deptId; + + /** + * 部门父ID + */ + private String parentId; + + /** + * 角色ID + */ + private Long roleId; + + /** + * 登录名称 + */ + private String loginName; + + /** + * 用户名称(支持模糊查询用户名称或执法证号) + */ + private String userName; + + /** + * 执法证号 + */ + private String lawCertificateNum; + + /** + * 用户邮箱 + */ + private String email; + + /** + * 手机号码 + */ + private String phonenumber; + + /** + * 用户性别(0男 1女 2未知) + */ + private String sex; + + /** + * 帐号状态(0正常 1停用) + */ + private String status; + + /** + * 删除标志(0代表存在 2代表删除) + */ + private String delFlag; + + /** + * 租户代码 + */ + private String tenantCode; + + /** + * 排除的用户ID(单个) + */ + private String notUserId; + + /** + * 是否显示执法证号(0-是,需要筛选执法人员) + */ + private Integer isShowCardId; + + /** + * 用户类型 + */ + private String type; + + /** + * 扩展参数 + * params.beginTime - 开始时间 + * params.endTime - 结束时间 + * params.notUserIds - 排除的用户ID数组 + * params.showCardId - 是否显示执法证号 + * params.dataScope - 数据权限SQL片段 + */ + private Map params; + + +} + diff --git a/zdxt-modules/zdxt-system/src/main/java/org/dromara/system/mapper/SysUserMapper.java b/zdxt-modules/zdxt-system/src/main/java/org/dromara/system/mapper/SysUserMapper.java index ad10e135..50772fb9 100644 --- a/zdxt-modules/zdxt-system/src/main/java/org/dromara/system/mapper/SysUserMapper.java +++ b/zdxt-modules/zdxt-system/src/main/java/org/dromara/system/mapper/SysUserMapper.java @@ -9,7 +9,9 @@ import org.apache.ibatis.annotations.Param; import org.dromara.common.mybatis.annotation.DataColumn; import org.dromara.common.mybatis.annotation.DataPermission; import org.dromara.common.mybatis.core.mapper.BaseMapperPlus; +import org.dromara.common.mybatis.core.page.PageQuery; import org.dromara.system.domain.SysUser; +import org.dromara.system.domain.bo.QuerySysUserBo; import org.dromara.system.domain.vo.SysUserExportVo; import org.dromara.system.domain.vo.SysUserVo; @@ -134,8 +136,9 @@ public interface SysUserMapper extends BaseMapperPlus { * 多条件查询用户列表(关联部门和租户信息) * * @param user 查询条件 - * @return 用户列表 + * @param page 分页参数 + * @return 用户分页列表 */ - List selectUserListByHave(SysUser user); + Page selectUserListByHave(@Param("user") QuerySysUserBo user, Page page); } diff --git a/zdxt-modules/zdxt-system/src/main/java/org/dromara/system/service/ISysUserService.java b/zdxt-modules/zdxt-system/src/main/java/org/dromara/system/service/ISysUserService.java index 90a182b5..0d05ba71 100644 --- a/zdxt-modules/zdxt-system/src/main/java/org/dromara/system/service/ISysUserService.java +++ b/zdxt-modules/zdxt-system/src/main/java/org/dromara/system/service/ISysUserService.java @@ -3,6 +3,7 @@ package org.dromara.system.service; import org.dromara.common.mybatis.core.page.PageQuery; import org.dromara.common.mybatis.core.page.TableDataInfo; import org.dromara.system.domain.SysUser; +import org.dromara.system.domain.bo.QuerySysUserBo; import org.dromara.system.domain.bo.SysUserBo; import org.dromara.system.domain.vo.SysUserExportVo; import org.dromara.system.domain.vo.SysUserVo; @@ -242,9 +243,10 @@ public interface ISysUserService { * 多条件查询用户列表(关联部门和租户信息) * * @param user 查询条件 - * @return 用户列表 + * @param pageQuery 分页参数 + * @return 用户分页列表 */ - List selectUserListByHave(SysUser user); + TableDataInfo selectUserListByHave(QuerySysUserBo user, PageQuery pageQuery); /** diff --git a/zdxt-modules/zdxt-system/src/main/java/org/dromara/system/service/impl/SysUserServiceImpl.java b/zdxt-modules/zdxt-system/src/main/java/org/dromara/system/service/impl/SysUserServiceImpl.java index ea3522f7..a1f53178 100644 --- a/zdxt-modules/zdxt-system/src/main/java/org/dromara/system/service/impl/SysUserServiceImpl.java +++ b/zdxt-modules/zdxt-system/src/main/java/org/dromara/system/service/impl/SysUserServiceImpl.java @@ -25,6 +25,7 @@ import org.dromara.common.satoken.utils.LoginHelper; import org.dromara.system.domain.SysUser; import org.dromara.system.domain.SysUserPost; import org.dromara.system.domain.SysUserRole; +import org.dromara.system.domain.bo.QuerySysUserBo; import org.dromara.system.domain.bo.SysUserBo; import org.dromara.system.domain.vo.SysPostVo; import org.dromara.system.domain.vo.SysRoleVo; @@ -786,14 +787,17 @@ public class SysUserServiceImpl implements ISysUserService, UserService { } /** - * 多条件查询用户列表(关联部门和租户信息) + * 查询执法人员&非执法人员(排除admin&手机号码为空的数据) * * @param user 查询条件 - * @return 用户列表 + * @param pageQuery 分页参数 + * @return 用户分页列表 */ @Override - public List selectUserListByHave(SysUser user) { - return baseMapper.selectUserListByHave(user); + public TableDataInfo selectUserListByHave(QuerySysUserBo user, PageQuery pageQuery) { + Page page = pageQuery.build(); + Page result = baseMapper.selectUserListByHave(user, page); + return TableDataInfo.build(result); } /** diff --git a/zdxt-modules/zdxt-system/src/main/resources/mapper/system/SysUserMapper.xml b/zdxt-modules/zdxt-system/src/main/resources/mapper/system/SysUserMapper.xml index 0997b5b8..7bf4af1f 100644 --- a/zdxt-modules/zdxt-system/src/main/resources/mapper/system/SysUserMapper.xml +++ b/zdxt-modules/zdxt-system/src/main/resources/mapper/system/SysUserMapper.xml @@ -39,7 +39,7 @@ ${ew.getCustomSqlSegment} - select u.user_id, u.dept_id, u.login_name, u.user_name, u.email, u.avatar, u.phonenumber, u.password, u.sex, u.salt, u.status, u.del_flag, u.login_ip, u.login_date, u.create_by, u.create_time, u.remark, u.type, d.dept_name,d.zzDisplayPath, u.law_certificate_num, d.leader,u.tenant_code,t.tenant_code, t.tenant_name, t.contact_man, t.contact_number, t.address @@ -47,45 +47,45 @@ left join sys_dept d on u.dept_id = d.dept_id left join sys_tenant t on t.tenant_code = u.tenant_code where u.del_flag = '0' - - AND u.user_id = #{userId} + + AND u.user_id = #{user.userId} - - AND u.login_name like concat('%', #{loginName}, '%') + + AND u.login_name like concat('%', #{user.loginName}, '%') - + AND ( - u.user_name like concat('%', #{userName}, '%') + u.user_name like concat('%', #{user.userName}, '%') or - u.law_certificate_num like concat('%', #{userName}, '%') + u.law_certificate_num like concat('%', #{user.userName}, '%') ) - - AND u.status = #{status} + + AND u.status = #{user.status} - - AND u.phonenumber like concat('%', #{phonenumber}, '%') + + AND u.phonenumber like concat('%', #{user.phonenumber}, '%') - - AND date_format(u.create_time,'%y%m%d') >= date_format(#{params.beginTime},'%y%m%d') + + AND date_format(u.create_time,'%y%m%d') >= date_format(#{user.params.beginTime},'%y%m%d') - - AND date_format(u.create_time,'%y%m%d') <= date_format(#{params.endTime},'%y%m%d') + + AND date_format(u.create_time,'%y%m%d') <= date_format(#{user.params.endTime},'%y%m%d') - - and u.dept_id = #{deptId} + + and u.dept_id = #{user.deptId} - - - AND u.tenant_code = #{tenantCode} - - + + + + + and u.user_id not in - + #{uid} - + AND ( (u.law_certificate_num is not null AND u.law_certificate_num !="") or (d.`zone` = 5 or d.`zone` = 15) @@ -93,9 +93,12 @@ ) and u.dept_id != 405 - + - ${params.dataScope} + ${user.params.dataScope} + and (phonenumber is not null and phonenumber !='') + and u.login_name != 'admin' + ORDER BY u.create_time DESC