lizijie
2021-03-18 f1c3c5f0b840df7fa5fe08a69186c9f2b52ce243
Merge remote-tracking branch 'origin/dev' into dev
3 files renamed
3 files deleted
10 files added
34 files modified
1724 ■■■■■ changed files
pom.xml 5 ●●●●● patch | view | raw | blame | history
screen-api/src/main/java/com/moral/api/controller/LoginController.java 114 ●●●●● patch | view | raw | blame | history
screen-api/src/main/java/com/moral/api/controller/UserController.java 5 ●●●● patch | view | raw | blame | history
screen-api/src/main/java/com/moral/api/controller/WebController.java 82 ●●●●● patch | view | raw | blame | history
screen-api/src/main/java/com/moral/api/entity/User.java 8 ●●●●● patch | view | raw | blame | history
screen-api/src/main/java/com/moral/api/exception/GlobalExceptionHandler.java 5 ●●●●● patch | view | raw | blame | history
screen-api/src/main/java/com/moral/api/interceptor/AuthenticationInterceptor.java 4 ●●●● patch | view | raw | blame | history
screen-api/src/main/java/com/moral/api/mapper/GroupMapper.java 2 ●●● patch | view | raw | blame | history
screen-api/src/main/java/com/moral/api/mapper/UserMapper.java 2 ●●●●● patch | view | raw | blame | history
screen-api/src/main/java/com/moral/api/service/UserService.java 5 ●●●● patch | view | raw | blame | history
screen-api/src/main/java/com/moral/api/service/impl/UserServiceImpl.java 77 ●●●●● patch | view | raw | blame | history
screen-api/src/main/resources/mapper/GroupMapper.xml 1 ●●●● patch | view | raw | blame | history
screen-api/src/main/resources/mapper/UserMapper.xml 30 ●●●●● patch | view | raw | blame | history
screen-common/src/main/java/com/moral/config/KaptchaConfig.java 47 ●●●●● patch | view | raw | blame | history
screen-common/src/main/java/com/moral/constant/Constants.java 52 ●●●●● patch | view | raw | blame | history
screen-common/src/main/java/com/moral/constant/ResponseCodeEnum.java 42 ●●●●● patch | view | raw | blame | history
screen-common/src/main/java/com/moral/constant/ResultMessage.java 29 ●●●●● patch | view | raw | blame | history
screen-common/src/main/java/com/moral/pojo/VerificationCode.java 18 ●●●●● patch | view | raw | blame | history
screen-common/src/main/java/com/moral/util/AESUtils.java 15 ●●●● patch | view | raw | blame | history
screen-common/src/main/java/com/moral/util/KaptchaUtils.java 80 ●●●●● patch | view | raw | blame | history
screen-common/src/main/java/com/moral/util/RegexUtils.java 4 ●●●● patch | view | raw | blame | history
screen-common/src/main/java/com/moral/util/TokenUtils.java 16 ●●●●● patch | view | raw | blame | history
screen-manage/src/main/java/com/moral/api/controller/AccountController.java 114 ●●●●● patch | view | raw | blame | history
screen-manage/src/main/java/com/moral/api/exception/GlobalExceptionHandler.java 5 ●●●●● patch | view | raw | blame | history
screen-manage/src/main/java/com/moral/api/pojo/dto/account/AccountDTO.java 4 ●●●● patch | view | raw | blame | history
screen-manage/src/main/java/com/moral/api/pojo/dto/account/AccountDeleteDTO.java 16 ●●●●● patch | view | raw | blame | history
screen-manage/src/main/java/com/moral/api/pojo/dto/account/AccountInsertDTO.java 43 ●●●●● patch | view | raw | blame | history
screen-manage/src/main/java/com/moral/api/pojo/dto/account/AccountQueryDTO.java 4 ●●●● patch | view | raw | blame | history
screen-manage/src/main/java/com/moral/api/pojo/dto/account/AccountUpdateDTO.java 20 ●●●●● patch | view | raw | blame | history
screen-manage/src/main/java/com/moral/api/pojo/dto/login/LoginDTO.java 37 ●●●● patch | view | raw | blame | history
screen-manage/src/main/java/com/moral/api/pojo/form/AccountDeleteForm.java 23 ●●●●● patch | view | raw | blame | history
screen-manage/src/main/java/com/moral/api/pojo/form/AccountInsertForm.java 93 ●●●●● patch | view | raw | blame | history
screen-manage/src/main/java/com/moral/api/pojo/form/AccountQueryForm.java 4 ●●●● patch | view | raw | blame | history
screen-manage/src/main/java/com/moral/api/pojo/form/AccountUpdateForm.java 66 ●●●●● patch | view | raw | blame | history
screen-manage/src/main/java/com/moral/api/pojo/form/LoginForm.java 4 ●●●● patch | view | raw | blame | history
screen-manage/src/main/java/com/moral/api/pojo/form/LogoutForm.java 4 ●●●● patch | view | raw | blame | history
screen-manage/src/main/java/com/moral/api/pojo/request/AccountInsertRequest.java 62 ●●●●● patch | view | raw | blame | history
screen-manage/src/main/java/com/moral/api/pojo/request/AccountUpdateRequest.java 45 ●●●●● patch | view | raw | blame | history
screen-manage/src/main/java/com/moral/api/pojo/vo/account/AccountDeleteVO.java 32 ●●●●● patch | view | raw | blame | history
screen-manage/src/main/java/com/moral/api/pojo/vo/account/AccountInsertVO.java 57 ●●●● patch | view | raw | blame | history
screen-manage/src/main/java/com/moral/api/pojo/vo/account/AccountQueryVO.java 7 ●●●●● patch | view | raw | blame | history
screen-manage/src/main/java/com/moral/api/pojo/vo/account/AccountUpdateVO.java 37 ●●●● patch | view | raw | blame | history
screen-manage/src/main/java/com/moral/api/pojo/vo/account/AccountVO.java 8 ●●●● patch | view | raw | blame | history
screen-manage/src/main/java/com/moral/api/pojo/vo/login/AccountInfoVO.java 5 ●●●●● patch | view | raw | blame | history
screen-manage/src/main/java/com/moral/api/pojo/vo/login/LoginVO.java 42 ●●●●● patch | view | raw | blame | history
screen-manage/src/main/java/com/moral/api/service/ManageAccountService.java 26 ●●●●● patch | view | raw | blame | history
screen-manage/src/main/java/com/moral/api/service/impl/ManageAccountServiceImpl.java 317 ●●●● patch | view | raw | blame | history
screen-manage/src/main/java/com/moral/api/service/impl/ManageRoleServiceImpl.java 3 ●●●● patch | view | raw | blame | history
screen-manage/src/main/resources/application-dev.yml 2 ●●●●● patch | view | raw | blame | history
screen-manage/src/main/resources/mapper/ManageMenuMapper.xml 1 ●●●● patch | view | raw | blame | history
pom.xml
@@ -107,6 +107,11 @@
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>com.google.code.kaptcha</groupId>
            <artifactId>kaptcha</artifactId>
            <version>2.3.2</version>
        </dependency>
    </dependencies>
screen-api/src/main/java/com/moral/api/controller/LoginController.java
New file
@@ -0,0 +1,114 @@
package com.moral.api.controller;
import com.moral.constant.Constants;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;
import com.moral.api.entity.Group;
import com.moral.api.entity.User;
import com.moral.api.service.GroupService;
import com.moral.api.service.UserService;
import com.moral.constant.ResponseCodeEnum;
import com.moral.constant.ResultMessage;
import com.moral.util.AESUtils;
import com.moral.util.MD5Utils;
import com.moral.util.TokenUtils;
import com.moral.util.WebUtils;
@Slf4j
@Api(tags = {"登陆"})
@RestController
public class LoginController {
    @Autowired
    private UserService userService;
    @Autowired
    private GroupService groupService;
    @Value("${AES.KEY}")
    private String AESKey;
    @ApiOperation(value = "登陆", notes = "登陆")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "account", value = "账户", required = false, paramType = "query", dataType = "String"),
            @ApiImplicitParam(name = "password", value = "密码", required = false, paramType = "query", dataType = "String")
    })
    @RequestMapping(value = "login", method = RequestMethod.POST)
    public ResultMessage login(HttpServletRequest request) {
        Map<String, Object> parameters = WebUtils.getParametersStartingWith(request, null);
        if (!(parameters.containsKey("account") && parameters.containsKey("password"))) {
            return ResultMessage.fail(ResponseCodeEnum.PARAMETERS_IS_MISSING.getCode(), ResponseCodeEnum.PARAMETERS_IS_MISSING.getMsg());
        }
        //接收参数
        String password = parameters.get("password").toString();
        //密码解密
        password = AESUtils.decrypt(password, AESKey);
        User user = userService.selectUserInfo(parameters);
        //校验账户
        if (user == null) {
            return ResultMessage.fail(ResponseCodeEnum.ACCOUNT_NOT_EXIST.getCode(), ResponseCodeEnum.ACCOUNT_NOT_EXIST.getMsg());
        }
        //校验密码
        if (!MD5Utils.saltMD5Verify(password, user.getPassword())) {
            return ResultMessage.fail(ResponseCodeEnum.PASSWORD_INVALID.getCode(), ResponseCodeEnum.PASSWORD_INVALID.getMsg());
        }
        //校验是否删除
        if (Constants.DELETE.equals(user.getIsDelete())) {
            return ResultMessage.fail(ResponseCodeEnum.ACCOUNT_IS_DELETE.getCode(), ResponseCodeEnum.ACCOUNT_IS_DELETE.getMsg());
        }
        //校验是否过期
        if (user.getExpireTime() != null && user.getExpireTime().getTime() < System.currentTimeMillis()) {
            return ResultMessage.fail(ResponseCodeEnum.ACCOUNT_IS_EXPIRE.getCode(), ResponseCodeEnum.ACCOUNT_IS_EXPIRE.getMsg());
        }
        Map<String, Object> result = userService.login(user);
        if (!result.containsKey("token")) {
            return ResultMessage.fail(ResponseCodeEnum.TOKEN_CREATE_ERROR.getCode(), ResponseCodeEnum.TOKEN_CREATE_ERROR.getMsg());
        }
        return ResultMessage.ok();
    }
    @ApiOperation(value = "注销", notes = "注销")
    @RequestMapping(value = "logout", method = RequestMethod.POST)
    public ResultMessage logout(HttpServletRequest request) {
        Map<String, Object> parameters = WebUtils.getParametersStartingWith(request, null);
        if (!parameters.containsKey("uid")) {
            return ResultMessage.fail(ResponseCodeEnum.PARAMETERS_IS_MISSING.getCode(), ResponseCodeEnum.PARAMETERS_IS_MISSING.getMsg());
        }
        String userId = request.getParameter("uid");
        String token = request.getHeader("token");
        TokenUtils.destoryToken(userId, token);
        return ResultMessage.ok();
    }
    @ApiOperation(value = "添加组", notes = "添加组")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "groupName", value = "组名", required = true, paramType = "query", dataType = "String")
    })
    @RequestMapping(value = "addGroup", method = RequestMethod.POST)
    private ResultMessage addGroup(Group group, HttpServletRequest request) {
        String currentUserId = request.getHeader("uid");
        Map<String, Object> map = groupService.addGroup(group, currentUserId);
        String msg = map.get("msg").toString();
        boolean flag = Boolean.parseBoolean(map.get("flag").toString());
        if (flag) {
            return ResultMessage.ok(msg);
        }
        return ResultMessage.fail(msg);
    }
}
screen-api/src/main/java/com/moral/api/controller/UserController.java
@@ -17,6 +17,7 @@
import com.moral.api.entity.User;
import com.moral.api.service.UserService;
import com.moral.constant.ResponseCodeEnum;
import com.moral.constant.ResultMessage;
import com.moral.util.WebUtils;
@@ -43,10 +44,12 @@
    public ResultMessage addUser(User user, HttpServletRequest request) {
        Map<String, Object> parameters = WebUtils.getParametersStartingWith(request, null);
        if (!(parameters.containsKey("account") && parameters.containsKey("password"))) {
            return ResultMessage.fail("账户及密码不允许为空!");
            return ResultMessage.fail(ResponseCodeEnum.PARAMETERS_IS_MISSING.getCode(), ResponseCodeEnum.PARAMETERS_IS_MISSING.getMsg());
        }
        String token = request.getHeader("token");
        Map<String, Object> map = userService.addUser(user, token);
        if (map.containsKey("msg")) {
            return ResultMessage.fail(map.get("msg").toString());
        }
screen-api/src/main/java/com/moral/api/controller/WebController.java
File was deleted
screen-api/src/main/java/com/moral/api/entity/User.java
@@ -7,11 +7,13 @@
import java.io.Serializable;
import java.util.Date;
import java.util.List;
import java.util.Set;
import lombok.Data;
import lombok.EqualsAndHashCode;
import javax.persistence.Transient;
/**
@@ -94,6 +96,12 @@
     */
    private String isDelete;
    @Transient
    private Organization organization;
    @Transient
    private List<Group> groups;
    @Override
    protected Serializable pkVal() {
screen-api/src/main/java/com/moral/api/exception/GlobalExceptionHandler.java
@@ -1,6 +1,7 @@
package com.moral.api.exception;
import com.moral.constant.Constants;
import com.moral.constant.ResponseCodeEnum;
import com.moral.constant.ResultMessage;
import lombok.extern.slf4j.Slf4j;
import org.springframework.http.HttpStatus;
@@ -21,7 +22,7 @@
    @ResponseStatus(HttpStatus.OK)
    public ResultMessage handleException(Exception ex) {
        ex.printStackTrace();
        return  ResultMessage.fail(Constants.CODE_OPERATION_FAILED, "请求失败");
        return  ResultMessage.fail(ResponseCodeEnum.FAIL.getCode(), ResponseCodeEnum.FAIL.getMsg());
    }
    /**
@@ -31,7 +32,7 @@
    @ResponseBody
    @ResponseStatus(HttpStatus.OK)
    public ResultMessage handleUserNotExistException(BusinessException ex) {
        return ResultMessage.fail(Constants.CODE_OPERATION_FAILED, "请求用户数据失败");
        return ResultMessage.fail(ResponseCodeEnum.FAIL.getCode(), "请求用户数据失败");
    }
}
screen-api/src/main/java/com/moral/api/interceptor/AuthenticationInterceptor.java
@@ -15,7 +15,7 @@
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        /*if (!(handler instanceof HandlerMethod)) {
        if (!(handler instanceof HandlerMethod)) {
            return true;
        }
        String token = request.getHeader("token");
@@ -29,7 +29,7 @@
            TokenUtils.extendTokenTime(token);
        } catch (Exception e) {
            return false;
        }*/
        }
        return true;
    }
}
screen-api/src/main/java/com/moral/api/mapper/GroupMapper.java
@@ -16,6 +16,6 @@
 */
