Browse Source

告警规则同步代码提交

jingyuanchao 1 year ago
parent
commit
95a4fb754e
15 changed files with 253 additions and 22 deletions
  1. 9 4
      soc-api/soc-api-system/src/main/java/com/xunmei/system/api/RemoteHostService.java
  2. 5 0
      soc-api/soc-api-system/src/main/java/com/xunmei/system/api/factory/RemoteHostFallbackFactory.java
  3. 7 0
      soc-modules/soc-modules-host/src/main/java/com/xunmei/host/alarm/mapper/IotAlarmRuleMapper.java
  4. 11 0
      soc-modules/soc-modules-host/src/main/java/com/xunmei/host/alarm/service/IotAlarmRuleExpressService.java
  5. 14 0
      soc-modules/soc-modules-host/src/main/java/com/xunmei/host/alarm/service/IotAlarmRuleService.java
  6. 14 0
      soc-modules/soc-modules-host/src/main/java/com/xunmei/host/alarm/service/IotAlarmRuleSourceService.java
  7. 18 0
      soc-modules/soc-modules-host/src/main/java/com/xunmei/host/alarm/service/impl/IotAlarmRuleExpressServiceImpl.java
  8. 111 0
      soc-modules/soc-modules-host/src/main/java/com/xunmei/host/alarm/service/impl/IotAlarmRuleServiceImpl.java
  9. 20 0
      soc-modules/soc-modules-host/src/main/java/com/xunmei/host/alarm/service/impl/IotAlarmRuleSourceServiceImpl.java
  10. 10 4
      soc-modules/soc-modules-host/src/main/java/com/xunmei/host/north/controller/HostController.java
  11. 1 0
      soc-modules/soc-modules-host/src/main/java/com/xunmei/host/websocket/constant/WebSocketConstants.java
  12. 2 0
      soc-modules/soc-modules-iot/src/main/java/com/xunmei/iot/service/IotAlarmRuleService.java
  13. 9 10
      soc-modules/soc-modules-iot/src/main/java/com/xunmei/iot/service/IotAlarmRuleSourceService.java
  14. 19 1
      soc-modules/soc-modules-iot/src/main/java/com/xunmei/iot/service/impl/IotAlarmRuleServiceImpl.java
  15. 3 3
      soc-modules/soc-modules-iot/src/main/java/com/xunmei/iot/service/impl/IotAlarmRuleSourceServiceImpl.java

+ 9 - 4
soc-api/soc-api-system/src/main/java/com/xunmei/system/api/RemoteHostService.java

@@ -10,10 +10,7 @@ import com.xunmei.system.api.Eto.BreakerControlEto;
 import com.xunmei.system.api.Eto.SubSystemControlEto;
 import com.xunmei.system.api.factory.RemoteHostFallbackFactory;
 import org.springframework.cloud.openfeign.FeignClient;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.*;
 
 @FeignClient(contextId = "remoteHostService", value = ServiceNameConstants.HOST, fallbackFactory = RemoteHostFallbackFactory.class)
 public interface RemoteHostService {
@@ -56,4 +53,12 @@ public interface RemoteHostService {
      */
     @PostMapping("/changeDevice")
     AjaxResult changeDevice(@RequestBody ControlDeviceDto eto);
+
+    /**
+     * 向主机同步告警规则
+     * @param eto
+     * @return
+     */
+    @PostMapping("/syncRule/{id}")
+    AjaxResult syncAlarmRuleToHost(@PathVariable("id") Long id);
 }

+ 5 - 0
soc-api/soc-api-system/src/main/java/com/xunmei/system/api/factory/RemoteHostFallbackFactory.java

@@ -69,6 +69,11 @@ public class RemoteHostFallbackFactory implements FallbackFactory<RemoteHostServ
             public AjaxResult changeDevice(ControlDeviceDto eto) {
                 return null;
             }
+
+            @Override
+            public AjaxResult syncAlarmRuleToHost(Long id) {
+                return null;
+            }
         };
     }
 }

