TRX 1 år sedan
förälder
incheckning
3ab97171d7

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

@@ -8,7 +8,9 @@ import com.github.microservice.models.devicePermiss.DeviceUsersInfo;
 import com.github.microservice.models.devicePermiss.GateWayPermissModel;
 import com.github.microservice.models.devicePermiss.ProjectUserPermiss;
 import com.github.microservice.net.ResultContent;
+import com.google.common.collect.Lists;
 import com.zhongshu.card.client.model.school.CardInfoModel;
+import com.zhongshu.card.client.type.DataState;
 import com.zhongshu.card.client.type.school.CardState;
 import com.zhongshu.card.server.core.dao.devices.DevicePermissDao;
 import com.zhongshu.card.server.core.dao.org.OrganizationDao;
@@ -16,8 +18,10 @@ import com.zhongshu.card.server.core.domain.devices.DevicePermiss;
 import com.zhongshu.card.server.core.domain.org.Organization;
 import com.zhongshu.card.server.core.domain.org.UserAccount;
 import com.zhongshu.card.server.core.domain.projectAbout.OrgUserFace;
+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 lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang3.ObjectUtils;
 import org.apache.commons.lang3.StringUtils;
@@ -25,6 +29,7 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
 import java.util.ArrayList;
+import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 import java.util.stream.Collectors;
@@ -57,17 +62,19 @@ public class DevicePermissIotService {
     @Autowired
     private DevicePermissEventService devicePermissEventService;
 
+    @Autowired
+    private UserAccountServiceImpl userAccountService;
+
     /**
      * 组装设备权限变更的数据
      *
-     * @param ids  DevicePermiss 设备用户绑定数据ID
-     * @param mark 0: 删除   1:新增、修改   2:全量
+     * @param permisses DevicePermiss 设备用户绑定数据ID
+     * @param mark      0: 删除   1:新增、修改   2:全量
      * @return
      */
-    public ResultContent changeDeviceUser(List<String> ids, int mark) {
-        List<DevicePermiss> list = devicePermissDao.findByIdIn(ids);
-        if (ObjectUtils.isNotEmpty(list)) {
-            Map<String, List<DevicePermiss>> map = list.stream().collect(Collectors.groupingBy(DevicePermiss::getGateWayId));
+    public ResultContent changeDeviceUser(List<DevicePermiss> permisses, int mark) {
+        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);
@@ -80,12 +87,39 @@ public class DevicePermissIotService {
                     return permiss;
                 }).collect(Collectors.toUnmodifiableList());
                 gateWayPermissModel.setDevices(devices);
+                // 下发设备数据
                 devicePermissEventService.requestDeviceBindData(gateWayPermissModel, tempList.get(0).getProjectOid());
             });
         }
         return ResultContent.buildSuccess();
     }
 
+    /**
+     * 下发用户信息数据
+     *
+     * @param permisses
+     * @param mark
+     * @return
+     */
+    public ResultContent changeUserInfo(List<DevicePermiss> permisses, int mark) {
+        if (ObjectUtils.isNotEmpty(permisses)) {
+            Map<String, List<DevicePermiss>> map = permisses.stream().collect(Collectors.groupingBy(DevicePermiss::getGateWayId));
+            map.forEach((gateWayId, tempList) -> {
+                DeviceUsersInfo deviceUsersInfo = new DeviceUsersInfo();
+                deviceUsersInfo.setGateWayId(gateWayId);
+                String projectOid = tempList.get(0).getProjectOid();
+                // 用户数据 (去重)
+                List<String> userIds = tempList.stream().map(it -> it.getUserId()).distinct().collect(Collectors.toList());
+                List<ProjectUserPermiss> userPermiss = getUserPermiss(projectOid, userIds);
+
+                deviceUsersInfo.setUsers(userPermiss);
+                // 下发设备数据
+                devicePermissEventService.requestDevicesUsersData(deviceUsersInfo, projectOid);
+            });
+        }
+        return ResultContent.buildSuccess();
+    }
+
     /**
      * 查询设备的权限数据
      *
@@ -98,19 +132,29 @@ public class DevicePermissIotService {
     }
 
     public GateWayPermissModel queryDevicePermissInfo(DevicePerQuery query) {
-        GateWayPermissModel permissModel = devicePermissService.getDeviceAboutUsers(query.getDeviceIds());
+        GateWayPermissModel permissModel = getDeviceAboutUsers(query.getDeviceIds());
         permissModel.setSuccess();
         permissModel.setGateWayId(query.getGateWayId());
         return permissModel;
     }
 
+    /**
+     * 查询设备关联的用户信息(增加或修改)
+     *
+     * @param query
+     * @return
+     */
     public ResultContent getDeviceAboutUserInfos(DevicePerQuery query) {
         DeviceUsersInfo permissModel = queryDeviceAboutUsers(query);
         return ResultContent.buildSuccess(JSONUtil.toJsonStr(permissModel));
     }
 
