Эх сурвалжийг харах

针对新注册用户存在管理员信息不存在的情况进行相关优化处理

hejq 7 жил өмнө
parent
commit
3a4c6c82f5

+ 31 - 0
src/main/java/com/uas/platform/b2b/v2/service/EnterpriseService.java

@@ -1,14 +1,45 @@
 package com.uas.platform.b2b.v2.service;
 
 import com.uas.platform.b2b.model.Enterprise;
+import com.uas.platform.b2b.model.User;
 import com.uas.sso.entity.UserSpaceView;
 
+/**
+ * 企业信息
+ *
+ * @author US50
+ */
 public interface EnterpriseService {
 
+    /**
+     * 保存账户中心企业信息
+     *
+     * @param userSpace 账户中心企业信息
+     * @return Enterprise 封装后的B2B企业信息
+     */
 	Enterprise save(UserSpaceView userSpace);
 
+    /**
+     * 保存企业信息
+     *
+     * @param enterprise 企业信息
+     *
+     * @return Enterprise
+     */
 	Enterprise save(Enterprise enterprise);
 
+    /**
+     * 删除企业信息
+     *
+     * @param userSpace 账户中心企业信息
+     */
 	void delete(UserSpaceView userSpace);
 
+    /**
+     * 为用户设置角色
+     *
+     * @param user 用户
+     * @param enterprise 企业
+     */
+    void setUserRole(User user, Enterprise enterprise);
 }

+ 41 - 21
src/main/java/com/uas/platform/b2b/v2/service/impl/EnterpriseServiceImpl.java

@@ -85,28 +85,25 @@ public class EnterpriseServiceImpl implements EnterpriseService {
 			enterprise.setAccessSecret(detail.getAccessSecret());
 		}
 		enterprise = enterpriseDao.save(enterprise);
-
-		// 把管理员添加进企业
-		User user = userDao.findOne(enterprise.getEnAdminuu());
-		if (user == null) {
-			user = new User(detail.getAdmin());
-		}
+        // 把管理员添加进企业
+        User user = userDao.findOne(enterprise.getEnAdminuu());
+        // 先进行管理员信息查找,如果不存在,等待用户信息先存储
+        synchronized (user) {
+            if (null == user) {
+                try {
+                    Thread.sleep(2000);
+                    user = userDao.findOne(enterprise.getEnAdminuu());
+                    if (null == user) {
+                        user = new User(detail.getAdmin());
+                    }
+                } catch (InterruptedException e) {
+                    e.printStackTrace();
+                }
+            }
+        }
 		user.addEnterprise(enterprise);
 		// 将用户设置为管理员,只对用户的当前企业的角色进行修改
