Browse Source

添加用户信息同步的操作

huxz 8 years ago
parent
commit
0700e5f9ff

+ 118 - 0
sso-manage-console/src/main/java/com/uas/sso/sso/backend/config/SyncThreadPool.java

@@ -0,0 +1,118 @@
+package com.uas.sso.sso.backend.config;
+
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
+import com.uas.sso.common.util.HttpUtil;
+import com.uas.sso.entity.App;
+import com.uas.sso.entity.User;
+import com.uas.sso.sso.backend.util.JacksonUtils;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+import java.util.Map;
+import java.util.concurrent.ExecutorService;
+import org.apache.log4j.Logger;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+import org.springframework.util.CollectionUtils;
+import org.springframework.util.StringUtils;
+
+/**
+ * 账户中心同步线程池,用于同步用户信息和企业信息到
+ * 多个应用中
+ *
+ * @author huxz
+ */
+@Component
+public class SyncThreadPool {
+
+    private static final Logger logger = Logger.getLogger(SyncThreadPool.class);
+
+    private final ExecutorService executorService;
+
+    @Autowired
+    public SyncThreadPool(ExecutorService executorService) {
+        this.executorService = executorService;
+    }
+
+    public void transferDataToOtherPlatforms(String type, List<App> appList, JSONObject data, String message) {
+
+        List<String> urls = new ArrayList<>();
+        if ("BackUser".equals(type)) {
+            urls = getBackUrl(appList, new BackAppUrl() {
+                @Override
+                public String getUrl(App app) {
+                    return app.getBackUserUrl();
+                }
+            });
+        } else if ("BackChangeAdmin".equals(type)) {
+            urls = getBackUrl(appList, new BackAppUrl() {
+                @Override
+                public String getUrl(App app) {
+                    return app.getBackSpaceUrl();
+                }
+            });
+
+            User admin = data.getObject("admin", User.class);
+            data.remove("admin");
+
+            @SuppressWarnings("unchecked")
+            Map<String, Object> map = (Map<String, Object>)JacksonUtils.fromJson(JacksonUtils.toJson(admin), Map.class);
+            if (!CollectionUtils.isEmpty(map)) {
+                data.putAll(map);
+            }
+        }
+
+        for (String backUrl : urls) {
+            executorService.execute(new Runnable() {
+                @Override
+                public void run() {
+                    String[] split = backUrl.split("_");
+                    String appId = split[0];
+                    try {
+                        String url = split[1];
+                        logger.info(String.format("Back Url: %s", url));
+
+                        HttpUtil.ResponseWrap res = HttpUtil.doPost(url, data, 30000);
+                        if (!res.isSuccess()) {
+                            logger.error(String.format("%s:同步信息失败, %s, %s, %s", message, appId,
+                                    JSON.toJSONString(data), res.getContent()));
+                        } else {
+                            logger.info(String.format("%s:同步信息成功, %s, %s", message, appId,
+                                    JSON.toJSONString(data)));
+                        }
+                    } catch (Exception e) {
+                        logger.error(String.format("%s:同步信息失败, %s, %s, %s", message, appId,
+                                JSON.toJSONString(data), e.getMessage()));
+                    }
+                }
+            });
+        }
+    }
+
+    private List<String> getBackUrl(List<App> appList, BackAppUrl backAppUrl) {
+        List<String> urls = new ArrayList<>();
+
+        if (CollectionUtils.isEmpty(appList)) {
+            appList = Collections.emptyList();
+        }
+
+        for (App app : appList) {
+            if (StringUtils.hasText(backAppUrl.getUrl(app))) {
+                urls.add(app.getUid() + "_" + backAppUrl.getUrl(app));
+            }
+        }
+        return urls;
+    }
+
+    private interface BackAppUrl {
+
+        /**
+         * 获取应用的同步接口
+         *
+         * @param app   应用信息
+         * @return  同步接口
+         */
+        String getUrl(App app);
+    }
+}

+ 0 - 1
sso-manage-console/src/main/java/com/uas/sso/sso/backend/service/AppealService.java

