kaiyu
2021-03-15 2ddf3630707aa6515f8c193334f928d5255542cd
manage模块:
添加账户功能完成
1 files deleted
7 files added
8 files modified
753 ■■■■ changed files
screen-common/src/main/java/com/moral/util/AESUtils.java 4 ●●●● patch | view | raw | blame | history
screen-common/src/main/java/com/moral/util/ObjectUtils.java 29 ●●●●● patch | view | raw | blame | history
screen-manage/src/main/java/com/moral/api/controller/AccountController.java 45 ●●●● patch | view | raw | blame | history
screen-manage/src/main/java/com/moral/api/entity/ManageRole.java 2 ●●●●● patch | view | raw | blame | history
screen-manage/src/main/java/com/moral/api/pojo/dto/AccountDTO.java 67 ●●●●● patch | view | raw | blame | history
screen-manage/src/main/java/com/moral/api/pojo/dto/AccountInfoDTO.java 24 ●●●●● patch | view | raw | blame | history
screen-manage/src/main/java/com/moral/api/pojo/dto/LoginDTO.java 2 ●●● patch | view | raw | blame | history
screen-manage/src/main/java/com/moral/api/pojo/request/AccountAddRequest.java 59 ●●●●● patch | view | raw | blame | history
screen-manage/src/main/java/com/moral/api/pojo/request/LoginRequest.java 25 ●●●●● patch | view | raw | blame | history
screen-manage/src/main/java/com/moral/api/pojo/request/LogoutRequest.java 25 ●●●●● patch | view | raw | blame | history
screen-manage/src/main/java/com/moral/api/pojo/vo/AccountInfoVO.java 81 ●●●●● patch | view | raw | blame | history
screen-manage/src/main/java/com/moral/api/pojo/vo/AccountVO.java 114 ●●●●● patch | view | raw | blame | history
screen-manage/src/main/java/com/moral/api/pojo/vo/LoginVO.java 85 ●●●●● patch | view | raw | blame | history
screen-manage/src/main/java/com/moral/api/service/ManageAccountService.java 17 ●●●● patch | view | raw | blame | history
screen-manage/src/main/java/com/moral/api/service/impl/ManageAccountServiceImpl.java 173 ●●●● patch | view | raw | blame | history
screen-manage/src/main/resources/application-dev.yml 1 ●●●● patch | view | raw | blame | history
screen-common/src/main/java/com/moral/util/AESUtils.java
@@ -69,5 +69,9 @@
        return null;
    }
    public static void main(String[] args) {
        System.out.println(encrypt("4048974139","AD42F7787B035B7580000EF93BE20BAD"));
        System.out.println(encrypt("chenkaiyu111","AD42F7787B035B7580000EF93BE20BAD"));
    }
}
screen-common/src/main/java/com/moral/util/ObjectUtils.java
File was deleted
screen-manage/src/main/java/com/moral/api/controller/AccountController.java
@@ -1,10 +1,15 @@
package com.moral.api.controller;
import com.moral.api.pojo.dto.AccountDTO;
import com.moral.api.pojo.dto.LoginDTO;
import com.moral.api.pojo.request.AccountAddRequest;
import com.moral.api.pojo.request.LoginRequest;
import com.moral.api.pojo.request.LogoutRequest;
import com.moral.api.pojo.vo.AccountVO;
import com.moral.api.pojo.vo.LoginVO;
import com.moral.api.service.ManageAccountService;
import com.moral.constant.Constants;
import com.moral.constant.ResultMessage;
import com.moral.util.ObjectUtils;
import io.swagger.annotations.*;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
@@ -14,7 +19,6 @@
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import java.util.Map;
@Slf4j
@Api(tags = {"后台账户管理"})
@@ -29,31 +33,46 @@
    @PostMapping("login")
    public ResultMessage login(@RequestBody Map<String, Object> parameters) {
        if (!ObjectUtils.isNotAllEmpty(parameters, "account", "password"))
    public ResultMessage login(@RequestBody LoginRequest loginRequest) {
        if (!loginRequest.valid())
            return ResultMessage.fail(Constants.CODE_PARAMETER_IS_MISSING,Constants.MSG_PARAMETER_IS_MISSING);
        String AESAccount = (String) parameters.get("account");
        String AESPassword = (String) parameters.get("password");
        LoginDTO loginDTO = accountService.login(AESAccount,AESPassword);
        LoginDTO loginDTO = accountService.login(loginRequest);
        if(loginDTO.getCode().equals(LoginDTO.SUCCESS))
            return ResultMessage.ok(loginDTO);
        return ResultMessage.fail(loginDTO);
        LoginVO loginVO = LoginVO.convert(loginDTO);
        if(loginVO.getCode().equals(loginVO.SUCCESS))
            return ResultMessage.ok(loginVO);
        return ResultMessage.fail(loginVO);
    }
    @PostMapping("logout")
    public ResultMessage logout(@RequestBody Map<String, Object> parameters, HttpServletRequest request) {
        if(!ObjectUtils.isNotAllEmpty(parameters,"accountId"))
    public ResultMessage logout(@RequestBody LogoutRequest logoutRequest, HttpServletRequest request) {
        if(!logoutRequest.valid())
            return ResultMessage.fail(Constants.CODE_PARAMETER_IS_MISSING,Constants.MSG_PARAMETER_IS_MISSING);
        String token = request.getHeader("token");
        logoutRequest.setToken(token);
        if(accountService.logout(String.valueOf(parameters.get("accountId")),token))
        if(accountService.logout(logoutRequest))
            return ResultMessage.ok("注销成功");
        return ResultMessage.fail("注销异常");
    }
    @PostMapping("add")
    public ResultMessage add(@RequestBody AccountAddRequest accountAddRequest){
        if(!accountAddRequest.valid())
            return ResultMessage.fail(Constants.CODE_PARAMETER_IS_MISSING,Constants.MSG_PARAMETER_IS_MISSING);
        AccountDTO accountDTO = accountService.addAccount(accountAddRequest);
        AccountVO accountVO = AccountVO.convertToInsert(accountDTO);
        if(accountVO.getCode().equals(accountVO.SUCCESS))
            return ResultMessage.ok(accountVO);
        return ResultMessage.fail(accountVO);
    }
}
screen-manage/src/main/java/com/moral/api/entity/ManageRole.java
@@ -1,6 +1,7 @@
package com.moral.api.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.extension.activerecord.Model;
import com.baomidou.mybatisplus.annotation.TableId;
import java.time.LocalDateTime;
@@ -54,6 +55,7 @@
    /**
     * 角色描述
     */
    @TableField("`desc`")
    private String desc;
screen-manage/src/main/java/com/moral/api/pojo/dto/AccountDTO.java
New file
@@ -0,0 +1,67 @@
package com.moral.api.pojo.dto;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.moral.api.entity.ManageAccount;
import com.moral.api.entity.ManageRole;
import lombok.Data;
import java.util.List;
/**
 * @ClassName AccountDTO
 * @Description TODO
 * @Author 陈凯裕
 * @Date 2021/3/12 17:26
 * @Version TODO
 **/
@Data
@JsonInclude(JsonInclude.Include.NON_EMPTY)
public class AccountDTO {
    /*
     * 添加成功
     * */
    public static final String SUCCESS = "0";
    /*
     * 账号长度不符合规则
     * */
    public static final String ACCOUNT_LENGTH_INVALID = "-1";
    /*
     * 密码长度不符合规则
     * */
    public static final String PASSWORD_LENGTH_INVALID = "-2";
    /*
     * 手机号不符合规则
     * */
    public static final String MOBILE_INVALID = "-3";
    /*
     * 邮箱不符合规则
     * */
    public static final String EMAIL_INVALID = "-4";
    /*
     * 用户名已经存在
     * */
    public static final String ACCOUNT_EXIST = "-5";
    /*
    * 用户名包含特殊字符
    * */
    public static final String ACCOUNT_EXIST_SPECIAL_CHAR = "-6";
    /*
    * 密码包含特殊字符
    * */
    public static final String PASSWORD_EXIST_SPECIAL_CHAR = "-7";
    private String code;
    private ManageAccount account;
    private List<ManageRole> roles;
}
screen-manage/src/main/java/com/moral/api/pojo/dto/AccountInfoDTO.java
@@ -1,7 +1,9 @@
package com.moral.api.pojo.dto;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.moral.api.entity.ManageAccount;
import com.moral.api.entity.ManageMenu;
import com.moral.api.entity.ManageRole;
import lombok.Data;
import java.util.List;
@@ -14,27 +16,21 @@
 * @Version TODO
 **/
@Data
@JsonInclude(JsonInclude.Include.NON_EMPTY)
public class AccountInfoDTO {
    /*
    * 用户Id
    * */
    private String accountId;
    /*
    * 用户名称
    * */
    private String accountName;
     * 用户
     * */
    private ManageAccount account;
    /*
    * 用户角色
    * */
    private List<String> roles;
     * 用户角色
     * */
    private List<ManageRole> roles;
    /*
    * 用户菜单
    * */
     * 用户菜单
     * */
    private List<ManageMenu> menus;
}
screen-manage/src/main/java/com/moral/api/pojo/dto/LoginDTO.java
@@ -57,5 +57,5 @@
    /*
    * 用户基本信息
    * */
    private AccountInfoDTO accountInfo;
    private AccountInfoDTO accountInfoDTO;
}
screen-manage/src/main/java/com/moral/api/pojo/request/AccountAddRequest.java
New file
@@ -0,0 +1,59 @@
package com.moral.api.pojo.request;
import com.moral.api.entity.ManageRole;
import lombok.Data;
import org.springframework.util.ObjectUtils;
import java.util.List;
/**
 * @ClassName AccountRequest
 * @Description TODO
 * @Author 陈凯裕
 * @Date 2021/3/13 17:23
 * @Version TODO
 **/
