TRX před 1 rokem
rodič
revize
38799c0117

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

@@ -61,13 +61,6 @@ public class DevicePermissController {
         return this.devicePermissService.getDetail(param.getId());
     }
 
-    @ResourceAuth(value = "user", type = AuthType.User)
-    @Operation(summary = "删除设备权限", description = "删除设备权限")
-    @RequestMapping(value = "deleteInfo", method = {RequestMethod.POST})
-    public ResultContent deleteInfo(@RequestBody IDParam param) {
-        return this.devicePermissService.deleteInfo(param.getId());
-    }
-
     @ResourceAuth(value = "user", type = AuthType.User)
     @Operation(summary = "启用设备权限", description = "启用设备权限")
     @RequestMapping(value = "enablePermiss", method = {RequestMethod.POST})
@@ -82,6 +75,15 @@ public class DevicePermissController {
         return this.devicePermissService.changeState(param.getId(), DataState.Disable);
     }
 
+    @ResourceAuth(value = "user", type = AuthType.User)
+    @Operation(summary = "删除设备权限", description = "删除设备权限")
+    @RequestMapping(value = "deleteInfo", method = {RequestMethod.POST})
+    public ResultContent deleteInfo(@RequestBody IDParam param) {
+        IDsParam iDsParam = new IDsParam();
+        iDsParam.setIds(List.of(param.getId()));
+        return this.devicePermissService.deleteByIds(iDsParam);
+    }
+
     @ResourceAuth(value = "user", type = AuthType.User)
     @Operation(summary = "删除设备权限(多个)", description = "删除设备权限(多个)")
     @RequestMapping(value = "deleteByIds", method = {RequestMethod.POST})

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

@@ -15,6 +15,7 @@ import com.zhongshu.card.server.core.dao.org.OrganizationDao;
 import com.zhongshu.card.server.core.dao.school.AreaDao;
 import com.zhongshu.card.server.core.dao.devices.DeviceInfoDao;
 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.school.Area;
 import com.zhongshu.card.server.core.service.base.CommonService;
@@ -23,6 +24,7 @@ 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.school.AreaServiceImpl;
 import com.zhongshu.card.server.core.util.BeanUtils;
+import com.zhongshu.card.server.core.util.CommonUtil;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang3.ObjectUtils;
 import org.apache.commons.lang3.StringUtils;
@@ -34,6 +36,7 @@ import org.springframework.util.Assert;
 
 import java.util.ArrayList;
 import java.util.Collections;
+import java.util.HashMap;
 import java.util.List;
 import java.util.stream.Collectors;
 
@@ -98,6 +101,15 @@ public class DeviceInfoServiceImpl extends SuperService implements DeviceInfoSer
             }
         }
         deviceInfoDao.save(deviceInfo);
+
+        // 修改其他的关联设备信息
+        HashMap<String, Object> where = new HashMap<>();
+        where.put("deviceId", param.getDeviceId());
+
+        HashMap<String, Object> bindMap = new HashMap<>();
+        bindMap.put("gateWayId", deviceInfo.getGateWayId());
+        commonService.updateData(where, bindMap, DevicePermiss.class.getSimpleName());
+
         return ResultContent.buildSuccess();
     }
 

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

@@ -4,11 +4,13 @@ import cn.hutool.json.JSONObject;
 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.devicePermiss.DeviceAboutPermiss;
 import com.github.microservice.models.devicePermiss.DeviceUsersInfo;
 import com.github.microservice.models.devicePermiss.GateWayPermissModel;
 import com.github.microservice.models.iot.IotSendParam;
 import com.github.microservice.net.ResultContent;
 import com.github.microservice.types.FunctionType;
+import com.google.common.collect.Lists;
 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;
