From 78e51df691a534522dc2e1f9c3dee59a7c9b8bc3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BA=84=E9=94=90=E6=B3=A2?= <10549902+zhuangruibo@user.noreply.gitee.com> Date: Wed, 20 May 2026 20:55:39 +0800 Subject: [PATCH] =?UTF-8?q?=E6=89=A7=E6=B3=95=E7=AB=AF-=E8=AE=A1=E5=88=92?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../enforcement/AppEnfLoginController.java | 182 +++++++++--------- 1 file changed, 91 insertions(+), 91 deletions(-) diff --git a/zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/controller/app/enforcement/AppEnfLoginController.java b/zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/controller/app/enforcement/AppEnfLoginController.java index 47261aa4..5e670ee5 100644 --- a/zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/controller/app/enforcement/AppEnfLoginController.java +++ b/zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/controller/app/enforcement/AppEnfLoginController.java @@ -28,97 +28,97 @@ public class AppEnfLoginController extends LoginController { private final ISysUserService sysUserService; private final ISysDeptService sysDeptService; private final IAppEnfLoginService appEnfLoginService; -// -// /** -// * 执法端用户登录 -// * -// * @param params 包含 secretName(登录账号)和 secretKey(AES加密后的密码) -// * @return 登录结果(token + 用户信息) -// */ -// @SaIgnore -// @PostMapping("/do") -// public R> validate(@RequestBody Map params) { -// String loginName = params.get("secretName"); -// String secretKey = params.get("secretKey"); -// -// // 1. 参数校验 -// R> paramCheck = validateLoginParams(loginName, secretKey); -// if (paramCheck != null) { -// return paramCheck; -// } -// -// // 2. 根据登录账号查询 sys_user 表 -// SysUserVo user = sysUserService.selectUserByLoginName(loginName); -// if (user == null) { -// return R.fail("用户不存在"); -// } -// -// // 3. 检查用户状态(0正常 1停用) -// if ("1".equals(user.getStatus())) { -// return R.fail("该用户已被停用"); -// } -// -// // 4. AES解密前端传来的密码 -// String decryptedPassword = decryptPassword(secretKey); -// if (decryptedPassword == null) { -// return R.fail("密码解密失败"); -// } -// -// // 5. MD5加盐校验密码(使用loginName作为加盐因子) -// if (!verifyPassword(loginName, decryptedPassword, user.getSalt(), user.getPassword())) { -// return R.fail("用户名或密码错误"); -// } -// -// // 6. 检查执法证件号是否为空 -// if (user.getLawCertificateNum() == null || user.getLawCertificateNum().isBlank()) { -// return R.fail("该用户不是执法人员,无法登录执法端"); -// } -// -// // 7. 查询部门信息 -// SrzDeptVo srzOrgan = com.zdxt.enforcementcode.common.util.DataFilterUtil.getUserOrganDept(user.getUserId()); -// SysDeptVo sysDept = com.zdxt.enforcementcode.common.util.DataFilterUtil.getUserSysDept(user.getUserId()); -// SysDeptVo bureauDept = com.zdxt.enforcementcode.common.util.DataFilterUtil.getUserBureauDept(user.getUserId()); -// -// // 7. 构建LoginUser并生成SaToken -// String token = doSaTokenLogin(user.getUserId(), user.getUserName(), user.getNickName(), -// user.getDeptId(), "enforcement_user", "enforcement_app", "enforcement"); -// -// -// // 验证关键组织信息不能为空 -// if (srzOrgan == null) { -// return R.fail("该用户未关联认证机构,无法登录执法端"); -// } -// if (sysDept == null) { -// return R.fail("该用户未关联部门,无法登录执法端"); -// } -// if (bureauDept == null) { -// return R.fail("该用户未关联执法单位,无法登录执法端"); -// } -// -// if (!sysDept.getDeptId().equals(user.getDeptId())){ -// return R.fail("部门ID查找错误!"); -// } -// -// // 8. 构造返回数据 -// Map data = new HashMap<>(); -// data.put("token", token); -// data.put("userId", user.getUserId()); -// data.put("userName", user.getUserName()); -// data.put("loginName", user.getLoginName()); -// data.put("nickName", user.getNickName()); -// data.put("phonenumber", user.getPhonenumber() != null ? user.getPhonenumber() : ""); -// -// data.put("deptId", user.getDeptId()); -// data.put("deptName", sysDept.getDeptName()); -// -// data.put("organId", srzOrgan.getOrganizationid()); -// data.put("organName", srzOrgan.getName()); -// -// data.put("bureauUnitId", bureauDept.getDeptId()); -// data.put("bureauUnitName", bureauDept.getDeptId()); -// -// return R.ok(data); -// } + + /** + * 执法端用户登录 + * + * @param params 包含 secretName(登录账号)和 secretKey(AES加密后的密码) + * @return 登录结果(token + 用户信息) + */ + @SaIgnore + @PostMapping("/do") + public R> validate(@RequestBody Map params) { + String loginName = params.get("secretName"); + String secretKey = params.get("secretKey"); + + // 1. 参数校验 + R> paramCheck = validateLoginParams(loginName, secretKey); + if (paramCheck != null) { + return paramCheck; + } + + // 2. 根据登录账号查询 sys_user 表 + SysUserVo user = sysUserService.selectUserByLoginName(loginName); + if (user == null) { + return R.fail("用户不存在"); + } + + // 3. 检查用户状态(0正常 1停用) + if ("1".equals(user.getStatus())) { + return R.fail("该用户已被停用"); + } + + // 4. AES解密前端传来的密码 + String decryptedPassword = decryptPassword(secretKey); + if (decryptedPassword == null) { + return R.fail("密码解密失败"); + } + + // 5. MD5加盐校验密码(使用loginName作为加盐因子) + if (!verifyPassword(loginName, decryptedPassword, user.getSalt(), user.getPassword())) { + return R.fail("用户名或密码错误"); + } + + // 6. 检查执法证件号是否为空 + if (user.getLawCertificateNum() == null || user.getLawCertificateNum().isBlank()) { + return R.fail("该用户不是执法人员,无法登录执法端"); + } + + // 7. 查询部门信息 + SrzDeptVo srzOrgan = com.zdxt.enforcementcode.common.util.DataFilterUtil.getUserOrganDept(user.getUserId()); + SysDeptVo sysDept = com.zdxt.enforcementcode.common.util.DataFilterUtil.getUserSysDept(user.getUserId()); + SysDeptVo bureauDept = com.zdxt.enforcementcode.common.util.DataFilterUtil.getUserBureauDept(user.getUserId()); + + // 7. 构建LoginUser并生成SaToken + String token = doSaTokenLogin(user.getUserId(), user.getUserName(), user.getNickName(), + user.getDeptId(), "enforcement_user", "enforcement_app", "f0535c2a32ab4d0496ab9a699b2a7d36"); + + + // 验证关键组织信息不能为空 + if (srzOrgan == null) { + return R.fail("该用户未关联认证机构,无法登录执法端"); + } + if (sysDept == null) { + return R.fail("该用户未关联部门,无法登录执法端"); + } + if (bureauDept == null) { + return R.fail("该用户未关联执法单位,无法登录执法端"); + } + + if (!sysDept.getDeptId().equals(user.getDeptId())){ + return R.fail("部门ID查找错误!"); + } + + // 8. 构造返回数据 + Map data = new HashMap<>(); + data.put("token", token); + data.put("userId", user.getUserId()); + data.put("userName", user.getUserName()); + data.put("loginName", user.getLoginName()); + data.put("nickName", user.getNickName()); + data.put("phonenumber", user.getPhonenumber() != null ? user.getPhonenumber() : ""); + + data.put("deptId", user.getDeptId()); + data.put("deptName", sysDept.getDeptName()); + + data.put("organId", srzOrgan.getOrganizationid()); + data.put("organName", srzOrgan.getName()); + + data.put("bureauUnitId", bureauDept.getDeptId()); + data.put("bureauUnitName", bureauDept.getDeptId()); + + return R.ok(data); + } /**