+ 7 - 0
soc-modules/soc-modules-host/src/main/java/com/xunmei/host/alarm/mapper/IotAlarmRuleMapper.java

@@ -0,0 +1,7 @@
+package com.xunmei.host.alarm.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.xunmei.common.core.domain.mediator.domain.IotAlarmRule;
+
+public interface IotAlarmRuleMapper extends BaseMapper<IotAlarmRule> {
+}

+ 11 - 0
soc-modules/soc-modules-host/src/main/java/com/xunmei/host/alarm/service/IotAlarmRuleExpressService.java

@@ -0,0 +1,11 @@
+package com.xunmei.host.alarm.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.xunmei.common.core.domain.mediator.domain.IotAlarmRuleExpress;
+
+import java.util.List;
+
+public interface IotAlarmRuleExpressService extends IService<IotAlarmRuleExpress> {
+
+    List<IotAlarmRuleExpress> selectByRuleId(Long ruleId);
+}

+ 14 - 0
soc-modules/soc-modules-host/src/main/java/com/xunmei/host/alarm/service/IotAlarmRuleService.java

@@ -0,0 +1,14 @@
+package com.xunmei.host.alarm.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.xunmei.common.core.domain.mediator.domain.IotAlarmRule;
+
+/**
+ * @author 高雄
+ * 告警规则服务类
+ */
+public interface IotAlarmRuleService extends IService<IotAlarmRule> {
+
+
+    void syncAlarmRuleToHost(Long ruleId);
+}

+ 14 - 0
soc-modules/soc-modules-host/src/main/java/com/xunmei/host/alarm/service/IotAlarmRuleSourceService.java

@@ -0,0 +1,14 @@
+package com.xunmei.host.alarm.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.xunmei.common.core.domain.mediator.domain.IotAlarmRuleSource;
+
+import java.util.List;
+
+
+public interface IotAlarmRuleSourceService  extends IService<IotAlarmRuleSource> {
+
+
+    List<IotAlarmRuleSource> selectByRuleId(Long ruleId);
+
+}

+ 18 - 0
soc-modules/soc-modules-host/src/main/java/com/xunmei/host/alarm/service/impl/IotAlarmRuleExpressServiceImpl.java

@@ -0,0 +1,18 @@
+package com.xunmei.host.alarm.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.xunmei.common.core.domain.mediator.domain.IotAlarmRuleExpress;
+import com.xunmei.host.alarm.mapper.IotAlarmRuleExpressMapper;
+import com.xunmei.host.alarm.service.IotAlarmRuleExpressService;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+@Service
+public class IotAlarmRuleExpressServiceImpl extends ServiceImpl<IotAlarmRuleExpressMapper, IotAlarmRuleExpress> implements IotAlarmRuleExpressService {
+
+    @Override
+    public List<IotAlarmRuleExpress> selectByRuleId(Long ruleId) {
+        return lambdaQuery().eq(IotAlarmRuleExpress::getRuleId, ruleId).list();
+    }
+}

+ 111 - 0
soc-modules/soc-modules-host/src/main/java/com/xunmei/host/alarm/service/impl/IotAlarmRuleServiceImpl.java

