TRX 1 жил өмнө
parent
commit
d283dcdaf4

+ 4 - 0
FullCardClient/src/main/java/com/zhongshu/card/client/model/devices/userCache/UserCacheModel.java

@@ -60,4 +60,8 @@ public class UserCacheModel implements Serializable {
         hasPermiss = true;
         this.msg = "成功";
     }
+
+    public boolean isSuccess() {
+        return hasPermiss;
+    }
 }

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

@@ -16,6 +16,8 @@ public interface DeviceGroupToDeviceDao extends MongoDao<DeviceGroupToDevice>, D
 
     List<DeviceGroupToDevice> findByIdIn(List<String> ids);
 
+    List<DeviceGroupToDevice> findByDeviceGroup(DeviceGroup deviceGroup);
+
     DeviceGroupToDevice findTopById(String id);
 
     DeviceGroupToDevice findTopByDeviceGroupAndDeviceInfo(DeviceGroup deviceGroup, DeviceInfo deviceInfo);

+ 0 - 5
FullCardServer/src/main/java/com/zhongshu/card/server/core/dao/devices/impl/PermissSettingListDaoImpl.java

@@ -7,7 +7,6 @@ import com.zhongshu.card.server.core.dao.devices.PermissSettingDao;
 import com.zhongshu.card.server.core.dao.devices.extend.PermissSettingListDaoExtend;
 import com.zhongshu.card.server.core.dao.org.DepartmentDao;
 import com.zhongshu.card.server.core.dao.org.RoleDao;
-import com.zhongshu.card.server.core.domain.devices.permiss.PermissSetting;
 import com.zhongshu.card.server.core.domain.devices.permiss.PermissSettingList;
 import com.zhongshu.card.server.core.util.CommonUtil;
 import org.apache.commons.lang3.ObjectUtils;
@@ -90,10 +89,6 @@ public class PermissSettingListDaoImpl extends BaseImpl implements PermissSettin
             criteria.and("projectOid").is(param.getProjectOid());
         }
 
