TRX 1 éve
szülő
commit
3e196af1fd

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

@@ -36,4 +36,5 @@ public interface DevicePermissDao extends MongoDao<DevicePermiss>, DevicePermiss
 
     List<DevicePermiss> findByUserIdInAndProjectOidAndDataState(List<String> userIds, String projectOid, DataState dataState);
 
+
 }

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

@@ -107,7 +107,7 @@ public class DeviceGroupService extends SuperService {
 
         if (ObjectUtils.isNotEmpty(list)) {
             List<String> deviceIds = list.stream().map(it -> it.getDeviceId()).collect(Collectors.toUnmodifiableList());
-            devicePermissEventService.sendDeviceChangeEvent(deviceIds, entity.getProjectOid(), "DeviceGroupService deleteInfo ");
+            devicePermissEventService.devicePremissChange(deviceIds, entity.getProjectOid(), "DeviceGroupService deleteInfo ");
         }
         return ResultContent.buildSuccess();
     }
@@ -132,7 +132,7 @@ public class DeviceGroupService extends SuperService {
         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 ");
+            devicePermissEventService.devicePremissChange(deviceIds, entity.getProjectOid(), "DeviceGroupService deleteInfo ");
         }
         return ResultContent.buildSuccess();
     }
@@ -173,7 +173,7 @@ public class DeviceGroupService extends SuperService {
                 deviceGroupToDeviceDao.saveAll(saveList);
                 initGroupNumber(deviceGroup);
 
-                devicePermissEventService.sendDeviceChangeEvent(param.getDeviceIds(), deviceGroup.getProjectOid(), "DeviceGroupService groupBindDevices ");
+                devicePermissEventService.devicePremissChange(param.getDeviceIds(), deviceGroup.getProjectOid(), "DeviceGroupService groupBindDevices ");
             }
         }
         return ResultContent.buildSuccess();

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

@@ -17,7 +17,6 @@ import com.zhongshu.card.server.core.dao.devices.DevicePermissSendLogDao;
 import com.zhongshu.card.server.core.dataConfig.TtlConfig;
 import com.zhongshu.card.server.core.domain.devices.DeviceInfo;
 import com.zhongshu.card.server.core.domain.devices.permiss.DevicePermissSendLog;
-import com.zhongshu.card.server.core.event.DevicePermissChangeEvent;
 import com.zhongshu.card.server.core.event.UserInfoChangeSyncEvent;
 import com.zhongshu.card.server.core.service.openAPI.OpenApiRequestService;
 import com.zhongshu.card.server.core.util.CommonUtil;
@@ -58,9 +57,6 @@ public class DevicePermissEventService {
     //线程池
     private ExecutorService executorService = Executors.newFixedThreadPool(SystemUtil.getCpuCoreCount() * 2);
 
-    @Autowired
-    private DevicePermissService devicePermissService;
-
     @Autowired
     private ApplicationContext applicationContext;
 
@@ -80,61 +76,24 @@ public class DevicePermissEventService {
         }));
     }
 
-    /**
-     * 通知用户关联信息发送变化
-     *
-     * @param userId
-     * @param projectOid
-     */
-    public void sendUserInfoChangeEvent(String userId, String projectOid, String from) {
-        UserInfoChangeSyncEvent event = new UserInfoChangeSyncEvent(this, List.of(userId), projectOid, from);
-        applicationContext.publishEvent(event);
-    }
-
-    public void sendUserInfoChangeEvent(String userId, String projectOid, Map<String, Object> map) {
-        UserInfoChangeSyncEvent event = new UserInfoChangeSyncEvent(this, List.of(userId), projectOid, map);
-        applicationContext.publishEvent(event);
-    }
 
-    /**
-     * 通知用户关联信息发送变化
-     *
-     * @param userIds
-     * @param projectOid
-     */
-    public void sendUserInfoChangeEvent(List<String> userIds, String projectOid, String from) {
-        UserInfoChangeSyncEvent event = new UserInfoChangeSyncEvent(this, userIds, projectOid, from);
-        applicationContext.publishEvent(event);
-    }
-
-    /**
-     * 设备信息发送变化
-     *
-     * @param deviceIds
-     * @param projectOid
-     */
-    public void sendDeviceChangeEvent(List<String> deviceIds, String projectOid, String from) {
-        DevicePermissChangeEvent event = new DevicePermissChangeEvent(this, deviceIds, projectOid, from);
-        applicationContext.publishEvent(event);
-    }
+    //-----------------------------设备权限下发 start-------------------
 
     public void sendDeviceChangeEvent(String deviceId, String projectOid, String from) {
-        DevicePermissChangeEvent event = new DevicePermissChangeEvent(this, List.of(deviceId), projectOid, from);
-        applicationContext.publishEvent(event);
+        devicePremissChange(List.of(deviceId), projectOid, from);
     }
 
-    //todo 不要监听这个了 2024-12-30
-//    @EventListener(classes = DevicePermissChangeEvent.class)
     @SneakyThrows