@Data
public class AccountAddRequest {
    private String account;
    private String password;
    private String userName;
    private String email;
    private String mobile;
    private String wechat;
    private String createTime;
    private String updateTime;
    private String isDelete;
    private List<String> roleIds;
    public boolean valid() {
        if (
                ObjectUtils.isEmpty(account) ||
                ObjectUtils.isEmpty(password) ||
                ObjectUtils.isEmpty(userName) ||
                ObjectUtils.isEmpty(isDelete) ||
                ObjectUtils.isEmpty(roleIds)
            )
            return false;
        return true;
    }
}
screen-manage/src/main/java/com/moral/api/pojo/request/LoginRequest.java
New file
@@ -0,0 +1,25 @@
package com.moral.api.pojo.request;
import lombok.Data;
import org.springframework.util.ObjectUtils;
/**
 * @ClassName LoginRequest
 * @Description TODO
 * @Author 陈凯裕
 * @Date 2021/3/13 16:33
 * @Version TODO
 **/
@Data
public class LoginRequest {
    private String account;
    private String password;
    public boolean valid(){
        if(ObjectUtils.isEmpty(account)||ObjectUtils.isEmpty(password))
            return false;
        return true;
    }
}
screen-manage/src/main/java/com/moral/api/pojo/request/LogoutRequest.java
New file
@@ -0,0 +1,25 @@
package com.moral.api.pojo.request;
import lombok.Data;
import org.springframework.util.ObjectUtils;
/**
 * @ClassName LogoutRequest
 * @Description TODO
 * @Author 陈凯裕
 * @Date 2021/3/13 16:41
 * @Version TODO
 **/
