Skip to content

Commit 5139db2

Browse files
committed
Add maintenance record generation
1 parent c20d5f8 commit 5139db2

5 files changed

Lines changed: 764 additions & 0 deletions

File tree

Lines changed: 144 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,144 @@
1+
package com.apexgrid.transformertracker.model;
2+
3+
import com.fasterxml.jackson.annotation.JsonIgnore;
4+
import jakarta.persistence.*;
5+
import java.math.BigDecimal;
6+
7+
@Entity
8+
@Table(name = "maintenance_records")
9+
public class MaintenanceRecord {
10+
@Id
11+
@GeneratedValue(strategy = GenerationType.UUID)
12+
private String id;
13+
14+
@Column(name = "timestamp", nullable = false, columnDefinition = "text")
15+
private String timestamp;
16+
17+
@Column(name = "transformername", nullable = false)
18+
private String transformerName;
19+
20+
@Column(name = "inspectorname")
21+
private String inspectorName;
22+
23+
@Column(name = "status")
24+
private String status;
25+
26+
@Column(name = "voltage")
27+
private BigDecimal voltage;
28+
29+
@Column(name = "current")
30+
private BigDecimal current;
31+
32+
@Column(name = "efficiency")
33+
private BigDecimal efficiency;
34+
35+
@Column(name = "reccomendation", columnDefinition = "text")
36+
private String recommendation;
37+
38+
@Column(name = "remarks", columnDefinition = "text")
39+
private String remarks;
40+
41+
@Column(name = "inspectiondate")
42+
private String inspectionDate;
43+
44+
@OneToOne(fetch = FetchType.LAZY, optional = false)
45+
@JoinColumn(name = "inspectionid", nullable = false)
46+
@JsonIgnore
47+
private Inspection inspection;
48+
49+
public String getId() {
50+
return id;
51+
}
52+
53+
public void setId(String id) {
54+
this.id = id;
55+
}
56+
57+
public String getTimestamp() {
58+
return timestamp;
59+
}
60+
61+
public void setTimestamp(String timestamp) {
62+
this.timestamp = timestamp;
63+
}
64+
65+
public String getTransformerName() {
66+
return transformerName;
67+
}
68+
69+
public void setTransformerName(String transformerName) {
70+
this.transformerName = transformerName;
71+
}
72+
73+
public String getInspectorName() {
74+
return inspectorName;
75+
}
76+
77+
public void setInspectorName(String inspectorName) {
78+
this.inspectorName = inspectorName;
79+
}
80+
81+
public String getStatus() {
82+
return status;
83+
}
84+
85+
public void setStatus(String status) {
86+
this.status = status;
87+
}
88+
89+
public BigDecimal getVoltage() {
90+
return voltage;
91+
}
92+
93+
public void setVoltage(BigDecimal voltage) {
94+
this.voltage = voltage;
95+
}
96+
97+
public BigDecimal getCurrent() {
98+
return current;
99+
}
100+
101+
public void setCurrent(BigDecimal current) {
102+
this.current = current;
103+
}
104+
105+
public BigDecimal getEfficiency() {
106+
return efficiency;
107+
}
108+
109+
public void setEfficiency(BigDecimal efficiency) {
110+
this.efficiency = efficiency;
111+
}
112+
113+
public String getRecommendation() {
114+
return recommendation;
115+
}
116+
117+
public void setRecommendation(String recommendation) {
118+
this.recommendation = recommendation;
119+
}
120+
121+
public String getRemarks() {
122+
return remarks;
123+
}
124+
125+
public void setRemarks(String remarks) {
126+
this.remarks = remarks;
127+
}
128+
129+
public String getInspectionDate() {
130+
return inspectionDate;
131+
}
132+
133+
public void setInspectionDate(String inspectionDate) {
134+
this.inspectionDate = inspectionDate;
135+
}
136+
137+
public Inspection getInspection() {
138+
return inspection;
139+
}
140+
141+
public void setInspection(Inspection inspection) {
142+
this.inspection = inspection;
143+
}
144+
}
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
package com.apexgrid.transformertracker.repo;
2+
3+
import com.apexgrid.transformertracker.model.MaintenanceRecord;
4+
import org.springframework.data.jpa.repository.JpaRepository;
5+
6+
import java.util.Optional;
7+
8+
public interface MaintenanceRecordRepo extends JpaRepository<MaintenanceRecord, String> {
9+
Optional<MaintenanceRecord> findByInspectionId(String inspectionId);
10+
boolean existsByInspectionId(String inspectionId);
11+
}