-        if (ObjectUtils.isNotEmpty(param.getPermissSettingIds())) {
-            criteria.and("permissSettingId").in(param.getPermissSettingIds());
-        }
-
         // 模糊搜索
         List<Criteria> criterias = new ArrayList<>();
         if (param.getSex() != null) {

+ 3 - 1
FullCardServer/src/main/java/com/zhongshu/card/server/core/domain/devices/permiss/UserPermissDataCache.java

@@ -1,6 +1,5 @@
 package com.zhongshu.card.server.core.domain.devices.permiss;
 
-import com.zhongshu.card.client.model.devices.userCache.UserCacheModel;
 import com.zhongshu.card.server.core.domain.base.SuperMain;
 import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.AllArgsConstructor;
@@ -25,6 +24,9 @@ public class UserPermissDataCache extends SuperMain {
     @Schema(description = "关联的数据ID")
     private String dataId;
 
+    @Schema(description = "关联的数据名称")
+    private String dataName;
+
     @Schema(description = "用户数据")
     private Object cacheData;
 

+ 5 - 3
FullCardServer/src/main/java/com/zhongshu/card/server/core/event/DevicePermissChangeEvent.java

@@ -1,10 +1,8 @@
 package com.zhongshu.card.server.core.event;
 
-import com.zhongshu.card.client.type.DataOperationType;
 import lombok.Getter;
 import org.springframework.context.ApplicationEvent;
 
-import java.util.ArrayList;
 import java.util.List;
 
 /**
@@ -19,9 +17,13 @@ public class DevicePermissChangeEvent extends ApplicationEvent {
     @Getter
     private String projectOid;
 
-    public DevicePermissChangeEvent(Object source, List<String> deviceIds, String projectOid) {
+    @Getter
+    private String from;
+
+    public DevicePermissChangeEvent(Object source, List<String> deviceIds, String projectOid, String from) {
         super(source);
         this.deviceIds = deviceIds;
         this.projectOid = projectOid;
+        this.from = from;
     }
 }

+ 29 - 1
FullCardServer/src/main/java/com/zhongshu/card/server/core/service/devices/DeviceGroupService.java

@@ -15,6 +15,7 @@ import com.zhongshu.card.server.core.domain.devices.DeviceGroupToDevice;
 import com.zhongshu.card.server.core.domain.devices.DeviceInfo;
 import com.zhongshu.card.server.core.domain.org.Organization;
 import com.zhongshu.card.server.core.service.base.SuperService;
+import com.zhongshu.card.server.core.service.devices.permiss.DevicePermissEventService;
 import com.zhongshu.card.server.core.util.BeanUtils;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang3.ObjectUtils;
@@ -27,6 +28,7 @@ import org.springframework.util.Assert;
 
 import java.util.ArrayList;
 import java.util.List;
+import java.util.stream.Collectors;
 
 /**
  * 设备分组
@@ -53,6 +55,9 @@ public class DeviceGroupService extends SuperService {
     @Autowired
     private DeviceInfoServiceImpl deviceInfoService;
 
+    @Autowired
+    private DevicePermissEventService devicePermissEventService;
+
     public ResultContent saveInfo(DeviceGroupParam param) {
         Assert.hasText(param.getProjectOid(), "projectOid不能为空");
 
@@ -82,12 +87,25 @@ public class DeviceGroupService extends SuperService {
         return ResultContent.buildSuccess(PageEntityUtil.concurrent2PageModel(page, this::toModel));
     }
 
+    /**
+     * 删除设备分组
+     *
+     * @param id
+     * @return
+     */
     public ResultContent deleteInfo(String id) {
         DeviceGroup entity = deviceGroupDao.findTopById(id);
         if (ObjectUtils.isEmpty(entity)) {
             return ResultContent.buildFail(String.format(ResultMessage.DATA_NOT_EXIST, id));
         }
+        List<DeviceGroupToDevice> list = deviceGroupToDeviceDao.findByDeviceGroup(entity);
         deviceGroupDao.delete(entity);
+        deviceGroupToDeviceDao.deleteByDeviceGroup(entity);
+
+        if (ObjectUtils.isNotEmpty(list)) {
+            List<String> deviceIds = list.stream().map(it -> it.getDeviceId()).collect(Collectors.toUnmodifiableList());
+            devicePermissEventService.sendDeviceChangeEvent(deviceIds, entity.getProjectOid(), "DeviceGroupService deleteInfo ");
+        }
         return ResultContent.buildSuccess();
     }
 
@@ -106,7 +124,13 @@ public class DeviceGroupService extends SuperService {
         }
         entity.setState(state);
         deviceGroupDao.save(entity);
-        deviceGroupToDeviceDao.deleteByDeviceGroup(entity);
+
+        // 发起设备权限发生变化
+        List<DeviceGroupToDevice> list = deviceGroupToDeviceDao.findByDeviceGroup(entity);
+        if (ObjectUtils.isNotEmpty(list)) {
+            List<String> deviceIds = list.stream().map(it -> it.getDeviceId()).collect(Collectors.toUnmodifiableList());
+            devicePermissEventService.sendDeviceChangeEvent(deviceIds, entity.getProjectOid(), "DeviceGroupService deleteInfo ");
+        }
         return ResultContent.buildSuccess();
     }
 
@@ -145,6 +169,8 @@ public class DeviceGroupService extends SuperService {
             if (ObjectUtils.isNotEmpty(saveList)) {
                 deviceGroupToDeviceDao.saveAll(saveList);
                 initGroupNumber(deviceGroup);
+
+                devicePermissEventService.sendDeviceChangeEvent(param.getDeviceIds(), deviceGroup.getProjectOid(), "DeviceGroupService groupBindDevices ");
             }
         }
         return ResultContent.buildSuccess();
@@ -157,6 +183,8 @@ public class DeviceGroupService extends SuperService {
         }
         deviceGroupToDeviceDao.delete(entity);
         initGroupNumber(entity.getDeviceGroup());
+
+        devicePermissEventService.sendDeviceChangeEvent(entity.getDeviceId(), entity.getProjectOid(), "DeviceGroupService deleteGroupDeviceInfo ");
         return ResultContent.buildSuccess();
     }
 

+ 6 - 0
FullCardServer/src/main/java/com/zhongshu/card/server/core/service/devices/DeviceInfoServiceImpl.java

@@ -21,6 +21,7 @@ import com.zhongshu.card.server.core.domain.org.Organization;
 import com.zhongshu.card.server.core.domain.school.Area;
 import com.zhongshu.card.server.core.service.base.CommonService;
 import com.zhongshu.card.server.core.service.base.SuperService;
