From 9e8993260078bef8a77371ba87a8e0a721693194 Mon Sep 17 00:00:00 2001 From: chiguyong Date: Tue, 24 Mar 2026 00:41:06 +0800 Subject: [PATCH] feat: add spare part management controller --- .../mdm/controller/SparePartController.java | 114 ++++++++++++++++++ 1 file changed, 114 insertions(+) create mode 100644 module-mdm/src/main/java/com/ether/pms/mdm/controller/SparePartController.java diff --git a/module-mdm/src/main/java/com/ether/pms/mdm/controller/SparePartController.java b/module-mdm/src/main/java/com/ether/pms/mdm/controller/SparePartController.java new file mode 100644 index 0000000..a7335b6 --- /dev/null +++ b/module-mdm/src/main/java/com/ether/pms/mdm/controller/SparePartController.java @@ -0,0 +1,114 @@ +package com.ether.pms.mdm.controller; + +import com.ether.pms.common.ApiResponse; +import com.ether.pms.mdm.entity.SparePart; +import com.ether.pms.mdm.entity.SparePartCategory; +import com.ether.pms.mdm.entity.SparePartRecord; +import com.ether.pms.mdm.service.SparePartService; +import jakarta.validation.Valid; +import lombok.Data; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; + +import java.util.List; +import java.util.UUID; + +@RestController +@RequestMapping("/api/v1/ops/spare-parts") +@RequiredArgsConstructor +public class SparePartController { + + private final SparePartService sparePartService; + + // ==================== 分类管理 ==================== + + @GetMapping("/categories") + public ApiResponse> getCategories() { + return ApiResponse.success(sparePartService.getCategories()); + } + + @PostMapping("/categories") + public ApiResponse createCategory(@Valid @RequestBody SparePartCategory category) { + return ApiResponse.success(sparePartService.createCategory(category)); + } + + // ==================== 备件管理 ==================== + + @GetMapping + public ApiResponse> getSpareParts( + @RequestParam UUID projectId, + @RequestParam(required = false) UUID categoryId) { + List spareParts; + if (categoryId != null) { + spareParts = sparePartService.getSparePartsByCategory(categoryId); + } else { + spareParts = sparePartService.getSparePartsByProject(projectId); + } + return ApiResponse.success(spareParts); + } + + @GetMapping("/{id}") + public ApiResponse getSparePart(@PathVariable UUID id) { + return ApiResponse.success(sparePartService.getSparePartById(id)); + } + + @PostMapping + public ApiResponse createSparePart(@Valid @RequestBody SparePart sparePart) { + return ApiResponse.success(sparePartService.createSparePart(sparePart)); + } + + @PutMapping("/{id}") + public ApiResponse updateSparePart(@PathVariable UUID id, @Valid @RequestBody SparePart sparePart) { + return ApiResponse.success(sparePartService.updateSparePart(id, sparePart)); + } + + @DeleteMapping("/{id}") + public ApiResponse deleteSparePart(@PathVariable UUID id) { + sparePartService.deleteSparePart(id); + return ApiResponse.success(null); + } + + @GetMapping("/low-stock") + public ApiResponse> getLowStockParts(@RequestParam UUID projectId) { + return ApiResponse.success(sparePartService.getLowStockParts(projectId)); + } + + // ==================== 库存操作 ==================== + + @PostMapping("/in-stock") + public ApiResponse inStock(@RequestBody StockRequest request) { + SparePartRecord record = sparePartService.inStock( + request.getSparePartId(), request.getQuantity(), request.getRecordedBy(), request.getRemarks()); + return ApiResponse.success(record); + } + + @PostMapping("/out-stock") + public ApiResponse outStock(@RequestBody OutStockRequest request) { + SparePartRecord record = sparePartService.outStock( + request.getSparePartId(), request.getQuantity(), + request.getRelatedOrderId(), request.getRecordedBy(), request.getRemarks()); + return ApiResponse.success(record); + } + + @GetMapping("/{id}/records") + public ApiResponse> getSparePartRecords(@PathVariable UUID id) { + return ApiResponse.success(sparePartService.getSparePartRecords(id)); + } + + @Data + public static class StockRequest { + private UUID sparePartId; + private Integer quantity; + private UUID recordedBy; + private String remarks; + } + + @Data + public static class OutStockRequest { + private UUID sparePartId; + private Integer quantity; + private UUID relatedOrderId; + private UUID recordedBy; + private String remarks; + } +} \ No newline at end of file