代码重构

This commit is contained in:
孙小云 2026-02-04 16:36:18 +08:00
parent dcc4835180
commit bad9e733bc
8 changed files with 179 additions and 156 deletions

View File

@ -7,14 +7,9 @@ import com.ruoyi.device.api.domain.AircraftDetailVO;
import com.ruoyi.device.api.domain.AircraftUpdateRequest; import com.ruoyi.device.api.domain.AircraftUpdateRequest;
import com.ruoyi.device.controller.convert.AircraftDetailVOConvert; import com.ruoyi.device.controller.convert.AircraftDetailVOConvert;
import com.ruoyi.device.service.api.IAircraftService; import com.ruoyi.device.service.api.IAircraftService;
import com.ruoyi.device.service.impl.BufferDeviceImpl; import com.ruoyi.device.service.impl.DefaultBufferDeviceImpl;
import com.ruoyi.device.service.impl.TuohengBufferDeviceImpl;
import com.ruoyi.device.service.dto.AircraftDetailDTO; import com.ruoyi.device.service.dto.AircraftDetailDTO;
import com.ruoyi.device.service.dto.AircraftDTO; import com.ruoyi.device.service.dto.AircraftDTO;
import com.ruoyi.device.domain.api.IAircraftDomain;
import com.ruoyi.device.domain.api.IDeviceDomain;
import com.ruoyi.device.domain.model.Aircraft;
import com.ruoyi.device.domain.model.Device;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
@ -32,16 +27,7 @@ public class AircraftController extends BaseController
private IAircraftService aircraftService; private IAircraftService aircraftService;
@Autowired @Autowired
private BufferDeviceImpl bufferDeviceService; private DefaultBufferDeviceImpl bufferDeviceService;
@Autowired
private TuohengBufferDeviceImpl tuohengBufferDeviceService;
@Autowired
private IAircraftDomain aircraftDomain;
@Autowired
private IDeviceDomain deviceDomain;
/** /**
* 查看无人机详情 * 查看无人机详情
@ -53,7 +39,7 @@ public class AircraftController extends BaseController
@GetMapping("/detail/{aircraftId}") @GetMapping("/detail/{aircraftId}")
public R<AircraftDetailVO> getAircraftDetail(@PathVariable("aircraftId") Long aircraftId) public R<AircraftDetailVO> getAircraftDetail(@PathVariable("aircraftId") Long aircraftId)
{ {
AircraftDetailDTO dto = getAircraftDetailByManufacturer(aircraftId); AircraftDetailDTO dto = bufferDeviceService.getAircraftDetailById(aircraftId);
AircraftDetailVO vo = AircraftDetailVOConvert.from(dto); AircraftDetailVO vo = AircraftDetailVOConvert.from(dto);
return R.ok(vo); return R.ok(vo);
} }
@ -74,37 +60,4 @@ public class AircraftController extends BaseController
aircraftService.updateAircraft(dto); aircraftService.updateAircraft(dto);
return R.ok(); return R.ok();
} }
/**
* 根据无人机ID获取无人机详情自动选择大疆或拓恒服务
*
* @param aircraftId 无人机ID
* @return 无人机详情DTO
*/
private AircraftDetailDTO getAircraftDetailByManufacturer(Long aircraftId) {
// 查询无人机信息
Aircraft aircraft = aircraftDomain.selectAircraftByAircraftId(aircraftId);
if (aircraft == null) {
logger.warn("无人机不存在: aircraftId={}", aircraftId);
return null;
}
// 查询设备信息获取厂商
Device device = deviceDomain.selectDeviceByDeviceId(aircraft.getDeviceId());
if (device == null) {
logger.warn("无人机对应的设备不存在: deviceId={}", aircraft.getDeviceId());
return null;
}
// 根据厂商选择对应的服务
String manufacturer = device.getDeviceManufacturer();
if ("tuoheng".equals(manufacturer)) {
logger.debug("使用拓恒服务获取无人机详情: aircraftId={}", aircraftId);
return tuohengBufferDeviceService.getAircraftDetailById(aircraftId);
} else {
logger.debug("使用大疆服务获取无人机详情: aircraftId={}, manufacturer={}",
aircraftId, manufacturer);
return bufferDeviceService.getAircraftDetailById(aircraftId);
}
}
} }

