修改地区id为地区name功能 #167

Merged
hnu202326010106 merged 1 commits from wanglei_branch into develop 1 week ago

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

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

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

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

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

Loading…
Cancel
Save