Переглянути джерело

会议关联项目修改

master
WendyYang 1 рік тому
джерело
коміт
711e030ab8
5 змінених файлів з 103 додано та 46 видалено
  1. +38
    -0
      pmapi/src/main/java/com/ningdatech/pmapi/user/convert/UserInfoConvertor.java
  2. +19
    -21
      pmapi/src/main/java/com/ningdatech/pmapi/user/manage/UserAuthLoginManage.java
  3. +35
    -2
      pmapi/src/main/java/com/ningdatech/pmapi/user/manage/UserInfoManage.java
  4. +9
    -23
      pmapi/src/main/java/com/ningdatech/pmapi/user/security/auth/credential/CredentialLoginUserDetailService.java
  5. +2
    -0
      pmapi/src/main/java/com/ningdatech/pmapi/user/security/auth/model/UserFullInfoDTO.java

+ 38
- 0
pmapi/src/main/java/com/ningdatech/pmapi/user/convert/UserInfoConvertor.java Переглянути файл

@@ -0,0 +1,38 @@
package com.ningdatech.pmapi.user.convert;

import com.ningdatech.pmapi.user.security.auth.model.UserFullInfoDTO;
import com.ningdatech.pmapi.user.security.auth.model.UserInfoDetails;

/**
* <p>
* UserInfoConvertor
* </p>
*
* @author WendyYang
* @since 2023/5/5
**/
public class UserInfoConvertor {

private UserInfoConvertor() {

}

public static UserInfoDetails toUserInfoDetails(UserFullInfoDTO userFullInfo) {
UserInfoDetails userInfoDetails = new UserInfoDetails();
userInfoDetails.setUserId(userFullInfo.getUserId());
userInfoDetails.setUsername(userFullInfo.getUsername());
userInfoDetails.setRealName(userFullInfo.getRealName());
userInfoDetails.setUserRoleList(userFullInfo.getUserRoleList());
userInfoDetails.setRegionCode(userFullInfo.getRegionCode());
userInfoDetails.setRegionLevel(userFullInfo.getRegionLevel());
userInfoDetails.setIdentifier(userFullInfo.getIdentifier());
userInfoDetails.setPassword(userFullInfo.getCredential());
userInfoDetails.setEmployeeCode(userFullInfo.getEmployeeCode());
userInfoDetails.setOrganizationCode(userFullInfo.getOrganizationCode());
userInfoDetails.setOrganizationName(userFullInfo.getOrganizationName());
userInfoDetails.setEmpPosUnitCode(userFullInfo.getEmpPosUnitCode());
userInfoDetails.setEmpPosUnitName(userFullInfo.getEmpPosUnitName());
return userInfoDetails;
}

}

+ 19
- 21
pmapi/src/main/java/com/ningdatech/pmapi/user/manage/UserAuthLoginManage.java Переглянути файл