View File

@ -9,14 +9,9 @@ import com.ruoyi.device.api.domain.DockVO;
import com.ruoyi.device.api.domain.DockWithGPSVO; import com.ruoyi.device.api.domain.DockWithGPSVO;
import com.ruoyi.device.controller.convert.DockWithGPSVOConvert; import com.ruoyi.device.controller.convert.DockWithGPSVOConvert;
import com.ruoyi.device.service.api.IDockService; import com.ruoyi.device.service.api.IDockService;
import com.ruoyi.device.service.impl.BufferDeviceImpl; import com.ruoyi.device.service.impl.DefaultBufferDeviceImpl;
import com.ruoyi.device.service.impl.TuohengBufferDeviceImpl;
import com.ruoyi.device.service.dto.DockDetailDTO; import com.ruoyi.device.service.dto.DockDetailDTO;
import com.ruoyi.device.service.dto.DockDTO; import com.ruoyi.device.service.dto.DockDTO;
import com.ruoyi.device.domain.api.IDockDomain;
import com.ruoyi.device.domain.api.IDeviceDomain;
import com.ruoyi.device.domain.model.Dock;
import com.ruoyi.device.domain.model.Device;
import com.ruoyi.device.controller.convert.DockVOConvert; import com.ruoyi.device.controller.convert.DockVOConvert;
import org.springframework.beans.BeanUtils; import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
@ -39,16 +34,7 @@ public class DockController extends BaseController
private IDockService dockService; private IDockService dockService;
@Autowired @Autowired
private BufferDeviceImpl bufferDeviceService; private DefaultBufferDeviceImpl bufferDeviceService;
@Autowired
private TuohengBufferDeviceImpl tuohengBufferDeviceService;
@Autowired
private IDockDomain dockDomain;
@Autowired
private IDeviceDomain deviceDomain;
/** /**
* 搜索机场 * 搜索机场
@ -76,7 +62,7 @@ public class DockController extends BaseController
@GetMapping("/detail/{dockId}") @GetMapping("/detail/{dockId}")
public R<DockDetailVO> getDockDetail(@PathVariable("dockId") Long dockId) public R<DockDetailVO> getDockDetail(@PathVariable("dockId") Long dockId)
{ {
DockDetailDTO dockDetailDTO = getDockDetailByManufacturer(dockId); DockDetailDTO dockDetailDTO = bufferDeviceService.getDockDetailById(dockId);
if (dockDetailDTO == null) { if (dockDetailDTO == null) {
return R.fail("机场不存在: dockId=" + dockId); return R.fail("机场不存在: dockId=" + dockId);
} }
@ -116,44 +102,11 @@ public class DockController extends BaseController
List<DockDTO> dockDTOs = dockService.selectDockList(new DockDTO()); List<DockDTO> dockDTOs = dockService.selectDockList(new DockDTO());
List<DockDetailDTO> dtoList = new ArrayList<>(); List<DockDetailDTO> dtoList = new ArrayList<>();
for (DockDTO dockDTO : dockDTOs) { for (DockDTO dockDTO : dockDTOs) {
DockDetailDTO dockDetailDTO = getDockDetailByManufacturer(dockDTO.getDockId()); DockDetailDTO dockDetailDTO = bufferDeviceService.getDockDetailById(dockDTO.getDockId());
if (dockDetailDTO != null) { if (dockDetailDTO != null) {
dtoList.add(dockDetailDTO); dtoList.add(dockDetailDTO);
} }
} }
return R.ok(DockWithGPSVOConvert.fromList(dtoList)); return R.ok(DockWithGPSVOConvert.fromList(dtoList));
} }
/**
* 根据机场ID获取机场详情自动选择大疆或拓恒服务
*
* @param dockId 机场ID
* @return 机场详情DTO
*/
private DockDetailDTO getDockDetailByManufacturer(Long dockId) {
// 查询机场信息
Dock dock = dockDomain.selectDockByDockId(dockId);
if (dock == null) {
logger.warn("机场不存在: dockId={}", dockId);
return null;
}
// 查询设备信息获取厂商
Device device = deviceDomain.selectDeviceByDeviceId(dock.getDeviceId());
if (device == null) {
logger.warn("机场对应的设备不存在: deviceId={}", dock.getDeviceId());
return null;
}
// 根据厂商选择对应的服务
String manufacturer = device.getDeviceManufacturer();
if ("tuoheng".equals(manufacturer)) {
logger.debug("使用拓恒服务获取机场详情: dockId={}", dockId);
return tuohengBufferDeviceService.getDockDetailById(dockId);
} else {
logger.debug("使用大疆服务获取机场详情: dockId={}, manufacturer={}",
dockId, manufacturer);
return bufferDeviceService.getDockDetailById(dockId);
}
}
} }