-    public void devicePermissChange(DevicePermissChangeEvent event) {
+    public void devicePremissChange(List<String> deviceIds, String projectOid, String from) {
+        if (ObjectUtils.isEmpty(deviceIds)) {
+            return;
+        }
         executorService.execute(() -> {
-            log.info("设备权限发生变化...");
+            log.info("设备权限发生变化...{} ", from);
             // 通知物联网 设备权限发生变化
-            List<String> deviceIds = event.getDeviceIds();
             if (ObjectUtils.isNotEmpty(deviceIds)) {
                 HashMap<String, List<String>> map = deviceGroupByGateWayId(deviceIds);
                 if (!map.isEmpty()) {
-                    String projectOid = event.getProjectOid();
                     // 遍历发送
                     map.keySet().stream().forEach(gateWayId -> {
                         List<String> _deviceIds = map.get(gateWayId);
@@ -144,8 +103,10 @@ public class DevicePermissEventService {
                                 int index = Math.min(_deviceIds.size(), IotIdentifierConfig.maxNoticeSize);
                                 List<String> subDeviceList = _deviceIds.subList(0, index);
                                 _deviceIds = _deviceIds.subList(index, _deviceIds.size());
-
+                                // 下发设备可用的用户
                                 sendDeviceAboutUsers(gateWayId, subDeviceList, projectOid);
+
+                                // 下发设备关联的用户信息
                                 sendDeviceAboutUserInfo(gateWayId, subDeviceList, projectOid);
                                 if (!_deviceIds.isEmpty()) {
                                     TimeUnit.SECONDS.sleep(10);
@@ -159,6 +120,34 @@ public class DevicePermissEventService {
             }
         });
     }
+    //-----------------------------设备权限下发 end---------------------
+
+    /**
+     * 通知用户关联信息发送变化
+     *
+     * @param userId
+     * @param projectOid
+     */
+    public void sendUserInfoChangeEvent(String userId, String projectOid, String from) {
+        UserInfoChangeSyncEvent event = new UserInfoChangeSyncEvent(this, List.of(userId), projectOid, from);
+        applicationContext.publishEvent(event);
+    }
+
+    public void sendUserInfoChangeEvent(String userId, String projectOid, Map<String, Object> map) {
+        UserInfoChangeSyncEvent event = new UserInfoChangeSyncEvent(this, List.of(userId), projectOid, map);
+        applicationContext.publishEvent(event);
+    }
+
+    /**
+     * 通知用户关联信息发送变化
+     *
+     * @param userIds
+     * @param projectOid
+     */
+    public void sendUserInfoChangeEvent(List<String> userIds, String projectOid, String from) {
+        UserInfoChangeSyncEvent event = new UserInfoChangeSyncEvent(this, userIds, projectOid, from);
+        applicationContext.publishEvent(event);
+    }
 
     /**
      * 用户信息发生变化 (人脸、电话、卡片等信息)

+ 10 - 65
FullCardServer/src/main/java/com/zhongshu/card/server/core/service/devices/permiss/DevicePermissIotService.java

@@ -1,9 +1,7 @@
 package com.zhongshu.card.server.core.service.devices.permiss;
 
-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;
 import com.github.microservice.models.devicePermiss.DeviceUsersInfo;
 import com.github.microservice.models.devicePermiss.GateWayPermissModel;
@@ -14,10 +12,8 @@ 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;
 import com.zhongshu.card.server.core.dataConfig.CardSystemDefault;
 import com.zhongshu.card.server.core.domain.devices.permiss.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;
@@ -49,18 +45,12 @@ import java.util.stream.Collectors;
 @Service
 public class DevicePermissIotService {
 
-    @Autowired
-    private OrganizationDao organizationDao;
-
     @Autowired
     private OrgUserFaceService orgUserFaceService;
 
     @Autowired
     private CardInfoServiceImpl cardInfoService;
 
-    @Autowired
-    private DevicePermissService devicePermissService;
-
     @Autowired
     private DevicePermissDao devicePermissDao;
 
@@ -72,6 +62,8 @@ public class DevicePermissIotService {
 
     //线程池
     private ExecutorService executorService = Executors.newFixedThreadPool(SystemUtil.getCpuCoreCount() * 2);
+    @Autowired
+    private UserCanUseDeviceService userCanUseDeviceService;
 
     @Autowired
     private void init(ApplicationContext applicationContext) {
@@ -147,16 +139,10 @@ public class DevicePermissIotService {
     }
 
     /**
-     * 查询设备的权限数据
-     *
+     * 组装设备 关联的用户下发数据 {deviceId: [userIds]}
      * @param query
      * @return
      */
-    public ResultContent queryDevicePermiss(DevicePerQuery query) {
-        GateWayPermissModel permissModel = queryDevicePermissInfo(query);
-        return ResultContent.buildSuccess(JSONUtil.toJsonStr(permissModel));
-    }
-
     public GateWayPermissModel queryDevicePermissInfo(DevicePerQuery query) {
         GateWayPermissModel permissModel = getDeviceAboutUsers(query.getDeviceIds());
         permissModel.setSuccess();
@@ -164,17 +150,6 @@ public class DevicePermissIotService {
         return permissModel;
     }
 
-    /**
-     * 查询设备关联的用户信息(增加或修改)
-     *
-     * @param query
-     * @return
-     */
-    public ResultContent getDeviceAboutUserInfos(DevicePerQuery query) {
-        DeviceUsersInfo permissModel = queryDeviceAboutUsers(query);
-        return ResultContent.buildSuccess(JSONUtil.toJsonStr(permissModel));
-    }
-
     /**
      * @param query
      * @return
@@ -186,30 +161,6 @@ public class DevicePermissIotService {
         return permissModel;
     }
 
-    /**
-     * 查询项目下的用户权限信息 (根据userIds查询)
-     *
-     * @param query
-     * @return
-     */
-    public ResultContent getDeviceAboutUserInfos(UserPerQuery query) {
-        DeviceUsersInfo permissModel = new DeviceUsersInfo();
-        String projectOid = "";
-        String projectCode = query.getProjectCode();
-        if (StringUtils.isNotEmpty(projectCode)) {
-            Organization organization = organizationDao.findTopByCode(projectCode);
-            if (ObjectUtils.isNotEmpty(organization)) {
-                projectOid = organization.getOid();
-            }
-        }
-        if (StringUtils.isNotEmpty(projectOid) && ObjectUtils.isNotEmpty(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)) {
@@ -289,19 +240,13 @@ public class DevicePermissIotService {
     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);
+            for (String deviceId : deviceIds) {
+                DeviceAboutPermiss aboutPermiss = new DeviceAboutPermiss();
+                aboutPermiss.setMark(2);
+                aboutPermiss.setDeviceId(deviceId);
+                List<String> _userIds = userCanUseDeviceService.getDeviceUserIds(deviceId);
+                aboutPermiss.setUserIds(_userIds);
+                gateWayPermissModel.addDevice(aboutPermiss);
             }
         }
         return gateWayPermissModel;

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

@@ -1,6 +1,11 @@
 package com.zhongshu.card.server.core.service.devices.permiss;
 
 import com.google.common.collect.Lists;
+import com.zhongshu.card.client.type.DataState;
+import com.zhongshu.card.server.core.dao.devices.DeviceInfoDao;
+import com.zhongshu.card.server.core.dao.devices.DevicePermissDao;
+import com.zhongshu.card.server.core.domain.devices.DeviceInfo;
+import com.zhongshu.card.server.core.domain.devices.permiss.DevicePermiss;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang3.ObjectUtils;
 import org.apache.commons.lang3.StringUtils;
@@ -9,6 +14,7 @@ import org.springframework.stereotype.Service;
 
 import java.util.ArrayList;
 import java.util.List;
+import java.util.stream.Collectors;
 
 /**
  *
@@ -22,6 +28,12 @@ public class UserCanUseDeviceService {
     @Autowired
     private DevicePermissService devicePermissService;
 
+    @Autowired
+    private DeviceInfoDao deviceInfoDao;
+
+    @Autowired
+    private DevicePermissDao devicePermissDao;
+
     public List<String> getUserDeviceIds(String projectOid, String userId) {
         if (StringUtils.isNotEmpty(projectOid) && StringUtils.isNotEmpty(userId)) {
             return getUserDeviceIds(projectOid, List.of(userId));
@@ -49,4 +61,32 @@ public class UserCanUseDeviceService {
         return deviceIds;
     }
 
+    /**
+     * 得到设备关联的 所有用户userIds (全量)
+     * @param deviceId
+     * @return
+     */
+    public List<String> getDeviceUserIds(String deviceId) {
+        if (StringUtils.isEmpty(deviceId)) {
+            return Lists.newArrayList();
+        }
+        DeviceInfo deviceInfo = deviceInfoDao.findTopByDeviceId(deviceId);
+        if (ObjectUtils.isEmpty(deviceInfo)) {
+            return Lists.newArrayList();
+        }
+        List<String> userIds = new ArrayList<>();
+
+        String projectOid = deviceInfo.getProjectOid();
+        //step1: 在 “设备权限” 里直接配置的数据
+        List<DevicePermiss> permisses = devicePermissDao.findByDeviceIdInAndDataState(List.of(deviceId), DataState.Enable);
+        if (ObjectUtils.isNotEmpty(permisses)) {
+            List<String> _userIds = permisses.stream().map(DevicePermiss::getUserId).collect(Collectors.toList());
+            userIds.addAll(_userIds);
+        }
+
+        //todo 其他权限
+
+        return userIds;
+    }
+
 }

+ 0 - 2
FullCardServer/src/main/java/com/zhongshu/card/server/core/service/projectAbout/OrgUserFaceService.java

@@ -204,8 +204,6 @@ public class OrgUserFaceService extends SuperService {
             return;
         }
         devicePermissEventService.sendUserInfoChangeEvent(List.of(orgUserFace.getUserId()), orgUserFace.getProjectOid(), "saveFace");
-        if (orgUserFace.getAuditState() == AuditState.Audited) {
-        }
     }
 
     /**