public interface GroupMapper extends BaseMapper<Group> {
    List<Map<String, Object>> selectUserGroup(int userId);
    List<Map<String, Object>> selectUserGroup(Map<String, Object> parameters);
}
screen-api/src/main/java/com/moral/api/mapper/UserMapper.java
@@ -17,4 +17,6 @@
public interface UserMapper extends BaseMapper<User> {
    List<Map<String, Object>> selectUsers(Map<String, Object> parameters);
    User selectUserInfo(Map<String, Object> parameters);
}
screen-api/src/main/java/com/moral/api/service/UserService.java
@@ -17,7 +17,7 @@
 */
public interface UserService extends IService<User> {
    Map<String, Object> login(Map<String, Object> parameters);
    Map<String, Object> login(User user);
    Map<String, Object> addUser(User user, String token);
@@ -27,4 +27,7 @@
    Map<String, Object> getUsers(Map<String, Object> parameters);
    User selectUserInfo(Map<String, Object> parameters);
}
screen-api/src/main/java/com/moral/api/service/impl/UserServiceImpl.java
@@ -10,7 +10,9 @@
import java.util.stream.Collectors;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.moral.api.entity.Group;
import com.moral.api.entity.Menu;
import com.moral.api.entity.Organization;
import com.moral.api.entity.User;
import com.moral.api.mapper.GroupMapper;
@@ -19,6 +21,7 @@
import com.moral.api.mapper.UserMapper;
import com.moral.api.service.UserService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.moral.constant.Constants;
import com.moral.util.AESUtils;
import com.moral.util.MD5Utils;
import com.moral.util.RegexUtils;
@@ -43,65 +46,44 @@
    private UserMapper userMapper;
    @Autowired
    private GroupMapper groupMapper;
    @Autowired
    private MenuMapper menuMapper;
    @Autowired
    private OrganizationMapper organizationMapper;
    @Value("${AES.KEY}")
    private String AESKey;
    @Override
    public User selectUserInfo(Map<String, Object> parameters) {
        return userMapper.selectUserInfo(parameters);
    }
    @Override
    public Map<String, Object> login(Map<String, Object> parameters) {
    public Map<String, Object> login(User user) {
        Map<String, Object> resultMap = new LinkedHashMap<>();
        //接收参数
        String account = parameters.get("account").toString();
        String password = parameters.get("password").toString();
        //解密
        /*account = AESUtils.decrypt(account, AESKey);
        password = AESUtils.decrypt(password, AESKey);*/
        QueryWrapper<User> queryWrapper = new QueryWrapper<>();
        //校验账户
        queryWrapper.eq("account", account);
        User user = userMapper.selectOne(queryWrapper);
        String msg;
        if (user == null) {
            msg = "用户名不存在";
        } else {
            if (!MD5Utils.saltMD5Verify(password, user.getPassword())) {//校验密码
                msg = "密码错误";
            } else if ("1".equals(user.getIsDelete())) {
                msg = "账户已被删除";
            } else if (user.getExpireTime() != null && user.getExpireTime().getTime() < System.currentTimeMillis()) {
                msg = "你的账户已过期";
            } else {
                int userId = user.getId();
                //查询地图等级
                Map<String, Object> orgMap = organizationMapper.selectOrganizationById(user.getOrganizationId());
                String locationCode = orgMap.get(orgMap.get("location_level").toString()).toString();
                //封装用户信息
                Map<String, Object> userInfo = new LinkedHashMap<>();
                userInfo.put("userId", userId);
        List<Map<String, Object>> groups = new ArrayList<>();
        for (Group group : user.getGroups()) {
            HashMap<String, Object> groupMap = new HashMap<>();
            groupMap.put("groupId", group.getId());
            groupMap.put("groupName", group.getGroupName());
            groups.add(groupMap);
        }
        Organization organization = user.getOrganization();
        userInfo.put("userId", user.getId());
                userInfo.put("account", user.getAccount());
                userInfo.put("userName", user.getUserName());
                userInfo.put("organizationId", user.getOrganizationId());
                userInfo.put("locationCode", locationCode);
                userInfo.put("expireTime", user.getExpireTime());
                userInfo.put("isAdmin", user.getIsAdmin());
                List<Map<String, Object>> groups = groupMapper.selectUserGroup(userId);
        userInfo.put("organizationId", user.getOrganizationId());
        userInfo.put("organizationName", organization.getName());
        userInfo.put("locationLevel", organization.getLocationLevel());
                userInfo.put("groups", groups);
                userInfo.putAll(getMenus(userId));
        userInfo.putAll(getMenus(user.getId()));
        try {
                //生成token,并存入redis
                String token = TokenUtils.getToken(user.getId().toString(), userInfo);
                resultMap.put("token", token);
        } catch (Exception e) {
            log.error("token生成异常:"+e.getMessage());
        }
                resultMap.putAll(userInfo);
                return resultMap;
            }
        }
        resultMap.put("msg", msg);
        return resultMap;
    }
@@ -163,13 +145,8 @@
        Map<String, Object> resultMap = new HashMap<>();
        Map<String, Object> currentUserInfo = (Map<String, Object>) TokenUtils.getUserInfoByToken(token);
        if (!(boolean) currentUserInfo.get("isAdmin")) {
            resultMap.put("msg", "没有权限");
            return resultMap;
        }
        QueryWrapper<User> queryWrapper = new QueryWrapper<>();
        queryWrapper.eq("account", user.getAccount());
        userMapper.selectOne(queryWrapper);
        if (userMapper.selectOne(queryWrapper) != null) {
            resultMap.put("msg", "账户名已存在");
            return resultMap;
@@ -205,7 +182,7 @@
        } else {
            User user = new User();
            user.setId(userId);
            user.setIsDelete("1");
            user.setIsDelete(Constants.DELETE);
            userMapper.updateById(user);
        }
        return resultMap;
@@ -277,4 +254,6 @@
        }
        return msgs;
    }
}
screen-api/src/main/resources/mapper/GroupMapper.xml
@@ -15,7 +15,6 @@
    <resultMap id="GroupResultMap" type="java.util.LinkedHashMap">
        <id column="id" property="id"/>
        <result column="group_name" property="groupName"/>
        <result column="organization_id" property="organizationId"/>
    </resultMap>
    <select id="selectUserGroup" resultMap="GroupResultMap">
screen-api/src/main/resources/mapper/UserMapper.xml
@@ -17,8 +17,38 @@
        <result column="update_time" property="updateTime"/>
        <result column="expire_time" property="expireTime"/>
        <result column="is_delete" property="isDelete"/>
        <!--用户组织-->
        <association property="organization" javaType="com.moral.api.entity.Organization">
            <result column="id" property="id" jdbcType="INTEGER"/>
            <result column="name" property="name" jdbcType="VARCHAR"/>
            <result column="location_level" property="locationLevel"/>
        </association>
        <!--用户组-->
        <collection property="groups" ofType="com.moral.api.entity.Group" javaType = "java.util.ArrayList">
            <id column="groupId" property="id" jdbcType="INTEGER"/>
            <result column="group_name" property="groupName" jdbcType="VARCHAR"/>
        </collection>
    </resultMap>
    <select id="selectUserInfo" resultMap="BaseResultMap">
        SELECT u.id,u.account,u.password,u.user_name,u.organization_id,u.expire_time,u.is_delete,
        o.name,u.is_admin,o.location_level,
        g.id groupId,g.group_name
        FROM `user` u,
        `organization` o,
        `user_group` ug,
        `group` g
        WHERE u.account = #{account}
        AND u.organization_id=o.id
        AND  u.id = ug.user_id
        AND ug.group_id = g.id
        AND g.is_delete = 0
        AND ug.is_delete = 0
    </select>
    <select id="selectUsers" resultType="java.util.Map">
        SELECT id,account,user_name userName,email,mobile,wechat FROM `user` WHERE
        <if test="orgId!=null">
