| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159 |
- package com.waterquality.service;
-
- import com.waterquality.entity.Alarm;
- import com.waterquality.entity.WaterQualityStation;
- import com.waterquality.repository.AlarmRepository;
- import lombok.RequiredArgsConstructor;
- import lombok.extern.slf4j.Slf4j;
- import org.springframework.stereotype.Service;
- import org.springframework.transaction.annotation.Transactional;
-
- import java.time.LocalDateTime;
- import java.util.List;
-
- @Slf4j
- @Service
- @RequiredArgsConstructor
- public class AlarmServiceImpl implements AlarmService {
-
- private final AlarmRepository alarmRepository;
-
- @Override
- @Transactional
- public Alarm createAlarm(Alarm alarm) {
- log.info("Creating alarm for station: {}, type: {}, level: {}",
- alarm.getStation().getStationName(), alarm.getAlarmType(), alarm.getAlarmLevel());
-
- if (alarm.getAlarmType() == null) {
- throw new IllegalArgumentException("Alarm type is required");
- }
- if (alarm.getAlarmLevel() == null) {
- throw new IllegalArgumentException("Alarm level is required");
- }
- if (alarm.getStation() == null) {
- throw new IllegalArgumentException("Station is required");
- }
- if (alarm.getAlarmMessage() == null) {
- throw new IllegalArgumentException("Alarm message is required");
- }
-
- // 设置默认报警时间为当前时间
- if (alarm.getAlarmTime() == null) {
- alarm.setAlarmTime(LocalDateTime.now());
- }
-
- alarm.setStatus("ACTIVE");
-
- return alarmRepository.save(alarm);
- }
-
- @Override
- @Transactional
- public Alarm acknowledgeAlarm(Long id, String operator, String notes) {
- log.info("Acknowledging alarm: {}", id);
-
- Alarm alarm = alarmRepository.findById(id)
- .orElseThrow(() -> new RuntimeException("Alarm not found: " + id));
-
- if (!"ACTIVE".equals(alarm.getStatus())) {
- throw new IllegalStateException("Can only acknowledge active alarms");
- }
-
- alarm.setStatus("ACKNOWLEDGED");
- alarm.setAcknowledgeTime(LocalDateTime.now());
- alarm.setOperator(operator);
- alarm.setAcknowledgeNotes(notes);
- alarm.setUpdatedAt(LocalDateTime.now());
-
- return alarmRepository.save(alarm);
- }
-
- @Override
- @Transactional
- public Alarm resolveAlarm(Long id, String operator, String notes) {
- log.info("Resolving alarm: {}", id);
-
- Alarm alarm = alarmRepository.findById(id)
- .orElseThrow(() -> new RuntimeException("Alarm not found: " + id));
-
- if (!"ACKNOWLEDGED".equals(alarm.getStatus())) {
- throw new IllegalStateException("Can only resolve acknowledged alarms");
- }
-
- alarm.setStatus("RESOLVED");
- alarm.setResolveTime(LocalDateTime.now());
- alarm.setOperator(operator);
- alarm.setResolveNotes(notes);
- alarm.setUpdatedAt(LocalDateTime.now());
-
- return alarmRepository.save(alarm);
- }
-
- @Override
- @Transactional
- public void deleteAlarm(Long id) {
- log.info("Deleting alarm: {}", id);
-
- Alarm alarm = alarmRepository.findById(id)
- .orElseThrow(() -> new RuntimeException("Alarm not found: " + id));
-
- alarm.setIsActive(false);
- alarm.setUpdatedAt(LocalDateTime.now());
- alarmRepository.save(alarm);
- }
-
- @Override
- public List<Alarm> getAllActiveAlarms() {
- log.info("Getting all active alarms");
- return alarmRepository.findByIsActiveTrue();
- }
-
- @Override
- public List<Alarm> getAlarmsByStationId(Long stationId) {
- log.info("Getting alarms for station ID: {}", stationId);
- return alarmRepository.findByStationId(stationId);
- }
-
- @Override
- public List<Alarm> getAlarmsByLevel(String alarmLevel) {
- log.info("Getting alarms by level: {}", alarmLevel);
- return alarmRepository.findByAlarmLevelAndIsActiveTrue(alarmLevel);
- }
-
- @Override
- public List<Alarm> getAlarmsByType(String alarmType) {
- log.info("Getting alarms by type: {}", alarmType);
- return alarmRepository.findByAlarmTypeAndIsActiveTrue(alarmType);
- }
-
- @Override
- public List<Alarm> getAlarmsByStatus(String status) {
- log.info("Getting alarms by status: {}", status);
- return alarmRepository.findByStatus(status);
- }
-
- @Override
- public List<Alarm> getAlarmsByTimeRange(LocalDateTime startTime, LocalDateTime endTime) {
- log.info("Getting alarms from {} to {}", startTime, endTime);
- return alarmRepository.findByAlarmTimeBetween(startTime, endTime);
- }
-
- @Override
- public List<Alarm> getUnacknowledgedAlarms() {
- log.info("Getting unacknowledged alarms");
- return alarmRepository.findUnacknowledgedAlarms();
- }
-
- @Override
- public List<Alarm> getUnresolvedAlarms() {
- log.info("Getting unresolved alarms");
- return alarmRepository.findUnresolvedAlarms();
- }
-
- @Override
- public Alarm getAlarmById(Long id) {
- log.info("Getting alarm by id: {}", id);
- return alarmRepository.findById(id)
- .orElseThrow(() -> new RuntimeException("Alarm not found: " + id));
- }
- }
|