Ver Fonte

更新!

TRX há 1 ano atrás
pai
commit
c7924cbb9b

+ 7 - 0
FullCardServer/src/main/java/com/zhongshu/card/server/core/controller/devices/DevicePermissController.java

@@ -75,6 +75,13 @@ public class DevicePermissController {
         return this.devicePermissService.changeState(param.getId(), DataState.Enable);
     }
 
+    @ResourceAuth(value = "user", type = AuthType.User)
+    @Operation(summary = "禁用设备权限", description = "禁用设备权限")
+    @RequestMapping(value = "disablePermiss", method = {RequestMethod.POST})
+    public ResultContent disablePermiss(@RequestBody IDParam param) {
+        return this.devicePermissService.changeState(param.getId(), DataState.Disable);
+    }
+
     @ResourceAuth(value = "user", type = AuthType.User)
     @Operation(summary = "删除设备权限(多个)", description = "删除设备权限(多个)")
     @RequestMapping(value = "deleteByIds", method = {RequestMethod.POST})

+ 0 - 20
FullCardServer/src/main/java/com/zhongshu/card/server/core/controller/org/TestController.java

@@ -1,12 +1,7 @@
 package com.zhongshu.card.server.core.controller.org;
 
 import com.github.microservice.net.ResultContent;
-import com.zhongshu.card.server.core.dao.school.CardInfoDao;
-import com.zhongshu.card.server.core.domain.school.CardInfo;
-import com.zhongshu.card.server.core.event.DevicePermissChangeEvent;
 import com.zhongshu.card.server.core.service.TestService;
-import com.zhongshu.card.server.core.service.devices.DevicePermissIotService;
-import com.zhongshu.card.server.core.service.openAPI.OpenAPIRegisterService;
 import io.swagger.v3.oas.annotations.Operation;
 import io.swagger.v3.oas.annotations.tags.Tag;
 import lombok.extern.slf4j.Slf4j;
@@ -15,8 +10,6 @@ import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RequestMethod;
 import org.springframework.web.bind.annotation.RestController;
 
-import java.util.List;
-
 @Slf4j
 @RestController
 @RequestMapping("test")