+    /**
+     * @param query
+     * @return
+     */
     public DeviceUsersInfo queryDeviceAboutUsers(DevicePerQuery query) {
-        DeviceUsersInfo permissModel = devicePermissService.getDeviceAboutUserInfos(query.getDeviceIds());
+        DeviceUsersInfo permissModel = getDeviceAboutUserInfos(query.getDeviceIds());
         permissModel.setSuccess();
         permissModel.setGateWayId(query.getGateWayId());
         return permissModel;
@@ -133,13 +177,112 @@ public class DevicePermissIotService {
             }
         }
         if (StringUtils.isNotEmpty(projectOid) && ObjectUtils.isNotEmpty(query.getUserIds())) {
-            permissModel.setUsers(devicePermissService.getUserPermiss(projectOid, query.getUserIds()));
+            permissModel.setUsers(getUserPermiss(projectOid, query.getUserIds()));
         }
         permissModel.setSuccess();
         permissModel.setGateWayId(query.getGateWayId());
         return ResultContent.buildSuccess(JSONUtil.toJsonStr(permissModel));
     }
 
+    public DeviceUsersInfo getDeviceAboutUserInfos(List<String> deviceIds) {
+        DeviceUsersInfo deviceUsersInfo = new DeviceUsersInfo();
+        if (ObjectUtils.isNotEmpty(deviceIds)) {
+            List<DevicePermiss> list = devicePermissDao.findByDeviceIdInAndDataState(deviceIds, DataState.Enable);
+            if (ObjectUtils.isNotEmpty(list)) {
+                // 用户userId集合
+                List<String> _userIds = list.stream().map(it -> it.getUserId()).collect(Collectors.toUnmodifiableList());
+                List<ProjectUserPermiss> userPermiss = getUserPermiss(list.get(0).getProjectOid(), _userIds.stream().distinct().collect(Collectors.toList()));
+                deviceUsersInfo.setUsers(userPermiss);
+            }
+        }
+        return deviceUsersInfo;
+    }
+
+    /**
+     * 组装用户在项目下的权限数据 mark:默认是1 ,编辑、增加
+     *
+     * @param projectOid 项目oid
+     * @param userIds    用户userId集合
+     * @return
+     */
+    public List<ProjectUserPermiss> getUserPermiss(String projectOid, List<String> userIds) {
+        if (StringUtils.isNotEmpty(projectOid) && ObjectUtils.isNotEmpty(userIds)) {
+            // 用户信息
+            List<UserAccount> userAccounts = userAccountService.getUserAccounts(userIds);
+            Map<String, UserAccount> userMap = userAccounts.stream().collect(Collectors.toMap(it -> it.getUserId(), it -> it, (v1, v2) -> v1));
+
+            // 人脸信息
+            List<OrgUserFace> userFaces = orgUserFaceService.getUserFaces(projectOid, userIds);
+            Map<String, OrgUserFace> faceMap = userFaces.stream().collect(Collectors.toMap(it -> it.getUserId(), it -> it, (v1, v2) -> v1));
+
+            // 用户的卡片信息
+            List<CardInfo> cardInfos = cardInfoService.getProjectCards(projectOid, userIds);
+            Map<String, List<CardInfo>> cardMap = cardInfos.stream().collect(Collectors.groupingBy(CardInfo::getUserId));
+
+            Map<String, ProjectUserPermiss> map = new HashMap<>();
+            for (String userId : userIds) {
+                ProjectUserPermiss permiss = null;
+                if (map.containsKey(userId)) {
+                    permiss = map.get(userId);
+                } else {
+                    permiss = new ProjectUserPermiss();
+                }
+                permiss.setUid(userId);
+                UserAccount userAccount = userMap.get(userId);
+                if (ObjectUtils.isNotEmpty(userAccount)) {
+                    permiss.setUn(userAccount.getName());
+                }
+                OrgUserFace orgUserFace = faceMap.get(userId);
+                if (ObjectUtils.isNotEmpty(orgUserFace)) {
+                    permiss.setFi(orgUserFace.getImg());
+                }
+                List<CardInfo> cardInfoList = cardMap.get(userId);
+                if (ObjectUtils.isNotEmpty(cardInfoList)) {
+                    permiss.setCNos(cardInfoList.stream().map(it -> it.getCode()).collect(Collectors.toList()));
+                } else {
+                    permiss.setCNos(List.of("unKnow"));
+                }
+                map.put(userId, permiss);
+            }
+            return List.copyOf(map.values());
+        }
+        return Lists.newArrayList();
+    }
+
+    /**
+     * 得到设备关联的用户 (用户数据发生了变化,为什么要在权限表来查询数据诶?
+     * 因为要来查询用户关联的设备->设备关联的网关,才能知道往那个网关推送数据
+     *
+     * @param deviceIds
+     * @return
+     */
+    public GateWayPermissModel getDeviceAboutUsers(List<String> deviceIds) {
+        GateWayPermissModel gateWayPermissModel = new GateWayPermissModel();
+        if (ObjectUtils.isNotEmpty(deviceIds)) {
+            List<DevicePermiss> list = devicePermissDao.findByDeviceIdInAndDataState(deviceIds, DataState.Enable);
+            if (ObjectUtils.isNotEmpty(list)) {
+                List<DeviceAboutPermiss> devices = new ArrayList<DeviceAboutPermiss>();
+                // 以设备分组
+                Map<String, List<DevicePermiss>> groupedItems = list.stream().collect(Collectors.groupingBy(DevicePermiss::getDeviceId));
+                groupedItems.forEach((deviceId, itemsInCategory) -> {
+                    DeviceAboutPermiss aboutPermiss = new DeviceAboutPermiss();
+                    aboutPermiss.setDeviceId(deviceId);
+                    List<String> _userIds = itemsInCategory.stream().map(it -> it.getUserId()).collect(Collectors.toUnmodifiableList());
+                    aboutPermiss.setUserIds(_userIds.stream().distinct().collect(Collectors.toUnmodifiableList()));
+                    devices.add(aboutPermiss);
+                });
+                gateWayPermissModel.setDevices(devices);
+            }
+        }
+        return gateWayPermissModel;
+    }
+
+    /**
+     * 组装用户信息 权限数据
+     *
+     * @param devicePermiss
+     * @return
+     */
     public ProjectUserPermiss toModel(DevicePermiss devicePermiss) {
         ProjectUserPermiss userPermiss = null;
         if (ObjectUtils.isNotEmpty(devicePermiss)) {

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

@@ -1,10 +1,6 @@
 package com.zhongshu.card.server.core.service.devices;
 
 import com.github.microservice.components.data.base.util.PageEntityUtil;
-import com.github.microservice.models.devicePermiss.DeviceAboutPermiss;
-import com.github.microservice.models.devicePermiss.DeviceUsersInfo;
-import com.github.microservice.models.devicePermiss.GateWayPermissModel;
-import com.github.microservice.models.devicePermiss.ProjectUserPermiss;
 import com.github.microservice.net.ResultContent;
 import com.github.microservice.net.ResultMessage;
 import com.google.common.collect.Lists;
@@ -24,8 +20,6 @@ import com.zhongshu.card.server.core.domain.devices.DevicePermiss;
 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.domain.projectAbout.OrgUserFace;
-import com.zhongshu.card.server.core.domain.school.CardInfo;
 import com.zhongshu.card.server.core.event.OrgUserBindUpdateSyncEvent;
 import com.zhongshu.card.server.core.service.base.SuperService;
 import com.zhongshu.card.server.core.service.projectAbout.CardInfoServiceImpl;
@@ -37,7 +31,6 @@ 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;
@@ -45,9 +38,7 @@ import org.springframework.scheduling.annotation.Async;
 import org.springframework.stereotype.Service;
 
 import java.util.ArrayList;
-import java.util.HashMap;
 import java.util.List;
-import java.util.Map;
 import java.util.stream.Collectors;
 
 /**
@@ -138,7 +129,10 @@ public class DevicePermissService extends SuperService {
                 }
                 devicePermissDao.saveAll(permisses);
                 // 下发设备权限增加数据
-                devicePermissIotService.changeDeviceUser(permisses.stream().map(it -> it.getId()).collect(Collectors.toList()), 1);
+                devicePermissIotService.changeDeviceUser(permisses, 1);
+
+                // 因为是新增加,下发关联的用户信息
+                devicePermissIotService.changeUserInfo(permisses, 1);
             }
         }
         return ResultContent.buildSuccess();
@@ -248,10 +242,10 @@ public class DevicePermissService extends SuperService {
         devicePermissDao.save(entity);
         if (dataState == DataState.Disable) {
             // 移除权限
-            devicePermissIotService.changeDeviceUser(List.of(id), 0);
+            devicePermissIotService.changeDeviceUser(List.of(entity), 0);
         } else {
             // 启用
-            devicePermissIotService.changeDeviceUser(List.of(id), 1);
+            devicePermissIotService.changeDeviceUser(List.of(entity), 1);
         }
         return ResultContent.buildSuccess();
     }
@@ -264,107 +258,22 @@ public class DevicePermissService extends SuperService {
      */
     public ResultContent deleteByIds(IDsParam param) {
         if (ObjectUtils.isNotEmpty(param.getIds())) {
+            List<DevicePermiss> list = devicePermissDao.findByIdIn(param.getIds());
             // 1: 移除权限
-            devicePermissIotService.changeDeviceUser(param.getIds(), 0);
+            devicePermissIotService.changeDeviceUser(list, 0);
             // 2:删除数据
-            devicePermissDao.deleteAllById(param.getIds());
+            devicePermissDao.deleteAll(list);
         }
         return ResultContent.buildSuccess();
     }
 
-
-    /**
-     * 得到设备关联的用户
-     *
-     * @param deviceIds
-     * @return
-     */
-    public GateWayPermissModel getDeviceAboutUsers(List<String> deviceIds) {
-        GateWayPermissModel gateWayPermissModel = new GateWayPermissModel();
-        if (ObjectUtils.isNotEmpty(deviceIds)) {
-            List<DevicePermiss> list = devicePermissDao.findByDeviceIdInAndDataState(deviceIds, DataState.Enable);
-            if (ObjectUtils.isNotEmpty(list)) {
-                List<DeviceAboutPermiss> devices = new ArrayList<DeviceAboutPermiss>();
-                // 以设备分组
-                Map<String, List<DevicePermiss>> groupedItems = list.stream().collect(Collectors.groupingBy(DevicePermiss::getDeviceId));
-                groupedItems.forEach((deviceId, itemsInCategory) -> {
-                    DeviceAboutPermiss aboutPermiss = new DeviceAboutPermiss();
-                    aboutPermiss.setDeviceId(deviceId);
-                    List<String> _userIds = itemsInCategory.stream().map(it -> it.getUserId()).collect(Collectors.toUnmodifiableList());
-                    aboutPermiss.setUserIds(_userIds.stream().distinct().collect(Collectors.toUnmodifiableList()));
-                    devices.add(aboutPermiss);
-                });
-                gateWayPermissModel.setDevices(devices);
-            }
-        }
-        return gateWayPermissModel;
-    }
-
-    public DeviceUsersInfo getDeviceAboutUserInfos(List<String> deviceIds) {
-        DeviceUsersInfo deviceUsersInfo = new DeviceUsersInfo();
-        if (ObjectUtils.isNotEmpty(deviceIds)) {
-            List<DevicePermiss> list = devicePermissDao.findByDeviceIdInAndDataState(deviceIds, DataState.Enable);
-            if (ObjectUtils.isNotEmpty(list)) {
-                // 用户userId集合
-                List<String> _userIds = list.stream().map(it -> it.getUserId()).collect(Collectors.toUnmodifiableList());
-                List<ProjectUserPermiss> userPermiss = getUserPermiss(list.get(0).getProjectOid(), _userIds.stream().distinct().collect(Collectors.toList()));
-                deviceUsersInfo.setUsers(userPermiss);
-            }
-        }
-        return deviceUsersInfo;
-    }
-
     /**
-     * 组装用户在项目下的权限数据
+     * 查询用户ID关联的设备数据
      *
-     * @param projectOid 项目oid
-     * @param userIds    用户userId集合
+     * @param projectOid
+     * @param userIds
      * @return
      */
-    public List<ProjectUserPermiss> getUserPermiss(String projectOid, List<String> userIds) {
-        if (StringUtils.isNotEmpty(projectOid) && ObjectUtils.isNotEmpty(userIds)) {
-            // 用户信息
-            List<UserAccount> userAccounts = userAccountService.getUserAccounts(userIds);
-            Map<String, UserAccount> userMap = userAccounts.stream().collect(Collectors.toMap(it -> it.getUserId(), it -> it, (v1, v2) -> v1));
-
-            // 人脸信息
-            List<OrgUserFace> userFaces = orgUserFaceService.getUserFaces(projectOid, userIds);
-            Map<String, OrgUserFace> faceMap = userFaces.stream().collect(Collectors.toMap(it -> it.getUserId(), it -> it, (v1, v2) -> v1));
-
-            // 用户的卡片信息
-            List<CardInfo> cardInfos = cardInfoService.getProjectCards(projectOid, userIds);
-            Map<String, List<CardInfo>> cardMap = cardInfos.stream().collect(Collectors.groupingBy(CardInfo::getUserId));
-
-            Map<String, ProjectUserPermiss> map = new HashMap<>();
-            for (String userId : userIds) {
-                ProjectUserPermiss permiss = null;
-                if (map.containsKey(userId)) {
-                    permiss = map.get(userId);
-                } else {
-                    permiss = new ProjectUserPermiss();
-                }
-                permiss.setUid(userId);
-                UserAccount userAccount = userMap.get(userId);
-                if (ObjectUtils.isNotEmpty(userAccount)) {
-                    permiss.setUn(userAccount.getName());
-                }
-                OrgUserFace orgUserFace = faceMap.get(userId);
-                if (ObjectUtils.isNotEmpty(orgUserFace)) {
-                    permiss.setFi(orgUserFace.getImg());
-                }
-                List<CardInfo> cardInfoList = cardMap.get(userId);
-                if (ObjectUtils.isNotEmpty(cardInfoList)) {
-                    permiss.setCNos(cardInfoList.stream().map(it -> it.getCode()).collect(Collectors.toList()));
-                } else {
-                    permiss.setCNos(List.of("unKnow"));
-                }
-                map.put(userId, permiss);
-            }
-            return List.copyOf(map.values());
-        }
-        return Lists.newArrayList();
-    }
-
     public List<String> getUserAllDeviceIds(String projectOid, List<String> userIds) {
         List<String> deviceIds = Lists.newArrayList();
         if (StringUtils.isNotEmpty(projectOid) && ObjectUtils.isNotEmpty(userIds)) {