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