|
@@ -9,6 +9,10 @@ import java.util.Map;
|
|
|
import java.util.Set;
|
|
|
import java.util.stream.Collectors;
|
|
|
|
|
|
+import cn.com.qmth.examcloud.common.uac.enums.RoleMeta;
|
|
|
+import cn.com.qmth.examcloud.service.core.entity.*;
|
|
|
+import cn.com.qmth.examcloud.service.core.repo.*;
|
|
|
+import org.apache.commons.lang.ArrayUtils;
|
|
|
import org.apache.commons.lang.StringUtils;
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
|
import org.springframework.data.domain.Example;
|
|
@@ -22,10 +26,6 @@ import cn.com.qmth.examcloud.common.uac.entity.AccessUser;
|
|
|
import cn.com.qmth.examcloud.common.uac.enums.RoleMeta;
|
|
|
import cn.com.qmth.examcloud.common.util.RedisUtil;
|
|
|
import cn.com.qmth.examcloud.service.core.dto.UserInfo;
|
|
|
-import cn.com.qmth.examcloud.service.core.entity.Org;
|
|
|
-import cn.com.qmth.examcloud.service.core.entity.Student;
|
|
|
-import cn.com.qmth.examcloud.service.core.entity.User;
|
|
|
-import cn.com.qmth.examcloud.service.core.entity.UserRole;
|
|
|
import cn.com.qmth.examcloud.service.core.enums.UserType;
|
|
|
import cn.com.qmth.examcloud.service.core.params.UserParam;
|
|
|
import cn.com.qmth.examcloud.service.core.repo.OrgRepo;
|
|
@@ -52,6 +52,9 @@ public class UserService {
|
|
|
@Autowired
|
|
|
UserRoleRepo userRoleRepo;
|
|
|
|
|
|
+ @Autowired
|
|
|
+ UserLoginRepo userLoginRepo;
|
|
|
+
|
|
|
public Page<User> findAll(User userCriteria, Pageable pageable){
|
|
|
ExampleMatcher exampleMatcher = ExampleMatcher.matching()
|
|
|
.withMatcher("name", contains())
|
|
@@ -75,7 +78,11 @@ public class UserService {
|
|
|
}else if(user.getType() == UserType.STUDENT){
|
|
|
//截取身份证后6位为学生登录密码
|
|
|
Student student = studentRepo.findByUserId(userId);
|
|
|
- user.setPassword(StringUtils.substring(student.getIdentityNumber(),-6,-1));
|
|
|
+ if(StringUtils.isNotEmpty(student.getIdentityNumber())){
|
|
|
+ user.setPassword(StringUtils.substring(student.getIdentityNumber(),-6,-1));
|
|
|
+ }else{
|
|
|
+ user.setPassword(UserParam.DEFAULT_PASSWORD);
|
|
|
+ }
|
|
|
}
|
|
|
user.setUpdateTime(new Date());
|
|
|
userRepo.save(user);
|
|
@@ -123,12 +130,40 @@ public class UserService {
|
|
|
}else if(!user.getEnable()){
|
|
|
throw new RuntimeException("该用户被禁用");
|
|
|
}else{
|
|
|
+ initUserLogin(user);
|
|
|
String token = AccessCtrlUtil.buildToken();
|
|
|
createAccessUser(token,user,null);
|
|
|
+ createUserLogin(token,user);
|
|
|
return getUserInfo(user,token);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ /**
|
|
|
+ * 初始化用户登录
|
|
|
+ * @param user
|
|
|
+ */
|
|
|
+ public void initUserLogin(User user){
|
|
|
+ //判断是否已登录,若已登录则强制已登录用户退出
|
|
|
+ UserLogin userLogin= userLoginRepo.findFirstByUserId(user.getId());
|
|
|
+ if(userLogin != null){
|
|
|
+ RedisUtil.deleteByte(userLogin.getToken());
|
|
|
+ userLoginRepo.deleteByUserId(userLogin.getUserId());
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 创建用户登录记录
|
|
|
+ * @param token
|
|
|
+ * @param user
|
|
|
+ */
|
|
|
+ public void createUserLogin(String token,User user){
|
|
|
+ UserLogin userLogin = new UserLogin();
|
|
|
+ userLogin.setLoginTime(new Date());
|
|
|
+ userLogin.setUserId(user.getId());
|
|
|
+ userLogin.setToken(token);
|
|
|
+ userLoginRepo.save(userLogin);
|
|
|
+ }
|
|
|
+
|
|
|
/**
|
|
|
* 创建访问用户并加入K/V缓存
|
|
|
* @param token
|
|
@@ -177,6 +212,11 @@ public class UserService {
|
|
|
return userInfo;
|
|
|
}
|
|
|
|
|
|
+ /**
|
|
|
+ * 获取角色名称
|
|
|
+ * @param userRoles
|
|
|
+ * @return
|
|
|
+ */
|
|
|
public List<String> getRoleNames(List<UserRole> userRoles){
|
|
|
|
|
|
List<String> roleNameList = userRoles.stream()
|
|
@@ -192,6 +232,7 @@ public class UserService {
|
|
|
*/
|
|
|
public void logout(AccessUser accessUser) {
|
|
|
RedisUtil.deleteByte(accessUser.getToken());
|
|
|
+ userLoginRepo.deleteByUserId(accessUser.getUserId());
|
|
|
}
|
|
|
|
|
|
public List<User> getMarker(Long rootOrgId) {
|