fix (farm): 微信小程序,地块,首页
- 登录流程 调整 - 地块编号 需要修改 - 首页 在种面积
This commit is contained in:
@@ -162,12 +162,32 @@ public class AuthController {
|
||||
}
|
||||
}
|
||||
|
||||
@PermitAll
|
||||
@PostMapping("/login-by-tenant")
|
||||
@Operation(summary = "登录 (切换租户之后调用)")
|
||||
public CommonResult<AuthLoginRespVO> getPhoneNumber4Login(@RequestBody @Valid TenantTokenReqVO reqVO) {
|
||||
AuthLoginRespVO login = authService.getPhoneNumber4Login(reqVO);
|
||||
if (login != null) {
|
||||
return success(login);
|
||||
} else {
|
||||
return error(405, "该手机号不是平台用户");
|
||||
}
|
||||
}
|
||||
|
||||
@PermitAll
|
||||
@PostMapping("/get-tenant-token")
|
||||
@Operation(summary = "获取租户的令牌列表")
|
||||
public CommonResult<List<TenantTokenRespVO>> getTenantTokenList(@RequestHeader("authorization") String authorization,
|
||||
@RequestBody @Valid TenantTokenReqVO reqVO) {
|
||||
String token = TokenExtractorUtil.extractToken(authorization);
|
||||
List<TenantTokenRespVO> res = authService.getTenantTokenList(reqVO.getPhoneNumber(), token);
|
||||
public CommonResult<List<TenantTokenRespVO>> getTenantTokenList(@RequestBody @Valid WxLoginReqVO reqVO) {
|
||||
|
||||
List<TenantTokenRespVO> res = authService.getTenantTokenList(reqVO);
|
||||
return success(res);
|
||||
}
|
||||
|
||||
@PermitAll
|
||||
@PostMapping("/get-tenant-token/by-mobile")
|
||||
@Operation(summary = "获取租户的令牌列表")
|
||||
public CommonResult<List<TenantTokenRespVO>> getTenantTokenList4Mobile(@RequestBody @Valid TenantTokenReqVO reqVO) {
|
||||
List<TenantTokenRespVO> res = authService.getTenantTokenList4Mobile(reqVO);
|
||||
return success(res);
|
||||
}
|
||||
|
||||
|
||||
@@ -29,4 +29,6 @@ public class AuthLoginRespVO {
|
||||
|
||||
private Long tenantId;
|
||||
|
||||
private String mobile;
|
||||
|
||||
}
|
||||
|
||||
@@ -15,6 +15,7 @@ import lombok.NoArgsConstructor;
|
||||
@NoArgsConstructor
|
||||
public class TenantTokenReqVO {
|
||||
|
||||
private String tenantId;
|
||||
private String phoneNumber;
|
||||
|
||||
}
|
||||
|
||||
@@ -27,5 +27,8 @@ public class TenantTokenRespVO {
|
||||
private String refreshToken;
|
||||
@Schema(description = "默认展示租户 (1:当前; 0: 非当前)")
|
||||
private Integer defaultStatus;
|
||||
@Schema(description = "手机号")
|
||||
private String mobile;
|
||||
|
||||
|
||||
}
|
||||
|
||||
@@ -24,4 +24,6 @@ public class WxLoginReqVO {
|
||||
private String rawData;
|
||||
|
||||
private String openid;
|
||||
|
||||
private String tenantId;
|
||||
}
|
||||
@@ -3,6 +3,7 @@ package cn.iocoder.yudao.module.system.controller.admin.user;
|
||||
import cn.hutool.core.collection.CollUtil;
|
||||
import cn.iocoder.yudao.framework.common.pojo.CommonResult;
|
||||
import cn.iocoder.yudao.framework.datapermission.core.annotation.DataPermission;
|
||||
import cn.iocoder.yudao.module.system.controller.admin.auth.vo.TenantTokenReqVO;
|
||||
import cn.iocoder.yudao.module.system.controller.admin.user.vo.profile.UserProfileRespVO;
|
||||
import cn.iocoder.yudao.module.system.controller.admin.user.vo.profile.UserProfileUpdatePasswordReqVO;
|
||||
import cn.iocoder.yudao.module.system.controller.admin.user.vo.profile.UserProfileUpdateReqVO;
|
||||
@@ -62,6 +63,21 @@ public class UserProfileController {
|
||||
return success(UserConvert.INSTANCE.convert(user, userRoles, dept, posts));
|
||||
}
|
||||
|
||||
@GetMapping("/get/wx")
|
||||
@Operation(summary = "获得登录用户信息 (微信端使用)")
|
||||
@DataPermission(enable = false) // 关闭数据权限,避免只查看自己时,查询不到部门。
|
||||
public CommonResult<UserProfileRespVO> getUserProfile2(TenantTokenReqVO reqVO) {
|
||||
// 获得用户基本信息
|
||||
AdminUserDO user = userService.getUserByMobileAndTenantId2(reqVO.getPhoneNumber(), reqVO.getTenantId());
|
||||
// 获得用户角色
|
||||
List<RoleDO> userRoles = roleService.getRoleListFromCache(permissionService.getUserRoleIdListByUserId(user.getId()));
|
||||
// 获得部门信息
|
||||
DeptDO dept = user.getDeptId() != null ? deptService.getDept(user.getDeptId()) : null;
|
||||
// 获得岗位信息
|
||||
List<PostDO> posts = CollUtil.isNotEmpty(user.getPostIds()) ? postService.getPostList(user.getPostIds()) : null;
|
||||
return success(UserConvert.INSTANCE.convert(user, userRoles, dept, posts));
|
||||
}
|
||||
|
||||
@PutMapping("/update")
|
||||
@Operation(summary = "修改用户个人信息")
|
||||
public CommonResult<Boolean> updateUserProfile(@Valid @RequestBody UserProfileUpdateReqVO reqVO) {
|
||||
|
||||
@@ -54,4 +54,8 @@ public interface AdminUserMapper extends BaseMapperX<AdminUserDO> {
|
||||
@InterceptorIgnore(tenantLine = "true")
|
||||
@Select("SELECT * FROM system_users WHERE deleted = 0 AND mobile = #{mobile}")
|
||||
List<AdminUserDO> selectListByMobile(@Param("mobile") String mobile);
|
||||
|
||||
@InterceptorIgnore(tenantLine = "true")
|
||||
@Select("SELECT * FROM system_users WHERE deleted = 0 AND mobile = #{mobile} AND tenant_id = #{tenantId}")
|
||||
AdminUserDO selectListByMobileAndTenantId(@Param("mobile") String mobile,@Param("tenantId") String tenantId);
|
||||
}
|
||||
|
||||
@@ -105,8 +105,11 @@ public interface AdminAuthService {
|
||||
* @param phoneNumber
|
||||
* @return
|
||||
*/
|
||||
List<TenantTokenRespVO> getTenantTokenList(String phoneNumber,String accessToken);
|
||||
List<TenantTokenRespVO> getTenantTokenList(WxLoginReqVO reqVO);
|
||||
|
||||
List<TenantTokenRespVO> getTenantTokenList4Mobile(TenantTokenReqVO reqVO);
|
||||
|
||||
List<TenantTokenRespVO> getTenantList(WxLoginReqVO reqVO);
|
||||
/**
|
||||
* 登录前置操作
|
||||
* 1. 获取用户所拥有的租户列表
|
||||
@@ -114,4 +117,11 @@ public interface AdminAuthService {
|
||||
* @return
|
||||
*/
|
||||
List<TenantRespVO> loginForTenantList(LoginForTenantReqVO reqVO);
|
||||
|
||||
/**
|
||||
* 登录
|
||||
* @param reqVO
|
||||
* @return
|
||||
*/
|
||||
AuthLoginRespVO getPhoneNumber4Login(TenantTokenReqVO reqVO);
|
||||
}
|
||||
|
||||
@@ -411,35 +411,24 @@ public class AdminAuthServiceImpl implements AdminAuthService {
|
||||
WxUserPhoneRespVO bean = JSONUtil.toBean(decryptedData, WxUserPhoneRespVO.class);
|
||||
// 绑定用户
|
||||
String phoneNumber = bean.getPhoneNumber();
|
||||
AdminUserDO user = userService.getUserByMobile(phoneNumber);
|
||||
if (user == null) {
|
||||
return null;
|
||||
}
|
||||
|
||||
// 检查用户租户ID,如果为空则尝试修复
|
||||
if (user.getTenantId() == null) {
|
||||
Long currentTenantId = TenantContextHolder.getTenantId();
|
||||
// 如果TenantContextHolder中没有,尝试从请求头中获取
|
||||
if (currentTenantId == null) {
|
||||
try {
|
||||
currentTenantId = WebFrameworkUtils.getTenantId(ServletUtils.getRequest());
|
||||
} catch (Exception e) {
|
||||
log.debug("[getPhoneNumber][无法获取当前请求,跳过从请求头提取租户ID]");
|
||||
}
|
||||
AdminUserDO user = userService.getUserByMobileAndTenantId(phoneNumber,reqVO.getTenantId());
|
||||
// List<AdminUserDO> mList = userService.getUserByMobileToList(phoneNumber);
|
||||
// AdminUserDO user = mList.stream().filter(e -> e.getTenantId() == 2)
|
||||
// AdminUserDO user = null;
|
||||
// for (AdminUserDO u : mList) {
|
||||
|
||||
if (user == null) {
|
||||
return null;
|
||||
}
|
||||
|
||||
if (currentTenantId != null) {
|
||||
log.warn("[getPhoneNumber][用户({}) 租户ID为空,使用当前租户ID: {}]", user.getId(), currentTenantId);
|
||||
user.setTenantId(currentTenantId);
|
||||
userService.updateByid(user);
|
||||
} else {
|
||||
log.error("[getPhoneNumber][用户({}) 租户ID为空,且无法获取当前租户ID]", user.getId());
|
||||
}
|
||||
}
|
||||
|
||||
user.setOpenid(reqVO.getOpenid());
|
||||
userService.updateByid(user);
|
||||
|
||||
this.fixOpenid(user,reqVO.getOpenid());
|
||||
// if (u.getTenantId() == 2) {
|
||||
// user = u; // 同一个手机号 随意给到一个租户
|
||||
// }
|
||||
// }
|
||||
|
||||
AuthLoginRespVO tokenAfterLoginSuccess = createTokenAfterLoginSuccess(user.getId(), user.getUsername(), LoginLogTypeEnum.LOGIN_MOBILE);
|
||||
tokenAfterLoginSuccess.setMobile(phoneNumber);
|
||||
return tokenAfterLoginSuccess;
|
||||
} catch (Exception e) {
|
||||
log.error("[getPhoneNumber][解密手机号失败,encryptedData: {}, sessionKey: {}, iv: {}]",
|
||||
@@ -448,6 +437,42 @@ public class AdminAuthServiceImpl implements AdminAuthService {
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public AuthLoginRespVO getPhoneNumber4Login(TenantTokenReqVO reqVO) {
|
||||
String phoneNumber = reqVO.getPhoneNumber();
|
||||
AdminUserDO user = userService.getUserByMobileAndTenantId2(phoneNumber,reqVO.getTenantId());
|
||||
|
||||
AuthLoginRespVO tokenAfterLoginSuccess = createTokenAfterLoginSuccess(user.getId(), user.getUsername(), LoginLogTypeEnum.LOGIN_MOBILE);
|
||||
tokenAfterLoginSuccess.setMobile(phoneNumber);
|
||||
return tokenAfterLoginSuccess;
|
||||
}
|
||||
|
||||
private void fixOpenid(AdminUserDO user, String openid){
|
||||
// 检查用户租户ID,如果为空则尝试修复
|
||||
if (user.getTenantId() == null) {
|
||||
Long currentTenantId = TenantContextHolder.getTenantId();
|
||||
// 如果TenantContextHolder中没有,尝试从请求头中获取
|
||||
if (currentTenantId == null) {
|
||||
try {
|
||||
currentTenantId = WebFrameworkUtils.getTenantId(ServletUtils.getRequest());
|
||||
} catch (Exception e) {
|
||||
log.debug("[getPhoneNumber][无法获取当前请求,跳过从请求头提取租户ID]");
|
||||
}
|
||||
}
|
||||
|
||||
if (currentTenantId != null) {
|
||||
log.warn("[getPhoneNumber][用户({}) 租户ID为空,使用当前租户ID: {}]", user.getId(), currentTenantId);
|
||||
user.setTenantId(currentTenantId);
|
||||
userService.updateByid(user);
|
||||
} else {
|
||||
log.error("[getPhoneNumber][用户({}) 租户ID为空,且无法获取当前租户ID]", user.getId());
|
||||
}
|
||||
}
|
||||
|
||||
user.setOpenid(openid);
|
||||
userService.updateByid(user);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Boolean synchronize(UserReqVO reqVO) {
|
||||
AdminUserDO userByMobile = userService.getUserByMobile(reqVO.getPhone());
|
||||
@@ -501,20 +526,58 @@ public class AdminAuthServiceImpl implements AdminAuthService {
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<TenantTokenRespVO> getTenantTokenList(String phoneNumber,String accessToken) {
|
||||
public List<TenantTokenRespVO> getTenantList(WxLoginReqVO reqVO) {
|
||||
// log.info("{} ==> {}", "wx登录",reqVO.toString());
|
||||
// AuthLoginRespVO login = this.getPhoneNumber(reqVO);
|
||||
// String mobile = login.getMobile();
|
||||
// String token = login.getAccessToken();
|
||||
//
|
||||
// return this.getTenantTokenList(mobile, token);
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<TenantTokenRespVO> getTenantTokenList(WxLoginReqVO reqVO) {
|
||||
List<TenantTokenRespVO> res = new ArrayList<>();
|
||||
|
||||
try {
|
||||
OAuth2AccessTokenDO currentOAuth = oauth2TokenService.getAccessToken(accessToken);
|
||||
Long tenantId = currentOAuth.getTenantId();
|
||||
TenantDO tenant = tenantService.getTenant(tenantId);
|
||||
// 解密手机号数据
|
||||
String decryptedData = decryptWxData(reqVO.getEncryptedData(), reqVO.getSessionKey(), reqVO.getIv(), wxMiniAppId);
|
||||
// 解析JSON数据
|
||||
WxUserPhoneRespVO bean = JSONUtil.toBean(decryptedData, WxUserPhoneRespVO.class);
|
||||
// 绑定用户
|
||||
String phoneNumber = bean.getPhoneNumber();
|
||||
|
||||
res.add(this.getCurrentTenant(currentOAuth,tenant.getName()));
|
||||
res.addAll(this.getTenantList(phoneNumber,tenantId));
|
||||
try {
|
||||
// OAuth2AccessTokenDO currentOAuth = oauth2TokenService.getAccessToken(accessToken);
|
||||
// Long tenantId = currentOAuth.getTenantId();
|
||||
// TenantDO tenant = tenantService.getTenant(tenantId);
|
||||
// Long userId = currentOAuth.getUserId();
|
||||
|
||||
res.addAll(this.getTenantList(phoneNumber));
|
||||
// res.add(this.getCurrentTenant(currentOAuth,tenant.getName()));
|
||||
res.addAll(this.getRemoteTenant(phoneNumber));
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
|
||||
res.stream().forEach(e -> e.setMobile(phoneNumber));
|
||||
|
||||
return res;
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<TenantTokenRespVO> getTenantTokenList4Mobile(TenantTokenReqVO reqVO) {
|
||||
List<TenantTokenRespVO> res = new ArrayList<>();
|
||||
String phoneNumber = reqVO.getPhoneNumber();
|
||||
|
||||
try {
|
||||
res.addAll(this.getTenantList(phoneNumber));
|
||||
res.addAll(this.getRemoteTenant(phoneNumber));
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
|
||||
res.stream().forEach(e -> e.setMobile(phoneNumber));
|
||||
return res;
|
||||
}
|
||||
|
||||
@@ -522,14 +585,14 @@ public class AdminAuthServiceImpl implements AdminAuthService {
|
||||
* 获取当前登录租户列表
|
||||
* @return
|
||||
*/
|
||||
private List<TenantTokenRespVO> getTenantList(String phoneNumber,Long tenantId) {
|
||||
private List<TenantTokenRespVO> getTenantList(String phoneNumber) {
|
||||
List<TenantRespVO> tList = tenantService.getTenantListByMobile(phoneNumber);
|
||||
tList = tList.stream()
|
||||
.filter(tenant -> ObjectUtils.notEqual(tenantId, tenant.getTenantId()))
|
||||
.collect(Collectors.toList());
|
||||
// tList = tList.stream()
|
||||
// .filter(tenant -> ObjectUtils.notEqual(tenantId, tenant.getTenantId()))
|
||||
// .collect(Collectors.toList());
|
||||
|
||||
return tList.stream().map(e ->
|
||||
new TenantTokenRespVO(String.valueOf(e.getTenantId()), e.getTenantName(), "1", "", "", 0)
|
||||
new TenantTokenRespVO(String.valueOf(e.getTenantId()), e.getTenantName(), "1", "", "", 0,phoneNumber)
|
||||
).toList();
|
||||
}
|
||||
|
||||
|
||||
@@ -119,6 +119,8 @@ public interface AdminUserService {
|
||||
* @return 用户对象信息
|
||||
*/
|
||||
AdminUserDO getUserByMobile(String mobile);
|
||||
AdminUserDO getUserByMobileAndTenantId(String mobile,String tenantId);
|
||||
AdminUserDO getUserByMobileAndTenantId2(String mobile,String tenantId);
|
||||
List<AdminUserDO> getUserByMobileToList(String mobile);
|
||||
List<AdminUserDO> getUserByMobileToList2(String mobileNumber);
|
||||
|
||||
|
||||
@@ -12,6 +12,7 @@ import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils;
|
||||
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
|
||||
import cn.iocoder.yudao.framework.common.util.validation.ValidationUtils;
|
||||
import cn.iocoder.yudao.framework.datapermission.core.util.DataPermissionUtils;
|
||||
import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
|
||||
import cn.iocoder.yudao.framework.tenant.core.context.TenantContextHolder;
|
||||
import cn.iocoder.yudao.module.infra.api.config.ConfigApi;
|
||||
import cn.iocoder.yudao.module.system.controller.admin.auth.vo.AuthRegisterReqVO;
|
||||
@@ -332,6 +333,19 @@ public class AdminUserServiceImpl implements AdminUserService {
|
||||
return userMapper.selectByMobile(mobile);
|
||||
}
|
||||
|
||||
@Override
|
||||
public AdminUserDO getUserByMobileAndTenantId(String mobile,String tenantId) {
|
||||
LambdaQueryWrapperX<AdminUserDO> x = new LambdaQueryWrapperX<>();
|
||||
x.eq(AdminUserDO::getMobile, mobile);
|
||||
x.eq(AdminUserDO::getTenantId, tenantId);
|
||||
return userMapper.selectOne(x);
|
||||
}
|
||||
|
||||
@Override
|
||||
public AdminUserDO getUserByMobileAndTenantId2(String mobile, String tenantId) {
|
||||
return userMapper.selectListByMobileAndTenantId(mobile,tenantId);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<AdminUserDO> getUserByMobileToList(String mobile) {
|
||||
return userMapper.selectList(AdminUserDO::getMobile,mobile);
|
||||
|
||||
Reference in New Issue
Block a user