Jelajahi Sumber

Merge remote-tracking branch 'origin/dev' into dev2

wangmh 7 tahun lalu
induk
melakukan
b88b83a539

+ 7 - 0
sso-manage-console-web/src/components/accounts/users/UserHome.vue

@@ -46,6 +46,13 @@
         <el-table-column
           prop="vipName"
           label="用户名称">
+          <template slot-scope="scope">
+            {{ scope.row.vipName }}
+            <span class="valid-code1" v-if="scope.row.identityValidCode === 0">(未认证)</span>
+            <span class="valid-code0" v-if="scope.row.identityValidCode === 1">(待认证)</span>
+            <span class="valid-code1" v-if="scope.row.identityValidCode === 2">(已认证)</span>
+            <span class="valid-code1" v-if="scope.row.identityValidCode === 3">(未通过)</span>
+          </template>
         </el-table-column>
         <el-table-column
           prop="userUU"

+ 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);
+    }
+}

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

@@ -1,7 +1,10 @@
 package com.uas.sso.sso.backend.service;
 
+import com.alibaba.fastjson.JSONObject;
+import com.uas.sso.entity.App;
 import com.uas.sso.entity.Appeal;
 import com.uas.sso.entity.Userspace;
+import java.util.List;
 import org.springframework.data.domain.Page;
 import org.springframework.data.domain.Pageable;
 
@@ -40,4 +43,5 @@ public interface AppealService {
      * @return  未处理申诉信息数量
      */
     Long countUnHandleAppeals();
+
 }

+ 5 - 84
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,84 +265,13 @@ public class AppealServiceImpl implements AppealService {
             spaceDao.save(space);
 
             JSONObject data = JacksonUtils.fromJson(JacksonUtils.toJson(space), JSONObject.class);
-            transferDataToOtherPlatforms("BackChangeAdmin", data, "同步更换管理员信息");
+            syncThreadPool.transferDataToOtherPlatforms("BackChangeAdmin", space.getApps(), data, "同步更换管理员信息");
             synSendMail(appeal.getContactEmail(), appeal.getType(), appeal.getContactName(), space.getSpaceName(), isPass);
         } else {
             logger.info("暂无支持申诉类型");
         }
     }
 
-    private void transferDataToOtherPlatforms(String type, JSONObject data, String message) {
-
-        List<String> urls = new ArrayList<>();
-        if ("BackUser".equals(type)) {
-            urls = getBackUrl(new BackAppUrl() {
-                @Override
-                public String getUrl(App app) {
-                    return app.getBackUserUrl();
-                }
-            });
-        } else if ("BackChangeAdmin".equals(type)) {
-            urls = getBackUrl(new BackAppUrl() {
-                @Override
-                public String getUrl(App app) {
-                    return app.getBackChangeAdminUrl();
-                }
-            });
-        }
-
-        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(BackAppUrl backAppUrl) {
-        List<String> urls = new ArrayList<>();
-
-        List<App> appList = getAppList();
-        for (App app : appList) {
-            if (StringUtils.hasText(app.getBackChangeAdminUrl())) {
-                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);

+ 27 - 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,15 +20,15 @@ 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;
+import javax.persistence.criteria.Order;
 import javax.persistence.criteria.Predicate;
 import javax.persistence.criteria.Root;
+import org.hibernate.jpa.criteria.OrderImpl;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.data.domain.Page;
 import org.springframework.data.domain.Pageable;
@@ -53,11 +54,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
@@ -93,6 +97,13 @@ public class UserBackendServiceImpl implements UserBackendService {
                 predicates.toArray(array);
                 Predicate predicate = builder.and(array);
                 query.where(predicate);
+
+                List<Order> orderList = new ArrayList<>();
+                /*Order order = new OrderImpl(root.get("identityValidCode"), true);
+                orderList.add(order);*/
+                Order order = new OrderImpl(root.get("registerDate"), false);
+                orderList.add(order);
+                query.orderBy(orderList);
                 return null;
             }
         }, page);
@@ -212,6 +223,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 +252,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 +302,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;
     }
 

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

