a-tuoheng-device/src/main/java/com/ruoyi/device/controller/StaticsController.java

292 lines
11 KiB
Java
Raw Normal View History

2026-01-23 10:22:07 +08:00
package com.ruoyi.device.controller;
import com.ruoyi.common.core.domain.R;
import com.ruoyi.common.core.web.controller.BaseController;
import com.ruoyi.device.api.domain.StatisticsVO;
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.api.IBufferDeviceService;
import com.ruoyi.device.service.api.IDockService;
import com.ruoyi.device.service.api.IPayloadService;
import com.ruoyi.device.service.dto.AircraftDTO;
import com.ruoyi.device.service.dto.AircraftDetailDTO;
import com.ruoyi.device.service.dto.DockDTO;
import com.ruoyi.device.service.dto.DockDetailDTO;
import com.ruoyi.device.service.dto.PayloadDTO;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
2026-01-30 16:06:29 +08:00
import java.util.Map;
import java.util.stream.Collectors;
2026-01-23 10:22:07 +08:00
/**
* 统计Controller
*
* @author ruoyi
* @date 2026-01-23
*/
@RestController
@RequestMapping("/statistics")
public class StaticsController extends BaseController
{
@Autowired
private IDockService dockService;
@Autowired
private IAircraftService aircraftService;
@Autowired
private IPayloadService payloadService;
@Autowired
private IBufferDeviceService bufferDeviceService;
/**
* 获取系统统计信息
*
* @return 统计信息
*/
@GetMapping
public R<StatisticsVO> getStatistics()
{
StatisticsVO vo = new StatisticsVO();
// 获取所有机场
List<DockDTO> docks = dockService.selectDockList(new DockDTO());
vo.setDockCount(docks != null ? docks.size() : 0);
2026-01-30 16:06:29 +08:00
// 批量获取机场详情 - 优化从N次查询减少到1次批量查询
Map<Long, DockDetailDTO> dockDetailsMap = null;
if (docks != null && !docks.isEmpty()) {
List<Long> dockIds = docks.stream()
.map(DockDTO::getDockId)
.collect(Collectors.toList());
dockDetailsMap = bufferDeviceService.getDockDetailsByIds(dockIds);
}
2026-01-23 10:22:07 +08:00
// 统计各状态机场数量
int idleCount = 0;
int workingCount = 0;
int debuggingCount = 0;
int offlineCount = 0;
2026-01-30 16:06:29 +08:00
if (docks != null && dockDetailsMap != null) {
2026-01-23 10:22:07 +08:00
for (DockDTO dock : docks) {
2026-01-30 16:06:29 +08:00
DockDetailDTO dockDetail = dockDetailsMap.get(dock.getDockId());
2026-01-23 10:22:07 +08:00
if (dockDetail != null && dockDetail.getDockStatus() != null) {
String status = dockDetail.getDockStatus();
if (DockStatusEnum.IDLE.getCode().equals(status)) {
idleCount++;
} else if (DockStatusEnum.WORKING.getCode().equals(status)) {
workingCount++;
} else if (DockStatusEnum.Debugging.getCode().equals(status)) {
debuggingCount++;
} else {
offlineCount++;
}
}
}
}
vo.setIdleDockCount(idleCount);
vo.setWorkingDockCount(workingCount);
vo.setDebuggingDockCount(debuggingCount);
vo.setOfflineDockCount(offlineCount);
// 获取所有无人机
List<AircraftDTO> aircrafts = aircraftService.selectAircraftList(new AircraftDTO());
vo.setAircraftCount(aircrafts != null ? aircrafts.size() : 0);
2026-01-30 16:06:29 +08:00
// 批量获取无人机详情 - 优化从N次查询减少到1次批量查询
Map<Long, AircraftDetailDTO> aircraftDetailsMap = null;
if (aircrafts != null && !aircrafts.isEmpty()) {
List<Long> aircraftIds = aircrafts.stream()
.map(AircraftDTO::getAircraftId)
.collect(Collectors.toList());
aircraftDetailsMap = bufferDeviceService.getAircraftDetailsByIds(aircraftIds);
}
2026-01-23 10:22:07 +08:00
// 统计各状态无人机数量
int powerOnInCabinCount = 0;
int powerOffInCabinCount = 0;
int inMissionCount = 0;
int debuggingAircraftCount = 0;
int offlineAircraftCount = 0;
2026-01-30 16:06:29 +08:00
if (aircrafts != null && aircraftDetailsMap != null) {
2026-01-23 10:22:07 +08:00
for (AircraftDTO aircraft : aircrafts) {
2026-01-30 16:06:29 +08:00
AircraftDetailDTO aircraftDetail = aircraftDetailsMap.get(aircraft.getAircraftId());
2026-01-23 10:22:07 +08:00
if (aircraftDetail != null && aircraftDetail.getAircraftStatus() != null) {
String status = aircraftDetail.getAircraftStatus();
if (AircraftStatusEnum.POWER_ON_IN_CABIN.getCode().equals(status)) {
powerOnInCabinCount++;
} else if (AircraftStatusEnum.POWER_OFF_IN_CABIN.getCode().equals(status)) {
powerOffInCabinCount++;
} else if (AircraftStatusEnum.IN_MISSION.getCode().equals(status)) {
inMissionCount++;
} else if (AircraftStatusEnum.DEBUGGING.getCode().equals(status)) {
debuggingAircraftCount++;
} else if (AircraftStatusEnum.OFFLINE.getCode().equals(status)) {
offlineAircraftCount++;
2026-01-26 11:08:44 +08:00
} else {
offlineAircraftCount++;
2026-01-23 10:22:07 +08:00
}
}
}
}
vo.setPowerOnInCabinCount(powerOnInCabinCount);
vo.setPowerOffInCabinCount(powerOffInCabinCount);
vo.setInMissionCount(inMissionCount);
vo.setDebuggingAircraftCount(debuggingAircraftCount);
vo.setOfflineAircraftCount(offlineAircraftCount);
// 获取所有挂载
List<PayloadDTO> payloads = payloadService.selectPayloadList(new PayloadDTO());
vo.setPayloadCount(payloads != null ? payloads.size() : 0);
// 统计离线挂载数量暂时设置为0因为挂载状态需要从实时数据获取
vo.setOfflinePayloadCount(0);
return R.ok(vo);
}
2026-01-23 16:19:47 +08:00
@GetMapping("/dji")
public R<StatisticsVO> getDjiStatistics()
{
StatisticsVO vo = new StatisticsVO();
// 获取所有机场
List<DockDTO> docks = dockService.selectDockList(new DockDTO());
vo.setDockCount(docks != null ? docks.size() : 0);
2026-01-30 16:06:29 +08:00
// 批量获取机场详情 - 优化从N次查询减少到1次批量查询
Map<Long, DockDetailDTO> dockDetailsMap = null;
if (docks != null && !docks.isEmpty()) {
List<Long> dockIds = docks.stream()
.map(DockDTO::getDockId)
.collect(Collectors.toList());
dockDetailsMap = bufferDeviceService.getDockDetailsByIds(dockIds);
}
2026-01-23 16:19:47 +08:00
// 统计各状态机场数量
int idleCount = 0;
int workingCount = 0;
int debuggingCount = 0;
int offlineCount = 0;
2026-01-30 16:06:29 +08:00
if (docks != null && dockDetailsMap != null) {
2026-01-23 16:19:47 +08:00
for (DockDTO dock : docks) {
2026-01-30 16:06:29 +08:00
DockDetailDTO dockDetail = dockDetailsMap.get(dock.getDockId());
2026-01-23 16:19:47 +08:00
if (dockDetail != null && dockDetail.getDockStatus() != null) {
String status = dockDetail.getDockStatus();
if (DockStatusEnum.IDLE.getCode().equals(status)) {
idleCount++;
} else if (DockStatusEnum.WORKING.getCode().equals(status)) {
workingCount++;
} else if (DockStatusEnum.Debugging.getCode().equals(status)) {
debuggingCount++;
} else {
offlineCount++;
}
}
}
}
vo.setIdleDockCount(idleCount);
vo.setWorkingDockCount(workingCount);
vo.setDebuggingDockCount(debuggingCount);
vo.setOfflineDockCount(offlineCount);
// 获取所有无人机
List<AircraftDTO> aircrafts = aircraftService.selectAircraftList(new AircraftDTO());
vo.setAircraftCount(aircrafts != null ? aircrafts.size() : 0);
2026-01-30 16:06:29 +08:00
// 批量获取无人机详情 - 优化从N次查询减少到1次批量查询
Map<Long, AircraftDetailDTO> aircraftDetailsMap = null;
if (aircrafts != null && !aircrafts.isEmpty()) {
List<Long> aircraftIds = aircrafts.stream()
.map(AircraftDTO::getAircraftId)
.collect(Collectors.toList());
aircraftDetailsMap = bufferDeviceService.getAircraftDetailsByIds(aircraftIds);
}
2026-01-23 16:19:47 +08:00
// 统计各状态无人机数量
int powerOnInCabinCount = 0;
int powerOffInCabinCount = 0;
int inMissionCount = 0;
int debuggingAircraftCount = 0;
int offlineAircraftCount = 0;
2026-01-30 16:06:29 +08:00
if (aircrafts != null && aircraftDetailsMap != null) {
2026-01-23 16:19:47 +08:00
for (AircraftDTO aircraft : aircrafts) {
2026-01-30 16:06:29 +08:00
AircraftDetailDTO aircraftDetail = aircraftDetailsMap.get(aircraft.getAircraftId());
2026-01-23 16:19:47 +08:00
if (aircraftDetail != null && aircraftDetail.getAircraftStatus() != null) {
String status = aircraftDetail.getAircraftStatus();
if (AircraftStatusEnum.POWER_ON_IN_CABIN.getCode().equals(status)) {
powerOnInCabinCount++;
} else if (AircraftStatusEnum.POWER_OFF_IN_CABIN.getCode().equals(status)) {
powerOffInCabinCount++;
} else if (AircraftStatusEnum.IN_MISSION.getCode().equals(status)) {
inMissionCount++;
} else if (AircraftStatusEnum.DEBUGGING.getCode().equals(status)) {
debuggingAircraftCount++;
} else if (AircraftStatusEnum.OFFLINE.getCode().equals(status)) {
offlineAircraftCount++;
2026-01-26 11:08:44 +08:00
} else {
offlineAircraftCount++;
2026-01-23 16:19:47 +08:00
}
}
}
}
vo.setPowerOnInCabinCount(powerOnInCabinCount);
vo.setPowerOffInCabinCount(powerOffInCabinCount);
vo.setInMissionCount(inMissionCount);
vo.setDebuggingAircraftCount(debuggingAircraftCount);
vo.setOfflineAircraftCount(offlineAircraftCount);
// 获取所有挂载
List<PayloadDTO> payloads = payloadService.selectPayloadList(new PayloadDTO());
vo.setPayloadCount(payloads != null ? payloads.size() : 0);
// 统计离线挂载数量暂时设置为0因为挂载状态需要从实时数据获取
vo.setOfflinePayloadCount(0);
return R.ok(vo);
}
@GetMapping("/th")
public R<StatisticsVO> getThStatistics()
{
StatisticsVO vo = new StatisticsVO();
// 机场统计
vo.setDockCount(0);
vo.setIdleDockCount(0);
vo.setWorkingDockCount(0);
vo.setDebuggingDockCount(0);
vo.setOfflineDockCount(0);
// 无人机统计
vo.setAircraftCount(0);
vo.setPowerOnInCabinCount(0);
vo.setPowerOffInCabinCount(0);
vo.setInMissionCount(0);
vo.setDebuggingAircraftCount(0);
vo.setOfflineAircraftCount(0);
// 挂载统计
vo.setPayloadCount(0);
vo.setOfflinePayloadCount(0);
return R.ok(vo);
}
2026-01-23 10:22:07 +08:00
}