|
|
@@ -4,14 +4,13 @@ import cn.hutool.core.util.ObjectUtil;
|
|
|
import com.alibaba.fastjson.JSON;
|
|
|
import com.alibaba.fastjson.JSONObject;
|
|
|
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
|
|
-import com.xunmei.common.core.domain.iot.domain.IotAlarmSubsystem;
|
|
|
-import com.xunmei.common.core.domain.iot.domain.IotAlarmSubsystemLog;
|
|
|
+import com.xunmei.common.core.domain.iot.domain.*;
|
|
|
import com.xunmei.common.core.util.BeanHelper;
|
|
|
+import com.xunmei.common.core.utils.IDHelper;
|
|
|
import com.xunmei.common.core.utils.JacksonUtils;
|
|
|
import com.xunmei.host.iot.service.IIotDeviceInfoService;
|
|
|
import com.xunmei.host.protection.mapper.ProtectionLogMapper;
|
|
|
-import com.xunmei.host.protection.service.IIotAlarmHostService;
|
|
|
-import com.xunmei.host.protection.service.IotAlarmSubsystemService;
|
|
|
+import com.xunmei.host.protection.service.*;
|
|
|
import com.xunmei.host.websocket.constant.WebSocketConstants;
|
|
|
import com.xunmei.host.websocket.dto.WebsocketExecuteReq;
|
|
|
import com.xunmei.host.websocket.dto.WebsocketResult;
|
|
|
@@ -20,6 +19,7 @@ import com.xunmei.host.websocket.service.RouterService;
|
|
|
import com.xunmei.host.websocket.utils.IotServerUtils;
|
|
|
import com.xunmei.host.websocket.utils.WebSocketUtils;
|
|
|
import com.xunmei.system.api.domain.iot.IotDeviceInfo;
|
|
|
+import com.xunmei.system.api.enums.AlarmHostSensorStatus;
|
|
|
import com.xunmei.system.api.enums.ProtectionStatus;
|
|
|
import com.xunmei.system.api.util.LogUtils;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
@@ -28,6 +28,7 @@ import org.springframework.transaction.annotation.Transactional;
|
|
|
import javax.annotation.Resource;
|
|
|
import java.io.Serializable;
|
|
|
import java.time.LocalDateTime;
|
|
|
+import java.time.format.DateTimeFormatter;
|
|
|
import java.util.StringJoiner;
|
|
|
|
|
|
@Service
|
|
|
@@ -40,47 +41,23 @@ public class IotAlarmHostServiceImpl implements IIotAlarmHostService, RouterServ
|
|
|
private IotAlarmSubsystemService subsystemService;
|
|
|
|
|
|
@Resource
|
|
|
- ProtectionLogMapper protectionLogMapper;
|
|
|
+ private IotAlarmDefenceAreaService defenceAreaService;
|
|
|
|
|
|
+ @Resource
|
|
|
+ IIotDefenceAreaDataLogService defenceAreDataLogService;
|
|
|
+ @Resource
|
|
|
+ IIotDefenceAreaAlarmDataService defenceAreAlarmDataService;
|
|
|
+ @Resource
|
|
|
+ IIotDefenceAreaDataService defenceAreaDataService;
|
|
|
|
|
|
- @Transactional(rollbackFor = Exception.class)
|
|
|
- public void changeAlarmHostStatus(WebsocketExecuteReq req) {
|
|
|
- try {
|
|
|
- LogUtils.STATUS_INFO_DEFENCEAREA.info("【iot服务报警主机设备状态变更事件】【iotToken:{}】【msgId:{}】【接收参数:{}】", req.getToken(), req.getId(), JSON.toJSONString(req));
|
|
|
- if (req.getData() != null) {
|
|
|
- JSONObject object = (JSONObject) req.getData();
|
|
|
- String status = object.getString("status");
|
|
|
- String updateTime = object.getString("time");
|
|
|
+ @Resource
|
|
|
+ ProtectionLogMapper protectionLogMapper;
|
|
|
|
|
|
- QueryWrapper<IotDeviceInfo> wrapper = new QueryWrapper<>();
|
|
|
- wrapper.lambda()
|
|
|
- .eq(IotDeviceInfo::getDeviceProduct, req.getProductName())
|
|
|
- .eq(IotDeviceInfo::getDeviceCode, req.getDeviceName())
|
|
|
- .eq(IotDeviceInfo::getIotToken, req.getToken())
|
|
|
- .eq(IotDeviceInfo::getDeleted, 0);
|
|
|
- IotDeviceInfo deviceInfo = iIotDeviceInfoService.getOne(wrapper);
|
|
|
- if (deviceInfo != null) {
|
|
|
- if ("Online".equals(status)) {
|
|
|
- deviceInfo.setNetStatus("1");
|
|
|
- } else if ("Offline".equals(status)) {
|
|
|
- deviceInfo.setNetStatus("2");
|
|
|
- } else {
|
|
|
- deviceInfo.setNetStatus("0");
|
|
|
- }
|
|
|
- iIotDeviceInfoService.updateById(deviceInfo);
|
|
|
- }
|
|
|
- }
|
|
|
- } catch (Exception e) {
|
|
|
- e.printStackTrace();
|
|
|
- LogUtils.STATUS_INFO_DEFENCEAREA.error("处理报警主机设备状态改变事件出错", e);
|
|
|
- throw new RuntimeException(e);
|
|
|
- }
|
|
|
- }
|
|
|
|
|
|
@Transactional(rollbackFor = Exception.class)
|
|
|
public void changeSubSystemStatus(WebsocketExecuteReq req) {
|
|
|
try {
|
|
|
- LogUtils.STATUS_INFO_DEFENCEAREA.info("【iot服务报警主机布撤防状态变更事件】【iotToken:{}】【msgId:{}】【接收参数:{}】", req.getToken(), req.getId(), JSON.toJSONString(req));
|
|
|
+ LogUtils.STATUS_INFO_DEFENCEAREA.info("【报警主机布撤防状态变更事件】【token:{}】【msgId:{}】【接收参数:{}】", req.getToken(), req.getId(), JSON.toJSONString(req));
|
|
|
if (req.getData() != null) {
|
|
|
JSONObject object = (JSONObject) req.getData();
|
|
|
Integer subSystemId = object.getInteger("id");
|
|
|
@@ -121,6 +98,77 @@ public class IotAlarmHostServiceImpl implements IIotAlarmHostService, RouterServ
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ @Transactional(rollbackFor = Exception.class)
|
|
|
+ public void changeAlarmHostSensorStatus(WebsocketExecuteReq req) {
|
|
|
+ try {
|
|
|
+ LogUtils.STATUS_INFO_STATUS_SENSOR.info("【报警主机传感器状态事件】【token:{}】【msgId:{}】【接收参数:{}】", req.getToken(), req.getId(), JSON.toJSONString(req));
|
|
|
+ if (req.getData() != null) {
|
|
|
+ JSONObject object = (JSONObject) req.getData();
|
|
|
+ Integer inputIndex = object.getInteger("index");
|
|
|
+ Integer subSystemId = object.getInteger("subSystemId");
|
|
|
+ Integer moduleAddress = object.getInteger("moduleAddress");
|
|
|
+ String status = object.getString("status");
|
|
|
+
|
|
|
+
|
|
|
+ IotAlarmDefenceArea defenceArea = defenceAreaService.getBySubSystemCodeAndDeviceName(req.getToken(), req.getDeviceName(), String.valueOf(subSystemId), String.valueOf(inputIndex));
|
|
|
+ if (defenceArea != null) {
|
|
|
+ defenceArea.setState(status);
|
|
|
+ defenceArea.setStateText(AlarmHostSensorStatus.getName(status));
|
|
|
+ defenceArea.setUpdateTime(LocalDateTime.now());
|
|
|
+
|
|
|
+ IotAlarmDefenceAreaData defenceAreaData = defenceAreaDataService.findByAreaId(defenceArea.getId());
|
|
|
+ if (null != defenceAreaData){
|
|
|
+ defenceAreaData.setDefenceAreaStatus(defenceArea.getState());
|
|
|
+ defenceAreaData.setUpdateTime(LocalDateTime.now());
|
|
|
+ }else {
|
|
|
+ defenceAreaData = new IotAlarmDefenceAreaData();
|
|
|
+ defenceAreaData.setId(IDHelper.id());
|
|
|
+ defenceAreaData.setAlarmHostCode(defenceArea.getAlarmHostCode());
|
|
|
+ defenceAreaData.setDefenceAreaCode(defenceArea.getSubSystemCode());
|
|
|
+ defenceAreaData.setDefenceAreaIndex(defenceArea.getDefenceAreaIndex());
|
|
|
+ defenceAreaData.setDefenceAreaName(defenceArea.getDefenceAreaName());
|
|
|
+ defenceAreaData.setDefenceAreaStatus(defenceArea.getState());
|
|
|
+ defenceAreaData.setUpdateTime(LocalDateTime.now());
|
|
|
+ defenceAreaData.setOrgId(defenceArea.getOrgId());
|
|
|
+ defenceAreaData.setOrganizationGuid(defenceArea.getOrganizationGuid());
|
|
|
+ defenceAreaData.setOrgName(defenceArea.getOrgName());
|
|
|
+ defenceAreaData.setOrgPath(defenceArea.getOrgPath());
|
|
|
+ defenceAreaData.setCreateTime(LocalDateTime.now());
|
|
|
+ }
|
|
|
+
|
|
|
+ IotAlarmDefenceAreaDataLog dataLog = new IotAlarmDefenceAreaDataLog();
|
|
|
+ BeanHelper.copyProperties(dataLog, defenceAreaData);
|
|
|
+ dataLog.setId(IDHelper.id());
|
|
|
+ dataLog.setDefenceAreaDataId(defenceAreaData.getId());
|
|
|
+
|
|
|
+ //报警是报警状态
|
|
|
+ if (defenceAreaData.getDefenceAreaStatus().equalsIgnoreCase("alarm")) {
|
|
|
+ //把对应设备修改为告警,并且记录告警记录
|
|
|
+ IotAlarmDefenceAreaAlarmData dataAlarm = new IotAlarmDefenceAreaAlarmData();
|
|
|
+ BeanHelper.copyProperties(dataAlarm, defenceAreaData);
|
|
|
+ dataAlarm.setId(IDHelper.id());
|
|
|
+ dataAlarm.setIsdo(0);
|
|
|
+ dataAlarm.setDefenceAreaName(defenceArea.getDefenceAreaName());
|
|
|
+ dataAlarm.setDefenceAreaStatus(defenceArea.getState());
|
|
|
+ dataAlarm.setDefenceAreaIndex(defenceArea.getDefenceAreaIndex());
|
|
|
+ dataAlarm.setDefenceAreaId(defenceArea.getId());
|
|
|
+ defenceAreAlarmDataService.save(dataAlarm);
|
|
|
+ }
|
|
|
+ defenceAreaDataService.saveOrUpdate(defenceAreaData);
|
|
|
+ defenceAreDataLogService.save(dataLog);
|
|
|
+ defenceAreaService.updateById(defenceArea);
|
|
|
+ }else {
|
|
|
+ LogUtils.STATUS_INFO_STATUS_SENSOR.info("【报警主机传感器状态事件,未找到对应传感器】【token:{}】【设备名称:{}】【子系统id:{}】【传感器index:{}】",
|
|
|
+ req.getToken(), req.getDeviceName(),subSystemId,inputIndex);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ } catch (Exception e) {
|
|
|
+ e.printStackTrace();
|
|
|
+ LogUtils.STATUS_INFO_STATUS_SENSOR.error("处理报警主机传感器状态事件出错", e);
|
|
|
+ throw new RuntimeException(e);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
@Override
|
|
|
public void subSystemControl(Serializable id, boolean isArm) {
|
|
|
try {
|
|
|
@@ -177,10 +225,8 @@ public class IotAlarmHostServiceImpl implements IIotAlarmHostService, RouterServ
|
|
|
@Override
|
|
|
public String routerKey() {
|
|
|
StringJoiner result = new StringJoiner(",");
|
|
|
- result.add(WebSocketConstants.ON_LINE_STATUS);
|
|
|
result.add(WebSocketConstants.SUB_SYSTEM_STATUS);
|
|
|
- //报警防区状态暂时不接
|
|
|
- //result.add(WebSocketConstants.INPUT_STATUS);
|
|
|
+ result.add(WebSocketConstants.SENSOR_STATUS);
|
|
|
return result.toString();
|
|
|
}
|
|
|
|
|
|
@@ -188,8 +234,8 @@ public class IotAlarmHostServiceImpl implements IIotAlarmHostService, RouterServ
|
|
|
@Transactional(rollbackFor = Exception.class)
|
|
|
public Object execute(WebsocketExecuteReq req) {
|
|
|
try {
|
|
|
- if (WebSocketConstants.ON_LINE_STATUS.equals(req.getEvent())) {
|
|
|
- changeAlarmHostStatus(req);
|
|
|
+ if (WebSocketConstants.SENSOR_STATUS.equals(req.getEvent())) {
|
|
|
+ changeAlarmHostSensorStatus(req);
|
|
|
} else if (WebSocketConstants.SUB_SYSTEM_STATUS.equals(req.getEvent())) {
|
|
|
changeSubSystemStatus(req);
|
|
|
}
|