@@ -1,5 +1,6 @@
 package com.uas.sso.sso.backend.service.impl;
 
+import com.alibaba.fastjson.JSONObject;
 import com.uas.sso.core.Status;
 import com.uas.sso.dao.AppDao;
 import com.uas.sso.dao.UserDao;
@@ -9,6 +10,7 @@ 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;
@@ -58,15 +60,18 @@ public class UserSpaceServiceImpl implements UserSpaceService {
 
     private final AdminChangeRecordDao recordDao;
 
+    private final SyncThreadPool syncThreadPool;
+
     @Autowired
     public UserSpaceServiceImpl(UserspaceDao userspaceDao, UserDao userDao,
-            AppDao appDao, UserspaceValidDao spaceValidDao,
-            AdminChangeRecordDao recordDao) {
+                                AppDao appDao, UserspaceValidDao spaceValidDao,
+                                AdminChangeRecordDao recordDao, SyncThreadPool syncThreadPool) {
         this.userspaceDao = userspaceDao;
         this.userDao = userDao;
         this.appDao = appDao;
         this.spaceValidDao = spaceValidDao;
         this.recordDao = recordDao;
+        this.syncThreadPool = syncThreadPool;
     }
 
     @Override
@@ -129,8 +134,12 @@ public class UserSpaceServiceImpl implements UserSpaceService {
         }
 
         userspace = spaceInfo.fillSpaceInfo(userspace);
+        userspaceDao.save(userspace);
+
+        JSONObject data = JacksonUtils.fromJson(JacksonUtils.toJson(userspace), JSONObject.class);
+        syncThreadPool.transferDataToOtherPlatforms("BackChangeAdmin", userspace.getApps(), data, "同步企业信息修改");
 
-        return userspaceDao.save(userspace);
+        return userspace;
     }
 
     @Override
@@ -146,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
@@ -166,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) {
@@ -187,7 +200,11 @@ public class UserSpaceServiceImpl implements UserSpaceService {
         // 更新管理员信息
         space.setAdminUU(userUU);
         space.setAdmin(admin);
-        return userspaceDao.save(space);
+        userspaceDao.save(space);
+
+        JSONObject data = JacksonUtils.fromJson(JacksonUtils.toJson(space), JSONObject.class);
+        syncThreadPool.transferDataToOtherPlatforms("BackChangeAdmin", space.getApps(), data, "同步新增管理员信息");
+        return space;
     }
 
     private User assertUserExist(Long userUU) {
@@ -241,6 +258,9 @@ public class UserSpaceServiceImpl implements UserSpaceService {
         userspaceDao.save(space);
 
         spaceValidDao.save(spaceValid);
+
+        JSONObject data = JacksonUtils.fromJson(JacksonUtils.toJson(space), JSONObject.class);
+        syncThreadPool.transferDataToOtherPlatforms("BackChangeAdmin", space.getApps(), data, "同步企业认证信息");
         return space;
     }
 
@@ -256,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, "同步企业新增成员信息");
         }
     }
 
@@ -278,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;
     }

+ 3 - 0
sso-server/src/main/java/com/uas/sso/entity/User.java

@@ -1,6 +1,8 @@
 package com.uas.sso.entity;
 
 import com.alibaba.fastjson.annotation.JSONField;
+import com.fasterxml.jackson.annotation.JsonInclude;
+import com.fasterxml.jackson.annotation.JsonInclude.Include;
 import java.io.Serializable;
 import java.sql.Time;
 import java.sql.Timestamp;
@@ -21,6 +23,7 @@ import org.springframework.transaction.annotation.Transactional;
  */
 @Entity
 @Table(name = "sso$user")
+@JsonInclude(Include.NON_NULL)
 public class User implements Serializable {
 
     /**