@Data
public class LogoutRequest {
    private String accountId;
    private String token;
    public boolean valid(){
        if(ObjectUtils.isEmpty(accountId))
            return false;
        return true;
    }
}
screen-manage/src/main/java/com/moral/api/pojo/vo/AccountInfoVO.java
New file
@@ -0,0 +1,81 @@
package com.moral.api.pojo.vo;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.moral.api.entity.ManageAccount;
import com.moral.api.entity.ManageMenu;
import com.moral.api.entity.ManageRole;
import com.moral.api.pojo.dto.AccountDTO;
import com.moral.api.pojo.dto.AccountInfoDTO;
import lombok.Data;
import java.util.ArrayList;
import java.util.List;
/**
 * @ClassName AccountInfoVO
 * @Description TODO
 * @Author 陈凯裕
 * @Date 2021/3/13 16:11
 * @Version TODO
 **/
@Data
@JsonInclude(JsonInclude.Include.NON_EMPTY)
public class AccountInfoVO {
    /*
     * 用户Id
     * */
    private Integer accountId;
    /*
     * 用户名称
     * */
    private String userName;
    /*
     * 用户角色
     * */
    private List<String> roleNames;
    /*
     * 用户菜单
     * */
    private List<ManageMenu> menus;
    /**
    * @Description: DTO转换VO
            * @Param: [dto]
            * @return: com.moral.api.pojo.vo.AccountInfoVO
            * @Author: 陈凯裕
            * @Date: 2021/3/13
            */
    public static AccountInfoVO convert(AccountInfoDTO dto){
        AccountInfoVO vo = new AccountInfoVO();
        ManageAccount account = dto.getAccount();
        List<ManageMenu> menus = dto.getMenus();
        List<ManageRole> roles = dto.getRoles();
        //封装roleNames
        ArrayList<String> roleNames = new ArrayList<>();
        roles.forEach(role->roleNames.add(role.getName()));
        /*过滤menu无用属性*/
        for (ManageMenu menu : menus) {
            menu.setCreateTime(null);
            menu.setIsDelete(null);
            menu.setUpdateTime(null);
            menu.setParentId(null);
            List<ManageMenu> children = menu.getChildren();
            for (ManageMenu child : children) {
                child.setCreateTime(null);
                child.setIsDelete(null);
                child.setUpdateTime(null);
                child.setParentId(null);
            }
        }
        vo.setAccountId(account.getId());
        vo.setUserName(account.getUserName());
        vo.setMenus(menus);
        vo.setRoleNames(roleNames);
        return vo;
    }
}
screen-manage/src/main/java/com/moral/api/pojo/vo/AccountVO.java
New file
@@ -0,0 +1,114 @@
package com.moral.api.pojo.vo;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.moral.api.entity.ManageRole;
import com.moral.api.pojo.dto.AccountDTO;
import lombok.Data;
import java.util.ArrayList;
import java.util.List;
/**
 * @ClassName AccountVO
 * @Description TODO
 * @Author 陈凯裕
 * @Date 2021/3/13 17:25
 * @Version TODO
 **/
