|
|
@@ -2,13 +2,12 @@ package com.xunmei.mediator.api.service.impl;
|
|
|
|
|
|
import cn.hutool.core.util.ObjectUtil;
|
|
|
import com.alibaba.fastjson.JSON;
|
|
|
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
|
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
|
|
import com.xunmei.common.core.constant.CacheConstants;
|
|
|
import com.xunmei.common.core.constant.Constants;
|
|
|
-import com.xunmei.common.core.domain.iot.domain.IotAlarmDefenceArea;
|
|
|
-import com.xunmei.common.core.domain.iot.domain.IotAlarmDefenceAreaAlarmData;
|
|
|
-import com.xunmei.common.core.domain.iot.domain.IotAlarmDefenceAreaData;
|
|
|
-import com.xunmei.common.core.domain.iot.domain.IotAlarmDefenceAreaDataLog;
|
|
|
+import com.xunmei.common.core.constant.SecurityConstants;
|
|
|
+import com.xunmei.common.core.domain.iot.domain.*;
|
|
|
import com.xunmei.common.core.util.BeanHelper;
|
|
|
import com.xunmei.common.core.utils.DateUtils;
|
|
|
import com.xunmei.common.core.utils.IDHelper;
|
|
|
@@ -16,14 +15,18 @@ import com.xunmei.common.redis.utils.RedisUtils;
|
|
|
import com.xunmei.mediator.api.mapper.IotAlarmDefenceAreaMapper;
|
|
|
import com.xunmei.mediator.api.service.*;
|
|
|
import com.xunmei.mediator.util.CheckDataUtil;
|
|
|
+import com.xunmei.system.api.RemoteOrgService;
|
|
|
+import com.xunmei.system.api.domain.SysOrg;
|
|
|
import com.xunmei.system.api.domain.north.NorthError;
|
|
|
import com.xunmei.system.api.dto.DataPageDto;
|
|
|
import com.xunmei.system.api.dto.protection.ReceiveErrorDto;
|
|
|
import com.xunmei.system.api.dto.protection.SensorDataDto;
|
|
|
import com.xunmei.system.api.util.LogUtils;
|
|
|
import com.xunmei.system.api.vo.SysOrgVO;
|
|
|
+import io.netty.util.internal.StringUtil;
|
|
|
import org.apache.commons.codec.digest.DigestUtils;
|
|
|
import org.apache.commons.collections4.CollectionUtils;
|
|
|
+import org.apache.commons.lang3.StringUtils;
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
|
import org.springframework.data.redis.core.RedisTemplate;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
@@ -49,21 +52,25 @@ import java.util.stream.Collectors;
|
|
|
public class IotAlarmDefenceAreaServiceImpl extends ServiceImpl<IotAlarmDefenceAreaMapper, IotAlarmDefenceArea> implements IotAlarmDefenceAreaService {
|
|
|
@Autowired
|
|
|
private RedisTemplate redisTemplate;
|
|
|
+ @Autowired
|
|
|
+ private RemoteOrgService orgService;
|
|
|
@Resource
|
|
|
NorthErrorService northErrorService;
|
|
|
@Resource
|
|
|
IIotDefenceAreaDataLogService defenceAreDataLogService;
|
|
|
@Resource
|
|
|
IIotDefenceAreaAlarmDataService defenceAreAlarmDataService;
|
|
|
-
|
|
|
+ @Resource
|
|
|
+ IIotDefenceAreaDataService defenceAreaDataService;
|
|
|
@Override
|
|
|
public List<IotAlarmDefenceArea> findBySubSystemCode(String defenceAreaCode) {
|
|
|
return lambdaQuery().eq(IotAlarmDefenceArea::getSubSystemCode, defenceAreaCode).eq(IotAlarmDefenceArea::getDeleted, 0).list();
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
- public IotAlarmDefenceArea findBySubSystemCodeAndIdx(String defenceAreaCode, Integer idx) {
|
|
|
+ public IotAlarmDefenceArea findBySubSystemCodeAndIdx(String defenceAreaCode, Integer idx,String orgGuid) {
|
|
|
return lambdaQuery()
|
|
|
+ .eq(IotAlarmDefenceArea::getOrganizationGuid, orgGuid)
|
|
|
.eq(IotAlarmDefenceArea::getSubSystemCode, defenceAreaCode)
|
|
|
.eq(IotAlarmDefenceArea::getDefenceAreaIndex, idx)
|
|
|
.eq(IotAlarmDefenceArea::getDeleted, 0)
|
|
|
@@ -73,310 +80,170 @@ public class IotAlarmDefenceAreaServiceImpl extends ServiceImpl<IotAlarmDefenceA
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
- public ReceiveErrorDto saveData(String branchId, String msgId, DataPageDto<SensorDataDto> request) {
|
|
|
- if (ObjectUtil.isEmpty(request.getTotalPage())) {
|
|
|
- ReceiveErrorDto.error("totalPage参数 未空");
|
|
|
- }
|
|
|
- if (ObjectUtil.isEmpty(request.getCurrPage())) {
|
|
|
- ReceiveErrorDto.error("currPage 未空");
|
|
|
- }
|
|
|
- ReceiveErrorDto dto = new ReceiveErrorDto();
|
|
|
- List<SensorDataDto> dtoList = request.getData();
|
|
|
- if (CollectionUtils.isNotEmpty(dtoList)) {
|
|
|
- String key = DigestUtils.md5Hex("SeneorNx" + request.getPackageGuid() + request.getTotalPage() + request.getCurrPage());
|
|
|
- String data = JSON.toJSONString(dtoList);
|
|
|
- //验证数据是否接受重复的数据
|
|
|
- if (checkData(key, data)) {
|
|
|
- try {
|
|
|
- sensorBatch(key, branchId, msgId);
|
|
|
- LogUtils.STATUS_INFO_STATUS_SENSOR.info("【北向接口-{}】【branchId:{}】【msgId:{}】【返回参数:{}】", "防区传感器报警信息:/api/status/sensor", branchId, msgId, JSON.toJSONString(request));
|
|
|
- } catch (Exception e) {
|
|
|
- LogUtils.STATUS_INFO_STATUS_SENSOR.info("【北向接口-{}】【branchId:{}】【msgId:{}】【异常原因:{}】", "防区传感器报警信息:/api/status/sensor", branchId, msgId, e.getMessage());
|
|
|
- }
|
|
|
- } else {
|
|
|
- dto.setErrorMsg("数据已接受,短时间内收到相同的告警数据,处理结果忽略:拒绝处理该数据");
|
|
|
- }
|
|
|
- dto.setSuccess(true);
|
|
|
- return dto;
|
|
|
- } else {
|
|
|
- return ReceiveErrorDto.error("参数中Data的值为null");
|
|
|
+ public ReceiveErrorDto sensorData(SensorDataDto sensorData, String branchId, String msgId) {
|
|
|
+ ReceiveErrorDto result = new ReceiveErrorDto();
|
|
|
+ if (StringUtils.isEmpty(sensorData.getOrganizationGuid())) {
|
|
|
+ result.setSuccess(false);
|
|
|
+ result.setErrorMsg("参数非法:未传organizationGuid");
|
|
|
+ return result;
|
|
|
}
|
|
|
- }
|
|
|
-
|
|
|
|
|
|
- public void sensorBatch(String key, String branchId, String msgId) throws IllegalAccessException {
|
|
|
- Object obj = this.redisTemplate.opsForValue().get(key);
|
|
|
- List<SensorDataDto> DataDtos = JSON.parseArray((String) obj, SensorDataDto.class);
|
|
|
- if (CollectionUtils.isNotEmpty(DataDtos)) {
|
|
|
- Map<String, Object> map = checkSensor(DataDtos, branchId, msgId);
|
|
|
- List<NorthError> errors = (List<NorthError>) map.get("errors");
|
|
|
- List<IotAlarmDefenceArea> sensorDatas = (List<IotAlarmDefenceArea>) map.get("sensorDatas");
|
|
|
- List<IotAlarmDefenceAreaDataLog> sensorDataLogs = (List<IotAlarmDefenceAreaDataLog>) map.get("sensorDataLogs");
|
|
|
- List<IotAlarmDefenceArea> sensors = (List<IotAlarmDefenceArea>) map.get("sensors");
|
|
|
- //List<ProductDevice> productDevices = (List<ProductDevice>) map.get("productDevices");
|
|
|
- List<IotAlarmDefenceAreaAlarmData> sensorAlarmDatas = (List<IotAlarmDefenceAreaAlarmData>) map.get("sensorAlarmDatas");
|
|
|
- try {
|
|
|
- if (CollectionUtils.isNotEmpty(errors)) {
|
|
|
- northErrorService.saveErrorData(errors);
|
|
|
- }
|
|
|
- } catch (Exception e) {
|
|
|
- e.printStackTrace();
|
|
|
- }
|
|
|
- try {
|
|
|
- if (CollectionUtils.isNotEmpty(sensorDatas)) {
|
|
|
- this.saveOrUpdateBatch(sensorDatas);
|
|
|
- }
|
|
|
- if (CollectionUtils.isNotEmpty(sensorDataLogs)) {
|
|
|
- defenceAreDataLogService.saveBatch(sensorDataLogs);
|
|
|
- }
|
|
|
- if (CollectionUtils.isNotEmpty(sensors)) {
|
|
|
- this.updateBatchById(sensors);
|
|
|
- }
|
|
|
-/* if (CollectionUtils.isNotEmpty(productDevices)) {
|
|
|
- productDeviceDao.saveOrUpdateBatch(productDevices);
|
|
|
- }*/
|
|
|
- if (CollectionUtils.isNotEmpty(sensorAlarmDatas)) {
|
|
|
- defenceAreAlarmDataService.saveBatch(sensorAlarmDatas);
|
|
|
- }
|
|
|
- } catch (Exception e) {
|
|
|
- throw new RuntimeException(e.getMessage());
|
|
|
- }
|
|
|
+ if (StringUtils.isEmpty(sensorData.getDefenceareaCode())) {
|
|
|
+ result.setSuccess(false);
|
|
|
+ result.setErrorMsg("参数非法:未传defenceareaCode");
|
|
|
+ return result;
|
|
|
}
|
|
|
- }
|
|
|
|
|
|
- @Resource
|
|
|
- IIotDefenceAreaDataService defenceAreaDataService;
|
|
|
-
|
|
|
- private Map<String, Object> checkSensor(List<SensorDataDto> dataDtos, String branchId, String msgId) throws IllegalAccessException {
|
|
|
- Map<String, Object> map = new HashMap<>();
|
|
|
- List<NorthError> errors = new ArrayList<>();
|
|
|
- List<IotAlarmDefenceAreaData> sensorDatas = new ArrayList<>();
|
|
|
- List<IotAlarmDefenceAreaDataLog> sensorDataLogs = new ArrayList<>();
|
|
|
- List<Sensor> sensors = new ArrayList<>();
|
|
|
- // List<ProductDevice> productDevices = new ArrayList<>();
|
|
|
- List<IotAlarmDefenceAreaAlarmData> sensorAlarmDatas = new ArrayList<>();
|
|
|
- NorthError error = null;
|
|
|
-
|
|
|
- //同一页数据同一个传感器的状态会有多个,取最新的一条去处理
|
|
|
- List<SensorDataDto> sensorDatasJg = new ArrayList<>();
|
|
|
- //将数据进行分组并取出每个传感器最新的一条状态数据重新放到集合中
|
|
|
- Map<String, List<SensorDataDto>> mapa = dataDtos.stream().collect(Collectors.groupingBy(r -> r.getDefenceareaCode() + r.getInputIndex()));
|
|
|
- List<IotAlarmDefenceArea> sensorList = new ArrayList<>();
|
|
|
- List<IotAlarmDefenceArea> dataOlds = new ArrayList<>();
|
|
|
- for (String key : mapa.keySet()) {
|
|
|
- List<SensorDataDto> list = mapa.get(key);
|
|
|
- if (CollectionUtils.isNotEmpty(list)) {
|
|
|
- SensorDataDto sensorData = list.stream().sorted(Comparator.comparing(SensorDataDto::getUpdateTime).reversed()).collect(Collectors.toList()).get(0);
|
|
|
- sensorDatasJg.add(sensorData);
|
|
|
- sensorList.add(this.findBySubSystemCodeAndIdx(sensorData.getDefenceareaCode(), sensorData.getInputIndex()));
|
|
|
- dataOlds.addAll(defenceAreaDataService.findByOrgGuid(sensorData.getOrganizationGuid()));
|
|
|
- }
|
|
|
+ if (StringUtils.isEmpty(sensorData.getAlarmHostCode())) {
|
|
|
+ result.setSuccess(false);
|
|
|
+ result.setErrorMsg("参数非法:未传alarmHostCode");
|
|
|
+ return result;
|
|
|
}
|
|
|
-
|
|
|
-/*
|
|
|
- QueryWrapper<ProductDevice> qwa = new QueryWrapper<>();
|
|
|
- qwa.lambda().in(ProductDevice::getStrDeviceId, strDeviceIds);
|
|
|
- List<ProductDevice> productDeviceList = productDeviceDao.list(qwa);
|
|
|
-*/
|
|
|
-
|
|
|
- List<SysOrgVO> orgList = RedisUtils.getCacheList(CacheConstants.ORG_CACHE_LIST_KEY);
|
|
|
-
|
|
|
- for (SensorDataDto sensorData : sensorDatasJg) {
|
|
|
- error = CheckDataUtil.checkObjFieldIsNull(sensorData, branchId, msgId, "/api/status/sensor", null);
|
|
|
- if (error != null) {
|
|
|
- errors.add(error);
|
|
|
- continue;
|
|
|
- } else {
|
|
|
- Map<String, Object> map1 = this.checkError(sensorData, branchId, msgId, orgList, sensorList, dataOlds);
|
|
|
- error = (NorthError) map1.get("error");
|
|
|
- if (error == null) {
|
|
|
- IotAlarmDefenceAreaData data = (IotAlarmDefenceAreaData) map1.get("data");
|
|
|
- if (data != null) {
|
|
|
- sensorDatas.add(data);
|
|
|
- }
|
|
|
- IotAlarmDefenceAreaDataLog dataLog = (IotAlarmDefenceAreaDataLog) map1.get("dataLog");
|
|
|
- if (dataLog != null) {
|
|
|
- sensorDataLogs.add(dataLog);
|
|
|
- }
|
|
|
- Sensor sensor = (Sensor) map1.get("sensor");
|
|
|
- if (sensor != null) {
|
|
|
- sensors.add(sensor);
|
|
|
- }
|
|
|
- /* ProductDevice productDevice = (ProductDevice) map1.get("productDevice");
|
|
|
- if (productDevice != null) {
|
|
|
- productDevices.add(productDevice);
|
|
|
- }*/
|
|
|
- IotAlarmDefenceAreaAlarmData dataAlarm = (IotAlarmDefenceAreaAlarmData) map1.get("dataAlarm");
|
|
|
- if (dataAlarm != null) {
|
|
|
- sensorAlarmDatas.add(dataAlarm);
|
|
|
- }
|
|
|
- } else {
|
|
|
- errors.add(error);
|
|
|
- }
|
|
|
- }
|
|
|
+ if (StringUtils.isEmpty(sensorData.getInputName())) {
|
|
|
+ result.setSuccess(false);
|
|
|
+ result.setErrorMsg("参数非法:未传InputName");
|
|
|
+ return result;
|
|
|
}
|
|
|
- map.put("errors", errors);
|
|
|
- map.put("sensorDatas", sensorDatas);
|
|
|
- map.put("sensorDataLogs", sensorDataLogs);
|
|
|
- map.put("sensors", sensors);
|
|
|
- // map.put("productDevices", productDevices);
|
|
|
- map.put("sensorAlarmDatas", sensorAlarmDatas);
|
|
|
- return map;
|
|
|
- }
|
|
|
-
|
|
|
- //验证是否在段时间内收到重复的数据
|
|
|
- public boolean checkData(String key, String value) {
|
|
|
- boolean flag = true;
|
|
|
- if (redisTemplate.hasKey(key)) {
|
|
|
- String val = (String) this.redisTemplate.opsForValue().get(key);
|
|
|
- if (val != null) {
|
|
|
- if (value.equals(val)) {
|
|
|
- flag = false;
|
|
|
- } else {
|
|
|
- redisTemplate.opsForValue().set(key, value);
|
|
|
- this.redisTemplate.expire(key, 60, TimeUnit.MINUTES);
|
|
|
- }
|
|
|
- } else {
|
|
|
- redisTemplate.opsForValue().set(key, value);
|
|
|
- this.redisTemplate.expire(key, 60, TimeUnit.MINUTES);
|
|
|
- }
|
|
|
- } else {
|
|
|
- redisTemplate.opsForValue().set(key, value);
|
|
|
- this.redisTemplate.expire(key, 60, TimeUnit.MINUTES);
|
|
|
+ if (StringUtils.isEmpty(sensorData.getInputState())) {
|
|
|
+ result.setSuccess(false);
|
|
|
+ result.setErrorMsg("参数非法:未传InputState");
|
|
|
+ return result;
|
|
|
+ }
|
|
|
+ if (sensorData.getInputIndex() == null) {
|
|
|
+ result.setSuccess(false);
|
|
|
+ result.setErrorMsg("参数非法:未传InputIndex");
|
|
|
+ return result;
|
|
|
+ }
|
|
|
+ if (StringUtils.isEmpty(sensorData.getUpdateTime())) {
|
|
|
+ result.setSuccess(false);
|
|
|
+ result.setErrorMsg("参数非法:未传updateTime");
|
|
|
+ return result;
|
|
|
}
|
|
|
- return flag;
|
|
|
- }
|
|
|
|
|
|
- private Map<String, Object> checkError(SensorDataDto sensorData, String branchId, String msgId, List<SysOrgVO> orgList, List<IotAlarmDefenceArea> sensorList, List<IotAlarmDefenceArea> dataOlds) {
|
|
|
- Map<String, Object> map = new HashMap<>();
|
|
|
- SysOrgVO org; //orgDao.findByGuid(sensorData.getOrganizationGuid());
|
|
|
- List<SysOrgVO> orgs = orgList.stream().filter(r -> r.getGuid().equals(sensorData.getOrganizationGuid())).collect(Collectors.toList());
|
|
|
- if (orgs.size() == 0) {
|
|
|
- org = null;
|
|
|
+ SysOrg org = orgService.findByCode(sensorData.getOrganizationGuid(), SecurityConstants.INNER);
|
|
|
+ if (org == null) {
|
|
|
NorthError error = new NorthError(msgId, branchId, "/api/status/sensor"
|
|
|
- , sensorData, "organizationGuid:" + sensorData.getOrganizationGuid() + "不正确");
|
|
|
- map.put("error", error);
|
|
|
- return map;
|
|
|
- } else {
|
|
|
- org = orgs.get(0);
|
|
|
+ , sensorData, "orgGUID:" + sensorData.getOrganizationGuid() + "不正确");
|
|
|
+ northErrorService.saveError(error);
|
|
|
+ return result;
|
|
|
}
|
|
|
|
|
|
LocalDateTime dateTime = null;
|
|
|
try {
|
|
|
dateTime = LocalDateTime.parse(sensorData.getUpdateTime(), DateTimeFormatter.ISO_DATE_TIME);
|
|
|
} catch (Exception e) {
|
|
|
- NorthError error = new NorthError(msgId, branchId, "/api/status/sensor"
|
|
|
- , sensorData, "updateTime:" + sensorData.getUpdateTime() + "不正确");
|
|
|
- map.put("error", error);
|
|
|
- return map;
|
|
|
+ result.setSuccess(false);
|
|
|
+ result.setErrorMsg("参数非法:updateTime不正确");
|
|
|
+ return result;
|
|
|
}
|
|
|
- Date updateTime = Date.from(dateTime.atZone(ZoneId.systemDefault()).toInstant());
|
|
|
- IotAlarmDefenceArea sensor = null;
|
|
|
- if (CollectionUtils.isNotEmpty(sensorList)) {
|
|
|
- final Optional<IotAlarmDefenceArea> optional = sensorList.stream()
|
|
|
- .filter(r -> r.getSubSystemCode().equals(sensorData.getDefenceareaCode()))
|
|
|
- .filter(r -> r.getDefenceAreaIndex().equals(sensorData.getInputIndex()))
|
|
|
- .filter(r -> r.getOrgId().equals(org.getId()))
|
|
|
- .findFirst();
|
|
|
- if (!optional.isPresent()) {
|
|
|
- NorthError error = new NorthError(msgId, branchId, "/api/status/sensor"
|
|
|
- , sensorData, "没有找到对应的传感器");
|
|
|
- map.put("error", error);
|
|
|
- return map;
|
|
|
- }
|
|
|
- sensor = optional.get();
|
|
|
- sensor.setState(sensorData.getInputState());
|
|
|
- if (sensorData.getInputState().equalsIgnoreCase("alarm")) {
|
|
|
- sensor.setStateText("报警");
|
|
|
- }
|
|
|
- if (sensorData.getInputState().equalsIgnoreCase("bypass")) {
|
|
|
- sensor.setStateText("旁路");
|
|
|
|
|
|
- }
|
|
|
- if (sensorData.getInputState().equalsIgnoreCase("normal")) {
|
|
|
- sensor.setStateText("正常");
|
|
|
|
|
|
- }
|
|
|
- if (sensorData.getInputState().equalsIgnoreCase("activity")) {
|
|
|
- sensor.setStateText("活动");
|
|
|
+ IotAlarmDefenceArea sensor = this.findBySubSystemCodeAndIdx(sensorData.getDefenceareaCode(),sensorData.getInputIndex(),sensorData.getOrganizationGuid());
|
|
|
+ if (sensor == null) {
|
|
|
+ result.setSuccess(false);
|
|
|
+ result.setErrorMsg("没有找到对应的设备");
|
|
|
+ return result;
|
|
|
+ }
|
|
|
+ if (ObjectUtil.notEqual(sensor.getState(),sensorData.getInputState())){
|
|
|
+ sensor.setStateUpdateTime(LocalDateTime.now());
|
|
|
+ }
|
|
|
+ sensor.setState(sensorData.getInputState());
|
|
|
+ if (sensorData.getInputState().equalsIgnoreCase("alarm")) {
|
|
|
+ sensor.setStateText("报警");
|
|
|
+ }
|
|
|
+ if (sensorData.getInputState().equalsIgnoreCase("bypass")) {
|
|
|
+ sensor.setStateText("旁路");
|
|
|
|
|
|
- }
|
|
|
- if (sensorData.getInputState().equalsIgnoreCase("unKnown")) {
|
|
|
- sensor.setStateText("未知");
|
|
|
+ }
|
|
|
+ if (sensorData.getInputState().equalsIgnoreCase("normal")) {
|
|
|
+ sensor.setStateText("正常");
|
|
|
|
|
|
- }
|
|
|
}
|
|
|
+ if (sensorData.getInputState().equalsIgnoreCase("activity")) {
|
|
|
+ sensor.setStateText("活动");
|
|
|
|
|
|
+ }
|
|
|
+ if (sensorData.getInputState().equalsIgnoreCase("unKnown")) {
|
|
|
+ sensor.setStateText("未知");
|
|
|
|
|
|
- IotAlarmDefenceArea data = new IotAlarmDefenceArea();
|
|
|
+ }
|
|
|
+
|
|
|
+ IotAlarmDefenceAreaData data = new IotAlarmDefenceAreaData();
|
|
|
data.setAlarmHostCode(sensorData.getAlarmHostCode());
|
|
|
- data.setSubSystemCode(sensorData.getDefenceareaCode());
|
|
|
- //data.setOrganizationGuid(sensorData.getOrganizationGuid());
|
|
|
- //data.setDeviceId(productDevice.getDeviceId());
|
|
|
- //data.setStrDeviceId(sensorData.getDefenceareaCode() + sensorData.getInputIndex());
|
|
|
- data.setDefenceAreaIndex(sensorData.getInputIndex());
|
|
|
- data.setDefenceAreaName(sensorData.getInputName());
|
|
|
- data.setState(sensorData.getInputState());
|
|
|
- data.setUpdateTime(DateUtils.toLocalDateTime(updateTime));
|
|
|
+ data.setDefenceAreaCode(sensorData.getDefenceareaCode());
|
|
|
+ data.setInputIndex(sensorData.getInputIndex());
|
|
|
+ data.setInputName(sensorData.getInputName());
|
|
|
+ data.setInputState(sensorData.getInputState());
|
|
|
+ data.setUpdateTime(LocalDateTime.parse(sensorData.getUpdateTime(),DateTimeFormatter.ISO_DATE_TIME));
|
|
|
data.setOrgId(org.getId());
|
|
|
- data.setOrgName(org.getShortName());
|
|
|
+ data.setOrgName(org.getName());
|
|
|
data.setOrgPath(org.getPath());
|
|
|
|
|
|
- IotAlarmDefenceArea dataOld = null;
|
|
|
- if (CollectionUtils.isNotEmpty(dataOlds)) {
|
|
|
- List<IotAlarmDefenceArea> dataList = dataOlds.stream().filter(r -> r.getSubSystemCode().equals(sensorData.getDefenceareaCode())&&r.getDefenceAreaIndex().equals(sensorData.getInputIndex())).collect(Collectors.toList());
|
|
|
- if (CollectionUtils.isNotEmpty(dataList)) {
|
|
|
- dataOld = dataList.get(0);
|
|
|
- }
|
|
|
- }
|
|
|
+ IotAlarmDefenceAreaData dataOld = defenceAreaDataService.findByCodeAndIdx(sensorData.getDefenceareaCode(), sensorData.getInputIndex(),data.getOrgId());
|
|
|
if (dataOld != null) {
|
|
|
- //当传过来的状态数据和数据库中的状态不一样是才进行修改
|
|
|
- if (!dataOld.getState().equals(data.getState())) {
|
|
|
- BeanHelper.copyProperties(dataOld, data);
|
|
|
- data = dataOld;
|
|
|
- } else {
|
|
|
- data = null;
|
|
|
- }
|
|
|
-
|
|
|
+ BeanHelper.copyProperties(dataOld, data);
|
|
|
+ data = dataOld;
|
|
|
} else {
|
|
|
data.setId(IDHelper.id());
|
|
|
}
|
|
|
- IotAlarmDefenceAreaDataLog dataLog = null;
|
|
|
- //只有状态发送改变或新插入数据的时候才记录日志
|
|
|
- if (data != null) {
|
|
|
- dataLog = new IotAlarmDefenceAreaDataLog();
|
|
|
- BeanHelper.copyProperties(dataLog, data);
|
|
|
- dataLog.setId(IDHelper.id());
|
|
|
- dataLog.setSensorData(data.getId());
|
|
|
+ IotAlarmDefenceAreaDataLog dataLog = new IotAlarmDefenceAreaDataLog();
|
|
|
+ BeanHelper.copyProperties(dataLog, data);
|
|
|
+ dataLog.setId(IDHelper.id());
|
|
|
+ dataLog.setSensorData(data.getId());
|
|
|
+
|
|
|
+ //报警是报警状态
|
|
|
+ if (data.getInputState().equalsIgnoreCase("alarm")) {
|
|
|
+ //把对应设备修改为告警,并且记录告警记录
|
|
|
+ IotAlarmDefenceAreaAlarmData dataAlarm = new IotAlarmDefenceAreaAlarmData();
|
|
|
+ BeanHelper.copyProperties(dataAlarm, data);
|
|
|
+ dataAlarm.setId(IDHelper.id());
|
|
|
+ dataAlarm.setIsDo(0);
|
|
|
+ defenceAreAlarmDataService.updateById(dataAlarm);
|
|
|
+ }
|
|
|
|
|
|
- //旁路、正常,活动,未知是正常状态
|
|
|
- /* if (data.getState().equalsIgnoreCase("bypass")
|
|
|
- || data.getState().equalsIgnoreCase("normal")
|
|
|
- || data.getState().equalsIgnoreCase("unKnown")
|
|
|
- || data.getState().equalsIgnoreCase("activity")) {
|
|
|
- 把设备修改wie正常
|
|
|
- productDevice.setDoStatus(0);
|
|
|
- productDevice.setCheckTime(updateTime);
|
|
|
- map.put("productDevice", productDevice);
|
|
|
- productDeviceDao.saveOrUpdate(productDevice);
|
|
|
- }*/
|
|
|
- //报警是报警状态
|
|
|
- if (data.getState().equalsIgnoreCase("alarm")) {
|
|
|
- //把对应设备修改为告警,并且记录告警记录
|
|
|
- // productDevice.setDoStatus(1);
|
|
|
- // productDevice.setCheckTime(updateTime);
|
|
|
- // map.put("productDevice", productDevice);
|
|
|
- IotAlarmDefenceAreaAlarmData dataAlarm = new IotAlarmDefenceAreaAlarmData();
|
|
|
- BeanHelper.copyProperties(dataAlarm, data);
|
|
|
- dataAlarm.setId(IDHelper.id());
|
|
|
- dataAlarm.setIsDo(0);
|
|
|
- map.put("dataAlarm", dataAlarm);
|
|
|
+ defenceAreaDataService.saveOrUpdate(data);
|
|
|
+ defenceAreDataLogService.save(dataLog);
|
|
|
+ this.updateById(sensor);
|
|
|
+ return result;
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public ReceiveErrorDto saveData(String branchId, String msgId, SensorDataDto sensorData) {
|
|
|
+ ReceiveErrorDto errorDto = null;
|
|
|
+ try {
|
|
|
+ String value = sensorData.getInputState();
|
|
|
+ String key = sensorData.getDefenceareaCode() + sensorData.getInputIndex() + sensorData.getOrganizationGuid() + "sensor";
|
|
|
+ boolean flag = true;
|
|
|
+ if (redisTemplate.hasKey(key)) {
|
|
|
+ String val = (String) this.redisTemplate.opsForValue().get(key);
|
|
|
+ if (val != null) {
|
|
|
+ if (value.equals(val)) {
|
|
|
+ flag = false;
|
|
|
+ } else {
|
|
|
+ redisTemplate.opsForValue().set(key, value);
|
|
|
+ this.redisTemplate.expire(key, 60, TimeUnit.MINUTES);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ redisTemplate.opsForValue().set(key, value);
|
|
|
+ this.redisTemplate.expire(key, 60, TimeUnit.MINUTES);
|
|
|
+ }
|
|
|
+ if (flag) {
|
|
|
+ errorDto = this.sensorData(sensorData, branchId, msgId);
|
|
|
+ LogUtils.STATUS_INFO_STATUS_SENSOR.info("【北向接口-{}】【branchId:{}】【msgId:{}】【返回参数:{}】", "防区传感器报警信息:/api/status/sensor", branchId, msgId, JSON.toJSONString(errorDto));
|
|
|
+ return errorDto;
|
|
|
+ } else {
|
|
|
+ ReceiveErrorDto dto = new ReceiveErrorDto();
|
|
|
+ dto.setSuccess(true);
|
|
|
+ dto.setErrorMsg("数据已接受,短时间内收到相同的告警数据,处理结果忽略:拒绝处理该数据");
|
|
|
+ return dto;
|
|
|
}
|
|
|
- }
|
|
|
|
|
|
- map.put("data", data);
|
|
|
- map.put("dataLog", dataLog);
|
|
|
- map.put("sensor", sensor);
|
|
|
- return map;
|
|
|
+ } catch (Exception e) {
|
|
|
+ e.printStackTrace();
|
|
|
+ LogUtils.STATUS_INFO_STATUS_SENSOR.info("【北向接口-{}】【branchId:{}】【msgId:{}】【异常原因:{}】", "防区传感器报警信息:/api/status/sensor", branchId, msgId, e.getMessage());
|
|
|
+ return ReceiveErrorDto.error("数据处理异常");
|
|
|
+ }
|
|
|
}
|
|
|
+
|
|
|
}
|