Merge remote-tracking branch 'origin/develop' into luoyuehang_branch

pull/170/head
luoyuehang 4 months ago
commit 9d4ed52fab

@ -24,8 +24,8 @@ public class Device {
@Column(name = "device_type", length = 50) @Column(name = "device_type", length = 50)
private DeviceType deviceType; private DeviceType deviceType;
@Column(name = "area_name", length = 36) @Column(name = "area_id", length = 36)
private String areaName; private String areaId;
@Column(name = "install_location", length = 200) @Column(name = "install_location", length = 200)
private String installLocation; private String installLocation;

@ -56,6 +56,4 @@ public interface AreaRepository extends JpaRepository<Area, String> {
*/ */
List<Area> findByAreaTypeAndManagerIsNullOrManagerEquals(Area.AreaType areaType, String emptyStr); List<Area> findByAreaTypeAndManagerIsNullOrManagerEquals(Area.AreaType areaType, String emptyStr);
Optional<Area> findByAreaName(String areaName);
} }

@ -9,7 +9,7 @@ import java.util.List;
@Repository @Repository
public interface DeviceRepository extends JpaRepository<Device, String> { public interface DeviceRepository extends JpaRepository<Device, String> {
// 根据区域名称查询设备 // 根据区域名称查询设备
List<Device> findByAreaName(String areaName); List<Device> findByAreaId(String areaId);
// 根据设备类型(枚举)查询 // 根据设备类型(枚举)查询
List<Device> findByDeviceType(Device.DeviceType deviceType); List<Device> findByDeviceType(Device.DeviceType deviceType);
@ -18,7 +18,7 @@ public interface DeviceRepository extends JpaRepository<Device, String> {
List<Device> findByStatus(Device.DeviceStatus status); List<Device> findByStatus(Device.DeviceStatus status);
// 按区域和设备类型查询 // 按区域和设备类型查询
List<Device> findByAreaNameAndDeviceType(String areaName, Device.DeviceType deviceType); List<Device> findByAreaIdAndDeviceType(String areaId, Device.DeviceType deviceType);
// 按安装位置模糊查询 // 按安装位置模糊查询
List<Device> findByInstallLocationContaining(String location); List<Device> findByInstallLocationContaining(String location);

@ -1,11 +1,9 @@
package com.campus.water.service; package com.campus.water.service;
import com.campus.water.entity.Alert; import com.campus.water.entity.Alert;
import com.campus.water.entity.Area;
import com.campus.water.entity.Device; import com.campus.water.entity.Device;
import com.campus.water.entity.WorkOrder; import com.campus.water.entity.WorkOrder;
import com.campus.water.mapper.AlertRepository; import com.campus.water.mapper.AlertRepository;
import com.campus.water.mapper.AreaRepository;
import com.campus.water.mapper.DeviceRepository; import com.campus.water.mapper.DeviceRepository;
import com.campus.water.mapper.WorkOrderRepository; import com.campus.water.mapper.WorkOrderRepository;
import com.campus.water.model.WaterMakerSensorData; import com.campus.water.model.WaterMakerSensorData;
@ -46,7 +44,6 @@ public class AlertTriggerService {
private final AlertRepository alertRepository; private final AlertRepository alertRepository;
private final WorkOrderRepository workOrderRepository; private final WorkOrderRepository workOrderRepository;
private final DeviceRepository deviceRepository; private final DeviceRepository deviceRepository;
private final AreaRepository areaRepository;
/** /**
* *
@ -167,11 +164,8 @@ public class AlertTriggerService {
private void createAlertAndWorkOrder(String deviceId, String alertType, private void createAlertAndWorkOrder(String deviceId, String alertType,
Alert.AlertLevel level, String message, Alert.AlertLevel level, String message,
WorkOrder.OrderType orderType) { WorkOrder.OrderType orderType) {
// 1. 获取设备的片区名称 // 获取设备所在区域(用于工单分配)
String areaName = getDeviceAreaName(deviceId); String areaId = getDeviceAreaId(deviceId);
// 2. 关键步骤通过片区名称匹配获取对应的areaId保留原有area_id逻辑
String areaId = getAreaIdByAreaName(areaName);
// 1. 创建告警记录 // 1. 创建告警记录
Alert alert = new Alert(); Alert alert = new Alert();
@ -225,26 +219,20 @@ public class AlertTriggerService {
/** /**
* ID * ID
*/ */
/** public String getDeviceAreaId(String deviceId) {
* Device try {
*/ Optional<Device> deviceOpt = deviceRepository.findById(deviceId);
private String getDeviceAreaName(String deviceId) { String areaId = deviceOpt.map(Device::getAreaId).orElse(null);
Device device = deviceRepository.findById(deviceId) // 空值兜底null/空字符串→unknown
.orElseThrow(() -> new RuntimeException("设备不存在:" + deviceId)); if (areaId == null || areaId.trim().isEmpty()) {
return device.getAreaName(); // 从Device获取areaName已修改后的字段 areaId = "unknown";
} log.warn("设备{}的area_id为空/设备不存在兜底为unknown", deviceId);
}
/** return areaId;
* - areaId } catch (Exception e) { // 捕获所有数据库异常
*/ log.error("获取设备{}的area_id失败数据库异常", deviceId, e);
private String getAreaIdByAreaName(String areaName) { return "unknown"; // 异常时兜底
if (areaName == null || areaName.trim().isEmpty()) {
throw new RuntimeException("片区名称不能为空无法匹配片区ID");
} }
// 通过片区名称查询片区信息获取对应的areaId
Area area = areaRepository.findByAreaName(areaName)
.orElseThrow(() -> new RuntimeException("未查询到对应片区ID片区名称" + areaName));
return area.getAreaId(); // 返回原有保留的areaId
} }
/** /**
* IDWO++ * IDWO++

@ -94,11 +94,11 @@ public class DeviceService {
/** /**
* *
*/ */
public List<Device> queryDevices(String areaName, DeviceType deviceType, DeviceStatus status) { public List<Device> queryDevices(String areaId, DeviceType deviceType, DeviceStatus status) {
if (areaName != null && deviceType != null) { if (areaId != null && deviceType != null) {
return deviceRepository.findByAreaNameAndDeviceType(areaName, deviceType); return deviceRepository.findByAreaIdAndDeviceType(areaId, deviceType);
} else if (areaName != null) { } else if (areaId != null) {
return deviceRepository.findByAreaName (areaName); return deviceRepository.findByAreaId (areaId);
} else if (deviceType != null) { } else if (deviceType != null) {
return deviceRepository.findByDeviceType(deviceType); return deviceRepository.findByDeviceType(deviceType);
} else if (status != null) { } else if (status != null) {
@ -111,28 +111,28 @@ public class DeviceService {
/** /**
* *
*/ */
// ========== 改造原有bindTerminal方法添加areaName参数和校验 ========== // ========== 改造原有bindTerminal方法添加areaId参数和校验 ==========
@Transactional @Transactional
public DeviceTerminalMapping bindTerminal(String deviceId, String terminalId, String terminalName, String areaName) { public DeviceTerminalMapping bindTerminal(String deviceId, String terminalId, String terminalName, String areaId) {
// 1. 校验片区非空(终端必须归属片区) // 1. 校验片区非空(终端必须归属片区)
if (areaName == null || areaName.trim().isEmpty()) { if (areaId == null || areaId.trim().isEmpty()) {
throw new RuntimeException("片区ID不能为空请先选择片区"); throw new RuntimeException("片区ID不能为空请先选择片区");
} }
// 2. 校验设备存在且属于该片区的供水机 // 2. 校验设备存在且属于该片区的供水机
validateDeviceBelongsToArea(deviceId, areaName); validateDeviceBelongsToArea(deviceId, areaId);
// 3. 检查终端是否已绑定(原有逻辑保留) // 3. 检查终端是否已绑定(原有逻辑保留)
Optional<DeviceTerminalMapping> existing = terminalMappingRepository.findByTerminalId(terminalId); Optional<DeviceTerminalMapping> existing = terminalMappingRepository.findByTerminalId(terminalId);
if (existing.isPresent()) { if (existing.isPresent()) {
throw new RuntimeException("终端已绑定设备:" + existing.get().getDeviceId()); throw new RuntimeException("终端已绑定设备:" + existing.get().getDeviceId());
} }
// 4. 构建映射对象新增设置areaName // 4. 构建映射对象新增设置areaId
DeviceTerminalMapping mapping = new DeviceTerminalMapping(); DeviceTerminalMapping mapping = new DeviceTerminalMapping();
mapping.setDeviceId(deviceId); mapping.setDeviceId(deviceId);
mapping.setTerminalId(terminalId); mapping.setTerminalId(terminalId);
mapping.setTerminalName(terminalName); mapping.setTerminalName(terminalName);
mapping.setTerminalStatus(DeviceTerminalMapping.TerminalStatus.active); mapping.setTerminalStatus(DeviceTerminalMapping.TerminalStatus.active);
mapping.setInstallDate(LocalDate.now()); mapping.setInstallDate(LocalDate.now());
mapping.setAreaId(mapping.getAreaId()); // 保存终端所属片区 mapping.setAreaId(areaId); // 保存终端所属片区
return terminalMappingRepository.save(mapping); return terminalMappingRepository.save(mapping);
} }
@ -227,17 +227,17 @@ public class DeviceService {
} }
// ========== 新增1查询指定片区的所有供水机 ========== // ========== 新增1查询指定片区的所有供水机 ==========
public List<Device> getWaterSuppliesByArea(String areaName) { public List<Device> getWaterSuppliesByArea(String areaId) {
// 1. 校验片区ID非空 // 1. 校验片区ID非空
if (areaName == null || areaName.trim().isEmpty()) { if (areaId == null || areaId.trim().isEmpty()) {
throw new RuntimeException("片区ID不能为空"); throw new RuntimeException("片区ID不能为空");
} }
// 2. 查询该片区下类型为供水机的设备 // 2. 查询该片区下类型为供水机的设备
return deviceRepository.findByAreaNameAndDeviceType(areaName, Device.DeviceType.water_supply); return deviceRepository.findByAreaIdAndDeviceType(areaId, Device.DeviceType.water_supply);
} }
// ========== 新增2校验设备是否属于指定片区 ========== // ========== 新增2校验设备是否属于指定片区 ==========
public void validateDeviceBelongsToArea(String deviceId, String areaName) { public void validateDeviceBelongsToArea(String deviceId, String areaId) {
// 1. 校验设备存在 // 1. 校验设备存在
Device device = getDeviceById(deviceId); Device device = getDeviceById(deviceId);
// 2. 校验设备是供水机 // 2. 校验设备是供水机
@ -245,8 +245,8 @@ public class DeviceService {
throw new RuntimeException("只能关联供水机设备,当前设备类型不合法"); throw new RuntimeException("只能关联供水机设备,当前设备类型不合法");
} }
// 3. 校验设备所属片区与选中片区一致 // 3. 校验设备所属片区与选中片区一致
if (!areaName.equals(device.getAreaName())) { if (!areaId.equals(device.getAreaId())) {
throw new RuntimeException("该供水机不属于所选片区(设备所属片区:" + device.getAreaName() + ""); throw new RuntimeException("该供水机不属于所选片区(设备所属片区:" + device.getAreaId() + "");
} }
} }

Loading…
Cancel
Save