From ab777c748ebefa7532c01b974b83051970b44432 Mon Sep 17 00:00:00 2001 From: chiguyong Date: Tue, 24 Mar 2026 00:13:37 +0800 Subject: [PATCH] feat: add maintenance plan and task controllers --- .../controller/MaintenancePlanController.java | 54 +++++++++++++ .../controller/MaintenanceTaskController.java | 81 +++++++++++++++++++ 2 files changed, 135 insertions(+) create mode 100644 module-mdm/src/main/java/com/ether/pms/mdm/controller/MaintenancePlanController.java create mode 100644 module-mdm/src/main/java/com/ether/pms/mdm/controller/MaintenanceTaskController.java diff --git a/module-mdm/src/main/java/com/ether/pms/mdm/controller/MaintenancePlanController.java b/module-mdm/src/main/java/com/ether/pms/mdm/controller/MaintenancePlanController.java new file mode 100644 index 0000000..80f5922 --- /dev/null +++ b/module-mdm/src/main/java/com/ether/pms/mdm/controller/MaintenancePlanController.java @@ -0,0 +1,54 @@ +package com.ether.pms.mdm.controller; + +import com.ether.pms.common.ApiResponse; +import com.ether.pms.mdm.entity.MaintenancePlan; +import com.ether.pms.mdm.service.MaintenancePlanService; +import jakarta.validation.Valid; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; + +import java.util.List; +import java.util.UUID; + +@RestController +@RequestMapping("/api/v1/ops/maintenance-plans") +@RequiredArgsConstructor +public class MaintenancePlanController { + + private final MaintenancePlanService maintenancePlanService; + + @PostMapping + public ApiResponse createPlan(@Valid @RequestBody MaintenancePlan plan) { + MaintenancePlan created = maintenancePlanService.createPlan(plan); + return ApiResponse.success(created); + } + + @GetMapping + public ApiResponse> getPlans( + @RequestParam UUID projectId, + @RequestParam(required = false) MaintenancePlan.TriggerType triggerType) { + List plans; + if (triggerType != null) { + plans = maintenancePlanService.getPlansByTriggerType(triggerType); + } else { + plans = maintenancePlanService.getActivePlansByProject(projectId); + } + return ApiResponse.success(plans); + } + + @GetMapping("/{id}") + public ApiResponse getPlan(@PathVariable UUID id) { + return ApiResponse.success(maintenancePlanService.getPlanById(id)); + } + + @PutMapping("/{id}") + public ApiResponse updatePlan(@PathVariable UUID id, @Valid @RequestBody MaintenancePlan plan) { + return ApiResponse.success(maintenancePlanService.updatePlan(id, plan)); + } + + @DeleteMapping("/{id}") + public ApiResponse deactivatePlan(@PathVariable UUID id) { + maintenancePlanService.deactivatePlan(id); + return ApiResponse.success(null); + } +} \ No newline at end of file diff --git a/module-mdm/src/main/java/com/ether/pms/mdm/controller/MaintenanceTaskController.java b/module-mdm/src/main/java/com/ether/pms/mdm/controller/MaintenanceTaskController.java new file mode 100644 index 0000000..ac073ac --- /dev/null +++ b/module-mdm/src/main/java/com/ether/pms/mdm/controller/MaintenanceTaskController.java @@ -0,0 +1,81 @@ +package com.ether.pms.mdm.controller; + +import com.ether.pms.common.ApiResponse; +import com.ether.pms.mdm.entity.MaintenanceTask; +import com.ether.pms.mdm.service.MaintenanceTaskService; +import jakarta.validation.Valid; +import lombok.Data; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; + +import java.math.BigDecimal; +import java.util.List; +import java.util.UUID; + +@RestController +@RequestMapping("/api/v1/ops/maintenance-tasks") +@RequiredArgsConstructor +public class MaintenanceTaskController { + + private final MaintenanceTaskService maintenanceTaskService; + + @GetMapping + public ApiResponse> getTasks( + @RequestParam(required = false) UUID projectId, + @RequestParam(required = false) UUID assignee, + @RequestParam(required = false) MaintenanceTask.Status status, + @RequestParam(required = false) UUID equipmentId) { + List tasks; + if (equipmentId != null) { + tasks = maintenanceTaskService.getTasksByEquipment(equipmentId); + } else if (assignee != null) { + tasks = maintenanceTaskService.getTasksByAssignee(assignee); + } else if (status != null && projectId != null) { + tasks = maintenanceTaskService.getTasksByStatus(projectId, status); + } else { + tasks = maintenanceTaskService.getOverdueTasks(); + } + return ApiResponse.success(tasks); + } + + @GetMapping("/{id}") + public ApiResponse getTask(@PathVariable UUID id) { + return ApiResponse.success(maintenanceTaskService.getTaskById(id)); + } + + @PostMapping + public ApiResponse createTask(@Valid @RequestBody MaintenanceTask task) { + return ApiResponse.success(maintenanceTaskService.createTask(task)); + } + + @PostMapping("/{id}/accept") + public ApiResponse acceptTask(@PathVariable UUID id, @RequestParam UUID userId) { + return ApiResponse.success(maintenanceTaskService.acceptTask(id, userId)); + } + + @PostMapping("/{id}/start") + public ApiResponse startTask(@PathVariable UUID id) { + return ApiResponse.success(maintenanceTaskService.startTask(id)); + } + + @PostMapping("/{id}/complete") + public ApiResponse completeTask( + @PathVariable UUID id, + @RequestBody CompleteTaskRequest request) { + return ApiResponse.success(maintenanceTaskService.completeTask( + id, request.getLaborHours(), request.getMaterialsCost(), request.getRemarks())); + } + + @PostMapping("/{id}/cancel") + public ApiResponse cancelTask(@PathVariable UUID id) { + maintenanceTaskService.cancelTask(id); + return ApiResponse.success(null); + } + + @Data + public static class CompleteTaskRequest { + private BigDecimal laborHours; + private BigDecimal materialsCost; + private String remarks; + } +} \ No newline at end of file