@@ -44,5 +44,4 @@ public interface AppealService {
      */
     Long countUnHandleAppeals();
 
-    void transferDataToOtherPlatforms(String type, List<App> appList, JSONObject data, String message);
 }

+ 5 - 97
sso-manage-console/src/main/java/com/uas/sso/sso/backend/service/impl/AppealServiceImpl.java

@@ -2,18 +2,15 @@ package com.uas.sso.sso.backend.service.impl;
 
 import static com.uas.sso.sso.backend.AuthenticationUtils.getEncryPassword;
 
-import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONObject;
-import com.uas.sso.common.util.HttpUtil;
 import com.uas.sso.core.Const;
-import com.uas.sso.dao.AppDao;
 import com.uas.sso.dao.AppealDao;
 import com.uas.sso.dao.UserDao;
 import com.uas.sso.dao.UserspaceDao;
-import com.uas.sso.entity.App;
 import com.uas.sso.entity.Appeal;
 import com.uas.sso.entity.User;
 import com.uas.sso.entity.Userspace;
+import com.uas.sso.sso.backend.config.SyncThreadPool;
 import com.uas.sso.sso.backend.dao.AdminChangeRecordDao;
 import com.uas.sso.sso.backend.dto.AddNewUserInfo;
 import com.uas.sso.sso.backend.entity.AdminChangeRecord;
@@ -33,7 +30,6 @@ import java.util.HashSet;
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
-import java.util.concurrent.ExecutorService;
 import javax.persistence.criteria.CriteriaBuilder;
 import javax.persistence.criteria.CriteriaQuery;
 import javax.persistence.criteria.Order;
