From 105b9453bfe900a5abc5a02591f3d808dd2b6f77 Mon Sep 17 00:00:00 2001 From: DB <2502523450@qq.com> Date: Tue, 24 Oct 2023 23:19:18 +0800 Subject: [PATCH] =?UTF-8?q?=E5=B0=8F=E7=A8=8B=E5=BA=8F=E7=99=BB=E9=99=86;?= =?UTF-8?q?=E5=95=86=E5=9F=8E=E8=AE=A2=E5=8D=95;=E8=AE=A2=E5=8D=95?= =?UTF-8?q?=E8=AF=A6=E6=83=85;=E9=80=80=E6=AC=BE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../abstracts/AbstractLoginInfoBuild.java | 6 +- .../entity/loginInfo/MiniUserLoginInfo.java | 52 +++++++ .../core/filter/JwtAuthenticationFilter.java | 30 +++- .../MiniProgramAuthenticationFilter.java | 24 ++- .../MiniProgramAuthenticationProvider.java | 17 +- .../miniProgram/MiniUserLoginInfoBuild.java | 80 ++++++++++ .../sys/SysAuthenticationProvider.java | 2 +- .../core/gateway/sys/SysLoginInfoBuild.java | 3 +- .../core/handler/GlobalExceptionHandler.java | 59 +++---- .../core/handler/LoginSuccessHandler.java | 4 +- .../java/com/cpop/core/mapper/CoreMapper.java | 11 +- .../com/cpop/core/service/CoreService.java | 25 ++- .../core/service/impl/CoreServiceImpl.java | 66 ++++++-- .../impl/OamStaffDetailsServiceImpl.java | 2 +- .../src/main/resources/mapper/CoreMapper.xml | 29 +++- .../src/main/resources/application-prod.yml | 15 +- .../src/main/resources/application-test.yml | 9 ++ Cpop-Mall/pom.xml | 4 + .../cpop/mall/business/bo/OrderPageBo.java | 37 +++++ .../mall/business/bo/OrderRejectRefundBo.java | 34 ++++ .../cpop/mall/business/bo/ProductPageBo.java | 6 + .../backstage/BackstageOrderController.java | 54 +++++++ .../BackstageOrderRefundController.java | 65 ++++++++ .../mini/MiniProductController.java | 146 ++++++++++++++++++ .../com/cpop/mall/business/entity/Order.java | 114 ++++++++++++++ .../mall/business/entity/OrderDetail.java | 59 +++++++ .../mall/business/entity/OrderRefund.java | 67 ++++++++ .../business/mapper/OrderDetailMapper.java | 14 ++ .../mall/business/mapper/OrderMapper.java | 14 ++ .../business/mapper/OrderRefundMapper.java | 14 ++ .../business/service/OrderDetailService.java | 14 ++ .../business/service/OrderRefundService.java | 32 ++++ .../mall/business/service/OrderService.java | 25 +++ .../service/impl/OrderDetailServiceImpl.java | 18 +++ .../service/impl/OrderRefundServiceImpl.java | 49 ++++++ .../service/impl/OrderServiceImpl.java | 54 +++++++ .../service/impl/ProductServiceImpl.java | 4 +- .../cpop/mall/business/vo/OrderDetailVo.java | 44 ++++++ .../cpop/mall/business/vo/OrderPageVo.java | 119 ++++++++++++++ .../resources/mapper/OrderDetailMapper.xml | 7 + .../src/main/resources/mapper/OrderMapper.xml | 7 + .../resources/mapper/OrderRefundMapper.xml | 7 + Cpop-Mini/pom.xml | 24 +++ .../cpop/mini/business/entity/MiniUser.java | 72 +++++++++ .../mini/business/mapper/MiniUserMapper.java | 14 ++ .../business/service/MiniUserService.java | 14 ++ .../service/impl/MiniUserServiceImpl.java | 18 +++ .../src/main/resources/application-mini.yml | 1 + .../main/resources/mapper/MiniUserMapper.xml | 7 + .../java/com/cpop/oam/web/CpopCoreTests.java | 2 +- Cpop-System/pom.xml | 1 + pom.xml | 8 +- 52 files changed, 1532 insertions(+), 71 deletions(-) create mode 100644 Cpop-Core/src/main/java/com/cpop/core/base/entity/loginInfo/MiniUserLoginInfo.java create mode 100644 Cpop-Core/src/main/java/com/cpop/core/gateway/miniProgram/MiniUserLoginInfoBuild.java create mode 100644 Cpop-Mall/src/main/java/com/cpop/mall/business/bo/OrderPageBo.java create mode 100644 Cpop-Mall/src/main/java/com/cpop/mall/business/bo/OrderRejectRefundBo.java create mode 100644 Cpop-Mall/src/main/java/com/cpop/mall/business/controller/backstage/BackstageOrderController.java create mode 100644 Cpop-Mall/src/main/java/com/cpop/mall/business/controller/backstage/BackstageOrderRefundController.java create mode 100644 Cpop-Mall/src/main/java/com/cpop/mall/business/controller/mini/MiniProductController.java create mode 100644 Cpop-Mall/src/main/java/com/cpop/mall/business/entity/Order.java create mode 100644 Cpop-Mall/src/main/java/com/cpop/mall/business/entity/OrderDetail.java create mode 100644 Cpop-Mall/src/main/java/com/cpop/mall/business/entity/OrderRefund.java create mode 100644 Cpop-Mall/src/main/java/com/cpop/mall/business/mapper/OrderDetailMapper.java create mode 100644 Cpop-Mall/src/main/java/com/cpop/mall/business/mapper/OrderMapper.java create mode 100644 Cpop-Mall/src/main/java/com/cpop/mall/business/mapper/OrderRefundMapper.java create mode 100644 Cpop-Mall/src/main/java/com/cpop/mall/business/service/OrderDetailService.java create mode 100644 Cpop-Mall/src/main/java/com/cpop/mall/business/service/OrderRefundService.java create mode 100644 Cpop-Mall/src/main/java/com/cpop/mall/business/service/OrderService.java create mode 100644 Cpop-Mall/src/main/java/com/cpop/mall/business/service/impl/OrderDetailServiceImpl.java create mode 100644 Cpop-Mall/src/main/java/com/cpop/mall/business/service/impl/OrderRefundServiceImpl.java create mode 100644 Cpop-Mall/src/main/java/com/cpop/mall/business/service/impl/OrderServiceImpl.java create mode 100644 Cpop-Mall/src/main/java/com/cpop/mall/business/vo/OrderDetailVo.java create mode 100644 Cpop-Mall/src/main/java/com/cpop/mall/business/vo/OrderPageVo.java create mode 100644 Cpop-Mall/src/main/resources/mapper/OrderDetailMapper.xml create mode 100644 Cpop-Mall/src/main/resources/mapper/OrderMapper.xml create mode 100644 Cpop-Mall/src/main/resources/mapper/OrderRefundMapper.xml create mode 100644 Cpop-Mini/pom.xml create mode 100644 Cpop-Mini/src/main/java/com/cpop/mini/business/entity/MiniUser.java create mode 100644 Cpop-Mini/src/main/java/com/cpop/mini/business/mapper/MiniUserMapper.java create mode 100644 Cpop-Mini/src/main/java/com/cpop/mini/business/service/MiniUserService.java create mode 100644 Cpop-Mini/src/main/java/com/cpop/mini/business/service/impl/MiniUserServiceImpl.java create mode 100644 Cpop-Mini/src/main/resources/application-mini.yml create mode 100644 Cpop-Mini/src/main/resources/mapper/MiniUserMapper.xml diff --git a/Cpop-Core/src/main/java/com/cpop/core/abstracts/AbstractLoginInfoBuild.java b/Cpop-Core/src/main/java/com/cpop/core/abstracts/AbstractLoginInfoBuild.java index 9853571..5a98869 100644 --- a/Cpop-Core/src/main/java/com/cpop/core/abstracts/AbstractLoginInfoBuild.java +++ b/Cpop-Core/src/main/java/com/cpop/core/abstracts/AbstractLoginInfoBuild.java @@ -3,8 +3,10 @@ package com.cpop.core.abstracts; import com.cpop.core.base.entity.LoginUser; import com.cpop.core.base.enums.UserType; import com.cpop.core.base.table.SysUser; +import com.cpop.core.gateway.miniProgram.MiniUserLoginInfoBuild; import com.cpop.core.gateway.sys.SysLoginInfoBuild; +import java.util.Map; import java.util.Set; /** @@ -29,7 +31,7 @@ public abstract class AbstractLoginInfoBuild { return new SysLoginInfoBuild(); //小程序用户 case MINI_USER: - return new SysLoginInfoBuild(); + return new MiniUserLoginInfoBuild(); default: return new SysLoginInfoBuild(); } @@ -38,6 +40,6 @@ public abstract class AbstractLoginInfoBuild { /** * 构建用户 */ - public abstract LoginUser buildLoginUser(SysUser user); + public abstract LoginUser buildLoginUser(SysUser user, Map credentials); } diff --git a/Cpop-Core/src/main/java/com/cpop/core/base/entity/loginInfo/MiniUserLoginInfo.java b/Cpop-Core/src/main/java/com/cpop/core/base/entity/loginInfo/MiniUserLoginInfo.java new file mode 100644 index 0000000..364ad30 --- /dev/null +++ b/Cpop-Core/src/main/java/com/cpop/core/base/entity/loginInfo/MiniUserLoginInfo.java @@ -0,0 +1,52 @@ +package com.cpop.core.base.entity.loginInfo; + +import com.cpop.core.base.table.SysUser; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.experimental.Accessors; + +/** + * @author DB + * @createTime 2023/10/24 9:16 + * @description 小程序登陆用户信息 + */ +@Data +@Accessors(chain = true) +@EqualsAndHashCode(callSuper = true) +public class MiniUserLoginInfo extends SysUser { + + /** + * 小程序用户id + */ + private String id; + + /** + * 小程序openId + */ + private String openId; + + /** + * 小程序appid + */ + private String appId; + + /** + * 用户id + */ + private String userId; + + /** + * 品牌id + */ + private String brandId; + + /** + * 昵称 + */ + private String nickName; + + /** + * 头像 + */ + private String avatar; +} diff --git a/Cpop-Core/src/main/java/com/cpop/core/filter/JwtAuthenticationFilter.java b/Cpop-Core/src/main/java/com/cpop/core/filter/JwtAuthenticationFilter.java index ffc8358..bdd6b4b 100644 --- a/Cpop-Core/src/main/java/com/cpop/core/filter/JwtAuthenticationFilter.java +++ b/Cpop-Core/src/main/java/com/cpop/core/filter/JwtAuthenticationFilter.java @@ -4,6 +4,7 @@ import com.alibaba.fastjson.JSONObject; import com.cpop.common.constant.Constants; import com.cpop.common.utils.StringUtils; import com.cpop.common.utils.ip.IpUtils; +import com.cpop.core.base.R; import com.cpop.core.base.entity.LoginUser; import com.cpop.core.base.enums.UserType; import com.cpop.core.gateway.miniProgram.MiniProgramAuthenticationToken; @@ -23,9 +24,11 @@ import org.springframework.web.filter.OncePerRequestFilter; import javax.servlet.FilterChain; import javax.servlet.ServletException; +import javax.servlet.ServletOutputStream; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; +import java.nio.charset.StandardCharsets; /** * @author: DB @@ -57,12 +60,18 @@ public class JwtAuthenticationFilter extends OncePerRequestFilter { return; } Jws jws = jwtUtils.getClaimsByToken(jwt); + if (jws == null) { + returnJwtException(response,"token 失效"); + return; + } Claims claim = jws.getBody(); if (claim == null) { - throw new JwtException("token 异常"); + returnJwtException(response,"token 异常"); + return; } if (jwtUtils.isTokenExpired(claim)) { - throw new JwtException("token 已过期"); + returnJwtException(response,"token 已过期"); + return; } String username = claim.getSubject(); UserType userType = UserType.valueOf(jws.getHeader().get(Constants.USER_TYPE).toString()); @@ -82,6 +91,21 @@ public class JwtAuthenticationFilter extends OncePerRequestFilter { chain.doFilter(request, response); } + /** + * jwt异常直接返回 + * @param response 响应 + * @param msg 错误信息 + */ + private void returnJwtException(HttpServletResponse response,String msg) throws IOException { + response.setContentType("application/json;charset=UTF-8"); + response.setStatus(HttpServletResponse.SC_OK); + ServletOutputStream outputStream = response.getOutputStream(); + R result = R.fail(401, msg); + outputStream.write(JSONObject.toJSONString(result).getBytes(StandardCharsets.UTF_8)); + outputStream.flush(); + outputStream.close(); + } + /** * @descriptions 多种获取用户信息 * @author DB @@ -101,7 +125,7 @@ public class JwtAuthenticationFilter extends OncePerRequestFilter { case MINI_USER: break; case MALL_USER: - loginUser = coreService.loadUser(username, userType); + loginUser = coreService.loadUserByUsername(username, userType); default: } return loginUser; diff --git a/Cpop-Core/src/main/java/com/cpop/core/gateway/miniProgram/MiniProgramAuthenticationFilter.java b/Cpop-Core/src/main/java/com/cpop/core/gateway/miniProgram/MiniProgramAuthenticationFilter.java index f6e9451..f320527 100644 --- a/Cpop-Core/src/main/java/com/cpop/core/gateway/miniProgram/MiniProgramAuthenticationFilter.java +++ b/Cpop-Core/src/main/java/com/cpop/core/gateway/miniProgram/MiniProgramAuthenticationFilter.java @@ -1,5 +1,6 @@ package com.cpop.core.gateway.miniProgram; +import com.cpop.core.base.enums.UserType; import com.fasterxml.jackson.databind.ObjectMapper; import org.springframework.security.authentication.AbstractAuthenticationToken; import org.springframework.security.authentication.AuthenticationServiceException; @@ -12,6 +13,7 @@ import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.io.InputStream; +import java.util.HashMap; import java.util.Map; /** @@ -40,10 +42,24 @@ public class MiniProgramAuthenticationFilter extends AbstractAuthenticationProce } catch (IOException e) { throw new RuntimeException(e); } - String username = (String) authenticationBean.get("username"); - String password = (String) authenticationBean.get("password"); - username = username.trim(); - MiniProgramAuthenticationToken authRequest = new MiniProgramAuthenticationToken(username, password); + String principal = (String) authenticationBean.get("phone"); + + String openId = (String) authenticationBean.get("openId"); + String appId = (String) authenticationBean.get("appId"); + String brandId = (String) authenticationBean.get("brandId"); + String nickName = (String) authenticationBean.get("nickName"); + String avatar = (String) authenticationBean.get("avatar"); + UserType userType = UserType.valueOf(authenticationBean.get("userType").toString()); + //传递信息 + HashMap credentials = new HashMap<>(2); + credentials.put("appId", appId); + credentials.put("openId", openId); + credentials.put("userType", userType); + credentials.put("brandId", brandId); + credentials.put("nickName", nickName); + credentials.put("avatar", avatar); + principal = principal.trim(); + MiniProgramAuthenticationToken authRequest = new MiniProgramAuthenticationToken(principal, credentials); this.setDetails(request, authRequest); return this.getAuthenticationManager().authenticate(authRequest); } diff --git a/Cpop-Core/src/main/java/com/cpop/core/gateway/miniProgram/MiniProgramAuthenticationProvider.java b/Cpop-Core/src/main/java/com/cpop/core/gateway/miniProgram/MiniProgramAuthenticationProvider.java index ef15272..1948b95 100644 --- a/Cpop-Core/src/main/java/com/cpop/core/gateway/miniProgram/MiniProgramAuthenticationProvider.java +++ b/Cpop-Core/src/main/java/com/cpop/core/gateway/miniProgram/MiniProgramAuthenticationProvider.java @@ -2,10 +2,14 @@ package com.cpop.core.gateway.miniProgram; import com.cpop.core.base.entity.LoginUser; import com.cpop.core.base.enums.UserType; +import com.cpop.core.service.CoreService; +import com.cpop.core.utils.SpringUtils; import org.springframework.security.authentication.AuthenticationProvider; import org.springframework.security.core.Authentication; import org.springframework.security.core.AuthenticationException; +import java.util.Map; + /** * @author DB * @Description: 自定义校验过程 @@ -16,14 +20,13 @@ public class MiniProgramAuthenticationProvider implements AuthenticationProvider @Override public Authentication authenticate(Authentication authentication) throws AuthenticationException { // 这个获取表单输入中返回的用户名; - String username = authentication.getName(); + String phone =(String) authentication.getPrincipal(); // 这个是表单中输入的密码; - String password = (String)authentication.getCredentials(); - //TODO:此处添加小程序认证失败返回 throw new RockBladeAuthenticationException("测试抛异常", UserType.MINI_USER); - //设置用户详情 - LoginUser loginUser = new LoginUser(); - loginUser.setUserName(username).setUserType(UserType.MINI_USER); - MiniProgramAuthenticationToken result = new MiniProgramAuthenticationToken(username, loginUser); + Map credentials = (Map) authentication.getCredentials(); + UserType userType = (UserType) credentials.get("userType"); + LoginUser loginUser = SpringUtils.getBean(CoreService.class).loadUserByPhone(phone, userType, credentials); + loginUser.setUserType(UserType.MINI_USER); + MiniProgramAuthenticationToken result = new MiniProgramAuthenticationToken(phone, loginUser); result.setDetails(loginUser); return result; } diff --git a/Cpop-Core/src/main/java/com/cpop/core/gateway/miniProgram/MiniUserLoginInfoBuild.java b/Cpop-Core/src/main/java/com/cpop/core/gateway/miniProgram/MiniUserLoginInfoBuild.java new file mode 100644 index 0000000..6d60c35 --- /dev/null +++ b/Cpop-Core/src/main/java/com/cpop/core/gateway/miniProgram/MiniUserLoginInfoBuild.java @@ -0,0 +1,80 @@ +package com.cpop.core.gateway.miniProgram; + +import com.cpop.common.constant.Constants; +import com.cpop.common.utils.bean.BeanUtils; +import com.cpop.core.abstracts.AbstractLoginInfoBuild; +import com.cpop.core.base.entity.LoginUser; +import com.cpop.core.base.entity.loginInfo.MiniUserLoginInfo; +import com.cpop.core.base.exception.CpopAuthenticationException; +import com.cpop.core.base.table.SysUser; +import com.mybatisflex.annotation.KeyType; +import com.mybatisflex.core.row.DbChain; +import com.mybatisflex.core.row.Row; +import com.mybatisflex.core.row.RowKey; + +import java.time.LocalDateTime; +import java.util.Map; + +/** + * @author DB + * @createTime 2023/10/24 11:09 + * @description + */ +public class MiniUserLoginInfoBuild extends AbstractLoginInfoBuild { + + /** + * 构建登陆小程序用户信息 + * @param user 系统用户 + * @return 登陆用户 + */ + @Override + public LoginUser buildLoginUser(SysUser user, Map credentials) { + return getMiniUserInfo(user, credentials); + } + + private LoginUser getMiniUserInfo(SysUser sysUser, Map credentials) { + MiniUserLoginInfo loginInfo = BeanUtils.mapToClass(sysUser, MiniUserLoginInfo.class); + loginInfo.setUserId(sysUser.getId()); + //构建用户信息 + Row row = DbChain.table("cp_mini_user") + .select("id","open_id","app_id","user_id","brand_id","nick_name","avatar") + .from("cp_mini_user") + .where("user_id = ?", loginInfo.getUserId()) + .and("brand_id = ?",credentials.get("brandId")) + .and("app_id = ?",credentials.get("appId")) + .and("open_id = ?",credentials.get("openId")) + .and("is_delete = 0") + .one(); + if (row == null) { + //保存小程序用户信息 + LocalDateTime now = LocalDateTime.now(); + DbChain.table("cp_mini_user") + .setId(RowKey.SNOW_FLAKE_ID) + .set("user_id", loginInfo.getUserId()) + .set("open_id", credentials.get("openId")) + .set("app_id", credentials.get("appId")) + .set("brand_id", credentials.get("brandId")) + .set("nick_name", credentials.get("nickName")) + .set("avatar", credentials.get("avatar")) + .set("create_time", now) + .set("update_time", now) + .set("create_user_id", 1) + .set("update_user_id", 1) + .save(); + loginInfo.setOpenId((String) credentials.get("openId")) + .setAppId((String) credentials.get("appId")) + .setUserId(loginInfo.getUserId()) + .setBrandId((String) credentials.get("brandId")) + .setNickName((String) credentials.get("nickName")) + .setAvatar((String) credentials.get("avatar")); + } else { + loginInfo.setOpenId(row.getString("openId")) + .setAppId(row.getString("appId")) + .setUserId(row.getString("userId")) + .setBrandId(row.getString("brandId")) + .setNickName(row.getString("nickName")) + .setAvatar(row.getString("avatar")); + } + return new LoginUser(loginInfo, null); + } +} diff --git a/Cpop-Core/src/main/java/com/cpop/core/gateway/sys/SysAuthenticationProvider.java b/Cpop-Core/src/main/java/com/cpop/core/gateway/sys/SysAuthenticationProvider.java index d1cab99..f13cd65 100644 --- a/Cpop-Core/src/main/java/com/cpop/core/gateway/sys/SysAuthenticationProvider.java +++ b/Cpop-Core/src/main/java/com/cpop/core/gateway/sys/SysAuthenticationProvider.java @@ -28,7 +28,7 @@ public class SysAuthenticationProvider implements AuthenticationProvider { Map credentials = (Map) authentication.getCredentials(); UserType userType = (UserType) credentials.get("userType"); //认证用户名密码 - LoginUser loginUser = SpringUtils.getBean(CoreService.class).loadUser(principal, userType); + LoginUser loginUser = SpringUtils.getBean(CoreService.class).loadUserByUsername(principal, userType); //账号密码校验 SpringUtils.getBean(PasswordEncoder.class).matches((String) credentials.get("password"), loginUser.getUser().getPassword()); SysAuthenticationToken result = new SysAuthenticationToken(principal, loginUser); diff --git a/Cpop-Core/src/main/java/com/cpop/core/gateway/sys/SysLoginInfoBuild.java b/Cpop-Core/src/main/java/com/cpop/core/gateway/sys/SysLoginInfoBuild.java index a20cd7f..1a828b4 100644 --- a/Cpop-Core/src/main/java/com/cpop/core/gateway/sys/SysLoginInfoBuild.java +++ b/Cpop-Core/src/main/java/com/cpop/core/gateway/sys/SysLoginInfoBuild.java @@ -15,6 +15,7 @@ import com.mybatisflex.core.row.RowUtil; import java.util.HashSet; import java.util.List; +import java.util.Map; import java.util.Set; import java.util.stream.Collectors; @@ -26,7 +27,7 @@ import java.util.stream.Collectors; public class SysLoginInfoBuild extends AbstractLoginInfoBuild { @Override - public LoginUser buildLoginUser(SysUser sysUser) { + public LoginUser buildLoginUser(SysUser sysUser, Map credentials) { switch (sysUser.getUserType()) { case OAM_USER: return getOamStaffLoginInfo(sysUser); diff --git a/Cpop-Core/src/main/java/com/cpop/core/handler/GlobalExceptionHandler.java b/Cpop-Core/src/main/java/com/cpop/core/handler/GlobalExceptionHandler.java index 2ba867c..635bc5c 100644 --- a/Cpop-Core/src/main/java/com/cpop/core/handler/GlobalExceptionHandler.java +++ b/Cpop-Core/src/main/java/com/cpop/core/handler/GlobalExceptionHandler.java @@ -3,6 +3,7 @@ package com.cpop.core.handler; import com.cpop.core.base.R; import com.cpop.core.base.exception.ServiceException; import com.cpop.common.enums.ErrorCodeEnum; +import io.jsonwebtoken.JwtException; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.security.access.AccessDeniedException; @@ -34,6 +35,15 @@ public class GlobalExceptionHandler { return null != code ? R.fail(code, e.getMessage()) : R.fail(e.getMessage()); } + /** + * 权限不足 + * @param e 权限不足异常 + */ + @ExceptionHandler(AccessDeniedException.class) + public R handleException(AccessDeniedException e) { + return R.fail(ErrorCodeEnum.HTTP_401.getInfo()); + } + /** * 拦截未知的运行时异常 * @param e @@ -47,6 +57,26 @@ public class GlobalExceptionHandler { return R.fail(e.getMessage()); } + /** + * 自定义验证异常 + */ + @ExceptionHandler(MethodArgumentNotValidException.class) + public R handleMethodArgumentNotValidException(MethodArgumentNotValidException e) { + log.error(e.getMessage(), e); + String message = Objects.requireNonNull(e.getBindingResult().getFieldError()).getDefaultMessage(); + return R.fail(message); + } + + /** + * 自定义验证异常 + */ + @ExceptionHandler(BindException.class) + public R handleBindException(BindException e) { + log.error(e.getMessage(), e); + String message = e.getAllErrors().get(0).getDefaultMessage(); + return R.fail(message); + } + /** * 系统异常 * @param e @@ -60,34 +90,5 @@ public class GlobalExceptionHandler { return R.fail(e.getMessage()); } - /** - * 权限不足 - * @param e 权限不足异常 - */ - @ExceptionHandler(AccessDeniedException.class) - public R handleException(AccessDeniedException e) { - return R.fail(ErrorCodeEnum.HTTP_401.getInfo()); - } - - /** - * 自定义验证异常 - */ - @ExceptionHandler(BindException.class) - public R handleBindException(BindException e) { - log.error(e.getMessage(), e); - String message = e.getAllErrors().get(0).getDefaultMessage(); - return R.fail(message); - } - - /** - * 自定义验证异常 - */ - @ExceptionHandler(MethodArgumentNotValidException.class) - public R handleMethodArgumentNotValidException(MethodArgumentNotValidException e) { - log.error(e.getMessage(), e); - String message = Objects.requireNonNull(e.getBindingResult().getFieldError()).getDefaultMessage(); - return R.fail(message); - } - //TODO:可以自行后续拓展 } diff --git a/Cpop-Core/src/main/java/com/cpop/core/handler/LoginSuccessHandler.java b/Cpop-Core/src/main/java/com/cpop/core/handler/LoginSuccessHandler.java index 686850e..1391e2c 100644 --- a/Cpop-Core/src/main/java/com/cpop/core/handler/LoginSuccessHandler.java +++ b/Cpop-Core/src/main/java/com/cpop/core/handler/LoginSuccessHandler.java @@ -6,6 +6,7 @@ import com.cpop.common.utils.ip.IpUtils; import com.cpop.core.base.R; import com.cpop.core.base.entity.LoginSuccess; import com.cpop.core.base.entity.LoginUser; +import com.cpop.core.base.entity.loginInfo.MiniUserLoginInfo; import com.cpop.core.base.enums.OperationLogEnum; import com.cpop.core.service.CoreService; import com.cpop.core.service.RedisService; @@ -82,7 +83,8 @@ public class LoginSuccessHandler implements AuthenticationSuccessHandler { break; case MINI_USER: //将登录成功用户存入缓存 - redisService.setCacheObject(loginUser.getUserType().getKey() + loginUser.getUsername(), loginUser); + MiniUserLoginInfo user = (MiniUserLoginInfo) loginUser.getUser(); + redisService.setCacheObject(loginUser.getUserType().getKey() + user.getBrandId() + "-" + user.getAppId() + "-" + user.getOpenId(), loginUser); break; default: } diff --git a/Cpop-Core/src/main/java/com/cpop/core/mapper/CoreMapper.java b/Cpop-Core/src/main/java/com/cpop/core/mapper/CoreMapper.java index 5bb9e86..e083c5e 100644 --- a/Cpop-Core/src/main/java/com/cpop/core/mapper/CoreMapper.java +++ b/Cpop-Core/src/main/java/com/cpop/core/mapper/CoreMapper.java @@ -32,7 +32,7 @@ public interface CoreMapper { * @Author DB * @Date: 2023/8/27 23:39 */ - SysUser getSysUser(@Param("username") String username, @Param("userType") UserType userType); + SysUser getSysUserByUsername(@Param("username") String username, @Param("userType") UserType userType); /** * @Description: 更新登录地址 @@ -121,4 +121,13 @@ public interface CoreMapper { * @param id 主键 */ void removeSysUserById(String id); + + /** + * @Description: 根据用户名获取用户信息 + * @param phoneNumber 手机号 + * @return SysUser + * @Author: DB + * @Date: 2023/8/27 23:37 + */ + SysUser getSysUserByPhone(@Param("phoneNumber") String phoneNumber, @Param("userType") UserType userType); } diff --git a/Cpop-Core/src/main/java/com/cpop/core/service/CoreService.java b/Cpop-Core/src/main/java/com/cpop/core/service/CoreService.java index 618e663..f58bc20 100644 --- a/Cpop-Core/src/main/java/com/cpop/core/service/CoreService.java +++ b/Cpop-Core/src/main/java/com/cpop/core/service/CoreService.java @@ -8,6 +8,8 @@ import com.cpop.core.base.table.SysOperationLog; import com.cpop.core.base.table.SysUser; import org.springframework.security.core.userdetails.UserDetails; +import java.util.Map; + /** * @author DB * @Description: @@ -42,7 +44,7 @@ public interface CoreService { * @Author: DB * @Date: 2023/8/27 23:37 */ - SysUser getSysUser(String username, UserType userType); + SysUser getSysUserByUsername(String username, UserType userType); /** * @Description: 更新登录地址 @@ -118,5 +120,24 @@ public interface CoreService { * @param userType 用户类型 * @return 登陆用户 */ - LoginUser loadUser(String userName, UserType userType); + LoginUser loadUserByUsername(String userName, UserType userType); + + /** + * @descriptions 根据手机号与用户类型获取用户信息 + * @author DB + * @date 2023/10/19 9:57 + * @param phoneNumber 手机号 + * @param userType 用户类型 + * @return 登陆用户 + */ + LoginUser loadUserByPhone(String phoneNumber, UserType userType, Map credentials); + + /** + * @Description: 根据用户名获取用户信息 + * @param phoneNumber 手机号 + * @return SysUser + * @Author: DB + * @Date: 2023/8/27 23:37 + */ + SysUser getSysUserByPhone(String phoneNumber, UserType userType); } diff --git a/Cpop-Core/src/main/java/com/cpop/core/service/impl/CoreServiceImpl.java b/Cpop-Core/src/main/java/com/cpop/core/service/impl/CoreServiceImpl.java index 28ef615..5250860 100644 --- a/Cpop-Core/src/main/java/com/cpop/core/service/impl/CoreServiceImpl.java +++ b/Cpop-Core/src/main/java/com/cpop/core/service/impl/CoreServiceImpl.java @@ -24,10 +24,7 @@ import org.springframework.security.core.userdetails.UsernameNotFoundException; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; -import java.util.Arrays; -import java.util.HashSet; -import java.util.List; -import java.util.Set; +import java.util.*; import java.util.stream.Collectors; /** @@ -101,8 +98,8 @@ public class CoreServiceImpl implements CoreService { * @Date: 2023/8/27 23:37 */ @Override - public SysUser getSysUser(String username, UserType userType) { - return coreMapper.getSysUser(username, userType); + public SysUser getSysUserByUsername(String username, UserType userType) { + return coreMapper.getSysUserByUsername(username, userType); } /** @@ -214,15 +211,15 @@ public class CoreServiceImpl implements CoreService { * @return 登陆用户 */ @Override - public LoginUser loadUser(String username, UserType userType) { + public LoginUser loadUserByUsername(String username, UserType userType) { //统一获取系统用户信息 - SysUser sysUser = this.getSysUser(username, userType); + SysUser sysUser = this.getSysUserByUsername(username, userType); if (sysUser == null) { throw new UsernameNotFoundException(MessageUtils.message("i18n_alert_accountOrPwdError")); } //构建登陆用户信息 AbstractLoginInfoBuild instance = AbstractLoginInfoBuild.getInstance(userType); - LoginUser loginUser = instance.buildLoginUser(sysUser); + LoginUser loginUser = instance.buildLoginUser(sysUser, null); loginUser.setUserId(sysUser.getId()) .setUserType(userType) .setUserName(username) @@ -230,4 +227,55 @@ public class CoreServiceImpl implements CoreService { .setStatus(sysUser.getStatus()); return loginUser; } + + /** + * @descriptions 根据手机号与用户类型获取用户信息 + * @author DB + * @date 2023/10/19 9:57 + * @param phoneNumber 手机号 + * @param userType 用户类型 + * @return 登陆用户 + */ + @Override + public LoginUser loadUserByPhone(String phoneNumber, UserType userType, Map credentials) { + //统一获取系统用户信息 + SysUser sysUser = this.getSysUserByPhone(phoneNumber, userType); + if (sysUser == null) { + //如果是小程序自动注册用户信息 + if (userType == UserType.MINI_USER) { + sysUser = new SysUser(); + sysUser.setId(IdUtils.fastSimpleUUID()) + .setUserName(phoneNumber) + .setPhoneNumber(phoneNumber) + .setStatus(true) + .setUserType(userType) + .setCreateUserId("1"); + sysUser.setUpdateUserId("1"); + this.coreMapper.insertSysUser(sysUser); + } else { + throw new UsernameNotFoundException("获取用户信息失败"); + } + } + //构建登陆用户信息 + AbstractLoginInfoBuild instance = AbstractLoginInfoBuild.getInstance(userType); + LoginUser loginUser = instance.buildLoginUser(sysUser, credentials); + loginUser.setUserId(sysUser.getId()) + .setUserType(userType) + .setUserName(sysUser.getUserName()) + .setLoginTime(System.currentTimeMillis()) + .setStatus(sysUser.getStatus()); + return loginUser; + } + + /** + * @Description: 根据用户名获取用户信息 + * @param phoneNumber 手机号 + * @return SysUser + * @Author: DB + * @Date: 2023/8/27 23:37 + */ + @Override + public SysUser getSysUserByPhone(String phoneNumber, UserType userType) { + return coreMapper.getSysUserByPhone(phoneNumber, userType); + } } diff --git a/Cpop-Core/src/main/java/com/cpop/core/service/impl/OamStaffDetailsServiceImpl.java b/Cpop-Core/src/main/java/com/cpop/core/service/impl/OamStaffDetailsServiceImpl.java index 69cdc08..336a71b 100644 --- a/Cpop-Core/src/main/java/com/cpop/core/service/impl/OamStaffDetailsServiceImpl.java +++ b/Cpop-Core/src/main/java/com/cpop/core/service/impl/OamStaffDetailsServiceImpl.java @@ -44,7 +44,7 @@ public class OamStaffDetailsServiceImpl implements UserDetailsService { @Override public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException { //统一获取系统用户信息 - SysUser sysUser = coreService.getSysUser(username, UserType.OAM_USER); + SysUser sysUser = coreService.getSysUserByUsername(username, UserType.OAM_USER); if (sysUser == null) { throw new UsernameNotFoundException(MessageUtils.message("i18n_alert_accountOrPwdError")); } diff --git a/Cpop-Core/src/main/resources/mapper/CoreMapper.xml b/Cpop-Core/src/main/resources/mapper/CoreMapper.xml index 3e0dafe..587ecfe 100644 --- a/Cpop-Core/src/main/resources/mapper/CoreMapper.xml +++ b/Cpop-Core/src/main/resources/mapper/CoreMapper.xml @@ -28,7 +28,7 @@ - SELECT id, user_name AS userName, @@ -57,6 +57,33 @@ + + +