智慧水务管理系统 - 精河县供水工程综合管理平台

AlarmServiceImpl.java 5.3KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159
  1. package com.waterquality.service;
  2. import com.waterquality.entity.Alarm;
  3. import com.waterquality.entity.WaterQualityStation;
  4. import com.waterquality.repository.AlarmRepository;
  5. import lombok.RequiredArgsConstructor;
  6. import lombok.extern.slf4j.Slf4j;
  7. import org.springframework.stereotype.Service;
  8. import org.springframework.transaction.annotation.Transactional;
  9. import java.time.LocalDateTime;
  10. import java.util.List;
  11. @Slf4j
  12. @Service
  13. @RequiredArgsConstructor
  14. public class AlarmServiceImpl implements AlarmService {
  15. private final AlarmRepository alarmRepository;
  16. @Override
  17. @Transactional
  18. public Alarm createAlarm(Alarm alarm) {
  19. log.info("Creating alarm for station: {}, type: {}, level: {}",
  20. alarm.getStation().getStationName(), alarm.getAlarmType(), alarm.getAlarmLevel());
  21. if (alarm.getAlarmType() == null) {
  22. throw new IllegalArgumentException("Alarm type is required");
  23. }
  24. if (alarm.getAlarmLevel() == null) {
  25. throw new IllegalArgumentException("Alarm level is required");
  26. }
  27. if (alarm.getStation() == null) {
  28. throw new IllegalArgumentException("Station is required");
  29. }
  30. if (alarm.getAlarmMessage() == null) {
  31. throw new IllegalArgumentException("Alarm message is required");
  32. }
  33. // 设置默认报警时间为当前时间
  34. if (alarm.getAlarmTime() == null) {
  35. alarm.setAlarmTime(LocalDateTime.now());
  36. }
  37. alarm.setStatus("ACTIVE");
  38. return alarmRepository.save(alarm);
  39. }
  40. @Override
  41. @Transactional
  42. public Alarm acknowledgeAlarm(Long id, String operator, String notes) {
  43. log.info("Acknowledging alarm: {}", id);
  44. Alarm alarm = alarmRepository.findById(id)
  45. .orElseThrow(() -> new RuntimeException("Alarm not found: " + id));
  46. if (!"ACTIVE".equals(alarm.getStatus())) {
  47. throw new IllegalStateException("Can only acknowledge active alarms");
  48. }
  49. alarm.setStatus("ACKNOWLEDGED");
  50. alarm.setAcknowledgeTime(LocalDateTime.now());
  51. alarm.setOperator(operator);
  52. alarm.setAcknowledgeNotes(notes);
  53. alarm.setUpdatedAt(LocalDateTime.now());
  54. return alarmRepository.save(alarm);
  55. }
  56. @Override
  57. @Transactional
  58. public Alarm resolveAlarm(Long id, String operator, String notes) {
  59. log.info("Resolving alarm: {}", id);
  60. Alarm alarm = alarmRepository.findById(id)
  61. .orElseThrow(() -> new RuntimeException("Alarm not found: " + id));
  62. if (!"ACKNOWLEDGED".equals(alarm.getStatus())) {
  63. throw new IllegalStateException("Can only resolve acknowledged alarms");
  64. }
  65. alarm.setStatus("RESOLVED");
  66. alarm.setResolveTime(LocalDateTime.now());
  67. alarm.setOperator(operator);
  68. alarm.setResolveNotes(notes);
  69. alarm.setUpdatedAt(LocalDateTime.now());
  70. return alarmRepository.save(alarm);
  71. }
  72. @Override
  73. @Transactional
  74. public void deleteAlarm(Long id) {
  75. log.info("Deleting alarm: {}", id);
  76. Alarm alarm = alarmRepository.findById(id)
  77. .orElseThrow(() -> new RuntimeException("Alarm not found: " + id));
  78. alarm.setIsActive(false);
  79. alarm.setUpdatedAt(LocalDateTime.now());
  80. alarmRepository.save(alarm);
  81. }
  82. @Override
  83. public List<Alarm> getAllActiveAlarms() {
  84. log.info("Getting all active alarms");
  85. return alarmRepository.findByIsActiveTrue();
  86. }
  87. @Override
  88. public List<Alarm> getAlarmsByStationId(Long stationId) {
  89. log.info("Getting alarms for station ID: {}", stationId);
  90. return alarmRepository.findByStationId(stationId);
  91. }
  92. @Override
  93. public List<Alarm> getAlarmsByLevel(String alarmLevel) {
  94. log.info("Getting alarms by level: {}", alarmLevel);
  95. return alarmRepository.findByAlarmLevelAndIsActiveTrue(alarmLevel);
  96. }
  97. @Override
  98. public List<Alarm> getAlarmsByType(String alarmType) {
  99. log.info("Getting alarms by type: {}", alarmType);
  100. return alarmRepository.findByAlarmTypeAndIsActiveTrue(alarmType);
  101. }
  102. @Override
  103. public List<Alarm> getAlarmsByStatus(String status) {
  104. log.info("Getting alarms by status: {}", status);
  105. return alarmRepository.findByStatus(status);
  106. }
  107. @Override
  108. public List<Alarm> getAlarmsByTimeRange(LocalDateTime startTime, LocalDateTime endTime) {
  109. log.info("Getting alarms from {} to {}", startTime, endTime);
  110. return alarmRepository.findByAlarmTimeBetween(startTime, endTime);
  111. }
  112. @Override
  113. public List<Alarm> getUnacknowledgedAlarms() {
  114. log.info("Getting unacknowledged alarms");
  115. return alarmRepository.findUnacknowledgedAlarms();
  116. }
  117. @Override
  118. public List<Alarm> getUnresolvedAlarms() {
  119. log.info("Getting unresolved alarms");
  120. return alarmRepository.findUnresolvedAlarms();
  121. }
  122. @Override
  123. public Alarm getAlarmById(Long id) {
  124. log.info("Getting alarm by id: {}", id);
  125. return alarmRepository.findById(id)
  126. .orElseThrow(() -> new RuntimeException("Alarm not found: " + id));
  127. }
  128. }