Browse Source

告警规则:
处理设备未上报状态时获取不到设备名称的问题,处理添加设备时未过滤其他主机下设备

jingyuanchao 1 năm trước cách đây
mục cha
commit
752a025260

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

@@ -1,5 +1,6 @@
 package com.xunmei.host.alarm.service.impl;
 
+import cn.hutool.core.util.ObjectUtil;
 import com.alibaba.fastjson2.JSON;
 import com.alibaba.fastjson2.JSONObject;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
@@ -112,7 +113,9 @@ public class IotAlarmRuleServiceImpl extends ServiceImpl<IotAlarmRuleMapper, Iot
         if (re != null) {
             final List<IotAlarmRuleExpress> list = JSON.parseArray(re.toString(), IotAlarmRuleExpress.class);
             ruleExpressService.delByRuleId(ruleId);
-            ruleExpressService.saveOrUpdateBatch(list);
+            if (ObjectUtil.isNotEmpty(list)){
+                ruleExpressService.saveOrUpdateBatch(list);
+            }
         }
     }
 }

+ 1 - 2
soc-modules/soc-modules-host/src/main/java/com/xunmei/host/notice/service/impl/WebsocketNoticeLogServiceImpl.java

@@ -17,7 +17,6 @@ import com.xunmei.system.api.RemoteOrgService;
 import com.xunmei.system.api.RemoteWebsocketSendService;
 import com.xunmei.system.api.domain.SysOrg;
 import com.xunmei.system.api.domain.iot.IotDeviceInfo;
-import com.xunmei.system.api.util.LogUtils;
 import com.xunmei.system.api.vo.WebSocketSendVo;
 import org.springframework.stereotype.Service;
 
