TRX 1 年間 前
コミット
695869218a

+ 9 - 3
FullCardServer/src/main/java/com/zhongshu/card/server/core/controller/openAPI/ProjectOpenAPIController.java

@@ -29,9 +29,15 @@ public class ProjectOpenAPIController {
     @Autowired
     DevicePermissIotService devicePermissIotService;
 
-    @Operation(summary = "查询设备的权限数据", description = "查询设备的权限数据")
-    @RequestMapping(value = "devicePerQuery", method = {RequestMethod.POST})
-    public ResultContent devicePerQuery(@RequestBody @Valid DevicePerQuery param) {
+    @Operation(summary = "查询设备权限", description = "查询设备权限")
+    @RequestMapping(value = "queryDeviceBindUsers", method = {RequestMethod.POST})
+    public ResultContent queryDeviceBindUsers(@RequestBody @Valid DevicePerQuery param) {
+        return devicePermissIotService.queryDevicePermiss(param);
+    }
+
+    @Operation(summary = "查询设备对应的用户信息", description = "查询设备对应的用户信息")
+    @RequestMapping(value = "queryDeviceUsersInfo", method = {RequestMethod.POST})
+    public ResultContent queryDeviceUsersInfo(@RequestBody @Valid DevicePerQuery param) {
         return devicePermissIotService.queryDevicePermiss(param);
     }
 

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

@@ -21,4 +21,7 @@ public interface DeviceInfoDao extends MongoDao<DeviceInfo>, DeviceInfoDaoExtend
     DeviceInfo findTopById(String id);
 
     DeviceInfo findTopByDeviceIdAndOid(String code, String oid);
+
+    List<DeviceInfo> findByDeviceIdIn(List<String> deviceIds);
+
 }

+ 2 - 0
FullCardServer/src/main/java/com/zhongshu/card/server/core/httpRequest/conf/IotCenterAPIConfig.java

@@ -23,6 +23,8 @@ public class IotCenterAPIConfig {
 
     public static final String openAPISendMessage = "/oitOpenAPI/manager/sendIotMessage";
 
+    public static final String sendIotGateWayMessage = "/oitOpenAPI/manager/sendIotGateWayMessage";
+
     public static final HashMap<String, ApiConfParam> map = new HashMap<>();
 
     static {

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

@@ -1,5 +1,6 @@
 package com.zhongshu.card.server.core.service.devices;
 
+import cn.hutool.json.JSONObject;
 import cn.hutool.json.JSONUtil;
 import com.github.microservice.dataConfig.IotIdentifierConfig;
 import com.github.microservice.models.device.DevicePerQuery;
@@ -8,12 +9,10 @@ import com.github.microservice.models.devicePermiss.GateWayPermissModel;
 import com.github.microservice.models.devicePermiss.GateWayQuery;
 import com.github.microservice.models.devicePermiss.UserPermiss;
 import com.github.microservice.models.iot.IotSendParam;
-import com.github.microservice.models.iot.PermissionChange;
 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.client.utils.DateUtils;
 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;
@@ -23,7 +22,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.UserAccount;
 import com.zhongshu.card.server.core.domain.projectAbout.OrgUserFace;
-import com.zhongshu.card.server.core.domain.projectAbout.ProjectIotInfo;
 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;
@@ -38,7 +36,9 @@ 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.concurrent.TimeUnit;
 import java.util.stream.Collectors;
 
 /**
@@ -126,26 +126,61 @@ public class DevicePermissIotService {
         // 通知物联网 设备权限发生变化
         List<String> deviceIds = event.getDeviceIds();
         if (ObjectUtils.isNotEmpty(deviceIds)) {
-            for (String deviceId : deviceIds) {
-                DeviceInfo deviceInfo = deviceInfoDao.findTopByDeviceId(deviceId);
-                if (ObjectUtils.isEmpty(deviceInfo)) {
-                    continue;
-                }
-                IotSendParam param = new IotSendParam();
-                param.setDeviceId(deviceId);
-                param.setIdentifier(IotIdentifierConfig.permissionNotice);
-                param.setFunctionType(FunctionType.Server);
-
-                PermissionChange change = new PermissionChange();
-                change.setTime(DateUtils.paresTime(System.currentTimeMillis(), DateUtils.FORMAT_LONG));
-                change.setDeviceId(deviceId);
-                param.setData(JSONUtil.parseObj(change));
-                ResultContent resultContent = openApiRequestService.sendIotSendMessage(param, deviceInfo.getProjectOid());
-                if (resultContent.isSuccess()) {
-
-                } else {
-                    log.error("设备权限通知失败 {} {}", deviceId, resultContent.getMsg());
-                }
+            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);
+                    }
+                });
             }
         }
     }

+ 3 - 2
FullCardServer/src/main/java/com/zhongshu/card/server/core/service/openAPI/OpenApiRequestService.java

@@ -9,6 +9,7 @@ import com.github.microservice.core.util.net.apache.MethodType;
 import com.github.microservice.core.util.net.apache.ResponseModel;
 import com.github.microservice.http.APIResponseModel;
 import com.github.microservice.http.ApiConfParam;
+import com.github.microservice.models.iot.IotSendGateWayParam;
 import com.github.microservice.models.iot.IotSendParam;
 import com.github.microservice.net.ResultContent;
 import com.zhongshu.card.server.core.dao.org.OrganizationDao;
@@ -56,7 +57,7 @@ public class OpenApiRequestService extends SuperService {
      * @param projectOid
      * @return
      */
-    public ResultContent sendIotSendMessage(IotSendParam param, String projectOid) {
+    public ResultContent sendIotMessage(IotSendParam param, String projectOid) {
         ApiConfParam apiConfParam = IotCenterAPIConfig.getApiConfParam(IotCenterAPIConfig.openAPISendMessage);
         return sendIotRequest(param, projectOid, apiConfParam.getApiName());
     }
@@ -68,7 +69,7 @@ public class OpenApiRequestService extends SuperService {
      * @param projectOid
      * @return
      */
-    public ResultContent sendIotRequest(IotSendParam param, String projectOid, String apiName) {
+    public ResultContent sendIotRequest(Object param, String projectOid, String apiName) {
         if (StringUtils.isEmpty(projectOid)) {
             return ResultContent.buildFail("projectOid为空");
         }