liulin
2025-06-30 2728b76fa2b6ba007683646f3495ddb7ea2ebac9
src/main/java/com/fengdu/gas/service/AdminService.java
@@ -136,33 +136,59 @@
    }
    // 管理员登录
    public ExecutedResult<ResAdminLogin> adminLogin(ReqAdminLogin request) {
    // 管理员登录
    public ExecutedResult<ResAdminLogin> adminLogin(ReqAdminLogin request) throws Exception {
        Integer maxNumber = 3;
        AdminUserPO user = dao.get4Name(request.getUserName());
        if(Objects.isNull(user)){
            return ExecutedResult.failed("用户名或密码错误。");
        //获取缓存中的验证码
        String realCode = redisTemplate.opsForValue().get(request.getUuid());
        if (realCode == null) {
            return ExecutedResult.failed("验证码已失效,请重新获取~");
        }
        if(BooleanUtils.isFalse(Objects.equals(user.getStatus(), EState.NORMAL.getValue()))) {
            return ExecutedResult.failed("账号已锁定,请联系管理员。");
        // 验证码校验
        if (!request.getCode().equalsIgnoreCase(realCode)) {
            return ExecutedResult.failed("验证码错误");
        }
        if(BooleanUtils.isFalse(MD5Util.encrypt(request.getPassword() + ConstantFactory.KEY_PASSWORD).equals(user.getPassword()))) {
            return ExecutedResult.failed("用户名或密码错误。");
        //获取缓存中设备码
        String machineCode = redisTemplate.opsForValue().get(request.getMachineCode());
        if (StringUtil.isNotNullOrEmpty(machineCode) && Integer.valueOf(machineCode) >= maxNumber) {
            return ExecutedResult.failed("登录次数限制,请10分钟后重新登录!");
        }
        // 构建登录用户
        LoginUserDTO loginUser = new LoginUserDTO();
        loginUser.setUserId(user.getId().toString());
        loginUser.setUserType(user.getUserType());
        loginUser.setNickName(user.getNickName());
        loginUser.setPhone(user.getContact());
        if (checkPassword(user, request.getPassword())) {
            // 构建登录用户
            LoginUserDTO loginUser = new LoginUserDTO();
            loginUser.setUserId(user.getId().toString());
            loginUser.setUserType(user.getUserType());
            loginUser.setNickName(user.getNickName());
            loginUser.setPhone(user.getContact());
            // 保存用户信息到jwt
            String token = JWTUtil.getToken(loginUser);
            ResAdminLogin result = this.getListPower4Admin(user);
            result.setName(user.getNickName());
            result.setToken(token);
            return ExecutedResult.success(result);
        } else {
            Integer newAttempts = StringUtil.isNullOrEmpty(machineCode) ? 1 : Integer.valueOf(machineCode) + 1;
            redisTemplate.opsForValue().set(request.getMachineCode(), newAttempts.toString());
            redisTemplate.expire(request.getMachineCode(), 10, TimeUnit.MINUTES);
        }
        // 保存用户信息到jwt
        String token = JWTUtil.getToken(loginUser);
        ResAdminLogin result = this.getListPower4Admin(user);
        result.setName(user.getNickName());
        result.setToken(token);
        return ExecutedResult.success(result);
        return ExecutedResult.failed("账号或密码错误!");
    }
    private static boolean checkPassword(AdminUserPO user, String passWord) throws Exception {
        if (Objects.isNull(user)) {
            return false;
        }
        if (BooleanUtils.isFalse(Objects.equals(user.getStatus(), EState.NORMAL.getValue()))) {
            return false;
        }
        if (BooleanUtils.isFalse(MD5Util.encrypt(passWord + ConstantFactory.KEY_PASSWORD).equals(user.getPassword()))) {
            return false;
        }
        return true;
    }
    /**
     * 生成验证码图片并返回其 Base64 编码字符串
     *
@@ -488,7 +514,7 @@
            List<AdminMenuPO> listRoot = listMenu.stream().filter(c -> Objects.equals(c.getLevel(), 1)).collect(Collectors.toList());
            listRoot = listRoot.stream()
                    .sorted(Comparator.comparing(AdminMenuPO::getSort))
                    .sorted(Comparator.comparing(AdminMenuPO::getSort).reversed())
                    .collect(Collectors.toList());
            if (ListUtil.isNotNullOrEmpty(listRoot)) {
                for (AdminMenuPO item : listRoot) {