View File

@ -8,11 +8,8 @@ import com.ruoyi.device.controller.convert.DockWithGPSVOConvert;
import com.ruoyi.device.controller.convert.GroupVOConvert; import com.ruoyi.device.controller.convert.GroupVOConvert;
import com.ruoyi.device.domain.api.IDockDomain; import com.ruoyi.device.domain.api.IDockDomain;
import com.ruoyi.device.domain.model.Dock; import com.ruoyi.device.domain.model.Dock;
import com.ruoyi.device.service.impl.BufferDeviceImpl; import com.ruoyi.device.service.impl.DefaultBufferDeviceImpl;
import com.ruoyi.device.service.impl.TuohengBufferDeviceImpl;
import com.ruoyi.device.service.api.IGroupService; import com.ruoyi.device.service.api.IGroupService;
import com.ruoyi.device.domain.api.IDeviceDomain;
import com.ruoyi.device.domain.model.Device;
import com.ruoyi.device.service.dto.DockDetailDTO; import com.ruoyi.device.service.dto.DockDetailDTO;
import com.ruoyi.device.service.dto.DockGroupDTO; import com.ruoyi.device.service.dto.DockGroupDTO;
import com.ruoyi.device.service.dto.GroupDTO; import com.ruoyi.device.service.dto.GroupDTO;
@ -36,16 +33,10 @@ public class GroupController extends BaseController
private IGroupService groupService; private IGroupService groupService;
@Autowired @Autowired
private BufferDeviceImpl bufferDeviceService; private DefaultBufferDeviceImpl bufferDeviceService;
@Autowired
private TuohengBufferDeviceImpl tuohengBufferDeviceService;
@Autowired @Autowired
private IDockDomain dockDomain; private IDockDomain dockDomain;
@Autowired
private IDeviceDomain deviceDomain;
/** /**
* 创建分组 * 创建分组
* *
@ -145,7 +136,7 @@ public class GroupController extends BaseController
if (allDocks != null) { if (allDocks != null) {
for (Dock dock : allDocks) { for (Dock dock : allDocks) {
if (dock.getLastActiveTime() != null) { if (dock.getLastActiveTime() != null) {
DockDetailDTO dockDetailDTO = getDockDetailByManufacturer(dock.getDockId()); DockDetailDTO dockDetailDTO = bufferDeviceService.getDockDetailById(dock.getDockId());
if (dockDetailDTO != null) { if (dockDetailDTO != null) {
dockDetailDTO.setLastActiveTime(dock.getLastActiveTime()); dockDetailDTO.setLastActiveTime(dock.getLastActiveTime());
dtoList.add(dockDetailDTO); dtoList.add(dockDetailDTO);
@ -160,7 +151,7 @@ public class GroupController extends BaseController
List<DockGroupDTO> groupDTOS = groupService.getDocksByGroupId(groupId); List<DockGroupDTO> groupDTOS = groupService.getDocksByGroupId(groupId);
List<DockDetailDTO> dtoList = new ArrayList<>(); List<DockDetailDTO> dtoList = new ArrayList<>();
for (DockGroupDTO dockGroupDTO : groupDTOS) { for (DockGroupDTO dockGroupDTO : groupDTOS) {
DockDetailDTO dockDetailDTO = getDockDetailByManufacturer(dockGroupDTO.getDockId()); DockDetailDTO dockDetailDTO = bufferDeviceService.getDockDetailById(dockGroupDTO.getDockId());
if (dockDetailDTO != null) { if (dockDetailDTO != null) {
dtoList.add(dockDetailDTO); dtoList.add(dockDetailDTO);
} }
@ -213,36 +204,4 @@ public class GroupController extends BaseController
return R.ok(groupVOS); return R.ok(groupVOS);
} }
/**
* 根据机场ID获取机场详情自动选择大疆或拓恒服务
*
* @param dockId 机场ID
* @return 机场详情DTO
*/
private DockDetailDTO getDockDetailByManufacturer(Long dockId) {
// 查询机场信息
Dock dock = dockDomain.selectDockByDockId(dockId);
if (dock == null) {
logger.warn("机场不存在: dockId={}", dockId);
return null;
}
// 查询设备信息获取厂商
Device device = deviceDomain.selectDeviceByDeviceId(dock.getDeviceId());
if (device == null) {
logger.warn("机场对应的设备不存在: deviceId={}", dock.getDeviceId());
return null;
}
// 根据厂商选择对应的服务
String manufacturer = device.getDeviceManufacturer();
if ("tuoheng".equals(manufacturer)) {
logger.debug("使用拓恒服务获取机场详情: dockId={}", dockId);
return tuohengBufferDeviceService.getDockDetailById(dockId);
} else {
logger.debug("使用大疆服务获取机场详情: dockId={}, manufacturer={}", dockId, manufacturer);
return bufferDeviceService.getDockDetailById(dockId);
}
}
} }

