TRX пре 1 година
родитељ
комит
cb6dc7b41f

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

@@ -25,6 +25,8 @@ public interface OrganizationUserDao extends MongoDao<OrganizationUser>, Organiz
     // 查询用户在机构的信息
     OrganizationUser findTopByOrganizationAndUser(Organization organization, UserAccount user);
 
+    OrganizationUser findTopByUserAndProjectOid(UserAccount user, String projectOid);
+
     OrganizationUser findTopByOrganizationAndUserAndProjectOid(Organization organization, UserAccount user, String projectOid);
 
     OrganizationUser findTopByOrganizationAndUserAndState(Organization organization, UserAccount user, UserState state);

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

@@ -1,6 +1,7 @@
 package com.zhongshu.card.server.core.service.devices;
 
 import cn.hutool.json.JSONUtil;
+import com.github.microservice.core.util.os.SystemUtil;
 import com.github.microservice.models.device.DevicePerQuery;
 import com.github.microservice.models.device.UserPerQuery;
 import com.github.microservice.models.devicePermiss.DeviceAboutPermiss;
@@ -23,16 +24,20 @@ import com.zhongshu.card.server.core.domain.school.CardInfo;
 import com.zhongshu.card.server.core.service.projectAbout.CardInfoServiceImpl;
 import com.zhongshu.card.server.core.service.projectAbout.OrgUserFaceService;
 import com.zhongshu.card.server.core.service.user.UserAccountServiceImpl;
+import com.zhongshu.card.server.core.util.CommonUtil;
 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.stereotype.Service;
 
 import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
 import java.util.stream.Collectors;
 
 /**
@@ -66,6 +71,16 @@ public class DevicePermissIotService {
     @Autowired
     private UserAccountServiceImpl userAccountService;
 
+    //线程池
+    private ExecutorService executorService = Executors.newFixedThreadPool(SystemUtil.getCpuCoreCount() * 2);
+
+    @Autowired
+    private void init(ApplicationContext applicationContext) {
+        Runtime.getRuntime().addShutdownHook(new Thread(() -> {
+            executorService.shutdownNow();
+        }));
+    }
+
     /**
      * 组装设备权限变更的数据
      *
@@ -73,23 +88,32 @@ public class DevicePermissIotService {
      * @param mark      0: 删除   1:新增、修改   2:全量
      * @return
      */
