代码重构

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.controller.convert.AircraftDetailVOConvert;
import com.ruoyi.device.service.api.IAircraftService;
import com.ruoyi.device.service.impl.BufferDeviceImpl;
import com.ruoyi.device.service.impl.TuohengBufferDeviceImpl;
import com.ruoyi.device.service.impl.DefaultBufferDeviceImpl;
import com.ruoyi.device.service.dto.AircraftDetailDTO;
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.web.bind.annotation.*;
@ -32,16 +27,7 @@ public class AircraftController extends BaseController
private IAircraftService aircraftService;
@Autowired
private BufferDeviceImpl bufferDeviceService;
@Autowired
private TuohengBufferDeviceImpl tuohengBufferDeviceService;
@Autowired
private IAircraftDomain aircraftDomain;
@Autowired
private IDeviceDomain deviceDomain;
private DefaultBufferDeviceImpl bufferDeviceService;
/**
* 查看无人机详情
@ -53,7 +39,7 @@ public class AircraftController extends BaseController
@GetMapping("/detail/{aircraftId}")
public R<AircraftDetailVO> getAircraftDetail(@PathVariable("aircraftId") Long aircraftId)
{
AircraftDetailDTO dto = getAircraftDetailByManufacturer(aircraftId);
AircraftDetailDTO dto = bufferDeviceService.getAircraftDetailById(aircraftId);
AircraftDetailVO vo = AircraftDetailVOConvert.from(dto);
return R.ok(vo);
}
@ -74,37 +60,4 @@ public class AircraftController extends BaseController
aircraftService.updateAircraft(dto);
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.controller.convert.DockWithGPSVOConvert;
import com.ruoyi.device.service.api.IDockService;
import com.ruoyi.device.service.impl.BufferDeviceImpl;
import com.ruoyi.device.service.impl.TuohengBufferDeviceImpl;
import com.ruoyi.device.service.impl.DefaultBufferDeviceImpl;
import com.ruoyi.device.service.dto.DockDetailDTO;
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 org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
@ -39,16 +34,7 @@ public class DockController extends BaseController
private IDockService dockService;
@Autowired
private BufferDeviceImpl bufferDeviceService;
@Autowired
private TuohengBufferDeviceImpl tuohengBufferDeviceService;
@Autowired
private IDockDomain dockDomain;
@Autowired
private IDeviceDomain deviceDomain;
private DefaultBufferDeviceImpl bufferDeviceService;
/**
* 搜索机场
@ -76,7 +62,7 @@ public class DockController extends BaseController
@GetMapping("/detail/{dockId}")
public R<DockDetailVO> getDockDetail(@PathVariable("dockId") Long dockId)
{
DockDetailDTO dockDetailDTO = getDockDetailByManufacturer(dockId);
DockDetailDTO dockDetailDTO = bufferDeviceService.getDockDetailById(dockId);
if (dockDetailDTO == null) {
return R.fail("机场不存在: dockId=" + dockId);
}
@ -116,44 +102,11 @@ public class DockController extends BaseController
List<DockDTO> dockDTOs = dockService.selectDockList(new DockDTO());
List<DockDetailDTO> dtoList = new ArrayList<>();
for (DockDTO dockDTO : dockDTOs) {
DockDetailDTO dockDetailDTO = getDockDetailByManufacturer(dockDTO.getDockId());
DockDetailDTO dockDetailDTO = bufferDeviceService.getDockDetailById(dockDTO.getDockId());
if (dockDetailDTO != null) {
dtoList.add(dockDetailDTO);
}
}
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.domain.api.IDockDomain;
import com.ruoyi.device.domain.model.Dock;
import com.ruoyi.device.service.impl.BufferDeviceImpl;
import com.ruoyi.device.service.impl.TuohengBufferDeviceImpl;
import com.ruoyi.device.service.impl.DefaultBufferDeviceImpl;
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.DockGroupDTO;
import com.ruoyi.device.service.dto.GroupDTO;
@ -36,16 +33,10 @@ public class GroupController extends BaseController
private IGroupService groupService;
@Autowired
private BufferDeviceImpl bufferDeviceService;
@Autowired
private TuohengBufferDeviceImpl tuohengBufferDeviceService;
private DefaultBufferDeviceImpl bufferDeviceService;
@Autowired
private IDockDomain dockDomain;
@Autowired
private IDeviceDomain deviceDomain;
/**
* 创建分组
*
@ -145,7 +136,7 @@ public class GroupController extends BaseController
if (allDocks != null) {
for (Dock dock : allDocks) {
if (dock.getLastActiveTime() != null) {
DockDetailDTO dockDetailDTO = getDockDetailByManufacturer(dock.getDockId());
DockDetailDTO dockDetailDTO = bufferDeviceService.getDockDetailById(dock.getDockId());
if (dockDetailDTO != null) {
dockDetailDTO.setLastActiveTime(dock.getLastActiveTime());
dtoList.add(dockDetailDTO);
@ -160,7 +151,7 @@ public class GroupController extends BaseController
List<DockGroupDTO> groupDTOS = groupService.getDocksByGroupId(groupId);
List<DockDetailDTO> dtoList = new ArrayList<>();
for (DockGroupDTO dockGroupDTO : groupDTOS) {
DockDetailDTO dockDetailDTO = getDockDetailByManufacturer(dockGroupDTO.getDockId());
DockDetailDTO dockDetailDTO = bufferDeviceService.getDockDetailById(dockGroupDTO.getDockId());
if (dockDetailDTO != null) {
dtoList.add(dockDetailDTO);
}
@ -213,36 +204,4 @@ public class GroupController extends BaseController
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.PayloadStatusEnum;
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.api.IDockService;
import com.ruoyi.device.domain.api.IDeviceDomain;
@ -51,7 +51,7 @@ public class StaticsController extends BaseController
private IPayloadService payloadService;
@Autowired
private BufferDeviceImpl bufferDeviceService;
private DaJiangBufferDeviceImpl daJiangBufferDeviceService;
@Autowired
private TuohengBufferDeviceImpl tuohengBufferDeviceService;
@ -137,7 +137,7 @@ public class StaticsController extends BaseController
List<Long> dockIds = docks.stream()
.map(DockDTO::getDockId)
.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()
.map(AircraftDTO::getAircraftId)
.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;
/**
* 设备缓冲服务实现
* 大疆设备缓冲服务实现
* 整合数据库数据和ThingsBoard数据
*
* @author ruoyi
* @date 2026-01-20
*/
@Service
@Service("daJiangBufferDeviceService")
@Slf4j
public class BufferDeviceImpl implements IBufferDeviceService
public class DaJiangBufferDeviceImpl implements IBufferDeviceService
{
@Autowired
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
* @date 2026-02-04
* @date 2026-02-04Ï
*/
@Service("tuohengBufferDeviceService")
@Slf4j

View File

@ -1,7 +1,7 @@
package com.ruoyi.device.websocket;
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 org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@ -60,7 +60,7 @@ public class StatisticsWebSocket {
}
@Autowired
private IBufferDeviceService bufferDeviceService;
private DefaultBufferDeviceImpl bufferDeviceService;
public void broadcast(String dockerId) {