View File

@ -7,7 +7,7 @@ import com.ruoyi.device.api.enums.AircraftStatusEnum;
import com.ruoyi.device.api.enums.DockStatusEnum; import com.ruoyi.device.api.enums.DockStatusEnum;
import com.ruoyi.device.api.enums.PayloadStatusEnum; import com.ruoyi.device.api.enums.PayloadStatusEnum;
import com.ruoyi.device.service.api.IAircraftService; import com.ruoyi.device.service.api.IAircraftService;
import com.ruoyi.device.service.impl.BufferDeviceImpl; import com.ruoyi.device.service.impl.DaJiangBufferDeviceImpl;
import com.ruoyi.device.service.impl.TuohengBufferDeviceImpl; import com.ruoyi.device.service.impl.TuohengBufferDeviceImpl;
import com.ruoyi.device.service.api.IDockService; import com.ruoyi.device.service.api.IDockService;
import com.ruoyi.device.domain.api.IDeviceDomain; import com.ruoyi.device.domain.api.IDeviceDomain;
@ -51,7 +51,7 @@ public class StaticsController extends BaseController
private IPayloadService payloadService; private IPayloadService payloadService;
@Autowired @Autowired
private BufferDeviceImpl bufferDeviceService; private DaJiangBufferDeviceImpl daJiangBufferDeviceService;
@Autowired @Autowired
private TuohengBufferDeviceImpl tuohengBufferDeviceService; private TuohengBufferDeviceImpl tuohengBufferDeviceService;
@ -137,7 +137,7 @@ public class StaticsController extends BaseController
List<Long> dockIds = docks.stream() List<Long> dockIds = docks.stream()
.map(DockDTO::getDockId) .map(DockDTO::getDockId)
.collect(Collectors.toList()); .collect(Collectors.toList());
dockDetailsMap = bufferDeviceService.getDockDetailsByIds(dockIds); dockDetailsMap = daJiangBufferDeviceService.getDockDetailsByIds(dockIds);
} }
// 统计各状态机场数量 // 统计各状态机场数量
@ -188,7 +188,7 @@ public class StaticsController extends BaseController
List<Long> aircraftIds = aircrafts.stream() List<Long> aircraftIds = aircrafts.stream()
.map(AircraftDTO::getAircraftId) .map(AircraftDTO::getAircraftId)
.collect(Collectors.toList()); .collect(Collectors.toList());
aircraftDetailsMap = bufferDeviceService.getAircraftDetailsByIds(aircraftIds); aircraftDetailsMap = daJiangBufferDeviceService.getAircraftDetailsByIds(aircraftIds);
} }
// 统计各状态无人机数量 // 统计各状态无人机数量