-		// 新用户注册企业时为空
-		Set<Role> existRoles = new HashSet<Role>();
-		// 老用户注册新企业
-		if (!CollectionUtils.isEmpty(user.getRoles())) {
-			existRoles = user.getRoles();
-		}
-		// 设置为本企业管理员
-		List<Role> adminList = roleDao.findByEnUUAndDesc(enterprise.getUu(), "管理员");
-		if (!CollectionUtils.isEmpty(adminList)) {
-			existRoles.add(adminList.get(0));
-			user.setRoles(existRoles);
-		}
-		userDao.save(user);
-
+        setUserRole(user, enterprise);
 		if (isNew) {
 			final Long enUU = enterprise.getUu();
 			ThreadUtils.task(() -> {
@@ -117,7 +114,7 @@ public class EnterpriseServiceImpl implements EnterpriseService {
 		return enterprise;
 	}
 
-	private Enterprise getEnterprise(UserSpaceView userSpace) {
+    private Enterprise getEnterprise(UserSpaceView userSpace) {
 		Enterprise enterprise = null;
 		if (userSpace.getSpaceUU() != null) {
 			enterprise = enterpriseDao.findEnterpriseByUu(userSpace.getSpaceUU());
@@ -127,6 +124,29 @@ public class EnterpriseServiceImpl implements EnterpriseService {
 		return enterprise;
 	}
 
+    /**
+     * 为用户设置角色
+     *
+     * @param user 用户信息
+     * @param enterprise 企业信息
+     */
+    @Override
+    public void setUserRole(User user, Enterprise enterprise) {
+        // 新用户注册企业时为空
+        Set<Role> existRoles = new HashSet<Role>();
+        // 老用户注册新企业
+        if (!CollectionUtils.isEmpty(user.getRoles())) {
+            existRoles = user.getRoles();
+        }
+        // 设置为本企业管理员
+        List<Role> adminList = roleDao.findByEnUUAndDesc(enterprise.getUu(), "管理员");
+        if (!CollectionUtils.isEmpty(adminList)) {
+            existRoles.add(adminList.get(0));
+            user.setRoles(existRoles);
+        }
+        userDao.save(user);
+    }
+
 	@Override
 	public void delete(UserSpaceView userSpace) {
 		Enterprise enterprise = getEnterprise(userSpace);

+ 35 - 4
src/main/java/com/uas/platform/b2b/v2/service/impl/UserServiceImpl.java

@@ -6,18 +6,26 @@ import com.uas.platform.b2b.dao.UserDao;
 import com.uas.platform.b2b.model.Enterprise;
 import com.uas.platform.b2b.model.Role;
 import com.uas.platform.b2b.model.User;
+import com.uas.platform.b2b.v2.service.EnterpriseService;
 import com.uas.platform.b2b.v2.service.UserService;
 import com.uas.platform.core.model.Constant;
 import com.uas.platform.core.util.encry.Md5Utils;
 import com.uas.sso.entity.UserView;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
+import org.springframework.util.CollectionUtils;
 import org.springframework.util.StringUtils;
 
 import java.util.HashSet;
 import java.util.List;
+import java.util.Objects;
 import java.util.Set;
 
+/**
+ * UserServiceImpl
+ *
+ * @author US50
+ */
 @Service("v2.UserService")
 public class UserServiceImpl implements UserService {
 
@@ -27,13 +35,17 @@ public class UserServiceImpl implements UserService {
 	private RoleDao roleDao;
 	@Autowired
 	private EnterpriseDao enterpriseDao;
+
+	@Autowired
+    private EnterpriseService enterpriseService;
 	
 	static final String defaultPassword = "111111";
 
 	@Override
 	public User save(UserView user) {
 		User oldUser = getUser(user);
-		if (oldUser == null) { // 如果是新用户,就新增一个user
+        // 如果是新用户,就新增一个user
+		if (oldUser == null) {
 			oldUser = new com.uas.platform.b2b.model.User(user);
 			oldUser.setEnable(Constant.YES);
 			oldUser.setUserPwd(Md5Utils.encode(defaultPassword, oldUser.getUserUU()));
@@ -45,17 +57,36 @@ public class UserServiceImpl implements UserService {
 		oldUser.setUserTel(user.getMobile());
 		oldUser.setUserIMId(StringUtils.isEmpty(user.getImId()) ? null : Long.valueOf(user.getImId()));
 		if (user.getPassword() != null) {
-			if (user.getPassword().length() < 32) { // 传过来的是明文
+            // 传过来的是明文
+			if (user.getPassword().length() < 32) {
 				oldUser.setUserPwd(Md5Utils.encode(user.getPassword(), user.getUserUU()));
 			} else {
-				oldUser.setUserPwd(user.getPassword());// 传过来的是密文
+                // 传过来的是密文
+				oldUser.setUserPwd(user.getPassword());
 			}
 		}
 		oldUser = userDao.save(oldUser);
+		// 判断新注册用户是否绑定企业并且设置成管理员
+        if (!CollectionUtils.isEmpty(oldUser.getEnterprises()) && oldUser.getEnterprises().size() == 1) {
+            checkIsAdmin(oldUser);
+        }
 		return oldUser;
 	}
 
-	private com.uas.platform.b2b.model.User getUser(UserView user) {
+    /**
+     * 设置用户角色
+     *
+     * @param oldUser 用户信息
+     */
+    private void checkIsAdmin(User oldUser) {
+	    oldUser.getEnterprises().forEach(enterprise -> {
+	        if (Objects.equals(enterprise.getEnAdminuu(), oldUser.getUserUU())) {
+                enterpriseService.setUserRole(oldUser, enterprise);
+            }
+        });
+    }
+
+    private com.uas.platform.b2b.model.User getUser(UserView user) {
 		com.uas.platform.b2b.model.User oldUser = null;
 		if (user.getUserUU() != null) {
 			oldUser = userDao.findOne(user.getUserUU());