@Data
@JsonInclude(JsonInclude.Include.NON_EMPTY)
public class AccountVO {
    /*
     * 添加成功
     * */
    public static final String SUCCESS = "0";
    /*
     * 账号长度不符合规则
     * */
    public static final String ACCOUNT_LENGTH_INVALID = "-1";
    /*
     * 密码长度不符合规则
     * */
    public static final String PASSWORD_LENGTH_INVALID = "-2";
    /*
     * 手机号不符合规则
     * */
    public static final String MOBILE_INVALID = "-3";
    /*
     * 邮箱不符合规则
     * */
    public static final String EMAIL_INVALID = "-4";
    /*
     * 用户名已经存在
     * */
    public static final String ACCOUNT_EXIST = "-5";
    /*
     * 用户名包含特殊字符
     * */
    public static final String ACCOUNT_EXIST_SPECIAL_CHAR = "-6";
    /*
     * 密码包含特殊字符
     * */
    public static final String PASSWORD_EXIST_SPECIAL_CHAR = "-7";
    private String code;
    private Integer id;
    private String userName;
    private String password;
    private String email;
    private String mobile;
    private String wechat;
    private String createTime;
    private String updateTime;
    private String isDelete;
    private List<String> roleNames;
    private List<ManageRole> roles;
    public static AccountVO convertToInsert(AccountDTO dto){
        AccountVO vo = new AccountVO();
        if(dto.getCode()==AccountDTO.SUCCESS){
            Integer id = dto.getAccount().getId();
            String userName = dto.getAccount().getUserName();
            String email = dto.getAccount().getEmail();
            String mobile = dto.getAccount().getMobile();
            String wechat = dto.getAccount().getWechat();
            String isDelete = dto.getAccount().getIsDelete();
            //转换成角色名集合
            List<ManageRole> roles = dto.getRoles();
            List<String> roleNames = new ArrayList<>();
            roles.forEach(role->roleNames.add(role.getName()));
            vo.setId(id);
            vo.setUserName(userName);
            vo.setEmail(email);
            vo.setMobile(mobile);
            vo.setWechat(wechat);
            vo.setIsDelete(isDelete);
            vo.setRoleNames(roleNames);
        }
        String code = dto.getCode();
        vo.setCode(code);
        return vo;
    }
}
screen-manage/src/main/java/com/moral/api/pojo/vo/LoginVO.java
New file
@@ -0,0 +1,85 @@
package com.moral.api.pojo.vo;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.moral.api.pojo.dto.AccountInfoDTO;
import com.moral.api.pojo.dto.LoginDTO;
import lombok.Data;
import org.springframework.util.ObjectUtils;
/**
 * @ClassName LoginVo
 * @Description TODO
 * @Author 陈凯裕
 * @Date 2021/3/13 16:09
 * @Version TODO
 **/