@@ -86,7 +85,7 @@ public class WebsocketNoticeLogServiceImpl extends ServiceImpl<WebsocketNoticeLo
             if (alarmHost){
                 String fsuProductType = AlarmHostProductToFsuProductEnum.getFsuProductType(productType);
                 if (ObjectUtil.isEmpty(fsuProductType)){
-                    LogUtils.SMS_NOTICE_LOG.error("报警主机设备类型转换fsu设备类型为空,设备类型:{}",productType);
+                   // LogUtils.SMS_NOTICE_LOG.error("报警主机设备类型转换fsu设备类型为空,设备类型:{}",productType);
                     return;
                 }
                 productType = fsuProductType;

+ 1 - 2
soc-modules/soc-modules-host/src/main/java/com/xunmei/host/video/service/impl/VideoDiagnosisRecordServiceImpl.java

@@ -23,7 +23,6 @@ import com.xunmei.host.video.service.IVideoDiagnosisLogService;
 import com.xunmei.host.video.service.IVideoDiagnosisRecordService;
 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.redis.RedisKey;
 import com.xunmei.host.websocket.service.RouterService;
@@ -100,7 +99,7 @@ public class VideoDiagnosisRecordServiceImpl extends ServiceImpl<VideoDiagnosisR
             dto.setProductName(obj.getProductName());
             dto.setDeviceName(obj.getDeviceName());
             dto.setToken(obj.getServerInfo().getIotCode());
-            return WebsocketResult.of(saveData(dto, obj.getId()), obj.getTopic(), obj.getId());
+            return null;
         } catch (Exception e) {
             e.printStackTrace();
             LogUtils.STATUS_INFO_VIDEO_DIAGNOSIS.error(e.getMessage());

+ 2 - 0
soc-modules/soc-modules-iot/src/main/java/com/xunmei/iot/dto/alarm/IotAlarmRuleSourceDeviceDto.java

@@ -30,6 +30,8 @@ public class IotAlarmRuleSourceDeviceDto {
     @NotNull(message = "请选择产品类型进行添加设备!")
     private String type;
 
+    private String iotCode;
+
     private int page;
 
     private int size;

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

@@ -19,4 +19,6 @@ public interface IIotDeviceInfoService extends IService<IotDeviceInfo> {
     DeviceDetailInfoVo getAlarmHostDetail(Serializable id);
 
     List<DeviceDetailInfoVo> getByProductTypes(List<String> productTypes,String orgPath);
+
+    IotDeviceInfo selectDevice(String iotCode, String deviceProduct, String deviceCode);
 }

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

@@ -20,6 +20,7 @@ import com.xunmei.iot.enums.ValueTypeEnum;
 import com.xunmei.iot.mapper.IotAlarmRuleMapper;
 import com.xunmei.iot.mapper.IotAlarmRuleSourceMapper;
 import com.xunmei.iot.mapper.IotCommonSensorMapper;
+import com.xunmei.iot.service.IIotDeviceInfoService;
 import com.xunmei.iot.service.IotAlarmRuleService;
 import com.xunmei.iot.service.IotAlarmRuleSourceService;
 import com.xunmei.iot.service.IotDeviceStatusService;
@@ -27,6 +28,7 @@ import com.xunmei.iot.vo.alarm.IotAlarmRuleSourceDetailVo;
 import com.xunmei.iot.vo.alarm.IotAlarmRuleSourceDeviceVo;
 import com.xunmei.iot.vo.alarm.ProductDeviceTempVo;
 import com.xunmei.iot.vo.alarm.ProductTypeDataVo;
+import com.xunmei.system.api.domain.iot.IotDeviceInfo;
 import com.xunmei.system.api.domain.iot.IotDeviceStatus;
 import com.xunmei.system.api.vo.SysOrgVO;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -53,6 +55,9 @@ public class IotAlarmRuleSourceServiceImpl extends ServiceImpl<IotAlarmRuleSourc
     private IotCommonSensorMapper iotCommonSensorMapper;
     @Autowired
     private IotDeviceStatusService iotDeviceStatusService;
+    @Autowired
+    private IIotDeviceInfoService deviceInfoService;
+
     @Override
     public IotAlarmRuleSourceDetailVo detail(IotAlarmRuleSourceDetailDto detailVo) throws Exception {
         IotAlarmRuleSourceDetailVo iotAlarmRuleSourceDetailVo = new IotAlarmRuleSourceDetailVo();
@@ -179,8 +184,7 @@ public class IotAlarmRuleSourceServiceImpl extends ServiceImpl<IotAlarmRuleSourc
                 final List<IotAlarmRuleSource> ruleSourceList = iotAlarmRuleSourceMapper.selectList(new LambdaQueryWrapper<IotAlarmRuleSource>()
                         .eq(IotAlarmRuleSource::getRuleId, ruleId)
                         .eq(IotAlarmRuleSource::getProductType, Integer.parseInt(code))
-                        )
-                        ;
+                );
                 isAllDevice = ruleSourceList.stream().map(IotAlarmRuleSource::getValueType).anyMatch(ValueTypeEnum.AllDevice.getText()::equals);
                 if (isAllDevice) {
                     //如果此前已经设置了 产品类型=AllDevice的  本次就无需再添加
@@ -192,7 +196,7 @@ public class IotAlarmRuleSourceServiceImpl extends ServiceImpl<IotAlarmRuleSourc
                 source.setId(IDHelper.id());
                 source.setOrgId(productDevice.getOrgId());
                 source.setRuleId(ruleId);
-               // source.setProductType(Integer.parseInt(code));
+                // source.setProductType(Integer.parseInt(code));
                 source.setValue(deviceId);
                 source.setValueType(ValueTypeEnum.Device.getText());
                 iotAlarmRuleSourceMapper.insert(source);
@@ -227,7 +231,7 @@ public class IotAlarmRuleSourceServiceImpl extends ServiceImpl<IotAlarmRuleSourc
                 List<String> deviceIds = deviceTempList.stream().map(ProductDeviceTempVo::getDeviceId).collect(Collectors.toList());
                 List<IotDeviceStatus> deviceStatuses = iotDeviceStatusService.selectByUniqueCodeList(deviceIds);
                 // CONCAT(org_id,'-',device_code) as device_code
-                final Map<String, IotDeviceStatus> deviceIdAndName = deviceStatuses.stream().collect(Collectors.toMap(IotDeviceStatus::getUniqueCode, Function.identity()));
+                final Map<String, IotDeviceStatus> deviceIdAndName = deviceStatuses.stream().collect(Collectors.toMap(IotDeviceStatus::getUniqueCode, Function.identity(), (a, b) -> a));
                 for (ProductDeviceTempVo ptv : deviceTempList) {
                     final IotDeviceStatus deviceStatus = deviceIdAndName.get(ptv.getDeviceId());
                     if (deviceStatus != null) {
@@ -237,6 +241,19 @@ public class IotAlarmRuleSourceServiceImpl extends ServiceImpl<IotAlarmRuleSourc
                         ptv.setDeviceCode(deviceStatus.getDeviceCode());
                         final String orgName = dealOrgName(cacheList, deviceStatus.getOrgPath(), deviceStatus.getOrgName());
                         ptv.setOrgName(orgName);
+                    } else {
+                        if (ptv.getDeviceProduct().startsWith("FSU_DoPowerCollection")){
+                            ptv.setDeviceProduct("FSU_DoPowerCollection");
+                        }
+                        IotDeviceInfo deviceInfo = deviceInfoService.selectDevice(ptv.getIotCode(), ptv.getDeviceProduct(), ptv.getDeviceCode());
+                        if (deviceInfo != null) {
+                            ptv.setDeviceName(deviceInfo.getDeviceName());
+                            ptv.setIotCode(deviceInfo.getIotToken());
+                            ptv.setDeviceProduct(deviceInfo.getDeviceProduct());
+                            ptv.setDeviceCode(deviceInfo.getDeviceCode());
+                            final String orgName = dealOrgName(cacheList, deviceInfo.getOrgPath(), deviceInfo.getOrgName());
+                            ptv.setOrgName(orgName);
+                        }
                     }
                 }
                 /*List<IotSensor> iotSensors = iotCommonSensorMapper.selectByIds(deviceIds);

+ 12 - 0
soc-modules/soc-modules-iot/src/main/java/com/xunmei/iot/service/impl/IotDeviceInfoServiceImpl.java

@@ -1,8 +1,10 @@
 package com.xunmei.iot.service.impl;
 
 import cn.hutool.core.util.ObjectUtil;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.xunmei.common.core.constant.Constants;
 import com.xunmei.common.core.constant.SecurityConstants;
 import com.xunmei.common.core.enums.iot.BaseDeviceTypeEnum;
 import com.xunmei.common.core.utils.StringUtils;
@@ -86,4 +88,14 @@ public class IotDeviceInfoServiceImpl extends ServiceImpl<IotDeviceInfoMapper, I
     public List<DeviceDetailInfoVo> getByProductTypes(List<String> productTypes, String orgPath) {
         return baseMapper.getByProductTypes(productTypes, orgPath);
     }
+
+    @Override
+    public IotDeviceInfo selectDevice(String iotCode, String deviceProduct, String deviceCode) {
+        final LambdaQueryWrapper<IotDeviceInfo> wrapper = new LambdaQueryWrapper<>();
+        wrapper.eq(IotDeviceInfo::getIotToken, iotCode);
+        wrapper.eq(IotDeviceInfo::getDeviceProduct, deviceProduct);
+        wrapper.eq(IotDeviceInfo::getDeviceCode, deviceCode);
+        wrapper.last(Constants.LIMIT1);
+        return baseMapper.selectOne(wrapper);
+    }
 }

+ 12 - 1
soc-modules/soc-modules-iot/src/main/resources/mapper/IotAlarmRuleSourceMapper.xml

@@ -18,6 +18,7 @@
         <result property="type" column="type"/>
         <result property="valueType" column="value_type"/>
         <result property="typeText" column="type_text"/>
+        <result property="iotCode" column="iotCode"/>
         <collection property="deviceTempList" ofType="com.xunmei.iot.vo.alarm.ProductDeviceTempVo">
             <result property="deviceId" column="device_id"/>
             <result property="strDeviceId" column="strDeviceId"/>
@@ -25,6 +26,8 @@
             <result property="orgName" column="org_name"/>
             <result property="orgPath" column="org_path"/>
             <result property="iotCode" column="iot_token"/>
+            <result property="deviceProduct" column="deviceProduct"/>
+            <result property="deviceCode" column="deviceCode"/>
         </collection>
     </resultMap>
 
@@ -38,7 +41,12 @@
             concat(b.org_id,'-',b.value) as strDeviceId,
             b.org_id,
             c.`name` AS org_name,
-            c.path AS org_path
+            c.path AS org_path,
+            b.iot_code as iot_token,
+            b.iot_code as iotCode,
+            b.product_type as deviceProduct,
+            b.device_code as deviceCode
+
         FROM
             ( SELECT rule_id, product_type FROM iot_alarm_rule_express GROUP BY product_type, rule_id ) a
                 LEFT JOIN iot_alarm_rule_source b ON a.rule_id = b.rule_id AND a.product_type = b.product_type
@@ -83,6 +91,9 @@
         iot_device_info d
         LEFT JOIN sys_org b ON d.org_id = b.id
         where 1=1
+        <if test="param.iotCode != null and param.iotCode != ''">
+            and   d.iot_token = #{param.iotCode}
+        </if>
         <if test="param.includeSub == false">
             and   d.org_id = #{param.orgId}
         </if>