feat: add inspection template management

This commit is contained in:
chiguyong 2026-03-24 00:56:28 +08:00
parent fd3ffc2b79
commit bed5f88da7
5 changed files with 262 additions and 0 deletions

View File

@ -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));
}
}

View File

@ -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();
}
}

View File

@ -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);
}

View File

@ -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);
}

View File

@ -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;
}
}