diff --git a/wm-revenue/pom.xml b/wm-revenue/pom.xml
index 64f4d965..59429eed 100644
--- a/wm-revenue/pom.xml
+++ b/wm-revenue/pom.xml
@@ -6,8 +6,9 @@
com.water
- water-management-system
- 1.0.0
+ wm-parent
+ 1.0.0-SNAPSHOT
+ ../pom.xml
wm-revenue
diff --git a/wm-revenue/src/main/java/com/water/revenue/controller/MeterLifecycleController.java b/wm-revenue/src/main/java/com/water/revenue/controller/MeterLifecycleController.java
new file mode 100644
index 00000000..80fbea3c
--- /dev/null
+++ b/wm-revenue/src/main/java/com/water/revenue/controller/MeterLifecycleController.java
@@ -0,0 +1,153 @@
+package com.water.revenue.controller;
+
+import com.water.revenue.service.MeterService;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.http.ResponseEntity;
+import org.springframework.web.bind.annotation.*;
+
+import java.math.BigDecimal;
+import java.util.List;
+import java.util.Map;
+
+@Slf4j
+@RestController
+@RequiredArgsConstructor
+@RequestMapping("/api/meter/lifecycle")
+public class MeterLifecycleController {
+
+ private final MeterService meterService;
+
+ /**
+ * 水表入库
+ */
+ @PostMapping("/stock-in")
+ public ResponseEntity> stockIn(
+ @RequestParam String meterNo,
+ @RequestParam String caliber,
+ @RequestParam String meterType,
+ @RequestParam String manufacturer,
+ @RequestParam int quantity,
+ @RequestParam String operatorId,
+ @RequestParam String operatorName) {
+
+ try {
+ meterService.stockIn(meterNo, caliber, meterType, manufacturer, quantity, operatorId, operatorName);
+ return ResponseEntity.ok().body(Map.of("success", true, "message", "水表入库成功"));
+ } catch (Exception e) {
+ log.error("水表入库失败", e);
+ return ResponseEntity.badRequest().body(Map.of("success", false, "message", "水表入库失败: " + e.getMessage()));
+ }
+ }
+
+ /**
+ * 水表安装
+ */
+ @PostMapping("/install")
+ public ResponseEntity> install(
+ @RequestParam Long meterId,
+ @RequestParam Long customerId,
+ @RequestParam String address,
+ @RequestParam BigDecimal initialReading,
+ @RequestParam String operatorId,
+ @RequestParam String operatorName) {
+
+ try {
+ meterService.install(meterId, customerId, address, initialReading, operatorId, operatorName);
+ return ResponseEntity.ok().body(Map.of("success", true, "message", "水表安装成功"));
+ } catch (Exception e) {
+ log.error("水表安装失败", e);
+ return ResponseEntity.badRequest().body(Map.of("success", false, "message", "水表安装失败: " + e.getMessage()));
+ }
+ }
+
+ /**
+ * 故障换表
+ */
+ @PostMapping("/replace")
+ public ResponseEntity> replace(
+ @RequestParam Long oldMeterId,
+ @RequestParam Long newMeterId,
+ @RequestParam BigDecimal oldReading,
+ @RequestParam String remark,
+ @RequestParam String operatorId,
+ @RequestParam String operatorName) {
+
+ try {
+ meterService.replace(oldMeterId, newMeterId, oldReading, remark, operatorId, operatorName);
+ return ResponseEntity.ok().body(Map.of("success", true, "message", "换表成功"));
+ } catch (Exception e) {
+ log.error("换表失败", e);
+ return ResponseEntity.badRequest().body(Map.of("success", false, "message", "换表失败: " + e.getMessage()));
+ }
+ }
+
+ /**
+ * 水表报废
+ */
+ @PostMapping("/scrap")
+ public ResponseEntity> scrap(
+ @RequestParam Long meterId,
+ @RequestParam String reason,
+ @RequestParam String operatorId,
+ @RequestParam String operatorName) {
+
+ try {
+ meterService.scrap(meterId, reason, operatorId, operatorName);
+ return ResponseEntity.ok().body(Map.of("success", true, "message", "水表报废成功"));
+ } catch (Exception e) {
+ log.error("水表报废失败", e);
+ return ResponseEntity.badRequest().body(Map.of("success", false, "message", "水表报废失败: " + e.getMessage()));
+ }
+ }
+
+ /**
+ * 查询水表生命周期记录
+ */
+ @GetMapping("/lifecycle/{meterId}")
+ public ResponseEntity>> getLifecycle(@PathVariable Long meterId) {
+ List