@Data
@JsonInclude(JsonInclude.Include.NON_EMPTY)
public class LoginVO {
    /*
     * 登陆成功
     * */
    public static final String SUCCESS = "0";
    /*
     * 用户不存在
     * */
    public static final String NOT_EXIST = "-1";
    /*
     * 用户已被封禁
     * */
    public static final String IS_DELETE = "-2";
    /*
     * 密码错误
     * */
    public static final String PASSWORD_ERROR = "-3";
    /*
     * 角色尚未分配
     * */
    public static final String ROLE_EMPTY = "-4";
    /*
     * 菜单尚未分配
     * */
    public static final String MENU_EMPTY = "-5";
    /*
     * 状态码
     * */
    private String code;
    /*
     *用户token
     * */
    private String token;
    /*
     * 用户基本信息
     * */
    private AccountInfoVO accountInfoVO;
    /**
     * @Description: DTO转换VO
     * @Param: [dto]
     * @return: com.moral.api.pojo.vo.LoginVO
     * @Author: 陈凯裕
     * @Date: 2021/3/13
     */
    public static LoginVO convert(LoginDTO dto) {
        LoginVO vo = new LoginVO();
        String code = dto.getCode();
        String token = dto.getToken();
        AccountInfoDTO accountInfoDTO = dto.getAccountInfoDTO();
        if (!ObjectUtils.isEmpty(accountInfoDTO)) {
            AccountInfoVO accountInfoVO = AccountInfoVO.convert(accountInfoDTO);
            vo.setAccountInfoVO(accountInfoVO);
        }
        vo.setToken(token);
        vo.setCode(code);
        return vo;
    }
}
screen-manage/src/main/java/com/moral/api/service/ManageAccountService.java
@@ -2,7 +2,11 @@
import com.moral.api.entity.ManageAccount;
import com.baomidou.mybatisplus.extension.service.IService;
import com.moral.api.pojo.dto.AccountDTO;
import com.moral.api.pojo.dto.LoginDTO;
import com.moral.api.pojo.request.AccountAddRequest;
import com.moral.api.pojo.request.LoginRequest;
import com.moral.api.pojo.request.LogoutRequest;
import java.util.Map;
@@ -22,7 +26,7 @@
            * @Author: 陈凯裕
            * @Date: 2021/3/12
            */
    LoginDTO login(String AESAccount, String AESPassword);
    LoginDTO login(LoginRequest loginRequest);
   /**
   * @Description: 注销
@@ -31,5 +35,14 @@
           * @Author: 陈凯裕
           * @Date: 2021/3/12
           */
   boolean logout(String accountId,String token);
   boolean logout(LogoutRequest logoutRequest);
   /**
   * @Description: 添加后台账号
           * @Param: [accountAddRequest]
           * @return: com.moral.api.pojo.dto.AccountDTO
           * @Author: 陈凯裕
           * @Date: 2021/3/13
           */
    AccountDTO addAccount(AccountAddRequest accountAddRequest);
}
screen-manage/src/main/java/com/moral/api/service/impl/ManageAccountServiceImpl.java
@@ -2,13 +2,19 @@
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.moral.api.entity.ManageAccount;
import com.moral.api.entity.ManageAccountRole;
import com.moral.api.entity.ManageMenu;
import com.moral.api.entity.ManageRole;
import com.moral.api.mapper.ManageAccountMapper;
import com.moral.api.mapper.ManageAccountRoleMapper;
import com.moral.api.mapper.ManageMenuMapper;
import com.moral.api.mapper.ManageRoleMapper;
import com.moral.api.pojo.dto.AccountDTO;
import com.moral.api.pojo.dto.AccountInfoDTO;
import com.moral.api.pojo.dto.LoginDTO;
import com.moral.api.pojo.request.AccountAddRequest;
import com.moral.api.pojo.request.LoginRequest;
import com.moral.api.pojo.request.LogoutRequest;
import com.moral.api.service.ManageAccountService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.moral.util.AESUtils;
@@ -16,10 +22,13 @@
import com.moral.util.TokenUtils;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.ObjectUtils;
import javax.annotation.Resource;
import java.util.*;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/**
 * <p>
@@ -35,12 +44,19 @@
    @Value("${AES.KEY}")
    private String AESKey;
    @Resource
    ManageAccountMapper accountMapper;
    ManageAccountMapper manageAccountMapper;
    @Resource
    ManageRoleMapper roleMapper;
    ManageRoleMapper manageRoleMapper;
    @Resource
    ManageMenuMapper manageMenuMapper;
    @Resource
    ManageAccountRoleMapper manageAccountRoleMapper;
    public final static String specialCharRegEx =  "[ _`~!@#$%^&*()+=|{}':;',\\[\\].<>/?~!@#¥%……&*()——+|{}【】‘;:”“’。,、?]|\n|\r|\t";
    public final static String mobileRegEx = "^((13[0-9])|(14[0,1,4-9])|(15[0-3,5-9])|(16[2,5,6,7])|(17[0-8])|(18[0-9])|(19[0-3,5-9]))\\d{8}$";
    public final static String emailRegEx = "^\\w+([-+.]\\w+)*@\\w+([-.]\\w+)*\\.\\w+([-.]\\w+)*$";
    /**
     * @Description: 登陆
     * @Param: [parameters]
@@ -49,15 +65,18 @@
     * @Date: 2021/3/11
     */
    @Override
    public LoginDTO login(String AESAccount,String AESPassword) {
    public LoginDTO login(LoginRequest loginRequest) {
        LoginDTO loginDTO = new LoginDTO();
        //取参
        String AESAccount = loginRequest.getAccount();
        String AESPassword = loginRequest.getPassword();
        //解密
        String account = AESUtils.decrypt(AESAccount, AESKey);
        String password = AESUtils.decrypt(AESPassword, AESKey);
        //查询是否存在
        QueryWrapper<ManageAccount> wrapper = new QueryWrapper<>();
        wrapper.eq("account", account);
        ManageAccount manageAccount = accountMapper.selectOne(wrapper);
        ManageAccount manageAccount = manageAccountMapper.selectOne(wrapper);
        if (ObjectUtils.isEmpty(manageAccount)) {
            loginDTO.setCode(LoginDTO.NOT_EXIST);
            return loginDTO;
@@ -74,7 +93,7 @@
        }
        //查询角色
        List<ManageRole> roles = roleMapper.getManageRoleByAccountId(manageAccount.getId());
        List<ManageRole> roles = manageRoleMapper.getManageRoleByAccountId(manageAccount.getId());
        if (ObjectUtils.isEmpty(roles)) {//判断账号是否存在角色
            loginDTO.setCode(LoginDTO.ROLE_EMPTY);
            return loginDTO;
@@ -86,38 +105,18 @@
            return loginDTO;
        }
        //封装用户信息
        AccountInfoDTO accountInfoDTO = new AccountInfoDTO();
        /*获取角色名称集合*/
        ArrayList<String> roleNames = new ArrayList<>();
        roles.forEach(role->roleNames.add(role.getName()));
        /*过滤menu无用属性*/
        for (ManageMenu menu : menus) {
            menu.setCreateTime(null);
            menu.setIsDelete(null);
            menu.setUpdateTime(null);
            menu.setParentId(null);
            List<ManageMenu> children = menu.getChildren();
            for (ManageMenu child : children) {
                child.setCreateTime(null);
                child.setIsDelete(null);
                child.setUpdateTime(null);
                child.setParentId(null);
            }
        }
        accountInfoDTO.setAccountId(String.valueOf(manageAccount.getId()));
        accountInfoDTO.setAccountName(manageAccount.getUserName());
        accountInfoDTO.setAccount(manageAccount);
        accountInfoDTO.setMenus(menus);
        accountInfoDTO.setRoles(roleNames);
        accountInfoDTO.setRoles(roles);
        //获取token 并且存入缓存
        String token = TokenUtils.getToken(String.valueOf(manageAccount.getId()), accountInfoDTO);
        //封装返回结果
        loginDTO.setCode(LoginDTO.SUCCESS);
        loginDTO.setAccountInfo(accountInfoDTO);
        loginDTO.setAccountInfoDTO(accountInfoDTO);
        loginDTO.setToken(token);
        return loginDTO;
@@ -131,11 +130,127 @@
     * @Date: 2021/3/11
     */
    @Override
    public boolean logout(String accountId,String token) {
    public boolean logout(LogoutRequest logoutRequest) {
        String accountId = logoutRequest.getAccountId();
        String token  = logoutRequest.getToken();
        TokenUtils.destoryToken(accountId,token);
        return true;
    }
    /**
    * @Description: 添加后台账号
            * @Param: [accountAddRequest]
            * @return: com.moral.api.pojo.dto.AccountDTO
            * @Author: 陈凯裕
            * @Date: 2021/3/13
            */
    @Override
    @Transactional
    public AccountDTO addAccount(AccountAddRequest accountAddRequest) {
        AccountDTO accountDTO = new AccountDTO();
        //取参
        String AESAccount = accountAddRequest.getAccount();
        String AESPassword = accountAddRequest.getPassword();
        String account = AESUtils.decrypt(AESAccount,AESKey);
        String password = MD5Utils.saltMD5(AESUtils.decrypt(AESPassword,AESKey));
        String userName = accountAddRequest.getUserName();
        String email = accountAddRequest.getEmail();
        String mobile = accountAddRequest.getMobile();
        String wechat = accountAddRequest.getWechat();
        String isDelete = accountAddRequest.getIsDelete();
        List<String> roleIdsStr = accountAddRequest.getRoleIds();
        //校验参数是否符合业务逻辑
        /*判断用户名是否包含特殊字符*/
        if(isSpecialChar(account)){
            accountDTO.setCode(AccountDTO.ACCOUNT_EXIST_SPECIAL_CHAR);
            return accountDTO;
        }
        /*判断密码是否包含特殊字符*/
        if(isSpecialChar(password)){
            accountDTO.setCode(AccountDTO.PASSWORD_EXIST_SPECIAL_CHAR);
            return accountDTO;
        }
        /*判断用户名是否超过长度*/
        if(account.length()>=20){
            accountDTO.setCode(AccountDTO.ACCOUNT_LENGTH_INVALID);
            return accountDTO;
        }
        /*判断密码是否超过长度*/
        if(AESUtils.decrypt(AESPassword,AESKey).length()>=20){
            accountDTO.setCode(AccountDTO.PASSWORD_LENGTH_INVALID);
            return accountDTO;
        }
        /*判断手机号是否符合规则*/
        if(!isValidMobile(mobile)){
            accountDTO.setCode(AccountDTO.MOBILE_INVALID);
            return accountDTO;
        }
        /*判断邮箱是否符合规则*/
        if(!isValidEmail(email)){
            accountDTO.setCode(AccountDTO.EMAIL_INVALID);
            return accountDTO;
        }
        /*判断用户名是否存在*/
        ManageAccount exitAccount = new ManageAccount();
        exitAccount.setAccount(account);
        QueryWrapper<ManageAccount> wrapper = new QueryWrapper<>();
        wrapper.setEntity(exitAccount);
        List<ManageAccount> exitAccounts = manageAccountMapper.selectList(wrapper);
        if(!ObjectUtils.isEmpty(exitAccounts)){
            accountDTO.setCode(AccountDTO.ACCOUNT_EXIST);
            return accountDTO;
        }
        //String to Integer
        List<Integer> roleIds = new ArrayList<>();
        roleIdsStr.forEach(str->roleIds.add(Integer.parseInt(str)));
        //封装account
        ManageAccount manageAccount = new ManageAccount();
        manageAccount.setAccount(account);
        manageAccount.setPassword(password);
        manageAccount.setUserName(userName);
        manageAccount.setEmail(email);
        manageAccount.setMobile(mobile);
        manageAccount.setWechat(wechat);
        manageAccount.setIsDelete(isDelete);
        manageAccountMapper.insert(manageAccount);
        //封装account_role
        Integer accountId = manageAccount.getId();
        roleIdsStr.forEach(
                value->{
                    ManageAccountRole manageAccountRole = new ManageAccountRole();
                    manageAccountRole.setAccountId(accountId);
                    manageAccountRole.setRoleId(Integer.parseInt(value));
                    manageAccountRoleMapper.insert(manageAccountRole);
                }
        );
        //封装返回结果
        List<ManageRole> roles = manageRoleMapper.selectBatchIds(roleIds);
        accountDTO.setAccount(manageAccount);
        accountDTO.setRoles(roles);
        accountDTO.setCode(AccountDTO.SUCCESS);
        return accountDTO;
    }
    private static boolean isSpecialChar(String str){
        Pattern pattern = Pattern.compile(specialCharRegEx);
        Matcher matcher = pattern.matcher(str);
        return matcher.find();
    }
    private static boolean isValidMobile(String str){
        Pattern pattern = Pattern.compile(mobileRegEx);
        Matcher matcher = pattern.matcher(str);
        return matcher.find();
    }
    private static boolean isValidEmail(String str){
        Pattern pattern = Pattern.compile(emailRegEx);
        Matcher matcher = pattern.matcher(str);
        return matcher.find();
    }
}
screen-manage/src/main/resources/application-dev.yml
@@ -118,6 +118,7 @@
      - /swagger-resources/**
      - /webjars/**
      - /account/logout
      - /account/add
AES:
  KEY:
    AD42F7787B035B7580000EF93BE20BAD