@@ -26,25 +19,12 @@ public class TestController {
     @Autowired
     private TestService testService;
 
-    @Autowired
-    OpenAPIRegisterService openAPIRegisterService;
-
-    @Autowired
-    CardInfoDao cardInfoDao;
-
-    @Autowired
-    DevicePermissIotService devicePermissIotService;
-
     @Operation(summary = "测试接口", description = "测试接口")
     @RequestMapping(value = "text", method = {RequestMethod.GET})
     public ResultContent text() {
 
 //        openAPIRegisterService.initRegisterPAIS();
 
-        DevicePermissChangeEvent event = new DevicePermissChangeEvent(this,
-                List.of("0149843108"));
-        devicePermissIotService.devicePermissChange(event);
-
         return this.testService.text();
     }
 

+ 3 - 0
FullCardServer/src/main/java/com/zhongshu/card/server/core/domain/devices/DevicePermiss.java

@@ -49,6 +49,9 @@ public class DevicePermiss extends SuperMain {
     @Schema(description = "设备类型,如 消费机 门禁机")
     private DeviceType deviceType;
 
+    @Schema(description = "网关号")
+    private String gateWayId;
+
     @Schema(description = "区域信息")
     @DBRef(lazy = true)
     private Area area;

+ 6 - 1
FullCardServer/src/main/java/com/zhongshu/card/server/core/event/DevicePermissChangeEvent.java

@@ -1,5 +1,6 @@
 package com.zhongshu.card.server.core.event;
 
+import com.zhongshu.card.client.type.DataOperationType;
 import lombok.Getter;
 import org.springframework.context.ApplicationEvent;
 
@@ -15,8 +16,12 @@ public class DevicePermissChangeEvent extends ApplicationEvent {
     @Getter
     private List<String> deviceIds;
 
-    public DevicePermissChangeEvent(Object source, List<String> deviceIds) {
+    @Getter
+    private DataOperationType dataOperationType;
+
+    public DevicePermissChangeEvent(Object source, List<String> deviceIds, DataOperationType dataOperationType) {
         super(source);
         this.deviceIds = deviceIds;
+        this.dataOperationType = dataOperationType;
     }
 }

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

@@ -0,0 +1,123 @@
+package com.zhongshu.card.server.core.service.devices;
+
+import cn.hutool.json.JSONObject;
+import com.github.microservice.core.util.os.SystemUtil;
+import com.github.microservice.dataConfig.IotIdentifierConfig;
+import com.github.microservice.models.iot.IotSendParam;
+import com.github.microservice.net.ResultContent;
+import com.github.microservice.types.FunctionType;
+import com.zhongshu.card.server.core.dao.devices.DeviceInfoDao;
+import com.zhongshu.card.server.core.domain.devices.DeviceInfo;
+import com.zhongshu.card.server.core.event.DevicePermissChangeEvent;
+import com.zhongshu.card.server.core.service.openAPI.OpenApiRequestService;
+import lombok.SneakyThrows;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.ObjectUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.ApplicationContext;
+import org.springframework.context.event.EventListener;
+import org.springframework.stereotype.Service;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
+import java.util.concurrent.TimeUnit;
+
+/**
+ * 设备 用户 权限发生变化监听
+ *
+ * @author TRX
+ * @date 2024/10/11
+ */
+@Slf4j
+@Service
+public class DevicePermissEventService {
+
+    @Autowired
+    private DeviceInfoDao deviceInfoDao;
+
+    @Autowired
+    private OpenApiRequestService openApiRequestService;
+
+    //线程池
+    private ExecutorService executorService = Executors.newFixedThreadPool(
+            SystemUtil.getCpuCoreCount() * 2);
+
+    @Autowired
+    private void init(ApplicationContext applicationContext) {
+        Runtime.getRuntime().addShutdownHook(new Thread(() -> {
+            executorService.shutdownNow();
+        }));
+    }
+
+    @EventListener(classes = DevicePermissChangeEvent.class)
+    @SneakyThrows
+    public void devicePermissChange(DevicePermissChangeEvent event) {
+        executorService.execute(() -> {
+            log.info("设备权限发生变化...");
+            // 通知物联网 设备权限发生变化
+            List<String> deviceIds = event.getDeviceIds();
+            if (ObjectUtils.isNotEmpty(deviceIds)) {
+                List<DeviceInfo> deviceInfos = deviceInfoDao.findByDeviceIdIn(deviceIds);
+                if (ObjectUtils.isNotEmpty(deviceInfos)) {
+                    // 按网关分组
+                    HashMap<String, List<String>> map = new HashMap<>();
+                    deviceInfos.stream().forEach(it -> {
+                        String deviceId = it.getDeviceId();
+                        String gateWayId = it.getGateWayId();
+                        List<String> arr = List.of(gateWayId.split(","));
+                        if (ObjectUtils.isNotEmpty(arr)) {
+                            arr.stream().forEach(_gateWayId -> {
+                                List<String> _list = map.get(_gateWayId);
+                                if (ObjectUtils.isEmpty(_list)) {
+                                    _list = new ArrayList<>();
+                                }
+                                _list.add(deviceId);
+                                map.put(_gateWayId, _list);
+                            });
+                        }
+                    });
+
+                    // 遍历发送
+                    map.keySet().stream().forEach(gateWayId -> {
+                        List<String> _deviceIds = map.get(gateWayId);
+                        try {
+                            while (_deviceIds.size() > 0) {
+                                // 统计网关管理的所有设备
+                                int index = Math.min(_deviceIds.size(), IotIdentifierConfig.maxNoticeSize);
+                                List<String> subList = _deviceIds.subList(0, index);
+                                _deviceIds = _deviceIds.subList(index, _deviceIds.size());
+
+                                DeviceInfo deviceInfo = deviceInfoDao.findTopByDeviceId(subList.get(0));
+
+                                IotSendParam param = new IotSendParam();
+                                param.setGateWayId(gateWayId);
+                                param.setIdentifier(IotIdentifierConfig.permissionNotice);
+
+                                // 组装消息内容
+                                JSONObject jsonObject = new JSONObject();
+                                jsonObject.set("deviceIds", subList);
+                                param.setData(jsonObject);
+                                ResultContent resultContent = openApiRequestService.sendIotMessage(
+                                        param, deviceInfo.getProjectOid());
+                                if (resultContent.isSuccess()) {
+
+                                } else {
+                                    log.error("网关设备权限通知失败 {} {}", gateWayId, resultContent.getMsg());
+                                }
+                                if (!_deviceIds.isEmpty()) {
+                                    TimeUnit.SECONDS.sleep(10);
+                                }
+                            }
+                        } catch (Exception e) {
+                            throw new RuntimeException(e);
+                        }
+                    });
+                }
+            }
+        });
+    }
+
+}

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

@@ -1,47 +1,29 @@
 package com.zhongshu.card.server.core.service.devices;
 
-import cn.hutool.json.JSONObject;
 import cn.hutool.json.JSONUtil;
-import com.github.microservice.core.util.os.SystemUtil;
-import com.github.microservice.dataConfig.IotIdentifierConfig;
 import com.github.microservice.models.device.DevicePerQuery;
 import com.github.microservice.models.device.UserPerQuery;
-import com.github.microservice.models.devicePermiss.*;
-import com.github.microservice.models.iot.IotSendParam;
+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.types.FunctionType;
 import com.zhongshu.card.client.model.school.CardInfoModel;
 import com.zhongshu.card.client.type.school.CardState;
-import com.zhongshu.card.server.core.dao.devices.DeviceInfoDao;
-import com.zhongshu.card.server.core.dao.devices.DevicePermissDao;
 import com.zhongshu.card.server.core.dao.org.OrganizationDao;
-import com.zhongshu.card.server.core.dao.org.OrganizationUserDao;
-import com.zhongshu.card.server.core.domain.devices.DeviceInfo;
 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.event.DevicePermissChangeEvent;
-import com.zhongshu.card.server.core.service.openAPI.OpenApiRequestService;
 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.SneakyThrows;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang3.ObjectUtils;
 import org.apache.commons.lang3.StringUtils;
-import org.apache.kafka.common.protocol.types.Field;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.context.ApplicationContext;
-import org.springframework.context.event.EventListener;
 import org.springframework.stereotype.Service;
 
 import java.util.ArrayList;
-import java.util.HashMap;
 import java.util.List;
-import java.util.concurrent.ExecutorService;
-import java.util.concurrent.Executors;
-import java.util.concurrent.TimeUnit;
 import java.util.stream.Collectors;
 
 /**
@@ -54,47 +36,18 @@ import java.util.stream.Collectors;
 @Service
 public class DevicePermissIotService {
 
-    @Autowired
-    private DevicePermissDao devicePermissDao;
-
-    @Autowired
-    private DeviceInfoServiceImpl deviceInfoService;
-
-    @Autowired
-    private UserAccountServiceImpl userAccountService;
-
-    @Autowired
-    private DeviceInfoDao deviceInfoDao;
-
     @Autowired
     private OrganizationDao organizationDao;
 
-    @Autowired
-    private OrganizationUserDao organizationUserDao;
-
     @Autowired
     private OrgUserFaceService orgUserFaceService;
 
     @Autowired
     private CardInfoServiceImpl cardInfoService;
 
-    @Autowired
-    private OpenApiRequestService openApiRequestService;
-
     @Autowired
     private DevicePermissService devicePermissService;
 
-    //线程池
-    private ExecutorService executorService = Executors.newFixedThreadPool(
-            SystemUtil.getCpuCoreCount() * 2);
-
-    @Autowired
-    private void init(ApplicationContext applicationContext) {
-        Runtime.getRuntime().addShutdownHook(new Thread(() -> {
-            executorService.shutdownNow();
-        }));
-    }
-
     /**
      * 查询设备的权限数据
      *
@@ -102,17 +55,27 @@ public class DevicePermissIotService {
      * @return
      */
     public ResultContent queryDevicePermiss(DevicePerQuery query) {
+        GateWayPermissModel permissModel = queryDevicePermissInfo(query);
+        return ResultContent.buildSuccess(JSONUtil.toJsonStr(permissModel));
+    }
+
+    public GateWayPermissModel queryDevicePermissInfo(DevicePerQuery query) {
         GateWayPermissModel permissModel = devicePermissService.getDeviceAboutUsers(query.getDeviceIds());
         permissModel.setSuccess();
         permissModel.setGateWayId(query.getGateWayId());
-        return ResultContent.buildSuccess(JSONUtil.toJsonStr(permissModel));
+        return permissModel;
     }
 
     public ResultContent getDeviceAboutUserInfos(DevicePerQuery query) {
+        DeviceUsersInfo permissModel = queryDeviceAboutUsers(query);
+        return ResultContent.buildSuccess(JSONUtil.toJsonStr(permissModel));
+    }
+
+    public DeviceUsersInfo queryDeviceAboutUsers(DevicePerQuery query) {
         DeviceUsersInfo permissModel = devicePermissService.getDeviceAboutUserInfos(query.getDeviceIds());
         permissModel.setSuccess();
         permissModel.setGateWayId(query.getGateWayId());
-        return ResultContent.buildSuccess(JSONUtil.toJsonStr(permissModel));
+        return permissModel;
     }
 
     /**
@@ -139,74 +102,6 @@ public class DevicePermissIotService {
         return ResultContent.buildSuccess(JSONUtil.toJsonStr(permissModel));
     }
 
-    @EventListener(classes = DevicePermissChangeEvent.class)
-    @SneakyThrows
-    public void devicePermissChange(DevicePermissChangeEvent event) {
-        executorService.execute(() -> {
-            log.info("设备权限发生变化...");
-            // 通知物联网 设备权限发生变化
-            List<String> deviceIds = event.getDeviceIds();
-            if (ObjectUtils.isNotEmpty(deviceIds)) {
-                List<DeviceInfo> deviceInfos = deviceInfoDao.findByDeviceIdIn(deviceIds);
-                if (ObjectUtils.isNotEmpty(deviceInfos)) {
-                    // 按网关分组
-                    HashMap<String, List<String>> map = new HashMap<>();
-                    deviceInfos.stream().forEach(it -> {
-                        String deviceId = it.getDeviceId();
-                        String gateWayId = it.getGateWayId();
-                        List<String> arr = List.of(gateWayId.split(","));
-                        if (ObjectUtils.isNotEmpty(arr)) {
-                            arr.stream().forEach(_gateWayId -> {
-                                List<String> _list = map.get(_gateWayId);
-                                if (ObjectUtils.isEmpty(_list)) {
-                                    _list = new ArrayList<>();
-                                }
-                                _list.add(deviceId);
-                                map.put(_gateWayId, _list);
-                            });
-                        }
-                    });
-
-                    // 遍历发送
-                    map.keySet().stream().forEach(gateWayId -> {
-                        List<String> _deviceIds = map.get(gateWayId);
-                        try {
-                            while (_deviceIds.size() > 0) {
-                                int index = Math.min(_deviceIds.size(), IotIdentifierConfig.maxNoticeSize);
-                                List<String> subList = _deviceIds.subList(0, index);
-                                _deviceIds = _deviceIds.subList(index, _deviceIds.size());
-
-                                DeviceInfo deviceInfo = deviceInfoDao.findTopByDeviceId(subList.get(0));
-
-                                IotSendParam param = new IotSendParam();
-                                param.setGateWayId(gateWayId);
-                                param.setFunctionType(FunctionType.Server);
-                                param.setIdentifier(IotIdentifierConfig.permissionNotice);
-
-                                // 组装消息内容
-                                JSONObject jsonObject = new JSONObject();
-                                jsonObject.set("deviceIds", subList);
-                                param.setData(jsonObject);
-                                ResultContent resultContent = openApiRequestService.sendIotMessage(
-                                        param, deviceInfo.getProjectOid());
-                                if (resultContent.isSuccess()) {
-
-                                } else {
-                                    log.error("网关设备权限通知失败 {} {}", gateWayId, resultContent.getMsg());
-                                }
-                                if (!_deviceIds.isEmpty()) {
-                                    TimeUnit.SECONDS.sleep(10);
-                                }
-                            }
-                        } catch (Exception e) {
-                            throw new RuntimeException(e);
-                        }
-                    });
-                }
-            }
-        });
-    }
-
     public ProjectUserPermiss toModel(DevicePermiss devicePermiss) {
         ProjectUserPermiss userPermiss = null;
         if (ObjectUtils.isNotEmpty(devicePermiss)) {

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

@@ -134,7 +134,7 @@ public class DevicePermissService extends SuperService {
             }
 
             // 设备权限发生变化
-            DevicePermissChangeEvent event = new DevicePermissChangeEvent(this, param.getDeviceIds());
+            DevicePermissChangeEvent event = new DevicePermissChangeEvent(this, param.getDeviceIds(), DataOperationType.Add);
             applicationContext.publishEvent(event);
         }
         return ResultContent.buildSuccess();
@@ -144,6 +144,7 @@ public class DevicePermissService extends SuperService {
         if (ObjectUtils.isNotEmpty(deviceInfo)) {
             permiss.setDeviceInfo(deviceInfo);
             permiss.setDeviceId(deviceInfo.getDeviceId());
+            permiss.setGateWayId(deviceInfo.getGateWayId());
             permiss.setDeviceName(deviceInfo.getDeviceName());
             permiss.setDeviceType(deviceInfo.getDeviceType());
             permiss.setArea(deviceInfo.getArea());
@@ -235,6 +236,11 @@ public class DevicePermissService extends SuperService {
         }
         entity.setDataState(dataState);
         devicePermissDao.save(entity);
+
+        // 通知设备权限发生了变化
+        DevicePermissChangeEvent event = new DevicePermissChangeEvent(this,
+                List.of(entity.getDeviceId()), DataOperationType.Update);
+        applicationContext.publishEvent(event);
         return ResultContent.buildSuccess();
     }