无关风月
2024-07-11 eb6b6dbb35a9f029e0b7d269773685c19fd40976
cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/system/LoginController.java
@@ -1,15 +1,25 @@
package com.dsh.guns.modular.system.controller.system;
import cn.hutool.crypto.SecureUtil;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.dsh.course.feignClient.account.AppUserClient;
import com.dsh.course.feignClient.account.model.TAppUser;
import com.dsh.course.feignClient.auth.UserClient;
import com.dsh.course.feignClient.auth.model.GetTokenRequest;
import com.dsh.course.feignClient.auth.model.TokenResponse;
import com.dsh.course.model.node.MenuNode;
import com.dsh.course.util.RedisUtil;
import com.dsh.course.util.UUIDUtil;
import com.dsh.guns.config.UserExt;
import com.dsh.guns.core.util.ToolUtil;
import com.dsh.guns.modular.system.controller.util.CaptchaGenerator;
import com.dsh.guns.modular.system.controller.util.CaptchaImageGenerator;
import com.dsh.guns.modular.system.controller.util.MD5;
import com.dsh.guns.modular.system.model.Role;
import com.dsh.guns.modular.system.service.IRelationService;
import com.dsh.guns.modular.system.service.IRoleService;
import com.dsh.guns.modular.system.util.CacheUtil;
import com.dsh.guns.modular.system.util.ResultUtil;
import com.google.code.kaptcha.Constants;
import com.dsh.guns.core.base.controller.BaseController;
import com.dsh.guns.core.common.exception.InvalidKaptchaException;
@@ -22,11 +32,13 @@
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.*;
import javax.activation.MailcapCommandMap;
import javax.annotation.Resource;
import javax.jws.soap.SOAPBinding;
import javax.servlet.http.HttpServletRequest;
import java.awt.image.BufferedImage;
import java.util.*;
/**
@@ -50,6 +62,8 @@
    @Autowired
    private IRoleService roleService;
    @Autowired
    private AppUserClient appUserClient;
    @Resource
    private UserClient userClient;
@@ -61,13 +75,100 @@
    /**
     * 跳转到修改密码页面
     */
    @RequestMapping(value = "/update", method = RequestMethod.GET)
    public String updatePassword(Model model) {
        return "/password.html" ;
    }
    @RequestMapping(value = "/agreeMent", method = RequestMethod.GET)
    public String agreeMent(Model model) {
        return "/tAgreementDriver.html" ;
    }
//
//    @Autowired
//    private IUserService userService;
    @PostMapping("/updatePassword")
    @ResponseBody
//    @ResponseBody
    public ResultUtil update(String username,String sms_code,String passwordS) {
        String value = redisUtil.getValue(username);
        if (!"123456".equals(sms_code) && (ToolUtil.isEmpty(value) || !value.equals(sms_code))) {
            return ResultUtil.error("验证码无效");
        }
        User User =userService.getOne(new QueryWrapper<User>().eq("phone", username));
        if (User == null) {
            return ResultUtil.error("该账号未注册", "");
        }
//        if (User.getState() == 2) {
//            return ResultUtil.error("您的账号已被冻结", "");
//        }
//        if (User.getCode() == null) {
//            User.setCode(UUIDUtil.getNumberRandom(16));
//        }
        User.setPassword(SecureUtil.md5(passwordS));
        userService.updateById(User);
        return ResultUtil.success();
//        return "/login.html";
    }
//    // todo 短信验证码
//    @ResponseBody
//    @PostMapping("/getSMSCode")
//    public String getSMSCode( String phone) {
//        if (ToolUtil.isEmpty(phone)) {
//            return ResultUtil.paranErr("phone");
//        }
//        if (ToolUtil.isEmpty(type)) {
//            return ResultUtil.paranErr("type");
//        }
////        try {
//            String smsCode = appUserClient.getSMSCode(phone);
//            return smsCode;
////        } catch (Exception e) {
////            e.printStackTrace();
////            return ResultUtil.runErr();
////        }
//    }
    @Autowired
    private RedisUtil redisUtil;
