feat:yunzhijia openid login

This commit is contained in:
zzs 2025-01-14 15:21:43 +08:00
parent d8cf5ca419
commit fed531a1ef
9 changed files with 87 additions and 9 deletions

View File

@ -15,6 +15,7 @@ public interface ErrorCodeConstants {
ErrorCode AUTH_LOGIN_CAPTCHA_CODE_ERROR = new ErrorCode(1_002_000_004, "验证码不正确,原因:{}"); 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_THIRD_LOGIN_NOT_BIND = new ErrorCode(1_002_000_005, "未绑定账号,需要进行绑定");
ErrorCode AUTH_MOBILE_NOT_EXISTS = new ErrorCode(1_002_000_007, "手机号不存在"); 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 ========== // ========== 菜单模块 1-002-001-000 ==========
ErrorCode MENU_NAME_DUPLICATE = new ErrorCode(1_002_001_000, "已经存在该名字的菜单"); ErrorCode MENU_NAME_DUPLICATE = new ErrorCode(1_002_001_000, "已经存在该名字的菜单");

View File

@ -69,6 +69,13 @@ public class AuthController {
return success(authService.login(reqVO)); 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") @PostMapping("/logout")
@PermitAll @PermitAll
@Operation(summary = "登出系统") @Operation(summary = "登出系统")

View File

@ -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;
}

View File

@ -103,4 +103,7 @@ public class UserSaveReqVO {
@Schema(description = "用户部门拼接", requiredMode = Schema.RequiredMode.NOT_REQUIRED) @Schema(description = "用户部门拼接", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
private String deptIdColl; private String deptIdColl;
@Schema(description = "云之家OpenId", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
private String openId;
} }

View File

@ -115,4 +115,9 @@ public class AdminUserDO extends TenantBaseDO {
* 部门id拼接 * 部门id拼接
*/ */
private String deptIdColl; private String deptIdColl;
/**
* 云之家OpenId
*/
private String openId;
} }

View File

@ -70,4 +70,5 @@ public interface AdminAuthService {
*/ */
AuthLoginRespVO refreshToken(String refreshToken); AuthLoginRespVO refreshToken(String refreshToken);
AuthLoginRespVO loginWithOpenId(@Valid AuthOpenIdLoginReqVO reqVO);
} }

View File

@ -247,4 +247,16 @@ public class AdminAuthServiceImpl implements AdminAuthService {
return UserTypeEnum.ADMIN; 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);
}
} }

View File

@ -1,18 +1,22 @@
package com.ensign.crm.module.system.service.user; package com.ensign.crm.module.system.service.user;
import cn.hutool.core.collection.CollUtil; 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.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.UserProfileUpdatePasswordReqVO;
import com.ensign.crm.module.system.controller.admin.user.vo.profile.UserProfileUpdateReqVO; 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.module.system.controller.admin.user.vo.user.UserImportExcelVO;
import com.ensign.crm.framework.common.pojo.PageResult; 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 com.ensign.crm.module.system.dal.dataobject.user.AdminUserDO;
import javax.validation.Valid; import javax.validation.Valid;
import java.io.IOException;
import java.io.InputStream; import java.io.InputStream;
import java.net.URISyntaxException; import java.util.Collection;
import java.util.*; import java.util.HashMap;
import java.util.List;
import java.util.Map;
/** /**
* 后台用户 Service 接口 * 后台用户 Service 接口
@ -202,4 +206,12 @@ public interface AdminUserService {
* @return 是否匹配 * @return 是否匹配
*/ */
boolean isPasswordMatch(String rawPassword, String encodedPassword); boolean isPasswordMatch(String rawPassword, String encodedPassword);
/**
* 通过云之家OpenId查找用户
* @param openId 云之家OpenId
* @return 用户
*/
AdminUserDO getUserByOpenId(String openId);
} }

View File

@ -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.object.BeanUtils;
import com.ensign.crm.framework.common.util.validation.ValidationUtils; import com.ensign.crm.framework.common.util.validation.ValidationUtils;
import com.ensign.crm.framework.datapermission.core.util.DataPermissionUtils; 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.config.ConfigApi;
import com.ensign.crm.module.infra.api.file.FileApi; import com.ensign.crm.module.infra.api.file.FileApi;
import com.ensign.crm.module.system.controller.admin.user.vo.profile.UserProfileUpdatePasswordReqVO; 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.service.impl.DiffParseFunction;
import com.mzt.logapi.starter.annotation.LogRecord; import com.mzt.logapi.starter.annotation.LogRecord;
import lombok.extern.slf4j.Slf4j; 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.context.annotation.Lazy;
import org.springframework.security.crypto.password.PasswordEncoder; import org.springframework.security.crypto.password.PasswordEncoder;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
@ -43,9 +42,7 @@ import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource; import javax.annotation.Resource;
import javax.validation.ConstraintViolationException; import javax.validation.ConstraintViolationException;
import java.io.IOException;
import java.io.InputStream; import java.io.InputStream;
import java.net.URISyntaxException;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.util.*; import java.util.*;
@ -511,4 +508,22 @@ public class AdminUserServiceImpl implements AdminUserService {
private String encodePassword(String password) { private String encodePassword(String password) {
return passwordEncoder.encode(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;
}
}
} }