-    public ResultContent changeDeviceUser(List<DevicePermiss> permisses, int mark) {
+    public ResultContent changeDeviceUser(List<DevicePermiss> permisses, int mark, String groupId) {
         if (ObjectUtils.isNotEmpty(permisses)) {
-            Map<String, List<DevicePermiss>> map = permisses.stream().collect(Collectors.groupingBy(DevicePermiss::getGateWayId));
-            map.forEach((gateWayId, tempList) -> {
-                GateWayPermissModel gateWayPermissModel = new GateWayPermissModel();
-                gateWayPermissModel.setGateWayId(gateWayId);
+            executorService.execute(() -> {
+                Map<String, List<DevicePermiss>> map = permisses.stream().collect(Collectors.groupingBy(DevicePermiss::getGateWayId));
+                map.forEach((gateWayId, tempList) -> {
+                    GateWayPermissModel gateWayPermissModel = new GateWayPermissModel();
+                    gateWayPermissModel.setGateWayId(gateWayId);
+                    gateWayPermissModel.setGroupId(groupId);
+                    List<DeviceAboutPermiss> devices = tempList.stream().map(it -> {
+                        DeviceAboutPermiss permiss = new DeviceAboutPermiss();
+                        permiss.setDeviceId(it.getDeviceId());
+                        permiss.addUser(it.getUserId());
+                        //TODO
+                        List<String> ids = new ArrayList<>();
+                        for (int i = 0; i < 10000; i++) {
+                            ids.add(CommonUtil.UUID());
+                        }
+                        permiss.addUsers(ids);
+                        permiss.setMark(mark);
+                        return permiss;
+                    }).collect(Collectors.toUnmodifiableList());
+                    gateWayPermissModel.setDevices(devices);
 
-                List<DeviceAboutPermiss> devices = tempList.stream().map(it -> {
-                    DeviceAboutPermiss permiss = new DeviceAboutPermiss();
-                    permiss.setDeviceId(it.getDeviceId());
-                    permiss.addUser(it.getUserId());
-                    permiss.setMark(mark);
-                    return permiss;
-                }).collect(Collectors.toUnmodifiableList());
-                gateWayPermissModel.setDevices(devices);
-                // 下发设备数据
-                devicePermissEventService.requestDeviceBindData(gateWayPermissModel, tempList.get(0).getProjectOid());
+                    // 下发设备数据
+                    devicePermissEventService.requestDeviceBindData(gateWayPermissModel, tempList.get(0).getProjectOid());
+                });
             });
         }
         return ResultContent.buildSuccess();

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

@@ -27,6 +27,7 @@ import com.zhongshu.card.server.core.service.projectAbout.CardInfoServiceImpl;
 import com.zhongshu.card.server.core.service.projectAbout.OrgUserFaceService;
 import com.zhongshu.card.server.core.service.user.UserAccountServiceImpl;
 import com.zhongshu.card.server.core.util.BeanUtils;
+import com.zhongshu.card.server.core.util.CommonUtil;
 import lombok.SneakyThrows;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang3.ObjectUtils;
@@ -137,7 +138,7 @@ public class DevicePermissService extends SuperService {
                 }
                 devicePermissDao.saveAll(permisses);
                 // 下发设备权限增加数据
-                devicePermissIotService.changeDeviceUser(permisses, 1);
+                devicePermissIotService.changeDeviceUser(permisses, 1, "");
 
                 // 因为是新增加,下发关联的用户信息
                 devicePermissIotService.changeUserInfo(permisses, 1);
@@ -204,7 +205,7 @@ public class DevicePermissService extends SuperService {
                         devicePermissEventService.sendUserInfoChangeEvent(userIds, projectOid);
                     } else if (dataOperationType == DataOperationType.Delete) {
                         // 下发移除权限
-                        devicePermissIotService.changeDeviceUser(list, 0);
+                        devicePermissIotService.changeDeviceUser(list, 0, "");
                         // 删除
                         devicePermissDao.deleteAll(list);
                     }
@@ -253,12 +254,13 @@ public class DevicePermissService extends SuperService {
         }
         entity.setDataState(dataState);
         devicePermissDao.save(entity);
+        String groupId = CommonUtil.UUID();
         if (dataState == DataState.Disable) {
             // 移除权限
-            devicePermissIotService.changeDeviceUser(List.of(entity), 0);
+            devicePermissIotService.changeDeviceUser(List.of(entity), 0, groupId);
         } else {
             // 启用
-            devicePermissIotService.changeDeviceUser(List.of(entity), 1);
+            devicePermissIotService.changeDeviceUser(List.of(entity), 1, groupId);
         }
         return ResultContent.buildSuccess();
     }
@@ -273,7 +275,7 @@ public class DevicePermissService extends SuperService {
         if (ObjectUtils.isNotEmpty(param.getIds())) {
             List<DevicePermiss> list = devicePermissDao.findByIdIn(param.getIds());
             // 1: 移除权限
-            devicePermissIotService.changeDeviceUser(list, 0);
+            devicePermissIotService.changeDeviceUser(list, 0, "");
             // 2:删除数据
             devicePermissDao.deleteAll(list);
         }

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

@@ -148,19 +148,32 @@ public class OrganizationUserServiceImpl extends SuperService {
                 return ResultContent.buildFail(String.format("数据不存在:%s", param.getId()));
             }
         }
+        String loginName = param.getPhone();
+        if (temp != null && temp.getUser() != null) {
+            loginName = temp.getUser().getLoginName();
+        }
 
-        // 用户基本信息维护
+        String projectOid = param.getProjectOid();
+        // 判断是否存在
+        UserAccount userAccount = userCountDao.findTopByLoginName(loginName);
+        if (ObjectUtils.isNotEmpty(userAccount)) {
+            OrganizationUser tempOrgUser = organizationUserDao.findTopByUserAndProjectOid(userAccount, projectOid);
+            if (ObjectUtils.isNotEmpty(tempOrgUser)) {
+                if (ObjectUtils.isEmpty(temp) || !temp.getId().equals(tempOrgUser.getId())) {
+                    return ResultContent.buildFail(String.format("用户已加入该项目:%s", loginName));
+                }
+            }
+        }
+
+        // 用户基本信息维护 电话号码为登录名
         RegisterUserAccountParam userAccountParam = new RegisterUserAccountParam();
-        userAccountParam.setLoginName(param.getPhone());
+        userAccountParam.setLoginName(loginName);
         userAccountParam.setPassword(param.getPassWord());
         userAccountParam.setPhone(param.getPhone());
         userAccountParam.setName(param.getName());
         userAccountParam.setCardNumber(param.getCardNumber());
         userAccountParam.setSex(param.getSex());
         userAccountParam.setProfilePic(param.getProfilePic());
-        if (temp != null && temp.getUser() != null) {
-            userAccountParam.setLoginName(temp.getUser().getLoginName());
-        }
         ResultContent<String> userAccountContent = userAccountService.registerUserAccount(userAccountParam);
         if (userAccountContent.isFailed()) {
             return ResultContent.buildFail(userAccountContent.getMsg());