+import com.zhongshu.card.server.core.service.devices.permiss.DevicePermissEventService;
 import com.zhongshu.card.server.core.service.org.OrganizationServiceImpl;
 import com.zhongshu.card.server.core.service.orgManager.OrganizationManagerServiceImpl;
 import com.zhongshu.card.server.core.service.paySetting.OrgPaySettingJudgmentService;
@@ -73,6 +74,9 @@ public class DeviceInfoServiceImpl extends SuperService implements DeviceInfoSer
     @Autowired
     private OrgPaySettingJudgmentService orgPaySettingJudgmentService;
 
+    @Autowired
+    private DevicePermissEventService devicePermissEventService;
+
     /**
      * 同步设备 (设备基础信息)
      *
@@ -135,6 +139,8 @@ public class DeviceInfoServiceImpl extends SuperService implements DeviceInfoSer
         BeanUtils.copyProperties(param, deviceInfo, "id");
         deviceInfo.setProjectInfoName(organizationServiceImpl.getOrgNameByCode(param.getProjectInfoCode()));
         deviceInfoDao.save(deviceInfo);
+        
+        devicePermissEventService.sendDeviceChangeEvent(deviceInfo.getDeviceId(), deviceInfo.getProjectOid(), "addDeviceInfo");
         return ResultContent.buildSuccess();
     }
 

+ 13 - 11
FullCardServer/src/main/java/com/zhongshu/card/server/core/service/devices/permiss/DevicePermissEventService.java

@@ -89,8 +89,7 @@ public class DevicePermissEventService {
     }
 
     public void sendUserInfoChangeEvent(String userId, String projectOid, Map<String, Object> map) {
-        UserInfoChangeSyncEvent event = new UserInfoChangeSyncEvent(
-                this, List.of(userId), projectOid, map);
+        UserInfoChangeSyncEvent event = new UserInfoChangeSyncEvent(this, List.of(userId), projectOid, map);
         applicationContext.publishEvent(event);
     }
 
@@ -111,12 +110,18 @@ public class DevicePermissEventService {
      * @param deviceIds
      * @param projectOid
      */
