From 4c4a99ec62ac1114aee52851e62560b7cd4ee6ff Mon Sep 17 00:00:00 2001 From: shil <452061493@qq.com> Date: Mon, 3 Aug 2026 16:05:14 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=B1i=E4=BC=81=E7=99=BB=E5=BD=95=E5=AF=B9?= =?UTF-8?q?=E6=8E=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../enforcement/AppEnfLoginController.java | 112 ++++++++++++++++-- 1 file changed, 105 insertions(+), 7 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 cdf0cae8..114029ed 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 @@ -22,6 +22,7 @@ import org.springframework.web.bind.annotation.*; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; import java.util.HashMap; +import java.util.List; import java.util.Map; /** @@ -146,15 +147,112 @@ public class AppEnfLoginController extends LoginController { /** - * 深政易用户登录 - * @param code 授权码 - * @return 登录结果,包含token和用户信息 + * 深圳易平台登录 */ - @PostMapping("/szyptLogin") + @GetMapping("/szyptLogin/{code}") @ResponseBody - public R> szyptLogin(@RequestBody Map params ){ - String code = params.get("code"); - return appEnfLoginService.szyptLogin(code); + public R> szyptLogin(@PathVariable String code){ + + log.info("--> 深政易用户登录code:{}",code); + + String accessTokenJson = ""; + String userJson = ""; + SysUserVo user = null; + try { + // 获取 access_token + accessTokenJson = HttpUtil.HttpSendGet(szyptUrl + "/cgi-bin/gettoken?corpid="+szyptCorpid+"&corpsecret="+szyptCorpsecret, null); + JSONObject tokenObj = JSONObject.parseObject(accessTokenJson); + String token = tokenObj.getString("access_token"); + // 获取 用户Id + userJson = HttpUtil.HttpSendGet(szyptUrl + "/cgi-bin/user/getuserinfo?access_token="+token+"&code="+code, null); + log.info(">>> {} 市认证用户信息: {}", code, userJson); + JSONObject userOjb = JSONObject.parseObject(userJson); + String loginName = userOjb.getString("UserId"); + + 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(""); + 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 + token = doSaTokenLogin(user.getUserId(), user.getUserName(), user.getNickName(), + user.getDeptId(), "app_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. 手机号解密处理(如是加密存储则返回明文以供前端展示与业务使用) + String phonenumber = user.getPhonenumber(); + if (CommonUtil.isPhoneEncrypted(phonenumber)) { + phonenumber = CommonUtil.decryptPhone(phonenumber); + } + + // 9. 构造返回数据 + 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", phonenumber != null ? phonenumber : ""); + + 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.getDeptName()); + data.put("lawOfficer", true); + data.put("platformType", PlatformTypeEnums.ENFORCEMENT.getKey()); + return R.ok(data); + } catch (Exception e) { + log.error("---> {} 市认证用户信息: {}", code, userJson); + log.error("---> 本系统用户信息: {}", user); + log.error(e.getMessage()); + e.printStackTrace(); + } + return R.ok(); } /**