设备增加同步告警状态

This commit is contained in:
chenlinghy 2023-08-25 23:41:58 +08:00
parent 82b7fb036d
commit 658c567917
8 changed files with 93 additions and 13 deletions

View File

@ -0,0 +1,17 @@
package com.zjyr.beidouservice.constenum;
import com.fasterxml.jackson.annotation.JsonValue;
import lombok.AllArgsConstructor;
import lombok.Getter;
@AllArgsConstructor
@Getter
public enum DeviceAlarmStatusEnum {
INIT(0, "初始化"),
ALARMING(1, "告警中"),
FINAL_STATE(2, "告警终态"),
;
@JsonValue
private final Integer code;
private final String msg;
}

View File

@ -7,6 +7,7 @@ import org.apache.ibatis.annotations.Param;
import java.util.List;
import java.util.Set;
@Mapper
public interface DeviceMapper {
@ -15,5 +16,7 @@ public interface DeviceMapper {
DeviceDO selectDeviceByDeviceId(@Param("deviceId") Long deviceId);
void batchUpdateDeviceAlarmStatus(@Param("ids") Set<Integer> alarmingDeviceIds, @Param("status") Integer code);
}

View File

@ -99,6 +99,10 @@ public class DeviceDO {
* 警报器功率
*/
private Integer power;
/**
* 告警状态
*/
private Integer alarmStatus;
/**
* 创建时间
*/

View File

@ -1,6 +1,7 @@
package com.zjyr.beidouservice.service;
import com.zjyr.beidouservice.pojo.dataobject.AlarmDeviceTaskDO;
import com.zjyr.beidouservice.pojo.dto.DeviceReqDTO;
import com.zjyr.beidouservice.pojo.dto.DeviceRespDTO;
import com.zjyr.beidouservice.pojo.dto.DeviceSearchDTO;
@ -22,4 +23,11 @@ public interface DeviceService {
*/
DeviceRespDTO getDeviceByDeviceId(DeviceSearchDTO deviceSearchDTO);
/**
* 根据设备任务更新设备告警状态
*
* @param deviceTaskDOS
*/
void refreshDeviceAlarmStatus(List<AlarmDeviceTaskDO> deviceTaskDOS);
}

View File

@ -1,5 +1,8 @@
package com.zjyr.beidouservice.service.impl;
import com.zjyr.beidouservice.common.impl.AlarmControlTypeName;
import com.zjyr.beidouservice.common.impl.AlarmModeName;
import com.zjyr.beidouservice.common.impl.AlarmTypeName;
import com.zjyr.beidouservice.common.impl.SensorControlTunnelName;
import com.zjyr.beidouservice.common.impl.TaskStatusName;
import com.zjyr.beidouservice.constenum.ApprovalStatusEnum;
@ -21,6 +24,7 @@ import com.zjyr.beidouservice.pojo.dto.DeviceInfoDTO;
import com.zjyr.beidouservice.pojo.dto.task.AlarmTaskReqDTO;
import com.zjyr.beidouservice.service.AdapterProtocolService;
import com.zjyr.beidouservice.service.AlarmTaskService;
import com.zjyr.beidouservice.service.DeviceService;
import jakarta.annotation.Resource;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
@ -39,6 +43,8 @@ import java.util.Objects;
public class AlarmTaskServiceImpl implements AlarmTaskService {
@Resource
AdapterProtocolService adapterProtocolService;
@Resource
DeviceService deviceService;
@Resource
AlarmTaskMapper alarmTaskMapper;
@ -70,19 +76,6 @@ public class AlarmTaskServiceImpl implements AlarmTaskService {
//生成规则为"JL"+"当前年月日"+"4位自增ID"
String taskId = generateRecordNumber();
//执行控制任,默认只有一种通道方式
// adapterProtocolService.createSensorControlProtocol(
// Integer.parseInt(taskId),
// AlarmModeName.getByCode(alarmTaskReqDTO.getAlarmMode()),
// AlarmControlTypeName.getByCode(alarmTaskReqDTO.getAlarmType()),
// AlarmTypeName.getByCode(alarmTaskReqDTO.getAlarmKind()),
// alarmTaskReqDTO.getControlChannel(),
// alarmTaskReqDTO.getSendTime(),
// deviceInfo.getCityCodes(),
// deviceInfo.getCountyCodes(),
// deviceInfo.getDeviceIds()
// );
AlarmTaskDO alarmTaskDO = AlarmTaskDO.builder()
.taskIdStr(taskId)
.alarmType(alarmTaskReqDTO.getAlarmType())
@ -100,6 +93,21 @@ public class AlarmTaskServiceImpl implements AlarmTaskService {
List<AlarmDeviceTaskDO> alarmDeviceTaskDOS = getAlarmDeviceTaskDOS(alarmTaskReqDTO, deviceInfo, generatedId);
alarmDeviceTaskMapper.addAlarmDevTaskInfoList(alarmDeviceTaskDOS);
// 刷新设备告警状态
deviceService.refreshDeviceAlarmStatus(alarmDeviceTaskDOS);
//执行控制任,默认只有一种通道方式
adapterProtocolService.createSensorControlProtocol(
generatedId.intValue(),
AlarmModeName.getByCode(alarmTaskReqDTO.getAlarmMode()),
AlarmControlTypeName.getByCode(alarmTaskReqDTO.getAlarmType()),
AlarmTypeName.getByCode(alarmTaskReqDTO.getAlarmKind()),
alarmTaskReqDTO.getControlChannel(),
alarmTaskReqDTO.getSendTime(),
deviceInfo.getCityCodes(),
deviceInfo.getCountyCodes(),
deviceInfo.getDeviceIds()
);
return MyResp.build();
}

View File

@ -1,7 +1,10 @@
package com.zjyr.beidouservice.service.impl;
import com.zjyr.beidouservice.common.impl.TaskStatusName;
import com.zjyr.beidouservice.constenum.DeviceAlarmStatusEnum;
import com.zjyr.beidouservice.mapper.DeviceMapper;
import com.zjyr.beidouservice.pojo.dataobject.AlarmDeviceTaskDO;
import com.zjyr.beidouservice.pojo.dataobject.DeviceDO;
import com.zjyr.beidouservice.pojo.dto.DeviceByLocationDTO;
import com.zjyr.beidouservice.pojo.dto.DeviceReqDTO;
@ -14,6 +17,8 @@ import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.List;
import java.util.Set;
import java.util.stream.Collectors;
@Service
@Slf4j
@ -82,4 +87,25 @@ public class DeviceServiceImpl implements DeviceService {
return respDTO;
}
@Override
public void refreshDeviceAlarmStatus(List<AlarmDeviceTaskDO> deviceTaskDOS) {
// 全部有告警任务的设备id
Set<Integer> deviceIdSet = deviceTaskDOS.stream().map(AlarmDeviceTaskDO::getDeviceId).collect(Collectors.toSet());
// 告警状态为执行中的设备id
Set<Integer> alarmingDeviceIds = deviceTaskDOS.stream()
.filter(s -> TaskStatusName.TASK_EXECUTING.getValue().equals(s.getStatus()))
.map(AlarmDeviceTaskDO::getDeviceId)
.collect(Collectors.toSet());
// 去掉执行中的剩下的需要更新为终态
deviceIdSet.removeAll(alarmingDeviceIds);
if (!alarmingDeviceIds.isEmpty()) {
deviceMapper.batchUpdateDeviceAlarmStatus(alarmingDeviceIds, DeviceAlarmStatusEnum.ALARMING.getCode());
}
if (!deviceIdSet.isEmpty()) {
deviceMapper.batchUpdateDeviceAlarmStatus(deviceIdSet, DeviceAlarmStatusEnum.FINAL_STATE.getCode());
}
}
}

View File

@ -4,6 +4,7 @@ import com.zjyr.beidouservice.common.impl.TaskStatusName;
import com.zjyr.beidouservice.mapper.AlarmDeviceTaskMapper;
import com.zjyr.beidouservice.pojo.dataobject.AlarmDeviceTaskDO;
import com.zjyr.beidouservice.pojo.po.AlarmTaskResult;
import com.zjyr.beidouservice.service.DeviceService;
import com.zjyr.beidouservice.service.SensorTaskService;
import com.zjyr.beidouservice.utils.DateUtil;
import jakarta.annotation.Resource;
@ -27,6 +28,8 @@ public class AlarmStatusTask {
@Resource
SensorTaskService sensorTaskService;
@Resource
DeviceService deviceService;
@Resource
AlarmDeviceTaskMapper alarmDeviceTaskMapper;
@ -77,5 +80,7 @@ public class AlarmStatusTask {
// 结果入库
alarmDeviceTaskMapper.batchUpdate(deviceTaskList);
// 刷新设备状态
deviceService.refreshDeviceAlarmStatus(deviceTaskList);
}
}

View File

@ -54,5 +54,14 @@
where device_id = #{deviceId}
</select>
<update id="batchUpdateDeviceAlarmStatus">
update device
set alarm_status = #{status}
where device_id in
<foreach collection="ids" item="item" separator="," open="(" close=")">
#{item}
</foreach>
</update>
</mapper>