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;
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
* 统计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);
|
|
|
|
|
|
|
|
|
|
|
|
// 统计各状态机场数量
|
|
|
|
|
|
int idleCount = 0;
|
|
|
|
|
|
int workingCount = 0;
|
|
|
|
|
|
int debuggingCount = 0;
|
|
|
|
|
|
int offlineCount = 0;
|
|
|
|
|
|
|
|
|
|
|
|
if (docks != null) {
|
|
|
|
|
|
for (DockDTO dock : docks) {
|
|
|
|
|
|
DockDetailDTO dockDetail = bufferDeviceService.getDockDetailById(dock.getDockId());
|
|
|
|
|
|
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);
|
|
|
|
|
|
|
|
|
|
|
|
// 统计各状态无人机数量
|
|
|
|
|
|
int powerOnInCabinCount = 0;
|
|
|
|
|
|
int powerOffInCabinCount = 0;
|
|
|
|
|
|
int inMissionCount = 0;
|
|
|
|
|
|
int debuggingAircraftCount = 0;
|
|
|
|
|
|
int offlineAircraftCount = 0;
|
|
|
|
|
|
|
|
|
|
|
|
if (aircrafts != null) {
|
|
|
|
|
|
for (AircraftDTO aircraft : aircrafts) {
|
|
|
|
|
|
AircraftDetailDTO aircraftDetail = bufferDeviceService.getAircraftDetailById(aircraft.getAircraftId());
|
|
|
|
|
|
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++;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
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);
|
|
|
|
|
|
|
|
|
|
|
|
// 统计各状态机场数量
|
|
|
|
|
|
int idleCount = 0;
|
|
|
|
|
|
int workingCount = 0;
|
|
|
|
|
|
int debuggingCount = 0;
|
|
|
|
|
|
int offlineCount = 0;
|
|
|
|
|
|
|
|
|
|
|
|
if (docks != null) {
|
|
|
|
|
|
for (DockDTO dock : docks) {
|
|
|
|
|
|
DockDetailDTO dockDetail = bufferDeviceService.getDockDetailById(dock.getDockId());
|
|
|
|
|
|
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);
|
|
|
|
|
|
|
|
|
|
|
|
// 统计各状态无人机数量
|
|
|
|
|
|
int powerOnInCabinCount = 0;
|
|
|
|
|
|
int powerOffInCabinCount = 0;
|
|
|
|
|
|
int inMissionCount = 0;
|
|
|
|
|
|
int debuggingAircraftCount = 0;
|
|
|
|
|
|
int offlineAircraftCount = 0;
|
|
|
|
|
|
|
|
|
|
|
|
if (aircrafts != null) {
|
|
|
|
|
|
for (AircraftDTO aircraft : aircrafts) {
|
|
|
|
|
|
AircraftDetailDTO aircraftDetail = bufferDeviceService.getAircraftDetailById(aircraft.getAircraftId());
|
|
|
|
|
|
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++;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
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
|
|
|
|
}
|