View File

@ -33,15 +33,15 @@ import java.util.Map;
import java.util.stream.Collectors; import java.util.stream.Collectors;
/** /**
* 设备缓冲服务实现 * 大疆设备缓冲服务实现
* 整合数据库数据和ThingsBoard数据 * 整合数据库数据和ThingsBoard数据
* *
* @author ruoyi * @author ruoyi
* @date 2026-01-20 * @date 2026-01-20
*/ */
@Service @Service("daJiangBufferDeviceService")
@Slf4j @Slf4j
public class BufferDeviceImpl implements IBufferDeviceService public class DaJiangBufferDeviceImpl implements IBufferDeviceService
{ {
@Autowired @Autowired
private IDockDomain dockDomain; private IDockDomain dockDomain;

View File

@ -0,0 +1,158 @@
package com.ruoyi.device.service.impl;
import com.ruoyi.device.domain.api.IAircraftDomain;
import com.ruoyi.device.domain.api.IDeviceDomain;
import com.ruoyi.device.domain.api.IDockDomain;
import com.ruoyi.device.domain.model.Aircraft;
import com.ruoyi.device.domain.model.Device;
import com.ruoyi.device.domain.model.Dock;
import com.ruoyi.device.service.api.IBufferDeviceService;
import com.ruoyi.device.service.dto.AircraftDetailDTO;
import com.ruoyi.device.service.dto.DockDetailDTO;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.context.annotation.Primary;
import org.springframework.stereotype.Service;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* 默认设备缓冲服务实现
* 根据设备厂商自动路由到对应的服务实现
*
* @author ruoyi
* @date 2026-02-04
*/
@Service
@Primary
@Slf4j
public class DefaultBufferDeviceImpl implements IBufferDeviceService {
@Autowired
@Qualifier("daJiangBufferDeviceService")
private IBufferDeviceService daJiangBufferDeviceService;
@Autowired
@Qualifier("tuohengBufferDeviceService")
private IBufferDeviceService tuohengBufferDeviceService;
@Autowired
private IDockDomain dockDomain;
@Autowired
private IDeviceDomain deviceDomain;
@Autowired
private IAircraftDomain aircraftDomain;
@Override
public DockDetailDTO getDockDetailById(Long dockId) {
log.debug("DefaultBufferDeviceImpl.getDockDetailById: dockId={}", dockId);
// 查询机场信息
Dock dock = dockDomain.selectDockByDockId(dockId);
if (dock == null) {
log.warn("机场不存在: dockId={}", dockId);
return null;
}
// 查询设备信息获取厂商
Device device = deviceDomain.selectDeviceByDeviceId(dock.getDeviceId());
if (device == null) {
log.warn("机场对应的设备不存在: deviceId={}", dock.getDeviceId());
return null;
}
// 根据厂商选择对应的服务
String manufacturer = device.getDeviceManufacturer();
if ("tuoheng".equals(manufacturer)) {
log.debug("路由到拓恒服务: dockId={}", dockId);
return tuohengBufferDeviceService.getDockDetailById(dockId);
} else {
log.debug("路由到大疆服务: dockId={}, manufacturer={}", dockId, manufacturer);
return daJiangBufferDeviceService.getDockDetailById(dockId);
}
}
@Override
public AircraftDetailDTO getAircraftDetailById(Long aircraftId) {
log.debug("DefaultBufferDeviceImpl.getAircraftDetailById: aircraftId={}", aircraftId);
// 查询无人机信息
Aircraft aircraft = aircraftDomain.selectAircraftByAircraftId(aircraftId);
if (aircraft == null) {
log.warn("无人机不存在: aircraftId={}", aircraftId);
return null;
}
// 查询设备信息获取厂商
Device device = deviceDomain.selectDeviceByDeviceId(aircraft.getDeviceId());
if (device == null) {
log.warn("无人机对应的设备不存在: deviceId={}", aircraft.getDeviceId());
return null;
}
// 根据厂商选择对应的服务
String manufacturer = device.getDeviceManufacturer();
if ("tuoheng".equals(manufacturer)) {
log.debug("路由到拓恒服务: aircraftId={}", aircraftId);
return tuohengBufferDeviceService.getAircraftDetailById(aircraftId);
} else {
log.debug("路由到大疆服务: aircraftId={}, manufacturer={}", aircraftId, manufacturer);
return daJiangBufferDeviceService.getAircraftDetailById(aircraftId);
}
}
@Override
public Map<Long, DockDetailDTO> getDockDetailsByIds(List<Long> dockIds) {
log.debug("DefaultBufferDeviceImpl.getDockDetailsByIds: dockIds.size={}",
dockIds != null ? dockIds.size() : 0);
if (dockIds == null || dockIds.isEmpty()) {
return new HashMap<>();
}
Map<Long, DockDetailDTO> resultMap = new HashMap<>(dockIds.size());
for (Long dockId : dockIds) {
try {
DockDetailDTO dto = getDockDetailById(dockId);
if (dto != null) {
resultMap.put(dockId, dto);
}
} catch (Exception e) {
log.error("获取机场详情失败, dockId: {}", dockId, e);
}
}
return resultMap;
}
@Override
public Map<Long, AircraftDetailDTO> getAircraftDetailsByIds(List<Long> aircraftIds) {
log.debug("DefaultBufferDeviceImpl.getAircraftDetailsByIds: aircraftIds.size={}",
aircraftIds != null ? aircraftIds.size() : 0);
if (aircraftIds == null || aircraftIds.isEmpty()) {
return new HashMap<>();
}
Map<Long, AircraftDetailDTO> resultMap = new HashMap<>(aircraftIds.size());
for (Long aircraftId : aircraftIds) {
try {
AircraftDetailDTO dto = getAircraftDetailById(aircraftId);
if (dto != null) {
resultMap.put(aircraftId, dto);
}
} catch (Exception e) {
log.error("获取无人机详情失败, aircraftId: {}", aircraftId, e);
}
}
return resultMap;
}
}

View File

@ -24,7 +24,7 @@ import java.util.Map;
* 专门处理拓恒设备的数据整合 * 专门处理拓恒设备的数据整合
* *
* @author ruoyi * @author ruoyi
* @date 2026-02-04 * @date 2026-02-04Ï
*/ */
@Service("tuohengBufferDeviceService") @Service("tuohengBufferDeviceService")
@Slf4j @Slf4j

View File

@ -1,7 +1,7 @@
package com.ruoyi.device.websocket; package com.ruoyi.device.websocket;
import com.alibaba.fastjson2.JSON; import com.alibaba.fastjson2.JSON;
import com.ruoyi.device.service.api.IBufferDeviceService; import com.ruoyi.device.service.impl.DefaultBufferDeviceImpl;
import com.ruoyi.device.service.dto.DockDetailDTO; import com.ruoyi.device.service.dto.DockDetailDTO;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
@ -60,7 +60,7 @@ public class StatisticsWebSocket {
} }
@Autowired @Autowired
private IBufferDeviceService bufferDeviceService; private DefaultBufferDeviceImpl bufferDeviceService;
public void broadcast(String dockerId) { public void broadcast(String dockerId) {