@@ -0,0 +1,111 @@
+package com.xunmei.host.alarm.service.impl;
+
+import com.alibaba.fastjson2.JSON;
+import com.alibaba.fastjson2.JSONObject;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.xunmei.common.core.domain.iot.domain.IotServerInfo;
+import com.xunmei.common.core.domain.mediator.domain.IotAlarmRule;
+import com.xunmei.common.core.domain.mediator.domain.IotAlarmRuleExpress;
+import com.xunmei.common.core.domain.mediator.domain.IotAlarmRuleSource;
+import com.xunmei.host.alarm.mapper.IotAlarmRuleMapper;
+import com.xunmei.host.alarm.service.IotAlarmRuleExpressService;
+import com.xunmei.host.alarm.service.IotAlarmRuleService;
+import com.xunmei.host.alarm.service.IotAlarmRuleSourceService;
+import com.xunmei.host.websocket.constant.WebSocketConstants;
+import com.xunmei.host.websocket.dto.WebsocketExecuteReq;
+import com.xunmei.host.websocket.dto.WebsocketResult;
+import com.xunmei.host.websocket.enums.ProductEnums;
+import com.xunmei.host.websocket.enums.TopicTypeEnums;
+import com.xunmei.host.websocket.service.RouterService;
+import com.xunmei.host.websocket.utils.IotServerUtils;
+import com.xunmei.host.websocket.utils.WebSocketUtils;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+import java.util.List;
+import java.util.Objects;
+import java.util.StringJoiner;
+
+@Service
+public class IotAlarmRuleServiceImpl extends ServiceImpl<IotAlarmRuleMapper, IotAlarmRule> implements IotAlarmRuleService, RouterService {
+    @Resource
+    private IotAlarmRuleSourceService ruleSourceService;
+    @Resource
+    private IotAlarmRuleExpressService ruleExpressService;
+
+    @Override
+    public ProductEnums product() {
+        return ProductEnums.DETECTION_HOST;
+    }
+
+    @Override
+    public String routerKey() {
+
+        StringJoiner result = new StringJoiner(",");
+        //设备基础数据
+        //设备状态数据
+        result.add(WebSocketConstants.ALARM_RULE);
+        return result.toString();
+    }
+
+    @Override
+    public Object execute(WebsocketExecuteReq req) {
+        receiveAndUpdateAlarmRule(req);
+        return null;
+    }
+
+    @Override
+    public void syncAlarmRuleToHost(Long ruleId) {
+        final IotAlarmRule iotAlarmRule = baseMapper.selectById(ruleId);
+        if (Objects.isNull(iotAlarmRule)) {
+            return;
+        }
+        final JSONObject jsb = JSON.parseObject(JSON.toJSONString(iotAlarmRule));
+        final List<IotAlarmRuleSource> ruleSourceList = ruleSourceService.selectByRuleId(ruleId);
+        final List<IotAlarmRuleExpress> ruleExpresses = ruleExpressService.selectByRuleId(ruleId);
+        jsb.put("ruleSourceList", ruleSourceList);
+        jsb.put("ruleExpresses", ruleExpresses);
+
+        final String topic = TopicTypeEnums.formatUrl(TopicTypeEnums.PRODUCT_SERVICE_INVOKE.getUrl(), ProductEnums.DETECTION_HOST.getProductName()[0], ProductEnums.DETECTION_HOST.getProductName()[1]);
+        final WebsocketResult result = IotServerUtils.invokeHostServer(topic, new com.alibaba.fastjson.JSONObject(), WebSocketConstants.ALARM_RULE, jsb);
+
+        WebSocketUtils.sendMessage(iotAlarmRule.getIotCode(), JSON.toJSONString(result));
+
+    }
+
+    private void receiveAndUpdateAlarmRule(WebsocketExecuteReq req) {
+        final Object data = req.getData();
+        final IotServerInfo serverInfo = req.getServerInfo();
+        final JSONObject jsb = JSON.parseObject(data.toString(), JSONObject.class);
+        final IotAlarmRule alarmRule = jsb.toJavaObject(IotAlarmRule.class);
+
+        final IotAlarmRule iotAlarmRule = JSON.parseObject(JSON.toJSONString(jsb), IotAlarmRule.class);
+        iotAlarmRule.setIotCode(serverInfo.getIotCode());
+        iotAlarmRule.setOrgId(serverInfo.getOrgId());
+        iotAlarmRule.setOrgName(serverInfo.getOrgName());
+        iotAlarmRule.setServerName(serverInfo.getIotName());
+        final Object deleted = jsb.get("deleted");
+        iotAlarmRule.setIsdeleted(deleted == null ? null : Integer.parseInt(deleted.toString()));
+        iotAlarmRule.setType("alarm");
+        saveOrUpdate(alarmRule);
+
+        final Object rs = jsb.get("ruleSourceList");
+        final Object re = jsb.get("ruleExpresses");
+        if (rs != null) {
+            final List<JSONObject> list = JSON.parseArray(rs.toString(), JSONObject.class);
+            for (JSONObject j : list) {
+                final IotAlarmRuleSource ruleSource = j.toJavaObject(IotAlarmRuleSource.class);
+                ruleSource.setOrgId(serverInfo.getOrgId());
+                ruleSource.setIotCode(serverInfo.getIotCode());
+                ruleSource.setValue(serverInfo.getIotCode() + "_" + ruleSource.getProductType() + "_" + ruleSource.getDeviceCode());
+                ruleSource.setValueType(j.get("sourceType") == null ? "" : j.get("sourceType").toString());
+                ruleSourceService.saveOrUpdate(ruleSource);
+            }
+        }
+        if (re != null) {
+            final List<IotAlarmRuleExpress> list = JSON.parseArray(re.toString(), IotAlarmRuleExpress.class);
+            ruleExpressService.saveOrUpdateBatch(list);
+        }
+
+    }
+}

