From fed531a1ef6ed1db4eca448a6437353e611c603b Mon Sep 17 00:00:00 2001 From: zzs <hi@vio.vin> Date: Tue, 14 Jan 2025 15:21:43 +0800 Subject: [PATCH] feat:yunzhijia openid login --- .../system/enums/ErrorCodeConstants.java | 1 + .../controller/admin/auth/AuthController.java | 7 ++++++ .../admin/auth/vo/AuthOpenIdLoginReqVO.java | 22 ++++++++++++++++++ .../admin/user/vo/user/UserSaveReqVO.java | 3 +++ .../dal/dataobject/user/AdminUserDO.java | 5 ++++ .../system/service/auth/AdminAuthService.java | 1 + .../service/auth/AdminAuthServiceImpl.java | 12 ++++++++++ .../system/service/user/AdminUserService.java | 22 ++++++++++++++---- .../service/user/AdminUserServiceImpl.java | 23 +++++++++++++++---- 9 files changed, 87 insertions(+), 9 deletions(-) create mode 100644 ensign-module-system/ensign-module-system-biz/src/main/java/com/ensign/crm/module/system/controller/admin/auth/vo/AuthOpenIdLoginReqVO.java diff --git a/ensign-module-system/ensign-module-system-api/src/main/java/com/ensign/crm/module/system/enums/ErrorCodeConstants.java b/ensign-module-system/ensign-module-system-api/src/main/java/com/ensign/crm/module/system/enums/ErrorCodeConstants.java index ade32bf..779abfd 100644 --- a/ensign-module-system/ensign-module-system-api/src/main/java/com/ensign/crm/module/system/enums/ErrorCodeConstants.java +++ b/ensign-module-system/ensign-module-system-api/src/main/java/com/ensign/crm/module/system/enums/ErrorCodeConstants.java @@ -15,6 +15,7 @@ public interface ErrorCodeConstants { ErrorCode AUTH_LOGIN_CAPTCHA_CODE_ERROR = new ErrorCode(1_002_000_004, "验证码不正确,原因:{}"); ErrorCode AUTH_THIRD_LOGIN_NOT_BIND = new ErrorCode(1_002_000_005, "未绑定账号,需要进行绑定"); ErrorCode AUTH_MOBILE_NOT_EXISTS = new ErrorCode(1_002_000_007, "手机号不存在"); + ErrorCode AUTH_OPEN_ID_NOT_EXISTS = new ErrorCode(1_002_000_008, "未找到对应用户"); // ========== 菜单模块 1-002-001-000 ========== ErrorCode MENU_NAME_DUPLICATE = new ErrorCode(1_002_001_000, "已经存在该名字的菜单"); diff --git a/ensign-module-system/ensign-module-system-biz/src/main/java/com/ensign/crm/module/system/controller/admin/auth/AuthController.java b/ensign-module-system/ensign-module-system-biz/src/main/java/com/ensign/crm/module/system/controller/admin/auth/AuthController.java index 787f64b..3c80d4c 100644 --- a/ensign-module-system/ensign-module-system-biz/src/main/java/com/ensign/crm/module/system/controller/admin/auth/AuthController.java +++ b/ensign-module-system/ensign-module-system-biz/src/main/java/com/ensign/crm/module/system/controller/admin/auth/AuthController.java @@ -69,6 +69,13 @@ public class AuthController { return success(authService.login(reqVO)); } + @PostMapping("/login-open-id") + @PermitAll + @Operation(summary = "使用云之家OpenId登录") + public CommonResult<AuthLoginRespVO> openIdLogin(@RequestBody @Valid AuthOpenIdLoginReqVO reqVO) { + return success(authService.loginWithOpenId(reqVO)); + } + @PostMapping("/logout") @PermitAll @Operation(summary = "登出系统") diff --git a/ensign-module-system/ensign-module-system-biz/src/main/java/com/ensign/crm/module/system/controller/admin/auth/vo/AuthOpenIdLoginReqVO.java b/ensign-module-system/ensign-module-system-biz/src/main/java/com/ensign/crm/module/system/controller/admin/auth/vo/AuthOpenIdLoginReqVO.java new file mode 100644 index 0000000..829ade6 --- /dev/null +++ b/ensign-module-system/ensign-module-system-biz/src/main/java/com/ensign/crm/module/system/controller/admin/auth/vo/AuthOpenIdLoginReqVO.java @@ -0,0 +1,22 @@ +package com.ensign.crm.module.system.controller.admin.auth.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * @Description: 云之家登录参数 + * @Date: 2025/1/14 14:24 + * @Created: by ZZSLL + */ + +@Schema(description = "管理后台 - 云之家OpenId登录 Request VO") +@Data +@NoArgsConstructor +@AllArgsConstructor +@Builder +public class AuthOpenIdLoginReqVO { + private String openId; +} diff --git a/ensign-module-system/ensign-module-system-biz/src/main/java/com/ensign/crm/module/system/controller/admin/user/vo/user/UserSaveReqVO.java b/ensign-module-system/ensign-module-system-biz/src/main/java/com/ensign/crm/module/system/controller/admin/user/vo/user/UserSaveReqVO.java index 89a0df1..08bf39f 100644 --- a/ensign-module-system/ensign-module-system-biz/src/main/java/com/ensign/crm/module/system/controller/admin/user/vo/user/UserSaveReqVO.java +++ b/ensign-module-system/ensign-module-system-biz/src/main/java/com/ensign/crm/module/system/controller/admin/user/vo/user/UserSaveReqVO.java @@ -103,4 +103,7 @@ public class UserSaveReqVO { @Schema(description = "用户部门拼接", requiredMode = Schema.RequiredMode.NOT_REQUIRED) private String deptIdColl; + @Schema(description = "云之家OpenId", requiredMode = Schema.RequiredMode.NOT_REQUIRED) + private String openId; + } diff --git a/ensign-module-system/ensign-module-system-biz/src/main/java/com/ensign/crm/module/system/dal/dataobject/user/AdminUserDO.java b/ensign-module-system/ensign-module-system-biz/src/main/java/com/ensign/crm/module/system/dal/dataobject/user/AdminUserDO.java index c69ed92..9a4ac27 100644 --- a/ensign-module-system/ensign-module-system-biz/src/main/java/com/ensign/crm/module/system/dal/dataobject/user/AdminUserDO.java +++ b/ensign-module-system/ensign-module-system-biz/src/main/java/com/ensign/crm/module/system/dal/dataobject/user/AdminUserDO.java @@ -115,4 +115,9 @@ public class AdminUserDO extends TenantBaseDO { * 部门id,拼接 */ private String deptIdColl; + + /** + * 云之家OpenId + */ + private String openId; } diff --git a/ensign-module-system/ensign-module-system-biz/src/main/java/com/ensign/crm/module/system/service/auth/AdminAuthService.java b/ensign-module-system/ensign-module-system-biz/src/main/java/com/ensign/crm/module/system/service/auth/AdminAuthService.java index d19ffff..6c8bc1d 100644 --- a/ensign-module-system/ensign-module-system-biz/src/main/java/com/ensign/crm/module/system/service/auth/AdminAuthService.java +++ b/ensign-module-system/ensign-module-system-biz/src/main/java/com/ensign/crm/module/system/service/auth/AdminAuthService.java @@ -70,4 +70,5 @@ public interface AdminAuthService { */ AuthLoginRespVO refreshToken(String refreshToken); + AuthLoginRespVO loginWithOpenId(@Valid AuthOpenIdLoginReqVO reqVO); } diff --git a/ensign-module-system/ensign-module-system-biz/src/main/java/com/ensign/crm/module/system/service/auth/AdminAuthServiceImpl.java b/ensign-module-system/ensign-module-system-biz/src/main/java/com/ensign/crm/module/system/service/auth/AdminAuthServiceImpl.java index 3602a44..0fc8776 100644 --- a/ensign-module-system/ensign-module-system-biz/src/main/java/com/ensign/crm/module/system/service/auth/AdminAuthServiceImpl.java +++ b/ensign-module-system/ensign-module-system-biz/src/main/java/com/ensign/crm/module/system/service/auth/AdminAuthServiceImpl.java @@ -247,4 +247,16 @@ public class AdminAuthServiceImpl implements AdminAuthService { return UserTypeEnum.ADMIN; } + /** + * 通过云之家OpenId登录 + */ + @Override + public AuthLoginRespVO loginWithOpenId(AuthOpenIdLoginReqVO reqVO) { + + AdminUserDO user = userService.getUserByOpenId(reqVO.getOpenId()); + if (user == null) { + throw exception(AUTH_OPEN_ID_NOT_EXISTS) ; + } + return createTokenAfterLoginSuccess(user.getId(), user.getUsername(), LoginLogTypeEnum.LOGIN_SOCIAL); + } } diff --git a/ensign-module-system/ensign-module-system-biz/src/main/java/com/ensign/crm/module/system/service/user/AdminUserService.java b/ensign-module-system/ensign-module-system-biz/src/main/java/com/ensign/crm/module/system/service/user/AdminUserService.java index 3203d76..9b36a0b 100644 --- a/ensign-module-system/ensign-module-system-biz/src/main/java/com/ensign/crm/module/system/service/user/AdminUserService.java +++ b/ensign-module-system/ensign-module-system-biz/src/main/java/com/ensign/crm/module/system/service/user/AdminUserService.java @@ -1,18 +1,22 @@ package com.ensign.crm.module.system.service.user; import cn.hutool.core.collection.CollUtil; +import com.ensign.crm.framework.common.pojo.PageResult; import com.ensign.crm.framework.common.util.collection.CollectionUtils; import com.ensign.crm.module.system.controller.admin.user.vo.profile.UserProfileUpdatePasswordReqVO; import com.ensign.crm.module.system.controller.admin.user.vo.profile.UserProfileUpdateReqVO; -import com.ensign.crm.module.system.controller.admin.user.vo.user.*; -import com.ensign.crm.framework.common.pojo.PageResult; +import com.ensign.crm.module.system.controller.admin.user.vo.user.UserImportExcelVO; +import com.ensign.crm.module.system.controller.admin.user.vo.user.UserImportRespVO; +import com.ensign.crm.module.system.controller.admin.user.vo.user.UserPageReqVO; +import com.ensign.crm.module.system.controller.admin.user.vo.user.UserSaveReqVO; import com.ensign.crm.module.system.dal.dataobject.user.AdminUserDO; import javax.validation.Valid; -import java.io.IOException; import java.io.InputStream; -import java.net.URISyntaxException; -import java.util.*; +import java.util.Collection; +import java.util.HashMap; +import java.util.List; +import java.util.Map; /** * 后台用户 Service 接口 @@ -202,4 +206,12 @@ public interface AdminUserService { * @return 是否匹配 */ boolean isPasswordMatch(String rawPassword, String encodedPassword); + + /** + * 通过云之家OpenId查找用户 + * @param openId 云之家OpenId + * @return 用户 + */ + AdminUserDO getUserByOpenId(String openId); + } diff --git a/ensign-module-system/ensign-module-system-biz/src/main/java/com/ensign/crm/module/system/service/user/AdminUserServiceImpl.java b/ensign-module-system/ensign-module-system-biz/src/main/java/com/ensign/crm/module/system/service/user/AdminUserServiceImpl.java index c8b3b58..b4a2ff1 100644 --- a/ensign-module-system/ensign-module-system-biz/src/main/java/com/ensign/crm/module/system/service/user/AdminUserServiceImpl.java +++ b/ensign-module-system/ensign-module-system-biz/src/main/java/com/ensign/crm/module/system/service/user/AdminUserServiceImpl.java @@ -11,6 +11,7 @@ import com.ensign.crm.framework.common.util.collection.CollectionUtils; import com.ensign.crm.framework.common.util.object.BeanUtils; import com.ensign.crm.framework.common.util.validation.ValidationUtils; import com.ensign.crm.framework.datapermission.core.util.DataPermissionUtils; +import com.ensign.crm.framework.mybatis.core.query.LambdaQueryWrapperX; import com.ensign.crm.module.infra.api.config.ConfigApi; import com.ensign.crm.module.infra.api.file.FileApi; import com.ensign.crm.module.system.controller.admin.user.vo.profile.UserProfileUpdatePasswordReqVO; @@ -34,8 +35,6 @@ import com.mzt.logapi.context.LogRecordContext; import com.mzt.logapi.service.impl.DiffParseFunction; import com.mzt.logapi.starter.annotation.LogRecord; import lombok.extern.slf4j.Slf4j; -import org.jetbrains.annotations.NotNull; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Lazy; import org.springframework.security.crypto.password.PasswordEncoder; import org.springframework.stereotype.Service; @@ -43,9 +42,7 @@ import org.springframework.transaction.annotation.Transactional; import javax.annotation.Resource; import javax.validation.ConstraintViolationException; -import java.io.IOException; import java.io.InputStream; -import java.net.URISyntaxException; import java.time.LocalDateTime; import java.util.*; @@ -511,4 +508,22 @@ public class AdminUserServiceImpl implements AdminUserService { private String encodePassword(String password) { return passwordEncoder.encode(password); } + + @Override + public AdminUserDO getUserByOpenId(String openId) { + LambdaQueryWrapperX<AdminUserDO> queryWrapperX = new LambdaQueryWrapperX<>(); + queryWrapperX.eq(AdminUserDO::getOpenId, openId); + List<AdminUserDO> users = userMapper.selectList(queryWrapperX); + if (users.isEmpty()) { + return null; + } + AdminUserDO user = users.get(0); + Integer status = user.getStatus(); + + if (Objects.equals(status, CommonStatusEnum.DISABLE.getStatus())) { + throw exception(AUTH_LOGIN_USER_DISABLED); + } else { + return user; + } + } }