@@ -49,7 +45,6 @@ import org.springframework.data.jpa.domain.Specification;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.util.Assert;
-import org.springframework.util.CollectionUtils;
 import org.springframework.util.StringUtils;
 
 /**
@@ -76,25 +71,22 @@ public class AppealServiceImpl implements AppealService {
 
     private final AdminChangeRecordDao recordDao;
 
-    private final AppDao appDao;
-
     private final UserBackendService userService;
 
     private final MailService mailService;
 
-    private final ExecutorService executorService;
+    private final SyncThreadPool syncThreadPool;
 
     @Autowired
     public AppealServiceImpl(AppealDao appealDao, UserDao userDao,
-                             UserspaceDao spaceDao, AdminChangeRecordDao recordDao, AppDao appDao, UserBackendService userService, MailService mailService, ExecutorService executorService) {
+                             UserspaceDao spaceDao, AdminChangeRecordDao recordDao, UserBackendService userService, MailService mailService, SyncThreadPool syncThreadPool) {
         this.appealDao = appealDao;
         this.userDao = userDao;
         this.spaceDao = spaceDao;
         this.recordDao = recordDao;
-        this.appDao = appDao;
         this.userService = userService;
         this.mailService = mailService;
-        this.executorService = executorService;
+        this.syncThreadPool = syncThreadPool;
     }
 
     @Override
@@ -273,97 +265,13 @@ public class AppealServiceImpl implements AppealService {
             spaceDao.save(space);
 
             JSONObject data = JacksonUtils.fromJson(JacksonUtils.toJson(space), JSONObject.class);
-            transferDataToOtherPlatforms("BackChangeAdmin", space.getApps(), data, "同步更换管理员信息");
+            syncThreadPool.transferDataToOtherPlatforms("BackChangeAdmin", space.getApps(), data, "同步更换管理员信息");
             synSendMail(appeal.getContactEmail(), appeal.getType(), appeal.getContactName(), space.getSpaceName(), isPass);
         } else {
             logger.info("暂无支持申诉类型");
         }
     }
 
-    @Override
-    public void transferDataToOtherPlatforms(String type, List<App> appList, JSONObject data, String message) {
-
-        List<String> urls = new ArrayList<>();
-        if ("BackUser".equals(type)) {
-            urls = getBackUrl(appList, new BackAppUrl() {
-                @Override
-                public String getUrl(App app) {
-                    return app.getBackUserUrl();
-                }
-            });
-        } else if ("BackChangeAdmin".equals(type)) {
-            urls = getBackUrl(appList, new BackAppUrl() {
-                @Override
-                public String getUrl(App app) {
-                    return app.getBackSpaceUrl();
-                }
-            });
-
-            User admin = data.getObject("admin", User.class);
-            data.remove("admin");
-
-            @SuppressWarnings("unchecked")
-            Map<String, Object> map = (Map<String, Object>)JacksonUtils.fromJson(JacksonUtils.toJson(admin), Map.class);
-            if (!CollectionUtils.isEmpty(map)) {
-                data.putAll(map);
-            }
-        }
-
-        for (String backUrl : urls) {
-            executorService.execute(new Runnable() {
-                @Override
-                public void run() {
-                    String[] split = backUrl.split("_");
-                    String appId = split[0];
-                    try {
-                        String url = split[1];
-                        logger.info(String.format("Back Url: %s", url));
-
-                        HttpUtil.ResponseWrap res = HttpUtil.doPost(url, data, 30000);
-                        if (!res.isSuccess()) {
-                            logger.error(String.format("%s:同步信息失败, %s, %s, %s", message, appId,
-                                    JSON.toJSONString(data), res.getContent()));
-                        } else {
-                            logger.info(String.format("%s:同步信息成功, %s, %s", message, appId,
-                                    JSON.toJSONString(data)));
-                        }
-                    } catch (Exception e) {
-                        logger.error(String.format("%s:同步信息失败, %s, %s, %s", message, appId,
-                                JSON.toJSONString(data), e.getMessage()));
-                    }
-                }
-            });
-        }
-    }
-
-    private List<String> getBackUrl(List<App> appList, BackAppUrl backAppUrl) {
-        List<String> urls = new ArrayList<>();
-
-        if (CollectionUtils.isEmpty(appList)) {
-            appList = Collections.emptyList();
-        }
-
-        for (App app : appList) {
-            if (StringUtils.hasText(backAppUrl.getUrl(app))) {
-                urls.add(app.getUid() + "_" + backAppUrl.getUrl(app));
-            }
-        }
-        return urls;
-    }
-
-    private interface BackAppUrl {
-        String getUrl(App app);
-    }
-
-    private List<App> getAppList() {
-        List<App> appList = appDao.findAll();
-
-        if (CollectionUtils.isEmpty(appList)) {
-            return Collections.emptyList();
-        }
-        return appList;
-    }
-
     private void synSendMail(String receipt, String appealType, String appealName, String spaceName, Boolean isPass) {
         HashMap<String, String> params = new HashMap<>();
         params.put("appealName", appealName);

+ 18 - 5
sso-manage-console/src/main/java/com/uas/sso/sso/backend/service/impl/UserBackendServiceImpl.java

@@ -12,6 +12,7 @@ import com.uas.sso.entity.UserRecord;
 import com.uas.sso.entity.UserValid;
 import com.uas.sso.entity.Userspace;
 import com.uas.sso.sso.backend.AuthenticationUtils;
+import com.uas.sso.sso.backend.config.SyncThreadPool;
 import com.uas.sso.sso.backend.dto.AddNewUserInfo;
 import com.uas.sso.sso.backend.dto.UpdateUserInfo;
 import com.uas.sso.sso.backend.exceptions.ValidationFailedException;
@@ -19,10 +20,8 @@ import com.uas.sso.sso.backend.service.UserBackendService;
 import com.uas.sso.sso.backend.util.JacksonUtils;
 import com.uas.sso.util.InfoAsyncUtils;
 import java.sql.Timestamp;
-import java.text.SimpleDateFormat;
 import java.util.ArrayList;
 import java.util.Collections;
-import java.util.Date;
 import java.util.List;
 import javax.persistence.criteria.CriteriaBuilder;
 import javax.persistence.criteria.CriteriaQuery;
@@ -53,11 +52,14 @@ public class UserBackendServiceImpl implements UserBackendService {
 
     private final UserValidDao userValidDao;
 
+    private final SyncThreadPool syncThreadPool;
+
     @Autowired
-    public UserBackendServiceImpl(AppDao appDao, UserDao userDao, UserValidDao userValidDao) {
+    public UserBackendServiceImpl(AppDao appDao, UserDao userDao, UserValidDao userValidDao, SyncThreadPool syncThreadPool) {
         this.appDao = appDao;
         this.userDao = userDao;
         this.userValidDao = userValidDao;
+        this.syncThreadPool = syncThreadPool;
     }
 
     @Override
@@ -212,6 +214,11 @@ public class UserBackendServiceImpl implements UserBackendService {
         }
 
         userDao.save(existUser);
+
+        List<App> appList = appDao.findAll();
+        JSONObject data = JacksonUtils.fromJson(JacksonUtils.toJson(existUser.toView()), JSONObject.class);
+        syncThreadPool.transferDataToOtherPlatforms("BackUser", appList, data, "同步用户信息修改");
+
         return existUser;
     }
 
@@ -236,11 +243,12 @@ public class UserBackendServiceImpl implements UserBackendService {
         user.getUserRecord().setUser(user);
         user.getUserRecord().setUserUU(user.getUserUU());
         user.setFromApp("sso");
+        userDao.save(user);
 
         List<App> appList = appDao.findAll();
-        List<String> urlsFromApps = InfoAsyncUtils.getUserBackUrlsFromApps(appList);
+        JSONObject data = JacksonUtils.fromJson(JacksonUtils.toJson(user.toView()), JSONObject.class);
+        syncThreadPool.transferDataToOtherPlatforms("BackUser", appList, data, "同步新增用户信息");
 
-        InfoAsyncUtils.syncUserInfo(urlsFromApps, user.toView(), "管理新增用户");
         return user;
     }
 
@@ -285,6 +293,11 @@ public class UserBackendServiceImpl implements UserBackendService {
         userInfo.setIdentityValidCode(userValid.getValidCode());
 
         userDao.save(userInfo);
+
+        List<App> appList = appDao.findAll();
+        JSONObject data = JacksonUtils.fromJson(JacksonUtils.toJson(userInfo.toView()), JSONObject.class);
+        syncThreadPool.transferDataToOtherPlatforms("BackUser", appList, data, "同步用户认证状态信息");
+
         return userInfo;
     }
 

+ 26 - 9
sso-manage-console/src/main/java/com/uas/sso/sso/backend/service/impl/UserSpaceServiceImpl.java

@@ -10,12 +10,12 @@ import com.uas.sso.entity.App;
 import com.uas.sso.entity.User;
 import com.uas.sso.entity.Userspace;
 import com.uas.sso.entity.UserspaceValid;
+import com.uas.sso.sso.backend.config.SyncThreadPool;
 import com.uas.sso.sso.backend.dao.AdminChangeRecordDao;
 import com.uas.sso.sso.backend.dto.UpdateSpaceInfo;
 import com.uas.sso.sso.backend.entity.AdminChangeRecord;
 import com.uas.sso.sso.backend.entity.AdminChangeType;
 import com.uas.sso.sso.backend.exceptions.ValidationFailedException;
-import com.uas.sso.sso.backend.service.AppealService;
 import com.uas.sso.sso.backend.service.UserSpaceService;
 import com.uas.sso.sso.backend.util.JacksonUtils;
 import java.text.SimpleDateFormat;
@@ -60,18 +60,18 @@ public class UserSpaceServiceImpl implements UserSpaceService {
 
     private final AdminChangeRecordDao recordDao;
 
-    private final AppealService appealService;
+    private final SyncThreadPool syncThreadPool;
 
     @Autowired
     public UserSpaceServiceImpl(UserspaceDao userspaceDao, UserDao userDao,
                                 AppDao appDao, UserspaceValidDao spaceValidDao,
-                                AdminChangeRecordDao recordDao, AppealService appealService) {
+                                AdminChangeRecordDao recordDao, SyncThreadPool syncThreadPool) {
         this.userspaceDao = userspaceDao;
         this.userDao = userDao;
         this.appDao = appDao;
         this.spaceValidDao = spaceValidDao;
         this.recordDao = recordDao;
-        this.appealService = appealService;
+        this.syncThreadPool = syncThreadPool;
     }
 
     @Override
@@ -134,8 +134,12 @@ public class UserSpaceServiceImpl implements UserSpaceService {
         }
 
         userspace = spaceInfo.fillSpaceInfo(userspace);
+        userspaceDao.save(userspace);
 
-        return userspaceDao.save(userspace);
+        JSONObject data = JacksonUtils.fromJson(JacksonUtils.toJson(userspace), JSONObject.class);
+        syncThreadPool.transferDataToOtherPlatforms("BackChangeAdmin", userspace.getApps(), data, "同步企业信息修改");
+
+        return userspace;
     }
 
     @Override
@@ -151,7 +155,12 @@ public class UserSpaceServiceImpl implements UserSpaceService {
         if (!CollectionUtils.isEmpty(space.getUsers())) {
             space.getUsers().remove(user);
         }
-        return userspaceDao.save(space);
+        userspaceDao.save(space);
+
+        JSONObject data = JacksonUtils.fromJson(JacksonUtils.toJson(space), JSONObject.class);
+        syncThreadPool.transferDataToOtherPlatforms("BackChangeAdmin", space.getApps(), data, "同步企业成员变更信息");
+
+        return space;
     }
 
     @Override
@@ -171,7 +180,6 @@ public class UserSpaceServiceImpl implements UserSpaceService {
         record.setSpaceUU(spaceUu);
 
         User oldAdmin = space.getAdmin();
-        // UserAccount account = SystemSession.getUserAccount();
         record.setSponsorName("系统管理员");
         record.setSponsorTel("123456789");
         if (oldAdmin != null) {
@@ -195,7 +203,7 @@ public class UserSpaceServiceImpl implements UserSpaceService {
         userspaceDao.save(space);
 
         JSONObject data = JacksonUtils.fromJson(JacksonUtils.toJson(space), JSONObject.class);
-        appealService.transferDataToOtherPlatforms("BackChangeAdmin", space.getApps(), data, "同步新增管理员信息");
+        syncThreadPool.transferDataToOtherPlatforms("BackChangeAdmin", space.getApps(), data, "同步新增管理员信息");
         return space;
     }
 
@@ -252,7 +260,7 @@ public class UserSpaceServiceImpl implements UserSpaceService {
         spaceValidDao.save(spaceValid);
 
         JSONObject data = JacksonUtils.fromJson(JacksonUtils.toJson(space), JSONObject.class);
-        appealService.transferDataToOtherPlatforms("BackChangeAdmin", space.getApps(), data, "同步企业认证信息");
+        syncThreadPool.transferDataToOtherPlatforms("BackChangeAdmin", space.getApps(), data, "同步企业认证信息");
         return space;
     }
 
@@ -268,6 +276,9 @@ public class UserSpaceServiceImpl implements UserSpaceService {
             users.add(user);
 
             userspaceDao.save(space);
+
+            JSONObject data = JacksonUtils.fromJson(JacksonUtils.toJson(space), JSONObject.class);
+            syncThreadPool.transferDataToOtherPlatforms("BackChangeAdmin", space.getApps(), data, "同步企业新增成员信息");
         }
     }
 
@@ -290,6 +301,12 @@ public class UserSpaceServiceImpl implements UserSpaceService {
             apps.add(app);
 
             space = userspaceDao.save(space);
+
+            List<App> appList = new ArrayList<>();
+            appList.add(app);
+
+            JSONObject data = JacksonUtils.fromJson(JacksonUtils.toJson(space), JSONObject.class);
+            syncThreadPool.transferDataToOtherPlatforms("BackChangeAdmin", appList, data, "同步企业企业信息到新开通应用");
         }
         return space;
     }