screen-common/src/main/java/com/moral/config/KaptchaConfig.java
New file
@@ -0,0 +1,47 @@
package com.moral.config;
import com.google.code.kaptcha.impl.DefaultKaptcha;
import com.google.code.kaptcha.util.Config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import java.util.Properties;
/**
 * @ClassName KaptchaConfig
 * @Description TODO
 * @Author 陈凯裕
 * @Date 2021/3/16 14:04
 * @Version TODO
 **/
@Configuration
public class KaptchaConfig {
    @Bean(name = "kaptchaProducer")
    public DefaultKaptcha getDefaultKaptcha(){
        DefaultKaptcha defaultKaptcha = new DefaultKaptcha();
        Properties properties = new Properties();
        //设置边框
        properties.put("kaptcha.border", "no");
        //字体颜色
        properties.put("kaptcha.textproducer.font.color", "blue");
        //文字间隔
        properties.put("kaptcha.textproducer.char.space", "15");
        //验证码长度
        properties.put("kaptcha.textproducer.char.length","4");
        //图片高度
        properties.put("kaptcha.image.height","34");
        //文字尺寸
        properties.put("kaptcha.textproducer.font.size","25");
        //干扰实现类
        /*不使用干扰*/
        //properties.put("kaptcha.noise.impl","com.google.code.kaptcha.impl.NoNoise");
        /*使用默认干扰实现类*/
        properties.put("kaptcha.noise.impl","com.google.code.kaptcha.impl.DefaultNoise");
        //字体
        //properties.setProperty("kaptcha.textproducer.font.names", "宋体");
        Config config = new Config(properties);
        defaultKaptcha.setConfig(config);
        return defaultKaptcha;
    }
}
screen-common/src/main/java/com/moral/constant/Constants.java
@@ -4,55 +4,7 @@
 * 通用常量信息
 */
public class Constants {
    public static String DELETE = "1";
    /**
     * 操作成功
     */
    public static final String MSG_OPERATION_SUCCESS = "操作成功!";
    /**
     * 操作失败
     */
    public static final String MSG_OPERATION_FAILED = "操作失败!";
    /*
    * token无效
    * */
    public static final String MSG_TOKEN_ERROR = "token无效,请重新登陆";
    /*
    * token生成失败
    * */
    public static final String MSG_TOKEN_CREATE_ERROR = "token生成失败,请联系管理员";
    /*
    * 前端传入参数不完整
    * */
    public static final String MSG_PARAMETER_IS_MISSING = "参数不全";
    /**
     * 操作成功code
     */
    public static final int CODE_OPERATION_SUCCESS = 0;
    /**
     * 操作失败code
     */
    public static final int CODE_OPERATION_FAILED = -1;
    /*
    * 前端传入参数不完整
    * */
    public static final int CODE_PARAMETER_IS_MISSING = -2;
    /**
     * token校验失败
     */
    public static final int CODE_TOKEN_ERROR = -10;
    /*
    * token生成失败
    * */
    public static final int CODE_TOKEN_CREATE_ERROR = -11;
    public static String NOT_DELETE = "0";
}
screen-common/src/main/java/com/moral/constant/ResponseCodeEnum.java
New file
@@ -0,0 +1,42 @@
package com.moral.constant;
/**
 * @ClassName ResponseCodeEnum
 * @Description TODO
 * @Author 陈凯裕
 * @Date 2021/3/17 11:19
 * @Version TODO
 **/
