feat: add inspection template management
This commit is contained in:
parent
fd3ffc2b79
commit
bed5f88da7
|
|
@ -0,0 +1,53 @@
|
||||||
|
package com.ether.pms.mdm.controller;
|
||||||
|
|
||||||
|
import com.ether.pms.common.ApiResponse;
|
||||||
|
import com.ether.pms.mdm.entity.InspectionTemplate;
|
||||||
|
import com.ether.pms.mdm.service.InspectionTemplateService;
|
||||||
|
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/inspection-templates")
|
||||||
|
@RequiredArgsConstructor
|
||||||
|
public class InspectionTemplateController {
|
||||||
|
|
||||||
|
private final InspectionTemplateService inspectionTemplateService;
|
||||||
|
|
||||||
|
@GetMapping
|
||||||
|
public ApiResponse<List<InspectionTemplate>> getTemplates(@RequestParam UUID projectId) {
|
||||||
|
List<InspectionTemplate> templates = inspectionTemplateService.getTemplatesByProject(projectId);
|
||||||
|
return ApiResponse.success(templates);
|
||||||
|
}
|
||||||
|
|
||||||
|
@PostMapping
|
||||||
|
public ApiResponse<InspectionTemplate> createTemplate(@Valid @RequestBody InspectionTemplate template) {
|
||||||
|
InspectionTemplate created = inspectionTemplateService.createTemplate(template);
|
||||||
|
return ApiResponse.success(created);
|
||||||
|
}
|
||||||
|
|
||||||
|
@GetMapping("/{id}")
|
||||||
|
public ApiResponse<InspectionTemplate> getTemplate(@PathVariable UUID id) {
|
||||||
|
return ApiResponse.success(inspectionTemplateService.getTemplateById(id));
|
||||||
|
}
|
||||||
|
|
||||||
|
@PutMapping("/{id}")
|
||||||
|
public ApiResponse<InspectionTemplate> updateTemplate(@PathVariable UUID id,
|
||||||
|
@Valid @RequestBody InspectionTemplate template) {
|
||||||
|
return ApiResponse.success(inspectionTemplateService.updateTemplate(id, template));
|
||||||
|
}
|
||||||
|
|
||||||
|
@PostMapping("/{id}/copy")
|
||||||
|
public ApiResponse<InspectionTemplate> copyTemplate(@PathVariable UUID id,
|
||||||
|
@RequestParam String newName) {
|
||||||
|
return ApiResponse.success(inspectionTemplateService.copyTemplate(id, newName));
|
||||||
|
}
|
||||||
|
|
||||||
|
@GetMapping("/by-type/{equipmentType}")
|
||||||
|
public ApiResponse<List<InspectionTemplate>> getTemplatesByType(@PathVariable String equipmentType) {
|
||||||
|
return ApiResponse.success(inspectionTemplateService.getTemplatesByType(equipmentType));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,65 @@
|
||||||
|
package com.ether.pms.mdm.entity;
|
||||||
|
|
||||||
|
import jakarta.persistence.*;
|
||||||
|
import lombok.Data;
|
||||||
|
import java.time.LocalDateTime;
|
||||||
|
import java.util.UUID;
|
||||||
|
|
||||||
|
@Entity
|
||||||
|
@Table(name = "ops_inspection_template")
|
||||||
|
@Data
|
||||||
|
public class InspectionTemplate {
|
||||||
|
|
||||||
|
@Id
|
||||||
|
@GeneratedValue(strategy = GenerationType.UUID)
|
||||||
|
private UUID id;
|
||||||
|
|
||||||
|
@Column(name = "project_id", nullable = false)
|
||||||
|
private UUID projectId;
|
||||||
|
|
||||||
|
@Column(name = "template_code", nullable = false, unique = true)
|
||||||
|
private String templateCode;
|
||||||
|
|
||||||
|
@Column(name = "template_name", nullable = false)
|
||||||
|
private String templateName;
|
||||||
|
|
||||||
|
@Column(name = "equipment_type", nullable = false)
|
||||||
|
private String equipmentType;
|
||||||
|
|
||||||
|
@Column(name = "inspection_items", columnDefinition = "TEXT")
|
||||||
|
private String inspectionItems;
|
||||||
|
|
||||||
|
@Column(name = "estimated_duration")
|
||||||
|
private Integer estimatedDuration;
|
||||||
|
|
||||||
|
@Column(nullable = false)
|
||||||
|
@Enumerated(EnumType.STRING)
|
||||||
|
private Status status = Status.ACTIVE;
|
||||||
|
|
||||||
|
public enum Status {
|
||||||
|
ACTIVE, INACTIVE
|
||||||
|
}
|
||||||
|
|
||||||
|
@Column(nullable = false)
|
||||||
|
private Integer version = 1;
|
||||||
|
|
||||||
|
@Column(name = "created_by")
|
||||||
|
private String createdBy;
|
||||||
|
|
||||||
|
@Column(name = "created_at")
|
||||||
|
private LocalDateTime createdAt;
|
||||||
|
|
||||||
|
@Column(name = "updated_at")
|
||||||
|
private LocalDateTime updatedAt;
|
||||||
|
|
||||||
|
@PrePersist
|
||||||
|
public void prePersist() {
|
||||||
|
createdAt = LocalDateTime.now();
|
||||||
|
updatedAt = LocalDateTime.now();
|
||||||
|
}
|
||||||
|
|
||||||
|
@PreUpdate
|
||||||
|
public void preUpdate() {
|
||||||
|
updatedAt = LocalDateTime.now();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,16 @@
|
||||||
|
package com.ether.pms.mdm.repository;
|
||||||
|
|
||||||
|
import com.ether.pms.mdm.entity.InspectionTemplate;
|
||||||
|
import org.springframework.data.jpa.repository.JpaRepository;
|
||||||
|
import org.springframework.stereotype.Repository;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Optional;
|
||||||
|
import java.util.UUID;
|
||||||
|
|
||||||
|
@Repository
|
||||||
|
public interface InspectionTemplateRepository extends JpaRepository<InspectionTemplate, UUID> {
|
||||||
|
List<InspectionTemplate> findByProjectId(UUID projectId);
|
||||||
|
List<InspectionTemplate> findByEquipmentType(String equipmentType);
|
||||||
|
Optional<InspectionTemplate> findByTemplateCode(String templateCode);
|
||||||
|
boolean existsByTemplateCode(String templateCode);
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,14 @@
|
||||||
|
package com.ether.pms.mdm.service;
|
||||||
|
|
||||||
|
import com.ether.pms.mdm.entity.InspectionTemplate;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.UUID;
|
||||||
|
|
||||||
|
public interface InspectionTemplateService {
|
||||||
|
InspectionTemplate createTemplate(InspectionTemplate template);
|
||||||
|
InspectionTemplate updateTemplate(UUID id, InspectionTemplate template);
|
||||||
|
InspectionTemplate copyTemplate(UUID templateId, String newName);
|
||||||
|
List<InspectionTemplate> getTemplatesByType(String equipmentType);
|
||||||
|
List<InspectionTemplate> getTemplatesByProject(UUID projectId);
|
||||||
|
InspectionTemplate getTemplateById(UUID id);
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,114 @@
|
||||||
|
package com.ether.pms.mdm.service.impl;
|
||||||
|
|
||||||
|
import com.ether.pms.common.BusinessException;
|
||||||
|
import com.ether.pms.common.ErrorCode;
|
||||||
|
import com.ether.pms.mdm.entity.InspectionTemplate;
|
||||||
|
import com.ether.pms.mdm.repository.InspectionTemplateRepository;
|
||||||
|
import com.ether.pms.mdm.service.InspectionTemplateService;
|
||||||
|
import lombok.RequiredArgsConstructor;
|
||||||
|
import org.springframework.stereotype.Service;
|
||||||
|
import org.springframework.transaction.annotation.Transactional;
|
||||||
|
|
||||||
|
import java.time.LocalDateTime;
|
||||||
|
import java.time.format.DateTimeFormatter;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.UUID;
|
||||||
|
|
||||||
|
@Service
|
||||||
|
@RequiredArgsConstructor
|
||||||
|
public class InspectionTemplateServiceImpl implements InspectionTemplateService {
|
||||||
|
|
||||||
|
private final InspectionTemplateRepository inspectionTemplateRepository;
|
||||||
|
private static final DateTimeFormatter CODE_FORMATTER = DateTimeFormatter.ofPattern("yyyyMMddHHmmss");
|
||||||
|
|
||||||
|
@Override
|
||||||
|
@Transactional
|
||||||
|
public InspectionTemplate createTemplate(InspectionTemplate template) {
|
||||||
|
String templateCode = generateTemplateCode();
|
||||||
|
template.setTemplateCode(templateCode);
|
||||||
|
|
||||||
|
if (template.getStatus() == null) {
|
||||||
|
template.setStatus(InspectionTemplate.Status.ACTIVE);
|
||||||
|
}
|
||||||
|
|
||||||
|
return inspectionTemplateRepository.save(template);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
@Transactional
|
||||||
|
public InspectionTemplate updateTemplate(UUID id, InspectionTemplate template) {
|
||||||
|
InspectionTemplate existing = getTemplateById(id);
|
||||||
|
|
||||||
|
if (existing.getStatus() != InspectionTemplate.Status.ACTIVE) {
|
||||||
|
throw new BusinessException(6001, "只有ACTIVE状态的模板才能更新");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (template.getTemplateName() != null) {
|
||||||
|
existing.setTemplateName(template.getTemplateName());
|
||||||
|
}
|
||||||
|
if (template.getEquipmentType() != null) {
|
||||||
|
existing.setEquipmentType(template.getEquipmentType());
|
||||||
|
}
|
||||||
|
if (template.getInspectionItems() != null) {
|
||||||
|
existing.setInspectionItems(template.getInspectionItems());
|
||||||
|
}
|
||||||
|
if (template.getEstimatedDuration() != null) {
|
||||||
|
existing.setEstimatedDuration(template.getEstimatedDuration());
|
||||||
|
}
|
||||||
|
if (template.getStatus() != null) {
|
||||||
|
existing.setStatus(template.getStatus());
|
||||||
|
}
|
||||||
|
|
||||||
|
return inspectionTemplateRepository.save(existing);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
@Transactional
|
||||||
|
public InspectionTemplate copyTemplate(UUID templateId, String newName) {
|
||||||
|
InspectionTemplate original = getTemplateById(templateId);
|
||||||
|
|
||||||
|
InspectionTemplate copy = new InspectionTemplate();
|
||||||
|
copy.setProjectId(original.getProjectId());
|
||||||
|
copy.setTemplateName(newName);
|
||||||
|
copy.setEquipmentType(original.getEquipmentType());
|
||||||
|
copy.setInspectionItems(original.getInspectionItems());
|
||||||
|
copy.setEstimatedDuration(original.getEstimatedDuration());
|
||||||
|
copy.setCreatedBy(original.getCreatedBy());
|
||||||
|
copy.setVersion(original.getVersion() + 1);
|
||||||
|
copy.setStatus(InspectionTemplate.Status.ACTIVE);
|
||||||
|
|
||||||
|
String newTemplateCode = generateTemplateCode();
|
||||||
|
copy.setTemplateCode(newTemplateCode);
|
||||||
|
|
||||||
|
return inspectionTemplateRepository.save(copy);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<InspectionTemplate> getTemplatesByType(String equipmentType) {
|
||||||
|
return inspectionTemplateRepository.findByEquipmentType(equipmentType);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<InspectionTemplate> getTemplatesByProject(UUID projectId) {
|
||||||
|
return inspectionTemplateRepository.findByProjectId(projectId);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public InspectionTemplate getTemplateById(UUID id) {
|
||||||
|
return inspectionTemplateRepository.findById(id)
|
||||||
|
.orElseThrow(() -> new BusinessException(ErrorCode.NOT_FOUND, "点检模板不存在"));
|
||||||
|
}
|
||||||
|
|
||||||
|
private String generateTemplateCode() {
|
||||||
|
String timestamp = LocalDateTime.now().format(CODE_FORMATTER);
|
||||||
|
String templateCode = "IT" + timestamp;
|
||||||
|
|
||||||
|
int suffix = 1;
|
||||||
|
while (inspectionTemplateRepository.existsByTemplateCode(templateCode)) {
|
||||||
|
templateCode = "IT" + timestamp + "_" + suffix;
|
||||||
|
suffix++;
|
||||||
|
}
|
||||||
|
|
||||||
|
return templateCode;
|
||||||
|
}
|
||||||
|
}
|
||||||
Loading…
Reference in New Issue