增加了mongo用户登录模块
This commit is contained in:
parent
194dc83b72
commit
8f298947db
@ -49,6 +49,10 @@ public class ServerProperties {
|
||||
* 初始化
|
||||
*/
|
||||
private ServerInitProperties init;
|
||||
/**
|
||||
* 主节点
|
||||
*/
|
||||
private Boolean masterNode;
|
||||
|
||||
public Integer getPort() {
|
||||
return port;
|
||||
@ -114,6 +118,14 @@ public class ServerProperties {
|
||||
this.init = init;
|
||||
}
|
||||
|
||||
public Boolean getMasterNode() {
|
||||
return masterNode == null ? false : masterNode;
|
||||
}
|
||||
|
||||
public void setMasterNode(Boolean masterNode) {
|
||||
this.masterNode = masterNode;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
final StringBuilder sb = new StringBuilder("{");
|
||||
@ -131,6 +143,10 @@ public class ServerProperties {
|
||||
.append(defaultIndexPage).append('\"');
|
||||
sb.append(",\"defaultHomePage\":\"")
|
||||
.append(defaultHomePage).append('\"');
|
||||
sb.append(",\"init\":")
|
||||
.append(init);
|
||||
sb.append(",\"masterNode\":")
|
||||
.append(masterNode);
|
||||
sb.append('}');
|
||||
return sb.toString();
|
||||
}
|
||||
|
@ -0,0 +1,40 @@
|
||||
package ink.wgink.util.thread;
|
||||
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
import java.util.concurrent.ExecutorService;
|
||||
import java.util.concurrent.SynchronousQueue;
|
||||
import java.util.concurrent.ThreadPoolExecutor;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
|
||||
/**
|
||||
* @ClassName: CachedThreadPoolUtil
|
||||
* @Description: 缓存线程池
|
||||
* @Author: wanggeng
|
||||
* @Date: 2022/5/20 00:27
|
||||
* @Version: 1.0
|
||||
*/
|
||||
public class CachedThreadPoolUtil {
|
||||
|
||||
private static final Logger LOG = LoggerFactory.getLogger(CachedThreadPoolUtil.class);
|
||||
|
||||
/**
|
||||
* 最多66个线程,保持60s
|
||||
*/
|
||||
private static ExecutorService executorService = new ThreadPoolExecutor(0, 66,
|
||||
60L, TimeUnit.SECONDS,
|
||||
new SynchronousQueue<>());
|
||||
|
||||
/**
|
||||
* 执行线程
|
||||
*
|
||||
* @param runnable
|
||||
*/
|
||||
public static void execute(Runnable runnable) {
|
||||
LOG.debug("****************** execute");
|
||||
executorService.execute(runnable);
|
||||
}
|
||||
|
||||
|
||||
}
|
@ -1,44 +1,21 @@
|
||||
package ink.wgink.login.base.authentication.user;
|
||||
|
||||
import ink.wgink.interfaces.consts.ISystemConstant;
|
||||
import ink.wgink.interfaces.expand.login.ILoginHandlerService;
|
||||
import ink.wgink.interfaces.group.IGroupUserBaseService;
|
||||
import ink.wgink.interfaces.position.IPositionUserBaseService;
|
||||
import ink.wgink.interfaces.role.IRoleBaseService;
|
||||
import ink.wgink.interfaces.role.IRoleMenuBaseService;
|
||||
import ink.wgink.interfaces.role.IRolePermissionBaseService;
|
||||
import ink.wgink.interfaces.role.IRoleUserBaseService;
|
||||
import ink.wgink.interfaces.user.mongo.IMongoLoginUserService;
|
||||
import ink.wgink.login.base.consts.IUserCenterConst;
|
||||
import ink.wgink.login.base.enums.LoginTypeEnum;
|
||||
import ink.wgink.login.base.exceptions.UserAuthenticationException;
|
||||
import ink.wgink.login.base.service.user.UserLoginService;
|
||||
import ink.wgink.pojo.bos.LoginUser;
|
||||
import ink.wgink.pojo.bos.RoleGrantedAuthorityBO;
|
||||
import ink.wgink.pojo.dtos.department.DepartmentSimpleDTO;
|
||||
import ink.wgink.pojo.dtos.group.GroupSimpleDTO;
|
||||
import ink.wgink.pojo.dtos.position.PositionSimpleDTO;
|
||||
import ink.wgink.pojo.dtos.role.RoleSimpleDTO;
|
||||
import ink.wgink.pojo.pos.DepartmentPO;
|
||||
import ink.wgink.pojo.pos.GroupPO;
|
||||
import ink.wgink.pojo.pos.PositionPO;
|
||||
import ink.wgink.pojo.pos.RolePO;
|
||||
import ink.wgink.properties.AccessControlProperties;
|
||||
import ink.wgink.service.department.service.IDepartmentUserService;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.security.authentication.AuthenticationProvider;
|
||||
import org.springframework.security.core.Authentication;
|
||||
import org.springframework.security.core.AuthenticationException;
|
||||
import org.springframework.security.core.GrantedAuthority;
|
||||
import org.springframework.security.core.userdetails.UserDetailsService;
|
||||
import org.springframework.security.crypto.password.PasswordEncoder;
|
||||
|
||||
import javax.servlet.http.HttpSession;
|
||||
import java.util.ArrayList;
|
||||
import java.util.LinkedHashSet;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
|
||||
/**
|
||||
* When you feel like quitting. Think about why you started
|
||||
@ -55,15 +32,8 @@ public class UserAuthenticationProvider implements AuthenticationProvider {
|
||||
private UserDetailsService userDetailsService;
|
||||
private PasswordEncoder passwordEncoder;
|
||||
private UserLoginService userLoginService;
|
||||
private IRoleBaseService roleBaseService;
|
||||
private IRoleUserBaseService roleUserBaseService;
|
||||
private IRoleMenuBaseService roleMenuBaseService;
|
||||
private IRolePermissionBaseService rolePermissionService;
|
||||
private IGroupUserBaseService groupUserBaseService;
|
||||
private IPositionUserBaseService positionUserBaseService;
|
||||
private ILoginHandlerService loginHandler;
|
||||
private IDepartmentUserService departmentUserService;
|
||||
private AccessControlProperties accessControlProperties;
|
||||
private IMongoLoginUserService mongoLoginUserService;
|
||||
private HttpSession httpSession;
|
||||
|
||||
@Override
|
||||
@ -71,74 +41,28 @@ public class UserAuthenticationProvider implements AuthenticationProvider {
|
||||
UserAuthenticationToken userAuthenticationToken = (UserAuthenticationToken) authentication;
|
||||
String username = userAuthenticationToken.getPrincipal().toString();
|
||||
httpSession.setAttribute(IUserCenterConst.LOGIN_USERNAME, username);
|
||||
LoginUser loginUser = (LoginUser) userDetailsService.loadUserByUsername(username);
|
||||
LoginUser loginUser = null;
|
||||
if (mongoLoginUserService != null) {
|
||||
// mongo 存在,走 MongoDB
|
||||
loginUser = mongoLoginUserService.getByUsername(username);
|
||||
}
|
||||
// 当loginUser为空时,查询数据库,确保用户不存在
|
||||
if (loginUser == null) {
|
||||
loginUser = (LoginUser) userDetailsService.loadUserByUsername(username);
|
||||
// 设置登录用户信息
|
||||
userLoginService.setLoginUserInfo(loginUser);
|
||||
}
|
||||
if (!passwordEncoder.matches(userAuthenticationToken.getCredentials().toString(), loginUser.getPassword())) {
|
||||
throw new UserAuthenticationException("用户名或密码错误");
|
||||
}
|
||||
if (loginUser.getAuthorities().isEmpty()) {
|
||||
throw new UserAuthenticationException(loginUser.getUsername() + "用户无任何角色");
|
||||
}
|
||||
// 清空session中的错误信息
|
||||
httpSession.removeAttribute(IUserCenterConst.ERROR_MESSAGE);
|
||||
httpSession.removeAttribute(IUserCenterConst.LOGIN_USERNAME);
|
||||
LOG.debug("set authority");
|
||||
Set<GrantedAuthority> grantedAuthorities = new LinkedHashSet<>();
|
||||
// 超管用户
|
||||
boolean isAdmin = false;
|
||||
if (StringUtils.equalsIgnoreCase(ISystemConstant.ADMIN, loginUser.getUsername())) {
|
||||
grantedAuthorities.add(new RoleGrantedAuthorityBO(ISystemConstant.ADMIN));
|
||||
} else {
|
||||
List<RolePO> rolePOs = null;
|
||||
// 先处理授权,再创建对象,否则 grantedAuthorities 中无法赋值
|
||||
if (roleUserBaseService != null) {
|
||||
LOG.debug("check is admin");
|
||||
List<String> roleIds = roleUserBaseService.listRoleIdByUserId(loginUser.getUserId());
|
||||
isAdmin = hasAdmin(roleIds);
|
||||
if (!isAdmin) {
|
||||
LOG.debug("set role, not admin");
|
||||
rolePOs = roleUserBaseService.listRolePOByRoleIds(roleIds);
|
||||
removalDuplicateRole(rolePOs);
|
||||
grantedAuthorities.addAll(loadRoleAuthority(rolePOs));
|
||||
if (grantedAuthorities.isEmpty()) {
|
||||
throw new UserAuthenticationException(loginUser.getUsername() + "用户无任何角色");
|
||||
}
|
||||
}
|
||||
}
|
||||
// 标记超管
|
||||
if (isAdmin) {
|
||||
LOG.debug("mark admin role");
|
||||
grantedAuthorities.add(new RoleGrantedAuthorityBO(ISystemConstant.ADMIN));
|
||||
} else {
|
||||
// 非超管设置其他信息
|
||||
if (rolePOs != null) {
|
||||
List<RoleSimpleDTO> roleSimpleDTOs = roleUserBaseService.listSimple(rolePOs);
|
||||
loginUser.setRoles(roleSimpleDTOs);
|
||||
}
|
||||
|
||||
LOG.debug("set department");
|
||||
List<DepartmentPO> departmentPOs = departmentUserService.listDepartmentPOByUserId(loginUser.getUserId());
|
||||
List<DepartmentSimpleDTO> departmentSimpleDTOs = departmentUserService.listSimple(departmentPOs);
|
||||
loginUser.setDepartments(departmentSimpleDTOs);
|
||||
|
||||
if (groupUserBaseService != null) {
|
||||
LOG.debug("set group");
|
||||
List<GroupPO> groupPOs = groupUserBaseService.listGroupPOByUserId(loginUser.getUserId());
|
||||
List<GroupSimpleDTO> groupSimpleDTOs = groupUserBaseService.listSimple(groupPOs);
|
||||
loginUser.setGroups(groupSimpleDTOs);
|
||||
}
|
||||
if (positionUserBaseService != null) {
|
||||
LOG.debug("set position");
|
||||
List<PositionPO> positionPOs = positionUserBaseService.listPositionPOByUserId(loginUser.getUserId());
|
||||
List<PositionSimpleDTO> positionSimpleDTOs = positionUserBaseService.listSimple(positionPOs);
|
||||
loginUser.setPositions(positionSimpleDTOs);
|
||||
}
|
||||
}
|
||||
}
|
||||
// 设置权限
|
||||
loginUser.setAuthorities(grantedAuthorities);
|
||||
// 登录逻辑处理
|
||||
loginHandler(loginUser);
|
||||
// 设置数据权限,排除超管
|
||||
if (!StringUtils.equalsIgnoreCase(ISystemConstant.ADMIN, loginUser.getUsername()) && !isAdmin) {
|
||||
LOG.debug("set data authority");
|
||||
userLoginService.setUserDataAuthority(loginUser);
|
||||
}
|
||||
// 更新登录信息
|
||||
userLoginService.updateUserLoginInfo(loginUser.getUserId(), loginUser.getUserName(), LoginTypeEnum.USERNAME_AND_PASSWORD.getValue());
|
||||
UserAuthenticationToken userAuthenticationTokenResult = new UserAuthenticationToken(loginUser, null, loginUser.getAuthorities());
|
||||
@ -146,20 +70,6 @@ public class UserAuthenticationProvider implements AuthenticationProvider {
|
||||
return userAuthenticationTokenResult;
|
||||
}
|
||||
|
||||
/**
|
||||
* 是否超管
|
||||
*
|
||||
* @param roleIds
|
||||
* @return
|
||||
*/
|
||||
private boolean hasAdmin(List<String> roleIds) {
|
||||
for (String roleId : roleIds) {
|
||||
if (StringUtils.equals(ISystemConstant.ADMIN, roleId)) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* 登录处理
|
||||
@ -177,62 +87,6 @@ public class UserAuthenticationProvider implements AuthenticationProvider {
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 角色授权列表
|
||||
*
|
||||
* @param rolePOs
|
||||
* @return
|
||||
*/
|
||||
private List<GrantedAuthority> loadRoleAuthority(List<RolePO> rolePOs) {
|
||||
List<GrantedAuthority> grantedAuthorities = new ArrayList<>();
|
||||
if (null != rolePOs && !rolePOs.isEmpty()) {
|
||||
// 设置菜单权限
|
||||
rolePOs.forEach((rolePO) -> {
|
||||
List<String> menuUrls = roleMenuBaseService.listMenuUrl(rolePO.getRoleId());
|
||||
List<String> inserts = new ArrayList<>();
|
||||
List<String> deletes = new ArrayList<>();
|
||||
List<String> updates = new ArrayList<>();
|
||||
List<String> queries = new ArrayList<>();
|
||||
if (accessControlProperties.getRolePermission()) {
|
||||
inserts.addAll(rolePermissionService.listPermissionUrl(rolePO.getRoleId(), IRolePermissionBaseService.PERMISSION_INSERT));
|
||||
deletes.addAll(rolePermissionService.listPermissionUrl(rolePO.getRoleId(), IRolePermissionBaseService.PERMISSION_DELETE));
|
||||
updates.addAll(rolePermissionService.listPermissionUrl(rolePO.getRoleId(), IRolePermissionBaseService.PERMISSION_UPDATE));
|
||||
queries.addAll(rolePermissionService.listPermissionUrl(rolePO.getRoleId(), IRolePermissionBaseService.PERMISSION_QUERY));
|
||||
}
|
||||
grantedAuthorities.add(new RoleGrantedAuthorityBO(rolePO.getRoleId(), rolePO.getRoleName(), menuUrls, inserts, deletes, updates, queries));
|
||||
});
|
||||
|
||||
}
|
||||
return grantedAuthorities;
|
||||
}
|
||||
|
||||
/**
|
||||
* 删除重复的角色
|
||||
*
|
||||
* @param rolePOs
|
||||
*/
|
||||
private void removalDuplicateRole(List<RolePO> rolePOs) {
|
||||
if (rolePOs == null || rolePOs.isEmpty()) {
|
||||
return;
|
||||
}
|
||||
for (int i = 0; i < rolePOs.size(); i++) {
|
||||
RolePO rolePO = rolePOs.get(i);
|
||||
boolean isExist = false;
|
||||
for (int j = i + 1; j < rolePOs.size(); j++) {
|
||||
if (StringUtils.equals(rolePO.getRoleId(), rolePOs.get(j).getRoleId())) {
|
||||
isExist = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (isExist) {
|
||||
rolePOs.remove(i);
|
||||
i--;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean supports(Class<?> authentication) {
|
||||
return UserAuthenticationToken.class.isAssignableFrom(authentication);
|
||||
@ -250,39 +104,15 @@ public class UserAuthenticationProvider implements AuthenticationProvider {
|
||||
this.userLoginService = userLoginService;
|
||||
}
|
||||
|
||||
public void setRoleUserBaseService(IRoleUserBaseService roleUserBaseService) {
|
||||
this.roleUserBaseService = roleUserBaseService;
|
||||
}
|
||||
|
||||
public void setRoleMenuBaseService(IRoleMenuBaseService roleMenuBaseService) {
|
||||
this.roleMenuBaseService = roleMenuBaseService;
|
||||
}
|
||||
|
||||
public void setRolePermissionService(IRolePermissionBaseService rolePermissionService) {
|
||||
this.rolePermissionService = rolePermissionService;
|
||||
}
|
||||
|
||||
public void setGroupUserBaseService(IGroupUserBaseService groupUserBaseService) {
|
||||
this.groupUserBaseService = groupUserBaseService;
|
||||
}
|
||||
|
||||
public void setPositionUserBaseService(IPositionUserBaseService positionUserBaseService) {
|
||||
this.positionUserBaseService = positionUserBaseService;
|
||||
public void setHttpSession(HttpSession httpSession) {
|
||||
this.httpSession = httpSession;
|
||||
}
|
||||
|
||||
public void setLoginHandler(ILoginHandlerService loginHandler) {
|
||||
this.loginHandler = loginHandler;
|
||||
}
|
||||
|
||||
public void setDepartmentUserService(IDepartmentUserService departmentUserService) {
|
||||
this.departmentUserService = departmentUserService;
|
||||
}
|
||||
|
||||
public void setAccessControlProperties(AccessControlProperties accessControlProperties) {
|
||||
this.accessControlProperties = accessControlProperties;
|
||||
}
|
||||
|
||||
public void setHttpSession(HttpSession httpSession) {
|
||||
this.httpSession = httpSession;
|
||||
public void setMongoLoginUserService(IMongoLoginUserService mongoLoginUserService) {
|
||||
this.mongoLoginUserService = mongoLoginUserService;
|
||||
}
|
||||
}
|
||||
|
@ -2,19 +2,13 @@ package ink.wgink.login.base.security;
|
||||
|
||||
import ink.wgink.common.handler.AccessDenyHandler;
|
||||
import ink.wgink.interfaces.expand.login.ILoginHandlerService;
|
||||
import ink.wgink.interfaces.group.IGroupUserBaseService;
|
||||
import ink.wgink.interfaces.position.IPositionUserBaseService;
|
||||
import ink.wgink.interfaces.role.IRoleMenuBaseService;
|
||||
import ink.wgink.interfaces.role.IRolePermissionBaseService;
|
||||
import ink.wgink.interfaces.role.IRoleUserBaseService;
|
||||
import ink.wgink.interfaces.user.mongo.IMongoLoginUserService;
|
||||
import ink.wgink.login.base.handler.LoginFailureHandler;
|
||||
import ink.wgink.login.base.handler.LogoutHandler;
|
||||
import ink.wgink.login.base.security.user.UserSecurityConfig;
|
||||
import ink.wgink.login.base.service.user.UserDetailServiceImpl;
|
||||
import ink.wgink.login.base.service.user.UserLoginService;
|
||||
import ink.wgink.properties.AccessControlProperties;
|
||||
import ink.wgink.properties.BaseProperties;
|
||||
import ink.wgink.service.department.service.IDepartmentUserService;
|
||||
import org.apache.commons.lang3.ArrayUtils;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
@ -44,25 +38,13 @@ public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
|
||||
@Autowired
|
||||
private UserLoginService userLoginService;
|
||||
@Autowired(required = false)
|
||||
private IRoleUserBaseService roleUserBaseService;
|
||||
@Autowired(required = false)
|
||||
private IRoleMenuBaseService roleMenuBaseService;
|
||||
@Autowired(required = false)
|
||||
private IRolePermissionBaseService rolePermissionService;
|
||||
@Autowired(required = false)
|
||||
private IGroupUserBaseService groupUserBaseService;
|
||||
@Autowired(required = false)
|
||||
private IPositionUserBaseService positionUserBaseService;
|
||||
@Autowired(required = false)
|
||||
private ILoginHandlerService loginHandler;
|
||||
@Autowired
|
||||
private IDepartmentUserService departmentUserService;
|
||||
@Autowired
|
||||
private AccessControlProperties accessControlProperties;
|
||||
@Autowired
|
||||
private HttpSession httpSession;
|
||||
@Autowired
|
||||
private PasswordEncoder passwordEncoder;
|
||||
@Autowired(required = false)
|
||||
private IMongoLoginUserService mongoLoginUserService;
|
||||
|
||||
@Override
|
||||
protected void configure(HttpSecurity http) throws Exception {
|
||||
@ -136,15 +118,9 @@ public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
|
||||
userSecurityConfig.setLoginProcessUrl(baseProperties.getLoginProcess());
|
||||
userSecurityConfig.setLoginFailureHandler(loginFailureHandler);
|
||||
userSecurityConfig.setUserLoginService(userLoginService);
|
||||
userSecurityConfig.setRoleUserBaseService(roleUserBaseService);
|
||||
userSecurityConfig.setRoleMenuBaseService(roleMenuBaseService);
|
||||
userSecurityConfig.setRolePermissionService(rolePermissionService);
|
||||
userSecurityConfig.setGroupUserBaseService(groupUserBaseService);
|
||||
userSecurityConfig.setPositionUserBaseService(positionUserBaseService);
|
||||
userSecurityConfig.setLoginHandler(loginHandler);
|
||||
userSecurityConfig.setDepartmentUserService(departmentUserService);
|
||||
userSecurityConfig.setAccessControlProperties(accessControlProperties);
|
||||
userSecurityConfig.setHttpSession(httpSession);
|
||||
userSecurityConfig.setMongoLoginUserService(mongoLoginUserService);
|
||||
http.apply(userSecurityConfig);
|
||||
}
|
||||
|
||||
|
@ -1,18 +1,12 @@
|
||||
package ink.wgink.login.base.security.user;
|
||||
|
||||
import ink.wgink.interfaces.expand.login.ILoginHandlerService;
|
||||
import ink.wgink.interfaces.group.IGroupUserBaseService;
|
||||
import ink.wgink.interfaces.position.IPositionUserBaseService;
|
||||
import ink.wgink.interfaces.role.IRoleMenuBaseService;
|
||||
import ink.wgink.interfaces.role.IRolePermissionBaseService;
|
||||
import ink.wgink.interfaces.role.IRoleUserBaseService;
|
||||
import ink.wgink.interfaces.user.mongo.IMongoLoginUserService;
|
||||
import ink.wgink.login.base.authentication.user.UserAuthenticationFilter;
|
||||
import ink.wgink.login.base.authentication.user.UserAuthenticationProvider;
|
||||
import ink.wgink.login.base.handler.LoginFailureHandler;
|
||||
import ink.wgink.login.base.service.user.UserDetailServiceImpl;
|
||||
import ink.wgink.login.base.service.user.UserLoginService;
|
||||
import ink.wgink.properties.AccessControlProperties;
|
||||
import ink.wgink.service.department.service.IDepartmentUserService;
|
||||
import org.springframework.security.authentication.AuthenticationManager;
|
||||
import org.springframework.security.config.annotation.SecurityConfigurerAdapter;
|
||||
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
|
||||
@ -39,15 +33,9 @@ public class UserSecurityConfig extends SecurityConfigurerAdapter<DefaultSecurit
|
||||
private String loginProcessUrl;
|
||||
private PasswordEncoder passwordEncoder;
|
||||
private UserLoginService userLoginService;
|
||||
private IRoleUserBaseService roleUserBaseService;
|
||||
private IRoleMenuBaseService roleMenuBaseService;
|
||||
private IRolePermissionBaseService rolePermissionService;
|
||||
private IGroupUserBaseService groupUserBaseService;
|
||||
private IPositionUserBaseService positionUserBaseService;
|
||||
private ILoginHandlerService loginHandler;
|
||||
private IDepartmentUserService departmentUserService;
|
||||
private AccessControlProperties accessControlProperties;
|
||||
private HttpSession httpSession;
|
||||
private IMongoLoginUserService mongoLoginUserService;
|
||||
|
||||
@Override
|
||||
public void configure(HttpSecurity http) throws Exception {
|
||||
@ -61,15 +49,9 @@ public class UserSecurityConfig extends SecurityConfigurerAdapter<DefaultSecurit
|
||||
userAuthenticationProvider.setPasswordEncoder(passwordEncoder);
|
||||
userAuthenticationProvider.setUserDetailsService(userDetailService);
|
||||
userAuthenticationProvider.setUserLoginService(userLoginService);
|
||||
userAuthenticationProvider.setRoleUserBaseService(roleUserBaseService);
|
||||
userAuthenticationProvider.setRoleMenuBaseService(roleMenuBaseService);
|
||||
userAuthenticationProvider.setRolePermissionService(rolePermissionService);
|
||||
userAuthenticationProvider.setGroupUserBaseService(groupUserBaseService);
|
||||
userAuthenticationProvider.setPositionUserBaseService(positionUserBaseService);
|
||||
userAuthenticationProvider.setLoginHandler(loginHandler);
|
||||
userAuthenticationProvider.setDepartmentUserService(departmentUserService);
|
||||
userAuthenticationProvider.setAccessControlProperties(accessControlProperties);
|
||||
userAuthenticationProvider.setHttpSession(httpSession);
|
||||
userAuthenticationProvider.setLoginHandler(loginHandler);
|
||||
userAuthenticationProvider.setMongoLoginUserService(mongoLoginUserService);
|
||||
// 加入SpringSecurity的authentication管理的provider集合当中,并且添加到UsernamePasswordAuthenticationFilter之前
|
||||
http.authenticationProvider(userAuthenticationProvider).addFilterBefore(userAuthenticationFilter, UsernamePasswordAuthenticationFilter.class);
|
||||
}
|
||||
@ -94,39 +76,16 @@ public class UserSecurityConfig extends SecurityConfigurerAdapter<DefaultSecurit
|
||||
this.userLoginService = userLoginService;
|
||||
}
|
||||
|
||||
public void setRoleUserBaseService(IRoleUserBaseService roleUserBaseService) {
|
||||
this.roleUserBaseService = roleUserBaseService;
|
||||
}
|
||||
|
||||
public void setRoleMenuBaseService(IRoleMenuBaseService roleMenuBaseService) {
|
||||
this.roleMenuBaseService = roleMenuBaseService;
|
||||
}
|
||||
|
||||
public void setRolePermissionService(IRolePermissionBaseService rolePermissionService) {
|
||||
this.rolePermissionService = rolePermissionService;
|
||||
}
|
||||
|
||||
public void setGroupUserBaseService(IGroupUserBaseService groupUserBaseService) {
|
||||
this.groupUserBaseService = groupUserBaseService;
|
||||
}
|
||||
|
||||
public void setPositionUserBaseService(IPositionUserBaseService positionUserBaseService) {
|
||||
this.positionUserBaseService = positionUserBaseService;
|
||||
}
|
||||
|
||||
public void setLoginHandler(ILoginHandlerService loginHandler) {
|
||||
this.loginHandler = loginHandler;
|
||||
}
|
||||
|
||||
public void setDepartmentUserService(IDepartmentUserService departmentUserService) {
|
||||
this.departmentUserService = departmentUserService;
|
||||
}
|
||||
|
||||
public void setAccessControlProperties(AccessControlProperties accessControlProperties) {
|
||||
this.accessControlProperties = accessControlProperties;
|
||||
}
|
||||
|
||||
public void setHttpSession(HttpSession httpSession) {
|
||||
this.httpSession = httpSession;
|
||||
}
|
||||
|
||||
public void setMongoLoginUserService(IMongoLoginUserService mongoLoginUserService) {
|
||||
this.mongoLoginUserService = mongoLoginUserService;
|
||||
}
|
||||
}
|
||||
|
@ -4,10 +4,10 @@ import com.alibaba.fastjson.JSONObject;
|
||||
import ink.wgink.exceptions.SearchException;
|
||||
import ink.wgink.interfaces.user.IUserDetailCheckService;
|
||||
import ink.wgink.login.base.exceptions.UserAuthenticationException;
|
||||
import ink.wgink.login.base.util.UserLoginUtil;
|
||||
import ink.wgink.service.user.enums.UserStateEnum;
|
||||
import ink.wgink.service.user.pojo.pos.UserPO;
|
||||
import ink.wgink.service.user.service.IUserService;
|
||||
import ink.wgink.service.user.util.UserUtil;
|
||||
import ink.wgink.util.date.DateUtil;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.security.core.userdetails.UserDetails;
|
||||
@ -58,7 +58,7 @@ public class UserDetailServiceImpl implements UserDetailsService, IUserDetailChe
|
||||
if (DateUtil.isDateExpired(userPO.getUserExpiredDate())) {
|
||||
throw new UserAuthenticationException("账号已经过期");
|
||||
}
|
||||
return UserLoginUtil.createLoginUser(userPO);
|
||||
return UserUtil.createLoginUser(userPO);
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -3,12 +3,29 @@ package ink.wgink.login.base.service.user;
|
||||
import ink.wgink.common.enums.RoleDataRightEnum;
|
||||
import ink.wgink.exceptions.SaveException;
|
||||
import ink.wgink.exceptions.UpdateException;
|
||||
import ink.wgink.interfaces.consts.ISystemConstant;
|
||||
import ink.wgink.interfaces.group.IGroupUserBaseService;
|
||||
import ink.wgink.interfaces.position.IPositionUserBaseService;
|
||||
import ink.wgink.interfaces.role.IRoleDataRightBaseService;
|
||||
import ink.wgink.interfaces.role.IRoleMenuBaseService;
|
||||
import ink.wgink.interfaces.role.IRolePermissionBaseService;
|
||||
import ink.wgink.interfaces.role.IRoleUserBaseService;
|
||||
import ink.wgink.login.base.service.log.ILoginLogService;
|
||||
import ink.wgink.login.base.util.UserLoginUtil;
|
||||
import ink.wgink.pojo.bos.LoginUser;
|
||||
import ink.wgink.pojo.bos.RoleGrantedAuthorityBO;
|
||||
import ink.wgink.pojo.dtos.department.DepartmentSimpleDTO;
|
||||
import ink.wgink.pojo.dtos.group.GroupSimpleDTO;
|
||||
import ink.wgink.pojo.dtos.position.PositionSimpleDTO;
|
||||
import ink.wgink.pojo.dtos.role.RoleSimpleDTO;
|
||||
import ink.wgink.pojo.pos.DepartmentPO;
|
||||
import ink.wgink.pojo.pos.GroupPO;
|
||||
import ink.wgink.pojo.pos.PositionPO;
|
||||
import ink.wgink.pojo.pos.RolePO;
|
||||
import ink.wgink.properties.AccessControlProperties;
|
||||
import ink.wgink.service.department.service.IDepartmentService;
|
||||
import ink.wgink.service.department.service.IDepartmentUserService;
|
||||
import ink.wgink.service.user.enums.UserTypeEnum;
|
||||
import ink.wgink.service.user.service.IUserService;
|
||||
import ink.wgink.util.UUIDUtil;
|
||||
import ink.wgink.util.date.DateUtil;
|
||||
@ -18,12 +35,10 @@ import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.security.core.AuthenticationException;
|
||||
import org.springframework.security.core.GrantedAuthority;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.*;
|
||||
|
||||
/**
|
||||
* When you feel like quitting. Think about why you started
|
||||
@ -49,6 +64,80 @@ public class UserLoginService {
|
||||
private ILoginLogService loginLogService;
|
||||
@Autowired(required = false)
|
||||
private IRoleDataRightBaseService roleDataRightBaseService;
|
||||
@Autowired(required = false)
|
||||
private IRoleUserBaseService roleUserBaseService;
|
||||
@Autowired(required = false)
|
||||
private IRoleMenuBaseService roleMenuBaseService;
|
||||
@Autowired(required = false)
|
||||
private IRolePermissionBaseService rolePermissionService;
|
||||
@Autowired(required = false)
|
||||
private IGroupUserBaseService groupUserBaseService;
|
||||
@Autowired(required = false)
|
||||
private IPositionUserBaseService positionUserBaseService;
|
||||
@Autowired
|
||||
private AccessControlProperties accessControlProperties;
|
||||
|
||||
public void setLoginUserInfo(LoginUser loginUser) {
|
||||
LOG.debug("set authority");
|
||||
Set<GrantedAuthority> grantedAuthorities = new LinkedHashSet<>();
|
||||
boolean isAdmin = false;
|
||||
if (StringUtils.equalsIgnoreCase(ISystemConstant.ADMIN, loginUser.getUsername())) {
|
||||
grantedAuthorities.add(new RoleGrantedAuthorityBO(ISystemConstant.ADMIN));
|
||||
} else {
|
||||
List<RolePO> rolePOs = null;
|
||||
// 先处理授权,再创建对象,否则 grantedAuthorities 中无法赋值
|
||||
if (roleUserBaseService != null) {
|
||||
LOG.debug("check is admin");
|
||||
List<String> roleIds = roleUserBaseService.listRoleIdByUserId(loginUser.getUserId());
|
||||
isAdmin = UserLoginUtil.hasAdmin(roleIds);
|
||||
if (!isAdmin && loginUser.getUserType().equals(UserTypeEnum.SYSTEM.getValue())) {
|
||||
// 非管理员,系统用户设置角色权限
|
||||
LOG.debug("set role, not admin");
|
||||
rolePOs = roleUserBaseService.listRolePOByRoleIds(roleIds);
|
||||
UserLoginUtil.removalDuplicateRole(rolePOs);
|
||||
grantedAuthorities.addAll(loadRoleAuthority(rolePOs));
|
||||
}
|
||||
}
|
||||
// 标记超管
|
||||
if (isAdmin) {
|
||||
LOG.debug("mark admin role");
|
||||
grantedAuthorities.add(new RoleGrantedAuthorityBO(ISystemConstant.ADMIN));
|
||||
} else {
|
||||
// 非超管设置其他信息
|
||||
if (rolePOs != null) {
|
||||
List<RoleSimpleDTO> roleSimpleDTOs = roleUserBaseService.listSimple(rolePOs);
|
||||
loginUser.setRoles(roleSimpleDTOs);
|
||||
}
|
||||
|
||||
LOG.debug("set department");
|
||||
List<DepartmentPO> departmentPOs = departmentUserService.listDepartmentPOByUserId(loginUser.getUserId());
|
||||
List<DepartmentSimpleDTO> departmentSimpleDTOs = departmentUserService.listSimple(departmentPOs);
|
||||
loginUser.setDepartments(departmentSimpleDTOs);
|
||||
|
||||
if (groupUserBaseService != null) {
|
||||
LOG.debug("set group");
|
||||
List<GroupPO> groupPOs = groupUserBaseService.listGroupPOByUserId(loginUser.getUserId());
|
||||
List<GroupSimpleDTO> groupSimpleDTOs = groupUserBaseService.listSimple(groupPOs);
|
||||
loginUser.setGroups(groupSimpleDTOs);
|
||||
}
|
||||
if (positionUserBaseService != null) {
|
||||
LOG.debug("set position");
|
||||
List<PositionPO> positionPOs = positionUserBaseService.listPositionPOByUserId(loginUser.getUserId());
|
||||
List<PositionSimpleDTO> positionSimpleDTOs = positionUserBaseService.listSimple(positionPOs);
|
||||
loginUser.setPositions(positionSimpleDTOs);
|
||||
}
|
||||
}
|
||||
}
|
||||
// 设置数据权限,排除超管
|
||||
if (!StringUtils.equalsIgnoreCase(ISystemConstant.ADMIN, loginUser.getUsername()) && !isAdmin) {
|
||||
// 非管理员,系统用户设置数据权限
|
||||
if (loginUser.getUserType().equals(UserTypeEnum.SYSTEM.getValue())) {
|
||||
LOG.debug("set data authority");
|
||||
setUserDataAuthority(loginUser);
|
||||
}
|
||||
}
|
||||
loginUser.setAuthorities(grantedAuthorities);
|
||||
}
|
||||
|
||||
/**
|
||||
* 设置人员数据权限
|
||||
@ -160,4 +249,33 @@ public class UserLoginService {
|
||||
return roleDataAuthority;
|
||||
}
|
||||
|
||||
/**
|
||||
* 角色授权列表
|
||||
*
|
||||
* @param rolePOs
|
||||
* @return
|
||||
*/
|
||||
private List<GrantedAuthority> loadRoleAuthority(List<RolePO> rolePOs) {
|
||||
List<GrantedAuthority> grantedAuthorities = new ArrayList<>();
|
||||
if (null != rolePOs && !rolePOs.isEmpty()) {
|
||||
// 设置菜单权限
|
||||
rolePOs.forEach((rolePO) -> {
|
||||
List<String> menuUrls = roleMenuBaseService.listMenuUrl(rolePO.getRoleId());
|
||||
List<String> inserts = new ArrayList<>();
|
||||
List<String> deletes = new ArrayList<>();
|
||||
List<String> updates = new ArrayList<>();
|
||||
List<String> queries = new ArrayList<>();
|
||||
if (accessControlProperties.getRolePermission()) {
|
||||
inserts.addAll(rolePermissionService.listPermissionUrl(rolePO.getRoleId(), IRolePermissionBaseService.PERMISSION_INSERT));
|
||||
deletes.addAll(rolePermissionService.listPermissionUrl(rolePO.getRoleId(), IRolePermissionBaseService.PERMISSION_DELETE));
|
||||
updates.addAll(rolePermissionService.listPermissionUrl(rolePO.getRoleId(), IRolePermissionBaseService.PERMISSION_UPDATE));
|
||||
queries.addAll(rolePermissionService.listPermissionUrl(rolePO.getRoleId(), IRolePermissionBaseService.PERMISSION_QUERY));
|
||||
}
|
||||
grantedAuthorities.add(new RoleGrantedAuthorityBO(rolePO.getRoleId(), rolePO.getRoleName(), menuUrls, inserts, deletes, updates, queries));
|
||||
});
|
||||
|
||||
}
|
||||
return grantedAuthorities;
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -1,14 +1,10 @@
|
||||
package ink.wgink.login.base.util;
|
||||
|
||||
import ink.wgink.interfaces.consts.ISystemConstant;
|
||||
import ink.wgink.login.base.manager.ConfigManager;
|
||||
import ink.wgink.pojo.bos.LoginUser;
|
||||
import ink.wgink.service.user.pojo.pos.UserPO;
|
||||
import ink.wgink.pojo.pos.RolePO;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.joda.time.DateTime;
|
||||
import org.joda.time.format.DateTimeFormat;
|
||||
|
||||
import java.util.Map;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @Description: 用户登录
|
||||
@ -19,75 +15,44 @@ import java.util.Map;
|
||||
public class UserLoginUtil {
|
||||
|
||||
/**
|
||||
* 创建登录用户
|
||||
* 删除重复的角色
|
||||
*
|
||||
* @param userPO
|
||||
* @return
|
||||
* @param rolePOs
|
||||
*/
|
||||
public static LoginUser createLoginUser(UserPO userPO) {
|
||||
LoginUser loginUser = new LoginUser(userPO.getUserUsername(), userPO.getUserPassword(),
|
||||
userPO.getUserType() == 1 ? true : false,
|
||||
isAccountNonExpired(userPO),
|
||||
isCredentialsNonExpired(userPO),
|
||||
userPO.getUserState() == 0 ? true : false);
|
||||
loginUser.setUserId(userPO.getUserId());
|
||||
loginUser.setUserName(userPO.getUserName());
|
||||
loginUser.setUserPhone(userPO.getUserPhone());
|
||||
loginUser.setUserUKey(userPO.getUserUKey());
|
||||
loginUser.setLoginType(userPO.getLoginType());
|
||||
loginUser.setUserEmail(userPO.getUserEmail());
|
||||
loginUser.setUserAvatar(userPO.getUserAvatar());
|
||||
return loginUser;
|
||||
}
|
||||
|
||||
/**
|
||||
* 账号是否没有过期
|
||||
*
|
||||
* @param userPO
|
||||
* @return
|
||||
*/
|
||||
private static boolean isAccountNonExpired(UserPO userPO) {
|
||||
if (StringUtils.equals(userPO.getUserUsername(), ISystemConstant.ADMIN)) {
|
||||
return true;
|
||||
public static void removalDuplicateRole(List<RolePO> rolePOs) {
|
||||
if (rolePOs == null || rolePOs.isEmpty()) {
|
||||
return;
|
||||
}
|
||||
if (!StringUtils.isBlank(userPO.getUserExpiredDate())) {
|
||||
// 判断用户是否超时失效
|
||||
DateTime expiredDateTime = DateTime.parse(userPO.getUserExpiredDate(), DateTimeFormat.forPattern(ISystemConstant.DATE_FORMATTER_YYYY_MM_DD_HH_MM_SS));
|
||||
DateTime nowDateTime = DateTime.now();
|
||||
if (expiredDateTime.isBefore(nowDateTime)) {
|
||||
return false;
|
||||
for (int i = 0; i < rolePOs.size(); i++) {
|
||||
RolePO rolePO = rolePOs.get(i);
|
||||
boolean isExist = false;
|
||||
for (int j = i + 1; j < rolePOs.size(); j++) {
|
||||
if (StringUtils.equals(rolePO.getRoleId(), rolePOs.get(j).getRoleId())) {
|
||||
isExist = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (isExist) {
|
||||
rolePOs.remove(i);
|
||||
i--;
|
||||
break;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* 密码是否没有过期
|
||||
* 是否超管
|
||||
*
|
||||
* @param userPO
|
||||
* @param roleIds
|
||||
* @return
|
||||
*/
|
||||
private static boolean isCredentialsNonExpired(UserPO userPO) {
|
||||
if (StringUtils.equals(userPO.getUserUsername(), ISystemConstant.ADMIN)) {
|
||||
return true;
|
||||
}
|
||||
Map<String, String> config = ConfigManager.getInstance().getConfig();
|
||||
String passwordValidity = config.get("passwordValidity");
|
||||
// 自定义密码有效期
|
||||
if (StringUtils.equals(passwordValidity, "custom")) {
|
||||
Object passwordValidityDays = config.get("passwordValidityDays");
|
||||
int validityDays = passwordValidityDays == null ? 0 : (Integer) passwordValidityDays;
|
||||
if (validityDays <= 0) {
|
||||
public static boolean hasAdmin(List<String> roleIds) {
|
||||
for (String roleId : roleIds) {
|
||||
if (StringUtils.equals(ISystemConstant.ADMIN, roleId)) {
|
||||
return true;
|
||||
}
|
||||
DateTime passwordModifiedDateTime = DateTime.parse(userPO.getGmtPasswordModified(), DateTimeFormat.forPattern(ISystemConstant.DATE_FORMATTER_YYYY_MM_DD_HH_MM_SS));
|
||||
DateTime passwordExpiredDateTime = passwordModifiedDateTime.plusDays(validityDays);
|
||||
DateTime nowDateTime = DateTime.now();
|
||||
if (passwordExpiredDateTime.isBefore(nowDateTime)) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
return false;
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -24,11 +24,6 @@
|
||||
<version>1.0-SNAPSHOT</version>
|
||||
<scope>provided</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>ink.wgink</groupId>
|
||||
<artifactId>common</artifactId>
|
||||
<version>1.0-SNAPSHOT</version>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
|
||||
</project>
|
@ -1,124 +0,0 @@
|
||||
package ink.wgink.mongo.login.service.impl;
|
||||
|
||||
import ink.wgink.common.base.DefaultBaseService;
|
||||
import ink.wgink.interfaces.consts.ISystemConstant;
|
||||
import ink.wgink.interfaces.department.IDepartmentUserBaseService;
|
||||
import ink.wgink.interfaces.group.IGroupUserBaseService;
|
||||
import ink.wgink.interfaces.login.mongo.IMongoLoginService;
|
||||
import ink.wgink.interfaces.position.IPositionUserBaseService;
|
||||
import ink.wgink.interfaces.role.IRoleMenuBaseService;
|
||||
import ink.wgink.interfaces.role.IRolePermissionBaseService;
|
||||
import ink.wgink.interfaces.role.IRoleUserBaseService;
|
||||
import ink.wgink.login.base.util.UserLoginUtil;
|
||||
import ink.wgink.pojo.pos.RolePO;
|
||||
import ink.wgink.pojo.pos.user.mongo.MongoUserPO;
|
||||
import ink.wgink.service.user.pojo.pos.UserPO;
|
||||
import ink.wgink.service.user.service.IUserService;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.data.mongodb.core.MongoTemplate;
|
||||
import org.springframework.data.mongodb.core.query.Criteria;
|
||||
import org.springframework.data.mongodb.core.query.Query;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @ClassName: MongoLoginServiceImpl
|
||||
* @Description: mongo登录
|
||||
* @Author: wanggeng
|
||||
* @Date: 2022/5/19 11:31
|
||||
* @Version: 1.0
|
||||
*/
|
||||
@Service
|
||||
public class MongoLoginServiceImpl extends DefaultBaseService implements IMongoLoginService {
|
||||
|
||||
private static final String COLLECTION_NAME = "loginUser";
|
||||
@Autowired
|
||||
private MongoTemplate mongoTemplate;
|
||||
@Autowired
|
||||
private IUserService userService;
|
||||
@Autowired(required = false)
|
||||
private IDepartmentUserBaseService departmentUserBaseService;
|
||||
@Autowired(required = false)
|
||||
private IRoleUserBaseService roleUserBaseService;
|
||||
@Autowired(required = false)
|
||||
private IRoleMenuBaseService roleMenuBaseService;
|
||||
@Autowired(required = false)
|
||||
private IRolePermissionBaseService rolePermissionService;
|
||||
@Autowired(required = false)
|
||||
private IGroupUserBaseService groupUserBaseService;
|
||||
@Autowired(required = false)
|
||||
private IPositionUserBaseService positionUserBaseService;
|
||||
|
||||
@Override
|
||||
public void update(String userId) {
|
||||
UserPO userPO = userService.getPO(userId);
|
||||
UserLoginUtil.createLoginUser(userPO);
|
||||
// 非系统管理员
|
||||
if (!StringUtils.equalsIgnoreCase(userPO.getUserUsername(), ISystemConstant.ADMIN)) {
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void delete(List<String> userIds) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public MongoUserPO getPO(String userId) {
|
||||
return mongoTemplate.findOne(new Query().addCriteria(Criteria.where("userId").is(userId)), MongoUserPO.class, COLLECTION_NAME);
|
||||
}
|
||||
|
||||
@Override
|
||||
public MongoUserPO getPOByUsername(String username) {
|
||||
return mongoTemplate.findOne(new Query().addCriteria(Criteria.where("userUsername").is(username)), MongoUserPO.class, COLLECTION_NAME);
|
||||
}
|
||||
|
||||
/**
|
||||
* 设置用户信息
|
||||
*
|
||||
* @param userPO
|
||||
*/
|
||||
private void setMongoUserInfo(MongoUserPO mongoUserPO) {
|
||||
|
||||
}
|
||||
|
||||
private boolean hasAdmin(List<String> roleIds) {
|
||||
for (String roleId : roleIds) {
|
||||
if (StringUtils.equals(ISystemConstant.ADMIN, roleId)) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* 删除重复的角色
|
||||
*
|
||||
* @param rolePOs
|
||||
*/
|
||||
private void removalDuplicateRole(List<RolePO> rolePOs) {
|
||||
if (rolePOs == null || rolePOs.isEmpty()) {
|
||||
return;
|
||||
}
|
||||
for (int i = 0; i < rolePOs.size(); i++) {
|
||||
RolePO rolePO = rolePOs.get(i);
|
||||
boolean isExist = false;
|
||||
for (int j = i + 1; j < rolePOs.size(); j++) {
|
||||
if (StringUtils.equals(rolePO.getRoleId(), rolePOs.get(j).getRoleId())) {
|
||||
isExist = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (isExist) {
|
||||
rolePOs.remove(i);
|
||||
i--;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,90 @@
|
||||
package ink.wgink.mongo.login.service.impl;
|
||||
|
||||
import ink.wgink.common.base.DefaultBaseService;
|
||||
import ink.wgink.interfaces.user.mongo.IMongoLoginUserService;
|
||||
import ink.wgink.login.base.service.user.UserLoginService;
|
||||
import ink.wgink.pojo.bos.LoginUser;
|
||||
import ink.wgink.service.department.service.IDepartmentUserService;
|
||||
import ink.wgink.service.user.enums.UserTypeEnum;
|
||||
import ink.wgink.service.user.pojo.pos.UserPO;
|
||||
import ink.wgink.service.user.service.IUserService;
|
||||
import ink.wgink.service.user.util.UserUtil;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.data.mongodb.core.MongoTemplate;
|
||||
import org.springframework.data.mongodb.core.query.Criteria;
|
||||
import org.springframework.data.mongodb.core.query.Query;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @ClassName: MongoLoginServiceImpl
|
||||
* @Description: mongo登录
|
||||
* @Author: wanggeng
|
||||
* @Date: 2022/5/19 11:31
|
||||
* @Version: 1.0
|
||||
*/
|
||||
@Service
|
||||
public class MongoLoginUserServiceImpl extends DefaultBaseService implements IMongoLoginUserService {
|
||||
|
||||
private static final String COLLECTION_NAME = "loginUser";
|
||||
@Autowired
|
||||
private MongoTemplate mongoTemplate;
|
||||
@Autowired
|
||||
private IUserService userService;
|
||||
@Autowired
|
||||
private UserLoginService userLoginService;
|
||||
@Autowired
|
||||
private IDepartmentUserService departmentUserService;
|
||||
|
||||
@Override
|
||||
public void updateByUserId(String userId) {
|
||||
UserPO userPO = userService.getPO(userId);
|
||||
LoginUser loginUser = UserUtil.createLoginUser(userPO);
|
||||
update(loginUser);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void updateByUserIds(List<String> userIds) {
|
||||
userService.listPOByUserIds(userIds).forEach(userPO -> {
|
||||
LoginUser loginUser = UserUtil.createLoginUser(userPO);
|
||||
update(loginUser);
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void update(List<LoginUser> loginUsers) {
|
||||
loginUsers.forEach(this::update);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void update(LoginUser loginUser) {
|
||||
// 系统用户、普通用户加载逻辑,公共用户不处理逻辑
|
||||
if (loginUser.getUserType().equals(UserTypeEnum.SYSTEM.getValue()) ||
|
||||
loginUser.getUserType().equals(UserTypeEnum.NORMAL.getValue())) {
|
||||
userLoginService.setLoginUserInfo(loginUser);
|
||||
}
|
||||
// 删除原有
|
||||
delete(Arrays.asList(loginUser.getUserId()));
|
||||
// 新增更新
|
||||
mongoTemplate.save(loginUser, COLLECTION_NAME);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void delete(List<String> userIds) {
|
||||
mongoTemplate.remove(Query.query(Criteria.where("userId").in(userIds)), COLLECTION_NAME);
|
||||
}
|
||||
|
||||
@Override
|
||||
public LoginUser get(String userId) {
|
||||
return mongoTemplate.findOne(new Query().addCriteria(Criteria.where("userId").is(userId)), LoginUser.class, COLLECTION_NAME);
|
||||
}
|
||||
|
||||
@Override
|
||||
public LoginUser getByUsername(String username) {
|
||||
return mongoTemplate.findOne(new Query().addCriteria(Criteria.where("userUsername").is(username)), LoginUser.class, COLLECTION_NAME);
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,59 @@
|
||||
package ink.wgink.mongo.login.startup;
|
||||
|
||||
import ink.wgink.interfaces.user.mongo.IMongoLoginUserService;
|
||||
import ink.wgink.properties.ServerProperties;
|
||||
import ink.wgink.service.user.service.IUserService;
|
||||
import ink.wgink.service.user.util.UserUtil;
|
||||
import ink.wgink.util.thread.CachedThreadPoolUtil;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.boot.ApplicationArguments;
|
||||
import org.springframework.boot.ApplicationRunner;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* @ClassName: MongoLoginStartUp
|
||||
* @Description: mongo启动
|
||||
* @Author: wanggeng
|
||||
* @Date: 2022/5/19 16:25
|
||||
* @Version: 1.0
|
||||
*/
|
||||
@Component
|
||||
public class MongoLoginStartUp implements ApplicationRunner {
|
||||
|
||||
private static final Logger LOG = LoggerFactory.getLogger(MongoLoginStartUp.class);
|
||||
@Autowired
|
||||
private ServerProperties serverProperties;
|
||||
@Autowired
|
||||
private IMongoLoginUserService mongoLoginUserService;
|
||||
@Autowired
|
||||
private IUserService userService;
|
||||
|
||||
@Override
|
||||
public void run(ApplicationArguments args) throws Exception {
|
||||
if (serverProperties.getMasterNode()) {
|
||||
LOG.debug("master-node: {}" + serverProperties.getMasterNode());
|
||||
CachedThreadPoolUtil.execute(() -> {
|
||||
// 初始化所有账号内容
|
||||
System.out.println("**************************");
|
||||
System.out.println("** LoginUser Init Start **");
|
||||
System.out.println("**************************");
|
||||
long startTime = System.currentTimeMillis();
|
||||
Map<String, Object> params = new HashMap<>(0);
|
||||
userService.listPO(params).forEach(userPO -> {
|
||||
mongoLoginUserService.update(UserUtil.createLoginUser(userPO));
|
||||
});
|
||||
long endTime = System.currentTimeMillis();
|
||||
System.out.println("**************************");
|
||||
System.out.println("** LoginUser Init End **");
|
||||
System.out.println("**************************");
|
||||
LOG.debug("LoginUser init used time: {}ms", (endTime - startTime) / 1000L);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
}
|
@ -7,6 +7,7 @@ import ink.wgink.exceptions.UpdateException;
|
||||
import ink.wgink.interfaces.init.IInitBaseTable;
|
||||
import ink.wgink.pojo.dtos.department.DepartmentUserDTO;
|
||||
import ink.wgink.pojo.dtos.user.UserDTO;
|
||||
import ink.wgink.service.user.pojo.pos.UserPO;
|
||||
import org.springframework.stereotype.Repository;
|
||||
|
||||
import java.util.List;
|
||||
@ -84,6 +85,15 @@ public interface IDepartmentUserDao extends IInitBaseTable {
|
||||
*/
|
||||
List<String> listDepartmentId(Map<String, Object> params) throws SearchException;
|
||||
|
||||
/**
|
||||
* 用户列表
|
||||
*
|
||||
* @param params
|
||||
* @return
|
||||
* @throws SearchException
|
||||
*/
|
||||
List<UserPO> listUserPO(Map<String, Object> params) throws SearchException;
|
||||
|
||||
/**
|
||||
* 用户列表
|
||||
*
|
||||
|
@ -8,6 +8,7 @@ import ink.wgink.pojo.dtos.user.UserDTO;
|
||||
import ink.wgink.pojo.pos.DepartmentPO;
|
||||
import ink.wgink.pojo.result.SuccessResultList;
|
||||
import ink.wgink.service.department.pojo.vos.DepartmentUserSortVO;
|
||||
import ink.wgink.service.user.pojo.pos.UserPO;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
@ -46,7 +47,7 @@ public interface IDepartmentUserService extends IDepartmentUserBaseService {
|
||||
* 新增用户ID
|
||||
*
|
||||
* @param departmentId 部门ID
|
||||
* @param userIds 新增的用户ID列表
|
||||
* @param userIds 新增的用户ID列表
|
||||
*/
|
||||
void save(String departmentId, List<String> userIds);
|
||||
|
||||
@ -148,6 +149,37 @@ public interface IDepartmentUserService extends IDepartmentUserBaseService {
|
||||
*/
|
||||
List<UserDTO> listUser(Map<String, Object> requestParams);
|
||||
|
||||
/**
|
||||
* 用户分页
|
||||
*
|
||||
* @param page
|
||||
* @return
|
||||
*/
|
||||
SuccessResultList<List<UserDTO>> listPageUser(ListPage page);
|
||||
|
||||
/**
|
||||
* 用户列表
|
||||
*
|
||||
* @param params
|
||||
* @return
|
||||
*/
|
||||
List<UserPO> listUserPO(Map<String, Object> params);
|
||||
|
||||
/**
|
||||
* 用户列表
|
||||
*
|
||||
* @param departmentId
|
||||
* @return
|
||||
*/
|
||||
List<UserPO> listUserPOByDepartmentId(String departmentId);
|
||||
|
||||
/**
|
||||
* 用户列表
|
||||
*
|
||||
* @param departmentIds
|
||||
* @return
|
||||
*/
|
||||
List<UserPO> listUserPOByDepartmentIds(List<String> departmentIds);
|
||||
|
||||
|
||||
}
|
||||
|
@ -8,6 +8,7 @@ import ink.wgink.interfaces.consts.ISystemConstant;
|
||||
import ink.wgink.interfaces.department.IDepartmentUserDeleteAfterHandler;
|
||||
import ink.wgink.interfaces.department.IDepartmentUserSaveAfterHandler;
|
||||
import ink.wgink.interfaces.user.IUserBaseService;
|
||||
import ink.wgink.interfaces.user.mongo.IMongoLoginUserService;
|
||||
import ink.wgink.pojo.ListPage;
|
||||
import ink.wgink.pojo.dtos.department.DepartmentContainUserDTO;
|
||||
import ink.wgink.pojo.dtos.department.DepartmentDTO;
|
||||
@ -21,6 +22,8 @@ import ink.wgink.service.department.pojo.vos.DepartmentUserSortVO;
|
||||
import ink.wgink.service.department.service.IDepartmentAdjustmentService;
|
||||
import ink.wgink.service.department.service.IDepartmentService;
|
||||
import ink.wgink.service.department.service.IDepartmentUserService;
|
||||
import ink.wgink.service.user.pojo.pos.UserPO;
|
||||
import ink.wgink.util.thread.CachedThreadPoolUtil;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.springframework.beans.BeanUtils;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
@ -53,6 +56,8 @@ public class DepartmentUserServiceImpl extends DefaultBaseService implements IDe
|
||||
private IDepartmentUserSaveAfterHandler departmentUserSaveAfterHandler;
|
||||
@Autowired(required = false)
|
||||
private IDepartmentUserDeleteAfterHandler departmentUserDeleteAfterHandler;
|
||||
@Autowired(required = false)
|
||||
private IMongoLoginUserService mongoLoginUserService;
|
||||
|
||||
@Override
|
||||
public void save(String departmentId, String departmentName, List<String> departmentUserIds) {
|
||||
@ -77,6 +82,7 @@ public class DepartmentUserServiceImpl extends DefaultBaseService implements IDe
|
||||
i--;
|
||||
}
|
||||
}
|
||||
updateMongoLoginUser(departmentUserIds);
|
||||
departmentAdjustmentService.save(existUserIds, departmentId, departmentName, USER_DEPARTMENT_TYPE_JOIN);
|
||||
if (departmentUserSaveAfterHandler != null) {
|
||||
departmentUserSaveAfterHandler.handle(departmentId, departmentUserIds);
|
||||
@ -90,7 +96,6 @@ public class DepartmentUserServiceImpl extends DefaultBaseService implements IDe
|
||||
throw new SearchException("部门不存在");
|
||||
}
|
||||
save(departmentId, departmentPO.getDepartmentName(), userIds);
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -110,6 +115,7 @@ public class DepartmentUserServiceImpl extends DefaultBaseService implements IDe
|
||||
params.put("departmentId", departmentId);
|
||||
params.put("userIds", userIds);
|
||||
departmentUserDao.delete(params);
|
||||
updateMongoLoginUser(userIds);
|
||||
departmentAdjustmentService.save(userIds, departmentId, adjustmentDepartmentName, USER_DEPARTMENT_TYPE_LEAVE);
|
||||
if (departmentUserDeleteAfterHandler != null) {
|
||||
departmentUserDeleteAfterHandler.handle(departmentId, userIds);
|
||||
@ -140,6 +146,7 @@ public class DepartmentUserServiceImpl extends DefaultBaseService implements IDe
|
||||
params.put("userId", userId);
|
||||
departmentUserDao.save(params);
|
||||
}
|
||||
updateMongoLoginUser(saveUserIds);
|
||||
}
|
||||
departmentAdjustmentService.save(saveUserIds, departmentId, departmentPO.getDepartmentName(), USER_DEPARTMENT_TYPE_JOIN);
|
||||
if (departmentUserSaveAfterHandler != null) {
|
||||
@ -561,4 +568,40 @@ public class DepartmentUserServiceImpl extends DefaultBaseService implements IDe
|
||||
departmentContainUserDTO.setUsers(listUserByDepartmentId(departmentPO.getDepartmentId()));
|
||||
return departmentContainUserDTO;
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<UserPO> listUserPO(Map<String, Object> params) {
|
||||
params = params == null ? getHashMap(0) : params;
|
||||
return departmentUserDao.listUserPO(params);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<UserPO> listUserPOByDepartmentId(String departmentId) {
|
||||
Map<String, Object> params = getHashMap(2);
|
||||
params.put("departmentId", departmentId);
|
||||
return listUserPO(params);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<UserPO> listUserPOByDepartmentIds(List<String> departmentIds) {
|
||||
if (departmentIds == null || departmentIds.isEmpty()) {
|
||||
return new ArrayList<>();
|
||||
}
|
||||
Map<String, Object> params = getHashMap(2);
|
||||
params.put("departmentIds", departmentIds);
|
||||
return listUserPO(params);
|
||||
}
|
||||
|
||||
/**
|
||||
* 更新 mongo
|
||||
*
|
||||
* @param departmentUserIds
|
||||
*/
|
||||
private void updateMongoLoginUser(List<String> departmentUserIds) {
|
||||
if (mongoLoginUserService != null) {
|
||||
CachedThreadPoolUtil.execute(() -> {
|
||||
mongoLoginUserService.updateByUserIds(departmentUserIds);
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -280,6 +280,93 @@
|
||||
</if>
|
||||
</select>
|
||||
|
||||
<!-- 用户列表 -->
|
||||
<select id="listUserPO" parameterType="map" resultMap="ink.wgink.service.user.dao.IUserDao.userPO" useCache="false">
|
||||
SELECT
|
||||
user_id,
|
||||
user_password,
|
||||
user_username,
|
||||
user_name,
|
||||
user_phone,
|
||||
user_email,
|
||||
user_ukey,
|
||||
user_ukey_electronic_secret_key,
|
||||
user_type,
|
||||
user_state,
|
||||
user_expired_date,
|
||||
user_avatar,
|
||||
user_longitude,
|
||||
user_latitude,
|
||||
last_login_address,
|
||||
LEFT(last_login_time, 19) last_login_time,
|
||||
login_type,
|
||||
LEFT(gmt_password_modified, 19) gmt_password_modified,
|
||||
remarks,
|
||||
LEFT(gmt_create, 19) gmt_create
|
||||
FROM
|
||||
sys_user t1
|
||||
WHERE
|
||||
t1.is_delete = 0
|
||||
<if test="userType != null">
|
||||
AND
|
||||
t1.user_type = #{userType}
|
||||
</if>
|
||||
<if test="userState != null">
|
||||
AND
|
||||
t1.user_state = #{userState}
|
||||
</if>
|
||||
<if test="departmentId != null and departmentId != ''">
|
||||
AND
|
||||
t1.user_id IN (
|
||||
SELECT
|
||||
user_id
|
||||
FROM
|
||||
sys_department_user st1
|
||||
WHERE
|
||||
st1.department_id = #{departmentId}
|
||||
)
|
||||
</if>
|
||||
<if test="departmentIds != null and departmentIds.size > 0">
|
||||
AND
|
||||
t1.user_id IN (
|
||||
SELECT
|
||||
user_id
|
||||
FROM
|
||||
sys_department_user st1
|
||||
WHERE
|
||||
st1.department_id IN
|
||||
<foreach collection="departmentIds" index="index" open="(" separator="," close=")">
|
||||
#{departmentIds[${index}]}
|
||||
</foreach>
|
||||
)
|
||||
</if>
|
||||
<if test="excludeDepartmentId != null and excludeDepartmentId != ''">
|
||||
AND
|
||||
t1.user_id NOT IN (
|
||||
SELECT
|
||||
user_id
|
||||
FROM
|
||||
sys_department_user st1
|
||||
WHERE
|
||||
st1.department_id = #{excludeDepartmentId}
|
||||
)
|
||||
</if>
|
||||
<if test="excludeDepartmentIds != null and excludeDepartmentIds.size > 0">
|
||||
AND
|
||||
t1.user_id NOT IN (
|
||||
SELECT
|
||||
user_id
|
||||
FROM
|
||||
sys_department_user st1
|
||||
WHERE
|
||||
st1.department_id IN
|
||||
<foreach collection="excludeDepartmentIds" index="index" open="(" separator="," close=")">
|
||||
#{excludeDepartmentIds[${index}]}
|
||||
</foreach>
|
||||
)
|
||||
</if>
|
||||
</select>
|
||||
|
||||
<!-- 同部门用户ID列表 -->
|
||||
<select id="listSameDepartmentUserId" parameterType="map" resultType="java.lang.String" useCache="false">
|
||||
SELECT
|
||||
|
@ -37,6 +37,20 @@ public interface IGroupUserService extends IGroupUserBaseService {
|
||||
*/
|
||||
void update(String groupId, List<String> saveUserIds, List<String> deleteUserIds);
|
||||
|
||||
/**
|
||||
* 用户组人员删除
|
||||
*
|
||||
* @param groupId
|
||||
*/
|
||||
void delete(String groupId);
|
||||
|
||||
/**
|
||||
* 用户组人员删除
|
||||
*
|
||||
* @param groupIds
|
||||
*/
|
||||
void delete(List<String> groupIds);
|
||||
|
||||
/**
|
||||
* 用户组人员删除
|
||||
*
|
||||
|
@ -12,6 +12,7 @@ import ink.wgink.pojo.result.SuccessResultList;
|
||||
import ink.wgink.service.group.dao.IGroupDao;
|
||||
import ink.wgink.service.group.pojo.vos.GroupVO;
|
||||
import ink.wgink.service.group.service.IGroupService;
|
||||
import ink.wgink.service.group.service.IGroupUserService;
|
||||
import ink.wgink.util.UUIDUtil;
|
||||
import ink.wgink.util.map.HashMapUtil;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
@ -31,6 +32,8 @@ public class GroupServiceImpl extends DefaultBaseService implements IGroupServic
|
||||
|
||||
@Autowired
|
||||
private IGroupDao groupDao;
|
||||
@Autowired
|
||||
private IGroupUserService groupUserService;
|
||||
|
||||
@Override
|
||||
public void save(GroupVO groupVO) {
|
||||
@ -51,6 +54,9 @@ public class GroupServiceImpl extends DefaultBaseService implements IGroupServic
|
||||
|
||||
@Override
|
||||
public void remove(List<String> ids) {
|
||||
// 删除用户
|
||||
groupUserService.delete(ids);
|
||||
|
||||
Map<String, Object> params = getHashMap(2);
|
||||
params.put("groupIds", ids);
|
||||
setUpdateInfo(params);
|
||||
|
@ -5,6 +5,7 @@ import com.github.pagehelper.PageInfo;
|
||||
import ink.wgink.common.base.DefaultBaseService;
|
||||
import ink.wgink.interfaces.consts.ISystemConstant;
|
||||
import ink.wgink.interfaces.user.IUserBaseService;
|
||||
import ink.wgink.interfaces.user.mongo.IMongoLoginUserService;
|
||||
import ink.wgink.pojo.ListPage;
|
||||
import ink.wgink.pojo.dtos.group.GroupSimpleDTO;
|
||||
import ink.wgink.pojo.dtos.group.GroupUserDTO;
|
||||
@ -14,6 +15,7 @@ import ink.wgink.pojo.result.SuccessResultList;
|
||||
import ink.wgink.service.group.dao.IGroupUserDao;
|
||||
import ink.wgink.service.group.service.IGroupService;
|
||||
import ink.wgink.service.group.service.IGroupUserService;
|
||||
import ink.wgink.util.thread.CachedThreadPoolUtil;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
@ -42,6 +44,8 @@ public class GroupUserServiceImpl extends DefaultBaseService implements IGroupUs
|
||||
private IUserBaseService userBaseService;
|
||||
@Autowired
|
||||
private IGroupService groupService;
|
||||
@Autowired(required = false)
|
||||
private IMongoLoginUserService mongoLoginUserService;
|
||||
|
||||
@Override
|
||||
public void save(String groupId, List<String> saveUserIds) {
|
||||
@ -67,6 +71,7 @@ public class GroupUserServiceImpl extends DefaultBaseService implements IGroupUs
|
||||
i--;
|
||||
}
|
||||
}
|
||||
updateMongoLoginUser(saveUserIds);
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -81,15 +86,31 @@ public class GroupUserServiceImpl extends DefaultBaseService implements IGroupUs
|
||||
params.put("userId", userId);
|
||||
groupUserDao.save(params);
|
||||
}
|
||||
updateMongoLoginUser(saveUserIds);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void delete(String groupId) {
|
||||
List<String> userIds = listUserId(groupId);
|
||||
delete(groupId, userIds);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void delete(List<String> groupIds) {
|
||||
groupIds.forEach(groupId -> {
|
||||
delete(groupId);
|
||||
});
|
||||
}
|
||||
|
||||
@Override
|
||||
public void delete(String groupId, List<String> userIds) {
|
||||
Map<String, Object> params = getHashMap(4);
|
||||
params.put("groupId", groupId);
|
||||
params.put("userIds", userIds);
|
||||
groupUserDao.delete(params);
|
||||
|
||||
updateMongoLoginUser(userIds);
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -210,4 +231,12 @@ public class GroupUserServiceImpl extends DefaultBaseService implements IGroupUs
|
||||
return groupUserDao.listUserId(params);
|
||||
}
|
||||
|
||||
private void updateMongoLoginUser(List<String> userIds) {
|
||||
if (mongoLoginUserService != null) {
|
||||
CachedThreadPoolUtil.execute(() -> {
|
||||
mongoLoginUserService.updateByUserIds(userIds);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -37,6 +37,20 @@ public interface IPositionUserService extends IPositionUserBaseService {
|
||||
*/
|
||||
void update(String positionId, List<String> saveUserIds, List<String> deleteUserIds);
|
||||
|
||||
/**
|
||||
* 职位人员删除
|
||||
*
|
||||
* @param positionId
|
||||
*/
|
||||
void delete(String positionId);
|
||||
|
||||
/**
|
||||
* 职位人员删除
|
||||
*
|
||||
* @param positionIds
|
||||
*/
|
||||
void delete(List<String> positionIds);
|
||||
|
||||
/**
|
||||
* 职位人员删除
|
||||
*
|
||||
|
@ -12,6 +12,7 @@ import ink.wgink.pojo.result.SuccessResultList;
|
||||
import ink.wgink.service.position.dao.IPositionDao;
|
||||
import ink.wgink.service.position.pojo.vos.PositionVO;
|
||||
import ink.wgink.service.position.service.IPositionService;
|
||||
import ink.wgink.service.position.service.IPositionUserService;
|
||||
import ink.wgink.util.UUIDUtil;
|
||||
import ink.wgink.util.map.HashMapUtil;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
@ -32,6 +33,8 @@ public class PositionServiceImpl extends DefaultBaseService implements IPosition
|
||||
|
||||
@Autowired
|
||||
private IPositionDao positionDao;
|
||||
@Autowired
|
||||
private IPositionUserService positionUserService;
|
||||
|
||||
@Override
|
||||
public void save(PositionVO positionVO) {
|
||||
@ -52,6 +55,9 @@ public class PositionServiceImpl extends DefaultBaseService implements IPosition
|
||||
|
||||
@Override
|
||||
public void remove(List<String> ids) {
|
||||
// 删除职位用户
|
||||
positionUserService.delete(ids);
|
||||
|
||||
Map<String, Object> params = getHashMap(2);
|
||||
params.put("positionIds", ids);
|
||||
setUpdateInfo(params);
|
||||
|
@ -5,6 +5,7 @@ import com.github.pagehelper.PageInfo;
|
||||
import ink.wgink.common.base.DefaultBaseService;
|
||||
import ink.wgink.interfaces.consts.ISystemConstant;
|
||||
import ink.wgink.interfaces.user.IUserBaseService;
|
||||
import ink.wgink.interfaces.user.mongo.IMongoLoginUserService;
|
||||
import ink.wgink.pojo.ListPage;
|
||||
import ink.wgink.pojo.dtos.position.PositionSimpleDTO;
|
||||
import ink.wgink.pojo.dtos.position.PositionUserDTO;
|
||||
@ -14,6 +15,7 @@ import ink.wgink.pojo.result.SuccessResultList;
|
||||
import ink.wgink.service.position.dao.IPositionUserDao;
|
||||
import ink.wgink.service.position.service.IPositionService;
|
||||
import ink.wgink.service.position.service.IPositionUserService;
|
||||
import ink.wgink.util.thread.CachedThreadPoolUtil;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
@ -42,6 +44,8 @@ public class PositionUserServiceImpl extends DefaultBaseService implements IPosi
|
||||
private IUserBaseService userBaseService;
|
||||
@Autowired
|
||||
private IPositionService positionService;
|
||||
@Autowired(required = false)
|
||||
private IMongoLoginUserService mongoLoginUserService;
|
||||
|
||||
@Override
|
||||
public void save(String positionId, List<String> saveUserIds) {
|
||||
@ -67,6 +71,8 @@ public class PositionUserServiceImpl extends DefaultBaseService implements IPosi
|
||||
i--;
|
||||
}
|
||||
}
|
||||
|
||||
updateMongoLoginUser(saveUserIds);
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -81,15 +87,30 @@ public class PositionUserServiceImpl extends DefaultBaseService implements IPosi
|
||||
params.put("userId", userId);
|
||||
positionUserDao.save(params);
|
||||
}
|
||||
updateMongoLoginUser(saveUserIds);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void delete(String positionId) {
|
||||
List<String> userIds = listUserId(positionId);
|
||||
delete(positionId, userIds);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void delete(List<String> positionIds) {
|
||||
positionIds.forEach(positionId -> {
|
||||
delete(positionId);
|
||||
});
|
||||
}
|
||||
|
||||
@Override
|
||||
public void delete(String positionId, List<String> userIds) {
|
||||
Map<String, Object> params = getHashMap(4);
|
||||
params.put("positionId", positionId);
|
||||
params.put("userIds", userIds);
|
||||
positionUserDao.delete(params);
|
||||
updateMongoLoginUser(userIds);
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -236,4 +257,17 @@ public class PositionUserServiceImpl extends DefaultBaseService implements IPosi
|
||||
return userBaseService.listPageByIds(userIds, page);
|
||||
}
|
||||
|
||||
/**
|
||||
* 更新 mongo 用户
|
||||
*
|
||||
* @param userIds
|
||||
*/
|
||||
private void updateMongoLoginUser(List<String> userIds) {
|
||||
if (mongoLoginUserService != null) {
|
||||
CachedThreadPoolUtil.execute(() -> {
|
||||
mongoLoginUserService.updateByUserIds(userIds);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -6,6 +6,7 @@ import ink.wgink.exceptions.SearchException;
|
||||
import ink.wgink.interfaces.init.IInitBaseTable;
|
||||
import ink.wgink.pojo.dtos.department.DepartmentUserDTO;
|
||||
import ink.wgink.pojo.dtos.user.UserDTO;
|
||||
import ink.wgink.service.user.pojo.pos.UserPO;
|
||||
import org.springframework.stereotype.Repository;
|
||||
|
||||
import java.util.List;
|
||||
@ -84,4 +85,13 @@ public interface IRoleUserDao extends IInitBaseTable {
|
||||
* @throws SearchException
|
||||
*/
|
||||
List<DepartmentUserDTO> listDepartmentUser(Map<String, Object> params) throws SearchException;
|
||||
|
||||
/**
|
||||
* 用户列表
|
||||
*
|
||||
* @param params
|
||||
* @return
|
||||
* @throws SearchException
|
||||
*/
|
||||
List<UserPO> listUserPO(Map<String, Object> params) throws SearchException;
|
||||
}
|
||||
|
@ -5,6 +5,7 @@ import ink.wgink.pojo.ListPage;
|
||||
import ink.wgink.pojo.dtos.department.DepartmentUserDTO;
|
||||
import ink.wgink.pojo.dtos.user.UserDTO;
|
||||
import ink.wgink.pojo.result.SuccessResultList;
|
||||
import ink.wgink.service.user.pojo.pos.UserPO;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
@ -41,11 +42,23 @@ public interface IRoleUserService extends IRoleUserBaseService {
|
||||
* 更新用户组人员列表
|
||||
*
|
||||
* @param roleId 角色ID
|
||||
* @param saveIds 新增ID列表
|
||||
* @param saveUserIds 新增ID列表
|
||||
* @param deleteIds 删除ID列表
|
||||
*/
|
||||
void update(String roleId, List<String> saveUserIds, List<String> deleteIds);
|
||||
|
||||
/**
|
||||
* 删除角色用户
|
||||
* @param roleId
|
||||
*/
|
||||
void delete(String roleId);
|
||||
|
||||
/**
|
||||
* 删除角色用户
|
||||
* @param roleIds
|
||||
*/
|
||||
void delete(List<String> roleIds);
|
||||
|
||||
/**
|
||||
* 用户组人员删除
|
||||
*
|
||||
@ -77,4 +90,28 @@ public interface IRoleUserService extends IRoleUserBaseService {
|
||||
* @return
|
||||
*/
|
||||
SuccessResultList<List<UserDTO>> listPageUser(ListPage page);
|
||||
|
||||
/**
|
||||
* 用户列表
|
||||
*
|
||||
* @param params
|
||||
* @return
|
||||
*/
|
||||
List<UserPO> listUserPO(Map<String, Object> params);
|
||||
|
||||
/**
|
||||
* 用户列表
|
||||
*
|
||||
* @param roleId
|
||||
* @return
|
||||
*/
|
||||
List<UserPO> listUserPOByRoleId(String roleId);
|
||||
|
||||
/**
|
||||
* 用户列表
|
||||
*
|
||||
* @param roleIds
|
||||
* @return
|
||||
*/
|
||||
List<UserPO> listUserPOByRoleIds(List<String> roleIds);
|
||||
}
|
||||
|
@ -3,7 +3,7 @@ package ink.wgink.service.role.service.impl;
|
||||
import ink.wgink.common.base.DefaultBaseService;
|
||||
import ink.wgink.common.enums.RoleDataRightEnum;
|
||||
import ink.wgink.exceptions.SearchException;
|
||||
import ink.wgink.interfaces.department.IDepartmentUserBaseService;
|
||||
import ink.wgink.interfaces.user.mongo.IMongoLoginUserService;
|
||||
import ink.wgink.pojo.dtos.role.RoleDTO;
|
||||
import ink.wgink.pojo.dtos.role.RoleDataRightDTO;
|
||||
import ink.wgink.pojo.dtos.role.RoleDataRightInfoDTO;
|
||||
@ -11,6 +11,7 @@ import ink.wgink.service.role.dao.IRoleDataRightDao;
|
||||
import ink.wgink.service.role.pojo.vos.RoleDataRightVO;
|
||||
import ink.wgink.service.role.service.IRoleDataRightService;
|
||||
import ink.wgink.service.role.service.IRoleService;
|
||||
import ink.wgink.util.thread.CachedThreadPoolUtil;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
@ -36,6 +37,8 @@ public class RoleDataRightServiceImpl extends DefaultBaseService implements IRol
|
||||
private IRoleDataRightDao roleDataRightDao;
|
||||
@Autowired
|
||||
private IRoleService roleService;
|
||||
@Autowired(required = false)
|
||||
private IMongoLoginUserService mongoLoginUserService;
|
||||
|
||||
@Override
|
||||
public void update(String roleId, RoleDataRightVO roleDataRightVO) {
|
||||
@ -50,6 +53,7 @@ public class RoleDataRightServiceImpl extends DefaultBaseService implements IRol
|
||||
params.put("userId", userId);
|
||||
roleDataRightDao.save(params);
|
||||
}
|
||||
updateMongoLoginUser(roleDataRightVO.getUserIds());
|
||||
}
|
||||
}
|
||||
|
||||
@ -103,5 +107,12 @@ public class RoleDataRightServiceImpl extends DefaultBaseService implements IRol
|
||||
return listUserId(params);
|
||||
}
|
||||
|
||||
private void updateMongoLoginUser(List<String> userIds) {
|
||||
if (mongoLoginUserService != null) {
|
||||
CachedThreadPoolUtil.execute(() -> {
|
||||
mongoLoginUserService.updateByUserIds(userIds);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -1,18 +1,24 @@
|
||||
package ink.wgink.service.role.service.impl;
|
||||
|
||||
import ink.wgink.common.base.DefaultBaseService;
|
||||
import ink.wgink.interfaces.user.mongo.IMongoLoginUserService;
|
||||
import ink.wgink.module.menu.service.IMenuService;
|
||||
import ink.wgink.pojo.bos.LoginUser;
|
||||
import ink.wgink.pojo.dtos.menu.MenuDTO;
|
||||
import ink.wgink.pojo.dtos.role.RoleMenuDTO;
|
||||
import ink.wgink.service.role.dao.IRoleMenuDao;
|
||||
import ink.wgink.service.role.pojo.vos.RoleMenuVO;
|
||||
import ink.wgink.service.role.service.IRoleMenuService;
|
||||
import ink.wgink.service.role.service.IRoleUserService;
|
||||
import ink.wgink.service.user.util.UserUtil;
|
||||
import ink.wgink.util.thread.CachedThreadPoolUtil;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
* When you feel like quitting. Think about why you started
|
||||
@ -31,6 +37,10 @@ public class RoleMenuServiceImpl extends DefaultBaseService implements IRoleMenu
|
||||
private IRoleMenuDao roleMenuDao;
|
||||
@Autowired
|
||||
private IMenuService menuService;
|
||||
@Autowired
|
||||
private IRoleUserService roleUserService;
|
||||
@Autowired(required = false)
|
||||
private IMongoLoginUserService mongoLoginUserService;
|
||||
|
||||
@Override
|
||||
public void update(String roleId, RoleMenuVO roleMenuVO) {
|
||||
@ -41,6 +51,7 @@ public class RoleMenuServiceImpl extends DefaultBaseService implements IRoleMenu
|
||||
params.put("menuId", menuId);
|
||||
roleMenuDao.save(params);
|
||||
}
|
||||
updateMongoLoginUser(roleId);
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -82,4 +93,17 @@ public class RoleMenuServiceImpl extends DefaultBaseService implements IRoleMenu
|
||||
});
|
||||
return menuUrls;
|
||||
}
|
||||
|
||||
/**
|
||||
* 更新 mongo 用户
|
||||
* @param roleId
|
||||
*/
|
||||
private void updateMongoLoginUser(String roleId) {
|
||||
if (mongoLoginUserService != null) {
|
||||
CachedThreadPoolUtil.execute(() -> {
|
||||
List<LoginUser> loginUsers = roleUserService.listUserPOByRoleId(roleId).stream().map(UserUtil::createLoginUser).collect(Collectors.toList());
|
||||
mongoLoginUserService.update(loginUsers);
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -1,18 +1,24 @@
|
||||
package ink.wgink.service.role.service.impl;
|
||||
|
||||
import ink.wgink.common.base.DefaultBaseService;
|
||||
import ink.wgink.interfaces.user.mongo.IMongoLoginUserService;
|
||||
import ink.wgink.pojo.bos.LoginUser;
|
||||
import ink.wgink.pojo.dtos.permission.PermissionDTO;
|
||||
import ink.wgink.pojo.dtos.role.RolePermissionDTO;
|
||||
import ink.wgink.service.permission.service.IPermissionService;
|
||||
import ink.wgink.service.role.dao.IRolePermissionDao;
|
||||
import ink.wgink.service.role.pojo.vos.RolePermissionVO;
|
||||
import ink.wgink.service.role.service.IRolePermissionService;
|
||||
import ink.wgink.service.role.service.IRoleUserService;
|
||||
import ink.wgink.service.user.util.UserUtil;
|
||||
import ink.wgink.util.thread.CachedThreadPoolUtil;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
* When you feel like quitting. Think about why you started
|
||||
@ -31,6 +37,10 @@ public class RolePermissionServiceImpl extends DefaultBaseService implements IRo
|
||||
private IRolePermissionDao rolePermissionDao;
|
||||
@Autowired
|
||||
private IPermissionService permissionService;
|
||||
@Autowired
|
||||
private IRoleUserService roleUserService;
|
||||
@Autowired(required = false)
|
||||
private IMongoLoginUserService mongoLoginUserService;
|
||||
|
||||
@Override
|
||||
public void update(String roleId, RolePermissionVO rolePermissionVO) {
|
||||
@ -45,6 +55,7 @@ public class RolePermissionServiceImpl extends DefaultBaseService implements IRo
|
||||
params.put("permissionId", permissionIdArray[1]);
|
||||
rolePermissionDao.save(params);
|
||||
}
|
||||
updateMongoLoginUser(roleId);
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -101,5 +112,18 @@ public class RolePermissionServiceImpl extends DefaultBaseService implements IRo
|
||||
return permissionUrls;
|
||||
}
|
||||
|
||||
/**
|
||||
* 更新 mongo 用户
|
||||
*
|
||||
* @param roleId
|
||||
*/
|
||||
private void updateMongoLoginUser(String roleId) {
|
||||
if (mongoLoginUserService != null) {
|
||||
CachedThreadPoolUtil.execute(() -> {
|
||||
List<LoginUser> loginUsers = roleUserService.listUserPOByRoleId(roleId).stream().map(UserUtil::createLoginUser).collect(Collectors.toList());
|
||||
mongoLoginUserService.update(loginUsers);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -15,9 +15,8 @@ import ink.wgink.pojo.pos.RolePO;
|
||||
import ink.wgink.pojo.result.SuccessResultList;
|
||||
import ink.wgink.service.role.dao.IRoleDao;
|
||||
import ink.wgink.service.role.pojo.vos.RoleVO;
|
||||
import ink.wgink.service.role.service.IRoleMenuService;
|
||||
import ink.wgink.service.role.service.IRolePermissionService;
|
||||
import ink.wgink.service.role.service.IRoleService;
|
||||
import ink.wgink.service.role.service.IRoleUserService;
|
||||
import ink.wgink.util.UUIDUtil;
|
||||
import ink.wgink.util.map.HashMapUtil;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
@ -42,9 +41,7 @@ public class RoleServiceImpl extends DefaultBaseService implements IRoleService
|
||||
@Autowired
|
||||
private IRoleDao roleDao;
|
||||
@Autowired
|
||||
private IRoleMenuService roleMenuService;
|
||||
@Autowired
|
||||
private IRolePermissionService rolePermissionService;
|
||||
private IRoleUserService roleUserService;
|
||||
|
||||
@Override
|
||||
public void save(RoleVO roleVO) throws SaveException, SearchException {
|
||||
@ -65,6 +62,9 @@ public class RoleServiceImpl extends DefaultBaseService implements IRoleService
|
||||
|
||||
@Override
|
||||
public void remove(List<String> ids) throws RemoveException {
|
||||
// 删除角色用户
|
||||
roleUserService.delete(ids);
|
||||
|
||||
Map<String, Object> params = getHashMap(10);
|
||||
params.put("roleIds", ids);
|
||||
setUpdateInfo(params);
|
||||
|
@ -7,6 +7,7 @@ import ink.wgink.interfaces.consts.ISystemConstant;
|
||||
import ink.wgink.interfaces.role.IRoleUserDeleteAfterHandler;
|
||||
import ink.wgink.interfaces.role.IRoleUserSaveAfterHandler;
|
||||
import ink.wgink.interfaces.user.IUserBaseService;
|
||||
import ink.wgink.interfaces.user.mongo.IMongoLoginUserService;
|
||||
import ink.wgink.pojo.ListPage;
|
||||
import ink.wgink.pojo.dtos.department.DepartmentUserDTO;
|
||||
import ink.wgink.pojo.dtos.role.RoleSimpleDTO;
|
||||
@ -18,6 +19,8 @@ import ink.wgink.service.department.service.IDepartmentUserService;
|
||||
import ink.wgink.service.role.dao.IRoleUserDao;
|
||||
import ink.wgink.service.role.service.IRoleService;
|
||||
import ink.wgink.service.role.service.IRoleUserService;
|
||||
import ink.wgink.service.user.pojo.pos.UserPO;
|
||||
import ink.wgink.util.thread.CachedThreadPoolUtil;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
@ -49,6 +52,8 @@ public class RoleUserServiceImpl extends DefaultBaseService implements IRoleUser
|
||||
private IRoleUserSaveAfterHandler roleUserSaveAfterHandler;
|
||||
@Autowired(required = false)
|
||||
private IRoleUserDeleteAfterHandler roleUserDeleteAfterHandler;
|
||||
@Autowired(required = false)
|
||||
private IMongoLoginUserService mongoLoginUserService;
|
||||
|
||||
@Override
|
||||
public void save(String roleId, List<String> saveUserIds) {
|
||||
@ -74,6 +79,7 @@ public class RoleUserServiceImpl extends DefaultBaseService implements IRoleUser
|
||||
i--;
|
||||
}
|
||||
}
|
||||
updateMongoLoginUser(saveUserIds);
|
||||
if (roleUserSaveAfterHandler != null) {
|
||||
roleUserSaveAfterHandler.handle(roleId, saveUserIds);
|
||||
}
|
||||
@ -96,18 +102,33 @@ public class RoleUserServiceImpl extends DefaultBaseService implements IRoleUser
|
||||
params.put("userId", userId);
|
||||
roleUserDao.save(params);
|
||||
}
|
||||
updateMongoLoginUser(saveUserIds);
|
||||
}
|
||||
if (roleUserSaveAfterHandler != null) {
|
||||
roleUserSaveAfterHandler.handle(roleId, saveUserIds);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void delete(String roleId) {
|
||||
List<String> userIds = listUserId(roleId);
|
||||
delete(roleId, userIds);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void delete(List<String> roleIds) {
|
||||
roleIds.forEach(roleId -> {
|
||||
delete(roleId);
|
||||
});
|
||||
}
|
||||
|
||||
@Override
|
||||
public void delete(String roleId, List<String> userIds) {
|
||||
Map<String, Object> params = getHashMap(4);
|
||||
params.put("roleId", roleId);
|
||||
params.put("userIds", userIds);
|
||||
roleUserDao.delete(params);
|
||||
updateMongoLoginUser(userIds);
|
||||
if (roleUserDeleteAfterHandler != null) {
|
||||
roleUserSaveAfterHandler.handle(roleId, userIds);
|
||||
}
|
||||
@ -267,6 +288,39 @@ public class RoleUserServiceImpl extends DefaultBaseService implements IRoleUser
|
||||
return new SuccessResultList<>(userDTOs, pageInfo.getPageNum(), pageInfo.getTotal());
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<UserPO> listUserPO(Map<String, Object> params) {
|
||||
params = params == null ? getHashMap(0) : params;
|
||||
return roleUserDao.listUserPO(params);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<UserPO> listUserPOByRoleId(String roleId) {
|
||||
Map<String, Object> params = getHashMap(2);
|
||||
params.put("roleId", roleId);
|
||||
return listUserPO(params);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<UserPO> listUserPOByRoleIds(List<String> roleIds) {
|
||||
Map<String, Object> params = getHashMap(2);
|
||||
params.put("roleIds", roleIds);
|
||||
return listUserPO(params);
|
||||
}
|
||||
|
||||
/**
|
||||
* 更新mongo
|
||||
*
|
||||
* @param userIds
|
||||
*/
|
||||
private void updateMongoLoginUser(List<String> userIds) {
|
||||
if (mongoLoginUserService != null) {
|
||||
CachedThreadPoolUtil.execute(() -> {
|
||||
mongoLoginUserService.updateByUserIds(userIds);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
private List<String> listGroupUserId(Map<String, Object> params) {
|
||||
return roleUserDao.listGroupUserId(params);
|
||||
}
|
||||
|
@ -7,7 +7,6 @@
|
||||
<resultMap id="roleUserDTO" type="ink.wgink.pojo.dtos.role.RoleUserDTO" extends="ink.wgink.service.user.dao.IUserDao.userDTO">
|
||||
<result column="role_id" property="roleId"/>
|
||||
<result column="user_id" property="userId"/>
|
||||
<result column="user_sort" property="userSort"/>
|
||||
</resultMap>
|
||||
|
||||
<!-- 建表 -->
|
||||
@ -214,6 +213,106 @@
|
||||
</if>
|
||||
</select>
|
||||
|
||||
<!-- 用户列表 -->
|
||||
<select id="listUserPO" parameterType="map" resultMap="ink.wgink.service.user.dao.IUserDao.userPO" useCache="false">
|
||||
SELECT
|
||||
user_id,
|
||||
user_password,
|
||||
user_username,
|
||||
user_name,
|
||||
user_phone,
|
||||
user_email,
|
||||
user_ukey,
|
||||
user_ukey_electronic_secret_key,
|
||||
user_type,
|
||||
user_state,
|
||||
user_expired_date,
|
||||
user_avatar,
|
||||
user_longitude,
|
||||
user_latitude,
|
||||
last_login_address,
|
||||
LEFT(last_login_time, 19) last_login_time,
|
||||
login_type,
|
||||
LEFT(gmt_password_modified, 19) gmt_password_modified,
|
||||
remarks,
|
||||
LEFT(gmt_create, 19) gmt_create
|
||||
FROM
|
||||
sys_user t1
|
||||
WHERE
|
||||
t1.is_delete = 0
|
||||
<if test="userType != null">
|
||||
AND
|
||||
t1.user_type = #{userType}
|
||||
</if>
|
||||
<if test="userState != null">
|
||||
AND
|
||||
t1.user_state = #{userState}
|
||||
</if>
|
||||
<if test="excludeUserType != null and excludeUserType != ''">
|
||||
AND
|
||||
t1.user_type != #{excludeUserType}
|
||||
</if>
|
||||
<if test="roleId != null and roleId != ''">
|
||||
AND
|
||||
t1.user_id IN (
|
||||
SELECT
|
||||
st1.user_id
|
||||
FROM
|
||||
sys_role_user st1
|
||||
WHERE
|
||||
role_id = #{roleId}
|
||||
)
|
||||
</if>
|
||||
<if test="roleIds != null and roleIds.size > 0">
|
||||
AND
|
||||
t1.user_id IN (
|
||||
SELECT
|
||||
user_id
|
||||
FROM
|
||||
sys_role_user st1
|
||||
WHERE
|
||||
st1.role_id IN
|
||||
<foreach collection="roleIds" index="index" open="(" separator="," close=")">
|
||||
#{roleIds[${index}]}
|
||||
</foreach>
|
||||
)
|
||||
</if>
|
||||
<if test="noRole != null and noRole == true">
|
||||
AND
|
||||
t1.user_id NOT IN (
|
||||
SELECT
|
||||
st3.user_id
|
||||
FROM
|
||||
sys_role_user st3
|
||||
)
|
||||
</if>
|
||||
<if test="excludeRoleId != null and excludeRoleId != ''">
|
||||
AND
|
||||
t1.user_id NOT IN (
|
||||
SELECT
|
||||
user_id
|
||||
FROM
|
||||
sys_role_user st1
|
||||
WHERE
|
||||
st1.role_id = #{excludeRoleId}
|
||||
)
|
||||
</if>
|
||||
<if test="excludeRoleIds != null and excludeRoleIds.size > 0">
|
||||
AND
|
||||
t1.user_id NOT IN (
|
||||
SELECT
|
||||
user_id
|
||||
FROM
|
||||
sys_role_user st1
|
||||
WHERE
|
||||
st1.role_id IN
|
||||
<foreach collection="excludeRoleIds" index="index" open="(" separator="," close=")">
|
||||
#{excludeRoleIds[${index}]}
|
||||
</foreach>
|
||||
)
|
||||
</if>
|
||||
</select>
|
||||
|
||||
<!-- 部门用户列表 -->
|
||||
<select id="listRoleUser" parameterType="map" resultMap="roleUserDTO" useCache="false">
|
||||
SELECT
|
||||
|
@ -94,10 +94,18 @@ public interface IUserDao extends IInitBaseTable {
|
||||
*
|
||||
* @param params
|
||||
* @return
|
||||
* @throws SaveException
|
||||
* @throws SearchException
|
||||
*/
|
||||
UserPO getPO(Map<String, Object> params) throws SearchException;
|
||||
|
||||
/**
|
||||
* 详情
|
||||
* @param params
|
||||
* @return
|
||||
* @throws SearchException
|
||||
*/
|
||||
List<UserPO> listPO(Map<String, Object> params) throws SearchException;
|
||||
|
||||
/**
|
||||
* 详情
|
||||
*
|
||||
|
@ -4,6 +4,8 @@ import ink.wgink.interfaces.user.IUserBaseService;
|
||||
import ink.wgink.interfaces.user.IUserCheckService;
|
||||
import ink.wgink.pojo.result.UploadExcelResultDTO;
|
||||
import ink.wgink.pojo.vos.UpdatePasswordVO;
|
||||
import ink.wgink.service.user.enums.UserStateEnum;
|
||||
import ink.wgink.service.user.enums.UserTypeEnum;
|
||||
import ink.wgink.service.user.pojo.dtos.AppUserDTO;
|
||||
import ink.wgink.service.user.pojo.pos.UserPO;
|
||||
import ink.wgink.service.user.pojo.vos.*;
|
||||
@ -249,6 +251,48 @@ public interface IUserService extends IUserBaseService, IUserCheckService {
|
||||
*/
|
||||
UserPO getPOByPhone(String phone);
|
||||
|
||||
/**
|
||||
* 用户列表
|
||||
*
|
||||
* @param params
|
||||
* @return
|
||||
*/
|
||||
List<UserPO> listPO(Map<String, Object> params);
|
||||
|
||||
/**
|
||||
* 用户列表
|
||||
*
|
||||
* @param userIds
|
||||
* @return
|
||||
*/
|
||||
List<UserPO> listPOByUserIds(List<String> userIds);
|
||||
|
||||
/**
|
||||
* 用户列表
|
||||
*
|
||||
* @param userState
|
||||
* @return
|
||||
*/
|
||||
List<UserPO> listPOByUserState(UserStateEnum userState);
|
||||
|
||||
/**
|
||||
* 用户列表
|
||||
*
|
||||
* @param userType
|
||||
* @return
|
||||
*/
|
||||
List<UserPO> listPOByUserType(UserTypeEnum userType);
|
||||
|
||||
/**
|
||||
* 用户列表
|
||||
*
|
||||
* @param userState
|
||||
* @param userType
|
||||
* @return
|
||||
*/
|
||||
List<UserPO> listPOByUserStateAndUserType(UserStateEnum userState, UserTypeEnum userType);
|
||||
|
||||
|
||||
/**
|
||||
* 更新登陆信息
|
||||
*
|
||||
|
@ -14,6 +14,7 @@ import ink.wgink.interfaces.consts.ISystemConstant;
|
||||
import ink.wgink.interfaces.manager.ISystemConfigManager;
|
||||
import ink.wgink.interfaces.user.IUserSaveAfterHandler;
|
||||
import ink.wgink.interfaces.user.IUserUpdateAfterHandler;
|
||||
import ink.wgink.interfaces.user.mongo.IMongoLoginUserService;
|
||||
import ink.wgink.interfaces.user.wechat.miniapp.IMiniappUserBaseService;
|
||||
import ink.wgink.interfaces.user.wechat.official.account.IOfficialAccountBaseService;
|
||||
import ink.wgink.module.file.excel.error.AbstractErrorExcelHandler;
|
||||
@ -27,6 +28,7 @@ import ink.wgink.pojo.result.UploadExcelResultDTO;
|
||||
import ink.wgink.pojo.vos.UpdatePasswordVO;
|
||||
import ink.wgink.service.user.dao.IUserDao;
|
||||
import ink.wgink.service.user.enums.UserStateEnum;
|
||||
import ink.wgink.service.user.enums.UserTypeEnum;
|
||||
import ink.wgink.service.user.enums.UserUpdateTypeEnum;
|
||||
import ink.wgink.service.user.excel.UserExcel;
|
||||
import ink.wgink.service.user.excel.UserExcelError;
|
||||
@ -43,6 +45,7 @@ import ink.wgink.util.ResourceUtil;
|
||||
import ink.wgink.util.UUIDUtil;
|
||||
import ink.wgink.util.date.DateUtil;
|
||||
import ink.wgink.util.map.HashMapUtil;
|
||||
import ink.wgink.util.thread.CachedThreadPoolUtil;
|
||||
import org.apache.commons.codec.digest.DigestUtils;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.joda.time.DateTime;
|
||||
@ -92,6 +95,8 @@ public class UserServiceImpl extends DefaultBaseService implements IUserService
|
||||
private IUserSaveAfterHandler userSaveAfterHandler;
|
||||
@Autowired(required = false)
|
||||
private IUserUpdateAfterHandler userUpdateAfterHandler;
|
||||
@Autowired(required = false)
|
||||
private IMongoLoginUserService mongoLoginUserService;
|
||||
|
||||
@Override
|
||||
public void save(UserVO userVO) {
|
||||
@ -125,6 +130,8 @@ public class UserServiceImpl extends DefaultBaseService implements IUserService
|
||||
setSaveInfo(params);
|
||||
}
|
||||
userDao.save(params);
|
||||
|
||||
updateMongoLoginUser(userId);
|
||||
if (userSaveAfterHandler != null) {
|
||||
userSaveAfterHandler.handle(userId, userVO.getUserUsername(), userVO.getUserName());
|
||||
}
|
||||
@ -139,6 +146,7 @@ public class UserServiceImpl extends DefaultBaseService implements IUserService
|
||||
userDao.remove(params);
|
||||
// 删除关联用户
|
||||
deleteRelationUser(ids);
|
||||
updateMongoLoginUser(ids);
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -150,6 +158,7 @@ public class UserServiceImpl extends DefaultBaseService implements IUserService
|
||||
setUpdateInfo(params);
|
||||
params.put("userId", userId);
|
||||
userDao.update(params);
|
||||
updateMongoLoginUser(userId);
|
||||
if (userUpdateAfterHandler != null) {
|
||||
userUpdateAfterHandler.handle(userId);
|
||||
}
|
||||
@ -169,6 +178,7 @@ public class UserServiceImpl extends DefaultBaseService implements IUserService
|
||||
params.put("userId", userId);
|
||||
setAppUpdateInfo(token, params);
|
||||
userDao.update(params);
|
||||
updateMongoLoginUser(userId);
|
||||
if (userUpdateAfterHandler != null) {
|
||||
userUpdateAfterHandler.handle(userId);
|
||||
}
|
||||
@ -186,6 +196,8 @@ public class UserServiceImpl extends DefaultBaseService implements IUserService
|
||||
params.put("userPassword", passwordEncoder.encode(DigestUtils.md5Hex(DigestUtils.md5Hex(DigestUtils.md5Hex(defaultPassword)))));
|
||||
userDao.updatePassword(params);
|
||||
|
||||
updateMongoLoginUser(userId);
|
||||
|
||||
// 记录日志
|
||||
UserAdjustmentBO userAdjustmentBO = new UserAdjustmentBO();
|
||||
userAdjustmentBO.setUserId(userId);
|
||||
@ -219,10 +231,11 @@ public class UserServiceImpl extends DefaultBaseService implements IUserService
|
||||
params.put("userId", userId);
|
||||
userDao.updateUsername(params);
|
||||
|
||||
updateMongoLoginUser(userId);
|
||||
|
||||
if (updateAdjustment) {
|
||||
updateUsernameAdjustment(userId, oldUserDTO.getUserUsername(), updateUsernameVO);
|
||||
}
|
||||
|
||||
if (userUpdateAfterHandler != null) {
|
||||
userUpdateAfterHandler.handle(userId);
|
||||
}
|
||||
@ -284,6 +297,8 @@ public class UserServiceImpl extends DefaultBaseService implements IUserService
|
||||
params.put("userId", userPO.getUserId());
|
||||
userDao.updatePassword(params);
|
||||
|
||||
updateMongoLoginUser(userPO.getUserId());
|
||||
|
||||
// 日志
|
||||
UserAdjustmentBO userAdjustmentBO = new UserAdjustmentBO();
|
||||
userAdjustmentBO.setUserId(userPO.getUserId());
|
||||
@ -306,6 +321,8 @@ public class UserServiceImpl extends DefaultBaseService implements IUserService
|
||||
params.put("userId", userId);
|
||||
params.put("userExpiredDate", updateExpiredDateVO.getExpiredDate());
|
||||
userDao.updateExpiredDate(params);
|
||||
|
||||
updateMongoLoginUser(userId);
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -315,6 +332,8 @@ public class UserServiceImpl extends DefaultBaseService implements IUserService
|
||||
params.put("userState", UserStateEnum.NORMAL.getValue());
|
||||
setUpdateInfo(params);
|
||||
userDao.updateUserState(params);
|
||||
|
||||
updateMongoLoginUser(userId);
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -324,6 +343,8 @@ public class UserServiceImpl extends DefaultBaseService implements IUserService
|
||||
params.put("userState", UserStateEnum.NORMAL.getValue());
|
||||
setUpdateInfo(params);
|
||||
userDao.updateUserState(params);
|
||||
|
||||
updateMongoLoginUser(userIds);
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -333,6 +354,8 @@ public class UserServiceImpl extends DefaultBaseService implements IUserService
|
||||
params.put("userState", UserStateEnum.UN_PASS.getValue());
|
||||
setUpdateInfo(params);
|
||||
userDao.updateUserState(params);
|
||||
|
||||
updateMongoLoginUser(userId);
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -342,6 +365,8 @@ public class UserServiceImpl extends DefaultBaseService implements IUserService
|
||||
params.put("userState", UserStateEnum.UN_PASS.getValue());
|
||||
setUpdateInfo(params);
|
||||
userDao.updateUserState(params);
|
||||
|
||||
updateMongoLoginUser(userIds);
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -415,6 +440,44 @@ public class UserServiceImpl extends DefaultBaseService implements IUserService
|
||||
return userDao.getPO(params);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<UserPO> listPO(Map<String, Object> params) {
|
||||
params = params == null ? getHashMap(0) : params;
|
||||
return userDao.listPO(params);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<UserPO> listPOByUserIds(List<String> userIds) {
|
||||
if (userIds == null || userIds.isEmpty()) {
|
||||
return new ArrayList<>();
|
||||
}
|
||||
Map<String, Object> params = getHashMap(2);
|
||||
params.put("userIds", userIds);
|
||||
return listPO(params);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<UserPO> listPOByUserState(UserStateEnum userState) {
|
||||
Map<String, Object> params = getHashMap(2);
|
||||
params.put("userState", userState.getValue());
|
||||
return listPO(params);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<UserPO> listPOByUserType(UserTypeEnum userType) {
|
||||
Map<String, Object> params = getHashMap(2);
|
||||
params.put("userType", userType.getValue());
|
||||
return listPO(params);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<UserPO> listPOByUserStateAndUserType(UserStateEnum userState, UserTypeEnum userType) {
|
||||
Map<String, Object> params = getHashMap(4);
|
||||
params.put("userState", userState.getValue());
|
||||
params.put("userType", userType.getValue());
|
||||
return listPO(params);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void updateLoginInfo(Map<String, Object> params) throws UpdateException {
|
||||
userDao.updateLoginInfo(params);
|
||||
@ -704,6 +767,35 @@ public class UserServiceImpl extends DefaultBaseService implements IUserService
|
||||
return userDao.list(params);
|
||||
}
|
||||
|
||||
/**
|
||||
* 更新mongo
|
||||
*
|
||||
* @param userId
|
||||
*/
|
||||
private void updateMongoLoginUser(String userId) {
|
||||
if (mongoLoginUserService != null) {
|
||||
CachedThreadPoolUtil.execute(() -> {
|
||||
LOG.debug("update mongo login user");
|
||||
mongoLoginUserService.updateByUserId(userId);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 更新mongo
|
||||
*
|
||||
* @param userIds
|
||||
*/
|
||||
private void updateMongoLoginUser(List<String> userIds) {
|
||||
if (mongoLoginUserService != null) {
|
||||
CachedThreadPoolUtil.execute(() -> {
|
||||
LOG.debug("update mongo login user");
|
||||
mongoLoginUserService.updateByUserIds(userIds);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Excel导入错误对象
|
||||
*
|
||||
|
@ -0,0 +1,103 @@
|
||||
package ink.wgink.service.user.util;
|
||||
|
||||
import ink.wgink.exceptions.base.SystemException;
|
||||
import ink.wgink.interfaces.consts.ISystemConstant;
|
||||
import ink.wgink.interfaces.manager.ISystemConfigManager;
|
||||
import ink.wgink.pojo.bos.LoginUser;
|
||||
import ink.wgink.service.user.pojo.pos.UserPO;
|
||||
import ink.wgink.util.ReflectUtil;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.joda.time.DateTime;
|
||||
import org.joda.time.format.DateTimeFormat;
|
||||
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* @ClassName: UserUtil
|
||||
* @Description: 用户工具
|
||||
* @Author: wanggeng
|
||||
* @Date: 2022/5/19 17:56
|
||||
* @Version: 1.0
|
||||
*/
|
||||
public class UserUtil {
|
||||
|
||||
/**
|
||||
* 创建登录用户
|
||||
*
|
||||
* @param userPO
|
||||
* @return
|
||||
*/
|
||||
public static LoginUser createLoginUser(UserPO userPO) {
|
||||
LoginUser loginUser = new LoginUser(userPO.getUserUsername(), userPO.getUserPassword(),
|
||||
userPO.getUserType() == 1 ? true : false,
|
||||
isAccountNonExpired(userPO),
|
||||
isCredentialsNonExpired(userPO),
|
||||
userPO.getUserState() == 0 ? true : false);
|
||||
loginUser.setUserId(userPO.getUserId());
|
||||
loginUser.setUserName(userPO.getUserName());
|
||||
loginUser.setUserPhone(userPO.getUserPhone());
|
||||
loginUser.setUserUKey(userPO.getUserUKey());
|
||||
loginUser.setLoginType(userPO.getLoginType());
|
||||
loginUser.setUserEmail(userPO.getUserEmail());
|
||||
loginUser.setUserAvatar(userPO.getUserAvatar());
|
||||
loginUser.setUserState(userPO.getUserState());
|
||||
loginUser.setUserType(userPO.getUserType());
|
||||
return loginUser;
|
||||
}
|
||||
|
||||
/**
|
||||
* 账号是否没有过期
|
||||
*
|
||||
* @param userPO
|
||||
* @return
|
||||
*/
|
||||
private static boolean isAccountNonExpired(UserPO userPO) {
|
||||
if (StringUtils.equals(userPO.getUserUsername(), ISystemConstant.ADMIN)) {
|
||||
return true;
|
||||
}
|
||||
if (!StringUtils.isBlank(userPO.getUserExpiredDate())) {
|
||||
// 判断用户是否超时失效
|
||||
DateTime expiredDateTime = DateTime.parse(userPO.getUserExpiredDate(), DateTimeFormat.forPattern(ISystemConstant.DATE_FORMATTER_YYYY_MM_DD_HH_MM_SS));
|
||||
DateTime nowDateTime = DateTime.now();
|
||||
if (expiredDateTime.isBefore(nowDateTime)) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* 密码是否没有过期
|
||||
*
|
||||
* @param userPO
|
||||
* @return
|
||||
*/
|
||||
private static boolean isCredentialsNonExpired(UserPO userPO) {
|
||||
if (StringUtils.equals(userPO.getUserUsername(), ISystemConstant.ADMIN)) {
|
||||
return true;
|
||||
}
|
||||
try {
|
||||
ISystemConfigManager singleInstance = ReflectUtil.getSingleInstance("ink.wgink.login.base.manager.ConfigManager", ISystemConfigManager.class);
|
||||
Map<String, String> config = singleInstance.getConfig();
|
||||
String passwordValidity = config.get("passwordValidity");
|
||||
// 自定义密码有效期
|
||||
if (StringUtils.equals(passwordValidity, "custom")) {
|
||||
Object passwordValidityDays = config.get("passwordValidityDays");
|
||||
int validityDays = passwordValidityDays == null ? 0 : (Integer) passwordValidityDays;
|
||||
if (validityDays <= 0) {
|
||||
return true;
|
||||
}
|
||||
DateTime passwordModifiedDateTime = DateTime.parse(userPO.getGmtPasswordModified(), DateTimeFormat.forPattern(ISystemConstant.DATE_FORMATTER_YYYY_MM_DD_HH_MM_SS));
|
||||
DateTime passwordExpiredDateTime = passwordModifiedDateTime.plusDays(validityDays);
|
||||
DateTime nowDateTime = DateTime.now();
|
||||
if (passwordExpiredDateTime.isBefore(nowDateTime)) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
} catch (ReflectUtil.ReflectException e) {
|
||||
throw new SystemException(e);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
@ -317,6 +317,50 @@
|
||||
</if>
|
||||
</select>
|
||||
|
||||
<!-- 用户列表 -->
|
||||
<select id="listPO" parameterType="map" resultMap="userPO" useCache="true">
|
||||
SELECT
|
||||
user_id,
|
||||
user_password,
|
||||
user_username,
|
||||
user_name,
|
||||
user_phone,
|
||||
user_email,
|
||||
user_ukey,
|
||||
user_ukey_electronic_secret_key,
|
||||
user_type,
|
||||
user_state,
|
||||
user_expired_date,
|
||||
user_avatar,
|
||||
user_longitude,
|
||||
user_latitude,
|
||||
last_login_address,
|
||||
LEFT(last_login_time, 19) last_login_time,
|
||||
login_type,
|
||||
LEFT(gmt_password_modified, 19) gmt_password_modified,
|
||||
remarks,
|
||||
LEFT(gmt_create, 19) gmt_create
|
||||
FROM
|
||||
sys_user
|
||||
WHERE
|
||||
is_delete = 0
|
||||
<if test="userIds != null and userIds.size > 0">
|
||||
AND
|
||||
user_id IN
|
||||
<foreach collection="userIds" index="index" open="(" separator="," close=")">
|
||||
#{userIds[${}]}
|
||||
</foreach>
|
||||
</if>
|
||||
<if test="userState != null">
|
||||
AND
|
||||
user_state = #{userState}
|
||||
</if>
|
||||
<if test="userType != null">
|
||||
AND
|
||||
user_type = #{userType}
|
||||
</if>
|
||||
</select>
|
||||
|
||||
<!-- 获取用户 -->
|
||||
<select id="get" parameterType="map" resultMap="userDTO" useCache="true">
|
||||
SELECT
|
||||
|
Loading…
Reference in New Issue
Block a user