-    public void sendDeviceChangeEvent(List<String> deviceIds, String projectOid) {
-        DevicePermissChangeEvent event = new DevicePermissChangeEvent(this, deviceIds, projectOid);
+    public void sendDeviceChangeEvent(List<String> deviceIds, String projectOid, String from) {
+        DevicePermissChangeEvent event = new DevicePermissChangeEvent(this, deviceIds, projectOid, from);
         applicationContext.publishEvent(event);
     }
 
-    @EventListener(classes = DevicePermissChangeEvent.class)
+    public void sendDeviceChangeEvent(String deviceId, String projectOid, String from) {
+        DevicePermissChangeEvent event = new DevicePermissChangeEvent(this, List.of(deviceId), projectOid, from);
+        applicationContext.publishEvent(event);
+    }
+
+    //todo 不要监听这个了 2024-12-30
+//    @EventListener(classes = DevicePermissChangeEvent.class)
     @SneakyThrows
     public void devicePermissChange(DevicePermissChangeEvent event) {
         executorService.execute(() -> {
@@ -170,8 +175,7 @@ public class DevicePermissEventService {
                 userIds[0] = userIds[0].stream().distinct().collect(Collectors.toList());
                 // 循环用户数据
                 for (String userId : userIds[0]) {
-                    List<String> deviceIds = devicePermissService.getUserAllDeviceIds(
-                            projectOid, List.of(userId));
+                    List<String> deviceIds = devicePermissService.getUserAllDeviceIds(projectOid, List.of(userId));
                     // 网关 对应的设备
                     HashMap<String, List<String>> map = deviceGroupByGateWayId(deviceIds);
                     if (!map.isEmpty()) {
@@ -250,8 +254,7 @@ public class DevicePermissEventService {
         param.setIdentifier(IotIdentifierConfig.queryDeviceBindUsers);
 
         String groupId = gateWayPermissModel.getGroupId();
-        if (ObjectUtils.isNotEmpty(gateWayPermissModel.getDevices())
-                && StringUtils.isNotEmpty(groupId)) {
+        if (ObjectUtils.isNotEmpty(gateWayPermissModel.getDevices()) && StringUtils.isNotEmpty(groupId)) {
             List<DevicePermissSendLog> list = new ArrayList<>();
             for (DeviceAboutPermiss deviceAboutPermiss : gateWayPermissModel.getDevices()) {
                 deviceAboutPermiss.setDataId(CommonUtil.UUID());
@@ -310,8 +313,7 @@ public class DevicePermissEventService {
         param.setIdentifier(IotIdentifierConfig.queryDeviceUsersInfo);
 
         String groupId = deviceUsersInfo.getGroupId();
-        if (ObjectUtils.isNotEmpty(deviceUsersInfo.getUsers())
-                && StringUtils.isNotEmpty(groupId)) {
+        if (ObjectUtils.isNotEmpty(deviceUsersInfo.getUsers()) && StringUtils.isNotEmpty(groupId)) {
             List<DevicePermissSendLog> list = new ArrayList<>();
             for (ProjectUserPermiss projectUserPermiss : deviceUsersInfo.getUsers()) {
                 projectUserPermiss.setDataId(CommonUtil.UUID());

+ 25 - 81
FullCardServer/src/main/java/com/zhongshu/card/server/core/service/devices/permiss/DevicePermissVerifyService.java

@@ -4,6 +4,7 @@ import com.github.microservice.net.ResultContent;
 import com.zhongshu.card.client.model.devices.permiss.PermissSettingListSearch;
 import com.zhongshu.card.client.model.devices.permiss.TimeSlotModel;
 import com.zhongshu.card.client.model.devices.permiss.TimeSlotWeekModel;
+import com.zhongshu.card.client.model.devices.userCache.UserCacheModel;
 import com.zhongshu.card.client.type.DataState;
 import com.zhongshu.card.client.type.UserState;
 import com.zhongshu.card.client.type.device.TimeSlotType;
@@ -13,18 +14,13 @@ import com.zhongshu.card.server.core.dao.devices.*;
 import com.zhongshu.card.server.core.dao.org.OrganizationUserDao;
 import com.zhongshu.card.server.core.dao.org.UserCountDao;
 import com.zhongshu.card.server.core.dao.org.UserGroupToUserDao;
-import com.zhongshu.card.server.core.domain.devices.DeviceGroup;
-import com.zhongshu.card.server.core.domain.devices.DeviceGroupToDevice;
 import com.zhongshu.card.server.core.domain.devices.DeviceInfo;
 import com.zhongshu.card.server.core.domain.devices.permiss.DevicePermiss;
 import com.zhongshu.card.server.core.domain.devices.permiss.PermissTimeSlot;
-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.org.UserGroupToUser;
 import com.zhongshu.card.server.core.service.org.OrganizationUserServiceImpl;
 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.stereotype.Service;
 import org.springframework.util.StopWatch;
@@ -70,6 +66,9 @@ public class DevicePermissVerifyService {
     @Autowired
     private UserGroupToUserDao userGroupToUserDao;
 
+    @Autowired
+    private UserPermissDataCacheService userPermissDataCacheService;
+
     /**
      * 验证用户是否有设备的使用权限
      *
@@ -119,15 +118,16 @@ public class DevicePermissVerifyService {
 
         if (!hasPermission) {
 
+            stopWatch.start("查询用户项目权限数据");
+            UserCacheModel userCacheModel = userPermissDataCacheService.getUserCacheModel(userId, projectOid);
+            stopWatch.stop();
+
             stopWatch.start("查询当前时间段");
             // 查找当前时间对应的时段信息
             List<PermissTimeSlot> permissTimeSlots = getCurrentTimeSlot(projectOid);
-
             stopWatch.stop();
-            stopWatch.start("查询用户所属机构");
-            List<OrganizationUser> organizationUsers = organizationUserService.getUserOrgList(userId, projectOid);
 
-            if (ObjectUtils.isNotEmpty(permissTimeSlots) && ObjectUtils.isNotEmpty(organizationUsers)) {
+            if (userCacheModel != null && userCacheModel.isSuccess() && ObjectUtils.isNotEmpty(permissTimeSlots)) {
                 // 查看权限规则 是否包含该设备
                 PermissSettingListSearch search = new PermissSettingListSearch();
 
@@ -140,84 +140,28 @@ public class DevicePermissVerifyService {
                 });
                 search.setPermissSettingIds(permissSettingIds);
 
-                if (userAccount.getSex() != null) {
-                    search.setSex(userAccount.getSex());
-                }
-                List<String> dataIds = new ArrayList<>();
-                // 用户id
-                dataIds.add(userId);
+                // 用户关联的权限
+                search.setSex(userCacheModel.getSex());
+                search.setDataIds(userCacheModel.getDataIds());
 
+                stopWatch.start("设备权限");
+                UserCacheModel deviceCacheModel = userPermissDataCacheService.getDeviceCacheModel(deviceId, projectOid);
                 stopWatch.stop();
 
-                stopWatch.start("机构用户信息处理");
-                // 用户所属角色、机构
-                organizationUsers.parallelStream().forEach(organizationUser -> {
-                    dataIds.add(organizationUser.getOid());
-                    if (ObjectUtils.isNotEmpty(organizationUser.getRoleIds())) {
-                        dataIds.addAll(organizationUser.getRoleIds());
-                    }
-                });
-
-                stopWatch.stop();
-                stopWatch.start("用户分组查询");
-                // 用户分组
-                List<UserGroupToUser> userGroupToUsers = userGroupToUserDao.findByUserIdAndProjectOid(userId, projectOid);
-                stopWatch.stop();
+                if (deviceCacheModel != null && deviceCacheModel.isSuccess()) {
+                    search.setDeviceTypes(List.of(deviceCacheModel.getDeviceType()));
+                    // 设备所在的分组
+                    search.setDeviceIds(deviceCacheModel.getDataIds());
 
-                stopWatch.start("用户分组处理");
-                if (ObjectUtils.isNotEmpty(userGroupToUsers)) {
-                    userGroupToUsers.parallelStream().forEach(userGroupToUser -> {
-                        dataIds.add(userGroupToUser.getUserGroupId());
-//                        UserGroup userGroup = userGroupToUser.getUserGroup();
-//                        if (ObjectUtils.isNotEmpty(userGroup) && userGroup.getState() == DataState.Enable) {
-//                            dataIds.add(userGroup.getId());
-//                        }
-                    });
-                }
-                search.setDataIds(dataIds);
-
-                // 设备属性
-                List<String> deviceIds = new ArrayList<>();
-                deviceIds.add(deviceId);
-                if (StringUtils.isNotEmpty(deviceInfo.getAreaId())) {
-                    // 区域的下级怎么办?
-                    deviceIds.add(deviceInfo.getAreaId());
-                }
-
-                stopWatch.stop();
-                stopWatch.start("设备分组");
-                // 设备分组信息
-                List<DeviceGroupToDevice> deviceAbouts = deviceGroupToDeviceDao.findByProjectOidAndDeviceId(projectOid, deviceId);
-                if (ObjectUtils.isNotEmpty(deviceAbouts)) {
-                    List<String> groupIds = new ArrayList<>();
-                    deviceAbouts.parallelStream().forEach(it -> {
-                        DeviceGroup deviceGroup = it.getDeviceGroup();
-                        if (ObjectUtils.isNotEmpty(deviceGroup) && deviceGroup.getState() == DataState.Enable) {
-                            groupIds.add(deviceGroup.getId());
-                        }
-                    });
-                    if (ObjectUtils.isNotEmpty(groupIds)) {
-                        deviceIds.addAll(groupIds);
+                    stopWatch.start("规则数据查询");
+                    boolean b = permissSettingListDao.isExit(search);
+                    if (b) {
+                        hasPermission = true;
                     }
+                    stopWatch.stop();
+                } else {
+                    hasPermission = false;
                 }
-                stopWatch.stop();
-
-                // 设备类型
-                search.setDeviceTypes(List.of(deviceInfo.getDeviceType()));
-                // 设备所在的分组
-                search.setDeviceIds(deviceIds);
-
-                stopWatch.start("规则数据查询");
-                boolean b = permissSettingListDao.isExit(search);
-                if (b) {
-                    hasPermission = true;
-                }
-//                Pageable pageable = PageRequest.of(0, 1);
-//                Page<PermissSettingList> page = permissSettingListDao.page(pageable, search);
-//                if (ObjectUtils.isNotEmpty(page.getContent())) {
-//                    hasPermission = true;
-//                }
-                stopWatch.stop();
             }
         }
         if (!hasPermission) {

+ 96 - 0
FullCardServer/src/main/java/com/zhongshu/card/server/core/service/devices/permiss/UserPermissDataCacheService.java

@@ -3,17 +3,23 @@ package com.zhongshu.card.server.core.service.devices.permiss;
 import com.zhongshu.card.client.model.devices.userCache.UserCacheModel;
 import com.zhongshu.card.client.type.DataState;
 import com.zhongshu.card.client.type.UserState;
+import com.zhongshu.card.server.core.dao.devices.DeviceGroupToDeviceDao;
+import com.zhongshu.card.server.core.dao.devices.DeviceInfoDao;
 import com.zhongshu.card.server.core.dao.devices.UserPermissDataCacheDao;
 import com.zhongshu.card.server.core.dao.org.OrganizationUserDao;
 import com.zhongshu.card.server.core.dao.org.UserCountDao;
 import com.zhongshu.card.server.core.dao.org.UserGroupDao;
 import com.zhongshu.card.server.core.dao.org.UserGroupToUserDao;
 import com.zhongshu.card.server.core.dataConfig.TtlConfig;
+import com.zhongshu.card.server.core.domain.devices.DeviceGroup;
+import com.zhongshu.card.server.core.domain.devices.DeviceGroupToDevice;
+import com.zhongshu.card.server.core.domain.devices.DeviceInfo;
 import com.zhongshu.card.server.core.domain.devices.permiss.UserPermissDataCache;
 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.org.UserGroup;
 import com.zhongshu.card.server.core.domain.org.UserGroupToUser;
+import com.zhongshu.card.server.core.event.DevicePermissChangeEvent;
 import com.zhongshu.card.server.core.event.UserInfoChangeSyncEvent;
 import com.zhongshu.card.server.core.service.base.SuperService;
 import com.zhongshu.card.server.core.service.org.OrganizationUserServiceImpl;
@@ -56,6 +62,12 @@ public class UserPermissDataCacheService extends SuperService {
     @Autowired
     private UserPermissDataCacheDao userPermissDataCacheDao;
 
+    @Autowired
+    private DeviceInfoDao deviceInfoDao;
+
+    @Autowired
+    private DeviceGroupToDeviceDao deviceGroupToDeviceDao;
+
     @EventListener(classes = UserInfoChangeSyncEvent.class)
     @SneakyThrows
     public void userPermissDataChange(UserInfoChangeSyncEvent event) {
@@ -69,6 +81,19 @@ public class UserPermissDataCacheService extends SuperService {
         }
     }
 
+    @EventListener(classes = DevicePermissChangeEvent.class)
+    @SneakyThrows
+    public void devicePermissDataChange(DevicePermissChangeEvent event) {
+        log.info("devicePermissDataChange: {}", event.getFrom());
+        String projectOid = event.getProjectOid();
+        List<String> deviceIds = event.getDeviceIds();
+        if (ObjectUtils.isNotEmpty(deviceIds) && StringUtils.isNotEmpty(projectOid)) {
+            for (String deviceId : deviceIds) {
+                updateDevicePermissAboutInfo(deviceId, projectOid);
+            }
+        }
+    }
+
     /**
      * 缓存用户
      *
@@ -80,12 +105,15 @@ public class UserPermissDataCacheService extends SuperService {
         if (ObjectUtils.isEmpty(dataCache)) {
             dataCache = new UserPermissDataCache();
             dataCache.setTTL(new Date(System.currentTimeMillis() + TtlConfig.userCacheTime));
+            dataCache.setDataId(userId);
+            dataCache.setProjectOid(projectOid);
         }
 
         // 影响范围:用户项目中:机构、角色、分户分组、性别
         UserCacheModel model = new UserCacheModel();
         UserAccount userAccount = userCountDao.findTopByUserId(userId);
         if (ObjectUtils.isNotEmpty(userAccount)) {
+            dataCache.setDataName(userAccount.getName());
             if (userAccount.getState() != UserState.Normal) {
                 model.setFailed("用户不可用");
             } else {
@@ -124,9 +152,77 @@ public class UserPermissDataCacheService extends SuperService {
         return dataCache;
     }
 
+    /**
+     * 更新设备的权限数据
+     *
+     * @param deviceId
+     * @param projectOid
+     * @return
+     */
+    private UserPermissDataCache updateDevicePermissAboutInfo(String deviceId, String projectOid) {
+        UserPermissDataCache dataCache = userPermissDataCacheDao.findTopByDataIdAndProjectOid(deviceId, projectOid);
+        if (ObjectUtils.isEmpty(dataCache)) {
+            dataCache = new UserPermissDataCache();
+            dataCache.setTTL(new Date(System.currentTimeMillis() + TtlConfig.userCacheTime));
+            dataCache.setDataId(deviceId);
+            dataCache.setProjectOid(projectOid);
+        }
+
+        // 影响范围:用户项目中:机构、角色、分户分组、性别
+        UserCacheModel model = new UserCacheModel();
+
+        DeviceInfo deviceInfo = deviceInfoDao.findTopByDeviceId(deviceId);
+        if (ObjectUtils.isNotEmpty(deviceInfo)) {
+            dataCache.setDataName(deviceInfo.getDeviceName());
+
+            if (deviceInfo.getState() != DataState.Enable) {
+                model.setFailed("设备不可用");
+            } else {
+                model.add(deviceId);
+                model.setDeviceType(deviceInfo.getDeviceType());
+                if (StringUtils.isNotEmpty(deviceInfo.getAreaId())) {
+                    // 区域的下级怎么办?
+                    model.add(deviceInfo.getAreaId());
+                }
+
+                // 设备分组
+                List<DeviceGroupToDevice> deviceAbouts = deviceGroupToDeviceDao.findByProjectOidAndDeviceId(projectOid, deviceId);
+                if (ObjectUtils.isNotEmpty(deviceAbouts)) {
+                    deviceAbouts.parallelStream().forEach(it -> {
+                        DeviceGroup deviceGroup = it.getDeviceGroup();
+                        if (ObjectUtils.isNotEmpty(deviceGroup) && deviceGroup.getState() == DataState.Enable) {
+                            model.add(deviceGroup.getId());
+                        }
+                    });
+                }
+                model.setSuccess();
+            }
+        } else {
+            model.setFailed("设备不存在");
+        }
+        dataCache.setCacheData(model);
+        userPermissDataCacheDao.save(dataCache);
+        return dataCache;
+    }
+
     public UserCacheModel getUserCacheModel(String userId, String projectOid) {
         UserCacheModel model = null;
         UserPermissDataCache dataCache = userPermissDataCacheDao.findTopByDataIdAndProjectOid(userId, projectOid);
+        if (ObjectUtils.isEmpty(dataCache)) {
+            dataCache = updateUserDevicePermissAboutInfo(userId, projectOid);
+        }
+        if (ObjectUtils.isNotEmpty(dataCache)) {
+            model = (UserCacheModel) dataCache.getCacheData();
+        }
+        return model;
+    }
+
+    public UserCacheModel getDeviceCacheModel(String deviceId, String projectOid) {
+        UserCacheModel model = null;
+        UserPermissDataCache dataCache = userPermissDataCacheDao.findTopByDataIdAndProjectOid(deviceId, projectOid);
+        if (ObjectUtils.isEmpty(dataCache)) {
+            dataCache = updateDevicePermissAboutInfo(deviceId, projectOid);
+        }
         if (ObjectUtils.isNotEmpty(dataCache)) {
             model = (UserCacheModel) dataCache.getCacheData();
         }

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

@@ -105,6 +105,8 @@ public class UserGroupService extends SuperService {
         }
         userGroupDao.delete(entity);
         userGroupToUserDao.deleteByUserGroup(entity);
+
+        // 权限变化
         devicePermissEventService.sendUserInfoChangeEvent(userIds, entity.getProjectOid(), "deleteInfo userGroup");
         return ResultContent.buildSuccess();
     }
@@ -124,6 +126,7 @@ public class UserGroupService extends SuperService {
         }
         entity.setState(state);
         userGroupDao.save(entity);
+
         List<String> userIds = new ArrayList<>();
         List<UserGroupToUser> list = userGroupToUserDao.findByUserGroup(entity);
         if (ObjectUtils.isNotEmpty(list)) {