public enum ResponseCodeEnum {
    SUCCESS(0,"操作成功"),
    FAIL(-1,"操作失败"),
    PARAMETERS_IS_MISSING(-2,"参数不完整"),
    TOKEN_INVALID(-3,"token无效"),
    TOKEN_CREATE_ERROR(-4,"token生成错误"),
    ACCOUNT_NOT_EXIST(-5,"用户不存在"),
    ACCOUNT_EXIST(-6,"用户已经存在"),
    ACCOUNT_IS_DELETE(-7,"用户已经被删除"),
    PASSWORD_ERROR(-8,"密码错误"),
    MOBILE_INVALID(-9,"手机号无效"),
    EMAIL_INVALID(-10,"邮箱无效"),
    ACCOUNT_INVALID(-11,"用户名无效"),
    PASSWORD_INVALID(-12,"密码无效"),
    ACCOUNT_IS_EXPIRE(-13,"用户已过期")
    ;
    private final Integer code;
    private final String  msg;
    ResponseCodeEnum(Integer code, String msg) {
        this.code = code;
        this.msg = msg;
    }
    public Integer getCode() {
        return code;
    }
    public String getMsg() {
        return msg;
    }
}
screen-common/src/main/java/com/moral/constant/ResultMessage.java
@@ -25,17 +25,26 @@
    @ApiModelProperty("返回对象")
    private T data;
    public ResultMessage(int code, String msg, T data) {
        this.code = code;
        this.msg = msg;
        this.data = data;
    }
    public ResultMessage() {
    }
    public static ResultMessage ok() {
        ResultMessage resultMessage = new ResultMessage();
        resultMessage.setCode(Constants.CODE_OPERATION_SUCCESS);
        resultMessage.setMessage(Constants.MSG_OPERATION_SUCCESS);
        resultMessage.setCode(ResponseCodeEnum.SUCCESS.getCode());
        resultMessage.setMessage(ResponseCodeEnum.SUCCESS.getMsg());
        resultMessage.setData(new HashMap<>());
        return resultMessage;
    }
    public static ResultMessage ok(String msg) {
        ResultMessage resultMessage = new ResultMessage();
        resultMessage.setCode(Constants.CODE_OPERATION_SUCCESS);
        resultMessage.setCode(ResponseCodeEnum.SUCCESS.getCode());
        resultMessage.setMessage(msg);
        resultMessage.setData(new HashMap<>());
        return resultMessage;
@@ -58,8 +67,8 @@
    public static <T> ResultMessage<T> ok(T data) {
        ResultMessage resultMessage = new ResultMessage();
        resultMessage.setCode(Constants.CODE_OPERATION_SUCCESS);
        resultMessage.setMessage(Constants.MSG_OPERATION_SUCCESS);
        resultMessage.setCode(ResponseCodeEnum.SUCCESS.getCode());
        resultMessage.setMessage(ResponseCodeEnum.SUCCESS.getMsg());
        resultMessage.setData(data == null ?new HashMap<>():data);
        return resultMessage;
    }
@@ -74,15 +83,15 @@
    public static ResultMessage fail() {
        ResultMessage resultMessage = new ResultMessage();
        resultMessage.setCode(Constants.CODE_OPERATION_FAILED);
        resultMessage.setMessage(Constants.MSG_OPERATION_FAILED);
        resultMessage.setCode(ResponseCodeEnum.FAIL.getCode());
        resultMessage.setMessage(ResponseCodeEnum.FAIL.getMsg());
        resultMessage.setData(new HashMap<>());
        return resultMessage;
    }
    public static ResultMessage fail(String msg) {
        ResultMessage resultMessage = new ResultMessage();
        resultMessage.setCode(Constants.CODE_OPERATION_FAILED);
        resultMessage.setCode(ResponseCodeEnum.FAIL.getCode());
        resultMessage.setMessage(msg);
        resultMessage.setData(new HashMap<>());
        return resultMessage;
@@ -98,8 +107,8 @@
    public static <T> ResultMessage<T> fail(T data) {
        ResultMessage resultMessage = new ResultMessage();
        resultMessage.setCode(Constants.CODE_OPERATION_FAILED);
        resultMessage.setMessage(Constants.MSG_OPERATION_FAILED);
        resultMessage.setCode(ResponseCodeEnum.FAIL.getCode());
        resultMessage.setMessage(ResponseCodeEnum.FAIL.getMsg());
        resultMessage.setData(data == null ?new HashMap<>():data);
        return resultMessage;
    }
screen-common/src/main/java/com/moral/pojo/VerificationCode.java
New file
@@ -0,0 +1,18 @@
package com.moral.pojo;
import lombok.Data;
/**
 * @ClassName VerificationCode
 * @Description 验证码类
 * @Author 陈凯裕
 * @Date 2021/3/17 8:51
 * @Version TODO
 **/
@Data
public class VerificationCode {
    private String key;
    private String value;
}
screen-common/src/main/java/com/moral/util/AESUtils.java
@@ -6,6 +6,8 @@
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.net.util.Base64;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
/**
 * @ClassName AESUtil
@@ -15,9 +17,10 @@
 * @Version TODO
 **/
@Slf4j
@Component
public class AESUtils {
    //密钥
    public static String key = "AD42F7787B035B7580000EF93BE20BAD";
    public static String key ;
    //字符集
    private static String charset = "utf-8";
    // 偏移量
@@ -25,6 +28,14 @@
    //AES种类
    private static String transformation = "AES/CBC/PKCS5Padding";
    private static String algorithm = "AES";
    @Value("${AES.KEY}")
    public  void setKey(String key) {
        AESUtils.key = key;
    }
    //加密
    public static String encrypt(String content) {
@@ -70,7 +81,7 @@
    }
    public static void main(String[] args) {
        System.out.println(encrypt("4048974139","AD42F7787B035B7580000EF93BE20BAD"));
        System.out.println(encrypt("404897439","AD42F7787B035B7580000EF93BE20BAD"));
        System.out.println(encrypt("chenkaiyu111","AD42F7787B035B7580000EF93BE20BAD"));
    }
screen-common/src/main/java/com/moral/util/KaptchaUtils.java
New file
@@ -0,0 +1,80 @@
package com.moral.util;
import com.google.code.kaptcha.impl.DefaultKaptcha;
import com.moral.pojo.VerificationCode;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Component;
import sun.misc.BASE64Encoder;
import javax.annotation.Resource;
import javax.imageio.ImageIO;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.awt.image.BufferedImage;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.util.UUID;
/**
 * @ClassName KaptchaUtils
 * @Description 验证码工具类
 * @Author 陈凯裕
 * @Date 2021/3/16 15:36
 * @Version TODO
 **/
@Component
@Slf4j
public class KaptchaUtils {
    private static DefaultKaptcha defaultKaptcha;
    private static RedisTemplate redisTemplate;
    @Autowired
    public void setRedisTemplate(RedisTemplate redisTemplate) {
        KaptchaUtils.redisTemplate = redisTemplate;
    }
    @Autowired
    @Qualifier(value = "kaptchaProducer")
    public  void setDefaultKaptcha(DefaultKaptcha defaultKaptcha) {
        KaptchaUtils.defaultKaptcha = defaultKaptcha;
    }
    /**
     * @Description: 生成验证码
     * @Param: []
     * @return: java.lang.String
     * @Author: 陈凯裕
     * @Date: 2021/3/16
     */
    public static VerificationCode createVerificationCode() throws IOException {
        //生成验证码内容
        String text = defaultKaptcha.createText();
        //生成图片
        BufferedImage image = defaultKaptcha.createImage(text);
        //获取图片的字节数组
        ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
        ImageIO.write(image,"jpg",outputStream);
        byte[] bytes = outputStream.toByteArray();
        //将字节数组进行编码
        BASE64Encoder encoder = new BASE64Encoder();
        String encode = encoder.encode(bytes);
        //将验证码存入redis
        String key = UUID.randomUUID().toString();
        //redisTemplate.opsForValsue().set(key,encode);
        //redisTemplate.expire();
        return null;
    }
    public boolean verify(String verificationCode) {
       return false;
    }
}
screen-common/src/main/java/com/moral/util/RegexUtils.java
@@ -16,6 +16,10 @@
        return account.matches(regex);
    }
    public static void main(String[] args) {
    }
    /**
     * 验证密码
     *
screen-common/src/main/java/com/moral/util/TokenUtils.java
@@ -1,6 +1,7 @@
package com.moral.util;
import com.moral.constant.Constants;
import com.moral.constant.ResponseCodeEnum;
import com.moral.exception.TokenException;
import com.sun.org.apache.bcel.internal.classfile.ConstantString;
import lombok.extern.slf4j.Slf4j;
@@ -60,7 +61,8 @@
            return token;
        } catch (Exception e) {
            log.error("token生成异常:"+e.getMessage());
            throw new TokenException(Constants.CODE_TOKEN_CREATE_ERROR,Constants.MSG_TOKEN_CREATE_ERROR);
            throw new TokenException(ResponseCodeEnum.TOKEN_CREATE_ERROR.getCode(),
                    ResponseCodeEnum.TOKEN_CREATE_ERROR.getMsg());
        }
    }
@@ -77,15 +79,18 @@
            String[] tokenArray = TokenEncryptUtils.decoded(token).split("/");
            //校验token是否合法
            if (tokenArray.length != 2) {
                throw new TokenException(Constants.CODE_TOKEN_ERROR,Constants.MSG_TOKEN_ERROR);
                throw new TokenException(ResponseCodeEnum.TOKEN_INVALID.getCode(),
                        ResponseCodeEnum.TOKEN_INVALID.getMsg());
            }
            //校验token是否过期
            if (!redisTemplate.hasKey(token)) {
                throw new TokenException(Constants.CODE_TOKEN_ERROR,Constants.MSG_TOKEN_ERROR);
                throw new TokenException(ResponseCodeEnum.TOKEN_INVALID.getCode(),
                        ResponseCodeEnum.TOKEN_INVALID.getMsg());
            }
        } catch (Exception e) {
            log.error("token工具类校验token异常" + e.getMessage());
            throw new TokenException(Constants.CODE_TOKEN_ERROR,Constants.MSG_TOKEN_ERROR);
            throw new TokenException(ResponseCodeEnum.TOKEN_INVALID.getCode(),
                    ResponseCodeEnum.TOKEN_INVALID.getMsg());
        }
    }
@@ -99,7 +104,8 @@
    public static Object getUserInfoByToken(String token) {
        Object userInfo = redisTemplate.opsForValue().get(token);
        if(userInfo==null)
            throw new TokenException(Constants.CODE_TOKEN_ERROR,Constants.MSG_TOKEN_ERROR);
            throw new TokenException(ResponseCodeEnum.TOKEN_INVALID.getCode(),
                    ResponseCodeEnum.TOKEN_INVALID.getMsg());
        return userInfo;
    }
screen-manage/src/main/java/com/moral/api/controller/AccountController.java
@@ -1,17 +1,22 @@
package com.moral.api.controller;
import com.moral.api.pojo.dto.account.AccountDeleteDTO;
import com.moral.api.pojo.dto.account.AccountInsertDTO;
import com.moral.api.pojo.dto.account.AccountQueryDTO;
import com.moral.api.pojo.dto.account.AccountUpdateDTO;
import com.moral.api.pojo.dto.login.LoginDTO;
import com.moral.api.pojo.request.*;
import com.moral.api.pojo.form.*;
import com.moral.api.pojo.vo.account.AccountDeleteVO;
import com.moral.api.pojo.vo.account.AccountInsertVO;
import com.moral.api.pojo.vo.account.AccountQueryVO;
import com.moral.api.pojo.vo.account.AccountUpdateVO;
import com.moral.api.pojo.vo.login.LoginVO;
import com.moral.api.service.ManageAccountService;
import com.moral.constant.Constants;
import com.moral.constant.ResponseCodeEnum;
import com.moral.constant.ResultMessage;
import com.moral.util.KaptchaUtils;
import com.moral.util.TokenUtils;
import io.swagger.annotations.*;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
@@ -21,85 +26,114 @@
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
@Slf4j
@Api(tags = {"后台账户管理"})
@RestController
@RequestMapping("/account")
public class AccountController {
    @Resource
    ManageAccountService accountService;
    @Autowired
    @Qualifier("tokenRedisTemplate")
    RedisTemplate redisTemplate;
    ManageAccountService accountService;
    @PostMapping("login")
    public ResultMessage login(@RequestBody LoginRequest loginRequest) {
        if (!loginRequest.valid())
            return ResultMessage.fail(Constants.CODE_PARAMETER_IS_MISSING,Constants.MSG_PARAMETER_IS_MISSING);
    public ResultMessage login(@RequestBody LoginForm loginForm) {
        if (!loginForm.valid())
            return ResultMessage.fail(ResponseCodeEnum.PARAMETERS_IS_MISSING.getCode(),
                    ResponseCodeEnum.PARAMETERS_IS_MISSING.getMsg());
        LoginDTO loginDTO = accountService.login(loginRequest);
        LoginDTO loginDTO = accountService.login(loginForm);
        LoginVO loginVO = LoginVO.convert(loginDTO);
        if(loginVO.getCode().equals(loginVO.SUCCESS))
            return ResultMessage.ok(loginVO);
        return ResultMessage.fail(loginVO);
        return new ResultMessage(loginDTO.getCode(),loginDTO.getMsg(),loginVO);
    }
    @PostMapping("logout")
    public ResultMessage logout(@RequestBody LogoutRequest logoutRequest, HttpServletRequest request) {
        if(!logoutRequest.valid())
            return ResultMessage.fail(Constants.CODE_PARAMETER_IS_MISSING,Constants.MSG_PARAMETER_IS_MISSING);
    public ResultMessage logout (@RequestBody LogoutForm logoutForm, HttpServletRequest request) {
        if(!logoutForm.valid())
            return ResultMessage.fail(ResponseCodeEnum.PARAMETERS_IS_MISSING.getCode(),
                    ResponseCodeEnum.PARAMETERS_IS_MISSING.getMsg());
        String token = request.getHeader("token");
        logoutRequest.setToken(token);
        logoutForm.setToken(token);
        if(accountService.logout(logoutRequest))
            return ResultMessage.ok("注销成功");
        return ResultMessage.fail("注销异常");
        if(accountService.logout(logoutForm))
            return ResultMessage.ok();
        return ResultMessage.fail();
    }
    @PostMapping("insert")
    public ResultMessage insert(@RequestBody AccountInsertRequest accountInsertRequest){
        if(!accountInsertRequest.valid())
            return ResultMessage.fail(Constants.CODE_PARAMETER_IS_MISSING,Constants.MSG_PARAMETER_IS_MISSING);
    public ResultMessage insert(@RequestBody AccountInsertForm accountInsertForm){
        if(!accountInsertForm.valid())
            return ResultMessage.fail(ResponseCodeEnum.PARAMETERS_IS_MISSING.getCode(),
                    ResponseCodeEnum.PARAMETERS_IS_MISSING.getMsg());
        //判断参数是否符合条件
        AccountInsertDTO conditionDTO = accountInsertForm.paramValid();
        if(conditionDTO.getCode()!=ResponseCodeEnum.SUCCESS.getCode()){
            return new ResultMessage(conditionDTO.getCode(),conditionDTO.getMsg(),null);
        }
        AccountInsertDTO accountInsertDTO = accountService.insertAccount(accountInsertRequest);
        AccountInsertDTO accountInsertDTO = accountService.insertAccount(accountInsertForm);
        AccountInsertVO accountInsertVO = AccountInsertVO.convert(accountInsertDTO);
        if(accountInsertVO.getCode().equals(accountInsertVO.SUCCESS))
            return ResultMessage.ok(accountInsertVO);
        return ResultMessage.fail(accountInsertVO);
        return new ResultMessage(accountInsertDTO.getCode(),accountInsertDTO.getMsg(),accountInsertVO);
    }
    @GetMapping("query")
    public ResultMessage query(AccountQueryRequest accountQueryRequest){
        if(!accountQueryRequest.valid())
            return ResultMessage.fail(Constants.CODE_PARAMETER_IS_MISSING,Constants.MSG_PARAMETER_IS_MISSING);
    public ResultMessage query(AccountQueryForm accountQueryForm){
        if(!accountQueryForm.valid())
            return ResultMessage.fail(ResponseCodeEnum.PARAMETERS_IS_MISSING.getCode(),
                    ResponseCodeEnum.PARAMETERS_IS_MISSING.getMsg());
        AccountQueryDTO accountQueryDTO = accountService.queryAccount(accountQueryRequest);
        AccountQueryDTO accountQueryDTO = accountService.queryAccount(accountQueryForm);
        AccountQueryVO accountQueryVO = AccountQueryVO.convert(accountQueryDTO);
        return ResultMessage.ok(accountQueryVO);
        return new ResultMessage(accountQueryDTO.getCode(),accountQueryDTO.getMsg(),accountQueryVO);
    }
    @PostMapping("update")
    public ResultMessage update(@RequestBody AccountUpdateRequest accountQeuryRequest){
        if(!accountQeuryRequest.valid())
            return ResultMessage.fail(Constants.CODE_PARAMETER_IS_MISSING,Constants.MSG_PARAMETER_IS_MISSING);
        AccountUpdateDTO accountUpdateDTO = accountService.updateAccount(accountQeuryRequest);
    @PostMapping("update")
    public ResultMessage update(@RequestBody AccountUpdateForm accountUpdateRequest){
        if(!accountUpdateRequest.valid())
            return ResultMessage.fail(ResponseCodeEnum.PARAMETERS_IS_MISSING.getCode(),
                    ResponseCodeEnum.PARAMETERS_IS_MISSING.getMsg());
        //判断参数是否符合条件
        AccountUpdateDTO conditionDTO = accountUpdateRequest.paramValid();
        if(conditionDTO.getCode()!=ResponseCodeEnum.SUCCESS.getCode()){
            return new ResultMessage(conditionDTO.getCode(),conditionDTO.getMsg(),null);
        }
        AccountUpdateDTO accountUpdateDTO = accountService.updateAccount(accountUpdateRequest);
        AccountUpdateVO accountUpdateVO = AccountUpdateVO.convert(accountUpdateDTO);
        if(accountUpdateVO.getCode().equals(accountUpdateVO.SUCCESS))
            return ResultMessage.ok(accountUpdateVO);
        return ResultMessage.fail(accountUpdateVO);
        return new ResultMessage(accountUpdateDTO.getCode(),accountUpdateDTO.getMsg(),accountUpdateVO);
    }
    @PostMapping("delete")
    public ResultMessage delete(@RequestBody AccountDeleteForm accountDeleteForm){
        if(!accountDeleteForm.valid())
            return ResultMessage.fail(ResponseCodeEnum.PARAMETERS_IS_MISSING.getCode(),
                    ResponseCodeEnum.PARAMETERS_IS_MISSING.getMsg());
        AccountDeleteDTO accountDeleteDTO = accountService.deleteAccount(accountDeleteForm);
        AccountDeleteVO accountDeleteVO = AccountDeleteVO.convert(accountDeleteDTO);
        return new ResultMessage(accountDeleteDTO.getCode(),accountDeleteDTO.getMsg(),accountDeleteVO);
    }
    @PostMapping("yanzhengma")
    public String yanzhengma(HttpServletResponse response) throws IOException {
        KaptchaUtils.createVerificationCode();
        TokenUtils.getToken("1",1);
        return null;
    }
screen-manage/src/main/java/com/moral/api/exception/GlobalExceptionHandler.java
@@ -1,6 +1,7 @@
package com.moral.api.exception;
import com.moral.constant.Constants;
import com.moral.constant.ResponseCodeEnum;
import com.moral.constant.ResultMessage;
import com.moral.exception.TokenException;
import lombok.extern.slf4j.Slf4j;
@@ -24,7 +25,7 @@
    public ResultMessage handleException(Exception ex) {
        log.error(ex.getMessage());
        ex.printStackTrace();
        return  ResultMessage.fail(Constants.CODE_OPERATION_FAILED, "请求失败");
        return  ResultMessage.fail(ResponseCodeEnum.FAIL.getCode(), ResponseCodeEnum.FAIL.getMsg());
    }
    /**
@@ -34,7 +35,7 @@
    @ResponseBody
    @ResponseStatus(HttpStatus.OK)
    public ResultMessage handleUserNotExistException(BusinessException ex) {
        return ResultMessage.fail(Constants.CODE_OPERATION_FAILED, "请求用户数据失败");
        return ResultMessage.fail(ResponseCodeEnum.FAIL.getCode(), "请求用户数据失败");
    }
    /**
screen-manage/src/main/java/com/moral/api/pojo/dto/account/AccountDTO.java
@@ -19,4 +19,8 @@
    private ManageAccount account;
    private List<ManageRole> roles;
    private Integer code;
    private String msg;
}
screen-manage/src/main/java/com/moral/api/pojo/dto/account/AccountDeleteDTO.java
New file
@@ -0,0 +1,16 @@
package com.moral.api.pojo.dto.account;
import lombok.Data;
/**
 * @ClassName AccountDeleteDTO
 * @Description TODO
 * @Author 陈凯裕
 * @Date 2021/3/16 8:59
 * @Version TODO
 **/
@Data
public class AccountDeleteDTO extends AccountDTO {
}
screen-manage/src/main/java/com/moral/api/pojo/dto/account/AccountInsertDTO.java
@@ -16,47 +16,4 @@
@Data
public class AccountInsertDTO extends 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;
}
screen-manage/src/main/java/com/moral/api/pojo/dto/account/AccountQueryDTO.java
@@ -14,6 +14,10 @@
@Data
public class AccountQueryDTO  {
    private Integer code;
    private String msg;
    private long pages;
    private long total;
screen-manage/src/main/java/com/moral/api/pojo/dto/account/AccountUpdateDTO.java
@@ -11,25 +11,5 @@
 **/
@Data
public class AccountUpdateDTO extends AccountDTO {
    /*
    * 更新成功
    * */
    public static final String SUCCESS = "0";
    /*
    * 用户不存在
    * */
    public static final String ACCOUNT_NOT_EXIST = "-1";
    /*
    * 手机号不符合规则
    * */
    public static final String MOBILE_INVALID = "-2";
    /*
    * 邮箱不符合规则
    * */
    public static final String EMAIL_INVALID = "-3";
    private String code;
}
screen-manage/src/main/java/com/moral/api/pojo/dto/login/LoginDTO.java
@@ -13,39 +13,14 @@
public class LoginDTO {
    /*
    * 登陆成功
    * */
    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;
    private Integer code;
    /*
    * 提示信息
    * */
    private String msg;
    /*
    *用户token
screen-manage/src/main/java/com/moral/api/pojo/form/AccountDeleteForm.java
New file
@@ -0,0 +1,23 @@
package com.moral.api.pojo.form;
import lombok.Data;
/**
 * @ClassName AccountDeleteRequest
 * @Description TODO
 * @Author 陈凯裕
 * @Date 2021/3/16 8:54
 * @Version TODO
 **/
@Data
public class AccountDeleteForm {
    private Integer accountId;
    public boolean valid(){
        if(accountId==null||accountId==0){
            return false;
        }
        return true;
    }
}
screen-manage/src/main/java/com/moral/api/pojo/form/AccountInsertForm.java
New file
@@ -0,0 +1,93 @@
package com.moral.api.pojo.form;
import com.moral.api.pojo.dto.account.AccountInsertDTO;
import com.moral.constant.ResponseCodeEnum;
import com.moral.util.AESUtils;
import com.moral.util.RegexUtils;
import lombok.Data;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.util.ObjectUtils;
import java.io.Serializable;
import java.util.List;
/**
 * @ClassName AccountRequest
 * @Description TODO
 * @Author 陈凯裕
 * @Date 2021/3/13 17:23
 * @Version TODO
 **/
@Data
public class AccountInsertForm implements Serializable{
    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 List<String> roleIds;
    public boolean valid() {
        if (
                ObjectUtils.isEmpty(account)  ||
                ObjectUtils.isEmpty(password) ||
                ObjectUtils.isEmpty(email)    ||
                ObjectUtils.isEmpty(mobile)   ||
                ObjectUtils.isEmpty(userName)
            )
            return false;
        return true;
    }
    public AccountInsertDTO paramValid(){
        AccountInsertDTO dto = new AccountInsertDTO();
        //判断用户名是否符合条件
        if(!RegexUtils.checkAccount(account)){
            dto.setCode(ResponseCodeEnum.ACCOUNT_INVALID.getCode());
            dto.setMsg(ResponseCodeEnum.ACCOUNT_INVALID.getMsg());
            return dto;
        }
        //判断密码是否符合条件
        if(!RegexUtils.checkPassword(AESUtils.decrypt(password))){
            dto.setCode(ResponseCodeEnum.PASSWORD_INVALID.getCode());
            dto.setMsg(ResponseCodeEnum.PASSWORD_INVALID.getMsg());
            return dto;
        }
        //判断手机号是否符合条件
        if(!RegexUtils.checkMobile(mobile)){
            dto.setCode(ResponseCodeEnum.MOBILE_INVALID.getCode());
            dto.setMsg(ResponseCodeEnum.MOBILE_INVALID.getMsg());
            return dto;
        }
        //判断邮箱是否符合条件
        if(!RegexUtils.checkEmail(email)){
            dto.setCode(ResponseCodeEnum.EMAIL_INVALID.getCode());
            dto.setMsg(ResponseCodeEnum.EMAIL_INVALID.getMsg());
            return dto;
        }
        dto.setCode(ResponseCodeEnum.SUCCESS.getCode());
        dto.setMsg(ResponseCodeEnum.SUCCESS.getMsg());
        return dto;
    }
}
screen-manage/src/main/java/com/moral/api/pojo/form/AccountQueryForm.java
File was renamed from screen-manage/src/main/java/com/moral/api/pojo/request/AccountQueryRequest.java
@@ -1,4 +1,4 @@
package com.moral.api.pojo.request;
package com.moral.api.pojo.form;
import lombok.Data;
import org.springframework.util.ObjectUtils;
@@ -13,7 +13,7 @@
 * @Version TODO
 **/
@Data
public class AccountQueryRequest implements Serializable {
public class AccountQueryForm implements Serializable {
    private Integer page;
screen-manage/src/main/java/com/moral/api/pojo/form/AccountUpdateForm.java
New file
@@ -0,0 +1,66 @@
package com.moral.api.pojo.form;
import com.moral.api.pojo.dto.account.AccountInsertDTO;
import com.moral.api.pojo.dto.account.AccountUpdateDTO;
import com.moral.constant.ResponseCodeEnum;
import com.moral.util.AESUtils;
import com.moral.util.RegexUtils;
import lombok.Data;
import org.springframework.util.ObjectUtils;
import java.util.List;
/**
 * @ClassName AccountUpdateRequest
 * @Description TODO
 * @Author 陈凯裕
 * @Date 2021/3/15 15:34
 * @Version TODO
 **/
@Data
public class AccountUpdateForm {
    private Integer accountId;
    private String userName;
    private String email;
    private String mobile;
    private String wechat;
    private List<Integer> roleIds;
    public boolean valid(){
        if (
                ObjectUtils.isEmpty(accountId)  ||
                ObjectUtils.isEmpty(userName) ||
                ObjectUtils.isEmpty(email)    ||
                ObjectUtils.isEmpty(mobile)   ||
                ObjectUtils.isEmpty(roleIds)
                )
            return false;
        return true;
    }
    public AccountUpdateDTO paramValid(){
        AccountUpdateDTO dto = new AccountUpdateDTO();
        //判断手机号是否符合条件
        if(!RegexUtils.checkMobile(mobile)){
            dto.setCode(ResponseCodeEnum.MOBILE_INVALID.getCode());
            dto.setMsg(ResponseCodeEnum.MOBILE_INVALID.getMsg());
            return dto;
        }
        //判断邮箱是否符合条件
        if(!RegexUtils.checkEmail(email)){
            dto.setCode(ResponseCodeEnum.EMAIL_INVALID.getCode());
            dto.setMsg(ResponseCodeEnum.EMAIL_INVALID.getMsg());
            return dto;
        }
        dto.setCode(ResponseCodeEnum.SUCCESS.getCode());
        dto.setMsg(ResponseCodeEnum.SUCCESS.getMsg());
        return dto;
    }
}
screen-manage/src/main/java/com/moral/api/pojo/form/LoginForm.java
File was renamed from screen-manage/src/main/java/com/moral/api/pojo/request/LoginRequest.java
@@ -1,4 +1,4 @@
package com.moral.api.pojo.request;
package com.moral.api.pojo.form;
import lombok.Data;
import org.springframework.util.ObjectUtils;
@@ -13,7 +13,7 @@
 * @Version TODO
 **/
@Data
public class LoginRequest implements Serializable {
public class LoginForm implements Serializable {
    private String account;
screen-manage/src/main/java/com/moral/api/pojo/form/LogoutForm.java
File was renamed from screen-manage/src/main/java/com/moral/api/pojo/request/LogoutRequest.java
@@ -1,4 +1,4 @@
package com.moral.api.pojo.request;
package com.moral.api.pojo.form;
import lombok.Data;
import org.springframework.util.ObjectUtils;
@@ -13,7 +13,7 @@
 * @Version TODO
 **/
@Data
public class LogoutRequest implements Serializable {
public class LogoutForm implements Serializable {
    private String accountId;
screen-manage/src/main/java/com/moral/api/pojo/request/AccountInsertRequest.java
File was deleted
screen-manage/src/main/java/com/moral/api/pojo/request/AccountUpdateRequest.java
File was deleted
screen-manage/src/main/java/com/moral/api/pojo/vo/account/AccountDeleteVO.java
New file
@@ -0,0 +1,32 @@
package com.moral.api.pojo.vo.account;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.moral.api.entity.ManageAccount;
import com.moral.api.pojo.dto.account.AccountDeleteDTO;
import com.moral.constant.ResponseCodeEnum;
import lombok.Data;
import org.springframework.util.ObjectUtils;
/**
 * @ClassName AccountDeleteVO
 * @Description TODO
 * @Author 陈凯裕
 * @Date 2021/3/16 11:40
 * @Version TODO
 **/
@Data
@JsonInclude(JsonInclude.Include.NON_EMPTY)
public class AccountDeleteVO extends AccountVO {
    public static AccountDeleteVO convert(AccountDeleteDTO dto) {
        if (dto.getCode() != ResponseCodeEnum.SUCCESS.getCode())
            return null;
        AccountDeleteVO vo = new AccountDeleteVO();
        ManageAccount account = dto.getAccount();
        vo.setId(account.getId());
        vo.setUserName(account.getUserName());
        return vo;
    }
}
screen-manage/src/main/java/com/moral/api/pojo/vo/account/AccountInsertVO.java
@@ -3,7 +3,9 @@
import com.fasterxml.jackson.annotation.JsonInclude;
import com.moral.api.entity.ManageRole;
import com.moral.api.pojo.dto.account.AccountInsertDTO;
import com.moral.constant.ResponseCodeEnum;
import lombok.Data;
import org.springframework.util.ObjectUtils;
import java.util.ArrayList;
import java.util.List;
@@ -18,48 +20,6 @@
@Data
@JsonInclude(JsonInclude.Include.NON_EMPTY)
public class AccountInsertVO extends 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;
    /**
    * @Description: 用于插入账户返回数据使用
@@ -69,31 +29,28 @@
            * @Date: 2021/3/15
            */
    public static AccountInsertVO convert(AccountInsertDTO dto){
        if (dto.getCode() != ResponseCodeEnum.SUCCESS.getCode())
            return null;
        AccountInsertVO vo = new AccountInsertVO();
        if(dto.getCode()== AccountInsertDTO.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<>();
        if (!ObjectUtils.isEmpty(roles)) {
            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/account/AccountQueryVO.java
@@ -3,7 +3,9 @@
import com.fasterxml.jackson.annotation.JsonInclude;
import com.moral.api.pojo.dto.account.AccountDTO;
import com.moral.api.pojo.dto.account.AccountQueryDTO;
import com.moral.constant.ResponseCodeEnum;
import lombok.Data;
import org.springframework.util.ObjectUtils;
import java.util.ArrayList;
import java.util.List;
@@ -30,16 +32,21 @@
    private List<AccountVO> accountVOs;
    public static AccountQueryVO convert(AccountQueryDTO dto){
        if (dto.getCode() != ResponseCodeEnum.SUCCESS.getCode())
            return null;
        long total = dto.getTotal();
        long current = dto.getCurrent();
        long pages = dto.getPages();
        long size = dto.getSize();
        List<AccountVO> accountVOs = new ArrayList<>();
        List<AccountDTO> accountDTOs = dto.getAccountDTOS();
        if (!ObjectUtils.isEmpty(accountDTOs)) {
        for (AccountDTO accountDTO : accountDTOs) {
            AccountVO vo = AccountVO.convert(accountDTO);
            accountVOs.add(vo);
        }
        }
        AccountQueryVO vo = new AccountQueryVO();
        vo.setTotal(total);
        vo.setAccountVOs(accountVOs);
screen-manage/src/main/java/com/moral/api/pojo/vo/account/AccountUpdateVO.java
@@ -4,7 +4,9 @@
import com.moral.api.entity.ManageRole;
import com.moral.api.pojo.dto.account.AccountInsertDTO;
import com.moral.api.pojo.dto.account.AccountUpdateDTO;
import com.moral.constant.ResponseCodeEnum;
import lombok.Data;
import org.springframework.util.ObjectUtils;
import java.util.ArrayList;
import java.util.List;
@@ -20,55 +22,32 @@
@JsonInclude(JsonInclude.Include.NON_EMPTY)
public class AccountUpdateVO extends AccountVO{
    /*
     * 更新成功
     * */
    public static final String SUCCESS = "0";
    /*
     * 用户不存在
     * */
    public static final String ACCOUNT_NOT_EXIST = "-1";
    /*
     * 手机号不符合规则
     * */
    public static final String MOBILE_INVALID = "-2";
    /*
     * 邮箱不符合规则
     * */
    public static final String EMAIL_INVALID = "-3";
    private String code;
    public static AccountUpdateVO convert(AccountUpdateDTO dto){
        if (dto.getCode() != ResponseCodeEnum.SUCCESS.getCode())
            return null;
        AccountUpdateVO vo = new AccountUpdateVO();
        if(dto.getCode()== AccountUpdateDTO.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<>();
        if (!ObjectUtils.isEmpty(roles)) {
            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/account/AccountVO.java
@@ -5,6 +5,7 @@
import com.moral.api.entity.ManageRole;
import com.moral.api.pojo.dto.account.AccountDTO;
import lombok.Data;
import org.springframework.util.ObjectUtils;
import java.util.ArrayList;
import java.util.List;
@@ -18,8 +19,8 @@
 **/
@Data
@JsonInclude(JsonInclude.Include.NON_EMPTY)
public class AccountVO {
    private Integer id;
    private String userName;
@@ -30,8 +31,6 @@
    private String wechat;
    private String isDelete;
    private List<String> roleNames;
    public static AccountVO convert(AccountDTO dto){
@@ -41,13 +40,14 @@
        ManageAccount account = dto.getAccount();
        List<ManageRole> roles = dto.getRoles();
        List<String> roleNames = new ArrayList<>();
        if (!ObjectUtils.isEmpty(roles)) {
        roles.forEach(role->roleNames.add(role.getName()));
        }
        vo.setId(account.getId());
        vo.setUserName(account.getUserName());
        vo.setEmail(account.getEmail());
        vo.setMobile(account.getMobile());
        vo.setWechat(account.getWechat());
        vo.setIsDelete(account.getIsDelete());
        vo.setRoleNames(roleNames);
        return vo;
    }
screen-manage/src/main/java/com/moral/api/pojo/vo/login/AccountInfoVO.java
@@ -6,6 +6,7 @@
import com.moral.api.entity.ManageRole;
import com.moral.api.pojo.dto.login.AccountInfoDTO;
import lombok.Data;
import org.springframework.util.ObjectUtils;
import java.util.ArrayList;
import java.util.List;
@@ -55,8 +56,11 @@
        List<ManageRole> roles = dto.getRoles();
        //封装roleNames
        ArrayList<String> roleNames = new ArrayList<>();
        if (!ObjectUtils.isEmpty(roles)) {
        roles.forEach(role->roleNames.add(role.getName()));
        }
        /*过滤menu无用属性*/
        if (!ObjectUtils.isEmpty(menus)) {
        for (ManageMenu menu : menus) {
            menu.setCreateTime(null);
            menu.setIsDelete(null);
@@ -70,6 +74,7 @@
                child.setParentId(null);
            }
        }
        }
        vo.setAccountId(account.getId());
        vo.setUserName(account.getUserName());
        vo.setMenus(menus);
screen-manage/src/main/java/com/moral/api/pojo/vo/login/LoginVO.java
@@ -3,6 +3,7 @@
import com.fasterxml.jackson.annotation.JsonInclude;
import com.moral.api.pojo.dto.login.AccountInfoDTO;
import com.moral.api.pojo.dto.login.LoginDTO;
import com.moral.constant.ResponseCodeEnum;
import lombok.Data;
import org.springframework.util.ObjectUtils;
@@ -17,40 +18,6 @@
@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
@@ -70,16 +37,15 @@
     * @Date: 2021/3/13
     */
    public static LoginVO convert(LoginDTO dto) {
        if (dto.getCode() != ResponseCodeEnum.SUCCESS.getCode())
            return null;
        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,12 +2,9 @@
import com.moral.api.entity.ManageAccount;
import com.baomidou.mybatisplus.extension.service.IService;
import com.moral.api.pojo.dto.account.AccountDTO;
import com.moral.api.pojo.dto.account.AccountInsertDTO;
import com.moral.api.pojo.dto.account.AccountQueryDTO;
import com.moral.api.pojo.dto.account.AccountUpdateDTO;
import com.moral.api.pojo.dto.account.*;
import com.moral.api.pojo.dto.login.LoginDTO;
import com.moral.api.pojo.request.*;
import com.moral.api.pojo.form.*;
/**
 * <p>
@@ -25,7 +22,7 @@
            * @Author: 陈凯裕
            * @Date: 2021/3/12
            */
    LoginDTO login(LoginRequest loginRequest);
    LoginDTO login(LoginForm loginForm);
   /**
   * @Description: 注销
@@ -34,7 +31,7 @@
           * @Author: 陈凯裕
           * @Date: 2021/3/12
           */
   boolean logout(LogoutRequest logoutRequest);
   boolean logout(LogoutForm logoutForm);
   /**
   * @Description: 添加后台账号
@@ -43,7 +40,7 @@
           * @Author: 陈凯裕
           * @Date: 2021/3/13
           */
    AccountInsertDTO insertAccount(AccountInsertRequest accountInsertRequest);
    AccountInsertDTO insertAccount(AccountInsertForm accountInsertForm);
    /**
    * @Description: 查询账号
@@ -52,7 +49,7 @@
            * @Author: 陈凯裕
            * @Date: 2021/3/15
            */
    AccountQueryDTO queryAccount(AccountQueryRequest accountQueryRequest);
    AccountQueryDTO queryAccount(AccountQueryForm accountQueryForm);
    /**
    * @Description: 更新账号
@@ -61,5 +58,14 @@
            * @Author: 陈凯裕
            * @Date: 2021/3/15
            */
    AccountUpdateDTO updateAccount(AccountUpdateRequest accountUpdateRequest);
    AccountUpdateDTO updateAccount(AccountUpdateForm accountUpdateForm);
    /**
    * @Description: 删除账号
            * @Param: [accountDeleteRequest]
            * @return: com.moral.api.pojo.dto.account.AccountDeleteDTO
            * @Author: 陈凯裕
            * @Date: 2021/3/16
            */
    AccountDeleteDTO deleteAccount(AccountDeleteForm accountDeleteForm);
}
screen-manage/src/main/java/com/moral/api/service/impl/ManageAccountServiceImpl.java
@@ -1,6 +1,7 @@
package com.moral.api.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.moral.api.entity.ManageAccount;
import com.moral.api.entity.ManageAccountRole;
@@ -10,18 +11,18 @@
import com.moral.api.mapper.ManageAccountRoleMapper;
import com.moral.api.mapper.ManageMenuMapper;
import com.moral.api.mapper.ManageRoleMapper;
import com.moral.api.pojo.dto.account.AccountDTO;
import com.moral.api.pojo.dto.account.AccountInsertDTO;
import com.moral.api.pojo.dto.account.AccountQueryDTO;
import com.moral.api.pojo.dto.account.AccountUpdateDTO;
import com.moral.api.pojo.dto.account.*;
import com.moral.api.pojo.dto.login.AccountInfoDTO;
import com.moral.api.pojo.dto.login.LoginDTO;
import com.moral.api.pojo.request.*;
import com.moral.api.pojo.form.*;
import com.moral.api.service.ManageAccountService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.moral.constant.Constants;
import com.moral.constant.ResponseCodeEnum;
import com.moral.util.AESUtils;
import com.moral.util.MD5Utils;
import com.moral.util.TokenUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@@ -43,22 +44,16 @@
@Service
public class ManageAccountServiceImpl extends ServiceImpl<ManageAccountMapper, ManageAccount> implements ManageAccountService {
    @Value("${AES.KEY}")
    private String AESKey;
    @Resource
    @Autowired
    ManageAccountMapper manageAccountMapper;
    @Resource
    @Autowired
    ManageRoleMapper manageRoleMapper;
    @Resource
    @Autowired
    ManageMenuMapper manageMenuMapper;
    @Resource
    @Autowired
    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: 登陆
@@ -68,44 +63,48 @@
     * @Date: 2021/3/11
     */
    @Override
    public LoginDTO login(LoginRequest loginRequest) {
    public LoginDTO login(LoginForm loginForm) {
        LoginDTO loginDTO = new LoginDTO();
        //取参
        String AESAccount = loginRequest.getAccount();
        String AESPassword = loginRequest.getPassword();
        String account = loginForm.getAccount();
        String AESPassword = loginForm.getPassword();
        //解密
        String account = AESUtils.decrypt(AESAccount, AESKey);
        String password = AESUtils.decrypt(AESPassword, AESKey);
        String password = AESUtils.decrypt(AESPassword);
        //查询是否存在
        QueryWrapper<ManageAccount> wrapper = new QueryWrapper<>();
        wrapper.eq("account", account);
        ManageAccount manageAccount = manageAccountMapper.selectOne(wrapper);
        if (ObjectUtils.isEmpty(manageAccount)) {
            loginDTO.setCode(LoginDTO.NOT_EXIST);
        List<ManageAccount> manageAccounts = manageAccountMapper.selectList(wrapper);
        if (ObjectUtils.isEmpty(manageAccounts)) {
            loginDTO.setCode(ResponseCodeEnum.ACCOUNT_NOT_EXIST.getCode());
            loginDTO.setMsg(ResponseCodeEnum.ACCOUNT_NOT_EXIST.getMsg());
            return loginDTO;
        }
        //查询是否逻辑删除
        if (manageAccount.getIsDelete().equals("1")) {
            loginDTO.setCode(LoginDTO.IS_DELETE);
        ManageAccount manageAccount = null;
        for (ManageAccount value : manageAccounts) {
            if (Constants.NOT_DELETE.equals(value.getIsDelete()))
                manageAccount = value;
        }
        if (ObjectUtils.isEmpty(manageAccount)) {
            loginDTO.setCode(ResponseCodeEnum.ACCOUNT_IS_DELETE.getCode());
            loginDTO.setMsg(ResponseCodeEnum.ACCOUNT_NOT_EXIST.getMsg());
            return loginDTO;
        }
        //校验密码
        if (!MD5Utils.saltMD5Verify(password, manageAccount.getPassword())) {
            loginDTO.setCode(LoginDTO.PASSWORD_ERROR);
            loginDTO.setCode(ResponseCodeEnum.PASSWORD_ERROR.getCode());
            loginDTO.setMsg(ResponseCodeEnum.PASSWORD_ERROR.getMsg());
            return loginDTO;
        }
        //查询角色
        List<ManageRole> roles = manageRoleMapper.getManageRoleByAccountId(manageAccount.getId());
        if (ObjectUtils.isEmpty(roles)) {//判断账号是否存在角色
            loginDTO.setCode(LoginDTO.ROLE_EMPTY);
            return loginDTO;
        }
        //查询菜单
        List<ManageMenu> menus = manageMenuMapper.getParentChildrenMenusByRoles(roles);
        if (ObjectUtils.isEmpty(menus)) {//判断账号是否存在菜单
            loginDTO.setCode(LoginDTO.MENU_EMPTY);
            return loginDTO;
        List<ManageMenu> menus = null;
        if (!ObjectUtils.isEmpty(roles)) {
            menus = manageMenuMapper.getParentChildrenMenusByRoles(roles);
        }
        //封装用户信息
@@ -118,7 +117,8 @@
        String token = TokenUtils.getToken(String.valueOf(manageAccount.getId()), accountInfoDTO);
        //封装返回结果
        loginDTO.setCode(LoginDTO.SUCCESS);
        loginDTO.setCode(ResponseCodeEnum.SUCCESS.getCode());
        loginDTO.setMsg(ResponseCodeEnum.SUCCESS.getMsg());
        loginDTO.setAccountInfoDTO(accountInfoDTO);
        loginDTO.setToken(token);
@@ -133,9 +133,9 @@
     * @Date: 2021/3/11
     */
    @Override
    public boolean logout(LogoutRequest logoutRequest) {
        String accountId = logoutRequest.getAccountId();
        String token = logoutRequest.getToken();
    public boolean logout(LogoutForm logoutForm) {
        String accountId = logoutForm.getAccountId();
        String token = logoutForm.getToken();
        TokenUtils.destoryToken(accountId, token);
        return true;
    }
@@ -149,65 +149,30 @@
     */
    @Override
    @Transactional
    public AccountInsertDTO insertAccount(AccountInsertRequest accountInsertRequest) {
    public AccountInsertDTO insertAccount(AccountInsertForm accountInsertForm) {
        AccountInsertDTO accountInsertDTO = new AccountInsertDTO();
        //取参
        String AESAccount = accountInsertRequest.getAccount();
        String AESPassword = accountInsertRequest.getPassword();
        String account = AESUtils.decrypt(AESAccount, AESKey);
        String password = MD5Utils.saltMD5(AESUtils.decrypt(AESPassword, AESKey));
        String userName = accountInsertRequest.getUserName();
        String email = accountInsertRequest.getEmail();
        String mobile = accountInsertRequest.getMobile();
        String wechat = accountInsertRequest.getWechat();
        String isDelete = accountInsertRequest.getIsDelete();
        List<String> roleIdsStr = accountInsertRequest.getRoleIds();
        //校验参数是否符合业务逻辑
        /*判断用户名是否包含特殊字符*/
        if (isSpecialChar(account)) {
            accountInsertDTO.setCode(AccountInsertDTO.ACCOUNT_EXIST_SPECIAL_CHAR);
            return accountInsertDTO;
        }
        /*判断密码是否包含特殊字符*/
        if (isSpecialChar(password)) {
            accountInsertDTO.setCode(AccountInsertDTO.PASSWORD_EXIST_SPECIAL_CHAR);
            return accountInsertDTO;
        }
        /*判断用户名是否超过长度*/
        if (account.length() >= 20||account.length()<=6) {
            accountInsertDTO.setCode(AccountInsertDTO.ACCOUNT_LENGTH_INVALID);
            return accountInsertDTO;
        }
        /*判断密码是否超过长度*/
        if (AESUtils.decrypt(AESPassword, AESKey).length() >= 20||AESUtils.decrypt(AESPassword, AESKey).length() <= 6) {
            accountInsertDTO.setCode(AccountInsertDTO.PASSWORD_LENGTH_INVALID);
            return accountInsertDTO;
        }
        /*判断手机号是否符合规则*/
        if (!isValidMobile(mobile)) {
            accountInsertDTO.setCode(AccountInsertDTO.MOBILE_INVALID);
            return accountInsertDTO;
        }
        /*判断邮箱是否符合规则*/
        if (!isValidEmail(email)) {
            accountInsertDTO.setCode(AccountInsertDTO.EMAIL_INVALID);
            return accountInsertDTO;
        }
        /*判断用户名是否存在*/
        String account = accountInsertForm.getAccount();
        String AESPassword = accountInsertForm.getPassword();
        String password = MD5Utils.saltMD5(AESUtils.decrypt(AESPassword));
        String userName = accountInsertForm.getUserName();
        String email = accountInsertForm.getEmail();
        String mobile = accountInsertForm.getMobile();
        String wechat = accountInsertForm.getWechat();
        List<String> roleIdsStr = accountInsertForm.getRoleIds();
        /*判断账号是否存在*/
        ManageAccount exitAccount = new ManageAccount();
        exitAccount.setAccount(account);
        exitAccount.setIsDelete("0");
        exitAccount.setIsDelete(Constants.NOT_DELETE);
        QueryWrapper<ManageAccount> wrapper = new QueryWrapper<>();
        wrapper.setEntity(exitAccount);
        List<ManageAccount> exitAccounts = manageAccountMapper.selectList(wrapper);
        if (!ObjectUtils.isEmpty(exitAccounts)) {
            accountInsertDTO.setCode(AccountInsertDTO.ACCOUNT_EXIST);
            accountInsertDTO.setCode(ResponseCodeEnum.ACCOUNT_EXIST.getCode());
            accountInsertDTO.setMsg(ResponseCodeEnum.ACCOUNT_EXIST.getMsg());
            return accountInsertDTO;
        }
        //String to Integer
        List<Integer> roleIds = new ArrayList<>();
        roleIdsStr.forEach(str -> roleIds.add(Integer.parseInt(str)));
        //封装account
        ManageAccount manageAccount = new ManageAccount();
@@ -217,9 +182,15 @@
        manageAccount.setEmail(email);
        manageAccount.setMobile(mobile);
        manageAccount.setWechat(wechat);
        manageAccount.setIsDelete(isDelete);
        manageAccountMapper.insert(manageAccount);
        //封装account_role
        /*String to Integer*/
        List<ManageRole> roles = null;
        //如果新建账号没有分配角色则不进行操作
        if (!ObjectUtils.isEmpty(roleIdsStr)) {
            List<Integer> roleIds = new ArrayList<>();
            roleIdsStr.forEach(str -> roleIds.add(Integer.parseInt(str)));
        Integer accountId = manageAccount.getId();
        roleIdsStr.forEach(
                value -> {
@@ -229,11 +200,13 @@
                    manageAccountRoleMapper.insert(manageAccountRole);
                }
        );
            roles = manageRoleMapper.selectBatchIds(roleIds);
        }
        //封装返回结果
        List<ManageRole> roles = manageRoleMapper.selectBatchIds(roleIds);
        accountInsertDTO.setAccount(manageAccount);
        accountInsertDTO.setRoles(roles);
        accountInsertDTO.setCode(AccountInsertDTO.SUCCESS);
        accountInsertDTO.setCode(ResponseCodeEnum.SUCCESS.getCode());
        accountInsertDTO.setMsg(ResponseCodeEnum.SUCCESS.getMsg());
        return accountInsertDTO;
    }
@@ -245,36 +218,56 @@
     * @Date: 2021/3/15
     */
    @Override
    public AccountQueryDTO queryAccount(AccountQueryRequest accountQueryRequest) {
    public AccountQueryDTO queryAccount(AccountQueryForm accountQueryForm) {
        AccountQueryDTO accountQueryDTO = new AccountQueryDTO();
        //取参
        Integer pageCount = accountQueryRequest.getPage();
        Integer size = accountQueryRequest.getSize();
        Integer accountId = accountQueryRequest.getAccountId();
        String account = accountQueryRequest.getAccount();
        String userName = accountQueryRequest.getUserName();
        String email = accountQueryRequest.getEmail();
        String mobile = accountQueryRequest.getMobile();
        String wechat = accountQueryRequest.getWechat();
        String isDelete = accountQueryRequest.getIsDelete();
        //封装查询参数
        Map<String, Object> queryParams = new HashMap<>();
        queryParams.put("id", accountId);
        queryParams.put("account", account);
        queryParams.put("user_name", userName);
        queryParams.put("email", email);
        queryParams.put("mobile", mobile);
        queryParams.put("wechat", wechat);
        queryParams.put("is_delete", isDelete);
        queryParams.values().removeIf(value -> ObjectUtils.isEmpty(value));
        Integer pageCount = accountQueryForm.getPage();
        Integer size = accountQueryForm.getSize();
        Integer accountId = accountQueryForm.getAccountId();
        String account = accountQueryForm.getAccount();
        String userName = accountQueryForm.getUserName();
        String email = accountQueryForm.getEmail();
        String mobile = accountQueryForm.getMobile();
        String wechat = accountQueryForm.getWechat();
        String isDelete = accountQueryForm.getIsDelete();
        //查询用户
        Page<ManageAccount> page = new Page<>(pageCount, size);
        QueryWrapper<ManageAccount> wrapper = new QueryWrapper();
        wrapper.allEq(queryParams);
        if(!ObjectUtils.isEmpty(accountId)){
            wrapper.eq("id",accountId);
        }
        if(!ObjectUtils.isEmpty(userName)){
            wrapper.like("user_name",userName);
        }
        if(!ObjectUtils.isEmpty(account)){
            wrapper.like("account",account);
        }
        if(!ObjectUtils.isEmpty(email)){
            wrapper.like("email",email);
        }
        if(!ObjectUtils.isEmpty(mobile)){
            wrapper.like("mobile",mobile);
        }
        if(!ObjectUtils.isEmpty(wechat)){
            wrapper.like("wechat",wechat);
        }
        if (!ObjectUtils.isEmpty(isDelete))
            wrapper.eq("is_delete", isDelete);
        else
            wrapper.eq("is_delete", Constants.NOT_DELETE);
        Page resultPage = manageAccountMapper.selectPage(page, wrapper);
        //查询用户对应的角色
        List<ManageAccount> accounts = resultPage.getRecords();
        List<AccountDTO> accountDTOS = new ArrayList<>();
        if (!ObjectUtils.isEmpty(accounts)) {
        for (ManageAccount manageAccount : accounts) {
            AccountDTO accountDTO = new AccountDTO();
            List<ManageRole> roles = manageRoleMapper.getManageRoleByAccountId(manageAccount.getId());
@@ -282,48 +275,48 @@
            accountDTO.setAccount(manageAccount);
            accountDTOS.add(accountDTO);
        }
        }
        //封装返回结果
        accountQueryDTO.setAccountDTOS(accountDTOS);
        accountQueryDTO.setCurrent(resultPage.getCurrent());
        accountQueryDTO.setPages(resultPage.getPages());
        accountQueryDTO.setSize(resultPage.getSize());
        accountQueryDTO.setTotal(resultPage.getTotal());
        accountQueryDTO.setCode(ResponseCodeEnum.SUCCESS.getCode());
        accountQueryDTO.setMsg(ResponseCodeEnum.SUCCESS.getMsg());
        return accountQueryDTO;
    }
    /**
     * @Description: 更新后台账号
     * @Param: [accountUpdateRequest]
     * @return: com.moral.api.pojo.dto.account.AccountUpdateDTO
     * @Author: 陈凯裕
     * @Date: 2021/3/16
     */
    @Override
    @Transactional
    public AccountUpdateDTO updateAccount(AccountUpdateRequest accountUpdateRequest) {
    public AccountUpdateDTO updateAccount(AccountUpdateForm accountUpdateForm) {
        AccountUpdateDTO accountUpdateDTO = new AccountUpdateDTO();
        //取参
        Integer accountId = accountUpdateRequest.getAccountId();
        String email = accountUpdateRequest.getEmail();
        String mobile = accountUpdateRequest.getMobile();
        String wechat = accountUpdateRequest.getWechat();
        String isDelete = accountUpdateRequest.getIsDelete();
        String userName = accountUpdateRequest.getUserName();
        List<Integer> roleIds = accountUpdateRequest.getRoleIds();
        Integer accountId = accountUpdateForm.getAccountId();
        String email = accountUpdateForm.getEmail();
        String mobile = accountUpdateForm.getMobile();
        String wechat = accountUpdateForm.getWechat();
        String userName = accountUpdateForm.getUserName();
        List<Integer> roleIds = accountUpdateForm.getRoleIds();
        //校验参数是否符合逻辑
        /*判断要更新的用户是否存在*/
        QueryWrapper<ManageAccount> exitWrapper = new QueryWrapper<>();
        ManageAccount exitManageAccount = new ManageAccount();
        exitManageAccount.setId(accountId);
        exitManageAccount.setIsDelete("0");
        exitManageAccount.setIsDelete(Constants.NOT_DELETE);
        exitWrapper.setEntity(exitManageAccount);
        List<ManageAccount> manageAccounts = manageAccountMapper.selectList(exitWrapper);
        if(ObjectUtils.isEmpty(manageAccounts)){
            accountUpdateDTO.setCode(AccountUpdateDTO.ACCOUNT_NOT_EXIST);
            return accountUpdateDTO;
        }
        /*判断手机号是否符合规则*/
        if (!isValidMobile(mobile)) {
            accountUpdateDTO.setCode(AccountUpdateDTO.MOBILE_INVALID);
            return accountUpdateDTO;
        }
        /*判断邮箱是否符合规则*/
        if (!isValidEmail(email)) {
            accountUpdateDTO.setCode(AccountUpdateDTO.EMAIL_INVALID);
            accountUpdateDTO.setCode(ResponseCodeEnum.ACCOUNT_NOT_EXIST.getCode());
            accountUpdateDTO.setMsg(ResponseCodeEnum.ACCOUNT_NOT_EXIST.getMsg());
            return accountUpdateDTO;
        }
        //更新ManageAccount表
@@ -331,7 +324,6 @@
        manageAccount.setEmail(email);
        manageAccount.setMobile(mobile);
        manageAccount.setWechat(wechat);
        manageAccount.setIsDelete(isDelete);
        manageAccount.setUserName(userName);
        QueryWrapper<ManageAccount> wrapper = new QueryWrapper<>();
        wrapper.eq("id",accountId);
@@ -351,33 +343,56 @@
        //获取用户所有角色
        List<ManageRole> manageRoles = manageRoleMapper.selectBatchIds(roleIds);
        //封装返回结果
        accountUpdateDTO.setCode(AccountUpdateDTO.SUCCESS);
        accountUpdateDTO.setCode(ResponseCodeEnum.SUCCESS.getCode());
        accountUpdateDTO.setMsg(ResponseCodeEnum.SUCCESS.getMsg());
        accountUpdateDTO.setRoles(manageRoles);
        accountUpdateDTO.setAccount(manageAccountMapper.selectById(accountId));
        return accountUpdateDTO;
    }
    private static boolean isSpecialChar(String str) {
        Pattern pattern = Pattern.compile(specialCharRegEx);
        Matcher matcher = pattern.matcher(str);
        return matcher.find();
    /**
     * @Description: 删除后台账号
     * @Param: [accountDeleteRequest]
     * @return: com.moral.api.pojo.dto.account.AccountDeleteDTO
     * @Author: 陈凯裕
     * @Date: 2021/3/16
     */
    @Override
    @Transactional
    public AccountDeleteDTO deleteAccount(AccountDeleteForm accountDeleteForm) {
        AccountDeleteDTO accountDeleteDTO = new AccountDeleteDTO();
        //取参
        Integer accountId = accountDeleteForm.getAccountId();
        //查询是否存在
        ManageAccount manageAccount = new ManageAccount();
        manageAccount.setIsDelete(Constants.NOT_DELETE);
        manageAccount.setId(accountId);
        QueryWrapper<ManageAccount> queryWrapper = new QueryWrapper<>();
        queryWrapper.setEntity(manageAccount);
        ManageAccount existManageAccount = manageAccount.selectOne(queryWrapper);
        if (ObjectUtils.isEmpty(existManageAccount)) {
            accountDeleteDTO.setCode(ResponseCodeEnum.ACCOUNT_NOT_EXIST.getCode());
            accountDeleteDTO.setMsg(ResponseCodeEnum.ACCOUNT_NOT_EXIST.getMsg());
            return accountDeleteDTO;
        }
        //逻辑删除账号
        existManageAccount.setIsDelete(Constants.DELETE);
        UpdateWrapper<ManageAccount> deleteAccountWrapper = new UpdateWrapper<>();
        deleteAccountWrapper.set("is_delete", Constants.DELETE).eq("id", manageAccount.getId());
        manageAccountMapper.update(null, deleteAccountWrapper);
        //逻辑删除账号相关角色
        UpdateWrapper<ManageAccountRole> deleteManageAccountRoleWrapper = new UpdateWrapper<>();
        deleteManageAccountRoleWrapper.set("is_delete", Constants.DELETE).eq("account_id", manageAccount.getId());
        manageAccountRoleMapper.update(null, deleteManageAccountRoleWrapper);
        //封装返回结果
        accountDeleteDTO.setCode(ResponseCodeEnum.SUCCESS.getCode());
        accountDeleteDTO.setMsg(ResponseCodeEnum.SUCCESS.getMsg());
        accountDeleteDTO.setAccount(existManageAccount);
        return accountDeleteDTO;
    }
    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/java/com/moral/api/service/impl/ManageRoleServiceImpl.java
@@ -6,6 +6,7 @@
import com.moral.api.mapper.ManageRoleMenuMapper;
import com.moral.api.service.ManageRoleService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.moral.constant.Constants;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.StringUtils;
@@ -123,7 +124,7 @@
        }else {
            ManageRole manageRole = new ManageRole();
            manageRole.setId(Integer.parseInt(map.get("id").toString()));
            manageRole.setIsDelete("1");
            manageRole.setIsDelete(Constants.DELETE);
            Map deleteMap = new HashMap();
            deleteMap.put("id",Integer.parseInt(map.get("id").toString()));
            deleteMap.put("is_delete",1);
screen-manage/src/main/resources/application-dev.yml
@@ -121,6 +121,8 @@
      - /account/insert
      - /account/query
      - /account/update
      - /account/delete
      - /account/yanzhengma
AES:
  KEY:
    AD42F7787B035B7580000EF93BE20BAD
screen-manage/src/main/resources/mapper/ManageMenuMapper.xml
@@ -69,6 +69,7 @@
    <!--根据角色查询父子结构的菜单-->
    <select id="getParentChildrenMenusByRoles" resultMap="ParentChildrenResultMap">
        select
        DISTINCT
        <include refid="Base_Column_List"></include>
        from
        manage_menu mm