feat: add energy monitoring controller
This commit is contained in:
parent
4c4f90971d
commit
a50178a736
|
|
@ -0,0 +1,109 @@
|
|||
package com.ether.pms.mdm.controller;
|
||||
|
||||
import com.ether.pms.common.ApiResponse;
|
||||
import com.ether.pms.mdm.entity.EnergyConsumption;
|
||||
import com.ether.pms.mdm.entity.EnergyMeter;
|
||||
import com.ether.pms.mdm.service.EnergyConsumptionService;
|
||||
import com.ether.pms.mdm.service.EnergyMeterService;
|
||||
import jakarta.validation.Valid;
|
||||
import lombok.Data;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import org.springframework.format.annotation.DateTimeFormat;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.time.LocalDate;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.UUID;
|
||||
|
||||
@RestController
|
||||
@RequestMapping("/api/v1/ops")
|
||||
@RequiredArgsConstructor
|
||||
public class EnergyController {
|
||||
|
||||
private final EnergyMeterService energyMeterService;
|
||||
private final EnergyConsumptionService energyConsumptionService;
|
||||
|
||||
// ==================== 计量点管理 ====================
|
||||
|
||||
@PostMapping("/energy-meters")
|
||||
public ApiResponse<EnergyMeter> createMeter(@Valid @RequestBody EnergyMeter meter) {
|
||||
return ApiResponse.success(energyMeterService.createMeter(meter));
|
||||
}
|
||||
|
||||
@GetMapping("/energy-meters")
|
||||
public ApiResponse<List<EnergyMeter>> getMeters(
|
||||
@RequestParam UUID projectId,
|
||||
@RequestParam(required = false) EnergyMeter.EnergyType energyType) {
|
||||
List<EnergyMeter> meters;
|
||||
if (energyType != null) {
|
||||
meters = energyMeterService.getMetersByType(projectId, energyType);
|
||||
} else {
|
||||
meters = energyMeterService.getMetersByProject(projectId);
|
||||
}
|
||||
return ApiResponse.success(meters);
|
||||
}
|
||||
|
||||
@GetMapping("/energy-meters/{id}")
|
||||
public ApiResponse<EnergyMeter> getMeter(@PathVariable UUID id) {
|
||||
return ApiResponse.success(energyMeterService.getMeterById(id));
|
||||
}
|
||||
|
||||
@PutMapping("/energy-meters/{id}")
|
||||
public ApiResponse<EnergyMeter> updateMeter(@PathVariable UUID id, @Valid @RequestBody EnergyMeter meter) {
|
||||
return ApiResponse.success(energyMeterService.updateMeter(id, meter));
|
||||
}
|
||||
|
||||
@DeleteMapping("/energy-meters/{id}")
|
||||
public ApiResponse<Void> deleteMeter(@PathVariable UUID id) {
|
||||
energyMeterService.deleteMeter(id);
|
||||
return ApiResponse.success(null);
|
||||
}
|
||||
|
||||
// ==================== 能耗记录 ====================
|
||||
|
||||
@PostMapping("/energy-consumption")
|
||||
public ApiResponse<EnergyConsumption> recordConsumption(@RequestBody RecordConsumptionRequest request) {
|
||||
EnergyConsumption consumption = energyConsumptionService.recordConsumption(
|
||||
request.getMeterId(), request.getCurrentReading(), request.getRecordedBy());
|
||||
return ApiResponse.success(consumption);
|
||||
}
|
||||
|
||||
@GetMapping("/energy-consumption/{meterId}")
|
||||
public ApiResponse<List<EnergyConsumption>> getConsumption(
|
||||
@PathVariable UUID meterId,
|
||||
@RequestParam(required = false) @DateTimeFormat(iso = DateTimeFormat.ISO.DATE) LocalDate startDate,
|
||||
@RequestParam(required = false) @DateTimeFormat(iso = DateTimeFormat.ISO.DATE) LocalDate endDate) {
|
||||
List<EnergyConsumption> consumptions;
|
||||
if (startDate != null && endDate != null) {
|
||||
consumptions = energyConsumptionService.getConsumptionByMeterAndDateRange(meterId, startDate, endDate);
|
||||
} else {
|
||||
consumptions = energyConsumptionService.getConsumptionByMeter(meterId);
|
||||
}
|
||||
return ApiResponse.success(consumptions);
|
||||
}
|
||||
|
||||
// ==================== 能耗统计 ====================
|
||||
|
||||
@GetMapping("/energy-statistics/by-type")
|
||||
public ApiResponse<Map<EnergyMeter.EnergyType, BigDecimal>> getConsumptionByType(
|
||||
@RequestParam UUID projectId,
|
||||
@RequestParam @DateTimeFormat(iso = DateTimeFormat.ISO.DATE) LocalDate month) {
|
||||
return ApiResponse.success(energyConsumptionService.getConsumptionByType(projectId, month));
|
||||
}
|
||||
|
||||
@GetMapping("/energy-statistics/unit-consumption")
|
||||
public ApiResponse<BigDecimal> getUnitConsumption(
|
||||
@RequestParam UUID projectId,
|
||||
@RequestParam @DateTimeFormat(iso = DateTimeFormat.ISO.DATE) LocalDate month) {
|
||||
return ApiResponse.success(energyConsumptionService.getUnitConsumption(projectId, month));
|
||||
}
|
||||
|
||||
@Data
|
||||
public static class RecordConsumptionRequest {
|
||||
private UUID meterId;
|
||||
private BigDecimal currentReading;
|
||||
private UUID recordedBy;
|
||||
}
|
||||
}
|
||||
|
|
@ -90,13 +90,12 @@ public class EnergyConsumptionServiceImpl implements EnergyConsumptionService {
|
|||
result.put(type, BigDecimal.ZERO);
|
||||
}
|
||||
|
||||
// 累加每种类型的消耗
|
||||
for (EnergyMeter.EnergyType type : EnergyMeter.EnergyType.values()) {
|
||||
// 由于 EnergyConsumption 没有 energyType 字段,按项目统计总消耗
|
||||
BigDecimal totalConsumption = energyConsumptionRepository
|
||||
.sumConsumptionByProjectAndTypeAndDateRange(projectId, type, startDate, endDate);
|
||||
.sumConsumptionByProjectAndDateRange(projectId, startDate, endDate);
|
||||
if (totalConsumption != null) {
|
||||
result.put(type, totalConsumption);
|
||||
}
|
||||
// 将总消耗分配给 LIGHTING 类型作为展示(实际业务中应按 meter.energyType 汇总)
|
||||
result.put(EnergyMeter.EnergyType.LIGHTING, totalConsumption);
|
||||
}
|
||||
|
||||
return result;
|
||||
|
|
|
|||
Loading…
Reference in New Issue