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);
|
result.put(type, BigDecimal.ZERO);
|
||||||
}
|
}
|
||||||
|
|
||||||
// 累加每种类型的消耗
|
// 由于 EnergyConsumption 没有 energyType 字段,按项目统计总消耗
|
||||||
for (EnergyMeter.EnergyType type : EnergyMeter.EnergyType.values()) {
|
BigDecimal totalConsumption = energyConsumptionRepository
|
||||||
BigDecimal totalConsumption = energyConsumptionRepository
|
.sumConsumptionByProjectAndDateRange(projectId, startDate, endDate);
|
||||||
.sumConsumptionByProjectAndTypeAndDateRange(projectId, type, startDate, endDate);
|
if (totalConsumption != null) {
|
||||||
if (totalConsumption != null) {
|
// 将总消耗分配给 LIGHTING 类型作为展示(实际业务中应按 meter.energyType 汇总)
|
||||||
result.put(type, totalConsumption);
|
result.put(EnergyMeter.EnergyType.LIGHTING, totalConsumption);
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue