diff --git a/src/main/java/com/ruoyi/device/controller/StaticsController.java b/src/main/java/com/ruoyi/device/controller/StaticsController.java new file mode 100644 index 0000000..18de2cc --- /dev/null +++ b/src/main/java/com/ruoyi/device/controller/StaticsController.java @@ -0,0 +1,136 @@ +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 getStatistics() + { + StatisticsVO vo = new StatisticsVO(); + + // 获取所有机场 + List 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 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 payloads = payloadService.selectPayloadList(new PayloadDTO()); + vo.setPayloadCount(payloads != null ? payloads.size() : 0); + + // 统计离线挂载数量(暂时设置为0,因为挂载状态需要从实时数据获取) + vo.setOfflinePayloadCount(0); + + return R.ok(vo); + } +} \ No newline at end of file