TRX 1 rok temu
rodzic
commit
57604d1819

+ 1 - 0
FullCardServer/src/main/java/com/zhongshu/card/server/core/dao/org/OrganizationUserDao.java

@@ -50,4 +50,5 @@ public interface OrganizationUserDao extends MongoDao<OrganizationUser>, Organiz
 
     List<OrganizationUser> findByUserIdAndProjectOidAndIsOrg(String userId, String projectOid, Boolean isOrg);
 
+    List<OrganizationUser> findByUserId(String userId);
 }

+ 39 - 26
FullCardServer/src/main/java/com/zhongshu/card/server/core/service/devices/DevicePermissService.java

@@ -1,6 +1,7 @@
 package com.zhongshu.card.server.core.service.devices;
 
 import com.github.microservice.components.data.base.util.PageEntityUtil;
+import com.github.microservice.core.util.os.SystemUtil;
 import com.github.microservice.net.ResultContent;
 import com.github.microservice.net.ResultMessage;
 import com.google.common.collect.Lists;
@@ -31,6 +32,7 @@ import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang3.ObjectUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.ApplicationContext;
 import org.springframework.context.event.EventListener;
 import org.springframework.data.domain.Page;
 import org.springframework.data.domain.Pageable;
@@ -39,6 +41,8 @@ import org.springframework.stereotype.Service;
 
 import java.util.ArrayList;
 import java.util.List;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
 import java.util.stream.Collectors;
 
 /**
@@ -70,16 +74,20 @@ public class DevicePermissService extends SuperService {
     private OrganizationUserDao organizationUserDao;
 
     @Autowired
-    private OrgUserFaceService orgUserFaceService;
+    private DevicePermissEventService devicePermissEventService;
 
     @Autowired
-    private CardInfoServiceImpl cardInfoService;
+    private DevicePermissIotService devicePermissIotService;
 
-    @Autowired
-    private DevicePermissEventService devicePermissEventService;
+    //线程池
+    private ExecutorService executorService = Executors.newFixedThreadPool(SystemUtil.getCpuCoreCount() * 2);
 
     @Autowired
-    private DevicePermissIotService devicePermissIotService;
+    private void init(ApplicationContext applicationContext) {
+        Runtime.getRuntime().addShutdownHook(new Thread(() -> {
+            executorService.shutdownNow();
+        }));
+    }
 
     /**
      * 设备绑定用户
@@ -174,30 +182,35 @@ public class DevicePermissService extends SuperService {
     @Async
     @SneakyThrows
     public void syncOrgUserChangeInfo(OrgUserBindUpdateSyncEvent event) {
-        log.info("机构用户信息发生变化 syncOrgUserChangeInfo...");
-        DataOperationType dataOperationType = event.getDataOperationType();
-        List<String> organizationUserIds = event.getOrganizationUserIds();
-        if (dataOperationType != null) {
-            List<OrganizationUser> organizationUsers = organizationUserDao.findByIdIn(organizationUserIds);
-            if (ObjectUtils.isNotEmpty(organizationUsers)) {
-                List<DevicePermiss> list = devicePermissDao.findByOrganizationUserIn(organizationUsers);
-                if (ObjectUtils.isEmpty(list)) {
-                    return;
-                }
-                if (dataOperationType == DataOperationType.Update) {
-                    for (DevicePermiss permiss : list) {
-                        buildOrgUserInfo(permiss, permiss.getOrganizationUser());
+        executorService.execute(() -> {
+            log.info("机构用户信息发生变化 syncOrgUserChangeInfo...");
+            DataOperationType dataOperationType = event.getDataOperationType();
+            List<String> organizationUserIds = event.getOrganizationUserIds();
+            if (dataOperationType != null) {
+                List<OrganizationUser> organizationUsers = organizationUserDao.findByIdIn(organizationUserIds);
+                if (ObjectUtils.isNotEmpty(organizationUsers)) {
+                    List<DevicePermiss> list = devicePermissDao.findByOrganizationUserIn(organizationUsers);
+                    if (ObjectUtils.isEmpty(list)) {
+                        return;
+                    }
+                    String projectOid = organizationUsers.get(0).getProjectOid();
+                    if (dataOperationType == DataOperationType.Update) {
+                        for (DevicePermiss permiss : list) {
+                            buildOrgUserInfo(permiss, permiss.getOrganizationUser());
+                        }
+                        devicePermissDao.saveAll(list);
+                        // 通知权限下发用户信息 编辑
+                        List<String> userIds = organizationUsers.stream().map(OrganizationUser::getUserId).distinct().collect(Collectors.toList());
+                        devicePermissEventService.sendUserInfoChangeEvent(userIds, projectOid);
+                    } else if (dataOperationType == DataOperationType.Delete) {
+                        // 下发移除权限
+                        devicePermissIotService.changeDeviceUser(list, 0);
+                        // 删除
+                        devicePermissDao.deleteAll(list);
                     }
-                    devicePermissDao.saveAll(list);
-                } else if (dataOperationType == DataOperationType.Delete) {
-                    devicePermissDao.deleteAll(list);
                 }
-                // 通知权限下发
-                String projectOid = list.get(0).getProjectOid();
-                List<String> deviceIds = list.stream().map(it -> it.getDeviceId()).collect(Collectors.toUnmodifiableList());
-                devicePermissEventService.sendDeviceChangeEvent(deviceIds, projectOid);
             }
-        }
+        });
     }
 
 

+ 39 - 0
FullCardServer/src/main/java/com/zhongshu/card/server/core/service/org/OrganizationUserServiceImpl.java

@@ -7,6 +7,7 @@ import com.github.microservice.auth.client.service.OrganizationUserService;
 import com.github.microservice.auth.client.service.RoleService;
 import com.github.microservice.auth.security.type.AuthType;
 import com.github.microservice.core.util.bean.BeanUtil;
+import com.github.microservice.core.util.os.SystemUtil;
 import com.github.microservice.net.ResultContent;
 import com.zhongshu.card.client.model.base.ProjectOidParam;
 import com.zhongshu.card.client.model.org.*;
@@ -24,6 +25,7 @@ import com.zhongshu.card.server.core.domain.school.DictInfo;
 import com.zhongshu.card.server.core.event.OrgUserBindUpdateSyncEvent;
 import com.zhongshu.card.server.core.model.org.OrgBindUserParam;
 import com.zhongshu.card.server.core.service.base.SuperService;
+import com.zhongshu.card.server.core.service.devices.DevicePermissEventService;
 import com.zhongshu.card.server.core.service.orgManager.OrganizationManagerServiceImpl;
 import com.zhongshu.card.server.core.service.school.DictInfoServiceImpl;
 import com.zhongshu.card.server.core.service.user.DepartmentServiceImpl;
@@ -53,6 +55,10 @@ import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
+import java.util.concurrent.CompletableFuture;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
+import java.util.concurrent.TimeUnit;
 import java.util.stream.Collectors;
 
 /**
@@ -108,6 +114,9 @@ public class OrganizationUserServiceImpl extends SuperService {
     @Autowired
     private OrganizationRelationDao organizationRelationDao;
 
+    @Autowired
+    private DevicePermissEventService devicePermissEventService;
+
     /**
      * 添加编辑用户 添加机构用户 (包括角色 部门 职位等信息)
      * 用户可能不存在
@@ -733,6 +742,36 @@ public class OrganizationUserServiceImpl extends SuperService {
         ExcelUtils.commonExecuteExcel(request, response, execlParam);
     }
 
+    /**
+     * 用户基础信息发送变化
+     *
+     * @param userId
+     */
+    public void changeUserBaseInfo(String userId, String projectOid) {
+        if (StringUtils.isEmpty(userId)) {
+            CompletableFuture.runAsync(() -> {
+                List<String> projectOids = new ArrayList<>();
+                if (StringUtils.isEmpty(projectOid)) {
+                    List<OrganizationUser> list = organizationUserDao.findByUserId(userId);
+                    if (ObjectUtils.isNotEmpty(list)) {
+                        projectOids = list.stream().map(OrganizationUser::getProjectOid).distinct().collect(Collectors.toList());
+                    }
+                } else {
+                    projectOids.add(projectOid);
+                }
+                try {
+                    List<String> userIds = List.of(userId);
+                    for (String _projectOid : projectOids) {
+                        devicePermissEventService.sendUserInfoChangeEvent(userIds, _projectOid);
+                        TimeUnit.SECONDS.sleep(1);
+                    }
+                } catch (Exception e) {
+                    log.error(e.getMessage());
+                }
+            });
+        }
+    }
+
     /**
      * 转换机构用户信息(基本信息 角色  部门)
      *

+ 9 - 5
FullCardServer/src/main/java/com/zhongshu/card/server/core/service/user/UserAccountServiceImpl.java

@@ -3,8 +3,6 @@ package com.zhongshu.card.server.core.service.user;
 import com.github.microservice.auth.client.content.ResultState;
 import com.github.microservice.auth.client.model.UserAuthModel;
 import com.github.microservice.auth.client.model.UserModel;
-import com.github.microservice.auth.client.service.OrganizationUserService;
-import com.github.microservice.auth.client.service.RoleService;
 import com.github.microservice.auth.client.service.UserService;
 import com.github.microservice.auth.client.type.LoginType;
 import com.github.microservice.components.data.base.util.PageEntityUtil;
@@ -16,19 +14,20 @@ import com.zhongshu.card.client.model.base.UserIdModel;
 import com.zhongshu.card.client.model.org.*;
 import com.zhongshu.card.client.model.org.role.RoleModel;
 import com.zhongshu.card.client.model.school.DictInfoSimpleModel;
-import com.zhongshu.card.client.service.org.OrganizationService;
 import com.zhongshu.card.client.service.org.UserAccountService;
 import com.zhongshu.card.client.type.Sex;
 import com.zhongshu.card.client.type.UserLoginType;
 import com.zhongshu.card.client.type.UserState;
 import com.zhongshu.card.client.type.UserType;
-import com.zhongshu.card.server.core.dao.org.*;
-import com.zhongshu.card.server.core.dao.school.DictInfoDao;
+import com.zhongshu.card.server.core.dao.org.OrganizationDao;
+import com.zhongshu.card.server.core.dao.org.OrganizationUserDao;
+import com.zhongshu.card.server.core.dao.org.UserCountDao;
 import com.zhongshu.card.server.core.dataConfig.CardSystemDefault;
 import com.zhongshu.card.server.core.domain.org.Organization;
 import com.zhongshu.card.server.core.domain.org.OrganizationUser;
 import com.zhongshu.card.server.core.domain.org.UserAccount;
 import com.zhongshu.card.server.core.service.base.SuperService;
+import com.zhongshu.card.server.core.service.devices.DevicePermissEventService;
 import com.zhongshu.card.server.core.service.org.OrganizationServiceImpl;
 import com.zhongshu.card.server.core.service.org.OrganizationUserServiceImpl;
 import com.zhongshu.card.server.core.service.orgManager.OrganizationManagerServiceImpl;
@@ -87,6 +86,9 @@ public class UserAccountServiceImpl extends SuperService implements UserAccountS
     @Autowired
     DictInfoServiceImpl dictInfoService;
 
+    @Autowired
+    private OrganizationUserServiceImpl organizationUserService;
+
     /**
      * 注册基本用户 (没有就注册,有就修改)
      *
@@ -351,6 +353,8 @@ public class UserAccountServiceImpl extends SuperService implements UserAccountS
         BeanUtils.copyProperties(param, account);
         account.setSpellCode(CommonUtil.getPinyin(account.getName()));
         userCountDao.save(account);
+        String projectOid = getCurrentProjectOid();
+        organizationUserService.changeUserBaseInfo(account.getUserId(), projectOid);
         return ResultContent.buildSuccess();
     }