Merge pull request '修改地区id为地区name功能' (#167) from wanglei_branch into develop

pull/169/head
hnu202326010106 4 months ago
commit 2326366fce

@ -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_id", length = 36) @Column(name = "area_name", length = 36)
private String areaId; private String areaName;
@Column(name = "install_location", length = 200) @Column(name = "install_location", length = 200)
private String installLocation; private String installLocation;

@ -56,4 +56,6 @@ 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);
} }

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

@ -1,9 +1,11 @@
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;
@ -44,6 +46,7 @@ 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;
/** /**
* *
@ -164,8 +167,11 @@ 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 areaId = getDeviceAreaId(deviceId); String areaName = getDeviceAreaName(deviceId);
// 2. 关键步骤通过片区名称匹配获取对应的areaId保留原有area_id逻辑
String areaId = getAreaIdByAreaName(areaName);
// 1. 创建告警记录 // 1. 创建告警记录
Alert alert = new Alert(); Alert alert = new Alert();
@ -219,20 +225,26 @@ public class AlertTriggerService {
/** /**
* ID * ID
*/ */
public String getDeviceAreaId(String deviceId) { /**
try { * Device
Optional<Device> deviceOpt = deviceRepository.findById(deviceId); */
String areaId = deviceOpt.map(Device::getAreaId).orElse(null); private String getDeviceAreaName(String deviceId) {
// 空值兜底null/空字符串→unknown Device device = deviceRepository.findById(deviceId)
if (areaId == null || areaId.trim().isEmpty()) { .orElseThrow(() -> new RuntimeException("设备不存在:" + deviceId));
areaId = "unknown"; return device.getAreaName(); // 从Device获取areaName已修改后的字段
log.warn("设备{}的area_id为空/设备不存在兜底为unknown", deviceId); }
}
return areaId; /**
} catch (Exception e) { // 捕获所有数据库异常 * - areaId
log.error("获取设备{}的area_id失败数据库异常", deviceId, e); */
return "unknown"; // 异常时兜底 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++ * IDWO++

@ -94,11 +94,11 @@ public class DeviceService {
/** /**
* *
*/ */
public List<Device> queryDevices(String areaId, DeviceType deviceType, DeviceStatus status) { public List<Device> queryDevices(String areaName, DeviceType deviceType, DeviceStatus status) {
if (areaId != null && deviceType != null) { if (areaName != null && deviceType != null) {
return deviceRepository.findByAreaIdAndDeviceType(areaId, deviceType); return deviceRepository.findByAreaNameAndDeviceType(areaName, deviceType);
} else if (areaId != null) { } else if (areaName != null) {
return deviceRepository.findByAreaId(areaId); return deviceRepository.findByAreaName (areaName);
} 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方法添加areaId参数和校验 ========== // ========== 改造原有bindTerminal方法添加areaName参数和校验 ==========
@Transactional @Transactional
public DeviceTerminalMapping bindTerminal(String deviceId, String terminalId, String terminalName, String areaId) { public DeviceTerminalMapping bindTerminal(String deviceId, String terminalId, String terminalName, String areaName) {
// 1. 校验片区非空(终端必须归属片区) // 1. 校验片区非空(终端必须归属片区)
if (areaId == null || areaId.trim().isEmpty()) { if (areaName == null || areaName.trim().isEmpty()) {
throw new RuntimeException("片区ID不能为空请先选择片区"); throw new RuntimeException("片区ID不能为空请先选择片区");
} }
// 2. 校验设备存在且属于该片区的供水机 // 2. 校验设备存在且属于该片区的供水机
validateDeviceBelongsToArea(deviceId, areaId); validateDeviceBelongsToArea(deviceId, areaName);
// 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. 构建映射对象新增设置areaId // 4. 构建映射对象新增设置areaName
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(areaId); // 保存终端所属片区 mapping.setAreaId(mapping.getAreaId()); // 保存终端所属片区
return terminalMappingRepository.save(mapping); return terminalMappingRepository.save(mapping);
} }
@ -227,17 +227,17 @@ public class DeviceService {
} }
// ========== 新增1查询指定片区的所有供水机 ========== // ========== 新增1查询指定片区的所有供水机 ==========
public List<Device> getWaterSuppliesByArea(String areaId) { public List<Device> getWaterSuppliesByArea(String areaName) {
// 1. 校验片区ID非空 // 1. 校验片区ID非空
if (areaId == null || areaId.trim().isEmpty()) { if (areaName == null || areaName.trim().isEmpty()) {
throw new RuntimeException("片区ID不能为空"); throw new RuntimeException("片区ID不能为空");
} }
// 2. 查询该片区下类型为供水机的设备 // 2. 查询该片区下类型为供水机的设备
return deviceRepository.findByAreaIdAndDeviceType(areaId, Device.DeviceType.water_supply); return deviceRepository.findByAreaNameAndDeviceType(areaName, Device.DeviceType.water_supply);
} }
// ========== 新增2校验设备是否属于指定片区 ========== // ========== 新增2校验设备是否属于指定片区 ==========
public void validateDeviceBelongsToArea(String deviceId, String areaId) { public void validateDeviceBelongsToArea(String deviceId, String areaName) {
// 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 (!areaId.equals(device.getAreaId())) { if (!areaName.equals(device.getAreaName())) {
throw new RuntimeException("该供水机不属于所选片区(设备所属片区:" + device.getAreaId() + ""); throw new RuntimeException("该供水机不属于所选片区(设备所属片区:" + device.getAreaName() + "");
} }
} }

Loading…
Cancel
Save