@@ -18,6 +20,7 @@ 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;
@@ -72,8 +75,7 @@ public class DevicePermissEventService {
      * @param projectOid
      */
     public void sendUserInfoChangeEvent(String userId, String projectOid) {
-        UserInfoChangeSyncEvent event = new UserInfoChangeSyncEvent(this,
-                List.of(userId), projectOid);
+        UserInfoChangeSyncEvent event = new UserInfoChangeSyncEvent(this, List.of(userId), projectOid);
         applicationContext.publishEvent(event);
     }
 
@@ -84,8 +86,7 @@ public class DevicePermissEventService {
      * @param projectOid
      */
     public void sendUserInfoChangeEvent(List<String> userIds, String projectOid) {
-        UserInfoChangeSyncEvent event = new UserInfoChangeSyncEvent(this,
-                userIds, projectOid);
+        UserInfoChangeSyncEvent event = new UserInfoChangeSyncEvent(this, userIds, projectOid);
         applicationContext.publishEvent(event);
     }
 
@@ -96,8 +97,7 @@ public class DevicePermissEventService {
      * @param projectOid
      */
     public void sendDeviceChangeEvent(List<String> deviceIds, String projectOid) {
-        DevicePermissChangeEvent event = new DevicePermissChangeEvent(this,
-                deviceIds, projectOid);
+        DevicePermissChangeEvent event = new DevicePermissChangeEvent(this, deviceIds, projectOid);
         applicationContext.publishEvent(event);
     }
 
@@ -122,24 +122,8 @@ public class DevicePermissEventService {
                                 List<String> subList = _deviceIds.subList(0, index);
                                 _deviceIds = _deviceIds.subList(index, _deviceIds.size());
 
-                                sendDeviceAboutUserInfo(gateWayId, subList, projectOid);
                                 sendDeviceAboutUsers(gateWayId, subList, projectOid);
-
-//                                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());
-//                                }
+                                sendDeviceAboutUserInfo(gateWayId, subList, projectOid);
                                 if (!_deviceIds.isEmpty()) {
                                     TimeUnit.SECONDS.sleep(10);
                                 }
@@ -193,6 +177,36 @@ public class DevicePermissEventService {
         }
     }
 
+    /**
+     * 清除所有所有数据
+     *
+     * @param deviceIds
+     * @param projectOid
+     */
+    public void clearDevicesAllBindUser(List<String> deviceIds, String projectOid) {
+        if (ObjectUtils.isNotEmpty(deviceIds) && StringUtils.isNotEmpty(projectOid)) {
+            executorService.execute(() -> {
+                HashMap<String, List<String>> map = deviceGroupByGateWayId(deviceIds);
+                map.keySet().stream().forEach(gateWayId -> {
+                    GateWayPermissModel gateWayPermissModel = new GateWayPermissModel();
+                    gateWayPermissModel.setGateWayId(gateWayId);
+                    List<String> _deviceIds = map.get(gateWayId);
+
+                    List<DeviceAboutPermiss> permisses = new ArrayList<DeviceAboutPermiss>();
+                    for (String deviceId : _deviceIds) {
+                        DeviceAboutPermiss permiss = new DeviceAboutPermiss();
+                        permiss.setDeviceId(deviceId);
+                        permiss.setMark(2);
+                        permiss.setUserIds(Lists.newArrayList());
+                        permisses.add(permiss);
+                    }
+                    gateWayPermissModel.setDevices(permisses);
+                    requestDeviceBindData(gateWayPermissModel, projectOid);
+                });
+            });
+        }
+    }
+
     /**
      * 发送设备关联的用户数据
      *
@@ -205,7 +219,17 @@ public class DevicePermissEventService {
         query.setDeviceIds(deviceIds);
         query.setGateWayId(gateWayId);
         GateWayPermissModel gateWayPermissModel = devicePermissIotService.queryDevicePermissInfo(query);
+        requestDeviceBindData(gateWayPermissModel, projectOid);
+    }
 
+    /**
+     * 请求下发设备关联的用户
+     *
+     * @param gateWayPermissModel
+     * @param projectOid
+     */
+    public void requestDeviceBindData(GateWayPermissModel gateWayPermissModel, String projectOid) {
+        String gateWayId = gateWayPermissModel.getGateWayId();
         IotSendParam param = new IotSendParam();
         param.setGateWayId(gateWayId);
         param.setIdentifier(IotIdentifierConfig.queryDeviceBindUsers);
@@ -232,7 +256,17 @@ public class DevicePermissEventService {
         query.setDeviceIds(deviceIds);
         query.setGateWayId(gateWayId);
         DeviceUsersInfo deviceUsersInfo = devicePermissIotService.queryDeviceAboutUsers(query);
+        requestDevicesUsersData(deviceUsersInfo, projectOid);
+    }
 
+    /**
+     * 请求下发用户信息发生变化
+     *
+     * @param deviceUsersInfo
+     * @param projectOid
+     */
+    public void requestDevicesUsersData(DeviceUsersInfo deviceUsersInfo, String projectOid) {
+        String gateWayId = deviceUsersInfo.getGateWayId();
         IotSendParam param = new IotSendParam();
         param.setGateWayId(gateWayId);
         param.setIdentifier(IotIdentifierConfig.queryDeviceUsersInfo);

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

@@ -235,19 +235,6 @@ public class DevicePermissService extends SuperService {
         return ResultContent.buildSuccess(toModel(entity));
     }
 
-    public ResultContent deleteInfo(String id) {
-        DevicePermiss entity = devicePermissDao.findTopById(id);
-        if (ObjectUtils.isEmpty(entity)) {
-            return ResultContent.buildFail(String.format(ResultMessage.DATA_NOT_EXIST, id));
-        }
-        devicePermissDao.delete(entity);
-        // 发送通知
-        DevicePermissChangeEvent event = new DevicePermissChangeEvent(this,
-                List.of(entity.getDeviceId()), entity.getProjectOid());
-        applicationContext.publishEvent(event);
-        return ResultContent.buildSuccess();
-    }
-
     /**
      * 改变状态
      *
@@ -262,11 +249,13 @@ public class DevicePermissService extends SuperService {
         }
         entity.setDataState(dataState);
         devicePermissDao.save(entity);
-
-        // 通知设备权限发生了变化
-        DevicePermissChangeEvent event = new DevicePermissChangeEvent(this,
-                List.of(entity.getDeviceId()), entity.getProjectOid());
-        applicationContext.publishEvent(event);
+        if (dataState == DataState.Disable) {
+            // 移除权限
+            changeDeviceUser(List.of(id), 0);
+        } else {
+            // 启用
+            changeDeviceUser(List.of(id), 1);
+        }
         return ResultContent.buildSuccess();
     }
 
@@ -278,15 +267,38 @@ public class DevicePermissService extends SuperService {
      */
     public ResultContent deleteByIds(IDsParam param) {
         if (ObjectUtils.isNotEmpty(param.getIds())) {
-            List<DevicePermiss> list = devicePermissDao.findByIdIn(param.getIds());
+            // 1: 移除权限
+            changeDeviceUser(param.getIds(), 0);
+            // 2:删除数据
             devicePermissDao.deleteAllById(param.getIds());
-            if (ObjectUtils.isNotEmpty(list)) {
-                List<String> deviceIds = list.stream().map(it -> it.getDeviceId()).collect(Collectors.toUnmodifiableList());
-                // 通知权限发生变化
-                DevicePermissChangeEvent event = new DevicePermissChangeEvent(this,
-                        deviceIds, list.get(0).getProjectOid());
-                applicationContext.publishEvent(event);
-            }
+        }
+        return ResultContent.buildSuccess();
+    }
+
+    /**
+     * 移除权限
+     *
+     * @param ids
+     * @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));
+            map.forEach((gateWayId, tempList) -> {
+                GateWayPermissModel gateWayPermissModel = new GateWayPermissModel();
+                gateWayPermissModel.setGateWayId(gateWayId);
+
+                List<DeviceAboutPermiss> devices = tempList.stream().map(it -> {
+                    DeviceAboutPermiss permiss = new DeviceAboutPermiss();
+                    permiss.setDeviceId(it.getDeviceId());
+                    permiss.addUser(it.getUserId());
+                    permiss.setMark(mark);
+                    return permiss;
+                }).collect(Collectors.toUnmodifiableList());
+                gateWayPermissModel.setDevices(devices);
+                devicePermissEventService.requestDeviceBindData(gateWayPermissModel, tempList.get(0).getProjectOid());
+            });
         }
         return ResultContent.buildSuccess();
     }
@@ -323,6 +335,7 @@ public class DevicePermissService extends SuperService {
         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);