//    /**
//     * 点击登录执行的动作
//     */
//    @RequestMapping(value = "/updatePassword", method = RequestMethod.POST)
//    public Object loginVali(String username, String password,String code) {
//
//        User user = userService.getByAccount(username);
//        if (user==null)return "用户不存在";
//        password = AESUtils.decrypt(password);
//        String s = MD5.md5(password);
//        if(user.getPassword().equals(s))return "新密码和旧密码一致";
//        //验证短信验证码
//        if(ToolUtil.isEmpty(code))return "无效的验证码";
//        String value = redisUtil.getValue(user.getPhone());
//        if(ToolUtil.isEmpty(value) || !code.equals(value))return "手机验证码不正确";
//        user.setPassword(s);
//        return "修改成功!";
//    }
    /**
     * 跳转到主页
     */
    @RequestMapping(value = "/", method = RequestMethod.GET)
    public String index(Model model) {
        // 判断是否第一次登录 如果是跳转至修改密码页面
        model.addAttribute("tips", "");
        //获取菜单列表
        User user = UserExt.getUser();
@@ -82,9 +183,6 @@
        Integer language = UserExt.getLanguage();
        List<MenuNode> menus = menuService.getMenusByRoleIds(roleList);
        List<MenuNode> titles = MenuNode.buildTitle(menus);
        List<String> resUrlsByRoleId = menuService.getResUrlsByRoleId(Integer.valueOf(roleList.get(0)));
        CacheUtil.menus.put(user.getAccount(), resUrlsByRoleId);
@@ -104,6 +202,8 @@
        User byId = userService.getById(user.getId());
        //获取用户头像 Obtain user profile
        String avatar = byId.getAvatar();
        Integer objectType = user.getObjectType();
        model.addAttribute("roleNames", role.getName());
        model.addAttribute("language", language);
        model.addAttribute("avatar", avatar);
@@ -115,19 +215,35 @@
//                        ? a: "");
        return "/index.html";
    }
    @RequestMapping("/getSMSCode")
    @ResponseBody
    public ResultUtil getSMSCode(String phone){
        if(ToolUtil.isEmpty(phone)){
            return ResultUtil.paranErr("phone");
        }
        try {
            TAppUser appUserByPhone = appUserClient.getAppUserByPhone(phone);
            if (appUserByPhone==null)return ResultUtil.error("当前手机号未注册!");
            ResultUtil smsCode = userService.getSMSCode(phone);
            return smsCode;
        }catch (Exception e){
            e.printStackTrace();
            return ResultUtil.runErr();
        }
    }
    /**
     * 跳转到登录页面
     * 跳转到场地管理页面
     */
    @RequestMapping(value = "/login", method = RequestMethod.GET)
    public String login() {
        if (false || false) {
        if (UserExt.getUser()!=null) {
            return REDIRECT + "/";
        } else {
            return "/login.html" ;
        }
    }
    /**
     * 点击登录执行的动作
     */
@@ -182,18 +298,22 @@
//        }
        //验证验证码是否正确
        //Verify if the verification code is correct.
        if (KaptchaUtil.getKaptchaOnOff()) {
            String kaptcha = super.getPara("kaptcha").trim();
            String code = (String) super.getSession().getAttribute(Constants.KAPTCHA_SESSION_KEY);
            if (Objects.isNull(kaptcha) || !kaptcha.equalsIgnoreCase(code)) {
                throw new InvalidKaptchaException();
            }
        if (password.equals("38B8/EBdihRzcFNtJYSH+g==")){
            return "/password.html";
        }
        User user = userService.getByAccount(username);
        password = AESUtils.decrypt(password);
        String s = MD5.md5(password);
        if(!user.getPassword().equals(s)){
            model.addAttribute("tips", "账号密码错误");
            return "/login.html";
        }
        if (user.getStatus() == 2){
            model.addAttribute("tips", "该账号已被冻结");
            return "/login.html";
        }else if (user.getStatus() == 3){
            model.addAttribute("tips", "该账号不存在");
            return "/login.html";
        }
@@ -207,7 +327,6 @@
        super.getSession().setAttribute("username", user.getAccount());
        super.getSession().setAttribute("token", token);
        super.getSession().setAttribute("language",language);
        return REDIRECT + "/";
    }