diff --git a/module-mdm/src/main/java/com/ether/pms/mdm/controller/EnergyController.java b/module-mdm/src/main/java/com/ether/pms/mdm/controller/EnergyController.java new file mode 100644 index 0000000..ab21701 --- /dev/null +++ b/module-mdm/src/main/java/com/ether/pms/mdm/controller/EnergyController.java @@ -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 createMeter(@Valid @RequestBody EnergyMeter meter) { + return ApiResponse.success(energyMeterService.createMeter(meter)); + } + + @GetMapping("/energy-meters") + public ApiResponse> getMeters( + @RequestParam UUID projectId, + @RequestParam(required = false) EnergyMeter.EnergyType energyType) { + List meters; + if (energyType != null) { + meters = energyMeterService.getMetersByType(projectId, energyType); + } else { + meters = energyMeterService.getMetersByProject(projectId); + } + return ApiResponse.success(meters); + } + + @GetMapping("/energy-meters/{id}") + public ApiResponse getMeter(@PathVariable UUID id) { + return ApiResponse.success(energyMeterService.getMeterById(id)); + } + + @PutMapping("/energy-meters/{id}") + public ApiResponse updateMeter(@PathVariable UUID id, @Valid @RequestBody EnergyMeter meter) { + return ApiResponse.success(energyMeterService.updateMeter(id, meter)); + } + + @DeleteMapping("/energy-meters/{id}") + public ApiResponse deleteMeter(@PathVariable UUID id) { + energyMeterService.deleteMeter(id); + return ApiResponse.success(null); + } + + // ==================== 能耗记录 ==================== + + @PostMapping("/energy-consumption") + public ApiResponse recordConsumption(@RequestBody RecordConsumptionRequest request) { + EnergyConsumption consumption = energyConsumptionService.recordConsumption( + request.getMeterId(), request.getCurrentReading(), request.getRecordedBy()); + return ApiResponse.success(consumption); + } + + @GetMapping("/energy-consumption/{meterId}") + public ApiResponse> 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 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> 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 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; + } +} \ No newline at end of file diff --git a/module-mdm/src/main/java/com/ether/pms/mdm/service/impl/EnergyConsumptionServiceImpl.java b/module-mdm/src/main/java/com/ether/pms/mdm/service/impl/EnergyConsumptionServiceImpl.java index cab798f..61a3a5c 100644 --- a/module-mdm/src/main/java/com/ether/pms/mdm/service/impl/EnergyConsumptionServiceImpl.java +++ b/module-mdm/src/main/java/com/ether/pms/mdm/service/impl/EnergyConsumptionServiceImpl.java @@ -90,13 +90,12 @@ public class EnergyConsumptionServiceImpl implements EnergyConsumptionService { result.put(type, BigDecimal.ZERO); } - // 累加每种类型的消耗 - for (EnergyMeter.EnergyType type : EnergyMeter.EnergyType.values()) { - BigDecimal totalConsumption = energyConsumptionRepository - .sumConsumptionByProjectAndTypeAndDateRange(projectId, type, startDate, endDate); - if (totalConsumption != null) { - result.put(type, totalConsumption); - } + // 由于 EnergyConsumption 没有 energyType 字段,按项目统计总消耗 + BigDecimal totalConsumption = energyConsumptionRepository + .sumConsumptionByProjectAndDateRange(projectId, startDate, endDate); + if (totalConsumption != null) { + // 将总消耗分配给 LIGHTING 类型作为展示(实际业务中应按 meter.energyType 汇总) + result.put(EnergyMeter.EnergyType.LIGHTING, totalConsumption); } return result;