diff --git a/src/main/java/com/zjyr/beidouservice/constenum/DeviceAlarmStatusEnum.java b/src/main/java/com/zjyr/beidouservice/constenum/DeviceAlarmStatusEnum.java new file mode 100644 index 0000000..1059f8a --- /dev/null +++ b/src/main/java/com/zjyr/beidouservice/constenum/DeviceAlarmStatusEnum.java @@ -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; +} diff --git a/src/main/java/com/zjyr/beidouservice/mapper/DeviceMapper.java b/src/main/java/com/zjyr/beidouservice/mapper/DeviceMapper.java index 536744d..dc2bbcd 100644 --- a/src/main/java/com/zjyr/beidouservice/mapper/DeviceMapper.java +++ b/src/main/java/com/zjyr/beidouservice/mapper/DeviceMapper.java @@ -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 alarmingDeviceIds, @Param("status") Integer code); } diff --git a/src/main/java/com/zjyr/beidouservice/pojo/dataobject/DeviceDO.java b/src/main/java/com/zjyr/beidouservice/pojo/dataobject/DeviceDO.java index c368388..2972da2 100644 --- a/src/main/java/com/zjyr/beidouservice/pojo/dataobject/DeviceDO.java +++ b/src/main/java/com/zjyr/beidouservice/pojo/dataobject/DeviceDO.java @@ -99,6 +99,10 @@ public class DeviceDO { * 警报器功率 */ private Integer power; + /** + * 告警状态 + */ + private Integer alarmStatus; /** * 创建时间 */ diff --git a/src/main/java/com/zjyr/beidouservice/service/DeviceService.java b/src/main/java/com/zjyr/beidouservice/service/DeviceService.java index dff2a95..a797a6a 100644 --- a/src/main/java/com/zjyr/beidouservice/service/DeviceService.java +++ b/src/main/java/com/zjyr/beidouservice/service/DeviceService.java @@ -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 deviceTaskDOS); + } diff --git a/src/main/java/com/zjyr/beidouservice/service/impl/AlarmTaskServiceImpl.java b/src/main/java/com/zjyr/beidouservice/service/impl/AlarmTaskServiceImpl.java index 491956d..90b4b39 100644 --- a/src/main/java/com/zjyr/beidouservice/service/impl/AlarmTaskServiceImpl.java +++ b/src/main/java/com/zjyr/beidouservice/service/impl/AlarmTaskServiceImpl.java @@ -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 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(); } diff --git a/src/main/java/com/zjyr/beidouservice/service/impl/DeviceServiceImpl.java b/src/main/java/com/zjyr/beidouservice/service/impl/DeviceServiceImpl.java index 31a933a..a405b11 100644 --- a/src/main/java/com/zjyr/beidouservice/service/impl/DeviceServiceImpl.java +++ b/src/main/java/com/zjyr/beidouservice/service/impl/DeviceServiceImpl.java @@ -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 deviceTaskDOS) { + // 全部有告警任务的设备id + Set deviceIdSet = deviceTaskDOS.stream().map(AlarmDeviceTaskDO::getDeviceId).collect(Collectors.toSet()); + // 告警状态为执行中的设备id + Set 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()); + } + } } diff --git a/src/main/java/com/zjyr/beidouservice/task/AlarmStatusTask.java b/src/main/java/com/zjyr/beidouservice/task/AlarmStatusTask.java index 0a420aa..0e41bd2 100644 --- a/src/main/java/com/zjyr/beidouservice/task/AlarmStatusTask.java +++ b/src/main/java/com/zjyr/beidouservice/task/AlarmStatusTask.java @@ -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); } } diff --git a/src/main/resources/mappers/DeviceMapper.xml b/src/main/resources/mappers/DeviceMapper.xml index 739a636..47ddb10 100644 --- a/src/main/resources/mappers/DeviceMapper.xml +++ b/src/main/resources/mappers/DeviceMapper.xml @@ -54,5 +54,14 @@ where device_id = #{deviceId} + + update device + set alarm_status = #{status} + where device_id in + + #{item} + + + \ No newline at end of file