From ec9536b85d63d0e00ccc1cec510744b01d2b8e56 Mon Sep 17 00:00:00 2001 From: wanglei <3085637232@qq.com> Date: Sun, 7 Dec 2025 16:11:04 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/DeviceStatusServiceImpl.java | 111 ++++++++++++++++++ 1 file changed, 111 insertions(+) create mode 100644 src/main/java/com/campus/water/service/DeviceStatusServiceImpl.java diff --git a/src/main/java/com/campus/water/service/DeviceStatusServiceImpl.java b/src/main/java/com/campus/water/service/DeviceStatusServiceImpl.java new file mode 100644 index 0000000..a8bf028 --- /dev/null +++ b/src/main/java/com/campus/water/service/DeviceStatusServiceImpl.java @@ -0,0 +1,111 @@ +package com.campus.water.service; + +import com.campus.water.entity.Device; +import com.campus.water.entity.dto.request.DeviceStatusUpdateRequest; +import com.campus.water.mapper.DeviceRepository; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; + +import java.util.List; +import java.util.Map; + +// 核心:添加@Service注解,让Spring注册这个实现类为Bean +@Service +@RequiredArgsConstructor // 注入Repository等依赖 +@Slf4j +public class DeviceStatusServiceImpl implements DeviceStatusService { + + // 注入设备仓库(根据你的业务逻辑补充依赖) + private final DeviceRepository deviceRepository; + + // 实现接口的所有方法(以下是示例实现,你需根据业务逻辑完善) + @Override + public boolean updateDeviceStatus(DeviceStatusUpdateRequest request) { + // 示例逻辑:根据request更新设备状态 + Device device = deviceRepository.findById(request.getDeviceId()).orElse(null); + if (device == null) { + log.warn("设备不存在 | 设备ID:{}", request.getDeviceId()); + return false; + } + device.setStatus(request.getStatus()); + device.setRemark(request.getRemark()); + deviceRepository.save(device); + return true; + } + + @Override + public boolean markDeviceOnline(String deviceId) { + // 实现标记设备在线的逻辑 + Device device = deviceRepository.findById(deviceId).orElse(null); + if (device == null) return false; + device.setStatus(Device.DeviceStatus.valueOf("online")); // 对应你的Device枚举/字符串 + deviceRepository.save(device); + return true; + } + + @Override + public boolean markDeviceOffline(String deviceId, String reason) { + // 实现标记设备离线的逻辑 + Device device = deviceRepository.findById(deviceId).orElse(null); + if (device == null) return false; + device.setStatus(Device.DeviceStatus.valueOf("offline")); + device.setRemark(reason); + deviceRepository.save(device); + return true; + } + + @Override + public boolean markDeviceFault(String deviceId, String faultType, String description) { + // 实现标记设备故障的逻辑 + Device device = deviceRepository.findById(deviceId).orElse(null); + if (device == null) return false; + device.setStatus(Device.DeviceStatus.valueOf("fault")); + device.setRemark("故障类型:" + faultType + ",描述:" + description); + deviceRepository.save(device); + return true; + } + + @Override + public boolean batchUpdateDeviceStatus(List deviceIds, String status, String remark) { + // 实现批量更新设备状态的逻辑 + List devices = deviceRepository.findAllById(deviceIds); + devices.forEach(device -> { + device.setStatus(Device.DeviceStatus.valueOf(status)); + device.setRemark(remark); + }); + deviceRepository.saveAll(devices); + return true; + } + + @Override + public List getDevicesByStatus(String status, String areaId, String deviceType) { + // 实现按状态/区域/设备类型查询设备的逻辑 + // 可调用DeviceRepository的自定义查询方法 + return deviceRepository.findByStatusAndAreaIdAndDeviceType(status, areaId, deviceType); + } + + @Override + public Map getDeviceStatusCount(String areaId, String deviceType) { + // 实现统计各状态设备数量的逻辑 + // 示例:返回online/offline/fault的数量 + return Map.of( + "online", deviceRepository.countByStatusAndAreaIdAndDeviceType("online", areaId, deviceType), + "offline", deviceRepository.countByStatusAndAreaIdAndDeviceType("offline", areaId, deviceType), + "fault", deviceRepository.countByStatusAndAreaIdAndDeviceType("fault", areaId, deviceType) + ); + } + + @Override + public List getOfflineDevicesExceedThreshold(Integer thresholdMinutes, String areaId) { + // 实现获取超过阈值的离线设备的逻辑 + // 需结合设备最后心跳时间判断 + return List.of(); // 临时返回空,需完善 + } + + @Override + public void autoDetectOfflineDevices(Integer thresholdMinutes) { + // 实现自动检测离线设备的逻辑 + // 定时任务/扫描逻辑,需完善 + } +} \ No newline at end of file -- 2.34.1