@@ -43,8 +43,8 @@ public class UserAuthLoginManage {
/**
* 根据用户id 获取用户全量信息
*
* @param userId
* @return
* @param userId /
* @return /
*/
public UserFullInfoDTO getUserFullInfo(Long userId) {
UserInfo userInfo = iUserInfoService.getById(userId);
@@ -53,15 +53,15 @@ public class UserAuthLoginManage {
}
// 返回用户全量信息
UserFullInfoDTO userFullInfoDTO = new UserFullInfoDTO();
userFullInfoDTOAssembler(userInfo, userFullInfoDTO);
userFullInfoAssembler(userInfo, userFullInfoDTO);
return userFullInfoDTO;
}

/**
* 根据用户名获取
*
* @param username
* @return
* @param username /
* @return /
*/
public UserFullInfoDTO queryUserInfoInPasswordAuth(String username) {
// TODO 目前账号密码登陆测试使用 强制用户登录 userId 1L
@@ -71,15 +71,15 @@ public class UserAuthLoginManage {
}
// 返回用户全量信息
UserFullInfoDTO userFullInfoDTO = new UserFullInfoDTO();
userFullInfoDTOAssembler(userInfo, userFullInfoDTO);
userFullInfoAssembler(userInfo, userFullInfoDTO);
return userFullInfoDTO;
}

/**
* 根据手机号获取
*
* @param phoneNo
* @return
* @param phoneNo /
* @return /
*/
public UserFullInfoDTO queryUserInfoInPhoneNoAuth(String phoneNo) {
UserInfo userInfo = iUserInfoService.getOne(Wrappers.lambdaQuery(UserInfo.class)
@@ -89,15 +89,15 @@ public class UserAuthLoginManage {
}
// 返回用户全量信息
UserFullInfoDTO userFullInfoDTO = new UserFullInfoDTO();
userFullInfoDTOAssembler(userInfo, userFullInfoDTO);
userFullInfoAssembler(userInfo, userFullInfoDTO);
return userFullInfoDTO;
}

/**
* 根据accountId(浙政钉扫码登陆)
*
* @param accountId
* @return
* @param accountId /
* @return /
*/
public UserFullInfoDTO queryUserInfoInAccountIdAuth(String accountId) {

@@ -109,12 +109,12 @@ public class UserAuthLoginManage {
}
// 返回用户全量信息
UserFullInfoDTO userFullInfoDTO = new UserFullInfoDTO();
userFullInfoDTOAssembler(userInfo, userFullInfoDTO);
userFullInfoAssembler(userInfo, userFullInfoDTO);
return userFullInfoDTO;
}


private void userFullInfoDTOAssembler(UserInfo userInfo, UserFullInfoDTO userFullInfoDTO) {
private void userFullInfoAssembler(UserInfo userInfo, UserFullInfoDTO userFullInfoDTO) {
// 获取浙政钉雇员信息 组织信息
String employeeCode = userInfo.getEmployeeCode();
if (StringUtils.isNotBlank(employeeCode)) {
@@ -128,9 +128,7 @@ public class UserAuthLoginManage {
// 装配用户任职所在单位
String empPosUnitCode = dingEmployeeInfo.getEmpPosUnitCode();
if (StringUtils.isNotBlank(empPosUnitCode)) {
DingOrganization dingOrganization = iDingOrganizationService
.getOne(Wrappers.lambdaQuery(DingOrganization.class)
.eq(DingOrganization::getOrganizationCode, empPosUnitCode));
DingOrganization dingOrganization = iDingOrganizationService.getByOrgCode(empPosUnitCode);
if (Objects.nonNull(dingOrganization)) {
userFullInfoDTO.setEmpPosUnitCode(empPosUnitCode);
userFullInfoDTO.setEmpPosUnitName(dingOrganization.getOrganizationName());
@@ -139,9 +137,9 @@ public class UserAuthLoginManage {

// 装配用户所在orgCode
String organizationCode = dingEmployeeInfo.getOrganizationCode();
List<DingOrganization> dingOrganizationList = iDingOrganizationService
.list(Wrappers.lambdaQuery(DingOrganization.class)
.eq(DingOrganization::getOrganizationCode, organizationCode));
List<DingOrganization> dingOrganizationList = iDingOrganizationService.list(Wrappers
.lambdaQuery(DingOrganization.class)
.eq(DingOrganization::getOrganizationCode, organizationCode));
if (CollectionUtil.isNotEmpty(dingOrganizationList)) {
DingOrganization dingOrganization = dingOrganizationList.get(0);
userFullInfoDTO.setOrganizationCode(dingOrganization.getOrganizationCode());
@@ -174,7 +172,7 @@ public class UserAuthLoginManage {
userFullInfoDTO.setEmployeeCode(employeeCode);
userFullInfoDTO.setUsername(userInfo.getRealName());
userFullInfoDTO.setMobile(userInfo.getMobile());
userFullInfoDTO.setAccountId(userInfo.getAccountId());
}

public UserFullInfoDTO getUserFullInfoByEmployeeCode(String employeeCode) {
@@ -185,7 +183,7 @@ public class UserAuthLoginManage {
}
// 返回用户全量信息
UserFullInfoDTO userFullInfoDTO = new UserFullInfoDTO();
userFullInfoDTOAssembler(userInfo, userFullInfoDTO);
userFullInfoAssembler(userInfo, userFullInfoDTO);
return userFullInfoDTO;
}
}

+ 35
- 2
pmapi/src/main/java/com/ningdatech/pmapi/user/manage/UserInfoManage.java Переглянути файл

@@ -10,6 +10,7 @@ import com.ningdatech.basic.model.PageVo;
import com.ningdatech.pmapi.common.constant.RegionConst;
import com.ningdatech.pmapi.common.helper.RegionCacheHelper;
import com.ningdatech.pmapi.common.helper.UserInfoHelper;
import com.ningdatech.pmapi.common.util.BizUtils;
import com.ningdatech.pmapi.organization.model.entity.DingEmployeeInfo;
import com.ningdatech.pmapi.organization.model.entity.DingOrganization;
import com.ningdatech.pmapi.organization.service.IDingEmployeeInfoService;
@@ -19,6 +20,7 @@ import com.ningdatech.pmapi.sys.model.entity.UserRole;
import com.ningdatech.pmapi.sys.service.IRoleService;
import com.ningdatech.pmapi.sys.service.IUserRoleService;
import com.ningdatech.pmapi.user.constant.UserAvailableEnum;
import com.ningdatech.pmapi.user.convert.UserInfoConvertor;
import com.ningdatech.pmapi.user.entity.UserInfo;
import com.ningdatech.pmapi.user.model.po.ReqUserDetailEditPO;
import com.ningdatech.pmapi.user.model.po.ReqUserDetailPO;
@@ -27,11 +29,17 @@ import com.ningdatech.pmapi.user.model.po.ReqUserInfoListPO;
import com.ningdatech.pmapi.user.model.vo.ResUserDetailVO;
import com.ningdatech.pmapi.user.model.vo.ResUserInfoListVO;
import com.ningdatech.pmapi.user.model.vo.UserRoleVO;
import com.ningdatech.pmapi.user.security.auth.credential.CredentialAuthToken;
import com.ningdatech.pmapi.user.security.auth.model.UserFullInfoDTO;
import com.ningdatech.pmapi.user.security.auth.model.UserInfoDetails;
import com.ningdatech.pmapi.user.service.IUserInfoService;
import com.ningdatech.pmapi.user.util.LoginUserUtil;
import com.wflow.workflow.bean.dto.ProcessInstanceUserDto;
import lombok.RequiredArgsConstructor;
import org.springframework.security.core.context.SecurityContextImpl;
import org.springframework.session.Session;
import org.springframework.session.SessionRepository;
import org.springframework.session.data.redis.RedisIndexedSessionRepository;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;

@@ -53,8 +61,9 @@ public class UserInfoManage {
private final IUserRoleService iUserRoleService;
private final IRoleService iRoleService;
private final UserInfoHelper userInfoHelper;
private final RedisIndexedSessionRepository redisIndexedSessionRepository;
private final RegionCacheHelper regionCacheHelper;
private final UserAuthLoginManage userAuthLoginManage;

public PageVo<ResUserInfoListVO> list(ReqUserInfoListPO req) {
PageVo<ResUserInfoListVO> pageVo = new PageVo<>();
@@ -206,7 +215,7 @@ public class UserInfoManage {
return new ArrayList<>();
}
return iUserInfoService.list(Wrappers.lambdaQuery(UserInfo.class)
.in(UserInfo::getId, compliantUserIdList))
.in(UserInfo::getId, compliantUserIdList))
.stream().map(UserInfo::getId).collect(Collectors.toList());

}
@@ -331,6 +340,8 @@ public class UserInfoManage {
}).collect(Collectors.toList());
iUserRoleService.saveBatch(userRoleList);
}
// 刷新用户权限
refreshSession(userId);
}

/**
@@ -490,4 +501,26 @@ public class UserInfoManage {
}
return processInstanceUserDto;
}

public void refreshSession(Long userId) {
UserFullInfoDTO ufi = userAuthLoginManage.getUserFullInfo(userId);
List<String> sessionIds = new ArrayList<>();
BizUtils.notNull(ufi.getIdentifier(), w -> sessionIds.addAll(redisIndexedSessionRepository.findByPrincipalName(w).keySet()));
BizUtils.notNull(ufi.getMobile(), w -> sessionIds.addAll(redisIndexedSessionRepository.findByPrincipalName(w).keySet()));
BizUtils.notNull(ufi.getAccountId(), w -> sessionIds.addAll(redisIndexedSessionRepository.findByPrincipalName(w.toString()).keySet()));
if (sessionIds.isEmpty()) {
return;
}
SessionRepository redisSessionRepository = redisIndexedSessionRepository;
UserInfoDetails details = UserInfoConvertor.toUserInfoDetails(ufi);
CredentialAuthToken cat = new CredentialAuthToken(details, details.getPassword(), details.getAuthorities());
sessionIds.forEach(sessionId -> {
Session session = redisIndexedSessionRepository.findById(sessionId);
SecurityContextImpl context = session.getAttribute("SPRING_SECURITY_CONTEXT");
context.setAuthentication(cat);
session.setAttribute("SPRING_SECURITY_CONTEXT", context);
redisSessionRepository.save(session);
});
}

}

+ 9
- 23
pmapi/src/main/java/com/ningdatech/pmapi/user/security/auth/credential/CredentialLoginUserDetailService.java Переглянути файл

@@ -2,6 +2,7 @@ package com.ningdatech.pmapi.user.security.auth.credential;


import com.ningdatech.pmapi.user.constant.LoginTypeEnum;
import com.ningdatech.pmapi.user.convert.UserInfoConvertor;
import com.ningdatech.pmapi.user.manage.UserAuthLoginManage;
import com.ningdatech.pmapi.user.security.auth.constants.UserDeatilsServiceConstant;
import com.ningdatech.pmapi.user.security.auth.model.UserFullInfoDTO;
@@ -32,25 +33,25 @@ public class CredentialLoginUserDetailService implements UserDetailsService {
String loginTypeStr = split[1];
LoginTypeEnum loginTypeEnum = LoginTypeEnum.valueOf(loginTypeStr);

UserFullInfoDTO userFullInfoDTO = null;
UserFullInfoDTO userFullInfo;
switch (loginTypeEnum) {
case PHONE_VERIFICATION_CODE_LOGIN: {
userFullInfoDTO = userAuthLoginManage.queryUserInfoInPhoneNoAuth(username);
if (Objects.isNull(userFullInfoDTO)) {
userFullInfo = userAuthLoginManage.queryUserInfoInPhoneNoAuth(username);
if (Objects.isNull(userFullInfo)) {
throw new CommonLoginException("改手机号未绑定用户");
}
}
break;
case USERNAME_PASSWORD_LOGIN: {
userFullInfoDTO = userAuthLoginManage.queryUserInfoInPasswordAuth(username);
if (Objects.isNull(userFullInfoDTO)) {
userFullInfo = userAuthLoginManage.queryUserInfoInPasswordAuth(username);
if (Objects.isNull(userFullInfo)) {
throw new UsernameNotFoundException(String.format("%s user not exist", username));
}
}
break;
case DING_QR_LOGIN: {
userFullInfoDTO = userAuthLoginManage.queryUserInfoInAccountIdAuth(username);
if (Objects.isNull(userFullInfoDTO)) {
userFullInfo = userAuthLoginManage.queryUserInfoInAccountIdAuth(username);
if (Objects.isNull(userFullInfo)) {
throw new CommonLoginException("浙政钉账号无法登陆");
}
}
@@ -59,21 +60,6 @@ public class CredentialLoginUserDetailService implements UserDetailsService {
throw new UsernameNotFoundException(String.format("%s user not exist", username));
}
}

UserInfoDetails userInfoDetails = new UserInfoDetails();
userInfoDetails.setUserId(userFullInfoDTO.getUserId());
userInfoDetails.setUsername(userFullInfoDTO.getUsername());
userInfoDetails.setRealName(userFullInfoDTO.getRealName());
userInfoDetails.setUserRoleList(userFullInfoDTO.getUserRoleList());
userInfoDetails.setRegionCode(userFullInfoDTO.getRegionCode());
userInfoDetails.setRegionLevel(userFullInfoDTO.getRegionLevel());
userInfoDetails.setIdentifier(userFullInfoDTO.getIdentifier());
userInfoDetails.setPassword(userFullInfoDTO.getCredential());
userInfoDetails.setEmployeeCode(userFullInfoDTO.getEmployeeCode());
userInfoDetails.setOrganizationCode(userFullInfoDTO.getOrganizationCode());
userInfoDetails.setOrganizationName(userFullInfoDTO.getOrganizationName());
userInfoDetails.setEmpPosUnitCode(userFullInfoDTO.getEmpPosUnitCode());
userInfoDetails.setEmpPosUnitName(userFullInfoDTO.getEmpPosUnitName());
return userInfoDetails;
return UserInfoConvertor.toUserInfoDetails(userFullInfo);
}
}

+ 2
- 0
pmapi/src/main/java/com/ningdatech/pmapi/user/security/auth/model/UserFullInfoDTO.java Переглянути файл

@@ -71,6 +71,8 @@ public class UserFullInfoDTO {
*/
private List<Role> userRoleList;

private Long accountId;

/**
* 取最高的权限
*


Завантаження…
Відмінити
Зберегти