+ 20 - 0
soc-modules/soc-modules-host/src/main/java/com/xunmei/host/alarm/service/impl/IotAlarmRuleSourceServiceImpl.java

@@ -0,0 +1,20 @@
+package com.xunmei.host.alarm.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.xunmei.common.core.domain.mediator.domain.IotAlarmRuleSource;
+import com.xunmei.host.alarm.mapper.IotAlarmRuleSourceMapper;
+import com.xunmei.host.alarm.service.IotAlarmRuleSourceService;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+@Service
+public class IotAlarmRuleSourceServiceImpl extends ServiceImpl<IotAlarmRuleSourceMapper, IotAlarmRuleSource> implements IotAlarmRuleSourceService {
+
+
+    @Override
+    public List<IotAlarmRuleSource> selectByRuleId(Long ruleId) {
+        return lambdaQuery().eq(IotAlarmRuleSource::getRuleId, ruleId).list();
+
+    }
+}

+ 10 - 4
soc-modules/soc-modules-host/src/main/java/com/xunmei/host/north/controller/HostController.java

@@ -6,6 +6,7 @@ import com.xunmei.common.core.domain.host.remote.VideoIntegrityGetReq;
 import com.xunmei.common.core.domain.work.dto.ControlDeviceDto;
 import com.xunmei.common.core.domain.work.dto.WorkDayDto;
 import com.xunmei.common.core.web.domain.AjaxResult;
+import com.xunmei.host.alarm.service.IotAlarmRuleService;
 import com.xunmei.host.iot.service.IIotDeviceInfoService;
 import com.xunmei.host.protection.service.IIotAlarmHostService;
 import com.xunmei.host.video.service.IVideoIntegrityCheckService;
@@ -15,10 +16,7 @@ import com.xunmei.host.websocket.service.WebsocketService;
 import com.xunmei.system.api.Eto.BreakerControlEto;
 import com.xunmei.system.api.Eto.SubSystemControlEto;
 import io.swagger.annotations.ApiOperation;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.bind.annotation.*;
 
 import javax.annotation.Resource;
 import java.io.IOException;
@@ -48,6 +46,8 @@ public class HostController {
     @Resource
     IIotDeviceInfoService deviceInfoService;
 
+    @Resource
+    IotAlarmRuleService alarmRuleService;
 
     @ApiOperation("主动获取所有的主机基本信息")
     @GetMapping({"/getDevices"})
@@ -136,4 +136,10 @@ public class HostController {
         deviceInfoService.changeDevice(eto);
         return AjaxResult.success();
     }
+
+    @PostMapping("/syncRule/{id}")
+    AjaxResult syncAlarmRuleToHost(@PathVariable("id") Long id) {
+        alarmRuleService.syncAlarmRuleToHost(id);
+        return AjaxResult.success();
+    }
 }