backend/src/main/java/com/apexgrid/transformertracker/web/InspectionController.java

Lines changed: 109 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,10 @@
44
import com.apexgrid.transformertracker.ai.ParameterTuningService;
55
import com.apexgrid.transformertracker.ai.PythonAnalyzerService;
66
import com.apexgrid.transformertracker.model.Inspection;
7+
import com.apexgrid.transformertracker.model.MaintenanceRecord;
78
import com.apexgrid.transformertracker.model.Transformer;
89
import com.apexgrid.transformertracker.repo.InspectionRepo;
10+
import com.apexgrid.transformertracker.repo.MaintenanceRecordRepo;
911
import com.apexgrid.transformertracker.repo.TransformerRepo;
1012
import com.fasterxml.jackson.databind.JsonNode;
1113
import com.fasterxml.jackson.databind.ObjectMapper;
@@ -32,6 +34,7 @@
3234
import java.io.IOException;
3335
import java.io.InputStream;
3436
import java.nio.charset.StandardCharsets;
37+
import java.math.BigDecimal;
3538
import java.time.Instant;
3639
import java.util.ArrayList;
3740
import java.util.Arrays;
@@ -47,17 +50,20 @@
4750
public class InspectionController {
4851
private final InspectionRepo repo;
4952
private final TransformerRepo transformerRepo;
53+
private final MaintenanceRecordRepo maintenanceRecordRepo;
5054
private final PythonAnalyzerService pythonAnalyzerService;
5155
private final ParameterTuningService parameterTuningService;
5256
private final AiParameterService aiParameterService;
5357

5458
public InspectionController(InspectionRepo repo,
5559
TransformerRepo transformerRepo,
60+
MaintenanceRecordRepo maintenanceRecordRepo,
5661
PythonAnalyzerService pythonAnalyzerService,
5762
ParameterTuningService parameterTuningService,
5863
AiParameterService aiParameterService) {
5964
this.repo = repo;
6065
this.transformerRepo = transformerRepo;
66+
this.maintenanceRecordRepo = maintenanceRecordRepo;
6167
this.pythonAnalyzerService = pythonAnalyzerService;
6268
this.parameterTuningService = parameterTuningService;
6369
this.aiParameterService = aiParameterService;
@@ -76,6 +82,46 @@ public ResponseEntity<Inspection> getOne(@PathVariable String id) {
7682
.orElse(ResponseEntity.notFound().build());
7783
}
7884

85+
@GetMapping("/{id}/maintenance-record")
86+
public ResponseEntity<?> getMaintenanceRecord(@PathVariable String id) {
87+
if (!repo.existsById(id)) {
88+
return ResponseEntity.status(404).body(Map.of("error", "Inspection not found"));
89+
}
90+
var record = maintenanceRecordRepo.findByInspectionId(id);
91+
if (record.isPresent()) {
92+
return ResponseEntity.ok(MaintenanceRecordResponse.fromEntity(record.get()));
93+
}
94+
return ResponseEntity.status(404).body(Map.of("error", "Maintenance record not found"));
95+
}
96+
97+
@PostMapping("/{id}/maintenance-record")
98+
public ResponseEntity<?> upsertMaintenanceRecord(@PathVariable String id,
99+
@RequestBody(required = false) MaintenanceRecordRequest payload) {
100+
if (payload == null) {
101+
return ResponseEntity.badRequest().body(Map.of("error", "Request body is required"));
102+
}
103+
var inspectionOpt = repo.findById(id);
104+
if (inspectionOpt.isEmpty()) {
105+
return ResponseEntity.status(404).body(Map.of("error", "Inspection not found"));
106+
}
107+
MaintenanceRecord record = maintenanceRecordRepo.findByInspectionId(id)
108+
.orElseGet(MaintenanceRecord::new);
109+
Inspection inspection = inspectionOpt.get();
110+
record.setInspection(inspection);
111+
record.setTransformerName(resolveTransformerName(inspection));
112+
record.setInspectionDate(inspection.getInspectedDate());
113+
record.setTimestamp(defaultTimestamp(payload.timestamp()));
114+
record.setInspectorName(trimToNull(payload.inspectorName()));
115+
record.setStatus(trimToNull(payload.status()));
116+
record.setVoltage(payload.voltage());
117+
record.setCurrent(payload.current());
118+
record.setEfficiency(payload.efficiency());
119+
record.setRecommendation(trimToNull(payload.recommendation()));
120+
record.setRemarks(trimToNull(payload.remarks()));
121+
MaintenanceRecord saved = maintenanceRecordRepo.save(record);
122+
return ResponseEntity.ok(MaintenanceRecordResponse.fromEntity(saved));
123+
}
124+
79125
@GetMapping("/{id}/export")
80126
public ResponseEntity<?> exportInspection(@PathVariable String id) {
81127
return repo.findById(id).map(inspection -> {
@@ -318,6 +364,69 @@ public ResponseEntity<?> upload(@PathVariable String id,
318364
}).orElse(ResponseEntity.notFound().build());
319365
}
320366

367+
private static String trimToNull(String value) {
368+
if (!StringUtils.hasText(value)) return null;
369+
return value.trim();
370+
}
371+
372+
private static String defaultTimestamp(String candidate) {
373+
if (StringUtils.hasText(candidate)) {
374+
return candidate.trim();
375+
}
376+
return Instant.now().toString();
377+
}
378+
379+
private static String resolveTransformerName(Inspection inspection) {
380+
Transformer transformer = inspection.getTransformer();
381+
if (transformer != null && StringUtils.hasText(transformer.getTransformerNumber())) {
382+
return transformer.getTransformerNumber();
383+
}
384+
return "unknown-transformer";
385+
}
386+
387+
public record MaintenanceRecordRequest(
388+
String timestamp,
389+
String inspectorName,
390+
String status,
391+
BigDecimal voltage,
392+
BigDecimal current,
393+
BigDecimal efficiency,
394+
String recommendation,
395+
String remarks
396+
) { }
397+
398+
public record MaintenanceRecordResponse(
399+
String id,
400+
String inspectionId,
401+
String inspectionDate,
402+
String transformerName,
403+
String timestamp,
404+
String inspectorName,
405+
String status,
406+
BigDecimal voltage,
407+
BigDecimal current,
408+
BigDecimal efficiency,
409+
String recommendation,
410+
String remarks
411+
) {
412+
static MaintenanceRecordResponse fromEntity(MaintenanceRecord record) {
413+
return new MaintenanceRecordResponse(
414+
record.getId(),
415+
record.getInspection() != null ? record.getInspection().getId() : null,
416+
record.getInspectionDate(),
417+
record.getTransformerName(),
418+
record.getTimestamp(),
419+
record.getInspectorName(),
420+
record.getStatus(),
421+
record.getVoltage(),
422+
record.getCurrent(),
423+
record.getEfficiency(),
424+
record.getRecommendation(),
425+
record.getRemarks()
426+
);
427+
}
428+
}
429+
321430
@PostMapping("/{id}/analyze")
322431
public ResponseEntity<?> analyze(@PathVariable String id,
323432
@RequestParam("file") MultipartFile file,

0 commit comments

Comments
 (0)