+ 1 - 0
soc-modules/soc-modules-host/src/main/java/com/xunmei/host/websocket/constant/WebSocketConstants.java

@@ -177,6 +177,7 @@ public interface WebSocketConstants {
      * 全量workRule
      */
     String WORK_RULE = "workRule";
+    String ALARM_RULE = "alarmRule";
 
     /**
      * 增量workRule

+ 2 - 0
soc-modules/soc-modules-iot/src/main/java/com/xunmei/iot/service/IotAlarmRuleService.java

@@ -49,4 +49,6 @@ public interface IotAlarmRuleService extends IService<IotAlarmRule> {
     void deleteAlarmRule(Long ruleId);
 
     List<Pair<String, String>> getConnectHostOrg(Long orgId);
+
+    void syncAlarmRule(Long id);
 }

+ 9 - 10
soc-modules/soc-modules-iot/src/main/java/com/xunmei/iot/service/IotAlarmRuleSourceService.java

@@ -6,50 +6,49 @@ import com.xunmei.common.core.domain.mediator.domain.IotAlarmRuleSource;
 import com.xunmei.iot.dto.alarm.IotAlarmRuleSourceDetailDto;
 import com.xunmei.iot.dto.alarm.IotAlarmRuleSourceDeviceBatchJoin;
 import com.xunmei.iot.dto.alarm.IotAlarmRuleSourceDeviceDto;
-import com.xunmei.iot.dto.alarm.IotAlarmRuleSourceDeviceRuleDto;
 import com.xunmei.iot.vo.alarm.IotAlarmRuleSourceDetailVo;
-import com.xunmei.iot.vo.alarm.IotAlarmRuleSourceDeviceRuleVo;
 import com.xunmei.iot.vo.alarm.IotAlarmRuleSourceDeviceVo;
-import org.apache.ibatis.annotations.Param;
-
-import java.util.List;
 
 /**
  * @author 高雄
  */
-public interface IotAlarmRuleSourceService  extends IService<IotAlarmRuleSource> {
+public interface IotAlarmRuleSourceService extends IService<IotAlarmRuleSource> {
 
     /**
      * 告警规则和设备绑定详情
+     *
      * @param detailVo
      * @return
      * @throws Exception
      */
-    IotAlarmRuleSourceDetailVo detail(IotAlarmRuleSourceDetailDto detailVo)throws Exception;
+    IotAlarmRuleSourceDetailVo detail(IotAlarmRuleSourceDetailDto detailVo) throws Exception;
 
 
     /**
      * 获取列表分页数据
+     *
      * @param param
      * @return
      */
-    Page<IotAlarmRuleSourceDeviceVo> selectDeviceList(IotAlarmRuleSourceDeviceDto param)throws Exception;
+    Page<IotAlarmRuleSourceDeviceVo> selectDeviceList(IotAlarmRuleSourceDeviceDto param) throws Exception;
 
 
     /**
      * 更新数据
+     *
      * @param detailDto
      * @throws Exception
      */
-    void updateRuleAndProductDevice(IotAlarmRuleSourceDetailVo detailDto)throws Exception;
+    void updateRuleAndProductDevice(IotAlarmRuleSourceDetailVo detailDto) throws Exception;
 
 
     /**
      * 批量更新数据
+     *
      * @param batchJoinDto
      * @throws Exception
      */
-    void batchJoin(IotAlarmRuleSourceDeviceBatchJoin batchJoinDto)throws Exception;
+    void batchJoin(IotAlarmRuleSourceDeviceBatchJoin batchJoinDto) throws Exception;
 
 
 }

+ 19 - 1
soc-modules/soc-modules-iot/src/main/java/com/xunmei/iot/service/impl/IotAlarmRuleServiceImpl.java

@@ -27,12 +27,15 @@ import com.xunmei.iot.service.IotAlarmRuleExpressService;
 import com.xunmei.iot.service.IotAlarmRuleService;
 import com.xunmei.iot.service.IotServerInfoService;
 import com.xunmei.iot.vo.alarm.*;
+import com.xunmei.system.api.RemoteHostService;
 import com.xunmei.system.api.RemoteOrgService;
 import com.xunmei.system.api.domain.SysOrg;
 import org.apache.commons.collections4.CollectionUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
+import org.springframework.transaction.support.TransactionSynchronizationAdapter;
+import org.springframework.transaction.support.TransactionSynchronizationManager;
 
 import java.time.LocalDateTime;
 import java.util.*;
@@ -51,7 +54,8 @@ public class IotAlarmRuleServiceImpl extends ServiceImpl<IotAlarmRuleMapper, Iot
     private IotAlarmRuleSourceMapper iotAlarmRuleSourceMapper;
     @Autowired
     private RemoteOrgService orgService;
-
+    @Autowired
+    private RemoteHostService hostService;
     @Autowired
     private IotServerInfoService serverInfoService;
 
@@ -219,10 +223,24 @@ public class IotAlarmRuleServiceImpl extends ServiceImpl<IotAlarmRuleMapper, Iot
         //规则先删除原来的然重新插入
         iotAlarmRuleExpressService.remove(new LambdaQueryWrapper<IotAlarmRuleExpress>().eq(IotAlarmRuleExpress::getRuleId, rule.getId()));
         iotAlarmRuleExpressService.saveBatch(appAlarmRuleExpressesList);
+        syncAlarmRule(rule.getId());
     }
 
 
     @Override
+    @Transactional(rollbackFor = Exception.class)
+    public void syncAlarmRule(Long ruleId) {
+        TransactionSynchronizationManager.registerSynchronization(new TransactionSynchronizationAdapter() {
+            @Override
+            public void afterCommit() {
+
+                hostService.syncAlarmRuleToHost(ruleId);
+
+            }
+        });
+    }
+
+    @Override
     public void deleteAlarmRule(Long ruleId) {
         LambdaQueryWrapper<IotAlarmRule> queryWrapper = new LambdaQueryWrapper<>();
         queryWrapper.eq(IotAlarmRule::getId, ruleId);

+ 3 - 3
soc-modules/soc-modules-iot/src/main/java/com/xunmei/iot/service/impl/IotAlarmRuleSourceServiceImpl.java

@@ -17,10 +17,10 @@ import com.xunmei.iot.dto.alarm.IotAlarmRuleSourceDetailDto;
 import com.xunmei.iot.dto.alarm.IotAlarmRuleSourceDeviceBatchJoin;
 import com.xunmei.iot.dto.alarm.IotAlarmRuleSourceDeviceDto;
 import com.xunmei.iot.enums.ValueTypeEnum;
-import com.xunmei.iot.mapper.IotAlarmRuleExpressMapper;
 import com.xunmei.iot.mapper.IotAlarmRuleMapper;
 import com.xunmei.iot.mapper.IotAlarmRuleSourceMapper;
 import com.xunmei.iot.mapper.IotCommonSensorMapper;
+import com.xunmei.iot.service.IotAlarmRuleService;
 import com.xunmei.iot.service.IotAlarmRuleSourceService;
 import com.xunmei.iot.service.IotDeviceStatusService;
 import com.xunmei.iot.vo.alarm.IotAlarmRuleSourceDetailVo;
@@ -47,7 +47,7 @@ public class IotAlarmRuleSourceServiceImpl extends ServiceImpl<IotAlarmRuleSourc
     private IotAlarmRuleMapper iotAlarmRuleMapper;
 
     @Autowired
-    private IotAlarmRuleExpressMapper iotAlarmRuleExpressMapper;
+    private IotAlarmRuleService iotAlarmRuleService;
 
     @Autowired
     private IotCommonSensorMapper iotCommonSensorMapper;
@@ -154,7 +154,7 @@ public class IotAlarmRuleSourceServiceImpl extends ServiceImpl<IotAlarmRuleSourc
                 }
             }
         }
-
+        iotAlarmRuleService.syncAlarmRule(detailDto.getRuleId());
     }
 
     @Override